Compare commits

..

1899 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7) 28980dbee6 Moodle release 2.4.6 2013-09-07 14:25:39 +02:00
Dan Poltawski 39616d39c4 MDL-41623 rss: clean output rss content 2013-09-07 10:42:02 +08:00
Eloy Lafuente (stronk7) 178af4770e MDL-41623 ensure all links are valid urls
For 23 and 24 we are modifying the default Sanitizer. Note that
for 24 and upwards we are doing the same with our extended
Sanitizer. So this is just an interim hack for those old versions.
2013-09-07 04:06:08 +02:00
Dan Poltawski fe38aff3a7 Merge branch 'install_24_STABLE' of git://git.moodle.org/moodle-install into MOODLE_24_STABLE 2013-09-05 14:43:39 +08:00
Dan Poltawski e78a2d0e44 weekly release 2.4.5+ 2013-09-05 13:35:45 +08:00
Damyon Wiese 3caeaa448e MDL-41259 ldap: Move on to the next course when create_course fails 2013-09-04 16:16:15 +08:00
Damyon Wiese 3e230a757c MDL-41259 enrol_ldap: Fix for backport branch
Use error_log instead of the newer progress trace.
2013-09-04 12:48:42 +08:00
Damyon Wiese c8b1ecedc7 Merge branch 'MDL-41485-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-09-04 12:26:39 +08:00
Damyon Wiese 4520f30def MDL-41179 assign: Ensure a submission record exists for lock/unlock
Can't change the function params because it is changed in master already.
This will create a draft submission when a student is prevented from submitting
but that is a minor sideeffect and doesn't happen in master.
2013-09-04 11:03:36 +08:00
Dan Poltawski d1af85a398 Merge branch 'wip-mdl-41418-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-09-04 10:38:34 +08:00
Eloy Lafuente (stronk7) 75cf024576 Merge branch 'MDL-41568-en_fix-24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-09-03 15:11:22 +02:00
Helen Foster b5f9a3b0e3 MDL-41568 Merge English strings from the en_fix language pack 2013-09-03 12:56:04 +02:00
Damyon Wiese 13ad8def1b Merge branch 'MDL-41348_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-09-03 16:10:13 +08:00
Tim Lock f246359c29 MDL-41304: Hide and handle LDAP error when user not in context being checked 2013-09-03 16:05:58 +08:00
Aparup Banerjee 3bc786adb1 MDL-37564 linked dependant plugin component text to plugins DB 2013-09-03 14:57:41 +08:00
Damyon Wiese e75bd18064 Merge branch 'MDL-33472-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-09-03 14:38:52 +08:00
Damyon Wiese 7a35f9f9fc Merge branch 'm24_MDL-29218_plugin_init_not_blocking_when_false' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-09-03 14:29:37 +08:00
Damyon Wiese 6026b9157d Merge branch 'MDL-32690_restoreMissingAssignment_24' of https://github.com/moodlerooms/moodle into MOODLE_24_STABLE 2013-09-03 14:16:38 +08:00
Dan Poltawski da337c3f39 Merge branch 'w36_MDL-41255_m24_changepw' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-09-03 12:59:04 +08:00
Dan Poltawski ef103c84bb Merge branch 'MDL-41428-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-09-03 12:31:12 +08:00
Dan Poltawski d65c2e5d44 Merge branch 'wip-MDL-41179-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-09-03 11:49:07 +08:00
Dan Poltawski 03b992e43b Merge branch 'wip-MDL-41317-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-09-03 10:40:41 +08:00
Dan Poltawski e8bc65a85e Merge branch 'MDL-40214_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-09-03 10:07:08 +08:00
Matteo Scaramuccia c7aac02925 MDL-29218 Repository: fixed a typo in the PHPDoc 2013-09-02 23:26:51 +02:00
Matteo Scaramuccia 832a19829b MDL-29218 Repository: $pname, get rid of all the useless code
More details in the Tracker.
2013-09-02 23:26:49 +02:00
Matteo Scaramuccia d0ddf08dc0 MDL-29218 Repository: Hide the repo if repository::plugin_init returns false 2013-09-02 23:26:48 +02:00
Dan Poltawski ed016dd8fc Merge branch 'MDL-41149-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-09-02 17:25:46 +08:00
Dan Poltawski afe1dde0c8 Merge branch 'MDL-35925-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-09-02 15:24:33 +08:00
Nitzan Bar 1fdb431dfe MDL-41259 when duplicate course shortname exists an exception is thrown and sync is aborted 2013-09-02 15:09:06 +08:00
Dan Poltawski 5a407be1d4 Merge branch 'MDL-36093-moodle24' of github.com:StudiUM/moodle into MOODLE_24_STABLE 2013-09-02 14:11:05 +08:00
Dan Poltawski 8793ba310d MDL-40676 tests: fix null byte test. 2013-09-02 13:59:26 +08:00
Petr Škoda 74d458916b MDL-40676 ignore null bytes 2013-09-02 12:28:15 +08:00
Dan Poltawski 370f95edf0 Merge branch 'MDL-41175_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-09-02 11:53:00 +08:00
Dan Poltawski 79dc70d99c Merge branch 'MDL-41328-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-09-02 11:45:08 +08:00
Andrew Nicols 4b23a6fa05 MDL-41328 Editor: Work around another iOS issue with TinyMCE
We apply this only on touchend and not touchstart or touchmove. The
location is not guaranteed until the end of the gesture, and there's no
need to keep applying focus on every move.
2013-09-02 09:41:55 +08:00
Petr Škoda 7a3b3ac4d2 MDL-41255 fix incorrect redirection logic when changing password
Credit goes to Michael Milette.
2013-08-31 11:43:27 +02:00
AMOS bot 85ed2ec89b Merge branch 'MOODLE_24_STABLE' into install_24_STABLE 2013-08-31 00:43:57 +00:00
Ankit Agarwal 2bcfd98eab MDL-41485 calendar: Replace value of action buttons on managesubscription page with int 2013-08-30 17:24:34 +08:00
Damyon Wiese 6cef890fbc weekly release 2.4.5+ 2013-08-30 09:39:54 +08:00
AMOS bot afd76d0c5d Automatically generated installer lang files 2013-08-30 00:41:50 +00:00
Mark Nielsen 0fc55f1d0a MDL-32690: Restore 1.9 backup into 2.X fails on missing assignment type
Solution is as follows:
* Allow unsupported subplugins to convert from Moodle1 to Moodle2
* On Moodle2 restore hide unsupported subplugins
* Graceful error message in assignment of unsupported subplugins
2013-08-29 08:48:39 -07:00
Jean-Philippe Gaudreau 83f27b6cca MDL-36093 grade export: Fix HTML special characters printed litteraly. 2013-08-28 09:16:34 -04:00
Tim Hunt 530e43776b MDL-41348 question code depends on filelib.
I think this used to work because mod/forum/lib.php used to be included
everywhere, and in turn included lib/formslib.php. We should declare the
dependencey explicitly.
2013-08-28 11:18:25 +01:00
Damyon Wiese 8e4c96c519 MDL-41249 assign: Fix incorrect gradingform restore step
The mapping in the previous patch was wrong - mod assign uses
the area "submissions" but the itemid is the grade->id not the submission->id.
2013-08-28 16:33:32 +08:00
Colin Campbell 7e8638914f MDL-40214 mod_assign: Fixed issue with custom scale being lost during restore. 2013-08-28 10:49:29 +08:00
Marina Glancy 36d31f8081 MDL-41317 Set correct context to send bulk message page 2013-08-28 11:07:37 +10:00
Eloy Lafuente (stronk7) d8669d5bef Merge branch 'MDL-41387_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-08-27 21:00:52 +02:00
Eloy Lafuente (stronk7) ee3433a44b Merge branch 'm24_MDL-41410_Move_Comment_To_Appropriate_Place' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-08-27 19:46:32 +02:00
Dan Poltawski 7d64b40db1 Merge branch 'MDL-41366_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-27 18:09:54 +08:00
Damyon Wiese 08d19eaeb9 Merge branch 'MDL-41401-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-08-27 15:08:43 +08:00
Dan Poltawski e3559db951 MDL-38765 quiz: fix incorrect comment 2013-08-27 13:59:24 +08:00
Dan Poltawski 4c37aadb32 Merge branch 'MDL-38765_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-27 13:53:09 +08:00
Damyon Wiese e4e6173568 Merge branch 'MDL-40877-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-08-27 12:50:04 +08:00
Damyon Wiese 58605be7f2 Merge branch 'MDL-40447_M24' of https://github.com/nadavkav/moodle into MOODLE_24_STABLE 2013-08-27 12:29:59 +08:00
Nadav Kavalerchik 9684aab5a2 MDL-37211 Backup: Migrate hard-coded strings to language string for the table header labels on the restore page 2013-08-27 11:58:04 +08:00
Dan Poltawski 4acc7c0106 Merge branch 'wip-MDL-41222-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE
Conflicts:
	lib/modinfolib.php
2013-08-27 11:08:14 +08:00
Frederic Massart 279f7582a4 MDL-41428 repository_coursefiles: Missing white space in name 2013-08-27 10:31:18 +08:00
Marina Glancy f8758dc3d3 MDL-41179 is_user_access_restricted_by_capability() must look at specified user and not current 2013-08-27 09:50:46 +10:00
Dan Poltawski 0f567efc8f Merge branch 'MDL-41291-24' of git://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-08-26 18:07:11 +08:00
Damyon Wiese 727c220c7a MDL-41213 filepicker: Version bump for css changes 2013-08-26 16:22:08 +08:00
Damyon Wiese 33fec82b0a Merge branch '41213-24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-08-26 16:20:47 +08:00
Rajesh Taneja ba55a0f6c9 MDL-41418 Administration: Page context should be set before setting page title 2013-08-26 15:27:14 +08:00
Dan Poltawski ea6deb7e09 Merge branch 'MDL-35930_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-08-26 14:56:45 +08:00
Dan Poltawski 433bba6b2f Merge branch 'MDL-36126_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-08-26 14:25:42 +08:00
Mark Nelson 0534f2dd9b MDL-36126 backup: ensure the backup_logs message does not exceed the maximum allowed length in the DB 2013-08-26 20:40:46 +08:00
Damyon Wiese 1e27536646 Merge branch 'mdl24_MDL-29004_wiki-fix-images-in-printer-friendly-view' of https://github.com/brki/moodle into MOODLE_24_STABLE 2013-08-26 13:51:21 +08:00
Dan Poltawski cd118a23e7 Merge branch 'MDL-41249-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-08-26 13:11:19 +08:00
Damyon Wiese 4e66dc96b3 Merge branch 'wip-MDL-41106-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-08-26 09:44:17 +08:00
Damyon Wiese 81ff8adcc5 MDL-36803 tinymce: Version bump for js changes 2013-08-26 09:34:15 +08:00
Damyon Wiese 527b36b905 Merge branch 'MDL-36803-m24' of https://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-08-26 09:33:41 +08:00
Russell Smith ab2d7d4f3d MDL-41291 cache: Use fread to avoid race conditions 2013-08-26 10:51:23 +10:00
Sam Hemelryk 426e9c79ac MDL-41106 cache: several fixes for the session cache.
This issue makes several fixes for the session loader and the session store.
 * maxsize argument now works for session caches.
 * fixed performance hole when interation occurs frequently.
 * fixed cache purge bug occuring when multiple caches are defined before being used.
 * improved lastaccess handling.

Big thanks to Marina who contributed the following commits:
 * Always make sure the elements in cache are sorted so we need to remove only elements in the beginning of array
 * Remove expired elements from session store to free memory
 * Minor bug fixes
2013-08-26 09:49:57 +12:00
Sam Hemelryk 2254ea48a9 MDL-41213 filepicker: corrected outline of selected file dialogue 2013-08-26 08:37:12 +12:00
Mary Evans 1be71b3131 MDL-41175 themes: Add/remove group members page broken on small screens. 2013-08-25 17:26:14 +01:00
Damyon Wiese 7064882041 MDL-41149 assign: Group submission updates emailed to wrong person
grade_item_update was altering the userid in the submission record
instead of cloning it. This meant only the last member of a group
recieved all notifications meant for other students in the group.
2013-08-25 22:18:36 +08:00
Damyon Wiese 56f24fadd4 MDL-41249 assign: Restore step missing gradingform mapping
Thanks to Matthieu Raggett for the report and the solution.
2013-08-25 21:25:49 +08:00
Matteo Scaramuccia 91b9fb3749 MDL-41410 Caching: move comment to the appropriate place.
MDL-38162 fixes the issue about testing the connection to the memcached
daemon, which means testing once the connection to the pool of servers
and not to each of the servers while being added to the pool.
It misses to move the comment to that code too.
2013-08-25 14:17:53 +02:00
AMOS bot a8416f35c5 Merge branch 'MOODLE_24_STABLE' into install_24_STABLE 2013-08-24 00:59:07 +00:00
Dan Poltawski 95899cab2f MDL-41401 backup: fix misnamed test method 2013-08-23 15:10:45 +08:00
Dan Poltawski 0d435a3d7c MDL-33472 google plugins: move helper functions to upgradelib.php
upgrade.php is reserved for the upgrade steps only. See also
MDL-34103
2013-08-23 11:34:18 +08:00
Damyon Wiese abb767192f weekly release 2.4.5+ 2013-08-23 10:33:40 +08:00
Mark Nelson f0a60c5f2f MDL-41387 tags: changed character case in string used when deleting a course 2013-08-22 17:40:12 +08:00
Dan Poltawski ee262fa7f5 Revert "MDL-36044 - Delete Icon ("X") blocks Score numbers, when in RTL mode (mod/assign , Rubrics editor)"
This reverts commit 42fabe1e87.
2013-08-22 17:36:39 +08:00
Damyon Wiese c951ff9d39 Merge branch 'wip-MDL-41196-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-08-22 11:23:17 +08:00
Dan Poltawski 17f8a9f75f Merge branch 'MDL-30839-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-22 11:18:10 +08:00
Jason Fowler 1b883b8c20 MDL-30839 Accessibility - Focusing on error on submit 2013-08-22 10:53:18 +08:00
Sam Hemelryk fc4f36be11 MDL-41196 phpmailer: fixed unit test detection 2013-08-22 14:46:42 +12:00
Dan Poltawski 5689cb3a27 Merge branch 'MDL-30839-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-22 10:15:59 +08:00
Jason Fowler 6050809347 MDL-30839 Fixing extra line breaks in error msg 2013-08-22 09:10:19 +08:00
Tim Hunt f08bce9a54 MDL-40996 & MDL-41162 quiz: fix html_writer::div use in 2.4. 2013-08-22 08:26:01 +12:00
Tim Hunt 67051eb403 MDL-41366 qbehaviour_informationitem fix name capitalisation. 2013-08-21 12:30:06 +01:00
Tim Hunt 6dc4e89073 MDL-38765 quiz view: fix duplicate message.
The "No more attempts are allowed" message was being shown twice. I
checked back, and it has been like that since before the quiz was
converted to use a renderer. Still, it looks horrible, so changing it.
2013-08-21 10:24:32 +01:00
Dan Poltawski 5f6877ddee MDL-41191 mod_forum: avoid DISTINCT on TEXT columns
It is not supported by all db engines
2013-08-21 15:48:09 +08:00
Dan Poltawski 381f53e27e Merge branch 'MDL-30839-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-21 15:18:03 +08:00
Jason Fowler 466fb01621 MDL-30839 Fixing extra line breaks in error msg 2013-08-21 15:01:59 +08:00
Frederic Massart a8f5f4b6e2 MDL-40877 repository_url: Use textlib functions instead of mb_strlen() 2013-08-21 14:00:40 +08:00
Dan Poltawski af5e39e1b6 Merge branch 'wip-MDL-36690-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-08-21 11:36:40 +08:00
Marina Glancy 661d4816df MDL-36690 Do not cache objects inside course.modinfo as they may fail to serialize
convert moodle_url (all other fields are numbers or strings) to string before caching and then back to moodle_url when restoring.
Otherwise serialized modinfo can contain \0 byte which cause problems in Postgres DB
2013-08-21 13:13:35 +10:00
Dan Poltawski 184309fa55 Merge branch 'wip-MDL-32191-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-08-21 10:45:07 +08:00
AMOS bot 26af11ece6 Automatically generated installer lang files 2013-08-21 00:43:41 +00:00
Sam Hemelryk 4bc9eec96f Merge branch 'MDL-41162_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-21 12:12:43 +12:00
Sam Hemelryk 1eb3364a9e MDL-41157 calendar: added unit test def to phpunit.xml.dist 2013-08-21 11:20:23 +12:00
Sam Hemelryk fef821d726 Merge branch 'm24_MDL-41144' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-08-21 10:59:34 +12:00
Andrew Nicols 334827b61e MDL-36803 TinyMCE: Fix TinyMCE following touch events on iOS browsers 2013-08-20 23:56:01 +01:00
Sam Hemelryk 69127087c9 Merge branch 'MDL-41157-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-08-21 10:33:30 +12:00
Sam Hemelryk b43863f6a9 Merge branch 'MDL-41196-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-08-21 09:29:31 +12:00
Damyon Wiese 86cef7fbca Merge branch 'MDL-41191-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-08-20 16:18:36 +08:00
Damyon Wiese b1cd2f8248 Merge branch 'w33_MDL-41112_m24_cachedist' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-08-20 15:21:43 +08:00
Jason Fowler 80e86364f4 MDL-35925 - File picker - Adding aria attributes to assist in accessibility 2013-08-20 14:23:23 +08:00
Damyon Wiese 59c487a7f3 Merge branch 'MDL-27595-2_24' of https://github.com/bostelm/moodle into MOODLE_24_STABLE 2013-08-20 13:53:52 +08:00
Damyon Wiese 18c49b1420 Merge branch 'MDL-41036_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-20 13:02:26 +08:00
Damyon Wiese d161d6bbe9 Merge branch 'MDL-41122_2.4' of git://github.com/kastashov/moodle into MOODLE_24_STABLE 2013-08-20 12:30:43 +08:00
Dan Poltawski 981ca84aef Merge branch 'MDL-38203_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-20 11:36:00 +08:00
Nadav Kavalerchik e8efd1fbe2 MDL-36044 - Delete Icon ("X") blocks Score numbers, when in RTL mode (mod/assign , Rubrics editor) 2013-08-20 11:08:25 +08:00
AMOS bot 796819b631 Automatically generated installer lang files 2013-08-20 00:42:28 +00:00
Marina Glancy a62d50ffb8 MDL-41222 Remove unnecessary course cache rebuild 2013-08-20 10:21:12 +10:00
Dan Poltawski 4b350436cd Merge branch 'MDL-30839-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-19 17:51:28 +08:00
Damyon Wiese 7452709d69 Merge branch 'm24_MDL-39572' of https://github.com/totara/moodle into MOODLE_24_STABLE 2013-08-19 15:44:17 +08:00
Damyon Wiese 07173cac05 Revert "MDL-41106 cache: several fixes for the session cache."
This reverts commit 4973a0cb41.
This reverts commit e3d9d02381.
This reverts commit b4aba7cac2.
2013-08-19 15:34:00 +08:00
Dan Poltawski ab97bc0a1e Merge branch 'MDL-40893-24' of https://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-08-19 14:50:18 +08:00
Damyon Wiese 79b958a4a7 Merge branch 'wip-MDL-41106-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-08-19 13:51:42 +08:00
Damyon Wiese c93707771f Merge branch 'wip-MDL-36789-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-08-19 13:16:39 +08:00
Jason Fowler 790b3da848 MDL-30839 Accessibility, Forms - Improve accessibility or error messages 2013-08-19 09:56:16 +08:00
AMOS bot da51402724 Automatically generated installer lang files 2013-08-19 00:42:38 +00:00
Sam Hemelryk 4973a0cb41 MDL-41106 cache: tidied up several elements 2013-08-19 11:31:37 +12:00
Marina Glancy e3d9d02381 MDL-41106 Cleaning up expired elements in session cache store
- Always make sure the elements in cache are sorted so we need to remove only elements in the beginning of array
- Remove expired elements from session store to free memory
- Minor bug fixes

Conflicts:
	cache/stores/session/lib.php
	cache/stores/session/tests/session_test.php
2013-08-19 11:31:11 +12:00
Andrew Nicols 3822616ba6 MDL-41196 Unit Tests: Add a phpmailer message sink 2013-08-18 16:17:35 +01:00
Nadav Kavalerchik db7d0186ee MDL-40447 Administration: Fix translation: "Profile" should be "Profile Fields" on advanced (more...) user filter form 2013-08-17 23:42:35 +03:00
Frederic Massart d0720e784e MDL-40877 core_text: Added UTF-8 safe strrchr method 2013-08-16 14:20:31 +08:00
Rossiani Wijaya c68f17dfc5 MDL-35930 filepicker filemanaer: make announcement on page change when selecting view files options 2013-08-16 12:14:22 +08:00
AMOS bot 202d7e6ad3 Automatically generated installer lang files 2013-08-16 00:42:58 +00:00
Russell Smith 5821a7c5f1 MDL-40893 backup: cache question answers for performance
To constrain memory we only cache a single question's answers.
A quiz must display this many answers, so it will not result
in undue memory pressure.

We now match on the full answer text rather than the first 255
characters.  This removes the risk of matching questions with the
same start.
2013-08-16 10:06:59 +10:00
Sam Hemelryk b4aba7cac2 MDL-41106 cache: several fixes for the session cache.
This issue makes several fixes for the session loader and the session store.
* maxsize argument now works for session caches.
* fixed performance hole when interation occurs frequently.
* fixed cache purge bug occuring when multiple caches are defined before being used.
* improved lastaccess handling.
2013-08-16 11:59:31 +12:00
Simon Coggins a6bc89e4d2 MDL-39572: Fix sql_order_by_text() to use length argument correctly 2013-08-16 11:28:47 +12:00
Simon Coggins f6868f9c9d MDL-39572: Fix existing tests and add more to demonstrate issue with sql_order_by_text() 2013-08-16 11:28:46 +12:00
Dan Marsden 1fc4e2b414 MDL-41144 enrol_flatfile: ignore deleted users 2013-08-16 09:33:12 +12:00
Dan Marsden 2f64dd6dc8 MDL-37393 SCORM: Fix existing AICC scoes to use correct parent/child relationships 2013-08-16 09:29:58 +12:00
Matteo Scaramuccia 9372820a6e MDL-37393 SCORM: Fixed PHP Strict Standards errors with AICC packages 2013-08-16 09:29:58 +12:00
Jonathon Fowler f2237bd7dc MDL-32191 navigation: Add keys to module and block settings nav nodes 2013-08-16 09:18:50 +12:00
Tim Hunt b014bb8b4c MDL-38203 multianswer qtype: feedback pop-up should be constrained.
So that, when there is a lot of feedback, it is all visible.
2013-08-15 14:16:32 +01:00
Marina Glancy b9f0a2b869 MDL-36789 Quick course cache integrity check for deleted modules 2013-08-15 21:47:50 +10:00
Tim Hunt 8fbb62c9bc MDL-41162 quiz view page: invalid HTML.
We were sometimes outputting nested p tags. Change the outer one to a
div.
2013-08-15 12:41:31 +01:00
Tim Hunt e859dfdfb8 MDL-41036 Question category info should use HTML editor
This is a minimal fix. All this code could do with a clean-up, but at
the moment, it works, so I am not going to touch it.
2013-08-15 11:58:05 +01:00
Henning Bostelmann 0efd7e9d2e MDL-27595 backup: allow course import with warnings
Proceed with import if warnings are found, but display the warnings afterwards
2013-08-15 11:22:19 +01:00
Dan Poltawski 14e8af6687 weekly release 2.4.5+ 2013-08-15 16:43:23 +08:00
Dan Poltawski 0bfeff4c5e Merge branch 'install_24_STABLE' of git://git.moodle.org/moodle-install into MOODLE_24_STABLE 2013-08-15 16:40:29 +08:00
Rossiani Wijaya a60b7797cd MDL-41200 Filepicker: Reduce the string length to fit the dialog size nicely. 2013-08-15 10:50:57 +08:00
Rossiani Wijaya 72e810ca24 MDL-41200 filepicker: change header string to select.
Add length limitation for header, so it fits nicely in mobile devices
2013-08-15 10:48:46 +08:00
AMOS bot c7b085daa0 Automatically generated installer lang files 2013-08-15 00:54:44 +00:00
Dan Poltawski 5fa41023da Merge branch 'MDL-39507_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-14 21:58:14 +08:00
Dan Poltawski 376ba9f726 MDL-41191 enrol: unit tests for enrol_get_shared_courses 2013-08-14 21:40:36 +08:00
Tim Hunt 12cc56072a MDL-39507 Question HTML export: fix image handling.
Some code got committed to stable branches that relied on a new API that
was in master only. This fixes it to use the old API.
2013-08-14 11:04:10 +01:00
Dan Poltawski 9ec19c21d2 MDL-41157 calendar: add unit tests for calendar_get_course_cached 2013-08-14 11:06:20 +08:00
Brian King 07b248886d MDL-29004 Wiki: display images in printer-friendly view 2013-08-13 10:10:06 +02:00
Dan Poltawski d835ad6935 MDL-39507 qtype_essay: hacky fix for unit tests
This is just to get the tests passing for integration purposes. Tim
may want to do a robust fix and revert this.
2013-08-13 10:47:46 +08:00
Dan Poltawski 2e91dfc66c Merge branch 'MDL-39507_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-13 09:53:31 +08:00
Sam Hemelryk c7f4deecbd Merge branch 'MDL-41045-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-08-13 10:19:05 +12:00
Sam Hemelryk 0047905f91 Merge branch 'MDL-39691_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-08-13 09:40:59 +12:00
Sam Hemelryk 452ff25284 Merge branch 'MDL-41091_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-13 09:38:20 +12:00
sam marshall 1a9dc90313 MDL-41050 Progress bar: Width parameter does not work 2013-08-13 09:29:26 +12:00
Sam Hemelryk 3155dcf541 Merge branch 'MDL-41033_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-08-13 09:21:40 +12:00
Sam Hemelryk 06737a22ea Merge branch 'MDL-40996_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-13 09:07:49 +12:00
Sam Hemelryk c5dd64f1e9 Merge branch 'MDL-30895-24' of https://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-08-13 08:45:13 +12:00
Sam Hemelryk abafd9a81b NOBUG: fixed whitespace 2013-08-13 08:41:41 +12:00
Sam Hemelryk c41a6dfcd3 Merge branch 'MDL-35931-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-13 08:37:59 +12:00
Sam Hemelryk 869a5896d0 Merge branch 'MDL-35919-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-13 08:35:23 +12:00
Sam Hemelryk f568a40ac7 Merge branch 'MDL-35934_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-08-13 08:31:59 +12:00
Tim Hunt 06a42cff90 MDL-39507 questions: fix pluginfile URLs before format_text.
This commit build's on Jean-Michel's work, tidying up a few lose ends.
2013-08-12 13:13:54 +01:00
Jean-Michel Vedrine cda91161df MDL-39507 questions: fix pluginfile URLs before format_text. 2013-08-12 10:36:40 +01:00
Dan Poltawski aa39783515 Merge branch 'MDL-27655_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-08-12 16:42:07 +08:00
Dan Poltawski f26c65003d Merge branch 'MDL-30001_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-08-12 16:13:29 +08:00
Dan Poltawski 2b4dbc30ee Merge branch 'wip-mdl-38344-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-08-12 13:52:49 +08:00
Jason Fowler cdc4b4647d MDL-35919 - Activity Chooser - Adding Aria attributes to improve accessibility 2013-08-12 13:28:03 +08:00
Rossiani Wijaya c6a86e6686 MDL-35934 Filemanager: change the set attribute to use setAttribute() instead of YUI set(). 2013-08-12 12:49:52 +08:00
Kirill Astashov 6796b5630c MDL-41122: Trim on RSS body to prevent Remote RSS block from failing on valid feeds 2013-08-12 12:37:22 +09:30
Jean-Michel Vedrine bfa8f562f7 MDL-39691 Lesson - Email graded essays not working 2013-08-11 08:09:09 +02:00
Jean-Michel Vedrine 390cb87e76 MDL-30001 WEBCT Import does not work for 2.0 2013-08-11 08:06:13 +02:00
Petr Škoda 22ecd9658c MDL-41112 fix theme and js caching info in config-dist.php 2013-08-10 23:49:30 +02:00
Rajesh Taneja ad7577e144 MDL-38344 Calendar: converted name field in event table to text
There is no limitation on length of event name in RFC-2445, so changing type
for name from char to text.
2013-08-09 13:20:41 +08:00
Rossiani Wijaya 498cc62c33 MDL-41033 Filepicker: add ARIA attributes for selecting file in a modal 2013-08-09 10:55:06 +08:00
Rossiani Wijaya ce09c74ab1 MDL-35934 filemanager: Add new string for edit 2013-08-09 10:02:39 +08:00
Rossiani Wijaya 9aa1fe0f77 MDL-35934 Filemanager: update set focus attribute.
Also limit the display string for the dialog header to fit nicely on mobile devices
2013-08-09 10:02:39 +08:00
Rossiani Wijaya 51c14ac9d3 MDL-35934 Filemanager: add aria attributes for editing file/folder.
Add unique reference ids

Conflicts:

	files/renderer.php
	mod/data/field/file/field.class.php
	mod/data/field/picture/field.class.php
2013-08-09 10:02:38 +08:00
Tim Hunt 053617fcb6 MDL-41091 questions: fix get_all_submitted_qt_vars for unit testing. 2013-08-08 14:43:28 +01:00
Jerome Mouneyrac 74f48cfa05 MDL-30895 switch from dl tag to table in the accessible chat 2013-08-08 17:50:58 +08:00
Tim Hunt 1d2247bed6 MDL-40996 quiz show user pic should also show name.
This was a regression introduced by MDL-20636 two years ago!
2013-08-08 09:57:57 +01:00
Tim Hunt 5039961852 MDL-31487 fix FEATURE_CONTROLS_GRADE_VISIBILITY for quiz.
This is a followup to MDL-18301. That fix missed the following points:

1. On the edit categories and items screens, all items had an eye-con to
control the visibility, even if the visibility was controlled by the
module.

2. Changing the visibility of a grade category change the visibility of
all items within it, even if the visibility was controlled by the
module.

3. The quiz ingored $cm->visible when controlling whether its grade item
was visible.
2013-08-08 09:56:53 +01:00
Tim Hunt be09a8982b MDL-27655 improve purge all caches.
If you click the link in the page footer, then it will reliably
redirect you back to the page you were on after purging the caches.

If you go to the purge all caches page in the admin menu, it shows you a
purge button, with no cancel button. Clicking the button purges the
caches and takes you back to the page with the button.
2013-08-08 09:56:32 +01:00
Sam Hemelryk ea3f5b5d95 weekly release 2.4.5+ 2013-08-08 16:25:49 +12:00
Sam Hemelryk a6e4a83d99 Merge branch 'install_24_STABLE' of git://git.moodle.org/moodle-install into MOODLE_24_STABLE 2013-08-08 16:19:42 +12:00
Jason Fowler ae14fe3bb6 MDL-35931 Accessibility - adding focus change when repository is selected 2013-08-08 11:30:39 +08:00
sam marshall 1a60cd4e5c MDL-41045 course_add_cm_to_section should not test for sections unless necessary 2013-08-07 17:20:59 +01:00
Mark Nelson 9e532d0ca3 MDL-40662 block_course_overview: added addinstance capability string 2013-08-07 15:20:07 +12:00
AMOS bot 00410c03d7 Automatically generated installer lang files 2013-08-07 00:43:02 +00:00
Sam Hemelryk b6a2a20236 Merge branch 'MDL-40086-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-08-07 10:36:55 +12:00
Frederic Massart 2980ec2eea MDL-40086 file: Correct ordering of subdirectories
Thanks to Mohamed Alsharaf for the proposed solution.
2013-08-06 13:55:08 +08:00
Sam Hemelryk b19a900a9b Merge branch 'MDL-34989-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-08-06 17:51:06 +12:00
Ruslan Kabalin 5878abf8c6 MDL-40947: Fix segmentation fault issue in get_fast_modinfo. 2013-08-06 17:42:19 +12:00
Marina Glancy b4b50810d4 Merge branch 'MDL-31226-MOODLE_24_STABLE' of https://github.com/lucisgit/moodle into MOODLE_24_STABLE 2013-08-06 14:40:45 +10:00
Mark Nelson eea2c47d6f MDL-27953 auth: documented the newly introduced function can_be_manually_set() in upgrade.txt 2013-08-06 15:48:19 +12:00
Mark Nielsen 164cc5f0e9 MDL-40870: Icon alt text in External Tool admin settings all read Accept 2013-08-06 14:48:47 +12:00
Sam Hemelryk 504dc60048 Merge branch 'MDL-40662_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-08-06 14:39:15 +12:00
Mark Nielsen 052f235f24 MDL-39090: Duplicate parameters in LTI launches
Removed endpoint query string params from body
to prevent param duplication.
2013-08-06 10:24:48 +12:00
Sam Hemelryk ecd106d68d Merge branch 'MDL-27953_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-08-06 10:08:39 +12:00
Sam Hemelryk 1498e85483 Merge branch 'w32_MDL-40889_m24_jsminify' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-08-06 09:54:48 +12:00
Marina Glancy ebb5c53b51 Merge branch 'MDL-36011-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-08-05 17:17:33 +10:00
Marina Glancy 93334057de Merge branch 'MDL-30852-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-08-05 13:53:35 +10:00
Shane Elliott 685ed22b13 MDL-40684 Fix conditional field name for custom user fields 2013-08-05 15:51:30 +12:00
Sam Hemelryk 86ebf30fcf Merge branch 'MDL-35922-24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-08-05 15:31:59 +12:00
Damyon Wiese 2c6fe0c698 MDL-30852 grade report: More coding guideline cleanups. 2013-08-05 11:24:06 +08:00
Damyon Wiese da6fc6fe17 MDL-30852 grade: Coding style fix for user report. 2013-08-05 11:24:06 +08:00
Steve Bader 8460efc65b MDL-30852 grade report: Add aria attributes
Converted to git branch by Damyon
2013-08-05 11:24:05 +08:00
Damyon Wiese 7d6f0b8224 Merge branch 'MDL-34989-24' of git://github.com/damyon/moodle into MDL-34989-24 2013-08-05 10:44:06 +08:00
Sam Hemelryk 9d146cf08a Merge branch 'MDL-35927_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-08-05 14:38:31 +12:00
Marina Glancy ac23d64400 Merge branch 'MDL-35981-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-08-05 12:21:56 +10:00
Damyon Wiese 1c4b87211d MDL-35981 comments: Fix for keyboard control of "add a comment" 2013-08-05 09:51:52 +08:00
Damyon Wiese 461bac938a MDL-35981 comments: Add comment about keycodes for space and enter. 2013-08-05 09:50:59 +08:00
Damyon Wiese be58294484 MDL-35981 comments: Make delete comment keyboard accessible. 2013-08-05 09:50:58 +08:00
Marina Glancy a01c00333c MDL-34785 performance improvement with big list of courses 2013-08-05 10:16:18 +10:00
Ruslan Kabalin 05342e935c MDL-31226: quiz: Fix message for attempts built on previous.
At the moment, when attempt is built on the last one, "not yet answered"
message is shown, which confuses many people. This patch modifies the state to
"complete" for attempt based on previous and modifies the output string.

Many thanks to Tim Hunt for guiding me through quiz infrastructure and some code
suggestions.
2013-08-02 17:01:50 +01:00
Petr Škoda 093aeffbea MDL-40889 prevent 304 when minimising JS 2013-08-02 16:30:05 +02:00
Damyon Wiese 822f3e1178 MDL-36011 tablelib: Make column headers expand/collapse links accessible.
Conflicts:

	theme/base/style/core.css
	theme/bootstrapbase/less/moodle/core.less
	theme/bootstrapbase/style/moodle.css
2013-08-02 11:31:24 +08:00
AMOS bot d6a0927ba1 Automatically generated installer lang files 2013-08-02 00:38:33 +00:00
Sam Hemelryk a3d12f993a weekly release 2.4.5+ 2013-08-02 08:23:56 +12:00
Sam Hemelryk 0460f175d2 Merge branch 'install_24_STABLE' of git://git.moodle.org/moodle-install into MOODLE_24_STABLE 2013-08-02 08:12:13 +12:00
Rossiani Wijaya 5d2b57a822 MDL-35927 filepicker: add aria attribute to display modal error 2013-08-01 15:41:47 +08:00
Mark Nelson 95ddab5f31 MDL-40662 block_course_overview: added addinstance capability to remove debugging message due to system context being used on the 'Default My home page' 2013-08-01 12:51:18 +08:00
Jason Fowler 057def4fa5 MDL-35922 - Adding aria attributes to create-folder modal 2013-07-31 16:41:52 +08:00
Frederic Massart d2a0dce409 MDL-40615 Repository: Updated Amazon S3 library
Fixed insecure use of CURLOPT_SSL_VERIFYHOST
2013-07-30 09:05:09 +12:00
Mark Nelson 574abfafc6 MDL-27953 auth: allowed the LDAP plugin to be manually assigned to uploaded users 2013-07-29 17:08:53 +08:00
Dan Poltawski 65f2bb0984 Merge branch 'MDL-40867_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-29 15:25:08 +08:00
Charles Fulton b7ee8b96a9 MDL-40323 report_log: fix strict standards error 2013-07-29 14:00:45 +08:00
Dan Poltawski 49ca7310a3 Merge branch 'MDL-40857_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-29 13:56:57 +08:00
Dan Poltawski 29c8710bf5 Merge branch 'MDL-40775_24' of git://github.com/grabs/moodle into MOODLE_24_STABLE 2013-07-29 13:35:23 +08:00
Dan Poltawski 397b5c063e Merge branch 'wip-MDL-29731-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-07-29 13:21:20 +08:00
Dan Poltawski 9a17f7d3cc Merge branch 'MDL-36399_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-29 12:40:29 +08:00
Dan Poltawski 929088ec57 Merge branch 'MDL-40863_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-29 10:10:09 +08:00
Damyon Wiese 336f2df35d MDL-34989 assign: Do not add a param to grading_disabled - cannot be backported.
Conflicts:

	mod/assign/locallib.php
2013-07-29 10:00:10 +08:00
Ashley Holman 214dd19aa2 MDL-34989 assign: Allow students to submit when grade is overriden
Also inform teachers when grading is disabled due to gradebook lock/override.

Conflicts:

	mod/assign/locallib.php
2013-07-29 09:59:43 +08:00
Sam Hemelryk 683fbbb8d7 Merge branch 'MDL-40878_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-29 12:54:07 +12:00
Sam Hemelryk 682f6d57cd Merge branch 'w31_MDL-40891_m24_mkdirrace' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-29 11:52:14 +12:00
Sam Hemelryk dacf5b62e8 Merge branch 'MDL-40727-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-07-29 11:48:15 +12:00
Sam Hemelryk aa713f26bd Merge branch 'MDL-40854_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-29 11:01:33 +12:00
Mark Nielsen 9da794f8aa MDL-40005: LTI module uses Apache specific function for retrieving request headers 2013-07-29 10:54:15 +12:00
AMOS bot b7c61a8b99 Automatically generated installer lang files 2013-07-28 00:42:31 +00:00
AMOS bot 0c3fe2f5f0 Merge branch 'MOODLE_24_STABLE' into install_24_STABLE 2013-07-27 00:43:13 +00:00
Petr Škoda bde942541e MDL-40891 prevent exceptions when creating directories in file store
Even if cache creation fails moodle should continue working.
2013-07-26 20:32:21 +02:00
Petr Škoda 1fed67296c MDL-40891 work around make_writable_directory() race condition
You will still get a "PHP Warning:  mkdir(): File exists" but that should not cause any problems on production sites.
2013-07-26 20:31:52 +02:00
Andreas Grabs 60c61daebe MDL-40775 mod_feedback - Undefined variable in feedback activity 2013-07-26 19:40:14 +02:00
Tim Hunt f30c9280d4 MDL-40854 fix mod/...:view capabilities
Prior to the fix, if you did not have a capability like mod/page:view,
then you woulds still see the link to the Page activity in the course
section, but when you clicked on it, you would run into a
require_capability error.

It is a principle that we never show users a link to a page they are not
allowed to access, therefore, when users do not have mod/...:view, they
should not see the link on the course page.

This patch implements this in the cm_info class, in a similar way to how
access restrictions by groups works.

It does not assume that the mod/...:view capability exists. If the
capability does not exist, then users are not prevented from seeing the
link.
2013-07-26 11:51:31 +01:00
Tim Hunt 82c3032d98 MDL-40857 External tool: fix incorrect moodle_url usage. 2013-07-26 11:41:39 +01:00
Tim Hunt 0d4706dd22 MDL-40857 External tool (LTI) capabilitiy names confusing.
I have improved the names in the language file so that they actually say
what they do (based on my reading of the code). I have also added
comments to access.php explaining each capability.

I have corrected a few of the RISK in access.php which were wrong.

I have changed a couple of the archetypes so that guests cannot launch
LTI activities, and editing teachers cannot do editing things.
2013-07-26 11:41:37 +01:00
Tim Hunt 205a3cd8a0 MDL-40867 fix misleading PHPdocs for _get_coursemodule_info 2013-07-26 10:13:29 +01:00
Tim Hunt da18133994 MDL-40867 External tools should launch pop-ups from the course page
Without this fix, if an LTI tool is set to open in a pop-up, then
clicking the link on the course page opens another almost blank page,
which then tries to open the pop-up, which is almost invariably caught
by your pop-up blocker.

With this fix, clicking the link on the course page opens the pop-up
directly, like for pop-up resources.
2013-07-26 10:13:11 +01:00
Tim Hunt 01a3633cc7 MDL-40863 feedback and LTI mods need get_extra_capabilities fn
Since moodle/site:accessallgroups is relevant to how them.
2013-07-26 10:12:53 +01:00
Tim Hunt 9bec0c088f MDL-36399 LTI editing tool config breaks on Oracle.
Note that this fix will fail if the tool URL is longer than 1333
characters.
2013-07-26 10:11:58 +01:00
Damyon Wiese cd08b5c878 weekly release 2.4.5+ 2013-07-26 11:29:20 +08:00
Marina Glancy 1cdbc04d86 MDL-29731 Bugs in recent activity when using separate groups 2013-07-24 21:52:09 +10:00
Damyon Wiese c8cada1552 MDL-40727 Cache: Fix file cache store on windows. 2013-07-24 17:11:30 +08:00
Nadav Kavalerchik ff77405577 MDL-39704 - Properly align and widen the chat bubbles in mod/chat, when in RTL mode 2013-07-23 23:23:48 +02:00
Eloy Lafuente (stronk7) 8b8bd17aac Merge branch 'w30_MDL-40679_m24_zlib' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-23 18:21:19 +02:00
Eloy Lafuente (stronk7) 9655e2e335 Merge branch 'MDL-40785_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-23 18:01:28 +02:00
Eloy Lafuente (stronk7) 4e60c378cf Merge branch 'wip-MDL-40700-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-07-23 13:58:46 +02:00
Dan Poltawski ff1fb4619b Merge branch 'MDL-20609_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-23 16:45:58 +08:00
Dan Poltawski 4523e6af16 Merge branch 'MDL-40480_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-23 16:38:48 +08:00
Jason Fowler 4f6f2013bf MDL-39748 - Grading Methods - Fixing input field widths for Rubrics 2013-07-23 14:25:06 +08:00
Dan Poltawski 9ed79d1801 MDL-40585 fix trailing whitespace 2013-07-23 13:35:16 +08:00
Dan Poltawski 066c7987b2 Merge branch 'MDL-40585_24' of git://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-07-23 13:35:07 +08:00
Dan Poltawski bb925bb8ba Merge branch 'MDL-40584_24' of https://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-07-23 12:38:39 +08:00
Sam Hemelryk 1f3be76708 Merge branch 'MDL-40680-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-07-23 14:12:35 +12:00
AMOS bot 5e0e88e5a3 Automatically generated installer lang files 2013-07-23 00:39:25 +00:00
Eloy Lafuente (stronk7) 9260f1bdd2 Merge branch 'MDL-40626-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-07-22 17:41:07 +02:00
Dan Poltawski 9dae491a94 Merge branch 'w30_MDL-38867_m24_gspell' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-22 17:01:58 +08:00
Damyon Wiese 8e3c3ac499 MDL-40260 Course overview: code tidy for previous commit
Moving this check inside the following if makes it clear which code
branch it applies to.
2013-07-22 16:16:41 +08:00
Damyon Wiese 4cf35a316e Merge branch 'm24_MDL-40260' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-07-22 16:16:27 +08:00
Damyon Wiese a04662aad4 Merge branch 'wip-MDL-40174-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-07-22 16:04:40 +08:00
Dan Poltawski c60752f45c Merge branch 'wip-MDL-37333_M24' of git://github.com/gjb2048/moodle into MOODLE_24_STABLE 2013-07-22 10:31:56 +08:00
Sam Hemelryk a62e342c3d MDL-40174 navigation: don't remove active root nodes without children 2013-07-22 10:49:13 +12:00
Sam Hemelryk ad739cd700 MDL-40700 cache: memcache and memcached stores now allow alphanumext prefixes 2013-07-22 10:41:51 +12:00
Chris Wharton 5886e039ec MDL-40700 cache: Validate memcache key prefix field 2013-07-22 10:41:50 +12:00
Petr Škoda bc6bf8d1e6 MDL-40679 mark zlib extension as recommended 2013-07-20 21:20:40 +02:00
Tim Hunt 0d62d8196e MDL-40785 question instances report: ignore subquestions
We should not count subquestions of cloze questions (parent != 0) but we
do want to count random questions (parent = id).
2013-07-19 15:17:00 +01:00
Tim Hunt 7544d10492 MDL-40480 tablelib: specify charset in XHMTL downloads.
Thanks to Jürgen Zimmer for the suggestion.
2013-07-19 11:46:05 +01:00
Tim Hunt 50a4b42ed7 MDL-20609 quiz tables: improve layout for long cell contents.
By allowing more wrapping.
2013-07-19 11:45:27 +01:00
Petr Škoda 7831560995 MDL-38867 remove Google spell checking option 2013-07-19 09:32:35 +02:00
Tim Lock 58940c96c4 MDL-40626 gradebook: Prevent incorrect override with multiline feedback
The quick grading option doesn't allow mutliline editing.
2013-07-19 12:01:55 +08:00
Damyon Wiese 1a449aa5e7 weekly release 2.4.5+ 2013-07-19 09:50:19 +08:00
Damyon Wiese 855b35604d Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-07-19 09:24:02 +08:00
Damyon Wiese 20ea7f2f79 MDL-35851 lesson: Handle importing questions into an empty lesson.
Also - make sure the page we are updating belongs to the lesson.
2013-07-18 16:52:46 +08:00
Gareth J Barnard 2d2b3c39b3 MDL-37333 theme: Fix 'Clear theme caches' redirect. 2013-07-17 17:35:22 +01:00
Damyon Wiese 9f837ac934 MDL-35851 Lesson: Check/fix the page order every time the pages are loaded 2013-07-17 13:04:54 +08:00
Marina Glancy 89478f00cd Merge branch 'MDL-40701-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-07-17 12:47:43 +10:00
Dan Poltawski e66647085e MDL-40701 mod_assignment: fix refresh events
It was getting the cm event with the wrong id and calling
deprecated functions
2013-07-17 10:31:39 +08:00
Eloy Lafuente (stronk7) d76bba6e24 Merge branch 'w29_MDL-40611_m24_accesslibtest' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-17 00:32:44 +02:00
Eloy Lafuente (stronk7) d8bbfdfbe0 Merge branch 'MDL-40536-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-07-17 00:26:57 +02:00
Petr Škoda 405d2962d2 MDL-40423 fix creation of new install.xml in subplugins 2013-07-16 21:56:40 +02:00
Damyon Wiese 4474895d37 Merge branch 'wip-MDL-40621-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-07-16 21:31:52 +08:00
Eloy Lafuente (stronk7) d9debeb038 Merge branch 'MDL-40555-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE
Conflicts:
	cache/stores/static/lib.php
2013-07-16 09:55:34 +02:00
Marina Glancy 18cf2255f0 Merge branch 'MDL-35851-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-07-16 16:12:40 +10:00
Damyon Wiese ccf721640c MDL-35851 lesson: removed expensive upgrade step.
Just deal with the bad data when displaying the lesson instead.

Conflicts:

	mod/lesson/db/upgrade.php

Conflicts:

	mod/lesson/db/upgrade.php
	mod/lesson/version.php
2013-07-16 14:08:08 +08:00
Damyon Wiese a2de489c3e Merge branch 'MDL-40195_24' of git://github.com/aolley/moodle into MOODLE_24_STABLE 2013-07-16 13:29:19 +08:00
Damyon Wiese 994d7ebdc3 Merge branch 'w29_MDL-40558_m24_guestdelete' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-16 11:29:28 +08:00
Matt Debus bc583cacfd MDL-40524: mod_wiki: Display comments in order 2013-07-16 11:26:42 +08:00
Damyon Wiese a7228f586b Merge branch 'MDL-40538_24' of https://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-07-16 10:26:56 +08:00
Rossiani Wijaya 9f124aa5ad MDL-35851 Lesson module: fix page order id for import questions. Add upgrade script to fix lesson pages corrupted links
Conflicts:

	mod/lesson/db/upgrade.php
	mod/lesson/version.php
2013-07-16 10:07:46 +08:00
Dan Poltawski f620ae6c11 MDL-40680 store_memcached: fix serialiser options
* Use correct lang string for SERIALIZER_IGBINARY
* Use PARAM_INT for the parameter
2013-07-16 09:39:16 +08:00
Sam Hemelryk 5cae1b013f MDL-40555 cache: implemented unit tests for default search functionality 2013-07-16 08:36:19 +08:00
Frederic Massart 76edea3d61 MDL-40555 cache: Static store is searchable 2013-07-16 08:35:08 +08:00
Russell Smith 558f2de1b9 MDL-40584 backup: Query db once per category in precheck
The cache is function local and testing against a large database
indicates 10k questions is a large category.  Restore already
uses MEMORY_EXTRA and that will have enough space for the couple
of megabtyes a local sql hash will introduce.
2013-07-16 08:04:16 +10:00
Eloy Lafuente (stronk7) 174405bd5d Merge branch 'wip-MDL-38747-MOODLE_24_STABLE' of https://github.com/satrun77/moodle into MOODLE_24_STABLE 2013-07-15 17:07:05 +02:00
Russell Smith 1bdb3dcd2b MDL-40585 backup: cache XML parent paths
For $this->groupedpaths, using a key is faster as there is
no need to do in_array searches.

Parent cache allows dirname calls to be substantially reduced.
2048 was chosen as a cache size as this class operates on chunks
of the restore at a time, 8k questions produces a parent cache of
about 500 paths and uses 300K of memory.  Scaling up to 2048 will
use about 1.2M of RAM for really large restores.  This is acceptable
for the 48% function call reduction and the 10% runtime improvement
seen.
2013-07-15 19:23:13 +10:00
Damyon Wiese 643786623e MDL-39563: Change to use $CFG consistently 2013-07-15 15:06:30 +08:00
Damyon Wiese ae5e95af2d Merge branch 'MDL-39563-24' of git://github.com/jleyva/moodle into MOODLE_24_STABLE 2013-07-15 15:06:08 +08:00
Marina Glancy 35dc874292 Merge branch 'MDL-40633_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-15 14:45:22 +10:00
Marina Glancy c291dd69ea Merge branch 'wip-MDL-39062-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-07-15 12:53:02 +10:00
Daniel Myers 4fae47dedc MDL-40260 block_course_overview: prevent MNET courses from being dimmed 2013-07-15 13:55:57 +12:00
AMOS bot 688c3bffbd Automatically generated installer lang files 2013-07-15 00:44:27 +00:00
Sam Hemelryk 6026121e10 MDL-39062 cache: version bump to update definitions 2013-07-15 12:02:23 +12:00
Sam Hemelryk 762789f5d7 MDL-39062 cache: persist keys now set properly 2013-07-15 12:02:01 +12:00
Petr Škoda f25af6571f MDL-40611 fix context cache size expectation 2013-07-13 15:40:26 +02:00
Tim Hunt e4f1467a75 MDL-40633 filter_urltolink breaking some image links.
This was a regression caused by MDL-22390. HTML like
<img src="http://www.example.com/logo.gif" />
was being broken.
2013-07-12 11:43:47 +01:00
Petr Škoda ddc6c118c6 MDL-40558 skip admins and guest when deleting incomplete users 2013-07-12 12:38:26 +02:00
Petr Škoda 12de66b2bf MDL-40569 fix empty CSS files after cache purging 2013-07-12 12:35:19 +02:00
Dan Poltawski 514132f8a8 MDL-40536 course/externallib fix incorrect variable
Fixes test_import_course_invalid_deletecontent_option() from the
previous commit.
2013-07-12 16:40:59 +08:00
Dan Poltawski c181c6137d MDL-40536 course: unit tests for course_external::import_course
Basic import operations and a specific test case which identifies
a bug.
2013-07-12 16:40:59 +08:00
Mohamed Alsharaf 3bf3451872 MDL-38747 blocks: course format options numsections is required to display the block 2013-07-12 20:27:24 +12:00
Damyon Wiese 2c66b71ab4 weekly release 2.4.5+ 2013-07-12 09:51:49 +08:00
Damyon Wiese 95455fc76a Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-07-12 09:42:53 +08:00
AMOS bot 658c7b8a7a Automatically generated installer lang files 2013-07-12 00:46:02 +00:00
Juan Leyva ee2316f022 MDL-39563 Fixing mobilecssurl is not being returned in WebService phpunit tests 2013-07-11 16:28:42 +02:00
Marina Glancy dd0f944141 MDL-40621 fixed small bug in function editor_tinymce_plugin::fix_row() 2013-07-11 16:45:48 +10:00
Marina Glancy 537d8f8a58 Merge branch 'MDL-38366-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-07-10 16:26:59 +10:00
Frederic Massart 2a2d53bd97 MDL-38366 repository_filesystem: Prevent use of empty subdir 2013-07-10 13:49:38 +08:00
Marina Glancy 114c924d94 Merge branch 'm24_MDL-39832_Fix_Chrome_Issues_ETag_XSendfile_2ndRound' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-07-10 12:03:57 +10:00
Raymond Wijaya 622425d2fb MDL-40093 mod/assign: Remove count of drafts in offline assignment's grading summary screen 2013-07-10 11:36:53 +10:00
Russell Smith 2215cc347a MDL-40538 caching: Use isset for performance
isset is much faster than array_key_exists. For caches we need to
ensure as much performance as possible. To all null to continue to
be stored and provide correct results, non ttl also now saves in
$this->store[$key][0].  As isset($this->store[$key]) will return
true in all cases.

time() as found in cache::now() can be slow on some platforms and
we shouldn't bother checking it unless needed. It also stops non-ttl
caches paying the ttl price.

Unit tests were adjusted to ensure null is still handled correctly
when we are only using isset.
2013-07-10 10:42:51 +10:00
Marina Glancy ed79029f0e Merge branch 'MDL-40441_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-10 10:03:44 +10:00
Sam Hemelryk 286232d695 Merge branch 'w28_MDL-40450_m24_tinymcebuttons' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-10 11:01:48 +12:00
Sam Hemelryk 97d98e9920 Merge branch 'MDL-40527_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-10 10:30:29 +12:00
Sam Hemelryk 3b0c725de1 Merge branch 'm24_MDL-40512' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-07-10 10:09:49 +12:00
Damyon Wiese 4dcd073864 Merge branch 'MDL-39420_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-09 22:44:21 +08:00
Damyon Wiese 800c5757c3 Merge branch 'MDL-36479_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-09 22:27:59 +08:00
Tim Hunt 4cc817aa33 MDL-39420 multichoice: fix layout of multi-line choices. 2013-07-09 11:57:07 +01:00
Tim Hunt 41ffd24e82 MDL-40441 fix obscure notice in the quiz.
This can only happen if you have both a user with both a real attempt
and a preview, and then edit the quiz settings.

Also clean up this code a bit.
2013-07-09 10:45:33 +01:00
Damyon Wiese 1f304be72c Merge branch 'MDL-40443_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-09 15:16:32 +08:00
Jamie Pratt 304343830b MDL-40176 mock_submit method for testing
Conflicts:

	lib/formslib.php
2013-07-09 15:09:56 +08:00
Damyon Wiese d3dc9a334c Merge branch 'MDL-40499_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-07-09 13:27:05 +08:00
prateeksachan bb6cacb913 MDL-40386: Fix for updating timemodified field in book_chapters 2013-07-09 12:35:18 +08:00
Jamie Pratt 4eff6ed9fe MDL-40388 Reset globals after each unit test 2013-07-09 11:56:53 +08:00
Tony Levi 954ba4bce4 MDL-40035: Avoid rebuild_course_cache always for empty course 2013-07-09 13:55:46 +10:00
Damyon Wiese b7aac8b6d1 Merge branch 'MDL-40318_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-09 11:13:23 +08:00
Marina Glancy be9cd2ff26 Merge branch 'MDL-40434_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-07-09 11:33:20 +10:00
Tim Lock b719bf20b4 MDL-40436: auth_ldap: Fixed warning when adding new LDAP users 2013-07-08 23:02:22 +08:00
Adam Olley d79c15550f MDL-40195: mod_assign: Display grades when quickgrading to 2 decimal places 2013-07-08 20:07:12 +09:30
Damyon Wiese 92cfad95c8 Merge branch 'MDL-38314-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-07-08 16:40:39 +08:00
Frederic Massart f4f853f8cd MDL-38314 repository: Removed >= 2.5 code logic 2013-07-08 16:40:21 +08:00
Damyon Wiese 51cefce972 Merge branch 'MDL-38314-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE
Conflicts:
	version.php
2013-07-08 15:16:42 +08:00
Petr Škoda f0be68a15e MDL-40450 update links to TinyMCE 3.x docs 2013-07-07 16:12:29 +02:00
Matteo Scaramuccia c8d8b400f9 MDL-39832 Files: Fixed ETag format according with RFC2616.
ETag must be double quoted,
http://tools.ietf.org/html/rfc2616#section-3.11:

      entity-tag = [ weak ] opaque-tag
      weak       = "W/"
      opaque-tag = quoted-string
2013-07-07 09:19:15 +02:00
Matteo Scaramuccia 6ef0160a64 MDL-39832 Files: Revert MDL-39688 commit, 7c742620d2
MDL-39688 has been successful in providing a solution for the issue but further
investigations done in MDL-39832 have got the evidence that the given solution
is more likely a workaround.
2013-07-07 09:19:14 +02:00
Eloy Lafuente (stronk7) 919251f295 Moodle release 2.4.5 2013-07-06 17:56:11 +02:00
Tim Hunt 712bcc3e09 MDL-40527 enrol meta: respect $CFG->courselistshortnames
Thanks to James Henestofel for working this out in MDL-37558. That issue
got complex, so I am just submitting this simple part of it for
integration.
2013-07-05 15:37:09 +01:00
Dan Marsden ed928e942c MDL-40512 SCORM: prevent undefined warning 2013-07-05 12:09:59 +12:00
Jean-Michel Vedrine a16ec93666 MDL-40499 Edit question from 1.9 backup breaks if images in subdirs 2013-07-04 15:07:46 +02:00
Tim Hunt 28c8189c7f MDL-40443 setType notice in quiz reports. 2013-07-04 12:34:55 +01:00
Tim Hunt c004ced96b MDL-40318 quiz intro comprising just an impage was not shown
Also, ensure that we don't output an empty box if there are no access
messages.
2013-07-04 12:34:21 +01:00
Tim Hunt ef84ab84bf MDL-36479 quiz regrade: use progress bar to prevent time-outs 2013-07-04 12:33:25 +01:00
Damyon Wiese b5906ea400 weekly release 2.4.4+ 2013-07-04 15:33:31 +08:00
Damyon Wiese 76e6fbd776 MDL-40308: Fix javascript for lti mod_form
It was toggling the state of the hidden input - not the checkbox.
2013-07-04 13:47:36 +08:00
Frederic Massart 7e51747ede MDL-38314 repository: Improving performance of upgrade script 2013-07-03 16:28:28 +08:00
Frederic Massart 22785530b9 MDL-38314 repository: Remove orphan repository instances 2013-07-03 16:28:25 +08:00
Frederic Massart d8732ee8b7 MDL-38314 repository: Delete repository instances on context deletion 2013-07-03 16:27:08 +08:00
Frederic Massart c11ea21997 MDL-38314 repository: Unit Tests for delete_all_for_context() 2013-07-03 16:27:08 +08:00
Michael Aherne 1619a06942 MDL-40275 core Improve documentation for block_base::has_config() 2013-07-02 21:53:17 +02:00
Eloy Lafuente (stronk7) bc6835b1d1 MDL-37516 Translate fieldnames on output only.
This reverts a change performed by the previous commit where user
fieldnames were being translated (and cached) when fetched,
causing the information to remain static later, not responding
to language switches (and perhaps leading to other problems if those
structures are used lated for DB / $USER comparisons.

With the commit, the translation happens on output, so no
potential interferences will happen and, also, the information
changes dynamically on lang switching.
2013-07-02 21:03:10 +02:00
sam marshall 122d59390f MDL-37516 Conditional activities: user field condition display fixes 2013-07-02 21:03:04 +02:00
Eloy Lafuente (stronk7) cb4beb2d2c Merge branch 'MDL-40439-en_fix_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-07-02 13:48:02 +02:00
Helen Foster c3f4867a41 MDL-40439 Merge English strings from the en_fix language pack 2013-07-02 11:51:45 +02:00
Tim Hunt ca6904b6c9 MDL-40434 calculatedmulti multiple-response questions not randomised 2013-07-02 08:24:01 +01:00
Damyon Wiese 955172a5a0 Merge branch 'wip-MDL-40353-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-07-02 14:29:28 +08:00
Dan Poltawski d1e2ee9eec Merge branch 'MDL-40297_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-07-02 13:43:57 +08:00
Andreas Grabs 5832a8f737 MDL-39570 mod_feedback - Missing privilege check 2013-07-02 13:35:49 +08:00
Dan Poltawski 1edad3fd90 Merge branch 'w27_MDL-40399_m24_msarrayshift' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-02 13:33:49 +08:00
Dan Marsden 01d2c82e1b MDL-39628 Chat: check mod/chat:chat capability when using daemon.
Thanks to Francois Gauthier for report/fix.
2013-07-02 12:20:25 +08:00
Jason Fowler 4b450df00d MDL-37818 - RSS - Prevent access to blocks while RSS context errors are displayed 2013-07-02 10:04:21 +08:00
Dan Poltawski e09fc9f3c1 Merge branch 'w27_MDL-40266_m24_arrayshift' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-02 09:55:33 +08:00
Eloy Lafuente (stronk7) ea0b123d07 Merge branch 'get_users_by_capability_fix_m24' of http://github.com/timgus/moodle into MOODLE_24_STABLE 2013-07-02 00:46:51 +02:00
Rossiani Wijaya 301d9518ed MDL-39546 Lesson module: removed duplicate to decode special characters 2013-07-02 09:36:06 +12:00
Rossiani Wijaya 3c108a95df MDL-39546 Lesson module: fixed matching question issues. 2013-07-02 09:35:52 +12:00
Eloy Lafuente (stronk7) 8ae15861de Merge branch 'w27_MDL-39754_m24_evn26' of https://github.com/skodak/moodle into MOODLE_24_STABLE 2013-07-01 23:14:16 +02:00
Petr Škoda ec99b59381 MDL-39754 copy 2.5 requirements to Moodle 2.6
Optional features and warnings may be added later,
but we need at least required environment for 2.5.1

This includes database family cleanup and more realistic memory requirement.
2013-07-01 10:03:51 +02:00
Petr Škoda 1596dca3d0 MDL-40266 improve emulate_bound_params() for mssql driver
Looping over large numbers of items with array_shift() is expensive.
Reverse the array and fetch items from the top of the pile.

Credit goes to Martin Langhoff for original mysqli fix.
2013-07-01 08:53:28 +02:00
Petr Škoda ba8a53a4f9 MDL-40266 improve emulate_bound_params() for sqlsrv driver
Looping over large numbers of items with array_shift() is expensive.
Reverse the array and fetch items from the top of the pile.

Credit goes to Martin Langhoff for original mysqli fix.
2013-07-01 08:53:27 +02:00
Mark Nielsen 86e56e40bd MDL-40308: Privacy settings do not change
Update LTI mod form so checkboxes always submit their value.
2013-07-01 11:27:32 +08:00
Dan Poltawski 3db9731fb6 Merge branch 'wip-MDL-40344-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-07-01 11:22:20 +08:00
Sam Hemelryk 3d6b490b81 NOBUG: fixed whitespace 2013-07-01 13:24:50 +12:00
Martin Langhoff 2122af37b6 MDL-40266 improve emulate_bound_params() for mysqli
Looping over large numbers of items with array_shift() is expensive.
Reverse the array and fetch items from the top of the pile.
2013-06-30 18:40:18 +02:00
Eloy Lafuente (stronk7) c45ca47759 MDL-40297 whitespace, comments & var names cleanup 2013-06-30 16:49:13 +02:00
Dmytro Vorona d121290607 MDL-40297 Hide empty categories in my courses
This is a followup of MDL-38631 were was detected that
whith categories being displayed in my courses, some of
them, not having courses for the user, were still shown.

With this patch, any category in the tree, not having courses
is automatically hidden, any depth.
2013-06-30 16:49:08 +02:00
David Mudrák bdd014e2c2 MDL-35206 Fix the links list enumeration in the html2text library 2013-06-28 13:14:48 +02:00
Sam Hemelryk 7bcdac4882 MDL-40344 navigation: expandable branch id is now properly unique 2013-06-28 09:58:59 +12:00
Eloy Lafuente (stronk7) c982630a94 weekly release 2.4.4+ 2013-06-27 20:11:52 +02:00
Eloy Lafuente (stronk7) dc56547079 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-06-27 20:05:24 +02:00
Marina Glancy fe4bb9a3f6 MDL-40353 fixed wrong redirection on course group page 2013-06-27 13:50:43 +10:00
AMOS bot 96cf04159c Automatically generated installer lang files 2013-06-27 00:40:26 +00:00
Eloy Lafuente (stronk7) 1de08a0e60 Merge branch 'MDL-40264-m24-essay-zero' of git://github.com/ktemkin/moodle into MOODLE_24_STABLE 2013-06-24 21:23:34 +02:00
Eloy Lafuente (stronk7) 4207e4771a Merge branch 'MDL-34610_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-06-24 20:21:47 +02:00
Eloy Lafuente (stronk7) 81c7328717 Merge branch 'MDL-40255_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-06-24 19:26:32 +02:00
Matteo Scaramuccia da660f362b MDL-40200 Administration: Return the invalid user message and stop there
To avoid adding duplicate code, 'invalid user' and 'user deleted' checks
have been merged together.
2013-06-24 19:01:08 +02:00
Sam Chaffee 4417a705cf MDL-40258: Fixed invalid json string error in file-picker 2013-06-24 18:57:08 +02:00
Ankit Agarwal cc6641f040 MDL-40250 phpunit: Add unit tests for core_files_external::upload() 2013-06-24 18:10:04 +02:00
Jason Fowler 6e4059838c MDL-39044 - Course Completion - Replaceing strtolower with multibyte safe textlib::strtolower
Conflicts:
	blocks/completionstatus/details.php
2013-06-24 15:46:34 +12:00
Sam Hemelryk 211c473452 Merge branch 'MDL-39760-MOODLE_24_STABLE' of https://github.com/lucisgit/moodle into MOODLE_24_STABLE
Conflicts:
	mod/assign/locallib.php
2013-06-24 14:29:21 +12:00
Sam Hemelryk 9505fcffe4 Merge branch 'MDL-39280-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-06-24 14:08:47 +12:00
Sam Hemelryk 7759839612 MDL-38347 fixed whitespace 2013-06-24 11:29:34 +12:00
Sam Hemelryk 9cf6081027 Merge branch 'wip-MDL-38347-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-06-24 11:21:54 +12:00
Sam Hemelryk 6d4fe99033 Merge branch 'MDL-28124_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-06-24 10:29:06 +12:00
Amanda Doughty bf296d3cf3 MDL-38376 mod_assign: Feedback displayed when Grade set to hidden 2013-06-24 10:19:53 +12:00
Mary Evans 98159ddec2 MDL-40255 theme_boxxie/theme_formfactor: Added block-region class to layout files to enable dnd file uploader to work. 2013-06-22 21:26:20 +01:00
Marina Glancy 2c8e21ac35 MDL-38631 link categories in My courses only when needed 2013-06-22 16:21:30 +10:00
Dmytro Vorona 073a972375 MDL-38631 Fixed faulty add_category call, introduced in 758103 2013-06-22 16:21:29 +10:00
Tim Hunt 40818b7d48 MDL-34610 remove legacy IE CSS. It breaks form layout 2013-06-21 21:57:45 +01:00
Kyle Temkin b64526c715 MDL-40264 fix essay handling of zero-string response
Fixes an inappropriate behavior of the is_complete_response() function
for the Essay question type, which caused the string "0" to be
inappropriately marked as an incomplete response.

Also adds a set of unit tests for the Essay question type's
is_complete_response.
2013-06-21 03:28:59 -04:00
Dan Poltawski 8be321e3d9 weekly release 2.4.4+ 2013-06-21 13:29:18 +08:00
Tim Gus 134a6ddcf0 MDL-40259 - For SCORM reports limit fields returned from
get_users_by_capability to user ID to decrease memory utilization
2013-06-20 15:56:47 -04:00
Ruslan Kabalin 478cac84e1 MDL-39760: mod_assign: Add few more callback methods.
Adds lock, unlock and release_to_draft. All of them accept single parameter -
an assign_submission record.
2013-06-19 15:35:17 +01:00
Ruslan Kabalin c07c4324c7 MDL-39760: mod_assign: Make submit_for_grading accept submission as parameter. 2013-06-19 15:35:16 +01:00
Marina Glancy bebd6a6cef Merge branch 'MDL-40207-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-06-18 15:39:55 +10:00
Marina Glancy 272105604a Merge branch 'MDL-39650-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-06-18 14:13:10 +10:00
Ruslan Kabalin 8401eb9425 MDL-33546: course: Fix current week hightlighting after dragging the section 2013-06-18 13:04:43 +10:00
Marina Glancy 2e6cc99352 Merge branch 'MDL-40165-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-06-18 12:56:20 +10:00
Sam Hemelryk 23f186b5c8 Merge branch 'MDL-40036-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-06-18 13:58:48 +12:00
Marina Glancy af06f5def5 Merge branch 'MDL-38079_24' of git://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-06-18 11:14:52 +10:00
Sam Hemelryk 46c30b7e1b Merge branch 'wip-mdl-39863-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-06-18 11:19:22 +12:00
Sam Hemelryk c8802b6e6c Merge branch 'MDL-40109_24' of git://github.com/dmonllao/moodle into MOODLE_24_STABLE 2013-06-18 11:07:48 +12:00
Eloy Lafuente (stronk7) 392aa3ff35 Merge branch 'MDL-33562-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE
Conflicts:
	version.php
2013-06-18 00:46:59 +02:00
Sam Hemelryk 5008f4fffd Merge branch 'MDL-30132_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-06-18 10:26:27 +12:00
Sam Hemelryk 7b8783b751 Merge branch 'wip-MDL-40159-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-06-18 09:04:27 +12:00
Russell Smith 8fb30e9d1f MDL-38079 mod_feedback - Hide "add question to activity" button 2013-06-17 20:00:05 +10:00
Marina Glancy dfdea57b26 MDL-40159 Fixing bug with empty variable, regression from MDL-21097 2013-06-17 14:26:10 +10:00
Sam Hemelryk c4eab12234 Merge branch 'm24_MDL-40095_Completion_locked_Error_on_save' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-06-17 16:09:52 +12:00
Sam Hemelryk 57efe7bdba Merge branch 'MDL-21933_24' of https://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-06-17 15:45:16 +12:00
Sam Hemelryk 11270c4b2d Merge branch 'wip-MDL-40091-MOODLE_24_STABLE' of git://github.com/satrun77/moodle into MOODLE_24_STABLE 2013-06-17 15:43:07 +12:00
Dan Poltawski f7c0e172c6 MDL-40207 simplepie: reduce false failures in unit tests
The simplepie tests time out too quickly due to a low connect timeout,
to fix this, I converted the unit tests to use a high timeout value.
2013-06-17 10:59:41 +08:00
Sam Hemelryk 79cb5006f9 Merge branch 'MDL-39761-MOODLE_24_STABLE' of https://github.com/lucisgit/moodle into MOODLE_24_STABLE 2013-06-17 14:26:13 +12:00
Sam Hemelryk bea68c50d6 MDL-40142 navigation: fixed chainable issue with navigation JS 2013-06-17 09:15:20 +12:00
Mary Evans 288ab0b16c MDL-28124 admin/tool/customlang: Changed page layout from 'standard' to 'report'. 2013-06-15 00:12:01 +01:00
Mohamed Alsharaf 4978c2ae05 MDL-40091 book: revision must be incremented after editing a chapter 2013-06-14 21:27:09 +12:00
Marina Glancy f5dd4b478c weekly release 2.4.4+ 2013-06-14 13:49:30 +10:00
Andrew Nicols bcdda24942 MDL-40165 Backup: Split out test classes into multiple files 2013-06-13 08:58:02 +01:00
Dan Poltawski 8c12e634ea Revert "MDL-39832 Files: Revert MDL-39688 commit, 7c742620d26bdba53e136fda293d33b5271ce241"
This reverts commit 6c227b64e2.
2013-06-13 13:57:32 +08:00
Dan Poltawski 433222d6c0 Revert "MDL-39832 Files: Fixed ETag format according with RFC2616."
This reverts commit 20043f4392.
2013-06-13 13:57:30 +08:00
Russell Smith d39e66a6cd MDL-21933 course: Allow users to search participants course permission
Capability checks are performed at the top of the page and do not need
to be completed again.

Search is an expected feature for users and it was confusion to only
appear after 3 pages.  This has been changed to enable search when
there are more records than are visible on the screen.  If users
are unable to use browser search, they will be able to use Moodle's
search.
2013-06-13 12:44:17 +10:00
Mary Evans bce7ef0bd5 MDL-30312 User: Changed page layout from mydashboard to mypublic in user/profile.php 2013-06-12 21:27:17 +01:00
Dan Poltawski 6e74e428af Merge branch 'MDL-39472-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-06-12 14:16:43 +08:00
Sam Hemelryk 0ad16081a2 Merge branch 'MDL-39964-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-06-12 09:02:27 +12:00
Sam Hemelryk 8fd47854a6 Merge branch 'MDL-25901-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-06-12 09:00:01 +12:00
Dan Poltawski e7d8c56098 Merge branch 'wip-MDL-40100-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-06-11 15:36:37 +08:00
Sam Hemelryk ffb486a996 Merge branch 'MDL-26925-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-06-11 17:31:24 +12:00
Sam Hemelryk 2a31efea1b Merge branch 'MDL-39505-migrate-file-backport_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-06-11 17:16:15 +12:00
Sam Hemelryk c1dfb624bf Merge branch 'MDL-22390_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-06-11 17:07:33 +12:00
Dan Poltawski 1ebac4eab3 Merge branch 'm24_MDL-40002_ETag_value_must_be_a_quoted-string' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-06-11 12:54:48 +08:00
Rajesh Taneja c5250462f6 MDL-39863 Administration: Show confirmation/notice and don't redirect automatically 2013-06-11 10:24:53 +08:00
Marina Glancy 351f4729e2 Merge branch 'MDL-39412_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-06-11 12:02:01 +10:00
Sam Hemelryk b26a15ff67 Merge branch 'MDL-39454-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-06-11 12:26:42 +12:00
Matteo Scaramuccia f41aaa2551 MDL-40095 SCORM: Trivial comments tidy up 2013-06-10 21:05:05 +02:00
Matteo Scaramuccia dc44a83f83 MDL-40095 SCORM: Fixed DML error when saving with completion options locked
Regression caused by MDL-38315.
2013-06-10 21:04:54 +02:00
Dan Poltawski a3ad98f25d Merge branch 'MDL-39947_24' of https://github.com/aolley/moodle into MOODLE_24_STABLE 2013-06-10 16:20:45 +08:00
Dan Poltawski 9ab6e7d851 Merge branch 'm24_MDL-39832_Fix_Chrome_Issues_ETag_XSendfile' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-06-10 15:43:15 +08:00
Dan Poltawski 24e89189a7 Merge branch 'MDL-40018_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-06-10 15:00:32 +08:00
David Mudrák 48919dba12 MDL-40080 Remove unused strings from the core_hub subsystem 2013-06-10 14:42:10 +08:00
David Monllao 3f7511f022 MDL-40109 format_weeks: Removing extra space 2013-06-10 13:31:54 +08:00
Dan Poltawski e4737333eb Merge branch 'MDL-39667-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-06-10 12:51:44 +08:00
Dan Poltawski e9ec512875 Merge branch 'w24_MDL-28394_m24_enrolrestore' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-06-10 12:17:14 +08:00
Dan Poltawski 60a6533433 Merge branch 'm24_MDL-37968' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-06-10 12:10:15 +08:00
Sam Hemelryk 4fe8c2c799 Merge branch 'MDL-40009_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-06-10 15:54:52 +12:00
Sam Hemelryk 5dbb8b3909 Merge branch 'w24_MDL-39549_m24_cohortsearch' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-06-10 15:47:49 +12:00
Sam Hemelryk e7b6fc35bf Merge branch 'MDL-39971_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-06-10 15:09:28 +12:00
Sam Hemelryk 1db4d513a7 Merge branch 'w24_MDL-32480_m24_imscp' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-06-10 14:40:53 +12:00
Sam Hemelryk 4964633e3a Merge branch 'MDL-36090_log2_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-06-10 12:30:46 +12:00
Sam Hemelryk 5dc899f004 MDL-40100 cache: removed unneeded includes from add instance forms 2013-06-10 10:26:35 +12:00
Matteo Scaramuccia 8348ec06ea MDL-40002 Files: ETag value must be a quoted-string.
ETag value must be double quoted, http://tools.ietf.org/html/rfc2616#section-3.11.
More details about potential impacts in MDL-39832: shortly, at least when using
HTTP Partial GET Requests (HTTP Status: 206) plus X-Sendfile HTTP Header.
In this commit, the impact is to be RFC2616 compliant when using the ETag Header.
2013-06-09 10:19:03 +02:00
Tim Hunt d80b2c736e MDL-22390 autolink filter: handle URLs in brackets better.
This breaks some legitimate URLs like
http://en.wikipedia.org/wiki/Slash_(punctuation).
This is a necessary trade-off. Many other web systems do not handle that
case correctly either. The work-around it so escape the ) as %29.

This commit also improves the way the unit tests for this work.

It also fixes a couple of other tricky cases that were spotted in
the forums while this was being discussed. See the new test cases.
2013-06-08 16:55:00 +01:00
Petr Škoda 69d963254e MDL-39549 fix cohort search in course categories 2013-06-07 22:08:50 +02:00
Petr Škoda 24c954c181 MDL-28394 fix enrolment method restore logic
This patch fixes:
* missing enrolment methods after 1.9 backup restore - defaults are added
* enrolment methods are restored only when users option is enabled
* manual enrolment override option is disabled if users not available
2013-06-07 10:04:06 +02:00
Petr Škoda 1cf70434e2 MDL-32480 allow external https links in IMSCP too 2013-06-07 09:59:50 +02:00
Nicolas Dunand 0454409240 MDL-32480 fix display of IMS content packages with external links 2013-06-07 09:59:49 +02:00
Dan Marsden 13cea3d030 MDL-37968 course_overview: add dim class to hidden courses for teachers. 2013-06-07 14:40:01 +12:00
Matteo Scaramuccia 20043f4392 MDL-39832 Files: Fixed ETag format according with RFC2616.
ETag must be double quoted,
http://tools.ietf.org/html/rfc2616#section-3.11:

      entity-tag = [ weak ] opaque-tag
      weak       = "W/"
      opaque-tag = quoted-string
2013-06-06 23:09:46 +02:00
Matteo Scaramuccia 6c227b64e2 MDL-39832 Files: Revert MDL-39688 commit, 7c742620d2
MDL-39688 has been successful in providing a solution for the issue but further
investigations done in MDL-39832 have got the evidence that the given solution
is more likely a workaround.
2013-06-06 23:09:45 +02:00
Petr Škoda d4eb62d66b MDL-37780 fix 1.9 restore on windows 2013-06-06 12:26:29 +02:00
Dan Poltawski 031e2352da MDL-26925 User selector: Set label when no results
Thanks to Jonathon Fowler for the fix!
2013-06-06 14:09:59 +08:00
Frederic Massart 29c2cafaee MDL-40036 user: Respect capability to ignore user quota 2013-06-06 12:43:10 +08:00
Dan Poltawski 6c413970b7 weekly release 2.4.4+ 2013-06-06 12:00:38 +08:00
Dan Poltawski 60fcc78c1f Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-06-06 11:55:29 +08:00
Dan Poltawski 91f07e7e8b MDL-25901 rss: do not copyright html tag
They copyright field does not permit html, it should be plain text
2013-06-06 11:30:50 +08:00
Eloy Lafuente (stronk7) 520f292699 Merge branch 'wip-MDL-21097-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-06-05 10:36:31 +02:00
Marina Glancy 82f43805fe MDL-21097 Correctly check capabilities for frontpage editing mode 2013-06-05 18:07:43 +10:00
Dan Poltawski cbb612d2bf MDL-39964 report_progress: don't browser sniff for SVG support
Use feature detection, its more robust and better practice.
2013-06-05 15:40:55 +08:00
Dan Poltawski 64a21db766 Merge branch 'wip-MDL-21097-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-06-05 13:10:46 +08:00
Marina Glancy 84031db72b MDL-21097 corrected course editing roles 2013-06-05 14:25:13 +10:00
Andrew Davis 4dd5ce20ff MDL-36090 core_grade: added logging of overriding of student grades 2013-06-05 08:58:16 +08:00
Eloy Lafuente (stronk7) 960a321544 Merge branch 'mdl24-MDL-39409-auth-cas-use-moodle-web-proxy' of https://github.com/brki/moodle into MOODLE_24_STABLE 2013-06-05 02:46:40 +02:00
Eloy Lafuente (stronk7) 13c6a81607 Merge branch 'w23_MDL-39416_m24_pagelog' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-06-05 02:43:59 +02:00
Eloy Lafuente (stronk7) f078a515c7 Merge branch 'MDL-38731-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-06-05 02:31:04 +02:00
Eloy Lafuente (stronk7) 58d9daa435 Merge branch 'MDL-37332-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-06-05 02:27:41 +02:00
Eloy Lafuente (stronk7) 416b9b3803 Merge branch 'm24_MDL-38545_PHP_Strict_error' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-06-05 02:23:21 +02:00
Eloy Lafuente (stronk7) b0237a093f Merge branch 'wip-MDL-21097-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-06-05 01:43:25 +02:00
Mary Evans b9cdd1150e MDL-40018 theme_sky_high: Fixed footer in admin pages. 2013-06-05 00:20:56 +01:00
Mark Nelson 118242be26 MDL-40009 notes: corrected the form element names passed to setType 2013-06-04 18:08:50 +08:00
Dan Poltawski 7165b1586f Merge branch 'MDL-39945_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-06-04 15:54:12 +08:00
Dan Poltawski 09b91f0fff Merge branch 'MDL-39835_M24' of github.com:lazydaisy/moodle into MOODLE_24_STABLE 2013-06-04 14:45:09 +08:00
Dan Poltawski d000c1a380 Merge branch 'MDL-39536-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-06-04 13:20:56 +08:00
Frederic Massart e4ddfbe0f8 MDL-39536 completion: Unit tests for get_activities and has_activities 2013-06-04 12:57:53 +08:00
Frederic Massart 25f9cba3d2 MDL-39536 completion: Prevent DB call when fetching activities 2013-06-04 12:57:53 +08:00
David Mudrák b9e16a5137 MDL-39939 Fix the basic SCORM report plugin name 2013-06-04 12:27:51 +08:00
Dan Poltawski 4802b1ed8e Merge branch 'MDL-39317-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-06-04 11:26:45 +08:00
Dan Poltawski 0dc499ec7f Merge branch 'MDL-39743-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-06-04 11:03:55 +08:00
Dan Poltawski 4c8664099e Merge branch 'wip_24_mdl-34085' of https://github.com/iarenaza/moodle into MOODLE_24_STABLE 2013-06-04 10:43:18 +08:00
AMOS bot d86662e14e Automatically generated installer lang files 2013-06-04 00:46:36 +00:00
Marina Glancy fc97a877fd MDL-39801 navigation_node::remove does not allow to insert nodes afterwards 2013-06-04 02:03:31 +02:00
Marina Glancy d60d1d0db8 MDL-39801 navigation_node::remove fails if first child does not have a key 2013-06-04 02:03:24 +02:00
Eloy Lafuente (stronk7) 4746dc557a MDL-39764 style: phpdoc changed to inline comments 2013-06-04 01:44:20 +02:00
Eloy Lafuente (stronk7) b4a8c66cca Merge branch 'wip-MDL-39764_M24_3' of git://github.com/gjb2048/moodle into MOODLE_24_STABLE 2013-06-04 01:44:11 +02:00
Gareth J Barnard b0997b27fc MDL-39764 course_format: Allow courses to have numsections > maxsections. 2013-06-03 23:57:52 +01:00
Eloy Lafuente (stronk7) d4ef1bbbcf MDL-39465 Show env. info instead of part twice. 2013-06-04 00:51:04 +02:00
Eloy Lafuente (stronk7) 771b35c6fe Merge branch 'w23_MDL-39465_m24_environment' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-06-04 00:01:16 +02:00
Eloy Lafuente (stronk7) 613b32bbb8 Merge branch 'MDL-39166-m24' of https://github.com/jfilip/moodle into MOODLE_24_STABLE 2013-06-03 23:55:41 +02:00
Eloy Lafuente (stronk7) 813db77aa2 Merge branch 'wip-MDL-39710-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-06-03 23:22:44 +02:00
Eloy Lafuente (stronk7) e4c30d9639 Merge branch 'MDL-39932_24' of git://github.com/grabs/moodle into MOODLE_24_STABLE 2013-06-03 19:10:55 +02:00
Eloy Lafuente (stronk7) 954e384783 Merge branch 'MDL-39487_24' of https://github.com/IOC/moodle into MOODLE_24_STABLE 2013-06-03 19:03:38 +02:00
Petr Škoda d1bb51aaad MDL-39416 do not try to get detailed perflog info before PAGE int 2013-06-02 13:30:02 +02:00
Mary Evans 4db0ad5756 MDL-39835 theme_sky_high: Fix for footer to display correctly in higher resolutions. 2013-06-01 22:02:37 +01:00
Petr Škoda 29b18e6c68 MDL-39465 detect environment problems in tests
This should help explain why something else fails.
2013-05-31 22:04:02 +02:00
Tim Hunt 93cf55eb72 MDL-39971 each attempt builds on last broken for previews. 2013-05-31 20:33:38 +01:00
Marina Glancy 8069eac74b MDL-39710 Don't display rubric and guide preview unless option checked 2013-05-31 16:09:21 +10:00
Russell Boyatt 74d4a8e314 Fixing MDL-39710: setting to limit student access to rubric now checked. 2013-05-31 16:06:42 +10:00
Dan Poltawski 8228d7a653 MDL-38731 course: split course group settings header
Allow translators to translate the heading differently.

AMOS BEGIN
  CPY [groups,group],[groupsettingsheader,group]
AMOS END

Conflicts:
	course/edit_form.php
2013-05-31 12:14:19 +08:00
Dan Poltawski 9e5d7687e3 MDL-37332 portfolio: don't add double slashes
get_filepath() always returns trailing slash.

This breaks windows export - thanks to Jason Platts
2013-05-31 11:52:57 +08:00
Marina Glancy db13f65136 MDL-21097 Correctly check capabilities for course settings items
- Make sure that items in course settings (and frontpage settings) are shown depending on user capabilities
- Make sure user is able to turn editing on on the page even if he has only limited number of seciton/modules capabilities
2013-05-31 13:21:03 +10:00
Frederic Massart 734581a35e MDL-39650 form: Type can be set on repeated elements in a group 2013-05-31 11:05:08 +08:00
Dan Poltawski 20431aacf8 MDL-33562 lib: remove deleted user tokens 2013-05-31 10:28:29 +08:00
Dan Poltawski 27bab164f2 MDL-33562 lib: remove private keys when user deleted 2013-05-31 10:27:01 +08:00
AMOS bot 48dedbe914 Automatically generated installer lang files 2013-05-31 00:43:09 +00:00
Adam Olley 752fb7113d MDL-39947 mod_forum: Add safety check to variable assignment when counting unread posts 2013-05-31 09:50:35 +09:30
Andreas Grabs a33fc4907e MDL-39932 mod_feedback - Mapping Feedback when Course is Deleted - thx to David N. Johnson 2013-05-30 23:12:54 +02:00
Tim Hunt c0f5255cb9 MDL-39945 qtype multichoice was not comparing blank responses correctly. 2013-05-30 19:47:58 +01:00
Iñaki Arenaza aefa1b0e3e MDL-34085 Fix the backup options names in core_course_duplicate_course
Fix the option names to match those used by the backup subsystem.
2013-05-30 17:49:07 +02:00
Damyon Wiese ae61eea349 weekly release 2.4.4+ 2013-05-30 12:09:01 +08:00
Damyon Wiese b78cd7b0c9 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-05-30 11:27:20 +08:00
AMOS bot 8574fb6f41 Automatically generated installer lang files 2013-05-30 00:38:23 +00:00
Damyon Wiese 7bf288a640 MDL-39317 assign: Fix for submitted filter on grading table.
Some old upgraded assignments have no timecreated column so use
a different one to check for a valid submission.
2013-05-29 14:50:48 +08:00
Ashley Holman 24a3f392ba MDL-39743 assign: Fix missing capability check for "grant extension"
Conflicts:

	mod/assign/locallib.php
2013-05-29 12:08:40 +08:00
AMOS bot 7500249a74 Automatically generated installer lang files 2013-05-29 00:39:23 +00:00
Eloy Lafuente (stronk7) 847f1dd489 Merge branch 'w22_MDL-39676_m24_whereparam' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-05-28 15:34:13 +02:00
Jason Fowler fce7fd554c MDL-38347 - Calendar - Fixing arrow output on Android devices 2013-05-28 15:26:36 +08:00
Petr Škoda d04e51bd18 MDL-39802 ignore deleted users in meta enrolments 2013-05-28 10:05:15 +08:00
Petr Škoda 6134a1f844 MDL-39802 ignore deleted users in cohort enrolments 2013-05-28 10:05:11 +08:00
Petr Škoda 5ffd03ea74 MDL-39802 ignore deleted users in category enrolments 2013-05-28 10:05:08 +08:00
Damyon Wiese 4fffc06f65 Merge branch 'w22_MDL-39802_m24_deletedusers' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-05-28 09:55:50 +08:00
AMOS bot 48f747b8da Automatically generated installer lang files 2013-05-28 00:38:16 +00:00
Eloy Lafuente (stronk7) c8b05c3e83 Merge branch 'wip-MDL-39456-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-05-28 01:02:49 +02:00
Damyon Wiese 1deb9c4d18 Merge branch 'MDL-39640-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-05-27 16:16:45 +08:00
Dan Poltawski b3ae0c52bf Merge branch 'MDL-38239-moodle24' of git://github.com/StudiUM/moodle into MOODLE_24_STABLE 2013-05-27 14:13:52 +08:00
Dan Poltawski a67482cb0e Merge branch 'w22_MDL-39688_m24_etag' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-05-27 13:43:45 +08:00
Petr Škoda cd9dab04b9 MDL-38408 validate PayPal dates and costs always 2013-05-25 22:16:45 +02:00
Petr Škoda 829b842997 MDL-39676 improve get_role_users() unit tests 2013-05-25 10:13:26 +02:00
Petr Škoda 02338685a8 MDL-39676 fix get_role_users() parameter typo 2013-05-25 09:31:29 +02:00
Petr Škoda 7c742620d2 MDL-39688 do not set Etag when sending http ranges 2013-05-25 09:12:51 +02:00
Petr Škoda 7934b786a9 MDL-39802 fix sloppy user deleting and creating in imsenterprise plugin 2013-05-24 21:18:23 +02:00
Petr Škoda 43b13e92b8 MDL-39802 add cli script for fixing of all deleted users
Use this script if something just set the user.deleted flag instead of calling the delete_user() method.
2013-05-24 21:18:22 +02:00
Damyon Wiese bf2bee168a weekly release 2.4.4+ 2013-05-24 13:25:45 +08:00
Damyon Wiese 5c9ce5a281 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-05-24 13:11:49 +08:00
Sam Hemelryk 89ad278957 MDL-39456 cachestore_file: added reference to global $CFG
By holding onto a reference of the global $CFG object we
can be sure that it isn't destroyed before we are done
with it.
This allows for caches to be used within destructors for
purposes such as delayed writes.
2013-05-24 09:51:06 +12:00
Eloy Lafuente (stronk7) a3106cf3eb Merge branch 'wip-MDL-39177-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-05-23 16:00:16 +02:00
Marina Glancy 58c28d44e0 MDL-39177 make sure we don't remove existing directories when cleaning up unzip 2013-05-23 19:19:05 +10:00
Sam Hemelryk 1fdba7b992 MDL-39673 css: removed unused chunk array search
Cherry-picked from MDL-39326
2013-05-23 13:20:28 +08:00
Sam Hemelryk f8e60e04b9 MDL-39673 css: no passed the no svg key to chunking when required
Cherry-picked from MDL-39326
2013-05-23 13:20:28 +08:00
Sam Hemelryk 713b818c40 MDL-39673 css: implemented chunking of large sheets
Cherry-picked from MDL-38441
2013-05-23 13:20:06 +08:00
AMOS bot 038fd6e78f Automatically generated installer lang files 2013-05-22 08:26:05 +00:00
Eloy Lafuente (stronk7) 4453f3255f MDL-36482 Fix slipped error, thanks Petr! 2013-05-22 04:13:53 +02:00
Eloy Lafuente (stronk7) be06282e1b Merge branch 'wip-MDL-39177-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-05-22 02:19:40 +02:00
Gilles-Philippe Leblanc e60224a32a MDL-38239 gradebook: Importing grades from a .txt file with commas for decimals causes an error 2013-05-21 14:13:16 -04:00
Marina Glancy 0733e9883a MDL-39177 Updating userid when file is overwritten 2013-05-21 10:50:52 +10:00
Eloy Lafuente (stronk7) ec01b3201d Merge branch 'MDL-36482_24' of https://github.com/mr-russ/moodle into MOODLE_24_STABLE 2013-05-21 02:28:20 +02:00
Eloy Lafuente (stronk7) 5efc195a32 Merge branch 'MDL-26120_24' of https://github.com/jacks92/moodle into MOODLE_24_STABLE 2013-05-21 00:55:27 +02:00
Eloy Lafuente (stronk7) f0697b7088 Merge branch 'MDL-31209-24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-05-20 19:05:31 +02:00
Ruslan Kabalin 8a06e21c2a MDL-39761: mod_assign: Always check submission plugin status and visibility. 2013-05-20 16:45:43 +01:00
Damyon Wiese 17bca7a2b9 MDL-39412 Prevent developer warnings on upgrade from 24 to master 2013-05-20 12:42:55 +01:00
Tim Hunt c22a0ad980 MDL-39412 disabling manual graded behaviour refinements
1. Change behaviour admin settings so you can only select enabled
behaviours.
2. During the upgrade, change admin settings that might be currently set
to manual graded, so that instead they are set to deferredfeedback (if
that is available. If not, we just take the first alphabetically.)
2013-05-20 12:42:15 +01:00
Tim Hunt 617947c0b7 MDL-39412 question behaviours: hide manual graded option
The ability to set all your quiz questions to require manual grading is
an interesting possibility, but practically almost useless.

If you set that accidentally, then you are badly stuck. There is no way
to fix it after the students have answered the quiz.

Therefore, we should set the config option to hide that option from the
UI. We do this for all Moodle sites as part of the upgrade, not just for
new installs.

If any admin wants to re-enable this, they can later.
2013-05-20 12:26:06 +01:00
Dan Poltawski fad64c0d6b Merge branch 'w18_MDL-39374_m24_folderlog' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-05-20 17:58:41 +08:00
Dan Poltawski 8fedda2fc4 Merge branch 'MDL-35859_idnumber_24' of https://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-05-20 16:39:04 +08:00
Damyon Wiese b27636c4db Merge branch 'MDL-38498-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-05-20 16:13:15 +08:00
Frederic Massart 0db0bcd60b MDL-38498 repository: Unit tests for repository::check_capability()
Conflicts:

	repository/tests/repository_test.php
2013-05-20 16:03:11 +08:00
Dan Poltawski 133defa353 Merge branch 'MDL-27748_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-05-20 15:47:34 +08:00
Dan Poltawski de78a8b251 Merge branch 'MDL-39728_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-05-20 15:29:13 +08:00
Troy Lee 6b3ca4dd2c MDL-36020 overview/report: fix quiz regrade session lock 2013-05-20 12:42:47 +08:00
Damyon Wiese 512f5d9086 Merge branch 'MDL-39363-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-05-20 12:14:35 +08:00
Dan Poltawski dfd948b0f0 Merge branch 'MDL-39198_M24' of git://github.com/kordan/moodle into MOODLE_24_STABLE 2013-05-20 11:48:33 +08:00
Dan Poltawski 6336c04705 Merge branch 'MDL-38369-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-05-20 10:25:52 +08:00
Tim Hunt 0377e4fbc9 MDL-27748 question: grade options should be localised.
question_bank::fraction_options should use format_float to display
decimal pionts correctly.
2013-05-19 23:45:48 +01:00
Tim Hunt 18d5870e8b MDL-39728 List all the classes in question/type/questionbase.php
This should make it easier for people to understand the type hierarchy.
2013-05-18 09:25:17 +01:00
AMOS bot d55eadbc92 Automatically generated installer lang files 2013-05-18 00:41:35 +00:00
Damyon Wiese a1972f5717 Merge branch 'MDL-28250-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-05-17 11:49:08 +08:00
Petr Škoda 0571a6856d MDL-39678 fix YUI 20130515 vulnerability 2013-05-15 22:00:10 +02:00
Petr Škoda 3c61d125c4 MDL-39374 log only real folder edits
Credit goes to Florian Zillner, thanks.
2013-05-15 21:37:25 +02:00
Dan Poltawski 8fec03bc81 MDL-28250 license: upgrade old versions of cc-nc
The url was incorectly defined in previous versions
2013-05-15 11:24:53 +01:00
Wojciech Galiszek ef5ec161ee MDL-28250 license: Correct cc-nc url 2013-05-15 11:22:56 +01:00
AMOS bot 167c498cc8 Automatically generated installer lang files 2013-05-15 00:39:22 +00:00
Frederic Massart 235aa1b1d1 MDL-39667 repository: Correct check for uniqueness of the name 2013-05-14 16:29:20 +08:00
Jerome Mouneyrac 4205983fad MDL-31209 web service error message: Indication about the service not containg the web service function is confusing 2013-05-14 15:44:32 +08:00
Marina Glancy 0408edbb13 MDL-39177 More comments about confusing files.source field 2013-05-14 17:05:40 +10:00
Marina Glancy fb69297c66 MDL-39177 Ensure files are overwritten correctly on unzip 2013-05-14 17:05:40 +10:00
Marina Glancy 3557f63112 MDL-39177 Perform all checks on draftfile area before saving the files 2013-05-14 17:05:40 +10:00
Marina Glancy bb597bbc1a MDL-39177 Remove code duplication 2013-05-14 17:05:39 +10:00
Marina Glancy 73e7cca3c2 MDL-39177 Update file in filearea only if original is present
Now when file was deleted in filemanager and new file with the same file was uploaded the references will be converted to copies exactly like UI warns in filemanager.
Also do not delete original information from draftfiles.
2013-05-14 17:05:39 +10:00
Marina Glancy 949a68d987 MDL-39177 Discard file origin when moving/renaming a file in filemanager
Created one function that handles file update to be used from both JS and nonJS filepicker
2013-05-14 17:05:39 +10:00
Marina Glancy 7a73b806c3 MDL-39177 Original info is not preserved when overwriting a file in filemanager
original file location is used by filemanager to indicate that file is a source of reference and file the list of referencing files
2013-05-14 17:05:39 +10:00
Marina Glancy eb30de6812 MDL-39177 File reference is not updated when overwriting the file 2013-05-14 17:05:38 +10:00
Marina Glancy 313b6da1b2 MDL-33719 When overwriting a file the filemanager is not refreshed 2013-05-14 17:04:34 +10:00
AMOS bot bcd8c30b45 Automatically generated installer lang files 2013-05-14 00:37:45 +00:00
Eloy Lafuente (stronk7) e038687c55 Moodle release 2.4.4 2013-05-13 12:38:41 +02:00
Eloy Lafuente (stronk7) fd6e84c5be Merge branch 'MDL-39642-en_fix-24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-05-13 11:54:01 +02:00
Frederic Massart fbe50c0945 MDL-39640 repository: Prevent notice when editing an instance 2013-05-13 17:31:29 +08:00
Helen Foster 98f8613822 MDL-39642 Merge English strings from the en_fix language pack 2013-05-13 10:06:39 +02:00
Ankit Agarwal a87523d86e MDL-39363 scorm: Accept 0 as a valid score 2013-05-13 11:49:12 +08:00
Andrew Davis f34634eaf3 MDL-35859 core_grade:fixed an optional parameter call to use the array version 2013-05-13 09:53:24 +08:00
Eloy Lafuente (stronk7) 573534c441 weekly release 2.4.3+ 2013-05-10 17:34:22 +02:00
Eloy Lafuente (stronk7) 82a69ceaa0 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-05-10 17:17:57 +02:00
Eloy Lafuente (stronk7) d6d685fd71 Merge branch 'MDL-39518-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-05-10 13:17:44 +02:00
Damyon Wiese ec2d67fd80 MDL-39518: Change hardcoded string MOOCH to Moodle.net 2013-05-10 14:28:02 +08:00
Sam Hemelryk e09afa5184 Merge branch 'MDL-39602-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-05-10 16:40:59 +12:00
Sam Hemelryk a32772051f Merge branch 'MDL-39488_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-05-10 16:30:52 +12:00
Damyon Wiese aa6d532b45 MDL-39602 cache: Move the includes for default stores
Putting them inside the function get_default_stores ensures
that they will be included from anywhere that calls get_default_stores.

Conflicts:

	cache/locallib.php
2013-05-10 11:55:35 +08:00
Rossiani Wijaya 5c635f6c62 MDL-39488: Lesson Module: Fixed the potential variable overwritting for answers 2013-05-10 11:16:34 +08:00
Damyon Wiese b97e174acf Merge branch 'MDL-39535_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-05-10 10:32:19 +08:00
Frederic Massart 84d356f73c MDL-39280 form: Multiple select support disabledIf with multiple values 2013-05-10 09:36:45 +08:00
Eloy Lafuente (stronk7) eb2080240a Merge branch 'MDL-38885-24-int' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-05-10 03:17:19 +02:00
Eloy Lafuente (stronk7) d5420db934 Merge branch 'MDL-29758_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-05-10 02:54:06 +02:00
Frederic Massart d39925c792 MDL-38885 form: Fix comments and stricter unit test 2013-05-10 08:36:19 +08:00
Eloy Lafuente (stronk7) 7f92387c85 Merge branch 'MDL-39488_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-05-09 15:49:24 +02:00
Kordan 6642c7d756 MDL-39198 theme_formal_white: resized and relocated the "Add..." drop down menu of the "Add a block" pseudo block 2013-05-09 14:02:54 +02:00
Jean-Michel Vedrine da4bd770f2 MDL-29758 make Cloze question feedback display more informative
as it was in Moodle 1.9
2013-05-09 08:56:33 +02:00
Frederic Massart 9d02febe9b MDL-38885 form: Unit tests for data cleaning 2013-05-09 14:08:08 +08:00
Frederic Massart feeb14b941 MDL-38885 form: Recursively clean parameters based on right type 2013-05-09 14:06:14 +08:00
Damyon Wiese 8d7f911c96 Merge branch 'wip-MDL-39436-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-05-09 11:32:47 +08:00
Marina Glancy 17a5b5a094 MDL-39436 fixing RTL in filemanager - contextmenu icon 2013-05-09 12:46:08 +10:00
Damyon Wiese 93c5c3b02c MDL-38289: Custom profile fields - added unit test
Added a unit test to cover the case when you are fetching a custom
profile field but you are not logged in.
2013-05-09 10:29:21 +08:00
Damyon Wiese 3f999f8120 Merge branch 'MDL-38289-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-05-09 10:26:07 +08:00
AMOS bot 5f5ff2b680 Automatically generated installer lang files 2013-05-09 00:37:29 +00:00
Jerome Mouneyrac 1d79b726d7 MDL-37822 fix checkboxes that were always set to on by default 2013-05-09 02:08:11 +02:00
Jerome Mouneyrac fd469033fa MDL-37822 move the default code above the set_config to not make the code less confusing 2013-05-09 02:08:11 +02:00
Jerome Mouneyrac 54a3ce69e9 MDL-37822 Moodle send site information to a hub even though it's unchecked 2013-05-09 02:08:11 +02:00
Russell Smith cd8f8a8cb5 MDL-36482 activities block: Allow mod display without intro's 2013-05-09 09:59:41 +10:00
Eloy Lafuente (stronk7) ec00601863 Merge branch 'MDL-38487_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-05-09 00:54:54 +02:00
Jayesh Anandani c2fd66ab6e MDL-26120_24 mod_forum: use correct object 2013-05-08 23:50:58 +05:30
Juan Leyva 3cba96e344 MDL-39563 Fixing mobilecssurl is not being returned in WebService get_siteinfo 2013-05-08 12:08:06 +02:00
sam marshall e5bc3e3dde MDL-39472 MUC: Optimise cache::get_from_persist_cache 2013-05-08 10:17:58 +01:00
Damyon Wiese 781383a946 Merge branch 'MDL-31193-24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-05-08 15:23:24 +08:00
Rossiani Wijaya ce4af8c4fe MDL-39488 Lesson Module: Improve code performance 2013-05-08 13:52:13 +08:00
Rossiani Wijaya a6b0fc1c93 MDL-39488 Lesson Module: Fixed PHP error matching question,
if one or more options have not been selected.
2013-05-08 13:52:13 +08:00
Joseph Rézeau eff38644cf MDL-39488 Lesson Module: Fix for "Match question throws PHP error if one or more options have not been selected "
Signed-off-by: Joseph Rézeau <moodle@rezeau.org>
2013-05-08 13:52:04 +08:00
Damyon Wiese cf0d08f661 Merge branch 'MDL-37552-24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-05-08 12:43:52 +08:00
Andrew Davis 4b280ca679 MDL-37475 core_grade:fixed the handling of show totals 2013-05-08 10:35:17 +12:00
Eloy Lafuente (stronk7) b5e41dac94 Merge branch 'MDL-39452-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-05-07 22:06:27 +02:00
Mark Nielsen 0572012ef3 MDL-32301: Allow instructor custom parameters for LTI tools 2013-05-07 21:59:25 +02:00
Eloy Lafuente (stronk7) 1a77c6c263 Merge branch 'MDL-34275-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-05-07 19:14:58 +02:00
Dan Poltawski 54061d7cbf Merge branch 'MDL-36223-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-05-07 15:28:33 +01:00
Dan Poltawski 217eeccb26 Merge branch 'wip-MDL-39436-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-05-07 15:13:18 +01:00
Rajesh Taneja b6f8473cdb MDL-37245 Blog: Fixed comments. 2013-05-07 14:58:06 +01:00
Rajesh Taneja 5fde58a593 MDL-37245 Blog: Added permission check for blog comments 2013-05-07 14:58:06 +01:00
Dan Poltawski b15eea6009 Merge branch 'MDL-38500-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-05-07 11:54:24 +01:00
sam marshall 1df3b0ae24 MDL-39448 MUC: Memcache configurable key names 2013-05-07 11:44:11 +01:00
Jerome Mouneyrac 20c171f284 MDL-37552 external_format_text: missing require_once filelib.php (shared credits to Adam Fredericks for report and patch proposal) 2013-05-07 17:57:19 +08:00
Rex Lorenzo 5899b85fd6 MDL-34275 - Use default copyright license when restoring files 2013-05-07 09:10:30 +01:00
Damyon Wiese 06340a114f Merge branch 'MDL-31713_override_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-05-07 15:31:03 +08:00
Mark Nelson 7b178abfbb MDL-39535 grade: only display grade errors once 2013-05-07 15:15:07 +08:00
Andrew Davis 501afed36a MDL-31713 core_grade: added updating of grade min and max to update_final_grade() 2013-05-07 12:25:08 +08:00
Frederic Massart ac9d18dfa4 MDL-38289 condition: Do not fetch profile fields when not logged in 2013-05-07 10:19:27 +08:00
Maria Torres 242ef4590f MDL-39169: Now the question's tags are added in backup/restore options 2013-05-06 15:42:21 +01:00
Damyon Wiese 31dda933e6 Merge branch 'MDL-38315-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-05-06 22:19:55 +08:00
Damyon Wiese 9479d76a14 Merge branch 'MDL-38480_m24' of git://github.com/andreabix/moodle into MOODLE_24_STABLE 2013-05-06 21:56:05 +08:00
Dan Poltawski 8d0835e64b Merge branch 'MDL-39446_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-05-06 14:48:15 +01:00
Dan Poltawski fc7f2b1a2f Merge branch 'MDL-39473-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-05-06 14:33:02 +01:00
Dan Poltawski b73f62ef9b Merge branch 'MDL-39491-workshop-media_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-05-06 13:11:58 +01:00
Dan Poltawski 0ddf951c15 MDL-39470 cache: added missing component to get_string call 2013-05-06 12:41:44 +01:00
Damyon Wiese f23877abfb MDL-38443 Assignment: Missing permissions check on downloadall submissions 2013-05-06 10:20:49 +01:00
Damyon Wiese a20eeda845 Merge branch 'MDL-39445_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-05-06 15:17:13 +08:00
AMOS bot 0426c0dfac Automatically generated installer lang files 2013-05-06 00:40:36 +00:00
Dan Poltawski 56463941a8 Merge branch 'brokencalc_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-05-05 11:30:31 +01:00
David Mudrák fb1cb65868 MDL-39491 Fix order of Workshop submission text processing
The order of format_text() and file_rewrite_pluginfile_urls() is
important to make filters work correctly.
2013-05-03 11:51:43 +02:00
Albert Gasset 2fc7799975 MDL-39487 mod/assign: fixed ID number of grade item changing 2013-05-03 11:08:19 +02:00
Jerome Mouneyrac ef2a243345 MDL-31193 display the correct and translated token valid until date 2013-05-03 14:14:38 +08:00
Marina Glancy d927075f0c MDL-39436 fixing RTL in filemanager 2013-05-03 11:32:44 +10:00
sam marshall 0f491109ca MDL-39472 MUC: Improve parse_key performance 2013-05-02 16:00:09 +01:00
Tim Hunt 319fc5cb74 MDL-39450 course formats: add static cache to get_format_or_default
This function gets called hundreds of times on every page, often with
exactly the same input, so I added a static cache.
2013-05-02 15:48:21 +01:00
Tim Hunt d8da3c0f5b MDL-39446 calculated qtype: make answer formula input bigger
This makes it easier for teachers editing questions.
2013-05-02 15:47:54 +01:00
Tim Hunt 2ec2d00dc8 MDL-39445 get_plugin_list clean_param use is slow
get_plugin_list was calling clean_param($pluginname, PARAM_PLUGIN) a
lot (600+ times per page), and that is much slower than you would guess.
A specific function for this case, (which we then also use from
clean_param) is a performance win.
2013-05-02 15:47:28 +01:00
Tim Hunt c1288cd726 MDL-38487 qtype match restore: problem with blank ids.
As it happens, this field is useless, and has been removed from the DB
in 2.5. Therefore, we only need a work-around for stable branches.
2013-05-02 15:46:58 +01:00
Dan Poltawski 43ded6701d weekly release 2.4.3+ 2013-05-02 14:37:50 +01:00
Dan Poltawski bffe667ae0 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-05-02 14:32:19 +01:00
sam marshall 02d61e0481 MDL-39454 Accesslib: is_siteadmin is a bit slow 2013-05-02 10:47:21 +01:00
Damyon Wiese ccd8763ce2 Merge branch 'MDL-30775-24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE
Conflicts:
	course/externallib.php
2013-05-02 16:21:55 +08:00
Damyon Wiese 4d69adc760 MDL-36223 Assign: User outline report grade display
Use str_long_grade for user outline report because it handles scales and
no grade.

Thanks to Jean-Daniel Descoteaux for suggesting this fix.
2013-05-02 15:46:27 +08:00
Frederic Massart a67e827913 MDL-38369 repository: Remove output before redirect 2013-05-02 12:03:56 +08:00
Andrew Davis 0f60e9fe53 MDL-32913 core_grade:made it more obvious when the gradebook is broken due to a broken calculation 2013-05-02 09:23:43 +08:00
AMOS bot f1c2a058ad Automatically generated installer lang files 2013-05-02 00:38:14 +00:00
sam marshall 442406d3ec MDL-39452 Library: html_writer::attribute unnecessary is_array check 2013-05-01 17:01:32 +01:00
Eloy Lafuente (stronk7) eb244d3b87 Merge branch 'MDL-39444_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-05-01 16:55:25 +02:00
Tim Hunt 0dc15de222 MDL-39444 get_string: remove unnecessary clean_param
This clean_param was added as part of MDL-22015. It is a good idea when
developer debug is turned on, but it showed up as a surprisingly
expensive cost in our profiling.

This change:

1. Removes the check during string_extist. This will not change
behaviour, the method returns false if the string does not exist.

2. In get_string, it only does the check if debugging is set to
DEVELOPER level.
2013-05-01 10:17:34 +01:00
Frederic Massart 7b6ed67e0a MDL-38500 repository: Instance names must be unique 2013-05-01 16:14:39 +08:00
AMOS bot 35b10e19af Automatically generated installer lang files 2013-05-01 00:39:24 +00:00
Eloy Lafuente (stronk7) d8d636dfe4 Merge branch 'wip-MDL-39432-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-05-01 01:35:10 +02:00
Sam Hemelryk be9d851c07 Merge branch 'MDL-39422-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-05-01 11:14:28 +12:00
Sam Hemelryk eecd7b4412 Merge branch 'wip-MDL-39099_M24' of git://github.com/gjb2048/moodle into MOODLE_24_STABLE 2013-05-01 11:04:50 +12:00
Sam Hemelryk 609d262c17 Merge branch 'MDL-39414-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-05-01 11:02:05 +12:00
Sam Hemelryk 5a682ca6f9 MDL-39432 course: converted closures to lambda functions 2013-05-01 10:41:42 +12:00
Sam Hemelryk 858131c09c Merge branch 'MDL-36060-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-05-01 10:14:09 +12:00
Mark Nielsen 75156589fd MDL-36060: Remove anonymous functions in mod/lti
This was breaking eaccelerator because it doesn't
support anonymous functions.
2013-04-30 17:50:29 +01:00
Dan Poltawski 41b2eb8400 MDL-39422 mod_forms: prevent long coruse module names
To prevent ugly DB errors.
2013-04-30 17:42:03 +01:00
Dan Poltawski da7b1ecb12 MDL-39422 course: prevent module names longer 255 chars
To prevent ugly DB errors.
2013-04-30 17:42:02 +01:00
Gareth J Barnard 34877d21af MDL-39099 course_format: Allow section_summary() to be overridden. 2013-04-30 17:02:44 +01:00
Dan Poltawski fb0698f344 Merge branch 'MDL-35385_chat_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-04-30 14:08:06 +01:00
Dan Poltawski dd9b396af4 MDL-39414 portfolio: don't queue google portfolio exports
This is a bit of an ugly way of saying 'I dont support queued exports'.

The google plugins need a valid user session in order to export to the
google services, thereforce we are forcing the export to be interactive
and not queued through cron, as this wont work in the current
implmenetation.

It's possible we could add offline access to the plugins, but I don't
believe it is worth the benefit for the additional complexity.
2013-04-30 10:37:47 +01:00
Damyon Wiese a1ffe7e235 Merge branch 'MDL-39354_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-30 16:25:08 +08:00
Jerome Mouneyrac e2bceb5018 MDL-30775 get_course_contents: remove warnings when the section is empty 2013-04-30 14:12:25 +08:00
Damyon Wiese 6476ff5a7c Merge branch 'MDL-37966_24' of git://github.com/jonof/moodle into MOODLE_24_STABLE 2013-04-30 12:51:27 +08:00
Damyon Wiese 00f0d5c97f Merge branch 'MDL-39246_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-30 12:16:02 +08:00
Andrew Davis e4f7ad5d55 MDL-31713 core_grade:added a unit test to replicate a raw grade max bug 2013-04-30 09:37:23 +08:00
Andrew Davis 9ffffa5ec7 MDL-35385 mod_chat: made sure no message popups display within the chat window 2013-04-30 09:10:18 +08:00
Sam Hemelryk 7de740be35 Merge branch 'MDL-39303_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-04-30 10:00:09 +12:00
Sam Hemelryk 7e1c6bf8b4 Merge branch 'MDL-39365-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-04-30 09:36:36 +12:00
Sam Hemelryk 38fdbcf001 Merge branch 'MDL-39398-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-04-30 09:31:42 +12:00
Tim Hunt b3c1e4b131 MDL-39354 put back a bit of margin on checkboxes. 2013-04-29 19:14:56 +01:00
Dan Poltawski c0f02f7c89 Merge branch 'MDL-39378_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-29 17:01:03 +01:00
Brian King a7fce60867 MDL-39409 auth/cas pass web proxy settings along to phpCAS 2013-04-29 17:51:43 +02:00
Tim Hunt 70351389f7 MDL-39378 Improve s() performance.
These changes give about a 10% speed-up in this function. The significant changes are:
1. Simplify the if logic to remove unnecssary cases.
2. Dont pass default argument values to htmlspecialchars, just using the
   defaults is faster.
3. I can confirm that /i regex is faster than the equivalent regex without the i.

I also added more unit tests to test the edge cases.
2013-04-29 12:32:24 +01:00
Tim Hunt 7017ce1a30 MDL-39378 s(): fix bad hex regex 2013-04-29 12:32:20 +01:00
Frederic Massart 923f470056 MDL-39398 message: Prevent notice when sending Jabber messages
Not tracking the presence prevents a notice to be displayed during disconnect(),
where the the jabber server attempts to subscribe to $CFG->jabberusername presence.
As the server name does not include a resource identifier (stillwit@jabber.org/resource),
an explode('/') fails.
2013-04-29 19:17:58 +08:00
Dan Poltawski 3fb4ce7d58 Merge branch 'MDL-27071_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-04-29 10:27:41 +01:00
Damyon Wiese 49b18efa4e Merge branch 'MDL-39342_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-29 15:36:09 +08:00
Damyon Wiese 6f9d4498d2 Merge branch 'MDL-30940-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-04-29 14:06:11 +08:00
Ankit Agarwal d9ea44e5a3 MDL-39365 scorm reports: Return correct track count 2013-04-29 13:23:15 +08:00
Damyon Wiese 8927b51d23 Merge branch 'MDL-37845_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-29 11:46:33 +08:00
Damyon Wiese 58498bde56 Merge branch 'MDL-38440-24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-04-29 11:10:35 +08:00
Eloy Lafuente (stronk7) f530a1f868 MDL-27071 Add big IN() unit tests
Let's verify how all databases perform with a big
number of parameters (10000) using IN() SQL clauses.
Both using QM and NAMED parameters.

Ideally only Oracle fails, and only it will need fixing.
2013-04-29 01:53:41 +02:00
Eloy Lafuente (stronk7) 0f987021a3 MDL-27071 Allow Oracle IN() to use > 1000 items
By using a pivoting strategy, we modify the list
of params (QM and NAMED supported) into a
subquery, so the 1000 limit in Oracle (ORA-01795)
is not thrown anymore.

Conflicts:
	lib/dml/oci_native_moodle_database.php
2013-04-29 01:53:01 +02:00
Sam Hemelryk 3e7b95b431 Merge branch 'MDL-39192_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-04-29 10:53:49 +12:00
AMOS bot 77474a85a1 Automatically generated installer lang files 2013-04-27 00:37:28 +00:00
Tim Hunt 2d57c26b8b MDL-39246 quiz timer: compute a more accurate stop time. 2013-04-26 12:29:15 +01:00
Tim Hunt 6b32bf8520 MDL-39246 JavaScript: store the time the page starts loading.
This helps synchronise time on the client side with time on the server.
If you wait until a js_init_call runs, you might have had to wait an
unknown number of seconds while all the JS loads. Therefore, we capture
the current time as soon as possible in <head>.

This is a bit like adding .jsenabled to <body> as soon as possible, to
reduce visual flicker.
2013-04-26 12:29:11 +01:00
Jerome Mouneyrac 5831c40c5c MDL-38440 WebService get_contents doesn't return the full text of labels 2013-04-26 15:59:14 +08:00
Tim Hunt 9a3d0206da MDL-37845 multichoice qtype: Fix some display issues.
1. Better handling of multi-line choices in the correct answer display.
2. Remove dangerous CSS that is no longer needed.
2013-04-25 17:21:11 +01:00
Dan Poltawski 0b8cda3b9e Merge branch 'MDL-34403-MOODLE_24_STABLE' of https://github.com/mpetrowi/moodle into MOODLE_24_STABLE 2013-04-25 12:54:17 +01:00
Jason Platts 261aae298b MDL-39342 stop users entering too long matching answers.
Since they lead to an ugly DB error.
2013-04-25 12:00:09 +01:00
Dan Poltawski 3aba4326d4 Merge branch 'MDL-29258_24' of git://github.com/dmonllao/moodle into MOODLE_24_STABLE 2013-04-25 10:29:55 +01:00
Frederic Massart 442e59e785 MDL-39329 course: Strict standard warning during unpublishing 2013-04-25 10:11:42 +01:00
AMOS bot f368e4a731 Automatically generated installer lang files 2013-04-25 00:38:08 +00:00
Eloy Lafuente (stronk7) c6be1389b7 weekly release 2.4.3+ 2013-04-25 01:10:08 +02:00
Eloy Lafuente (stronk7) ff1e26aba4 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-04-25 01:03:38 +02:00
Eloy Lafuente (stronk7) 9c65b19cb5 Merge branch 'MDL-35364_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-24 23:36:55 +02:00
Justin Filip 61c9217b2a MDL-39166 auth_ldap Add triggers for user created/updated events. 2013-04-24 16:16:39 -04:00
Matt Petro 7dc22c4ef1 MDL-34403 mod quiz: fix error during enrolment 2013-04-24 14:52:33 -04:00
Dan Poltawski ce024436be Merge branch 'MDL-39283_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-04-24 14:35:09 +01:00
Dan Poltawski fdeb0d80ed Merge branch 'MDL-39219_scorm_ie7_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE 2013-04-24 09:08:49 +01:00
Ruslan Kabalin 414095a014 MDL-34939: Fix clamdscan permissions-related issues
Use --fdpass parameter that passes the file descriptor permissions to clamd,
which allows to scan given file irrespective of directory and file
permissions. Changing file permissions is not required.
2013-04-24 14:59:19 +08:00
Mark Nelson ee02d17466 MDL-39303 mod_forum: prevent user from submitting when post threshold reached 2013-04-24 14:02:52 +08:00
Ankit Agarwal ca61ed1bbe MDL-39296 scorm reports: Fixing incorrect variable name 2013-04-24 13:43:35 +08:00
Mark Nelson 709c441e89 MDL-39192 mod_forum: do not need to check the posting threshold when editing a post 2013-04-24 12:32:39 +08:00
Davo Smith 7b443f87dd MDL-39219 mod_scorm - make sure YUI JSON module is loaded 2013-04-23 18:58:49 +01:00
Dan Poltawski 2a4eeac067 Merge branch 'MDL-37784_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-04-23 13:00:39 +01:00
Dan Poltawski 5559857f9e Merge branch 'MDL-39296-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-04-23 12:50:51 +01:00
Jean-Michel Vedrine c8fbd8b0c3 MDL-39283 GIFT and XML question export broken for unsupported qtypes
Do no write any data to the export for unsupported qtypes
2013-04-23 09:52:47 +02:00
Jean-Michel Vedrine 37eadb417b MDL-37784 Adaptive no penalty display wrong penalty info
Adaptive Mode tells students they have been penalized even when set to no penalties
2013-04-23 08:39:48 +02:00
Damyon Wiese 9723842bc0 Merge branch 'MDL-34933_24_STABLE' of https://github.com/mchurchward/moodle into MOODLE_24_STABLE
Conflicts:
	lib/db/upgrade.php
	version.php
2013-04-23 12:02:47 +08:00
Ankit Agarwal 2c2544877d MDL-39296 scorm reports: Fix undefined variables in graphs report 2013-04-23 11:55:41 +08:00
David Monllao d902ffe847 MDL-29258 core_portfolio: Fixing broken default breadcrumb 2013-04-23 11:16:38 +08:00
AMOS bot d4aca421df Automatically generated installer lang files 2013-04-23 00:37:55 +00:00
Tim Hunt 79ed1fe6c6 MDL-35364 shorten text: don't return invalid HTML.
I also broke the unit tests into more, smaller, named tests, so that
when things start failing, more tests are run, and it is clearer what
the problem is.

In a couple of cases, I adjusted the $ideal lenght in the test. A
careful counting of the characters in the test input (added as comments)
suggests that the new values make for better tests.
2013-04-22 19:24:50 +01:00
Alex Leontiev 22687af45a MDL-37514 module.js: fix .js for auto quiz submission in preview mode
The issue: when we attempt the quiz as teacher/admin and timer is up,
quiz is not submitted, even though "Open attempts are submitted
automatically" is set. I've changed the javascript for a timer,
responsible for submission, removing the special behaviour in case of
preview mode. Note, that when the admin/teacher is taking a quiz, the
"preview" mode is automatically switched on.

It is a bit strange, since in the javascript there was clearly no
expressed intention to really submit quiz in preview, even when timer
hits. It does not really seem like a accidental bug, rather it looks
like some misunderstanding. Worse still, it may happen that I did not
understand the intentions of previous editor and ruined some
functionality. Because of this, and the fact that this is my first bug,
I would like to ask about the peer review! Please, see my comments in
bug discussion for the testing steps.
2013-04-22 14:10:06 +01:00
Mike Churchward d75a987e36 MDL-34933 core_message: Adding index to improve database access on message_working table. 2013-04-22 08:38:03 -04:00
Jason Platts e1267ba041 MDL-37942 Images with non-alphanumeric chars in file name won't export 2013-04-22 12:43:39 +01:00
Dan Poltawski 3fd370acde Merge branch 'w16_MDL-39141_m24_toolbar' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-04-22 12:40:44 +01:00
Damyon Wiese 499c16040d Merge branch 'MDL-39050_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-22 10:29:20 +08:00
AMOS bot fb1b6c4fbc Automatically generated installer lang files 2013-04-22 00:38:29 +00:00
Sam Hemelryk b920c4096c Merge branch 'MDL-39172_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-04-22 11:02:14 +12:00
Dan Poltawski 6f69ef749e Merge branch 'MDL-39219_scorm_ie7_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE
Conflicts:
	mod/scorm/module.js
2013-04-19 15:20:36 +01:00
Dan Poltawski d9a277684f Merge branch 'MDL-38361_24' of https://github.com/prateeksachan/moodle into MOODLE_24_STABLE 2013-04-19 15:11:48 +01:00
Dan Poltawski 0c60dae522 Merge branch 'wip-MDL-38565-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-04-19 13:47:44 +01:00
Tim Hunt 98ccd4fa20 MDL-39050 quiz access rules: settings.php files should work. 2013-04-19 11:52:55 +01:00
Damyon Wiese 501dd08c6b Merge branch 'MDL-39084-moodle24' of github.com:StudiUM/moodle into MOODLE_24_STABLE 2013-04-19 14:07:15 +08:00
Damyon Wiese 3054e59f40 Merge branch 'MDL-39167_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-19 13:30:54 +08:00
Frederic Massart 8154dd8350 MDL-30940 form: Mutiple select work correctly without any selection 2013-04-19 11:06:29 +08:00
Sam Hemelryk d7b2888810 Merge branch 'MDL-39185_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-04-19 13:53:36 +12:00
Sam Hemelryk aec4f1e956 Merge branch 'MDL-39135-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-04-19 13:48:07 +12:00
Sam Hemelryk 6318a38885 MDL-38565 cache: tidy up pre-integration
Conflicts:
	lib/db/upgrade.php
2013-04-19 10:11:38 +12:00
Sam Hemelryk 1a038ed7d9 MDL-38565 cache: improve stats gathering 2013-04-19 10:11:37 +12:00
Sam Hemelryk 312ad653e9 MDL-38565 cache: upgrade code to amend default stores
Conflicts:
	version.php
2013-04-19 10:11:37 +12:00
Sam Hemelryk 73433c0995 MDL-38565 cache: cron routine to clean up old session data 2013-04-19 10:09:55 +12:00
Sam Hemelryk 2e0b7de1b1 MDL-38565 cache: session caches now function as expected
This change is a large change to the way sessions are handled
within MUC after it was discovered that session did not function
as expected when any store other than the default session store
was being used.
As part of this change the session loader has been largely
customised in order to consolidate session data for the loader.
The unit tests have also being greatly increased to provide
better coverage for sessions.

Conflicts:
	cache/README.md
	cache/tests/cache_test.php
2013-04-19 10:09:55 +12:00
Petr Škoda 7fcffb98bb MDL-39141 fix customtoolbar notices during upgrade 2013-04-18 20:22:52 +02:00
Jean-Michel Vedrine 3b44cab37b MDL-39172 Import of .dat files is broken in blackboard_six import format 2013-04-18 17:48:08 +02:00
Dan Poltawski d298661993 weekly release 2.4.3+ 2013-04-18 12:49:40 +01:00
Davo Smith 76bb36da6f MDL-39219 mod_scorm - replace JSON with Y.JSON for IE7 compatibility 2013-04-18 12:47:54 +01:00
Dan Poltawski 0d80c1cc7a Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-04-18 12:44:04 +01:00
Dan Poltawski 8803e9c7e1 Merge branch 'MDL-39203-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-04-18 08:44:10 +01:00
Frederic Massart c32c6c1c24 MDL-39203 repository: Fixed authentication errors with Dropbox 2013-04-18 14:54:19 +08:00
Dan Poltawski f8e976e56a Merge branch 'MDL-38824-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-04-17 14:38:06 +01:00
Tim Hunt ccbe8ca79e MDL-39167 quiz access rules: need to validate their settings.
We were missing the hook in the form validation method. We had them
everywhere else they were needed.
2013-04-17 14:26:08 +01:00
Dan Poltawski ea4841fbef Merge branch 'wip-mdl-39110-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-04-17 13:02:47 +01:00
Mark Nelson bb244cb482 MDL-39185 mod_forum: declare new object before creating member variables to prevent Strict Standards warning 2013-04-17 15:21:44 +08:00
Dan Poltawski ea99087d08 MDL-39135 assign_feedback: fix missing renderer argument
assign_user_summary expects extra profile fields

Conflicts:

	mod/assign/feedback/file/locallib.php
2013-04-17 14:05:31 +08:00
Jean-Philippe Gaudreau efc0be399e MDL-39084 grade: Capability checks are incoherent for the Course grade settings section 2013-04-16 09:28:25 -04:00
Dan Poltawski 464ab7894b Merge branch 'MDL-39080_M24' of git://github.com/kordan/moodle into MOODLE_24_STABLE 2013-04-16 12:45:01 +01:00
Daniel Neis Araujo 461ccadab0 MDL-38136: fix user_get_user_details doesn't return idnumber (thanks to Antonio Carlos Mariani) 2013-04-16 15:47:16 +08:00
Damyon Wiese 20d52c6b9c Merge branch 'wip-MDL-38055-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-04-16 14:42:20 +08:00
Sam Hemelryk d203a50c02 MDL-39127 navigation: fixed loading of categories for navbar
Conflicts:

	lib/navigationlib.php
2013-04-16 10:04:55 +08:00
Eloy Lafuente (stronk7) 1e803a3e45 Merge branch 'm24_MDL-37844' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-04-16 01:15:06 +02:00
Dan Poltawski dd79ab10b3 Merge branch 'MDL-38880_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-04-15 16:25:15 +01:00
Dan Poltawski ef9c4b6ef5 Merge branch 'MDL-39000-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-04-15 08:30:16 +01:00
Dan Poltawski 7af74e7f19 Merge branch 'MDL-38011-24' of git://github.com/srynot4sale/moodle into MOODLE_24_STABLE 2013-04-15 07:59:10 +01:00
Rajesh Taneja 1f02e1548f MDL-39110 Administration: Get role from get_roles function to display as filter label 2013-04-15 14:29:49 +08:00
Damyon Wiese 5ac9166740 Merge branch 'MDL-39068_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-04-15 14:24:02 +08:00
Damyon Wiese 25105b650a MDL-37762 navbar - fold some long lines in previous patch 2013-04-15 13:26:36 +08:00
Damyon Wiese 6bf520165b Merge branch 'wip-MDL-37762-m24' of https://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-04-15 12:37:54 +08:00
Eloy Lafuente (stronk7) 6e0b5a725d Merge branch 'MDL-39089_24' of git://github.com/dmonllao/moodle into MOODLE_24_STABLE 2013-04-15 01:57:35 +02:00
Sam Hemelryk ce520e0470 MDL-37762 navbar: shows categories for current course again 2013-04-15 11:35:23 +12:00
Paul Nicholls 7a5f3762d0 MDL-37762: Breadcrumb not showing categories on course page 2013-04-15 11:30:23 +12:00
Eloy Lafuente (stronk7) a68e6026ca MDL-39068 use cross-db text column ORDER BY
Credit goes to Valerii Kuznetsov, thanks!
2013-04-14 16:09:54 +02:00
AMOS bot 6c5a661606 Automatically generated installer lang files 2013-04-13 00:37:25 +00:00
David Monllao 42cff3b54a MDL-38089 mod_wiki: Fix incorrect links 2013-04-12 13:17:13 +08:00
Damyon Wiese aa17028b35 MDL-29877 Grades - Remove hardcoded prefix from upgrade step 2013-04-12 11:53:20 +08:00
Damyon Wiese 870f78b0fd MDL-29877 Grades - version bump for upgrade step.
And whitespace...
2013-04-12 11:41:54 +08:00
Damyon Wiese d4a997b7d7 Merge branch 'MDL-29877_bad_grade_item_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE
Conflicts:
	version.php
2013-04-12 11:36:17 +08:00
Jayesh Anandani 7ec3994f78 MDL-39054 quiz statistics: move hard-coded text to lang file 2013-04-12 11:09:24 +08:00
Dan Poltawski 5c58c88545 Merge branch 'MDL-37537-24' of git://github.com/srynot4sale/moodle into MOODLE_24_STABLE 2013-04-12 10:26:45 +08:00
Jean-Philippe Gaudreau 4d06b6a841 MDL-38637 CAS Authentication: Undefined index: QUERY_STRING when executing cron 2013-04-11 10:55:02 -04:00
Jean-Michel Vedrine 50a9a7d498 MDL-38880 Imported Cloze questions lose embedded images or other media 2013-04-11 16:29:34 +02:00
Aaron Barnes d20826dc4c MDL-37537 completion: Fix incorrect lang string reference in block 2013-04-12 01:49:35 +12:00
Aaron Barnes 3220058b14 MDL-38011 completion: Use new localised role names 2013-04-12 01:39:52 +12:00
Eloy Lafuente (stronk7) 931eff3b84 weekly release 2.4.3+ 2013-04-11 12:42:07 +02:00
Eloy Lafuente (stronk7) 112c8e8812 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-04-11 12:32:51 +02:00
Kordan 871a4102dc MDL-39080 theme_formal_white: modified "Main menu" block look to resemble the "Navigation" one 2013-04-11 11:01:20 +02:00
Dan Poltawski caf6774576 Revert "MDL-38254 Assignment Module: add avaialble message to all assignment types"
This reverts commit 079a76bb37.
2013-04-11 16:53:02 +08:00
Damyon Wiese 1b68e51133 MDL-35144 Categories - Allow editing by custom roles
Users with category:manage or course:create should be able to edit
the course/category.php page.
2013-04-11 14:07:46 +08:00
Eloy Lafuente (stronk7) 0d9a2ce8e0 Merge branch 'MDL-38525-24' of https://github.com/damyon/moodle into MOODLE_24_STABLE 2013-04-11 00:57:07 +02:00
Damyon Wiese 3133c8e4ac MDL-38525: Assignment upgrade - Error with comments for unenrolled students.
Students with comments on 'upload' assignments cause errors for the upgrade
tool if they are no longer enrolled. The solution is to allow siteadmin to
see student submissions even if the student is not currently enrolled (you
must be siteadmin to run the upgrade tool).
2013-04-10 16:17:43 +08:00
Ryan Panning 1fbe4f46ba MDL-38525: Assignment - print exception message when assignment upgrade fails.
Change to use getMessage() from the Exception class will prevent "{$a}" when
$e->error is null.
2013-04-10 16:17:33 +08:00
Dan Poltawski 4e7aef7651 Merge branch 'MDL-19072_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-04-10 14:10:51 +08:00
Dan Poltawski 5bad124045 Merge branch 'MOODLE_24_MDL35144' of git://github.com/thepurpleblob/gumoodle into MOODLE_24_STABLE 2013-04-10 12:23:53 +08:00
Dan Poltawski eda9f7bd43 Merge branch 'wip-mdl-35883-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-04-10 12:16:40 +08:00
Dan Poltawski 3a44f70e62 Merge branch 'MDL-38254_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-04-10 12:13:28 +08:00
Dan Poltawski a1ec118378 Merge branch 'MDL-38999_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-04-10 10:35:52 +08:00
Andrew Davis 166102e9b3 MDL-29877 core_grade:add some upgrade code to fix broken grade items introduced by bad restores 2013-04-10 08:28:05 +08:00
Petr Škoda 1802cb2536 MDL-38912 fix incorrect timeout reset 2013-04-10 00:07:26 +02:00
sam marshall 58404f0ab4 MDL-39000 Conditional activities: Section condition restore errors 2013-04-09 17:35:39 +01:00
Jean-Michel Vedrine 720b0f5eb0 MDL-19072 XHTML export for match questions fix for distractors 2013-04-09 11:02:27 +02:00
Dan Poltawski 892c4e1bc6 Merge branch 'wip-MDL-38442-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-04-09 15:40:19 +08:00
Aparup Banerjee 883050603c Merge branch 'w14_MDL-38798_m24_php55' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-04-09 14:31:10 +08:00
Aparup Banerjee 6b9fc96f8e Merge branch 'wip-MDL-38887-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-04-09 14:21:32 +08:00
Dan Poltawski dec2c2086f Merge branch 'MDL-38766/MOODLE_24_STABLE' of github.com:kemitix/moodle into MOODLE_24_STABLE 2013-04-09 10:38:09 +08:00
Dan Poltawski 927416c2f3 Merge branch 'wip-MDL-38541-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-04-09 09:48:05 +08:00
Marina Glancy 69778612db MDL-38541 Restrict calling rebuild_course_cache() from upgrade process
only plugins upgrade scripts can call rebuild_course_cache() and for clearing cache only.
2013-04-09 11:13:50 +10:00
AMOS bot dea31c3040 Automatically generated installer lang files 2013-04-09 00:37:50 +00:00
Eloy Lafuente (stronk7) 989a8abc44 Merge branch 'w14_MDL-38753_m24_ocicount' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-04-09 02:25:31 +02:00
Petr Škoda cfbdf4d2a0 MDL-39028 fix sqlsrv concat type conversion 2013-04-09 02:18:34 +02:00
Sam Hemelryk a95fb6895d MDL-38442 navigation: set_expansion_limit now only hides structural nodes 2013-04-09 12:06:26 +12:00
Petr Škoda 239fb7ac41 MDL-39024 fix MSSQL seek past the end of recordset 2013-04-09 01:59:43 +02:00
Petr Škoda 0816f853fa MDL-39022 fix MSSQL concat type conversion 2013-04-09 01:56:48 +02:00
Eloy Lafuente (stronk7) f6a2e02702 Merge branch 'MDL-38912_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-09 01:39:49 +02:00
Damyon Wiese d11c78a127 MDL-38907 Course: Remove unused CSS causing jump menu to be center aligned. 2013-04-09 01:09:50 +02:00
Eloy Lafuente (stronk7) a387569134 Merge branch 'MDL-39023-parentlang_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-04-08 16:57:47 +02:00
Howard Miller de6e4874ef MDL-35144 adding editing capabiltities to page 2013-04-08 15:47:03 +01:00
Eloy Lafuente (stronk7) eecfff557d MDL-38999 timezones: add some TZ/stamps know to be problematic to tests. 2013-04-08 16:32:28 +02:00
Eloy Lafuente (stronk7) 8874028e9e MDL-38999 timezones: fixed timezone information. 2013-04-08 16:32:19 +02:00
sam marshall cfd41befd5 MDL-38824 Activity completion: Automatic completion quotes not escaped 2013-04-08 14:53:38 +01:00
David Mudrák 5c0877079c MDL-39023 Make get_language_dependencies() aware of circular dependency risk
The patch reimplements the core_string_manager::get_language_dependencies()
so that potentially mis-configured language packs with circular
dependencies or self dependency do not make the site unavailable.
Unit tests for the expected behaviour are added.
2013-04-08 14:26:23 +02:00
Petr Škoda b795853f5b MDL-38753 tweak count SQL to make stupid Oracle happy 2013-04-08 12:34:46 +02:00
Damyon Wiese 0ab296bd10 Merge branch 'MDL-38452-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-04-08 14:08:24 +08:00
Dan Poltawski 99a66861b7 Merge branch 'MDL-37676_24_STABLE' of git://github.com/appalachianstate/moodle into MOODLE_24_STABLE 2013-04-08 14:07:04 +08:00
Tim Lock 0852e56af6 MDL-35868: quiz: Use correct attemptnumber when a last attempt exists. 2013-04-08 11:09:42 +08:00
Dan Poltawski 3a509e1a6a Merge branch 'wip-MDL-38701-m24' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-04-08 10:23:21 +08:00
Marina Glancy 4ea004cf9e MDL-38701 Added missing require_once() before calling course_get_format 2013-04-08 11:37:33 +10:00
Marina Glancy 11799954dc MDL-38887 dim hidden branches in navigation expanded via AJAX requests 2013-04-08 11:36:15 +10:00
AMOS bot ddc9ca757d Automatically generated installer lang files 2013-04-08 00:36:05 +00:00
Matteo Scaramuccia 18c3001eb4 MDL-35840 SCORM TOC: fixed a typo, improvements on getting the focus 2013-04-08 09:45:07 +12:00
Dan Marsden 9e8c6c7bff MDL-37844 SCORM: fix js error and highlight selected node in TOC. 2013-04-08 09:45:00 +12:00
Petr Škoda 5364ee6b09 MDL-38798 remove unused property which was giving notices in PHP 5.5beta 2013-04-07 11:53:50 +02:00
AMOS bot 7ecf4f1360 Automatically generated installer lang files 2013-04-07 00:37:25 +00:00
Tim Hunt 1e659c865a MDL-38912 prevent time-outs during unit tests. 2013-04-05 18:39:20 +01:00
Andrea Bicciolo 704e2ecaaa MDL-38480_m24 Fix for messy usage of language strings in block course overview 2013-04-05 12:25:04 +02:00
Dan Poltawski bd11908373 weekly release 2.4.3+ 2013-04-05 18:01:38 +08:00
Dan Poltawski 76593ae5e6 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-04-05 17:52:35 +08:00
Paul Campbell 3519df7631 MDL-38766 wiki2.0: fix redirects
Signed-off-by: Paul Campbell <pcampbell@carnegiecollege.ac.uk>
2013-04-05 09:38:30 +01:00
Rossiani Wijaya 079a76bb37 MDL-38254 Assignment Module: add avaialble message to all assignment types 2013-04-04 11:08:57 +08:00
AMOS bot 362add0f4f Automatically generated installer lang files 2013-04-04 00:36:09 +00:00
Eloy Lafuente (stronk7) 3a5cb521c9 Merge branch 'MDL-38112-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-04-04 00:57:59 +02:00
Dan Poltawski b7f0af199d Merge branch 'MDL-38657_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-04-03 16:51:13 +08:00
Aparup Banerjee 20a98af525 Merge branch 'MDL-38809_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-04-03 16:33:00 +08:00
AMOS bot 5ac884c9a3 Automatically generated installer lang files 2013-04-03 00:35:46 +00:00
Matteo Scaramuccia 5c2a800bfa MDL-38545 Reports: PHP Strict Standards error in graph.php 2013-04-02 22:12:47 +02:00
Damyon Wiese 70a9bf863b MDL-38840 Statslib - Fix failing unit tests on ci server (DST change) 2013-04-02 16:49:21 +02:00
Rajesh Taneja 819ad10fa3 MDL-35883 Accessibility: Added title for login as user link in header and footer for accessibility 2013-04-02 16:00:29 +08:00
Rajesh Taneja 9c14f808ed MDL-35883 Accessibility: Added title for user link in header and footer for accessibility 2013-04-02 16:00:29 +08:00
Dan Poltawski b2c04be9c5 MDL-35603 backup: fix coding style issues
Conflicts:
	backup/util/ui/restore_ui_components.php
2013-04-02 14:34:29 +08:00
Dan Poltawski ecfa79b801 Merge branch 'MDL-35603_24' of git://github.com/rlorenzo/moodle into MOODLE_24_STABLE 2013-04-02 14:26:47 +08:00
Damyon Wiese 0c61dbecf7 Merge branch 'MDL-38713-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-04-02 13:19:51 +08:00
Damyon Wiese f034c23b0a Merge branch 'MDL-38700-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-04-02 13:11:13 +08:00
Dan Poltawski 536780c5de Merge branch 'MDL-38702_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-04-02 10:04:47 +08:00
Mary Evans f246415143 MDL-38657 theme_base: Fixes misalignment issue in User Report page. 2013-03-31 02:30:57 +01:00
prateeksachan e8803d5293 MDL-38361: Fixed typos in mod/assign/locallib.php 2013-03-30 23:42:25 +05:30
Tim Hunt 56054396c4 MDL-38809 quiz manual grading: delete expensive unnecssary code. 2013-03-30 17:27:16 +00:00
Rex Lorenzo 1936dbe341 MDL-35603 - Backup - Course import/restore max results
* Unified UI for import and restore course search
2013-03-28 15:24:33 -07:00
Damyon Wiese fe33d24cab weekly release 2.4.3+ 2013-03-28 14:48:58 +08:00
Damyon Wiese 994bc95e2a Merge branch 'MDL-25631_m24' of git://github.com/merrill-oakland/moodle into MOODLE_24_STABLE 2013-03-28 10:41:20 +08:00
Jonathon Fowler bbf86cd4f3 MDL-37966 Assignment: put upgraded modules where the originals were 2013-03-27 12:52:36 +10:00
Aparup Banerjee 843093789d Merge branch 'MDL-38659_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-03-27 10:38:48 +08:00
Eloy Lafuente (stronk7) 821c60617e Merge branch 'MDL-38557_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-26 23:41:31 +01:00
Eloy Lafuente (stronk7) 673ff9d82e Merge branch 'MDL-38647_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-26 23:22:53 +01:00
Eric Merrill 59c5f4cd35 MDL-25631 backup Decoupling legacy files from course config settigs. If they are present, they will be restored. 2013-03-26 17:02:51 -04:00
Petr Škoda 0fe975bbf2 MDL-37782 reset DB after each failed database test 2013-03-26 16:11:08 +01:00
Eloy Lafuente (stronk7) 25ce2cfbeb MDL-38659 environment: fix incorrect feedback messages 2013-03-26 15:36:37 +01:00
Dan Poltawski 85c361d3ea MDL-38713 course: correctly set visibleold on mod creation
Remove uncessary set of visibleold in the form
2013-03-26 16:21:16 +08:00
Damyon Wiese 48bf094142 Merge branch 'm24_MDL-38336_SCORM_TOC_links_when_Display_course_structure_is_on' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-03-26 16:02:28 +08:00
Damyon Wiese cacbbb46ce MDL-38468 Filelib: Fix ordering of new mimetypes 2013-03-26 15:25:56 +08:00
Damyon Wiese 11ba99ea72 Merge branch 'm24_MDL-38468_Fix_MHTML_files_delivery' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-03-26 15:23:57 +08:00
Charles Fulton 914624d51d MDL-38700 course: only change visibility if a module moves to a different section 2013-03-26 15:00:26 +08:00
Dan Poltawski ba97fbe855 MDL-38700 course: add tests for moveto_module()
* Test visibility when moving around hidden sections
* Test for visiblity changes when moving around in the same sections.
2013-03-26 15:00:26 +08:00
Damyon Wiese fe33e80077 Merge branch 'wip-MDL-35875-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-03-26 14:48:40 +08:00
Damyon Wiese 06b3c7e961 Merge branch 'MDL-30438_b_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-03-26 14:36:28 +08:00
Damyon Wiese a9cb8b73c8 Merge branch 'MDL-38380_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-03-26 13:24:47 +08:00
Dan Poltawski d0732e589f MDL-38112 - update to the ISO list of countries
According to ISO 3166-1
2013-03-26 10:46:19 +08:00
Damyon Wiese 0e91ef2d66 Merge branch 'wip-mdl-36882-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-03-26 10:42:18 +08:00
Rajesh Taneja 6299d9a1a7 MDL-36882 course: Added aria-live for manual completion
This is required so that assistive technologies can notify user about change on completion status
2013-03-26 10:26:28 +08:00
Damyon Wiese a5a3618c66 Merge branch 'wip-mdl-36125-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-03-26 10:13:38 +08:00
Mary Evans db5cbad673 MDL-38702 theme_mymobile: Replaced missing theme setting to disable CSS Optimiser.
The missing setting was a regression casued by MDL-33357.
2013-03-26 00:50:29 +00:00
Damyon Wiese 33c1b04c2a Merge branch 'MDL-38668_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-03-25 15:51:29 +08:00
Jason Fowler b055a241b8 MDL-35875 - Accessibility - Remove empty summary attribute for user information table in view user's profile 2013-03-25 10:30:31 +08:00
Damyon Wiese eb6f546b1b MDL-37033 Environment - Fix indenting in XML 2013-03-25 09:26:11 +08:00
Damyon Wiese 9fcdee8692 Merge branch 'MDL-37033_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-03-25 09:22:19 +08:00
Eloy Lafuente (stronk7) 864a5cfd2f Merge branch 'MDL-38658-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-03-24 23:40:55 +01:00
Eloy Lafuente (stronk7) d2db86448e Merge branch 'MDL-36927-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-03-24 23:39:22 +01:00
Matteo Scaramuccia 417d004cad MDL-38336 SCORM: incorrect TOC bulding when 'Display course structure' is on 2013-03-24 11:06:54 +01:00
Eloy Lafuente (stronk7) 3adedb6f00 MDL-38668 timezones: update to tzdata 2013b 2013-03-24 10:45:49 +01:00
Andrew Robert Nicols 65f302ac4d MDL-38658 JavaScript: Correct fullpath for dndupload definition 2013-03-23 22:07:35 +00:00
Matteo Scaramuccia 9992ee729e MDL-38468 Files API: fixed the support for MTHML (MIME HTML: web page archive) files 2013-03-23 12:26:03 +01:00
Eloy Lafuente (stronk7) d9e93de2eb MDL-37033 environment: add 2.5 brach details 2013-03-22 18:41:23 +01:00
Fred Woolard 7a257bb0f7 MDL-37676 Use course grade category if mapping fails for manual grade items 2013-03-22 08:27:21 -04:00
Tim Hunt 37b6904b8c MDL-38647 quiz review question issues
1. Page URL should contain 'step=0' if necessary, but not 'step='.
2. Review specific step was not using the right display options.
2013-03-22 11:17:48 +00:00
Tim Hunt 519c20adb8 MDL-38557 quiz manual grading should check mod/quiz:grade 2013-03-22 10:19:47 +00:00
Damyon Wiese b9ef2c9607 weekly release 2.4.3+ 2013-03-22 13:52:56 +08:00
Damyon Wiese 4b5c4e2637 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-03-22 13:35:55 +08:00
Rajesh Taneja 6d1e592c2a MDL-36125 course: Added aria-describedby for editing activity title 2013-03-22 12:42:04 +08:00
AMOS bot 526bcd44cd Automatically generated installer lang files 2013-03-21 00:37:30 +00:00
Eloy Lafuente (stronk7) 6ef445a515 Merge branch 'MDL-38035-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-03-20 17:09:22 +01:00
sam marshall 50701d1e89 MDL-38035 Conditional availability: Support multilang custom user fields 2013-03-20 15:58:59 +00:00
David Monllao 3bb4d9b400 MDL-38364 phpunit: PHPUnit autoload uses capital A 2013-03-20 16:06:10 +08:00
Ankit Agarwal 9df92fcacb MDL-36927 Reports: Page layout is not defined in course/recent.php 2013-03-20 14:13:26 +08:00
Damyon Wiese 3ab41b9779 Merge branch 'wip-MDL-38387-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-20 13:46:59 +08:00
Frederic Massart 6c402aa73d MDL-38452 repositories: User logged in as have access to non-private repositories 2013-03-20 13:32:43 +08:00
Damyon Wiese 6e2f8aa9f1 MDL-38373 Auth - Additional strict warning fix for radius authentication 2013-03-20 12:37:39 +08:00
Damyon Wiese 81c8a28c72 Merge branch 'MDL-38373_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-03-20 12:34:26 +08:00
Sam Hemelryk fb3ff98014 MDL-38055 course: fixed double encoding of title properties
Conflicts:
	lib/navigationlib.php
2013-03-20 17:28:43 +13:00
Sam Hemelryk bf07f4e212 MDL-38387 cache: removed call to plugins API from cache API 2013-03-20 16:07:53 +13:00
Sam Hemelryk 7588627b8b MDL-38350 cache: fixed issue with siteidentifier === false 2013-03-20 16:07:53 +13:00
AMOS bot 9427beaf77 Automatically generated installer lang files 2013-03-20 00:36:55 +00:00
Eloy Lafuente (stronk7) 6407ca6927 Revert "MDL-38515 JavaScript: Correct module dependencies for core_filepicker"
This reverts commit 573571d727.
2013-03-20 00:56:41 +01:00
Eloy Lafuente (stronk7) 8bcca79594 Merge branch 'MDL-38490_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-20 00:43:43 +01:00
Eloy Lafuente (stronk7) e285f93242 Merge branch 'MDL-38370-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-03-20 00:32:02 +01:00
Eloy Lafuente (stronk7) d4aac84fbe Merge branch 'w12_MDL-38364_m24_phpunitloading' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-03-20 00:19:57 +01:00
Eloy Lafuente (stronk7) 7765766512 MDL-38035 api: doc get_condition_user_fields() new param. 2013-03-20 00:06:28 +01:00
Eloy Lafuente (stronk7) 87342f4cfb Merge branch 'MDL-38035-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-03-19 23:57:51 +01:00
Eloy Lafuente (stronk7) e4095955ed Merge branch 'MDL-37664-MOODLE_24_STABLE' of https://github.com/lucisgit/moodle into MOODLE_24_STABLE 2013-03-19 23:37:31 +01:00
Eloy Lafuente (stronk7) 5efd762f7a Merge branch 'MDL-38424_m24' of git://github.com/kordan/moodle into MOODLE_24_STABLE 2013-03-19 23:18:51 +01:00
Eloy Lafuente (stronk7) 581e9db8e0 Merge branch 'MDL-38395_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-19 23:07:24 +01:00
Eloy Lafuente (stronk7) 745a0dc660 Merge branch 'MDL-38460_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-03-19 21:14:55 +01:00
Eloy Lafuente (stronk7) dc122b32b3 Merge branch 'wip-MDL-38422_M24' of git://github.com/gjb2048/moodle into MOODLE_24_STABLE 2013-03-19 21:12:53 +01:00
Eloy Lafuente (stronk7) 82f27d5bbd Merge branch 'MDL-38363_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-19 21:07:08 +01:00
Eloy Lafuente (stronk7) bc353318b2 Merge branch 'MDL-38355_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-19 21:01:10 +01:00
Eloy Lafuente (stronk7) 4b6963eb6d Merge branch 'MDL-38388_24' of git://github.com/jonof/moodle into MOODLE_24_STABLE 2013-03-19 19:03:21 +01:00
Eloy Lafuente (stronk7) 60d7878a3a Merge branch 'MDL-38412_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-19 18:22:53 +01:00
Eloy Lafuente (stronk7) f0f28e3c3b Merge branch 'w12_MDL-38329_m24_webkit' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-03-19 18:17:35 +01:00
Petr Škoda 8cdc6bfc4f MDL-38180 do not add links for enrol and other users candidates 2013-03-19 18:03:13 +01:00
Petr Škoda 15d001fc28 MDL-38202 fix loginas logout redirection 2013-03-19 16:53:57 +01:00
Eloy Lafuente (stronk7) 59faf92e1f Merge branch 'MDL-38542_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-19 16:49:23 +01:00
Eloy Lafuente (stronk7) 332e3c0153 Merge branch 'MDL-38444_24' of https://github.com/ppichet/moodle into MOODLE_24_STABLE 2013-03-19 16:35:30 +01:00
Tim Hunt 708c1b7fc8 MDL-38542 shortanswer qtype: was broken for responses of '0'.
This was a regression caused by MDL-37157 & MDL-37746.
2013-03-19 13:55:41 +00:00
Eloy Lafuente (stronk7) 38b7d50139 Merge branch 'MDL-38515-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-03-19 12:58:07 +01:00
Eloy Lafuente (stronk7) f6a52da112 Merge branch 'MDL-38397_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-19 12:28:52 +01:00
Eloy Lafuente (stronk7) d4ce77f624 Merge branch 'wip-mdl-38431-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-03-19 10:24:39 +01:00
Eloy Lafuente (stronk7) 834a0c1a55 Merge branch 'MDL-36872-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-03-19 09:37:24 +01:00
Damyon Wiese f402d3225f Merge branch 'w12_MDL-38320_m24_logininfo' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-03-19 15:02:23 +08:00
Damyon Wiese 0cb081f51f Merge branch 'MDL-38456-mdeploy-paths_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-03-19 14:12:23 +08:00
AMOS bot 00e2eb15a6 Automatically generated installer lang files 2013-03-19 00:36:22 +00:00
Damyon Wiese 147400d846 Merge branch 'MDL-38215-workshop-oracle_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-03-18 11:45:53 +08:00
Petr Škoda 54aabc8200 MDL-38320 fix role name display when roles switched 2013-03-17 21:16:33 +01:00
Petr Škoda 92ce0a63cb MDL-38329 use proper plugin name for the webkit lists workaround
Credit goes to Mauno Korpelainen, thanks.
2013-03-17 21:03:22 +01:00
Petr Škoda 6bc755274a MDL-38364 rework PHPUnit autoloading
This is related to BC incompatibility introduced in https://github.com/sebastianbergmann/phpunit/issues/848
2013-03-17 19:56:15 +01:00
Andrew Robert Nicols 573571d727 MDL-38515 JavaScript: Correct module dependencies for core_filepicker 2013-03-17 16:51:16 +00:00
ppichet 1e9f48c9bc MDL-38444 Saving datasets from edit_calculatedsimple_form.php
Bypassing the 3 steps savequestion() of calculated.
2013-03-17 00:45:00 -04:00
Eloy Lafuente (stronk7) 0713cc584d MDL-25655 glossary: non full searches now working.
In the process of updting the module from 1.9 to
2.0 the (non) full search feature was lost without notice.

This restitutes it with the same behavior present in 1.9:

- fullsearch disabled: look into concepts and aliases.
- fullsearch enabled (default): look also into definitions.
2013-03-16 18:08:51 +01:00
Eloy Lafuente (stronk7) ee40219d6a MDL-38373 Use correct PEAR->loadExtension()
Current use is wrong (static) and leads to strict standards notice.
2013-03-16 11:43:41 +01:00
Mary Evans 2ff2d96916 MDL-38380 theme_magazine: Fixed typo in style/core.css. 2013-03-16 01:42:16 +00:00
Tim Hunt d1fa204c0f MDL-38412 fix quiz reports group mode weirdness.
Moodle currently selected group uses the session. This can cause weird
effects when you have two tabs open. This is particularly weird in the
quiz reports, where some actions like delete attempt are checked against
the currently selected group.

The solution is to put the currently selected group into the URL for all
actions like delete/regrade attempt, regrade all attempts, download and
sort table.
2013-03-15 12:02:11 +00:00
Tim Hunt 7b62eec877 MDL-38363 qtype_calculated. Fix warnings. 2013-03-15 11:23:33 +00:00
Eloy Lafuente (stronk7) 29f8c0937a Moodle release 2.4.3 2013-03-15 12:03:30 +01:00
Eloy Lafuente (stronk7) 01d6191b81 weekly release 2.4.2+ 2013-03-15 09:50:08 +01:00
Tim Hunt ddd11cbf0b MDL-38395 question categories: wrong URLs after editing.
The problem was that array1 + array2 takes the values from
array1 when a key appears in both places.

While working on this area, I updated it to use html_writer.
2013-03-15 08:15:13 +00:00
Damyon Wiese cd824e74d8 Merge branch 'MDL-38474-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-03-15 13:06:04 +08:00
Frederic Massart abf0c9fc9e MDL-38474 repository: Undefined variable 2013-03-15 13:00:35 +08:00
Damyon Wiese 54c0c9e58e Merge branch 'MDL-38474-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-03-15 10:50:47 +08:00
Frederic Massart 7c78db604b MDL-38474 repository: Correct context when checking permissions to access a repository 2013-03-15 10:04:50 +08:00
Jonathon Fowler ffbc0d6f2f MDL-38388 qformat_blackboard_six: fix question image import
This works on the expectation that the returned array from readdata()
is opaque and will be fed directly into readquestions() since
filebase is different per file and needs to be set up appropriately
before each parse.
2013-03-15 09:09:54 +10:00
Tim Hunt 16442e5cfd MDL-38355 qtype_multianswer: input boxes too big in Russian.
... and any other language where the characters take multiple
bytes in UTF-8.

This fix was worked out by Dušan Ristić. I am just committing it.
2013-03-14 22:26:40 +00:00
Tim Hunt 3d8c5cb044 MDL-38397 question editing: only validate default mark if present.
Most qtypes have that field, but not all. multianswer is an example in core.
Also some contrib qtypes.
2013-03-14 22:13:44 +00:00
Tim Hunt fe9f42de4d MDL-38490 question preview, variant is attempt (not display) option 2013-03-14 17:22:32 +00:00
Eloy Lafuente (stronk7) a812924762 weekly release 2.4.2+ 2013-03-14 15:48:11 +01:00
Damyon Wiese ea8393591f Merge branch 'wip-MDL-38303-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-14 15:32:34 +08:00
Ankit Agarwal 5c18a83649 MDL-36872 reports: Fixing incorrect sorting of recent activites by timestamp 2013-03-14 14:45:24 +08:00
Aparup Banerjee ecbf8aee6e Merge branch 'MDL-38356-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-03-14 11:03:54 +08:00
Aparup Banerjee 8513176415 Revert "Merge branch 'MDL-38356-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE"
This reverts commit aebfad51a0, reversing
changes made to 484dcc9b90.
2013-03-14 11:02:27 +08:00
Mary Evans b7295e8e5d MDL-38460 theme_mymobile: Fixes resources folders to show properly on first access. 2013-03-14 01:20:18 +00:00
Eloy Lafuente (stronk7) 6b2510f4c7 Revert "Merge branch 'MDL-34818_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE"
This reverts commit 6a34b93223, reversing
changes made to c9b9abc090.
2013-03-14 00:24:07 +01:00
Andrew Robert Nicols 4969eb20ac MDL-38356 JavaScript: Correct check for currentform 2013-03-13 18:22:00 +00:00
Brent Boghosian db23afadac MDL-38356 Forms: Check that the form exists before applying changechecker
Signed-off-by: Andrew Robert Nicols <andrew.nicols@luns.net.uk>
2013-03-13 18:08:33 +00:00
David Mudrák e8c660394d MDL-38215 Fix cross-db support in workshop SQL queries
The $sql used in these methods may contain multiple parts glued
together by the UNION operator. Simply appending the ORDER BY statement
to the end of the query does not work in all DBs (failure reported at
Oracle). Following the pattern already applied in MDL-30051, we wrap the
SQL into yet another SELECT statement and perform ordering there.

Credit goes to Sara Cenni for suggesting the fix.
2013-03-13 15:04:37 +01:00
David Mudrák a1ba9e89d9 MDL-38456 Allow colons in paths passed to mdeploy.php utility
The input_manager now accepts colons (:) in TYPE_PATH options, but only
in cases where the colon is used as a part of Windows drive labels, as
in C:\apache.
2013-03-13 12:14:19 +01:00
Ankit Agarwal fc427a8cbc MDL-38370 scorm: Fixing strict standard errors in outline report 2013-03-13 16:02:38 +08:00
Eloy Lafuente (stronk7) eeb0efd7d8 Merge branch 'MDL-38268-m24' of https://github.com/jfilip/moodle into MOODLE_24_STABLE 2013-03-13 01:14:38 +01:00
Eloy Lafuente (stronk7) ddaf467f31 Merge branch 'MDL-30166-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-03-13 01:09:31 +01:00
Eloy Lafuente (stronk7) b3a5ae03d0 Merge branch 'wip-mdl-38332-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-03-12 22:53:16 +01:00
Shamim Rezaie d4677b4059 MDL-37664 course: Fix drag & drop RTL mode issue 2013-03-12 15:47:23 +00:00
sam marshall 0e79c3ee74 MDL-38035 Activity settings: Support multilang names for custom user fields 2013-03-12 15:39:38 +00:00
Kordan f1820fdd6a MDL-38424 theme_formal_white: added suggestions to css custom styles description 2013-03-12 13:49:07 +01:00
Damyon Wiese 2b2d3244cd Merge branch 'MDL-34011_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-03-12 16:04:54 +08:00
Aparup Banerjee 86070a3ed9 Merge branch 'MDL-35615_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-03-12 15:50:39 +08:00
Rossiani Wijaya 7a28bba4d3 MDL-34011 Lesson module - short answer question: fixed student attempt statistics 2013-03-12 15:02:37 +08:00
Damyon Wiese a8a71bbad3 MDL-34011 Lesson module: fixed incorrect display of student attempt for short answer question 2013-03-12 15:02:26 +08:00
Aparup Banerjee aebfad51a0 Merge branch 'MDL-38356-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-03-12 13:37:45 +08:00
Aparup Banerjee 484dcc9b90 Merge branch 'MDL-35582_message_labels_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-03-12 13:27:19 +08:00
Rajesh Taneja 967bfb4334 MDL-38431 comment: Pass formated comment created time to JS and print_comment 2013-03-12 12:38:46 +08:00
Aparup Banerjee 46640b7e53 Merge branch 'MDL-38386-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE
Conflicts:
	version.php - 2012120302.01 in db/upgrade.php too
2013-03-12 11:35:03 +08:00
Damyon Wiese a22f7cb864 Merge branch 'MDL-37771-M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-03-12 11:22:16 +08:00
Ankit Agarwal 13bb9cee30 MDL-30166 Remove deprecated %fullname% from core
Thanks to Matheus Kautzmann for the initial patch.
2013-03-12 11:16:11 +08:00
Eloy Lafuente (stronk7) 2f286d7658 Merge branch 'MDL-34774_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-03-12 00:55:05 +01:00
Eloy Lafuente (stronk7) 7b8110d4b0 Merge branch 'MDL-38337_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-12 00:25:13 +01:00
Eloy Lafuente (stronk7) 6a34b93223 Merge branch 'MDL-34818_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-03-12 00:22:27 +01:00
Eloy Lafuente (stronk7) c9b9abc090 Merge branch 'wip_24_mdl-38262' of git://github.com/iarenaza/moodle into MOODLE_24_STABLE 2013-03-12 00:05:02 +01:00
Gareth J Barnard bc8e5bce36 MDL-38422 theme_mymobile: TinyMCE editor difficulties. 2013-03-11 18:07:56 +00:00
Rossiani Wijaya 4ee9853a78 MDL-30438 Lesson Module: fixed input text editable capability after checking/unchecking unmask option for all browsers except IE8 or lower 2013-03-11 15:43:35 +08:00
Damyon Wiese ff28c81cb6 Merge branch 'wip-MDL-34713-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-03-11 13:47:22 +08:00
Rossiani Wijaya b3af55b363 MDL-30438 Lesson Module: improve password field to disabled when password protect is set to no. 2013-03-11 13:18:56 +08:00
Damyon Wiese 494c554bf3 Merge branch 'MDL-33424_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-03-11 13:18:04 +08:00
Rajesh Taneja 58c8b68c3c MDL-38332 Users: Browse list of users should not contain guest user record 2013-03-11 10:18:03 +08:00
Mary Evans 5d61ac8012 MDL-34818 theme_mymobile: Fixes resources folders to show properly on first access. 2013-03-11 00:18:44 +00:00
Mary Evans 89bcfc4aac MDL-37771 themes: Fixed table header color in Question Bank window block.
modified: theme/anomaly/style/general.css
modified: theme/base/style/question.css
modified: theme/magazine/style/core.css
modified: theme/serenity/style/core.css
modified: theme/splash/style/blue.css
modified: theme/splash/style/green.css
modified: theme/splash/style/orange.css
modified: theme/splash/style/pagelayout.css
modified: theme/splash/style/red.css
2013-03-10 19:04:43 +00:00
Sam Hemelryk 95d3b8e1f2 MDL-38387 cache: fixed inifinite initialisation loop with site id 2013-03-10 11:31:58 +13:00
Sam Hemelryk d55276ee51 MDL-38303 cache: fixed purging of session cache when switching users 2013-03-10 11:31:38 +13:00
Jean-Michel Vedrine c16e466de2 MDL-33424 Images missing when restoring a 1.9 backup 2013-03-09 13:41:03 +01:00
Tim Hunt 0e4511877e MDL-38337 quiz: respect maximum grade config for new quizzes. 2013-03-08 21:33:03 +00:00
Eloy Lafuente (stronk7) 5c8860f735 Moodle release 2.4.2 2013-03-08 20:02:48 +01:00
Jason Fowler 586fff6894 MDL-34713 - Blog - Fixing undefined index for blog menu block 2013-03-08 14:13:07 +08:00
Lalit Khattar 9dc58f9b26 MDL-34724 Accessibility: At the bottom of Messaging settings page put the label of the checkboxes in <label> 2013-03-08 10:01:45 +08:00
Damyon Wiese 0d9c836ab2 MDL-38386 Courselib: Make sure the upgrade step for MDL-38173 always runs 2013-03-08 09:19:31 +08:00
Eloy Lafuente (stronk7) db0175400b MDL-38378 Take rid of harcoded db prefix and bump. 2013-03-08 00:24:55 +01:00
Eloy Lafuente (stronk7) 5dd43226a0 weekly release 2.4.1+ 2013-03-07 16:23:57 +01:00
Eloy Lafuente (stronk7) 20cb544cdd Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-03-07 16:16:40 +01:00
Eloy Lafuente (stronk7) 5ac03639ca MDL-38345 Prevent undefined CFG leading to DB error.
It seems that MDL-32975, no matter a version bump
was done, leads to the $CFG->navsortmycoursessort
setting undefined sometimes. And that ends with an error
visiting the /my page. This just ensures a safe default
if the setting is undefined/empty.
2013-03-07 10:23:46 +01:00
Frederic Massart 67c858414a MDL-37852 repository: Admins can't access user instances settings 2013-03-07 16:37:05 +08:00
Frederic Massart e1be68f296 MDL-37852 repository: Prevent user from deleting a site-wide instance 2013-03-07 14:35:31 +08:00
Rossiani Wijaya ebfdc35f2a MDL-37411 Note Module: additional patch to fixed undefined property for stable branches 2013-03-07 11:09:05 +08:00
Damyon Wiese d6d470ae15 Revert "MDL-38055 block_courseoverview: fixed formatting of course fullname"
This reverts commit 6013e16b25.
This reverts commit 498ee7d44b.

This issue has failed testing and will be delayed.
2013-03-07 10:29:47 +08:00
Brent Boghosian 057f509fad MDL-38356 Forms: Check that the form exists before applying changechecker
Signed-off-by: Andrew Robert Nicols <andrew.nicols@luns.net.uk>
2013-03-06 21:47:15 +00:00
Eloy Lafuente (stronk7) f73c7d410b Merge branch 'MDL-38173-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-03-06 17:55:19 +01:00
Eloy Lafuente (stronk7) f4b9cea5fc Merge branch 'MDL-38352-en_fix_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-03-06 17:28:19 +01:00
Damyon Wiese 4d25fc3208 MDL-38173 Course: Fix DB from regression when adding a (new) course module to a section. 2013-03-06 23:58:36 +08:00
Helen Foster 3658d00c2b MDL-38352 Merge English strings from the en_fix language pack 2013-03-06 16:55:00 +01:00
Tim Hunt fdbb450f5f MDL-38311 question manual grading: comment fixes. 2013-03-06 10:37:16 +01:00
Sam Hemelryk 3d6fb349eb MDL-32975 navigation: fixed error when viewing my with no enrolments 2013-03-06 14:35:30 +13:00
AMOS bot 3cc745a16c Automatically generated installer lang files 2013-03-06 00:36:56 +00:00
Eloy Lafuente (stronk7) ef01018a00 Merge branch 'MDL-38311_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-06 01:24:11 +01:00
Rossiani Wijaya bc144ebbe0 MDL-37411 Notes: unset courseid and userid when updating the note to prevent accidental changes. Thank you Sam Hemelryk for suggesting an alternative solution.
Conflicts:
	notes/edit.php
2013-03-06 09:39:41 +13:00
sam marshall cc59085352 MDL-38315 Completion: Bugs with 'locked' status in activity form 2013-03-05 16:34:38 +00:00
Justin Filip 3000c6bde7 MDL-38268 files: Must be explicit about switching cURL request method from HEAD to GET. 2013-03-05 11:30:16 -05:00
Eloy Lafuente (stronk7) add7b5a250 Merge branch 'MDL-38119_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-05 16:45:42 +01:00
Tim Hunt 1707b741b6 MDL-38311 questions: manual grading API should accept commentformat
Comment format (FORMAT_...) was correctly being processed when the
manual grading happened as the result of a form submission. It was only
when done using the question_usage or question_attempt API method that
there was no way to specify the format. (Although I think the only place
this API as used was in the unit tests.)

Note that question_attempt::manual_grade API had to change, but I don't
think that is a real API change. Calling code should be using
question_usage::question_attempt, which is backwards compatible.

Note that now, if you don't pass format, then no error is generated, but
a developer debugging message is generated.
2013-03-05 11:56:12 +00:00
Aparup Banerjee 57b0cfaaf1 Merge branch 'wip-MDL-34775-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-03-05 17:03:44 +08:00
Frederic Massart 2498509cfd MDL-37852 repository: Prevent undesired access to repositories settings 2013-03-05 09:56:19 +01:00
Damyon Wiese fa1a43c43e Merge branch 'MDL-38282_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-05 16:14:26 +08:00
Daniele Cordella 9593527b54 MDL-35615 Course section: fixed alignment for userdefaultname checkbox to be inline with section name text input 2013-03-05 16:05:28 +08:00
Damyon Wiese 099b7986a5 Merge branch 'MDL-38279_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-03-05 15:36:15 +08:00
Damyon Wiese c694545650 MDL-37935: Cache - fix spelling mistake in language string 2013-03-05 13:07:33 +08:00
Damyon Wiese c23f9efc64 Merge branch 'wip-MDL-37935-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-05 13:07:19 +08:00
Aparup Banerjee a05b00c686 Merge branch 'MDL-30481_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-03-05 12:56:14 +08:00
Damyon Wiese 469025580f Merge branch 'wip-MDL-38055-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-05 11:41:11 +08:00
Frederic Massart eecdec4d5b MDL-34284 library: Import ZF2012-01 security patch for Zend 2013-03-05 10:32:16 +08:00
Sam Hemelryk af27002b54 Merge branch 'wip-MDL-37901_M24' of git://github.com/gjb2048/moodle into MOODLE_24_STABLE 2013-03-05 15:22:57 +13:00
Eloy Lafuente (stronk7) 29f07d932a Merge branch 'wip-MDL-36215-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-05 01:28:03 +01:00
Eloy Lafuente (stronk7) 00d4e02598 MDL-32975 mini-bump to get navsortmycoursessort defined. 2013-03-04 23:47:10 +01:00
Eloy Lafuente (stronk7) 032b80ea4b Merge branch 'wip-MDL-32975-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-04 23:47:10 +01:00
Sam Hemelryk 7581032c96 MDL-32975 navigation: Added option to select how my courses are sorted 2013-03-05 09:46:36 +13:00
Sam Hemelryk b0aca71569 Merge branch 'MDL-38101-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-03-05 09:29:49 +13:00
Eloy Lafuente (stronk7) 083b0a54aa Merge branch 'MDL-37522-published-attachment_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-03-04 20:47:02 +01:00
Eloy Lafuente (stronk7) 6c2dec31f5 Merge branch 'wip-MDL-33013-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-04 20:18:37 +01:00
Eloy Lafuente (stronk7) 4856fb65b2 Merge branch 'MDL-36380-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-03-04 18:00:03 +01:00
Eloy Lafuente (stronk7) bbdbe0a490 Merge branch 'wip-MDL-37983-24' of git://github.com/abgreeve/moodle into MOODLE_24_STABLE 2013-03-04 16:43:00 +01:00
Eloy Lafuente (stronk7) 26431c6f94 Merge branch 'MDL-38170-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-03-04 16:26:07 +01:00
Sam Hemelryk 892ee7ee56 Merge branch 'MDL-35350_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-03-04 16:12:54 +13:00
Sam Hemelryk fb2ac5029c Merge branch 'MDL-35127-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-03-04 16:07:59 +13:00
Eloy Lafuente (stronk7) 653c7d4a27 Merge branch 'wip-MDL-38205-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-04 03:01:21 +01:00
Frederic Massart 6153c8040d MDL-36426 repository: Prevent login_as() users to access 2013-03-04 02:38:32 +01:00
Sam Hemelryk b158bcce98 Merge branch 'MDL-37625-m24' of https://github.com/jfilip/moodle into MOODLE_24_STABLE 2013-03-04 14:18:33 +13:00
Sam Hemelryk 6a218739e4 Merge branch 'MDL-36128-moodle24' of https://github.com/StudiUM/moodle into MOODLE_24_STABLE 2013-03-04 13:59:40 +13:00
Frederic Massart 92e5923857 MDL-37681 repository_webdav: improved form handling when configuring an instance 2013-03-04 13:55:47 +13:00
Rajesh Taneja a608b0e670 MDL-37338 Calendar: User will not see calendar subscription, which he/she can't edit
Signed-off-by: Rajesh Taneja <rajesh@moodle.com>
2013-03-04 01:51:09 +01:00
Sam Hemelryk 4ea25c227c Merge branch 'MDL-38168-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-03-04 13:35:00 +13:00
Frederic Massart 75822af579 MDL-37507 repositories: improved formatting of external resources 2013-03-04 13:28:36 +13:00
Mark Nielsen 53c66110a8 MDL-36901: Remove system paths from exceptions
Replaces any server paths, like dataroot, with a token
in exception messages and debug info.
2013-03-04 00:16:58 +01:00
Frederic Massart fc58c234ed MDL-37481 user: fixed bug when logged in as guest 2013-03-04 11:18:49 +13:00
Eloy Lafuente (stronk7) 8b0318d538 Merge branch 'wip-MDL-38165-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-03-03 23:08:12 +01:00
Sam Hemelryk b62c8a06ad Merge branch 'MDL-32125-moodle24' of git://github.com/StudiUM/moodle into MOODLE_24_STABLE 2013-03-04 10:31:30 +13:00
Sam Hemelryk 6013e16b25 MDL-38055 block_courseoverview: fixed formatting of course fullname
Conflicts:
	blocks/course_overview/renderer.php
2013-03-04 09:35:17 +13:00
Iñaki Arenaza 04c258ee19 MDL-38262 auth/{ldap,cas}: Fix undefined property notification on first config
Just move the test after we've set the default configuration values if
they are not defined.

Signed-off-by: Iñaki Arenaza <iarenaza@mondragon.edu>
2013-03-03 21:19:21 +01:00
Andrew Davis d2dbe64ba4 MDL-38149 core_grade: added a guard for when there are no old grades 2013-03-03 11:16:33 +08:00
Gareth J Barnard c2cd6618d2 MDL-37901 format_topics & format_weeks: Fix drag icon tooltip after move. 2013-03-02 12:53:37 +00:00
Tim Hunt 97f7bfc457 MDL-39282 quiz: always allow removal of bogus questions. 2013-03-01 17:34:17 +00:00
Tim Hunt a78c180efa MDL-38279 questions: must have default mark positive. 2013-03-01 15:22:05 +00:00
sam marshall 850d33e658 MDL-38170 SimplePie: Cannot read https feeds through proxy 2013-03-01 10:33:24 +00:00
AMOS bot 58110adcc6 Automatically generated installer lang files 2013-03-01 00:42:16 +00:00
Sam Hemelryk ca35d1c6b6 MDL-38165 cache: fixed issues purging peristent caches by event 2013-03-01 11:37:56 +13:00
Sam Hemelryk fcb404faac MDL-38165 cache: added unit tests for event purging of persistent caches 2013-03-01 11:37:56 +13:00
Sam Hemelryk 5a9b867cec MDL-38205 cache: implemented key prefix in memcache plugin 2013-03-01 10:11:19 +13:00
Sam Hemelryk f9bbcc5302 MDL-38165 cache: fixed up application event purging 2013-03-01 10:10:25 +13:00
Sam Hemelryk f810487764 MDL-38165 cache: fixed up session event purging 2013-03-01 10:10:25 +13:00
Sam Hemelryk 498ee7d44b MDL-38055 navigation: fixed ampersand use within titles
Conflicts:
	lib/navigationlib.php
2013-03-01 10:09:47 +13:00
Sam Hemelryk 704d82627c MDL-37935 cache: improved ready testing of stores on admin screen and testing script 2013-03-01 10:09:20 +13:00
Sam Hemelryk 49f853bfcb MDL-36215 navigation: fixed blog URL within courses using groups 2013-03-01 10:08:38 +13:00
Sam Hemelryk 5defa8f05e MDL-33013 navigation: fixed expansion limit issue hiding nodes 2013-03-01 10:08:15 +13:00
Jean-Philippe Gaudreau 4d30065a0a MDL-36128 grade: Import outcomes error 2013-02-28 13:30:24 -05:00
Tim Hunt 627f31b52c MDL-37847 / MDL-38119 question engine: document API change. 2013-02-28 18:26:46 +00:00
David Mudrák c24b75e257 MDL-37522 Serve images from published submissions
If the user is allowed to see the published submission, she must be also
able to see images in it (both embedded into the text as well as
attached to the submission). See the logic in submission.php as a
reference.
2013-02-28 18:51:44 +01:00
Gilles-Philippe Leblanc 445146552a MDL-32125 mod_forum: Updating subscription mode not reflecting subscribers 2013-02-28 11:59:26 -05:00
Eloy Lafuente (stronk7) 19075a2120 weekly release 2.4.1+ 2013-02-28 15:50:39 +01:00
Eloy Lafuente (stronk7) eac27523b5 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-02-28 15:40:31 +01:00
Rossiani Wijaya 5fe2acd17b MDL-34774 Lesson module: fixed report stats for 'high score' and 'low score' values where there is only one attempt with 0 score 2013-02-28 16:01:40 +08:00
Michael de Raadt 79e21e7d75 MDL-34775 - Forum, RSS - Fixing RSS entries option to be disabled if RSS is not enabled 2013-02-28 15:50:28 +08:00
Michael de Raadt d5c6c474c2 MDL-35350 Advanced uploading assignment: add submission timestamp on assignment index page 2013-02-28 14:04:50 +08:00
Frederic Massart fad56ea4be MDL-36380 stats: Issue with DST and monthly statistics 2013-02-28 13:56:45 +08:00
Frederic Massart 4c4ea10c3f MDL-36380 stats: No more duplicated entries when viewing monthly stats 2013-02-28 13:56:45 +08:00
Damyon Wiese 73646066a4 MDL-35127 Assignment - declare the variables in the outer scope (for readability) 2013-02-27 09:59:03 +08:00
Damyon Wiese 507507352b Merge branch 'MDL-35127_m24' of git://github.com/merrill-oakland/moodle into MDL-35127-24 2013-02-27 09:58:24 +08:00
Eric Merrill 37cb15e634 MDL-35127 mod_assign More efficient use of expensive database queries
Moving two relatively expensive DB queries so they are only executed when needed
instead of on every function call. They will still only execute once, and not
repeatedly during execution of the loop.
2013-02-26 09:48:46 -05:00
Rossiani Wijaya e6e074cc70 MDL-30481 Advanced upload assignment: Fixed assignment available date string to appropriately identify past or future availability 2013-02-26 17:41:04 +08:00
Eloy Lafuente (stronk7) f881b74bd8 Merge branch 'MDL-38076-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-26 10:14:51 +01:00
Erik Lundberg a5c4a76848 MDL-37835 Assignment unit tests fail when custom submission types are installed.
The assignment generator will now take all submission/feedback modules into concideration when creating new assignments.
2013-02-26 10:09:16 +01:00
Adrian Greeve 4f1538728a MDL-30669 - blocks: Unit tests for course_page_type_list() 2013-02-26 09:50:02 +01:00
Adrian Greeve 2d931ca93b MDL-30669 - blocks: Added a warning when deleting blocks that have multiple displays set.
Also added a fix to the function course_page_type_list(). It was making a call to
get_context_info_array() which will generate an error if $currentcontext is not set.
2013-02-26 09:49:52 +01:00
Damyon Wiese 382b3d7596 MDL-37792 Conditions: Fix upgrade step in previous patch 2013-02-26 10:56:11 +08:00
Damyon Wiese db0c7b4e7b Merge branch 'MDL-37792-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-02-26 10:54:48 +08:00
Sam Hemelryk 823b45cb49 Merge branch 'wip-MDL-38144-MOODLE_24_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-02-26 15:26:55 +13:00
Marina Glancy 1a9d07fb59 MDL-38144 categories are created in reverse sort order in externallib 2013-02-26 11:29:39 +11:00
Eloy Lafuente (stronk7) a5ce98d52f Merge branch 'wip-MDL-38162-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-26 01:29:10 +01:00
Sam Hemelryk 5fe9dcbbed MDL-38110 cache: increased ttl unit test value to avoid timing issues 2013-02-26 00:47:37 +01:00
sam marshall 1a44518a64 MDL-37792 Conditions: Interests condition offered but not implemented 2013-02-25 13:25:17 +00:00
Damyon Wiese 3424086143 MDL-28692 Base theme - Version bump for css change 2013-02-25 13:52:05 +08:00
Damyon Wiese 6ff9929833 Merge branch 'MDL-28692_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-02-25 13:34:55 +08:00
Damyon Wiese 203338ab02 Merge branch 'MDL-38052_M24' of git://github.com/kordan/moodle into MOODLE_24_STABLE 2013-02-25 11:38:47 +08:00
Tim Lock c9c205e450 MDL-38113: Blind Marking grader email reveals submitters details 2013-02-25 11:14:17 +08:00
Dan Poltawski 6b5dc09867 Merge branch 'wip-MDL-38091-MOODLE_24_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-02-25 11:00:11 +08:00
Dan Poltawski 45551ed4df Merge branch 'MDL-38061-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-25 10:20:55 +08:00
Damyon Wiese a083389c63 Merge branch 'MDL-35175_24' of git://github.com/rlorenzo/moodle into MOODLE_24_STABLE 2013-02-25 09:52:19 +08:00
AMOS bot 0d260e54da Automatically generated installer lang files 2013-02-25 00:39:45 +00:00
Marina Glancy c49adb8e18 MDL-38091 fixed bug with SQL query on Oracle 2013-02-23 12:22:21 +11:00
kordan 06c108f879 MDL-38052 theme_formal_white: allowed the overlap between headermenu and header logo 2013-02-22 19:12:24 +01:00
sam marshall aee5f1f4d8 MDL-38168 Filelib: Curl class does not honour proxybypass option 2013-02-22 14:20:04 +00:00
Damyon Wiese 56d22f190e weekly release 2.4.1+ 2013-02-22 10:59:52 +08:00
Damyon Wiese 45dc254910 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-02-22 10:50:27 +08:00
Damyon Wiese 351cd1416f MDL-38061 Assignment - Use $CFG->showuseridentity to add extra fields to the assignment grading table/user summary.
Conflicts:

	mod/assign/gradingtable.php
	mod/assign/locallib.php
	mod/assign/renderable.php
	mod/assign/renderer.php
2013-02-22 10:32:08 +08:00
Sam Hemelryk 7a3a576617 MDL-38162 memcache: fixed up the memcache plugins 2013-02-22 14:27:28 +13:00
Sam Hemelryk c7746a0f7f MDL-37224 backup-import: better handling of search button 2013-02-21 08:24:20 +13:00
Dan Poltawski b1703e2951 Revert "MDL-36380 stats: No more duplicated entries when viewing monthly stats"
This reverts commit 33b5464e96.
2013-02-20 17:04:52 +08:00
Dan Poltawski 349a6fde37 Merge branch 'MDL-35622-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-20 14:27:52 +08:00
Rajesh Taneja 2225d0cfe6 MDL-37329 Navigation: Enrolled courses in category should be added only. 2013-02-20 12:41:21 +08:00
Frederic Massart 16296b4a84 MDL-35622 files: Fixed typo in galleryitem extension 2013-02-20 12:23:56 +08:00
Rajesh Taneja d432ff9e99 MDL-37329 Navigation: Navigation node My Courses will only show enrolled courses 2013-02-20 08:58:02 +08:00
Eloy Lafuente (stronk7) d863b93f5c MDL-37894 Amend tests with new openclose rule. 2013-02-20 01:37:08 +01:00
Eloy Lafuente (stronk7) 49ac497117 Merge branch 'wip-MDL-37224-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-20 00:48:50 +01:00
Eloy Lafuente (stronk7) ee04accfba Merge branch 'wip-MDL-34298-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-20 00:46:24 +01:00
Eloy Lafuente (stronk7) 5ddaf0a8ff Merge branch 'MDL-37894_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-02-20 00:40:21 +01:00
Eloy Lafuente (stronk7) 097404cd2b Merge branch 'MDL-37967_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-02-20 00:34:36 +01:00
Eloy Lafuente (stronk7) 950fead105 Merge branch 'wip-MDL-38075-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-20 00:07:47 +01:00
sam marshall fc84419f34 MDL-38101 Completion: Error when teacher/admin marks activity complete 2013-02-19 16:57:09 +00:00
Eloy Lafuente (stronk7) 8e628ee242 MDL-32620 whitespace + comment fixes. 2013-02-19 13:23:10 +01:00
Mark Nielsen 2fc00b3a5d MDL-32620: Fixing up white space in comment 2013-02-19 13:23:01 +01:00
Chris Scribner 53a993e103 Fixing an issue with not sending the launch_presentation_return_url 2013-02-19 13:22:55 +01:00
Eloy Lafuente (stronk7) e9d41cebe5 Merge branch 'MDL-38031-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-19 12:50:25 +01:00
Eloy Lafuente (stronk7) b5476a34bc Merge branch 'MDL-38033_dnd_uppercase_extn_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE 2013-02-19 12:24:24 +01:00
Dan Poltawski 8fbdd7cd1e Merge branch 'w07_MDL-38059_m24_cachedir' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-02-19 14:07:20 +08:00
Damyon Wiese fc511c8e48 Merge branch 'wip-MDL-38000-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-19 13:47:23 +08:00
Dan Poltawski e2b55c9c34 Merge branch 'MDL-38048-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-19 13:44:27 +08:00
Dan Poltawski bf0c578f16 Merge branch 'm24_MDL-37449_Reports_ORA-00918_column_ambiguously_defined' of https://github.com/scara/moodle into MOODLE_24_STABLE 2013-02-19 13:41:55 +08:00
Dan Poltawski e23d098117 Merge branch 'MDL-37749_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-02-19 12:25:30 +08:00
Damyon Wiese e3f6d84b15 MDL-31636 Comments - Call display callback when adding a new comment. 2013-02-19 11:52:13 +08:00
Aparup Banerjee 86c1de421f MDL-31636 Added strftimeformat to comment object being passed through to xxx_comment_display() for further time format changes. 2013-02-19 11:52:02 +08:00
Aparup Banerjee 5fef447ee3 MDL-31636 redirect debugging to error log for ajax 2013-02-19 11:51:50 +08:00
Dan Poltawski ff7a518119 Merge branch 'MDL-38051_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-02-19 11:23:46 +08:00
Dan Poltawski 0141a869eb Merge branch 'MDL-37934_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-02-19 10:56:37 +08:00
AMOS bot ad3e244afd Automatically generated installer lang files 2013-02-19 00:44:34 +00:00
Sam Hemelryk 99720e73a6 MDL-34298 course: fixed course search output validation issue 2013-02-19 11:03:33 +13:00
Sam Hemelryk f3e186ab55 MDL-37224 backup: fixed bug when searching for a course to import 2013-02-19 09:32:22 +13:00
Tim Hunt fd8c97d264 MDL-37894 Show the quiz close date even if the quiz is not open yet.
People care a lot about deadlines!
2013-02-18 10:28:45 +00:00
Dan Poltawski 0e3d1236f8 Merge branch 'MDL-38039_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-02-18 15:59:56 +08:00
Aparup Banerjee 3026cb9910 MDL-37687 use $SITE to allow non-logged-in users to browse comment via ajax 2013-02-18 15:18:54 +08:00
Jean-Michel Vedrine ddc03b10d5 MDL-37967 Improve XML question import format handling of duplicated files 2013-02-18 07:54:30 +01:00
Dan Poltawski ff1d6556a7 Merge branch 'MDL-37396_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-02-18 14:27:40 +08:00
Dan Poltawski 9d0c759ed1 Merge branch 'MDL-36380-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-18 14:18:36 +08:00
Rossiani Wijaya 4086097935 MDL-37396 Enrollmen: pass $perpage as optional_param and set default perpage variable in quickenrolment.js 2013-02-18 13:30:33 +08:00
Damyon Wiese bc11a70203 Merge branch 'MDL-37939-m24' of https://github.com/andrewnicols/moodle into MOODLE_24_STABLE
Conflicts:
	lib/db/upgrade.php
	version.php
2013-02-18 12:47:32 +08:00
Dan Poltawski 047f7aa46c Merge branch 'MDL-35336_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-02-18 12:24:12 +08:00
Dan Poltawski a2f6f882c4 Merge branch 'MDL-35622-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE
Conflicts:
	lib/db/upgrade.php
	version.php
2013-02-18 11:33:00 +08:00
Dan Poltawski f4fb6d9898 Merge branch 'MDL-34800_ajax_submit_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-02-18 11:07:40 +08:00
Damyon Wiese 86c2bbd5f2 MDL-37683 cache: - Comments cleanup and remove ;; 2013-02-18 10:41:48 +08:00
Damyon Wiese b6f49c741d Merge branch 'wip-MDL-37683-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-18 10:39:47 +08:00
Rossiani Wijaya 53a054c8dd MDL-37396 User Enrollment: fixed missing user from enrolment sub-menu 2013-02-18 10:27:38 +08:00
Rossiani Wijaya 2102aee45c MDL-35336 report (course overview): check the setting for enablestats before printing out the node for setting > site admin > reports 2013-02-18 10:22:51 +08:00
Rossiani Wijaya ec0fef3294 MDL-35336 Report (course overview): fixed redirect url to enable statistics setting page when statistics is disable 2013-02-18 10:22:50 +08:00
Mary Evans b402f6ddc3 MDL-28692 theme_base: Added background-color to admin settings form overridden in base/style/admin.css 2013-02-18 01:58:47 +00:00
Frederic Massart 5bcea4d315 MDL-38076 usability: Fix wrong position of new 2.4 icons 2013-02-18 09:41:31 +08:00
Adrian Greeve 3884b0624e MDL-37983 - my home / navigation: $CFG->forcelogin is no longer affecting default home page redirects. 2013-02-18 08:53:45 +08:00
Sam Hemelryk 31c94e5cb3 MDL-37683 cache: improved indentifier collection and storage 2013-02-18 10:20:23 +13:00
Sam Hemelryk 2ad68b8c95 MDL-38000 css: fixed handling of CSS files by outputlib. 2013-02-18 08:34:01 +13:00
Sam Hemelryk a2b5f389de MDL-37683 cache: siteidentifier is now included in the keys
Conflicts:
	lib/db/upgrade.php
	lib/moodlelib.php
	version.php
2013-02-18 08:30:29 +13:00
Sam Hemelryk fd6d738db4 MDL-38075 csslib: fixed coding error when working with an array of styles 2013-02-18 08:22:08 +13:00
Petr Škoda 4a9c28b513 MDL-38059 explain that cachedir must be shared in cluster 2013-02-16 14:45:17 +01:00
Jean-Michel Vedrine ffcc444fa7 MDL-38051 Annihilate all the CRLFs present in some questions/fixtures... 2013-02-16 14:41:35 +01:00
Andrew Robert Nicols acdf4859b5 MDL-37939 Course: Add additional unit tests to confirm that module move occurs correctly 2013-02-15 21:10:22 +00:00
Andrew Robert Nicols 41d397e68b MDL-37939 Course: Correct broken sequence data 2013-02-15 21:10:13 +00:00
Matteo Scaramuccia 9b6485865c MDL-37449 Incorrect doubled 'u.email' field in the SQL query (Oracle error: ORA-00918) 2013-02-15 21:19:14 +01:00
Frederic Massart 33b5464e96 MDL-36380 stats: No more duplicated entries when viewing monthly stats 2013-02-15 15:03:37 +08:00
Frederic Massart 59cb24ff0c MDL-38048 documentation: Typo in README file 2013-02-15 13:15:24 +08:00
Frederic Massart b4d0144d09 MDL-38301 usability: Fixed wrong icon size 2013-02-15 10:05:20 +08:00
Eloy Lafuente (stronk7) 03fd922158 MDL-38040 Clean core from CRLFs 2013-02-15 02:20:28 +01:00
Mary Evans 229e69a1c0 MDL-38039 theme_base: Corrected typo fickering to flickering in CSS comment which blocked IPCOP browser firewall in IE. 2013-02-15 01:06:44 +00:00
Davo Smith aea372a659 MDL-38033 dndupload - ignore case when comparing dropped file extensions with those supported by activity modules 2013-02-14 20:22:07 +00:00
Jean-Michel Vedrine 58a43ebebe MDL-37934 Blackboard_six question import fails in some cases
Import fails if the same image is used several times
in the same field of the same question.
2013-02-14 14:43:32 +01:00
Damyon Wiese 09de5eb3de weekly release 2.4.1+ 2013-02-14 14:08:04 +08:00
Damyon Wiese 73e15efa4b Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-02-14 14:06:54 +08:00
AMOS bot 5b98dd1e85 Automatically generated installer lang files 2013-02-14 00:49:56 +00:00
Damyon Wiese 47d8bb6e25 MDL-37883 Assignment Grade import/export. Additional fix to prevent different grade rounding on export. 2013-02-13 15:35:39 +08:00
AMOS bot a31370452a Automatically generated installer lang files 2013-02-13 00:45:40 +00:00
Rex Lorenzo b20c4d58db MDL-35175 - Lesson shows no attempts if associated with a grouping 2013-02-12 15:27:50 -08:00
Mary Evans fbf87b8143 MDL-37749 theme_mymobile: Removed redundant JS and CSS code for Collapsed Topic contributed plugin. 2013-02-12 17:20:29 +00:00
Eloy Lafuente (stronk7) efdb676e84 MDL-37893 Take rid of old comment. 2013-02-12 10:04:28 +01:00
Eloy Lafuente (stronk7) 553e19b443 Merge branch 'MDL-37893-grouped-empty_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-02-12 10:04:12 +01:00
Dan Poltawski 6d5f4fd536 Merge branch 'wip-MDL-37976-MOODLE_24_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_24_STABLE 2013-02-12 16:13:55 +08:00
Dan Poltawski db41eeb8bd Merge branch 'wip-mdl-37633-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-02-12 15:49:55 +08:00
Rajesh Taneja 353fac6f48 MDL-37633 Forum: Allow fronpage user to have forum:allowforcesubscribe capability by default
Conflicts:

	mod/forum/version.php
2013-02-12 15:01:05 +08:00
Andrew Davis c605d0b9c6 MDL-34800 core_grade:switched from hiding the submit button to disabling it if ajax is enabled 2013-02-12 14:54:28 +08:00
Dan Poltawski dbdcc42eee Merge branch 'MDL-32076_unlimited2_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-02-12 14:42:35 +08:00
Dan Poltawski 25da216389 Merge branch 'MDL-37883-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-12 13:47:44 +08:00
Dan Poltawski 519375f9fe Merge branch 'MDL-37074-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-12 13:39:34 +08:00
Dan Poltawski ccc32eba06 Merge branch 'MDL-37924_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-02-12 13:36:04 +08:00
Dan Poltawski 09931f8158 Merge branch 'wip-MDL-34798_M24-2' of git://github.com/gjb2048/moodle into MOODLE_24_STABLE 2013-02-12 10:34:15 +08:00
Marina Glancy abc3a22f42 MDL-37976 fixed missing global 2013-02-12 12:53:47 +11:00
Dan Poltawski 6cf9f04cd6 Merge branch 'MDL-37952_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2013-02-12 09:46:08 +08:00
Damyon Wiese 3da2415167 MDL-36297 Version bump for js changes. 2013-02-12 09:40:11 +08:00
Davo Smith 80accd23bb MDL-37831 filepicker - icons / details / tree selector buttons now work more reliably 2013-02-12 09:37:33 +08:00
Eloy Lafuente (stronk7) d3a2b63143 Merge branch 'MDL-37943_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-02-12 01:21:06 +01:00
Eloy Lafuente (stronk7) 017382e6d3 Merge branch 'MDL-37896_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-02-12 01:14:24 +01:00
David Mudrák 0eab91dcce MDL-37919 Let PHPUnit display the content of $a even if the error string is not found 2013-02-12 01:08:22 +01:00
Eloy Lafuente (stronk7) 2c9a28bbe6 Merge branch 'MDL-35037-24' of git://github.com/danpoltawski/moodle into MOODLE_24_STABLE 2013-02-12 00:59:56 +01:00
Frederic Massart bc2de4ab0e MDL-37961 webservice: PARAM_BOOL with PARAM_DEFAULT accepts boolean default 2013-02-12 00:44:17 +01:00
Gareth J Barnard cac8708d0b MDL_34798 format_topics and format_weeks: Adjust section names when moving up. 2013-02-11 14:07:35 +00:00
Dan Poltawski af5d66f999 Merge branch 'MDL-37039-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-11 14:33:27 +08:00
Dan Poltawski 8b2034bc7b Merge branch 'MDL-37797_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-02-11 13:58:47 +08:00
Frederic Massart bac188fa71 MDL-35622 files: Add support for SMART Notebook MIME types
- The MIME type for Notebook files is: application/x-smarttech-notebook
- The MIME type for Gallery files is also: application/x-smarttech-notebook
Refs: http://exchange-forum.smarttech.com/forums/p/5152/11945.aspx#11945

Original author: Matteo Scaramuccia <moodle@matteoscaramuccia.com>
Fixed by: Paul Holden <pholden@greenhead.ac.uk>

Conflicts:

	lib/db/upgrade.php
	version.php
2013-02-11 10:29:50 +08:00
AMOS bot 526bff4c64 Automatically generated installer lang files 2013-02-10 00:41:39 +00:00
Eloy Lafuente (stronk7) dcaeeda60c MDL-37952 make helper descendants abstract 2013-02-09 16:21:49 +01:00
Tim Hunt e2d9006792 MDL-37924 quiz settings: change wrong 'fix' => 'adv'. 2013-02-08 12:50:17 +00:00
Tim Hunt 2de3659810 MDL-37896 qtype_essay: correct PARAM_CLEANHTML -> PARAM_RAW.
It turns out that you should almost never use PARAM_CLEANHTML.
2013-02-08 12:49:58 +00:00
Tim Hunt 5baa26c105 MDL-37943 upgrade: logic error in upgrade_plugins_blocks.
Derek Woolhead tracked down the problem and what needed to be fixed. I
just made the patch.

The problem was that if $plugin->cron had changed in version.php, then
the version number in the database could end up wrong after the upgrade,
and so the upgrade would immediately run a second time.
2013-02-08 12:43:58 +00:00
David Mudrák dc85a9e833 MDL-37774 Do not pass trailing slash if the method does not want it 2013-02-08 12:53:23 +01:00
David Mudrák 9f887c6c79 MDL-37774 Make moodle1_file_manager::migrate_directory() support trailing slash in rootpath
As the $rootpath is concatenated with the $relpath, we would end with a
path like course_files//file.txt. Such a path is detected as not-valid
later and an error would be thrown.

So the patch makes sure that the trailing slash is cut off and a
debugging for the developer is displayed.
2013-02-08 12:53:23 +01:00
David Mudrák 8616f9380c MDL-37774 Add unit test to illustrate the problem with the trailing slash
The patch introduces two new tests for moodle1_file_manager::migrate_directory().
The second test with the trailing slash reveals the trouble here.
The expected behaviour is that the method would deal with the trailing
slash. Debugging message for the developer should be displayed though.
2013-02-08 12:53:23 +01:00
Damyon Wiese b9dc4c3cbe MDL-37039 Assignment - Do not apply filters to grading table for offline assignments
Because the filters do not make sense for offline assignments, they are hidden. But if the active filter
prevents you from seeing any assignments you cannot change it. This change makes it so the filters are
also not applied when the assignment is an offline assignment.
2013-02-08 15:48:08 +08:00
Damyon Wiese 1d16b7f80c MDL-37074 Assign theming: Use addClass/removeClass instead of setAttribute to preserve existing classes 2013-02-08 15:18:53 +08:00
Damyon Wiese 0e6d8bc952 weekly release 2.4.1+ 2013-02-08 11:19:06 +08:00
Damyon Wiese f2d81d1e54 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-02-08 11:01:44 +08:00
Eloy Lafuente (stronk7) 04116863fb MDL-37893 Always notify pending starts before dispatching chunk 2013-02-08 01:48:32 +01:00
David Mudrák 176f08e90c MDL-37893 Allow elements with no final tags to form a grouped path 2013-02-08 01:48:32 +01:00
David Mudrák 8ab37b5fca MDL-37893 Add unit test to demonstrate the issue 2013-02-08 01:48:32 +01:00
AMOS bot 7da5b49bc4 Automatically generated installer lang files 2013-02-08 00:45:15 +00:00
Sam Hemelryk 007cd537d0 MDL-37645 cache: fixed issue deleting mongo instance 2013-02-08 08:07:01 +13:00
Dan Poltawski b59f90efa4 MDL-35037 tags: dont display blog entries when blogging disabled 2013-02-07 12:34:55 +08:00
Andrew Robert Nicols 3c754bb442 MDL-37566 AJAX Fix issues with minimum height and centring
Conflicts:
	lib/yui/chooserdialogue/chooserdialogue.js
2013-02-07 01:10:21 +01:00
Damyon Wiese 99aa14d1ff MDL-37883 Assign offline marking: Properly handle french decimal grades when importing worksheet. 2013-02-06 15:45:43 +08:00
Andrew Davis e456586166 MDL-32076 core_grade: fixed ajax handling of unlimited grades and added some unit tests 2013-02-06 15:34:35 +08:00
Rajesh Taneja cd1792a902 MDL-30144 Assignmnet 2.2: fixed context retrival 2013-02-06 13:22:17 +08:00
Eloy Lafuente (stronk7) b626992e09 Merge branch 'MDL-37854_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-02-05 11:19:30 +01:00
Mark Nelson e0d4f2b66c MDL-37854 phpunit: replaced occurrence of non-existent function assertFail 2013-02-05 18:03:58 +08:00
David Mudrák e57a314de8 MDL-37870 Fix the number of parameters when calling the parent constructor 2013-02-05 10:19:52 +01:00
Howard Miller 3bcf80e9f2 MDL-37797 HTML block: add contextid to block_positions query and make it more unique. 2013-02-05 16:23:23 +08:00
Damyon Wiese d854035ffe MDL-36206 Unit tests - Cleanup whitespace issues from previous patch 2013-02-05 14:13:37 +08:00
Jason Fowler 27e79a40ce MDL-36206 - Unit Test - Create unit test for pagination bar 2013-02-05 14:13:16 +08:00
Dan Poltawski 44a29a501a Merge branch 'MDL-37800_24' of git://github.com/grabs/moodle into MOODLE_24_STABLE 2013-02-05 12:43:15 +08:00
Dan Poltawski 7298cf7db3 Merge branch 'wip-MDL-36322-m24' of https://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-02-05 10:26:21 +08:00
Dan Poltawski 50890e037e MDL-37357 - fix trailing whitespace 2013-02-05 09:58:27 +08:00
Dan Poltawski d5822fbfd7 Merge branch 'MDL-37357_hidden_rank_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-02-05 09:58:10 +08:00
Dan Poltawski 2647ebb63c MDL-37574 - Fix navigation tests: remove title
We are no longer setting it, to improve accessibility
2013-02-05 08:38:39 +08:00
Eloy Lafuente (stronk7) 4ce7de34ca Merge branch 'MDL-37566-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-02-05 01:14:21 +01:00
Davo Smith 747e16f7b0 MDL-37801 mod_glossary - encode / decode links to 'showentry' pages during backup & restore 2013-02-05 01:03:14 +01:00
Eloy Lafuente (stronk7) 52c86533d9 Merge branch 'MDL-37775_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-02-05 00:57:33 +01:00
Eloy Lafuente (stronk7) 47ae7ebe35 Merge branch 'MDL-37785_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-02-05 00:36:13 +01:00
Eloy Lafuente (stronk7) e42c4ee260 Merge branch 'MDL-37523_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-02-05 00:28:32 +01:00
Eloy Lafuente (stronk7) 125d26d23c Merge branch 'MDL-37518_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-02-05 00:14:01 +01:00
Eloy Lafuente (stronk7) bd11fca3aa Merge branch 'm24_MDL-33078' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-02-04 23:59:14 +01:00
Eloy Lafuente (stronk7) 65828d8652 Merge branch 'MDL-37847_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-02-04 22:56:03 +01:00
Tim Hunt b7f894a403 MDL-37847 plain text essays were screwing up HTML special chars.
This was incorrect use of PARAM_CLEANHTML for these inputs.

This fix also adds some unit tests to try to verify that this does not
break again in future.
2013-02-04 12:55:31 +00:00
Mary Evans 9ed92b3bd2 MDL-37523 theme_mymobile: Removed a renderer from mymobile/renderers.php and added it to theme/mymobile/renderers/mod_choice_renderer.php. Then added a conditional statement to theme/mymobile/renderers.php in order to call mymobile/renderers/mod_choice_renderer.php. 2013-02-04 11:35:23 +00:00
Dan Marsden 76b177f6c3 MDL-33078 SCORM: rebuild toc when calling LMSCommit to improve pre-req handling 2013-02-04 22:10:19 +13:00
Damyon Wiese 2c9f35960f Merge branch 'MDL-37781-workshop-schedule_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-02-04 16:19:26 +08:00
Dan Poltawski bfc80ec4e8 Merge branch 'MDL-37574-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-02-04 16:14:12 +08:00
Dan Poltawski 64d4729f3d Merge branch 'm24_MDL-29207' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-02-04 15:56:15 +08:00
Dan Poltawski 3677b2ecf3 Revert "MDL-32076 core_grade: fixed ajax handling of unlimited grades and added some unit tests"
This reverts commit 002178276f.
2013-02-04 15:12:45 +08:00
Dan Poltawski 3fd6f7e088 Merge branch 'MDL-32076_unlimited2_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-02-04 14:30:48 +08:00
Michael Hughes da071ee1d2 MDL-30144 Assignment 2.2: Download all as zip should only contain submission from active enroled users 2013-02-04 13:55:30 +08:00
Dan Poltawski 2cb6f68179 Merge branch 'MDL-37646-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-04 13:49:32 +08:00
Dan Poltawski 8b447463ad Merge branch 'MDL-37710-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-04 12:12:56 +08:00
Dan Poltawski 3e0ddd4cfd Merge branch 'MDL-37635-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-02-04 11:57:15 +08:00
Mark Nelson ec4663f863 MDL-37518 blocks: described the introduction of the myaddinstance capability in upgrade.txt 2013-02-04 11:43:46 +08:00
Damyon Wiese ecd60630ac Merge branch 'm24_MDL-36800' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-02-04 11:41:33 +08:00
Damyon Wiese 8917ec5117 Merge branch 'MDL-37177-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-04 11:18:33 +08:00
Dan Poltawski a6bd6fcd41 Merge branch 'MDL-37746_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-02-04 10:17:46 +08:00
Dan Poltawski 56f84f2b99 Merge branch 'MDL-25853-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-02-04 10:13:58 +08:00
Dan Marsden a07fe914d0 MDL-29207: SCORM prereq callback is pure js - move it to module.js so it can be cached better. 2013-02-03 20:29:00 +13:00
Dan Marsden bb22d0696e MDL-29207 SCORM: Auto-continue doesn't work with Pre-req due to JS errors 2013-02-03 20:28:57 +13:00
Dan Marsden 216e2e5b7f MDL-36800 SCORM: Fix Yui().use calls - thanks to Nancy Cheng for the fix 2013-02-03 20:22:18 +13:00
Andrew Robert Nicols 9388982eab MDL-37574 Remove default link title from navigation items 2013-02-01 11:34:50 +00:00
Andrew Robert Nicols 3a64e6eb02 MDL-37566 AJAX Only set max-height for chooser dialogues
If we set height as well as max-height then there is a potential for
whitespace to be shown at the bottom of the list of choices.

This commit stops removing the height option so that we only rely upon
max-height for dialogue heigh calculation.
2013-02-01 11:26:30 +00:00
Andreas Grabs baea79cca4 MDL-37800 mod_feedback - item "information" does not appear correctly 2013-02-01 11:42:43 +01:00
Damyon Wiese 5c15ab2b4a MDL-37635 Assign: Prevent errors when viewing a feedback for an assignment with no gradeitem in gradebook
Unit tests removed from backport to verify that:
Feedback is visible even if there is no grade
The grade is not shown if the gradeitem is hidden unless you have mod/assign:grade capability

Conflicts:

	mod/assign/locallib.php
	mod/assign/renderer.php
	mod/assign/tests/locallib_test.php
2013-02-01 13:46:58 +08:00
Andrew Davis 6d168299ae MDL-37357 core_grade: fixed the showing and hiding of rank on the overview report 2013-02-01 10:54:41 +08:00
Andrew Davis 002178276f MDL-32076 core_grade: fixed ajax handling of unlimited grades and added some unit tests 2013-02-01 08:52:52 +08:00
Sam Hemelryk 3fbba4bf48 MDL-36322 cache: implemented cache_store::create_clone 2013-02-01 08:49:07 +13:00
Sam Hemelryk 722907c7b0 MDL-36322 cache: clarified docs for initialise and construct 2013-02-01 08:49:07 +13:00
Sam Hemelryk 770eed82fd MDL-36322 cache: cache stores now test connections during construction 2013-02-01 08:49:07 +13:00
Matteo Scaramuccia 447475e5d7 MDL-36322 Errors when updating a Moodle instance with some misconfigured cache stores 2013-02-01 08:49:07 +13:00
Tim Hunt 3f7a6d5331 MDL-37746 qtype_shortanser: avoid normalizer_normalize dangers.
When an error occurs, normalizer_normalize just silently returns null,
which is dangerous. Here, we wrap it in a safe helper function.
2013-01-31 11:33:12 +00:00
Eloy Lafuente (stronk7) a8e927e26c weekly release 2.4.1+ 2013-01-31 11:04:58 +01:00
Mary Evans 56364dcec0 MDL-37775 theme_canvas: Changed ADD a block from center align to left in style/blocks.css 2013-01-31 08:11:08 +00:00
Frederic Massart ba7b0fb3b3 MDL-37177 navigation: Prevent exception when viewing a profile
When viewing a profile as a non-authenticated user, an exception
was raised because we were trying to fetch the context of this user.
2013-01-31 12:26:52 +08:00
David Mudrák 337c3fa74c MDL-37781 Allocate workshop submissions without waiting for cron
Now we are checking for the need to execute the allocator every time the
main view.php is displayed to any user. Previously this was done by cron
only.
2013-01-31 03:38:21 +01:00
David Mudrák 351aeeeba6 MDL-37781 Check for switching the workshop phase without waiting for cron
Now we are checking for the need to switch the phase when the main
view.php is displayed to any user (previously this was done via cron
only). To give our subplugins (such as the scheduled allocation method)
a chance to do what they need to do, the workshop_viewed event is
triggered before the phase is actually switched.
2013-01-31 03:31:18 +01:00
Dan Poltawski d070222f69 Merge branch 'm24_MDL-34231' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-01-31 10:14:53 +08:00
Mary Evans 05ec4d9d20 MDL-37785 theme_base: remove duplicate .dir-rtl file-picker css rules from styke/core.css 2013-01-31 01:17:52 +00:00
Sam Hemelryk 8003618cd1 MDL-36363 cache: added unit tests for muliple loaders 2013-01-31 12:16:21 +13:00
Dan Marsden 54bc823b80 MDL-34231 SCORM: calculate correct number of attemptsleft when entering an attempt. 2013-01-31 10:46:16 +13:00
Sam Hemelryk 4786eca8f2 MDL-36363 cache: fixed issue with double parsing keys for stacked loaders 2013-01-31 09:14:31 +13:00
Damyon Wiese 2c24a252c5 Merge branch 'wip-MDL-37747-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-01-30 09:06:04 +08:00
Frederic Massart d987453bd4 MDL-25853 calendar: Fixed broken previous/next links 2013-01-30 09:03:22 +08:00
Eloy Lafuente (stronk7) 498a14ef8b Merge branch 'w04_MDL-37734_m24_marshack' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-30 01:23:36 +01:00
Sam Hemelryk 0241200633 MDL-37747 cache: changed PARAM_TEXT to PARAM_ALPHANUMEXT 2013-01-30 13:18:56 +13:00
Petr Škoda 1b2ab57a92 MDL-37767 allow empty host in enrol_database which is required for default pg socket 2013-01-30 00:42:37 +01:00
Eloy Lafuente (stronk7) f89712dc6d Merge branch 'MDL-37533-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-01-29 15:35:14 +01:00
Eloy Lafuente (stronk7) becce23e4a Merge branch 'wip-MDL-36363-m24' of https://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-01-29 12:06:43 +01:00
Petr Škoda 674e0a210d MDL-37734 add one more recordset isolation test 2013-01-29 10:18:54 +01:00
Petr Škoda e63aff8479 MDL-37734 use prefetching workaround for MARS transaction problems 2013-01-29 10:18:41 +01:00
Damyon Wiese 3cf3ecd90f MDL-37710 Assign: Fix pluginfile permission checks for student viewing their own team submission.
This change adds a function to the assign class to allow the permissions for a group submission
to be checked and updates all the submission plugins to call it.

Conflicts:

	mod/assign/locallib.php
	mod/assign/submission/file/lib.php
	mod/assign/submission/onlinetext/lib.php
2013-01-29 17:07:17 +08:00
Rajesh Taneja 9f9bc1f0ab MDL-34190 Course: Role with student archtype should be selected as default in user list 2013-01-29 16:54:04 +08:00
ppichet 92a7501ac6 MDL-29691 Improve numerical format in multianswer
Allow the use of , as decsep in multianswer numerical subquestions
2013-01-29 16:30:27 +08:00
Damyon Wiese afcc12e80b MDL-37646 Assign: Quickgrading fix when using grading filters or lots of students. 2013-01-29 14:39:42 +08:00
Dan Poltawski adedab33de Merge branch 'MDL-37694_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-29 11:54:42 +08:00
Sam Hemelryk 3cb0325122 Merge branch 'MDL-37476-stable24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-01-29 15:23:45 +13:00
Dan Marsden 2a97de2671 MDL-37696 SCORM css: don't include style.css multiple times 2013-01-29 10:34:22 +13:00
Sam Hemelryk bb5ebb6280 Merge branch 'MDL-37697-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-29 09:56:37 +13:00
Sam Hemelryk 6a1e566152 Merge branch 'MDL-37350-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-29 08:54:52 +13:00
Sam Hemelryk cd6e980e66 Merge branch 'MDL-36881-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-29 08:51:39 +13:00
Sam Hemelryk 47795b2126 Merge branch 'MDL-34671-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-29 08:39:23 +13:00
Sam Hemelryk 21126fc5e8 Merge branch 'MDL-37668-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-01-29 08:33:19 +13:00
Sam Hemelryk 353db49bfb Merge branch 'm24_MDL-34231' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-01-29 08:28:12 +13:00
Eloy Lafuente (stronk7) 18d4c3120a Merge branch 'wip-MDL-37545-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-01-28 19:23:25 +01:00
Eloy Lafuente (stronk7) f1b7893d57 MDL-37086 phpunit: use alt reset method.
When code executed in test cases is using/preventing
database transactions, phpunit itself cannot
use transactions for reseting between cases. But we
can tell it about, so some alternative (and slower)
method for reseting will be used.
2013-01-28 18:49:56 +01:00
sam marshall e978e6b5f5 MDL-37668 Accessibility: Help popup should be easy to close using keyboard 2013-01-28 10:58:59 +00:00
Andrew Robert Nicols d2e360710f MDL-34671 Stop browser receiving escape keydown in modal dialogues
In certain modal dialogues, we listen on the Escape key to close a
dialogue. However, this is still passed to the browser. As a result, if the
browser is in full screen mode and that browser respects the escape key as
a means to exit full screen.

As a result, we need to ensure that we listen for the escape key at keydown
rather than keyup, and additionally prevent the default browser behaviour.

This is a workaround to http://yuilibrary.com/projects/yui3/ticket/2532616
and, should that issue be fixed, it should be removed.
2013-01-28 10:49:15 +00:00
Sam Chaffee 48a5b81346 MDL-36881 Handle poorly behaved modname_get_types functions better
The modname_get_types function is not always well implemented by
third-party plugins and some return poor data. This in turn leads to
incorrect module definitions, and can lead to problems in both the
'Add an activity...' dropdowns and the Activity chooser.

This will also prevent display of plugins which legitimately can have
subtypes but where no subtypes were found. Since such plugins cannot be
used in this fashion in any case, this is also beneficial.

Signed-off-by: Andrew Robert Nicols <andrew.nicols@lancaster.ac.uk>
2013-01-28 10:22:55 +00:00
Andrew Robert Nicols 584eca0871 MDL-37350 Detach listeners when hiding the 'Add roles' popup
If the submit event listener is not correctly closed, then the submit event
calls the relevant callback multiple times incorrectly.

When hiding the Add role dialogue, we need to detach any event listeners
which are applied to it.
2013-01-28 09:58:39 +00:00
Andrew Robert Nicols 15652ea93c MDL-37697 Use the user selected editor format for new course forums 2013-01-28 09:55:13 +00:00
Dan Marsden 481e8f7105 MDL-34231 SCORM: Lock after final attempt when using skip content structure or direct navigation to player.php 2013-01-28 21:20:39 +13:00
Sam Hemelryk a9c75fdc75 Merge branch 'w04_MDL-37638_m24_rolecloning' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-28 17:59:48 +13:00
Sam Hemelryk 151d0c574d Merge branch 'w04_MDL-37713_m24_testdir' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-28 17:53:42 +13:00
Sam Hemelryk 611314c096 Merge branch 'MDL-37548-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-28 17:46:02 +13:00
Sam Hemelryk 3e72333f0c Merge branch 'wip-MDL-29723_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2013-01-28 17:34:51 +13:00
Sam Hemelryk e7a68ca017 Merge branch 'MDL-37172_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-01-28 17:29:09 +13:00
Sam Hemelryk 72e5445732 Merge branch 'MDL-13805_others_messages_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-01-28 16:06:58 +13:00
Andrew Davis 799be0ba8c MDL-13805 core_message: fixed the admin's ability to read another users messages 2013-01-28 10:19:42 +08:00
David Monllao db246a14e0 MDL-37634 lesson: readquestion visibility to protected 2013-01-28 13:45:36 +13:00
Sam Hemelryk 4d572da1b3 Merge branch 'MDL-37628-24' of git://github.com/grabs/moodle into MOODLE_24_STABLE 2013-01-28 13:41:54 +13:00
Sam Hemelryk e86e05ebf0 Merge branch 'w04_MDL-37407_m24_chineseunzip' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-28 13:31:54 +13:00
Sam Hemelryk 452a704ae9 Merge branch 'MDL-37414_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-01-28 13:28:52 +13:00
Sam Hemelryk 362b124e69 Merge branch 'MDL-19069_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-01-28 11:32:41 +13:00
Sam Hemelryk 4636cf771c MDL-37545 cache: fixed bug during initialisation and updating of cache config 2013-01-28 10:40:49 +13:00
Sam Hemelryk a50cdcc0fd MDL-36363 cache: clean up pre-integration 2013-01-28 10:39:07 +13:00
Matteo Scaramuccia 86afa1d00f MDL-36363 Override instance_deleted() for all cache stores performing just a cleanup() when this action successfully applies over all the definitions of the cache store 2013-01-28 10:39:07 +13:00
Matteo Scaramuccia 233046ea5e MDL-36363 Adding/Removing a file store cache instance cleanups the folder too 2013-01-28 10:39:07 +13:00
Matteo Scaramuccia 5d7411e92b MDL-36363 Added cache_store::instance_created() and cache_store::instance_deleted() 2013-01-28 10:39:07 +13:00
Petr Škoda 54b96ced13 MDL-37713 let phpunit bootstrap create test dataroot if necessary 2013-01-26 14:59:55 +01:00
Andreas Grabs 70328cc2e7 MDL-37628 feedback - Coding error in Recent Activity 2013-01-26 11:26:00 +01:00
Jean-Michel Vedrine d53ba71a24 MDL-37172 Hardcoded strings in some question imports formats
AMOS BEGIN
CPY [unknownorunhandledtype,qformat_blackboard_six],[unknownorunhandledtype,question]
AMOS END
2013-01-25 22:45:47 +01:00
Petr Škoda 4fb6eeb518 MDL-37638 fix name of duplicate role 2013-01-25 19:36:17 +01:00
Petr Škoda 401dc3dbb9 MDL-37407 add support for zh_cn unicode unzip 2013-01-25 15:56:45 +01:00
Tim Hunt c257025ccd MDL-37694 move quiz unit tests to the right place.
Follow-on from MDL-37684.
2013-01-25 12:14:10 +00:00
Dan Poltawski df93b156a7 MDL-37684 - phpunit add missing definitions to phpunit.xml.dist 2013-01-25 16:27:50 +08:00
Dan Poltawski 9c0349b416 weekly release 2.4.1+ 2013-01-25 15:58:09 +08:00
Dan Poltawski f0e846b410 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-01-25 15:57:52 +08:00
Dan Poltawski 87eb1d645f Merge branch 'MDL-37473b-24' of git://github.com/srynot4sale/moodle into MOODLE_24_STABLE 2013-01-25 12:35:55 +08:00
Aaron Barnes fb28b75b74 MDL-37473 completion: Add missing cap checks to tracked users functions
Namely get_num_tracked_users and is_tracked_user()
2013-01-25 17:11:02 +13:00
Andrew Robert Nicols a64df7558c MDL-37548 Show the incorrect value in a colour picker after validation 2013-01-24 10:15:34 +00:00
Stephen Bourget ad4d0c5e05 MDL-37533 Assign: Fix grading filters to show only assignments needing grading
Conflicts:

	mod/assign/gradingtable.php
2013-01-24 11:07:41 +08:00
Damyon Wiese 95755113bf MDL-37533 Assign: Use the constant for the submitted status in the query (and parameterize the query) 2013-01-24 11:06:46 +08:00
Stephen Bourget 153292da44 MDL-37533 Assign: assign_print_overview does not correctly display assignments that need grading
Conflicts:

	mod/assign/lib.php
2013-01-24 11:06:33 +08:00
AMOS bot fa85892b0a Automatically generated installer lang files 2013-01-24 00:46:49 +00:00
Jerome Mouneyrac 7e2184125c MDL-37476 course_create unit test fails if course completion is enabled 2013-01-23 13:57:24 +08:00
Mary Evans b213281ba1 MDL-29723 mod/quiz: Modified show/hide button in edit.php and added some extra CSS rules to styles.css to make Question bank block more compatible/adaptable with themes. 2013-01-23 00:58:26 +00:00
Damyon Wiese 8ca54dbbf3 MDL-37619 Assign - Fix regression assign_print_overview caused by MDL-37527 2013-01-23 08:47:00 +08:00
Sam Hemelryk 7700ec42c1 Merge branch 'MDL-34435-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE
Conflicts:
	version.php
2013-01-23 11:08:14 +13:00
Eloy Lafuente (stronk7) d31a080f91 Merge branch 'wip-MDL-15930-24' of git://github.com/abgreeve/moodle into MOODLE_24_STABLE 2013-01-22 20:33:06 +01:00
Justin Filip 990c247841 MDL-37625 auth_radius Updated to latest version (1.5.0) of included PEAR Crypt_CHAP library. 2013-01-22 10:41:54 -05:00
Aparup Banerjee 1c7c33b314 Merge branch 'wip-mdl-37339-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-22 16:28:39 +08:00
Dan Poltawski 13d03939a6 Merge branch 'wip-mdl-32526-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-22 14:00:34 +08:00
Dan Poltawski 83d4aee03c Merge branch 'MDL-27164-MOODLE_24_STABLE' of git://github.com/micaherne/moodle into MOODLE_24_STABLE 2013-01-22 12:51:59 +08:00
Dan Poltawski c57ed76265 Merge branch 'm24_MDL-36853' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-01-22 12:49:26 +08:00
Dan Poltawski 1bb2d65bb2 Merge branch 'MDL-37275_m24' of git://github.com/markn86/moodle into MOODLE_24_STABLE 2013-01-22 12:46:16 +08:00
Dan Poltawski 3dae8bcedd Merge branch 'MDL-37375_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-01-22 12:43:55 +08:00
Dan Poltawski 9f8b8bbd37 Merge branch 'w03_MDL-37593_m24_httpslogineditor' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-22 12:36:06 +08:00
Dan Poltawski 82cb942bff Merge branch 'MDL-37430-24' of github.com:damyon/moodle into MOODLE_24_STABLE 2013-01-22 11:53:38 +08:00
Dan Poltawski facd17c1ce Merge branch 'MDL-35357_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-01-22 11:48:16 +08:00
Dan Poltawski 76c98ace9a Merge branch 'MDL-37599_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-22 11:40:14 +08:00
Dan Poltawski f5222c7416 Merge branch 'MDL-37473-24' of git://github.com/srynot4sale/moodle into MOODLE_24_STABLE 2013-01-22 11:14:32 +08:00
Aparup Banerjee 3a6152ceac Merge branch 'MDL-37540-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-01-22 10:59:53 +08:00
Aparup Banerjee 0e5bf3c4af Merge branch 'MDL-37543-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-01-22 10:56:38 +08:00
Mark Nelson 528b5b7dac MDL-37414 blocks: re-added the ability to add some blocks to the My Moodle 2013-01-22 10:54:13 +08:00
Dan Poltawski bd541e24b3 Merge branch 'MDL-37355-stable24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-01-22 09:06:30 +08:00
Eloy Lafuente (stronk7) d828e8c678 Merge branch 'MDL-36104_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-01-22 01:19:52 +01:00
Eloy Lafuente (stronk7) b1886826de Merge branch 'MDL-37539-24' of github.com:damyon/moodle into MOODLE_24_STABLE 2013-01-22 01:06:13 +01:00
Eloy Lafuente (stronk7) 4e63dc5e5d Merge branch 'MDL-28512_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-22 01:02:22 +01:00
Eloy Lafuente (stronk7) cf3e5c4965 Merge branch 'wip-mdl-37432-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-22 00:52:53 +01:00
Aaron Barnes 349fc3edfc MDL-37473 completion: Add missing cap checks to tracked users functions
Namely get_num_tracked_users and is_tracked_user()
2013-01-22 11:18:31 +13:00
Sam Hemelryk dc5e0d1665 Merge branch 'MDL-37563-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-01-22 09:10:31 +13:00
Eloy Lafuente (stronk7) be8bc2de54 Merge branch 'MDL-37577_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-21 20:01:46 +01:00
Eloy Lafuente (stronk7) e081622b9b Merge branch 'MDL-35924_m24' of https://github.com/markn86/moodle into MOODLE_24_STABLE 2013-01-21 19:44:14 +01:00
Eloy Lafuente (stronk7) ebe2f5a19c Merge branch 'MDL-34050_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-01-21 16:47:32 +01:00
Tim Hunt 876ba8faec MDL-37577 quiz overdue handling: optimise database query
This is the standard trick of adding a redundant WHERE clause to a
subquery to help the database realise that it does not have to inspect
so many rows.
2013-01-21 13:23:27 +00:00
Tim Hunt 9970d909a3 MDL-37599 question import: add missing string.
AMOS BEGIN
 MOV [matcherror,question],[invalidgrade,question]
AMOS END
2013-01-21 12:16:15 +00:00
Petr Škoda a8dc59fc54 MDL-37593 use https for editor script if required 2013-01-21 09:41:01 +01:00
Michael de Raadt e6052102ec MDL-35357 Lesson Module: fixed undefined property for $answerformat 2013-01-21 15:38:48 +08:00
Aparup Banerjee 72389d1133 Merge branch 'w03_MDL-37559_m24_otherusers' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-21 15:26:32 +08:00
Rossiani Wijaya 3895b3459e MDL-37375 Report: fixed blog post link from course activity report 2013-01-21 14:58:20 +08:00
Mark Nelson 55cf5dfd8b MDL-36104 mod_assign: added hidden labels to the feedback input fields 2013-01-21 12:51:38 +08:00
Andrew Davis 3396c400eb MDL-37352 core_grade:fixed some ajax display issues 2013-01-21 12:27:52 +08:00
Rossiani Wijaya 58d633f0b2 MDL-19069 RSS feed block: Removed link for remote RSS feeds on navigation 2013-01-21 12:01:14 +08:00
Rajesh Taneja a19a913d7d MDL-37432 Calendar: If Calendar url is invalid then remove invalid subscription 2013-01-21 10:48:30 +08:00
Rajesh Taneja 76657ed83c MDL-37432 Calendar: Added check for empty calendar url 2013-01-21 10:48:30 +08:00
Dan Poltawski 4ef2160966 Merge branch 'MDL-30769_iframe_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-01-21 10:25:51 +08:00
Dan Poltawski 171c3af461 Merge branch 'wip-mdl-36674-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-21 10:15:22 +08:00
Dan Poltawski c44fe3050e Merge branch 'MDL-35074_24_2' of git://github.com/pauln/moodle into MOODLE_24_STABLE 2013-01-21 10:08:58 +08:00
Dan Poltawski 6ee3f386bd Merge branch 'MDL-37527-24' of github.com:damyon/moodle into MOODLE_24_STABLE 2013-01-21 10:03:49 +08:00
Dan Poltawski cf82c45de9 Merge branch 'm24_MDL-36421' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-01-21 09:01:13 +08:00
AMOS bot 537e4d1897 Automatically generated installer lang files 2013-01-21 00:44:53 +00:00
Sam Hemelryk bf14c15fb5 Merge branch 'MDL-37295-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-01-21 10:18:21 +13:00
Sam Hemelryk 9afa0e696e Merge branch 'MDL-35817_m24' of git://github.com/rwijaya/moodle into MOODLE_24_STABLE 2013-01-21 09:46:14 +13:00
Sam Hemelryk c5d97a96e4 Merge branch 'MDL-36757_hidden_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-01-21 09:31:23 +13:00
Petr Škoda 55fc886ea7 MDL-37559 fix display of multiple roles of other users
Credit goes to Tyron Delean, thanks.
2013-01-19 16:51:29 +01:00
Tim Hunt 2b18a45e61 MDL-28512 qtype essay: clean up properly when a question is deleted. 2013-01-18 11:51:47 +00:00
Mark Nelson 2d8e189825 MDL-35924 filemanager: added label for the input field when creating a new folder 2013-01-18 15:36:05 +08:00
Mark Nelson 0147636391 MDL-37275 webservices: ensure a webservice function is chosen before attempting to add to service 2013-01-18 15:34:06 +08:00
Dan Poltawski 7def53379b weekly release 2.4.1+ 2013-01-18 14:30:35 +08:00
Dan Poltawski 425894422b Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-01-18 14:30:30 +08:00
Petr Skoda feb30eda03 MDL-30769 - URL module: always use iframe instead of problematic object tag 2013-01-18 11:24:53 +08:00
Ankit Agarwal 065a7d5b4f MDL-37295 forum: Parse old log entries during restore 2013-01-17 14:33:33 +08:00
Damyon Wiese f2130033d4 MDL-37563 Assignment upgrade: Upgrade conditional activity settings.
Conflicts:

	mod/assign/upgradelib.php
2013-01-17 14:08:52 +08:00
Dan Poltawski cf75be653b Merge branch 'wip-mdl-29534-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-17 13:47:44 +08:00
Rajesh Taneja e8835af020 MDL-29534 Forum: Fixed userfrom reference problem 2013-01-17 13:46:49 +08:00
Rossiani Wijaya 6b519ea6cc MDL-35817 login: convert html tag to use html_writer and change <a> tag id to be more specific to login 2013-01-17 13:05:52 +08:00
Rossiani Wijaya 999a594039 MDL-35817 Login: set page focus to error message for login error 2013-01-17 13:05:33 +08:00
Damyon Wiese 48410be620 MDL-37539 Assignment upgrade: Disable submission comments if allow notes was not enabled.
For advanced upload of files only - this setting was stored in var2.

Conflicts:

	mod/assign/submission/comments/locallib.php
2013-01-17 12:16:32 +08:00
Rajesh Taneja c21089c81e MDL-35780 Administration: current user email should be always displayed on participants page 2013-01-17 11:56:56 +08:00
Damyon Wiese 36d7050ded MDL-37540 Assignment upgrade: Upgrade setting "Hide description before due date"
Advanced upload of files has this setting which is stored in var3.
2013-01-17 11:54:27 +08:00
Andrew Davis e7052c0349 MDL-36757 course: avoid accidently overwriting the hidden/visible values set on grade items 2013-01-17 11:37:14 +08:00
Damyon Wiese 5132e88b10 MDL-37543 Assignment upgrade: convert advanced upload files "Send for marking" setting
Advanced upload files assignment type has "Enable send for marking" setting instead
of "Allow resubmissions". Needs special handling in upgrade code to convert to
"Require students click submit button".

Conflicts:

	mod/assign/submission/file/locallib.php
2013-01-17 11:22:35 +08:00
Dan Poltawski 2540839f58 Merge branch 'MDL-37374_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-17 10:23:07 +08:00
Eloy Lafuente (stronk7) 7b85d7a014 MDL-37555 Apply realpath() 2 CFG->phpunit_dataroot 2013-01-16 20:54:33 +01:00
Tim Hunt e4863a1668 MDL-31616 blocks: ensure showinsubcontexts is only 0 or 1 in the DB. 2013-01-16 19:15:20 +01:00
Tim Hunt db1f584cc2 MDL-37374 questions: fix property_exists calls. 2013-01-16 11:20:58 +00:00
Rajesh Taneja 3fc3fcd333 MDL-32526 Course: After creating course user should be redirected to newly created course
After creating a new course if user has capability to enrol users then
enrol user page should be visible else user should see newly created course
2013-01-16 16:29:11 +08:00
Dan Poltawski 9044bc2f8b Merge branch 'wip-MDL-37536-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-01-16 13:52:07 +08:00
Rajesh Taneja c5a078b25e MDL-35873 Blocks: Made alt-text on block control icons more descriptive 2013-01-16 18:26:27 +13:00
Damyon Wiese 6aafb32f8b MDL-37527 Assignment - Change query for print_overview so it uses an index (postgres)
Reported by Mark Neilsen.

Conflicts:

	mod/assign/lib.php
2013-01-16 13:19:11 +08:00
Davo Smith d8613ef967 MDL-31484 backup - repeated restores with anonymised users now works correctly 2013-01-16 11:45:43 +08:00
sam marshall 90cbde0cb7 MDL-34612 Grade condition range validation allows impossible conditions 2013-01-16 09:56:51 +08:00
Rajesh Taneja 30595c294a MDL-37339 Administration: Unique custom profile should not be checked if it's empty.
Currently we have two options for custom profile fields 'Unique' and 'Required'
If value s not entered for unique and not required field then we should allow
duplicate empty values. If value is entered then we should check for unique input.
In case field is unique and required then it should be always checked as required
field can't be empty.
2013-01-16 09:45:51 +08:00
Dan Poltawski d08da96c20 MDL-37313 question: fix trailing whitespace 2013-01-16 09:40:40 +08:00
Dan Poltawski 7a82b70970 Merge branch 'MDL-37313_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-01-16 09:39:54 +08:00
Sam Hemelryk 69f83828fc MDL-37536 cache: fixed typo 2013-01-16 14:23:16 +13:00
AMOS bot e08dbd1076 Automatically generated installer lang files 2013-01-16 00:43:43 +00:00
Sam Hemelryk 7288582633 Merge branch 'wip-MDL-35818-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-01-16 11:03:23 +13:00
Eloy Lafuente (stronk7) 6babcc30ad Merge branch 'MDL-37173-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-15 21:56:40 +01:00
Eloy Lafuente (stronk7) c7e4ebf3f3 Merge branch 'MDL-37354-stable24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-01-15 21:51:00 +01:00
Tim Hunt 70688fd72e MDL-31616 block editing: show in subcontexts does not work on category pages.
Thanks to Ian David Wild for pointing to the proper fix.
2013-01-15 20:16:03 +01:00
Eloy Lafuente (stronk7) 38d2c7642d Merge branch 'wip-mdl-37062-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-15 20:06:12 +01:00
Eloy Lafuente (stronk7) 0baee36398 NOBUG: 1 more whitespace, was hurting my eyes all the time. 2013-01-15 19:19:52 +01:00
Eloy Lafuente (stronk7) 5bd1e381aa MDL-33117 Whitespace fixes 2013-01-15 19:10:40 +01:00
Eloy Lafuente (stronk7) c1a8fb414e Merge branch 'MDL-34883_unit_tests_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-01-15 18:21:27 +01:00
Eloy Lafuente (stronk7) 0218dd4ccb Merge branch 'MDL-37395-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-01-15 18:17:24 +01:00
Ben Johnson d8088a359e MDL-36421 SCORM: fix SCORM course format new window popups 2013-01-15 23:17:10 +13:00
Dan Poltawski 37784b037e Merge branch 'MDL-37381-stable24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-01-15 14:29:50 +08:00
Dan Poltawski 9d49ca31b1 Merge branch 'MDL-36708-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-01-15 13:56:26 +08:00
Dan Poltawski a79b88e20c Merge branch 'MDL-37162_24' of git://github.com/pauln/moodle into MOODLE_24_STABLE 2013-01-15 13:33:53 +08:00
Dan Poltawski d9babbcce1 Merge branch 'MDL-37374_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-15 12:59:46 +08:00
Jason Fowler d4c4b845b8 MDL-30316 - Libraries - improving pagination output to allow a shifting start page for displays of less than 18 pages -- original code provided by Martha (martha dot morelos at gmail dot com) 2013-01-15 12:49:57 +08:00
Dan Poltawski 391e361387 Merge branch 'MDL-29835_24' of git://github.com/pauln/moodle into MOODLE_24_STABLE 2013-01-15 12:41:46 +08:00
Dan Poltawski 03e63438da Merge branch 'MDL-36616-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-01-15 11:48:18 +08:00
Rossiani Wijaya 96d6ab3a12 MDL-34050 Lesson Module: Fixed spacing and removed array_unique() for responses 2013-01-15 11:19:55 +08:00
Damyon Wiese 545b77c8f2 MDL-37430 Course - Make modules created in hidden sections visible when section is made visible. 2013-01-15 11:17:43 +08:00
Dan Poltawski 3b8535a386 Merge branch 'MDL-37413-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-15 10:58:36 +08:00
Dan Poltawski b4d896505b Merge branch 'MDL-37194-stable24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2013-01-15 10:43:29 +08:00
Eloy Lafuente (stronk7) c01b82d4e4 Merge branch 'MDL-37431_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-15 00:16:27 +01:00
Marina Glancy b3e8f06d20 MDL-37453 fixing regression from MDL-36550 - label show/hide in AJAX works incorrectly 2013-01-15 00:09:56 +01:00
Petr Škoda 17c88e6ec9 MDL-37483 improve require_login redirect when activity not accessible 2013-01-14 23:30:28 +01:00
Eloy Lafuente (stronk7) bff4fc86e1 Merge branch 'MDL-37485_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-14 23:21:53 +01:00
Marina Glancy f939cf3159 MDL-37206 preload course format renderer in course/view.php
Also fixed bug with hardcoded default 'weeks' format
2013-01-15 10:49:13 +13:00
Sam Hemelryk 2dcbaaa68c Merge branch 'MDL-37378_24' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2013-01-15 10:42:52 +13:00
Damyon Wiese f6d09222a2 MDL-37030 Assignment: Fix error on download all submissions.
When group submissions and blind marking are enabled, an error is thrown
when a teacher trys to download all submissions in a zip. The fix is to
move the url rewriting from the plugin to the assign class so it is
done in a standard way by all modules. The rewriting is done to make images
in a text editor field resolve correctly.
2013-01-15 10:40:43 +13:00
Rajesh Taneja 8cb601ad4d MDL-36674 Administration: out_as_local_url will check for both http and https url's
out_as_local_url will first check if url passed in wwwroot, if it's not then it will check
if loginhttps is enabled and url is httpswwwroot
2013-01-14 16:01:01 +08:00
Dan Poltawski ee8044f2e6 Merge branch 'wip-MDL-30797-24' of git://github.com/abgreeve/moodle into MOODLE_24_STABLE 2013-01-14 15:26:16 +08:00
Adrian Greeve 93b38fc5a6 MDL-30797 - backup groups: Added a parameter to the groups_assign_grouping function.
$timeadded has now been included so that the backup / restore functions can now use
this API rather than duplicating the code.
2013-01-14 15:12:49 +08:00
Adam Olley b03d9255ee MDL-30797 backup: Use correct API call for mapping groups to groupings on import/restore 2013-01-14 15:12:29 +08:00
Dan Poltawski 00dba5bb11 MDL-36297 - increment version number 2013-01-14 15:05:56 +08:00
Dan Poltawski 94c4afe13a Merge branch 'wip-MDL-36297-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2013-01-14 15:05:23 +08:00
Dan Poltawski b90eab06c7 Merge branch 'wip-mdl-29534-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-14 14:59:30 +08:00
Anthony Borrow 88d7468a3b MDL-15930 - admin: reorganize logic to allow ->fullnamedisplay to be used as default sort. 2013-01-14 10:34:02 +08:00
Jason Fowler a809b827f1 MDL-35818 - Enrolment - Changing all enrolment method icon alt text attributes to include the name of the course 2013-01-14 09:47:03 +08:00
Sam Hemelryk b54015e60d Merge branch 'MDL-37048-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-01-14 14:08:45 +13:00
Davo Smith 6cf6c3806f MDL-35568 course dndupload - resources created with the same visibility as the section they are dragged onto 2013-01-14 13:55:59 +13:00
Sam Hemelryk 7e7c23fcad Merge branch 'wip-MDL-35885-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2013-01-14 13:39:53 +13:00
Sam Hemelryk 625098abc5 Merge branch 'MDL-36095-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2013-01-14 12:23:49 +13:00
Sam Hemelryk 7977c782e8 Merge branch 'MDL-36511-24' of git://github.com/srynot4sale/moodle into MOODLE_24_STABLE 2013-01-14 12:12:41 +13:00
Sam Hemelryk 842524812a Merge branch 'm24_MDL-37394' of git://github.com/danmarsden/moodle into MOODLE_24_STABLE 2013-01-14 11:46:01 +13:00
Sam Hemelryk 80b6e318fb Merge branch 'MDL-37397-m24' of git://github.com/andrewnicols/moodle into MOODLE_24_STABLE 2013-01-14 11:04:40 +13:00
Sam Hemelryk 7c2046b727 Merge branch 'wip-mdl-35780-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-14 10:59:47 +13:00
Eloy Lafuente (stronk7) 3e90b10ad8 Moodle release 2.4.1 2013-01-11 22:23:29 +01:00
Tim Hunt 8c11e08765 MDL-37431 question preview: cron performance problem.
This query was performing badly. The solution seems to be to add a
redundant JOIN and WHERE to the subquery.

I renamed the table aliases in the subquery to avoid name collisions
elsewhere. I am afraid that makes the diff rather unhelpful. The
    AND subq_qu.component = :qubacomponent2
line is new. The other lines have just had subq_ added.
2013-01-11 13:05:07 +00:00
Tim Hunt ffdca1520b MDL-37378 quiz restore: timecheckstate not in old backups.
We need to avoid a notice. If the value is missing, setting it to 0 is
fine. It will get sorted out the next time cron is run.
2013-01-11 13:04:50 +00:00
Tim Hunt 4dcede552e MDL-37374 questions: use property_exists rather than isset
$a->field = null; isset($a->field) returns false, which is typical PHP.
I also improve the error handling a bit.
2013-01-11 13:04:31 +00:00
Tim Hunt 198279d303 MDL-37485 plugins overview: require_login before _capability. 2013-01-11 12:52:26 +00:00
Andrew Robert Nicols 283f877719 MDL-37397 Test for a valid select in formautosubmit
Ideally we shouldn't get into this situation, but in cases where the
generated select element is incorrectly configured, we should try and
handle it gracefully with a warning.
2013-01-11 11:50:52 +00:00
Eloy Lafuente (stronk7) 8a646b55f7 weekly release 2.4+ 2013-01-11 12:33:57 +01:00
Michael Aherne 53c07f1644 MDL-27164 groups Do not show multiple instances of the same role as multiple 2013-01-11 11:31:46 +00:00
Eloy Lafuente (stronk7) 72cece6ff4 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2013-01-11 12:16:34 +01:00
Dan Marsden 1e503b8925 MDL-37394 SCORM: Aicc direct url fails with new nav as it has a single sco with no children - allow these to be navigated correctly. 2013-01-11 23:50:05 +13:00
Eloy Lafuente (stronk7) 9b7b6fa33c MDL-37420 rework pg schema (partial backport of 92b00c3) 2013-01-11 10:33:33 +01:00
Jean-Michel Vedrine dce48cf576 MDL-37313 Sample files with images for XML import 2013-01-11 09:37:44 +01:00
Jean-Michel Vedrine af8a122872 MDL-37313 Moodle XML import format should use draft file areas, not arrays 2013-01-11 09:37:42 +01:00
Andrew Robert Nicols e75fe1a7bd MDL-37413 Use correct variable in chooserdialogue 2013-01-11 08:21:14 +00:00
Ashley Holman a78ba9a827 MDL-36616 repository: Fix direct linking to images in Flickr Public. 2013-01-11 15:34:03 +08:00
Jason Fowler 487a6fcc8c MDL-35885 - Wiki - add a legend element to the search wikis form 2013-01-11 15:30:46 +08:00
Dan Marsden 840193d514 MDL-36853 SCORM: get first valid sco instead of array of scos - thanks to Jamie Smith for the fix - fixes PHP warnings when returning to an existing attempt. 2013-01-11 19:51:32 +13:00
Rossiani Wijaya 324e0aa540 MDL-34050 Lesson Module: improved matching question logic for checking user response. This patch will also resolved MDL-36343. 2013-01-11 13:52:40 +08:00
Rossiani Wijaya 69199e4aa2 MDL-34050 Lesson module: Fixed undefined variable for $qtype 2013-01-11 13:52:28 +08:00
Joseph Rézeau e893d6b032 MDL-34050: Lesson module: fixed matching answer format to use text 2013-01-11 13:52:18 +08:00
Damyon Wiese 1c5d23e281 MDL-32341 calendar: get_file_by_hash() expects a hash 2013-01-11 11:56:59 +08:00
Rajesh Taneja 0b55c44e68 MDL-35780 Administration: email display on user profile view page will respect user capability 2013-01-11 10:16:34 +08:00
Eloy Lafuente (stronk7) 43bfcff941 Merge branch 'MDL-37467-blogs_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2013-01-10 18:20:48 +01:00
David Mudrák a4611b9d02 MDL-37467 Do not provide blog posts via RSS when blogging is disabled 2013-01-10 16:57:10 +01:00
Mark Nelson 5be009245b MDL-36741 mod_forum: fixed the function forum_rss_newstuff that was using count_records_sql incorrectly as well as generating RSS content when no data exists 2013-01-10 11:13:45 +01:00
Frederic Massart 5a2c33b107 MDL-34435 reports: Log category actions
Conflicts:

	version.php
2013-01-10 15:14:38 +08:00
Andrew Robert Nicols a50bf852e4 MDL-36600 Add missing sesskey check when previewing the message 2013-01-10 10:20:45 +08:00
AMOS bot 9c3ef35763 Automatically generated installer lang files 2013-01-10 00:44:11 +00:00
Rajesh Taneja be8868900d MDL-29534 Forum: if forum_replytouser is not set then send forum email using noreplyaddress. 2013-01-09 14:53:04 +08:00
Isaac Marco Blancas 3c3ca35fee MDL-29534 Forum: If forum_replytouser is not set then don't display from user email" 2013-01-09 14:53:04 +08:00
Jerome Mouneyrac ada5df1069 MDL-37354 clean return value for each externallib PHPUnit tests 2013-01-09 13:55:54 +08:00
Aaron Barnes e014ed78dd MDL-36511 course: Save "completion starts on enrolment" disabled state 2013-01-09 15:33:13 +13:00
Marina Glancy 562782a48d MDL-37404 add class 'format-xxx' to the body for the current course format 2013-01-09 14:35:31 +13:00
Eloy Lafuente (stronk7) b56324b829 Merge branch 'w51_MDL-37420_m24_pgschema' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-09 01:32:33 +01:00
Paul Nicholls 490e604bae MDL-37162: Use CSS to make mod show/hide icons not look "clickable" in hidden sections
Previously, the resource toolbox initialiser was using JS to find the show/hide icon, then find its section ancestor, then check if the section was hidden - only to pointlessly set pointer:auto if it was.  That didn't meet the aim stated in the comments ("Disable" show/hide icons (change cursor to not look clickable) if section is hidden), but this patch meets that goal with a single CSS rule.
2013-01-09 11:26:06 +13:00
Andrew Robert Nicols 47ee76344e MDL-36600 user: improve course messaging checks 2013-01-09 09:22:08 +13:00
Eloy Lafuente (stronk7) 844cb63fed Merge branch 'w51_MDL-37152_m24_smtp' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 18:02:37 +01:00
Petr Škoda a668f57e75 MDL-37420 add support for db schemas in enrol test 2013-01-08 17:35:59 +01:00
Petr Škoda 543fc34ed9 MDL-37420 add support for more PostgreSQL schemas 2013-01-08 17:35:51 +01:00
sam marshall c3775f93ab MDL-37395 Add .jar filetype so Moodle doesn't incorrectly call it a zip file 2013-01-08 12:50:17 +00:00
Jean-Michel Vedrine 0a32dca4bb MDL-28183 fix for problem during integration
Conflicts:
	question/type/multianswer/question.php
2013-01-08 12:05:45 +01:00
Eloy Lafuente (stronk7) 65a550c484 Merge branch 'MDL-37220_dnd_icon_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE 2013-01-08 11:54:31 +01:00
Jerome Mouneyrac 7c08fb89fb MDL-37194 activity chooser displays entire list of default activities/resources 2013-01-08 18:03:47 +08:00
Andrew Robert Nicols 38727c6bc6 MDL-37173 Stop attempting to set User-Agent from core JS
This leads to some browsers throwing warnings that it is unsafe to set the
User-Agent. It doesn't help us in any way particularly either.
2013-01-08 09:56:24 +00:00
Eloy Lafuente (stronk7) 0f83a143b0 Merge branch 'w51_MDL-37186_m24_tinymceconfig' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 10:34:15 +01:00
Eloy Lafuente (stronk7) 793c431543 Merge branch 'w51_MDL-37323_m24_dlgstrings' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 10:22:15 +01:00
Jerome Mouneyrac 7059a421ef MDL-37381 core_external::get_component_strings returns wrong format value 2013-01-08 16:25:24 +08:00
Dan Poltawski 2e25f806fb Merge branch 'MDL-32639-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-01-08 14:46:25 +08:00
Petr Škoda f923f7aefe MDL-xxxx show appropriate instance status on user enrolments page 2013-01-08 14:22:28 +08:00
Jason Fowler cb838a36b2 MDL-36620 - Blog, RSS - Preventing Guests from viewing the RSS of site level blogs 2013-01-08 14:06:47 +08:00
Ankit Agarwal 56f4d0ed80 MDL-37106 calendar: Proper capability checks should be done before processing an ical request 2013-01-08 14:02:54 +08:00
Ankit Agarwal 6c806e8384 MDL-36738 calendar: Display events imported details
We should display a the status of events when a new subscription is added. Although this means we need to redirect through an itermediate page.
2013-01-08 13:58:21 +08:00
Ankit Agarwal 5b6e74c85f MDL-36738 calendar: Ical subscription list should display type of event 2013-01-08 13:58:21 +08:00
Dan Poltawski c33a96f676 MDL-28183 - fix trailing whitespace 2013-01-08 12:18:31 +08:00
Dan Poltawski 9910a5d7eb Merge branch 'MDL-28183_24' of git://github.com/jmvedrine/moodle into MOODLE_24_STABLE 2013-01-08 12:17:58 +08:00
Dan Poltawski 7c8fb69b1c Merge branch 'w51_MDL-37191_m24_plugindelete' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 11:16:49 +08:00
Paul Nicholls 3dcd751a4b MDL-29835: filemanager - zero means zero, not unlimited
The form_filemanager constructor was using empty() rather than !isset(),
so overwrote maxfiles=0 with the default (-1).  In addition, the JS UI
treated 0 as unlimited - but the non-JS fallback UI treated it as zero.
This would result in a file manager which allowed files to be
chosen/uploaded, which would then vanish into the void when the backend
saw that the maximum number of files was 0.
2013-01-08 16:11:36 +13:00
Dan Poltawski ef42830b87 Merge branch 'MDL-31641_drag_drop_help_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE 2013-01-08 10:54:14 +08:00
Charles Fulton 05f8741cee MDL-35130 shibboleth: remove hard-coded string 2013-01-08 10:51:17 +08:00
Dan Poltawski 9a1ac11640 Merge branch 'MDL-36456-24' of git://github.com/FMCorz/moodle into MOODLE_24_STABLE 2013-01-08 10:30:58 +08:00
Dan Poltawski 04ab55dd4f Merge branch 'w51_MDL-37301_m24_coursecatinfoas' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 10:27:00 +08:00
Dan Poltawski b2e3fb3dc9 Merge branch 'w51_MDL-37254_m24_courseinfoas' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 10:24:11 +08:00
Sam Hemelryk d72a0aa2c8 Merge branch 'wip-mdl-36958-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2013-01-08 14:06:50 +13:00
Sam Hemelryk 2be82d5e13 Merge branch 'w51_MDL-35893_m24_perfinstall' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-08 14:00:23 +13:00
David Mudrák 019cc4eae4 MDL-36977 Be more picky when it comes to migrating files in moodle1 backups 2013-01-08 08:54:20 +08:00
David Mudrák 2726d2a6a4 MDL-36977 Add more unit tests for moodle1 backup conversion 2013-01-08 08:54:20 +08:00
Paul Nicholls 9f1396fb23 MDL-35074: grader report - Ease limit on number of students per page
The limit imposed by max_input_vars "applies only to each nesting level of
a multi-dimensional input array"
(http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars).

Turning the grader report fields into arrays (they were all top-level form
fields, i.e. elements of the top-level array) makes the number of students
become the only limiting factor, thereby allowing us to relax the limit on
number of students per page greatly (to 1 less than max_input_vars, for
safety).
2013-01-08 13:16:25 +13:00
Thanh Le 0c49b6c445 MDL-35794 quiz: config for whether Outcomes are advanced settings 2013-01-07 22:40:31 +01:00
Thanh Le 83a23ea878 MDL-35792 question preview: way to update options without restarting.
It is useful, and possible, to update the display options without
restarting the question. You now only have to restart if you are
changing the maximum mark or the behaviour.
2013-01-07 22:36:17 +01:00
sam marshall 331bbb7f05 MDL-36095 Section availability: Make behaviour consistent with activities 2013-01-07 15:56:16 +00:00
Eloy Lafuente (stronk7) f849d1f6fc Merge branch 'w51_MDL-36807_m24_mysocket' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 11:44:54 +01:00
Frederic Massart 217d7979b9 MDL-36708 files: Checking the size limit of a draft area does include references 2013-01-07 17:29:04 +08:00
Davo Smith 2e8da707a0 MDL-31641 filemanager - display help message when drag and drop upload is not supported 2013-01-07 08:14:13 +00:00
Didier Raboud f4537d5676 MDL-37157: Normalize short answers before comparison
This ensures that ambiguous Unicode representations can be compared sanely.
Also add some tests to ensure it keeps working.

Thanks to Tim Hunt for the syntax check.
2013-01-07 14:00:13 +08:00
Dan Poltawski 850aa189e4 Merge branch 'w51_MDL-37128_m24_rssrestore' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 13:57:02 +08:00
Dan Poltawski c5e96ad32f Merge branch 'w51_MDL-36893_m24_mnetestrict' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 13:53:19 +08:00
Dan Poltawski 9acc49eb93 Merge branch 'MDL-27884-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-01-07 13:30:34 +08:00
Andrew Davis 662cfbc7e1 MDL-33117 grade: adding unit tests for the user report function inject_rowspans() 2013-01-07 11:59:58 +08:00
Damyon Wiese d389a2f7f4 MDL-37244 Assignment: Submission comments plugin does not implement comments callbacks.
This allows anyone to view or modify anyone elses submission comments.
2013-01-07 10:49:12 +08:00
Ankit Agarwal 321554d35f MDL-33340 completion: Incorrect logic in hidden field check
Credit to Jody Steele
2013-01-07 10:37:26 +08:00
Simon Coggins 102903f7ab MDL-35991 - use PARAM_LOCALURL for local urls 2013-01-07 10:10:22 +08:00
Rajesh Taneja da2ea965dc MDL-37062 Course: Show one 'Add new course' button
Currently if there is no course and admin/course creator go to create course, he/she see two
'Add new course' buttons.
2013-01-07 09:46:06 +08:00
Dan Poltawski 181b7f5fea Merge branch 'MDL-36667-24' of git://github.com/damyon/moodle into MOODLE_24_STABLE 2013-01-07 09:44:59 +08:00
Sam Hemelryk e04f57c95b Merge branch 'MDL-37161-moodle24' of https://github.com/StudiUM/moodle into MOODLE_24_STABLE 2013-01-07 14:15:17 +13:00
Sam Hemelryk b9639c524d Merge branch 'w51_MDL-36212_m24_entities' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 13:44:54 +13:00
Tim Hunt 56003ca491 MDL-37068 qformat_learnwise: fix UTF8 and other issues. 2013-01-07 13:40:24 +13:00
Sam Hemelryk 192cb8f894 Merge branch 'w51_MDL-37281_m24_othersnav' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 13:35:04 +13:00
Sam Hemelryk 2d7c42275f Merge branch 'MDL-36855-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-01-07 12:05:07 +13:00
Charles Fulton ac41913cea MDL-4781 forum: show discussion link when user has ability to view discussion 2013-01-07 11:15:32 +13:00
Davo Smith 359c790b1c MDL-35887 course dndupload - correct default used for completion tracking when resources created by drag and drop 2013-01-07 11:07:37 +13:00
Sam Hemelryk 49a66d4b68 Merge branch 'MDL-16730-m24' of git://github.com/ankitagarwal/moodle into MOODLE_24_STABLE 2013-01-07 10:15:11 +13:00
Sam Hemelryk 1a5a5f8e9c Merge branch 'w51_MDL-37105_m24_catlimit' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 09:52:50 +13:00
Mark Nelson 3735e3d289 MDL-37359 groups: fixing typo in the web service function create_groupings_parameters 2013-01-07 09:47:43 +13:00
Sam Hemelryk 2c6b79365b Merge branch 'MDL-29327_none_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2013-01-07 09:35:07 +13:00
Mark Nelson 1565171e07 MDL-36741 mod_forum: fixed SQL that was generated when either timed posts or groups were enabled 2013-01-07 09:16:35 +13:00
Sam Hemelryk 0c1be2af21 Merge branch 'w51_MDL-37315_m24_ldappaging' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2013-01-07 09:09:25 +13:00
Jean-Philippe Gaudreau e5d70123c9 MDL-37161 Backup: Database error caused by grade book settings when importing or restoring a course 2013-01-04 09:54:42 -05:00
Damyon Wiese 3d6b1bf4e3 MDL-36712: Assignment - Do not always send feedback available emails when grade is created
The entry in the assign_grades table contains grades feedback and other settings such as locked.
Only send the student an email about new feedback if it is actually grades or feedback that
has been added. This is done by using another state for the mailed flag (2) which means "unset".
2013-01-04 14:52:14 +08:00
Jerome Mouneyrac 0d268d71d2 MDL-37355 Fix the REST server that didn't send back the cleaned values 2013-01-04 14:37:06 +08:00
Andrew Davis b164a8904a MDL-29327 core_grade: removing some code that is messing up the categories and items screen when no grade categories are used 2013-01-04 08:58:34 +08:00
Ankit Agarwal 78ac8558e0 MDL-36855 scorm: update to api get_scorm_question_count()
get_scorm_question_count() should return 0 not 1 when no attempt is made in a scorm by any student
2013-01-03 14:42:39 +08:00
Sam Hemelryk 118e933e2d MDL-36297 caching: added for HTML purified text 2013-01-03 10:54:57 +13:00
Ankit Agarwal 363ed37e76 MDL-27884 Implement proper username validation during csv import 2013-01-02 14:10:30 +08:00
Ankit Agarwal 3b800be056 MDL-27884 blocks: Correcting config title string
AMOS BEGIN
 CPY [configtitle,block_html],[configtitle,block_tags]
AMOS END
2013-01-02 10:56:58 +08:00
Petr Škoda ef227f1e0f MDL-35893 do not track performance before installation 2013-01-01 15:51:06 +01:00
Petr Škoda 6606784c3f MDL-37323 add support for _dlg strings in our TinyMCE subplugins
Credit goes to Étienne FLORENT, thanks.
2013-01-01 15:26:27 +01:00
AMOS bot a17b3a200e Automatically generated installer lang files 2013-01-01 00:42:59 +00:00
Eloy Lafuente (stronk7) d63a406b02 weekly release 2.4+ 2012-12-30 01:06:09 +01:00
Petr Škoda e6a3c6e1a1 MDL-37315 fix connection reopening in ldap paging 2012-12-30 00:58:20 +01:00
Eloy Lafuente (stronk7) 356513cc80 Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2012-12-30 00:56:49 +01:00
Petr Škoda b1dc798512 MDL-36893 fix mnet E_STRICT issue 2012-12-27 14:33:09 +01:00
Petr Škoda 697871ddcf MDL-37105 prevent fatal error when category limit reached 2012-12-27 13:52:50 +01:00
Petr Škoda 602150068a MDL-37128 fix E_STRICT rss restore issue 2012-12-27 13:40:47 +01:00
AMOS bot eeeac779c8 Automatically generated installer lang files 2012-12-27 00:42:49 +00:00
Petr Škoda c0333c98ea MDL-37301 fix missing AS in select
This was breaking pg 8.3. Credit goes to Thomas Robb, thanks.
2012-12-26 22:31:47 +01:00
Damyon Wiese d59467dfc9 MDL-37037 Assignment Some minor refactoring of the previous patch
This just makes the control flow a bit easier to read.

I also added a continue button to take you back to the grading page.
2012-12-24 12:23:33 +08:00
Michael Aherne c731018d50 MDL-37037 assign Show message if no files to download 2012-12-24 12:23:33 +08:00
Dan Poltawski e17644cca3 Merge branch 'w51_MDL-37233_m24_skype' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-24 11:34:45 +08:00
Dan Poltawski d71b142446 Merge branch 'wip-MDL-37263-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2012-12-24 11:22:48 +08:00
Dan Poltawski b61dd8b299 Merge branch 'wip-MDL-37290-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2012-12-24 10:55:24 +08:00
Dan Poltawski 41bbc35471 Merge branch 'w51_MDL-37283_m24_spell' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-24 10:35:40 +08:00
Sam Hemelryk 0af4bf40ee MDL-37290 course: fixed up navbar when editing categories 2012-12-24 13:06:52 +13:00
Sam Hemelryk b09c5ac837 Merge branch 'wip-MDL-35833-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-24 11:43:46 +13:00
Raymond Wijaya 3f897939b2 MDL-36966 Assignment: Bug - Student submission appears graded by themselves.
Fix a bug when a student editing his submission after it has been graded, it changes the 'graded by' details to the student's name in the feeback summary
2012-12-24 11:18:43 +13:00
Sam Hemelryk 3124654247 Merge branch 'wip-mdl-37015-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2012-12-24 10:55:19 +13:00
Sam Hemelryk 9a57563b9f Merge branch 'wip-MDL-35653-MOODLE_24_STABLE' of git://github.com/abgreeve/moodle into MOODLE_24_STABLE 2012-12-24 09:40:44 +13:00
Brian King 190b5e7cbe MDL-37225 reset cachstore_static store when purging 2012-12-24 09:36:13 +13:00
Mark Nelson a8f8537965 MDL-36455 blocks: removed ability to add blocks to the My Moodle page that did not make sense in that context 2012-12-24 09:31:02 +13:00
Petr Škoda f938b1a89b MDL-37283 import tinymce spellchecker 2.0.6.1 2012-12-22 16:45:22 +01:00
Petr Škoda 2a39a4e01c MDL-37281 fix other users current navigation node 2012-12-22 14:59:12 +01:00
Petr Škoda ab7d4ea7ba MDL-37152 remove bogus $mail->IsSMTP() breaking non-smtp mailing
Credit goes to Aurelijus Bruzas, thanks.
2012-12-22 14:48:25 +01:00
Petr Škoda ac4404e0cc MDL-37254 add missing AS keyword 2012-12-22 14:12:30 +01:00
Petr Škoda 0fe16db123 MDL-37233 do not show skype status icon on https sites
Funny that the same company that implemented the IE security warnings is unable to set up SSL on the Skype status server…
2012-12-21 17:27:12 +01:00
Petr Škoda 5c0dd1fadd MDL-37191 do not timeout when uninstalling plugins 2012-12-21 15:59:15 +01:00
Jean-Michel Vedrine a7eec81ec6 MDL-28183 add num parts correct and clear wrong to multianswer 2012-12-21 05:18:02 +01:00
Sam Hemelryk e03782efdd MDL-37263 cache: fixed event invalidation coding error 2012-12-21 10:50:24 +13:00
Petr Škoda eb2d6a23ab MDL-36212 rework html entity conversions
This should resolve all html entity conversion problems in different PHP versions.
2012-12-20 22:48:30 +01:00
Petr Škoda a48b376978 MDL-36807 use our mysql socket logic in adodb tests 2012-12-20 22:41:57 +01:00
Petr Škoda 544f0f9b11 MDL-37186 add the ultimate TinyMCE custom parameter setting 2012-12-20 22:24:46 +01:00
Eloy Lafuente (stronk7) 322af447f5 weekly release 2.4+ 2012-12-20 21:12:50 +01:00
Eloy Lafuente (stronk7) ec39bd51dd Merge branch 'install_24_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_24_STABLE 2012-12-20 20:57:11 +01:00
Eloy Lafuente (stronk7) bbb750e1ba Merge branch 'w50_MDL-37171_m24_outdatedexcel' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-20 10:41:55 +01:00
Jason Fowler 73dd2ee2d5 MDL-35833 - Blocks - Adding alt and title attributes to the docked-block panel close button 2012-12-20 10:28:23 +08:00
Rajesh Taneja a1ccc146ac MDL-37015 Resource: link in onclick should not contain html special char 2012-12-20 10:26:29 +08:00
Dan Poltawski 7a6f073415 Revert "MDL-36704: wrap pending conditions in span tags"
This reverts commit 5e9fd83df8.
2012-12-20 08:45:15 +08:00
AMOS bot 76fa287781 Automatically generated installer lang files 2012-12-20 00:40:36 +00:00
Tim Hunt 94c5a8fe82 MDL-32245 question bank: update URL after moving question between categories.
Also, improve the URL when you go to edit the questions in a category.
2012-12-20 12:12:28 +13:00
Petr Škoda d3fdafc358 MDL-37171 fix some more E_STRICT issues
Credit goes to Mark Nelson, thanks.
2012-12-19 09:55:25 +01:00
Davo Smith 606c07ae3e MDL-37220 course dndupload - improved 'add files' icon 2012-12-19 07:46:23 +00:00
Adrian Greeve c6b458edce MDL-35653 - mod/wiki: Force format now lets users edit wiki pages.
Thanks to Tõnis Tartes for part of this solution.

When force format was selected in the options, trying to view the
wiki would redirect to the front page with a message saying that
you do not have permission to edit this page. Students had no way
of viewing any entries or creating the first page.

When in force format it skips a page , which would be considered
uncessary for students, but this means that the group id is not set
and this is what is causing most of the problems.

I also have included a check to see if the title is default and whether
the user has permission to view all groups. In these situations the
intermediate page is displayed.
2012-12-19 08:51:48 +08:00
Eloy Lafuente (stronk7) a8ccdd2880 Merge branch 'w50_MDL-36245_m24_convert' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-18 23:42:53 +01:00
Marina Glancy 656581fa2c MDL-36339 Modify themes to add course headers and footers provided by course format 2012-12-18 21:37:05 +01:00
Matt Oquist 785a713b82 MDL-36958 Forum: Replaced hard-coded numbers with proper defines 2012-12-18 17:24:31 +08:00
Jay Knight cf04387947 MDL-36704: wrap pending conditions in span tags 2012-12-18 15:09:55 +08:00
Dan Poltawski eddec24752 Merge branch 'MDL-37014_webdav_folders_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE 2012-12-18 14:52:33 +08:00
Dan Poltawski f454c9884f MDL-36259 - change case of table alias to match definition 2012-12-18 14:27:40 +08:00
Thanh Le 53f7c0c641 MDL-36259 course short names: ensure it displays when enabled in admin
Fixed 5 Moodle pages that does not display the course short name even if "Display extended course names" setting is on.  In fixing this, search.php also included related minor code to change to minimise DB calls to improve performance.
2012-12-18 14:26:02 +08:00
Dan Poltawski 2de5b09d84 Merge branch 'MDL-30899_24' of git://github.com/dmonllao/moodle into MOODLE_24_STABLE 2012-12-18 09:11:02 +08:00
Damyon Wiese 70c31beef7 MDL-35740 Assignment: Change the assignment index page to use a renderer.
This also cleans up the patch to prevent students from seeing the number of submissions for the assignment.
2012-12-18 08:44:59 +08:00
Raymond Wijaya 901dd625f8 MDL-35740 Assignment: Hide the number of assignment submissions for all students that was visible to all students through the activities block 2012-12-18 08:44:59 +08:00
Tim Hunt 7d3341b000 MDL-36842 quiz: update accessrule upgrade.txt file in master. 2012-12-18 00:18:59 +01:00
Eloy Lafuente (stronk7) 1f60fe8a23 Merge branch 'w50_MDL-37171_m24_outdatedexcel' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-18 00:13:55 +01:00
Sam Hemelryk 730271af49 Merge branch 'w50_MDL-36475_m24_zindexesgrrr' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-18 10:42:49 +13:00
Sam Hemelryk 8a35efacd7 Merge branch 'MDL-36490_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2012-12-18 10:40:32 +13:00
Adrian Fish cfa9c7e1d0 MDL-37035 Pass user locale after course locale. 2012-12-18 10:32:24 +13:00
Sam Hemelryk acb011dc20 Merge branch 'w50_MDL-37111_m24_forumsinglefirst' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-18 10:24:42 +13:00
Sam Hemelryk a7a1adf4e0 Merge branch 'MDL-37176_24' of git://github.com/stronk7/moodle into MOODLE_24_STABLE 2012-12-18 10:12:22 +13:00
Rossiani Wijaya e60bae3575 MDL-35530 Lesson Module: Add question text to facilitate grading 2012-12-18 10:08:53 +13:00
Sam Hemelryk ddb5fb5980 Merge branch 'wip-MDL-35056-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-18 09:57:11 +13:00
Tim Hunt b70a545c88 MDL-32245 question bank: fix coding style in categories.php 2012-12-18 09:52:30 +13:00
Thanh Le c383f33bbf MDL-32245 question bank: fix moving categories between contexts. 2012-12-18 09:52:30 +13:00
Sam Hemelryk 13683200d6 MDL-36812 grader_report: Fixed whitespace on integration 2012-12-18 09:48:01 +13:00
Nadav Kavalerchik 7be97bd89d MDL-36812 - Enabling grade_report_fixedstudents, shows the user's list on the left side of the page, in RTL mode (theme/standard) 2012-12-18 09:48:01 +13:00
Sam Hemelryk cd281ce1b4 Merge branch 'MDL-29733_master' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2012-12-18 09:42:41 +13:00
David Monllao adc1d7b2a5 MDL-30899 moodle-core-notification Overridding default footer padding 2012-12-17 16:27:30 +08:00
David Monllao b4454b133f MDL-30899 moodle-core-notification Adding ARIA attributes 2012-12-17 16:27:08 +08:00
David Monllao 520a601f14 MDL-30899 moodle-core-notification Adding close button title for accessibility 2012-12-17 16:27:01 +08:00
David Monllao 0409483d5f MDL-30899 moodle-core-notification Adding focus to non modal windows 2012-12-17 16:26:56 +08:00
David Monllao 2d07933c17 MDL-30899 moodle-core-notification Adding H1 to notifications headers 2012-12-17 16:26:43 +08:00
David Monllao 6eabdb6d8c MDL-30899 block_community Changing from overlay to panel references 2012-12-17 16:26:09 +08:00
David Monllao 291455cecd MDL-30899 modchooser Changing from overlay to panel references 2012-12-17 16:26:03 +08:00
David Monllao b76204d589 MDL-30899 moodle-core-notification Replacing Y.Overlay for Y.Panel
References to lightbox are still there to maintain the same
external API but are converted to a modal attribute internally,
same with closeButton, now it uses the Y.Panel close button
2012-12-17 16:25:51 +08:00
Dan Poltawski e8e9393e76 Merge branch 'w50_MDL-36493_m24_mysql' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-17 15:29:07 +08:00
Joseph Rezeau 231f758404 MDL-37114 quiz form validation: feedback boundaries.
The feedback boundaries must either be a number or a percentage.
We were not correctly validating the non-percentage case.
2012-12-17 15:26:07 +08:00
Andrew Davidson e92d664dd2 MDL-37034 - Added appropriate name to category settings navigation node 2012-12-17 15:21:57 +08:00
Dan Poltawski 973fe984cd Merge branch 'w50_MDL-36597_m24_courselang' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-17 13:53:06 +08:00
Mark Nelson 4548df3155 MDL-29334 mod_data: if site-wide presets created in <= 1.9 exist convert them to 2.x 2012-12-17 13:48:15 +08:00
Rajesh Taneja c874cee03a MDL-36736 course: Availability information should not be visible for hidden modules
If user is viewing hidden module, availability information should only be visible to
user when editing and module is visible. If editing and module is hidden, then hide
availablilty information as it's invalid.
When user is not editing and activity is hidden then don't add availability information.
2012-12-17 12:09:30 +08:00
Rajesh Taneja caeb7f90b0 MDL-36736 course: Availability information will use hide class for hidding 2012-12-17 12:09:30 +08:00
Dan Poltawski da264959f2 Merge branch 'wip-MDL-25928-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2012-12-17 12:05:12 +08:00
Dan Poltawski 41e1109c5f Merge branch 'wip-MDL-35874-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-17 11:52:59 +08:00
Dan Poltawski 209b2f7b3e Merge branch 'wip-MDL-35979-s24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-17 11:48:39 +08:00
Dan Poltawski 503325ddcb Merge branch 'MDL-37078-m24' of git://github.com/sammarshallou/moodle into MOODLE_24_STABLE 2012-12-17 11:37:02 +08:00
Damyon Wiese 41575c5571 MDL-37165 Assignment: Oracle fix for count_submissions_with_status (and friends).
Oracle does not like the use of AS after a join.
2012-12-17 11:31:31 +08:00
Sam Hemelryk 73f60c1886 MDL-25928 course: Fixed course info on the combo list to be a popup 2012-12-17 16:03:34 +13:00
Petr Škoda dc7c91ae67 MDL-37171 fix multiple spreadsheet related PHP4isms 2012-12-15 12:38:12 +01:00
Petr Škoda 15dbd27efa MDL-36245 add tests for the buggy utf-8 to utf-8 conversion 2012-12-15 11:50:44 +01:00
Petr Škoda 9a05bd0f8f MDL-36245 try to workaround buggy iconv() when converting text from utf-8 to utf-8 2012-12-15 11:50:43 +01:00
Petr Škoda 524e1ce789 MDL-36475 tweak zIndexes once more
The expected ranges are now:
* 0-1000 for normal code
* 5000-5999 for TinyMCE
* 7000-8999 for filepicker and filemanager

This patch fixes also incorrect location of "MDL-25736 - French spellchecker fixes." modification reminder.
2012-12-15 11:47:16 +01:00
Petr Škoda 3d4de0bc4e MDL-36493 improve timeout handling in mysql upgrade
Credit goes to Mark Nielsen, thanks.
2012-12-15 11:44:18 +01:00
Petr Škoda 1264dd11a0 MDL-36493 improve performance of mysql unsigned/lob upgrade 2012-12-15 11:44:18 +01:00
Petr Škoda 599e7fe006 MDL-37111 copy first post files in single type forum using intro options
This patch also removed the delete button from the first post in single
discussion type forum.

Edit button in the first post leads to the forum edit page now, this should
prevent other problems throwing first post and intro out of sync.
2012-12-15 11:24:16 +01:00
Petr Škoda b768c6f77a MDL-36597 strip '_utf8' from all course.lang fields 2012-12-15 11:16:12 +01:00
Eloy Lafuente (stronk7) 4651e4e464 MDL-37176 timezones: updated to 2012j 2012-12-14 20:08:19 +01:00
Eloy Lafuente (stronk7) 4c7e6ea021 weekly release 2.4+ 2012-12-14 13:31:08 +01:00
Frederic Massart 46b0673732 MDL-36456 repository: S3 handles errors in a nicer way 2012-12-14 17:57:19 +08:00
Damyon Wiese 9c2d41fce2 MDL-30700 tablelib: Fixed get_sort_for_table to work with text sorting columns for oracle
This change stores the list of columns that require text sorting in the session,
so the static function "get_sort_for_table" can work without any additional parameters.
2012-12-13 10:32:23 +01:00
Jason Fowler c5148e0ab6 MDL-35874 - Blocks - Adding a label to the 'Add a block' block's select field 2012-12-13 15:09:45 +08:00
Jason Fowler 8bd65e7aaa MDL-35056 - Backup/Restore - Converting the 'Unmet Dependencies' Message to be a Developer Debug message to make moodle less confusing to the average user 2012-12-13 11:10:56 +08:00
Tim Hunt 4dbdc18fd8 MDL-36897 quiz review: fixup previous commit. 2012-12-13 09:54:28 +08:00
sam marshall 9789d825c2 MDL-37078: Restore - section restore fails with multiple availability conditions 2012-12-12 12:15:41 +00:00
Davo Smith 8f0019214e MDL-37014 repository_webdav - strip the server URL from file & folder paths returned by webdav lib (if present) 2012-12-12 08:55:17 +00:00
Frederic Massart 45cff73a1b MDL-32639 files: Zipping a folder does not overwrite existing files 2012-12-12 14:50:10 +08:00
Frederic Massart aa0cd4a7ef MDL-32639 files: Improved File Manager download and zip support
Conflicts:

	lib/filestorage/zip_packer.php
2012-12-12 14:50:10 +08:00
Vadim Dvorovenko 785e3deb4d MDL-32639 files: Removing '0' start folder in archives created with filemanager
Signed-off-by: Vadim Dvorovenko <vadimon@mail.ru>

Conflicts:

	lib/filestorage/zip_archive.php
2012-12-12 14:43:45 +08:00
Sam Hemelryk 7a4b7c5e18 MDL-33448 enrol_manual: Reduced JS get_string calls for the yui widget 2012-12-12 09:37:36 +08:00
Sam Hemelryk dc5c56e90c MDL-33448 enrol_manual: Reordered things to improve JS performance when enrolling users 2012-12-12 09:37:36 +08:00
Cathal O'Riordan 26679bee33 MDL-36644 Assignment: prepend the course upload limit to the options array
Ensure that the course upload limit is the first option in the list of available choices for the Maximum submission size select.
2012-12-12 08:57:13 +08:00
Dan Marsden 1076d79905 MDL-35737 SCORM: when scorm_parse is called and external scorm manifest use always update the package. 2012-12-12 08:44:00 +08:00
Paul Nicholls 0034f04164 MDL-27619: Prevent teachers from turning course Outcomes into site-wide ones
Similar to the issue which allowed teachers to create site-wide scales by editing a course-specific scale (MDL-24682), teachers could also promote a course-specific scale to a site-wide (standard) by editing it.  As with MDL-24682, removing the course ID check (leaving just the capability check) prevents this unauthorised creation of site-wide (standard) outcomes.
2012-12-12 11:10:35 +13:00
Paul Nicholls 1ff2b56319 MDL-32880: Add moodle1 backup converter for rss_client block.
Creates a shell rss_client.xml file, which contains no feeds.  This makes it behave the same as restoring a Moodle 1.9 backup into a different 1.9 site - the block is created, its title is as per the original course, but it has no feeds selected (and none are added to the site's feed list).
2012-12-11 22:49:13 +01:00
Paul Nicholls 4d9b4e9782 MDL-32880: Add moodle1 backup converter for html block.
This converter processes the HTML block's content, migrating any referenced files.
2012-12-11 22:49:05 +01:00
Paul Nicholls f51fdc9bb7 MDL-32880: moodle1 backup converter: add generic block handler
This handler will automatically be used for any block which does not provide its own handler, and should be subclassed by any block which needs to do anything extra (or different).

This commit incorporates contributions from Mike Churchward and API design suggestions from David Mudrak.
2012-12-11 22:48:54 +01:00
Matteo Scaramuccia f1c403dcec MDL-36641 Missing HTTP check when using an external resource 2012-12-11 22:42:42 +01:00
Sam Hemelryk ab1f9aa3a4 MDL-29805 redirect: added check REQUIRE_CORRECT_ACCESS is true 2012-12-12 09:46:55 +13:00
Sam Hemelryk 1ce6bdd1dd Merge branch 'MDL-29805-24' of git://github.com/mouneyrac/moodle into MOODLE_24_STABLE 2012-12-12 09:45:17 +13:00
Jerome Mouneyrac e20e67161c MDL-35593 core_webservice_get_site_info returns version number set to PARAM_TEXT and PARAM_FLOAT 2012-12-12 09:39:04 +13:00
Sam Hemelryk c545dcad4f Merge branch 'wip_24_mdl-37088_bad_operator_ldap_sync_user' of https://github.com/iarenaza/moodle into MOODLE_24_STABLE 2012-12-12 09:34:44 +13:00
Sam Hemelryk 9e9dd64c35 Merge branch 'MDL-36321_message_participants_24' of git://github.com/andyjdavis/moodle into MOODLE_24_STABLE 2012-12-12 09:29:12 +13:00
Damyon Wiese c6c7a7be8c MDL-30700 Assignment 2.2: Added text_sorting function to tablelib
Allows oracle to sort by text (clob) columns (should be used sparingly).
2012-12-11 19:57:57 +01:00
Eloy Lafuente (stronk7) e958133ca6 MDL-37032 upgrade: define all the 2.4.0 points 2012-12-11 13:12:03 +01:00
Dan Poltawski 9261144beb Merge branch 'w49_MDL-36447_m24_gdtest' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 17:54:37 +08:00
Tim Hunt 71cc181bac MDL-37098 quiz: event handler fails deleting group with no overrides
This was a regression from MDL-35717.
2012-12-11 17:52:04 +08:00
Jean-Michel Vedrine cf617e112f MDL-36243 question->questiontext and question->generalfeedback should always be strings 2012-12-11 16:24:24 +08:00
Dan Poltawski 865485fc54 Merge branch 'wip-MDL-36108-stable24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-11 16:03:34 +08:00
Jason Fowler a595b4dacb MDL-36108 - Blocks - Online User block's user image's alt attribute is now empty to prevent repetition of text for screen readers 2012-12-11 15:50:31 +08:00
Dan Poltawski 7c431a345f Merge branch 'wip-MDL-36938-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2012-12-11 15:19:08 +08:00
Damyon Wiese 4dbc9b0a64 MDL-36712: Assignment grading with custom scale is affected by the current language 2012-12-11 14:01:01 +08:00
Damyon Wiese 9242214612 MDL-36591 Assignment - rewrite image urls in online text summaries 2012-12-11 13:56:58 +08:00
Tim Hunt 4832c70022 MDL-36897 quiz: redirect teachers from summary to review page.
There is already logic like this at the top of attempt.php. If the
teacher arrives at one of these pages for a student's attempt, for
example by clicking a link in the logs, then they should be redirected
to the review page to see the students attempt in its current state.
2012-12-11 13:54:47 +08:00
Andrew Robert Nicols 54fdd4c0e9 MDL-34791 AJAX Update a graded activity's title in the gradebook on rename 2012-12-11 13:22:56 +08:00
sam marshall 0324045e4f MDL-36808 Completion: Incorrect escaping for activity name in completion tickbox 2012-12-11 12:19:32 +08:00
Dan Poltawski fac9ba991b Merge branch 'w49_MDL-36983_m24_ordertext' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 12:09:34 +08:00
Dan Poltawski ae5ecea065 Merge branch 'w49_MDL-36892_m24_enrolreadme' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 12:07:13 +08:00
Tim Hunt 6357dd08b6 MDL-36845 excel export: don't output invalid sheet names.
We should clean any proposed worksheet name, to remove the characters
that Excel does not allow.
2012-12-11 11:59:20 +08:00
Adam Olley c15b286f88 MDL-36828: mod_scorm: Allow deletion of scorm modules if no scorm_scoes data exists 2012-12-11 11:44:24 +08:00
Dan Poltawski 4afa0b50c7 Merge branch 'wip-MDL-36110-s24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-11 11:33:14 +08:00
Dan Poltawski b90b9b83bd Merge branch 'wip-MDL-35884-s24' of git://github.com/phalacee/moodle into MOODLE_24_STABLE 2012-12-11 11:17:33 +08:00
Tim Hunt 79bf1e37ca MDL-36650 don't change question timecreated or timemodified on restore. 2012-12-11 16:11:17 +13:00
Matt Petro 95ae9d9e5e MDL-36025 qtype calculated: Fix handling of "-0" 2012-12-11 11:07:24 +08:00
Sam Hemelryk 7027fe4538 Merge branch 'w49_MDL-36731_m24_uploadestrict' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 16:04:19 +13:00
Damyon Wiese 50f3d7b5ea MDL-35476 Assignment: Make submissions_open public so it can be used by plugins 2012-12-11 10:49:30 +08:00
Rossiani Wijaya 22fc0c5e9b MDL-36905 accessibility for assignment grading: add label for grading actions and operations select options 2012-12-11 15:44:57 +13:00
Sam Hemelryk 6ff1745873 Merge branch 'MDL-36916' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2012-12-11 15:42:08 +13:00
Luke Tucker 505530eaf5 MDL-34052 assignment - Disable submission and feedback plugins based on assign type when upgrading 2012-12-11 10:39:32 +08:00
Sam Hemelryk a2630c08ae Merge branch 'w49_MDL-36936_m24_composerdev' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 15:35:04 +13:00
Dan Poltawski fddbdb79db Merge branch 'w49_MDL-31424_m24_paypalcase' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 10:31:36 +08:00
Sam Hemelryk 1c90b9976d Merge branch 'w49_MDL-37060_m24_sessinit' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 15:27:14 +13:00
Sam Hemelryk 35cb0e4a4c Merge branch 'MDL-36942' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2012-12-11 15:04:22 +13:00
Sam Hemelryk ada098890b Merge branch 'MDL-36954' of git://github.com/timhunt/moodle into MOODLE_24_STABLE 2012-12-11 15:00:00 +13:00
Jerome Mouneyrac 2e8b836243 MDL-36773 timezone inconsistency => some number support decimal other don\'t - Original patch author: Nathan Mares 2012-12-11 09:57:22 +08:00
Sam Hemelryk b004c163ee Merge branch 'wip-mdl-37017-m24' of git://github.com/rajeshtaneja/moodle into MOODLE_24_STABLE 2012-12-11 14:53:49 +13:00
Sam Hemelryk 6d0c04c208 Merge branch 'w49_MDL-37061_m24_invalidlang' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 14:44:21 +13:00
Andrew Davis 29a7d7a1c1 MDL-36321 core_message: made the course participants list correctly show if course participants are contacts or not 2012-12-11 08:55:16 +08:00
Sam Hemelryk eda1d3f37a Merge branch 'w49_MDL-29442_m24_entityutf8' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-11 10:22:06 +13:00
Damyon Wiese 6466396f38 MDL-36263 Assignment: Do not count submissions of unenrolled users 2012-12-11 10:12:26 +13:00
Damyon Wiese 5b2313c26c MDL-36908 Assignment: Additional fixes for preventing empty submissions 2012-12-11 10:12:23 +13:00
Charles Fulton 473eadfe10 MDL-37020 auth_shibboleth: check if target variable is actually set 2012-12-11 09:48:41 +13:00
Sam Hemelryk 52d4168038 Merge branch 'MDL-36601-master' of git://git.luns.net.uk/moodle into MOODLE_24_STABLE 2012-12-11 09:42:29 +13:00
Sam Hemelryk c6bd16545e Merge branch 'MDL-36805-master' of git://git.luns.net.uk/moodle into MOODLE_24_STABLE 2012-12-11 09:16:43 +13:00
Adrian Greeve 517a2dbe84 MDL-37011 - themes: Fixed the alignment of the edit and help icon on the participants page. 2012-12-11 08:43:19 +13:00
Iñaki Arenaza 88d48cd51f MDL-37088 auth_ldap: bad operator in ldap sync_user() method 2012-12-10 16:51:49 +01:00
Dan Poltawski a5ff28cc9f MDL-36755 course_overview block: fix for fix.
I will stop commiting now.
2012-12-10 19:44:26 +08:00
Dan Poltawski 1b2cf98bb0 MDL-36755 course_overview block: fix idiot version
I will shoot the programmer responsible for this mess.
2012-12-10 19:42:29 +08:00
Dan Poltawski 86e28894f4 Merge branch 'w49_MDL-36737_m24_glossstrict' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-10 19:37:31 +08:00
Dan Poltawski c125bb553d Merge branch 'MDL-36755_master' of git://github.com/markn86/moodle into MOODLE_24_STABLE
Conflicts:
	blocks/course_overview/version.php
2012-12-10 19:33:21 +08:00
Dan Poltawski 4ac455d9a4 MDL-36167 fix trailing whitespace 2012-12-10 17:36:31 +08:00
Damyon Wiese 3b7a18f2e5 MDL-36167: Assignment quickgrading fix when there is no grade (ensure feedback still saves)
This patch modifies the previous on by Luke Tucker so that the lastmodified hidden field
is always added to the quickgrading form even if there is no grade for the assignment. This
ensures that the lastmodified checks still work (to prevent teachers overwriting each
others feedback) and feedback is saved when there is no grade.
2012-12-10 17:36:31 +08:00
Luke Tucker a13a1707bc MDL-36167: Update all users in assignment quickgrade form to ensure feedback is saved 2012-12-10 17:36:30 +08:00
Tim Hunt 6812769f8f MDL-36732 Cloze qtype: review marks should not depend on feedback.
The various review options should be independent.
2012-12-10 15:18:14 +08:00
Rossiani Wijaya 2f860b4ded MDL-36549 Lesson module: fixed strict standards errors 2012-12-10 14:18:55 +08:00
Kirill Astashov d84c21dfcc MDL-36856: Fix method name misspelled in two places in mod_assign 2012-12-10 14:04:37 +08:00
Damyon Wiese 0e3c1231da MDL-36835 Assignment: Do not show javascript warning when toggling quickgrading 2012-12-10 14:02:14 +08:00
Dan Poltawski 71e8ee1c33 Merge branch 'MDL-36538_webdav_memory_24' of git://github.com/davosmith/moodle into MOODLE_24_STABLE 2012-12-10 13:13:03 +08:00
Dan Poltawski 8938f0848e Merge branch 'w49_MDL-35456_m24_paypal' of git://github.com/skodak/moodle into MOODLE_24_STABLE 2012-12-10 12:03:23 +08:00
Tim Hunt 0e73e16460 MDL-35404 question export: make it work with slasharguments off.
Thanks to Brian King for working out the problem and how to fix it. I am
just committing his patch.
2012-12-10 11:37:17 +08:00
Dan Poltawski 9321379b10 Merge branch 'wip-MDL-36939-m24' of git://github.com/samhemelryk/moodle into MOODLE_24_STABLE 2012-12-10 11:08:51 +08:00
Jerome Mouneyrac c91c7fcded MDL-30961 get_course_contents: returned activity name should not be check against PARAM_TEXT, it could be anything 2012-12-10 15:00:00 +13:00
Andrew Davis 0663096dc6 MDL-36680 core_grade: fixed grade_report::blank_hidden_total() and added unit tests 2012-12-10 09:56:45 +08:00
Michael Aherne 7a9e253405 MDL-36946 theme Use server default theme before standard 2012-12-10 14:43:56 +13:00
Sam Hemelryk 5e6b64571c Merge branch 'MDL-34592_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2012-12-10 14:28:33 +13:00
Sam Hemelryk c446a0fca2 Merge branch 'MDL-36608_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2012-12-10 14:24:18 +13:00
Sam Hemelryk 07f89a017c Merge branch 'MDL-36978_M24' of git://github.com/lazydaisy/moodle into MOODLE_24_STABLE 2012-12-10 14:21:25 +13:00
Sam Hemelryk b8b1926e2f Merge branch 'MDL-36579_modLtiBackupFields' of git://github.com/moodlerooms/moodle into MOODLE_24_STABLE 2012-12-10 14:15:54 +13:00
Mark Nielsen 4d5970ea63 MDL-36607: Improve block drag and drop
* Adding support for subpage
* Adding support for regions that do not start with "side-"
2012-12-10 14:12:50 +13:00
Mark Nelson 656cea20a6 MDL-35954 javascript: prevent JS from being triggered on select box by clicking on already selected option 2012-12-10 14:08:52 +13:00
Mary Evans e9f8261131 MDL-34592 theme_magazine: Fixes the report grader fixed column misalignment in magazine/style/core.css theme, plus fixes all CORE themes with minor adjustment to grade/report/grader/style.css 2012-12-09 23:32:04 +00:00
Itamar Tzadok d87a55fc2b MDL-36433 Forms lib - Added dash escaping to validation script getter. 2012-12-10 12:13:54 +13:00
Dan Poltawski b0c87306a6 MDL-36764 ddl/oracle: fix misleading comment 2012-12-10 11:54:28 +13:00
Dan Poltawski 38ab68e6ab MDL-36778 course - prevent undefined index warnings
When logged in as a guest the mform didn't set userid.
2012-12-10 11:51:57 +13:00
Dan Poltawski 0e7cadca03 MDL-36887 quiz: reorder upgrade.txt's 2012-12-10 11:49:03 +13:00
Andrew Robert Nicols efd08cdc2b MDL-36640 Logging: Correct testing of log->info.
log->info sometimes contains additional information which can be looked up
from other tables. This should only be attempted if the field is numeric,
but the CSV, XLS, and ODS outputs were not making this check.

There is an additional case for the print_mnet_log function which has not
been covered - this is because the mnet logging is currently broken beyond
the scope of this bug rendering this section untestable. These issues are
raised in MDL-36642.
2012-12-10 11:43:35 +13:00
Andrew Robert Nicols 7e61737f3d MDL-36918 Decode HTML entities on ajax update title 2012-12-10 11:15:55 +13:00
Andrew Davis 138025470f MDL-36162 core_message: string clean up 2012-12-10 11:04:18 +13:00
Andrew Davis 8b72167d0e MDL-36162 core_message: removed the unnecessary and confusing course URL parameter as well as fixing the broken breadcrumb 2012-12-10 11:04:13 +13:00
Andrew Davis f92305bfa9 MDL-36761 core_grade:shifted a call to count() out of a loop 2012-12-10 10:54:43 +13:00
Sam Hemelryk 0b4767ca50 Merge branch 'MDL-34591_24' of git://github.com/grabs/moodle into MOODLE_24_STABLE 2012-12-10 10:48:59 +13:00
Kevin Wiliarty 1c50e53a05 MDL-35221 mod_feedback: replace checkbox with advcheckbox for all requirable feedback question types 2012-12-10 10:41:48 +13:00
Adrian Greeve a3301036d6 MDL-36906 - mod_data: Latitude and Logitude error fix.
Thanks to Marcus Boon for providing a patch for this issue.

mod/data/field/latlong/kml.php was missing a context variable.
This was causing an error when trying to download a kml file for
google earth. This variable has now been included.
2012-12-10 10:34:29 +13:00
Adrian Greeve c7a34ab704 MDL-36915 - mod/data: A database with no entries no longer displays the export to portfolio button. 2012-12-10 10:27:42 +13:00
Sam Hemelryk 1b696de61b Merge branch 'wip-MDL-37026-MOODLE_24_STABLE' of git://github.com/abgreeve/moodle into MOODLE_24_STABLE 2012-12-10 10:23:44 +13:00
Adam Olley f4d4c73899 MDL-33125: core_backup: Prevent import/activity duplication from duplicating manual grade items 2012-12-10 10:20:03 +13:00
Petr Škoda da0cf7f883 MDL-36447 skip file preview test if GD not available 2012-12-09 19:22:36 +01:00
Andreas Grabs 7c3f70812e MDL-34591 - paypal does not allow unenrol 2012-12-09 19:10:26 +01:00
Mary Evans f5eabd12db MDL-36490 theme_standard: reduces the 15px radius down to 3px in style/css3.css for .generalbox objects 2012-12-09 18:05:03 +00:00
Mary Evans db1dd3e550 MDL-36608 theme_sky_high: Fixes missing background in sdmin pages by removing incorrect CSS in style/admin.css 2012-12-09 17:44:37 +00:00
Petr Škoda f48902e139 MDL-29442 add missing utf-8 to entity html encoding and decoding 2012-12-09 18:22:16 +01:00
Petr Škoda 7b03292e24 MDL-37061 always validate lang when setting session user
This should resolve problems with TinyMCE langs and some unknown MUCH caching issue.
2012-12-09 11:30:05 +01:00
Mary Evans 2a6e3435d0 MDL-36978 theme_standardold: fixes misplaced block region check in layout/frontpage.php which, with hindsight should have been fixed in MDL-23226. 2012-12-08 22:50:33 +00:00
Petr Škoda 0411eed2cb MDL-36737 fix random glossary E_STRICT issue 2012-12-08 14:44:49 +01:00
Petr Škoda 365ef195b5 MDL-31424 compare PayPal emails case-insensitively
Credit goes to Chris Follin, thanks!
2012-12-08 13:17:10 +01:00
Petr Škoda 8c3547554b MDL-37060 prevent notice in session_get_instance() 2012-12-08 12:31:40 +01:00
Petr Škoda 324efa55e3 MDL-35456 use HTTP 1.1 for PayPal IPN 2012-12-08 11:58:43 +01:00
Eloy Lafuente (stronk7) 0b7c52dd4c weekly release 2.4+ 2012-12-08 02:56:23 +01:00
Petr Škoda cf31390c6f MDL-36936 require phpunit as composer --dev only 2012-12-07 18:20:42 +01:00
Petr Škoda 5af62aa90a MDL-36892 delete outdated enrol info 2012-12-07 17:16:28 +01:00
Davo Smith cf839b4396 MDL-36538 repository_webdav - save files directly to local filesystem, rather than buffering in memory 2012-12-07 09:19:21 +00:00
Jason Fowler 257a5d1299 MDL-35884 - Course - Remove text from ALT attribute for activity chooser 2012-12-07 13:52:32 +08:00
Rajesh Taneja e6d4708fcf MDL-37017 My Moodle: Course name should be fullname of course 2012-12-07 11:58:07 +08:00
Sam Hemelryk f9870842bd MDL-36939 cache: instance form validation now handles errors properly 2012-12-07 08:37:03 +13:00
Sam Hemelryk 2d7173d0c7 MDL-36938 cache: test performance script checks requirements now 2012-12-07 08:36:56 +13:00
Petr Škoda 4682fc7c38 MDL-36983 fix incorrect test method name
Credit goes to David Scotson, thanks.
2012-12-06 15:32:46 +01:00
Petr Škoda 15a77653e4 MDL-36731 fix E_STRICt issue when creating new groups in user upload 2012-12-06 13:15:41 +01:00
Dan Poltawski 9b1f784178 Merge branch 'wip-MDL-36960-m24' of git://github.com/amygroshek/moodle into MOODLE_24_STABLE 2012-12-06 12:04:08 +08:00
Adrian Greeve 44bfbe1e15 MDL-37026 - lib: The function user_can_assign() returns true for admins. 2012-12-06 11:04:34 +08:00
Dan Poltawski 0c767bf6cc Merge branch 'MDL-36963-deployment-backup_24' of git://github.com/mudrd8mz/moodle into MOODLE_24_STABLE 2012-12-06 10:57:13 +08:00
David Mudrák 81c89dd705 MDL-36963 Do not attempt to remove the root folder of a plugin during the update deployment
There is no need to move the root folder of a plugin during the update
deployment. We just need to operate with its contents. So the web server
process can have the write access for the plugin folder only.
2012-12-06 02:45:16 +01:00
David Mudrák b46ee168ef MDL-36963 Add unit tests for directory operations in mdeploy.php 2012-12-06 02:45:16 +01:00
David Mudrák e399d32694 MDL-36963 Improve mdeploy worker::remove_directory() method
The additional parameter allows to use this method without actual
removing the root of the path. That is, it is now possible to remove
the content of a folder only.
2012-12-06 02:35:22 +01:00
David Mudrák 606e2c8ebe MDL-36963 Improve mdeploy worker::move_directory() method
The additional parameter allows to use this method without actual
removing the root of the source location. That is, it is now possible to
move the content of a folder only.

Also, a small refactoring happened here as we will need a variant of
this method that does not throw exception if the target already exists.
2012-12-06 02:31:36 +01:00
Sam Hemelryk c6e0d385c3 MDL-36341 calendar: fixed JS bug with popup node setter 2012-12-06 02:25:14 +01:00
David Mudrák 31a3bcc933 MDL-37003 Fix repeated line in update notification email
There was a problem experienced after 2.4.0 release because the version
of the 2.4.0 release was the same as 2.5dev release. So the version
value matched twice in the loop and the line was repeated in the email.
2012-12-06 01:50:32 +01:00
David Mudrák acade5443f MDL-36943 Do not notify about already installed updates
Before this patch, the available_update_checker::cron_notifications()
method accessed the availableupdates property. But for plugins, that property
basically contains the most recent version available. So we were missing
the check against the actual version installed.

The fix was simple - obtain available updates via the available_updates()
method that performs the check.
2012-12-06 01:50:21 +01:00
Marina Glancy 113105bf9c MDL-36840 Set course.format to 'site' for site-course 2012-12-05 10:28:12 +08:00
Jason Fowler dd9f2b1cca MDL-35979 - Commenting - Adding an empty alt attribute to the javascript generated delete icon for comments 2012-12-05 10:02:31 +08:00
Amy Groshek 90d740364b MDL-36960 - fix broken horizontal positioning of titles for docked blocks 2012-12-04 18:07:25 -06:00
Jason Fowler 89bc7e7b6e MDL-36110 - Blocks - Community finder icon alt attribute is now empty 2012-12-04 15:17:07 +08:00
Jerome Mouneyrac 5c58a540ea MDL-29805 add REQUIRE_CORRECT_ACCESS define + return error code when AJAX_SCRIPT fails 2012-12-04 13:44:48 +08:00
Eloy Lafuente (stronk7) 325e266e95 NOBUG: Bump backup version for 2.4 2012-12-03 21:46:18 +01:00
10873 changed files with 673330 additions and 994387 deletions
-3
View File
@@ -1,3 +0,0 @@
--errors=errors,duplicate-properties
--warnings=known-properties,display-property-grouping,empty-rules,important
--exclude-list=vendor/,lib/editor/tinymce/,lib/yuilib/,theme/bootstrapbase/style/
-5
View File
@@ -30,8 +30,3 @@ phpunit.xml
composer.phar
composer.lock
/vendor/
/behat.yml
*/yui/build/*/*-coverage.js
/lib/yuilib/*/build/*/*-coverage.js
# lib/yuilib/version/module/module-coverage.js
/lib/yuilib/*/*/*-coverage.js
-48
View File
@@ -1,48 +0,0 @@
{
"browser": true,
"yui": true,
"bitwise": true,
"curly": true,
"eqeqeq": true,
"forin": false,
"immed": true,
"newcap": true,
"noarg": true,
"noempty": true,
"nomen": false,
"onevar": false,
"plusplus": false,
"regexp": false,
"strict": false,
"trailing": true,
"unused": true,
"white": false,
"asi": false,
"boss": false,
"debug": false,
"eqnull": false,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"funcscope": false,
"globalstrict": false,
"iterator": false,
"lastsemic": false,
"laxbreak": true,
"laxcomma": false,
"loopfunc": false,
"multistr": false,
"onecase": false,
"proto": false,
"regexdash": false,
"scripturl": false,
"shadow": false,
"smarttabs": false,
"sub": false,
"supernew": false,
"maxerr": 500,
"maxlen": 180,
"passfail": false,
"latedef": true
}
-5
View File
@@ -1,5 +0,0 @@
{
"coverage": false,
"lint": "config",
"clean": true
}
+2 -4
View File
@@ -51,8 +51,7 @@ switch ($action) {
if ($auth == $CFG->registerauth) {
set_config('registerauth', '');
}
\core\session\manager::gc(); // Remove stale sessions.
core_plugin_manager::reset_caches();
session_gc(); // remove stale sessions
break;
case 'enable':
@@ -62,8 +61,7 @@ switch ($action) {
$authsenabled = array_unique($authsenabled);
set_config('auth', implode(',', $authsenabled));
}
\core\session\manager::gc(); // Remove stale sessions.
core_plugin_manager::reset_caches();
session_gc(); // remove stale sessions
break;
case 'down':
+11 -23
View File
@@ -64,8 +64,6 @@ echo "<form id=\"authmenu\" method=\"post\" action=\"auth_config.php\">\n";
echo "<div>\n";
echo "<input type=\"hidden\" name=\"sesskey\" value=\"".sesskey()."\" />\n";
echo "<input type=\"hidden\" name=\"auth\" value=\"".$auth."\" />\n";
// HACK to prevent browsers from automatically inserting the user's password into the wrong fields.
echo prevent_form_autofill_password();
// auth plugin description
echo $OUTPUT->box_start();
@@ -80,9 +78,6 @@ echo '<p style="text-align: center"><input type="submit" value="' . get_string("
echo "</div>\n";
echo "</form>\n";
$PAGE->requires->string_for_js('unmaskpassword', 'core_form');
$PAGE->requires->yui_module('moodle-auth-passwordunmask', 'M.auth.passwordunmask');
echo $OUTPUT->footer();
exit;
@@ -92,8 +87,8 @@ exit;
// but some may want a custom one if they are offering
// other options
// Note: lockconfig_ fields have special handling.
function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts, $updateopts, $customfields = array()) {
global $DB, $OUTPUT;
function print_auth_lock_options ($auth, $user_fields, $helptext, $retrieveopts, $updateopts) {
global $OUTPUT;
echo '<tr><td colspan="3">';
if ($retrieveopts) {
echo $OUTPUT->heading(get_string('auth_data_mapping', 'auth'));
@@ -112,21 +107,14 @@ function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts,
$pluginconfig = get_config("auth/$auth");
// Helptext is on a field with rowspan.
// helptext is on a field with rowspan
if (empty($helptext)) {
$helptext = '&nbsp;';
$helptext = '&nbsp;';
}
// If we have custom fields then merge them with user fields.
if (!empty($customfields)) {
$user_fields = array_merge($user_fields, $customfields);
}
if (!empty($customfields)) {
$customfieldname = $DB->get_records('user_info_field', null, '', 'shortname, name');
}
foreach ($user_fields as $field) {
// Define some vars we'll work with.
// Define some vars we'll work with
if (!isset($pluginconfig->{"field_map_$field"})) {
$pluginconfig->{"field_map_$field"} = '';
}
@@ -140,14 +128,10 @@ function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts,
$pluginconfig->{"field_lock_$field"} = '';
}
// Define the fieldname we display to the user.
// define the fieldname we display to the user
$fieldname = $field;
if ($fieldname === 'lang') {
$fieldname = get_string('language');
} elseif (!empty($customfields) && in_array($field, $customfields)) {
// If custom field then pick name from database.
$fieldshortname = str_replace('profile_field_', '', $fieldname);
$fieldname = $customfieldname[$fieldshortname]->name;
} elseif (preg_match('/^(.+?)(\d+)$/', $fieldname, $matches)) {
$fieldname = get_string($matches[1]) . ' ' . $matches[2];
} elseif ($fieldname == 'url') {
@@ -171,6 +155,8 @@ function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts,
echo '<label for="menulockconfig_field_updateremote_'.$field.'">'.get_string('auth_updateremote', 'auth') . '</label>&nbsp;';
echo html_writer::select($updateextoptions, "lockconfig_field_updateremote_{$field}", $pluginconfig->{"field_updateremote_$field"}, false);
echo '<br />';
}
echo '<label for="menulockconfig_field_lock_'.$field.'">'.get_string('auth_fieldlock', 'auth') . '</label>&nbsp;';
echo html_writer::select($lockoptions, "lockconfig_field_lock_{$field}", $pluginconfig->{"field_lock_$field"}, false);
@@ -189,3 +175,5 @@ function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts,
echo '</tr>';
}
}
+76
View File
@@ -0,0 +1,76 @@
<?php
// block.php - allows admin to edit all local configuration variables for a block
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
$blockid = required_param('block', PARAM_INT);
if(!$blockrecord = blocks_get_record($blockid)) {
print_error('blockdoesnotexist', 'error');
}
admin_externalpage_setup('blocksetting'.$blockrecord->name);
$block = block_instance($blockrecord->name);
if($block === false) {
print_error('blockcannotinistantiate', 'error');
}
// Define the data we're going to silently include in the instance config form here,
// so we can strip them from the submitted data BEFORE handling it.
$hiddendata = array(
'block' => $blockid,
'sesskey' => sesskey()
);
/// If data submitted, then process and store.
if ($config = data_submitted()) {
if (!confirm_sesskey()) {
print_error('confirmsesskeybad', 'error');
}
if(!$block->has_config()) {
print_error('blockcannotconfig', 'error');
}
$remove = array_keys($hiddendata);
foreach($remove as $item) {
unset($config->$item);
}
$block->config_save($config);
redirect("$CFG->wwwroot/$CFG->admin/blocks.php", get_string("changessaved"), 1);
exit;
}
/// Otherwise print the form.
$strmanageblocks = get_string('manageblocks');
$strblockname = $block->get_title();
echo $OUTPUT->header();
echo $OUTPUT->heading($strblockname);
echo $OUTPUT->notification('This block still uses an old-style config_global.html file. ' .
'It must be updated by a developer to use a settings.php file.');
echo $OUTPUT->box(get_string('configwarning', 'admin'), 'generalbox boxwidthnormal boxaligncenter');
echo '<br />';
echo '<form method="post" action="block.php">';
echo '<p>';
foreach($hiddendata as $name => $val) {
echo '<input type="hidden" name="'. $name .'" value="'. $val .'" />';
}
echo '</p>';
echo $OUTPUT->box_start();
include($CFG->dirroot.'/blocks/'. $block->name() .'/config_global.html');
echo $OUTPUT->box_end();
echo '</form>';
echo $OUTPUT->footer();
+50 -33
View File
@@ -1,6 +1,6 @@
<?php
// Allows the admin to configure blocks (hide/show, uninstall and configure)
// Allows the admin to configure blocks (hide/show, delete and configure)
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
@@ -11,13 +11,14 @@
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$hide = optional_param('hide', 0, PARAM_INT);
$show = optional_param('show', 0, PARAM_INT);
$delete = optional_param('delete', 0, PARAM_INT);
$unprotect = optional_param('unprotect', 0, PARAM_INT);
$protect = optional_param('protect', 0, PARAM_INT);
/// Print headings
$strmanageblocks = get_string('manageblocks');
$struninstall = get_string('uninstallplugin', 'core_admin');
$strdelete = get_string('delete');
$strversion = get_string('version');
$strhide = get_string('hide');
$strshow = get_string('show');
@@ -36,7 +37,6 @@
print_error('blockdoesnotexist', 'error');
}
$DB->set_field('block', 'visible', '0', array('id'=>$block->id)); // Hide block
core_plugin_manager::reset_caches();
admin_get_root(true, false); // settings not required - only pages
}
@@ -45,7 +45,6 @@
print_error('blockdoesnotexist', 'error');
}
$DB->set_field('block', 'visible', '1', array('id'=>$block->id)); // Show block
core_plugin_manager::reset_caches();
admin_get_root(true, false); // settings not required - only pages
}
@@ -79,6 +78,35 @@
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($delete) && confirm_sesskey()) {
echo $OUTPUT->header();
echo $OUTPUT->heading($strmanageblocks);
if (!$block = blocks_get_record($delete)) {
print_error('blockdoesnotexist', 'error');
}
if (get_string_manager()->string_exists('pluginname', "block_$block->name")) {
$strblockname = get_string('pluginname', "block_$block->name");
} else {
$strblockname = $block->name;
}
if (!$confirm) {
echo $OUTPUT->confirm(get_string('blockdeleteconfirm', '', $strblockname), 'blocks.php?delete='.$block->id.'&confirm=1', 'blocks.php');
echo $OUTPUT->footer();
exit;
} else {
uninstall_plugin('block', $block->name);
$a = new stdClass();
$a->block = $strblockname;
$a->directory = $CFG->dirroot.'/blocks/'.$block->name;
notice(get_string('blockdeletefiles', '', $a), 'blocks.php');
}
}
echo $OUTPUT->header();
echo $OUTPUT->heading($strmanageblocks);
@@ -96,11 +124,10 @@
$table = new flexible_table('admin-blocks-compatible');
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'undeletable', 'settings', 'uninstall'));
$table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strprotecthdr, $strsettings, $struninstall));
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'undeletable', 'delete', 'settings'));
$table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strprotecthdr, $strdelete, $strsettings));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
$table->set_attribute('class', 'admintable blockstable generaltable');
$table->set_attribute('id', 'compatibleblockstable');
$table->set_attribute('class', 'compatibleblockstable blockstable generaltable');
$table->setup();
$tablerows = array();
@@ -114,18 +141,17 @@
$blocknames[$blockid] = $blockname;
}
}
core_collator::asort($blocknames);
collatorlib::asort($blocknames);
foreach ($blocknames as $blockid=>$strblockname) {
$block = $blocks[$blockid];
$blockname = $block->name;
$dbversion = get_config('block_'.$block->name, 'version');
if (!file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
$blockobject = false;
$strblockname = '<span class="notifyproblem">'.$strblockname.' ('.get_string('missingfromdisk').')</span>';
$plugin = new stdClass();
$plugin->version = $dbversion;
$plugin->version = $block->version;
} else {
$plugin = new stdClass();
@@ -140,11 +166,7 @@
}
}
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('block_'.$blockname, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $struninstall);
} else {
$uninstall = '';
}
$delete = '<a href="blocks.php?delete='.$blockid.'&amp;sesskey='.sesskey().'">'.$strdelete.'</a>';
$settings = ''; // By default, no configuration
if ($blockobject and $blockobject->has_config()) {
@@ -183,13 +205,13 @@
} else {
$visible = '<a href="blocks.php?show='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strshow.'">'.
'<img src="'.$OUTPUT->pix_url('t/show') . '" class="iconsmall" alt="'.$strshow.'" /></a>';
$class = 'dimmed_text';
$class = ' class="dimmed_text"'; // Leading space required!
}
if ($dbversion == $plugin->version) {
$version = $dbversion;
if ($block->version == $plugin->version) {
$version = $block->version;
} else {
$version = "$dbversion ($plugin->version)";
$version = "$block->version ($plugin->version)";
}
if (!$blockobject) {
@@ -204,15 +226,15 @@
}
$row = array(
$strblockname,
'<span'.$class.'>'.$strblockname.'</span>',
$blocklist,
$version,
'<span'.$class.'>'.$version.'</span>',
$visible,
$undeletable,
$settings,
$uninstall,
$delete,
$settings
);
$table->add_data($row, $class);
$table->add_data($row);
}
$table->print_html();
@@ -222,8 +244,8 @@
$table = new flexible_table('admin-blocks-incompatible');
$table->define_columns(array('block', 'uninstall'));
$table->define_headers(array($strname, $struninstall));
$table->define_columns(array('block', 'delete'));
$table->define_headers(array($strname, $strdelete));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
$table->set_attribute('class', 'incompatibleblockstable generaltable');
@@ -231,14 +253,9 @@
$table->setup();
foreach ($incompatible as $block) {
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('block_'.$block->name, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $struninstall);
} else {
$uninstall = '';
}
$table->add_data(array(
$block->name,
$uninstall,
'<a href="blocks.php?delete='.$block->id.'&amp;sesskey='.sesskey().'">'.$strdelete.'</a>',
));
}
$table->print_html();
+22 -20
View File
@@ -17,7 +17,7 @@
/**
* This file is used to display a categories sub categories, external pages, and settings.
*
* @since Moodle 2.3
* @since 2.3
* @package admin
* @copyright 2011 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@@ -67,6 +67,7 @@ if ($data = data_submitted() and confirm_sesskey()) {
$errormsg = get_string('errorwithsettings', 'admin');
$firsterror = reset($adminroot->errors);
}
$adminroot = admin_get_root(true); //reload tree
$settingspage = $adminroot->locate($category, true);
}
@@ -96,26 +97,27 @@ foreach ($settingspage->children as $childpage) {
$outputhtml .= $OUTPUT->heading(html_writer::link($childpage->url, $childpage->visiblename), 3);
} else if ($childpage instanceof admin_settingpage) {
$outputhtml .= $OUTPUT->heading(html_writer::link(new moodle_url('/'.$CFG->admin.'/settings.php', array('section' => $childpage->name)), $childpage->visiblename), 3);
// If its a settings page and has settings lets display them.
if (!empty($childpage->settings)) {
$outputhtml .= html_writer::start_tag('fieldset', array('class' => 'adminsettings'));
foreach ($childpage->settings as $setting) {
if (empty($setting->nosave)) {
$savebutton = true;
}
$fullname = $setting->get_full_name();
if (array_key_exists($fullname, $adminroot->errors)) {
$data = $adminroot->errors[$fullname]->data;
} else {
$data = $setting->get_setting();
}
$outputhtml .= html_writer::tag('div', '<!-- -->', array('class' => 'clearer'));
$outputhtml .= $setting->output_html($data);
}
$outputhtml .= html_writer::end_tag('fieldset');
}
} else if ($childpage instanceof admin_category) {
$outputhtml .= $OUTPUT->heading(html_writer::link(new moodle_url('/'.$CFG->admin.'/category.php', array('category' => $childpage->name)), get_string('admincategory', 'admin', $childpage->visiblename)), 3);
} else {
continue;
}
if (!empty($childpage->settings)) {
$outputhtml .= html_writer::start_tag('fieldset', array('class' => 'adminsettings'));
foreach ($childpage->settings as $setting) {
if (empty($setting->nosave)) {
$savebutton = true;
}
$fullname = $setting->get_full_name();
if (array_key_exists($fullname, $adminroot->errors)) {
$data = $adminroot->errors[$fullname]->data;
} else {
$data = $setting->get_setting();
}
$outputhtml .= html_writer::tag('div', '<!-- -->', array('class' => 'clearer'));
$outputhtml .= $setting->output_html($data);
}
$outputhtml .= html_writer::end_tag('fieldset');
}
}
if ($savebutton) {
@@ -155,4 +157,4 @@ echo $outputhtml;
echo html_writer::end_tag('fieldset');
echo html_writer::end_tag('form');
echo $OUTPUT->footer();
echo $OUTPUT->footer();
-111
View File
@@ -1,111 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This hack is intended for clustered sites that do not want
* to use shared cachedir for component cache.
*
* This file needs to be called after any change in PHP files in dataroot,
* that is before upgrade and install.
*
* @package core
* @copyright 2013 Petr Skoda (skodak) {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
define('ABORT_AFTER_CONFIG', true); // We need just the values from config.php.
define('CACHE_DISABLE_ALL', true); // This prevents reading of existing caches.
define('IGNORE_COMPONENT_CACHE', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
// Now get cli options.
list($options, $unrecognized) = cli_get_params(
array(
'file' => false,
'rebuild' => false,
'print' => false,
'help' => false
),
array(
'h' => 'help'
)
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
}
if (!$options['rebuild'] and !$options['file'] and !$options['print']) {
$help =
"Create alternative component cache file
Options:
-h, --help Print out this help
--rebuild Rebuild \$CFG->alternative_component_cache file
--file=filepath Save component cache to file
--print Print component cache file content
Example:
\$ php admin/cli/rebuild_alternative_component_cache.php --rebuild
";
echo $help;
exit(0);
}
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
$content = core_component::get_cache_content();
if ($options['print']) {
echo $content;
exit(0);
}
if ($options['rebuild']) {
if (empty($CFG->alternative_component_cache)) {
fwrite(STDERR, 'config.php does not contain $CFG->alternative_component_cache setting');
fwrite(STDERR, "\n");
exit(2);
}
$target = $CFG->alternative_component_cache;
} else {
$target = $options['file'];
}
if (!$target) {
fwrite(STDERR, "Invalid target file $target");
fwrite(STDERR, "\n");
exit(1);
}
$bytes = file_put_contents($target, $content);
if (!$bytes) {
fwrite(STDERR, "Error writing to $target");
fwrite(STDERR, "\n");
exit(1);
}
// Success.
echo "File $target was updated\n";
exit(0);
+2 -1
View File
@@ -75,7 +75,8 @@ if (!empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if (!empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
$CFG->debug = DEBUG_DEVELOPER;
$CFG->debugdisplay = true;
}
$starttime = microtime();
-119
View File
@@ -1,119 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script allows to do backup.
*
* @package core
* @subpackage cli
* @copyright 2013 Lancaster University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', 1);
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php');
require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php');
// Now get cli options.
list($options, $unrecognized) = cli_get_params(array(
'courseid' => false,
'courseshortname' => '',
'destination' => '',
'help' => false,
), array('h' => 'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] || !($options['courseid'] || $options['courseshortname'])) {
$help = <<<EOL
Perform backup of the given course.
Options:
--courseid=INTEGER Course ID for backup.
--courseshortname=STRING Course shortname for backup.
--destination=STRING Path where to store backup file. If not set the backup
will be stored within the course backup file area.
-h, --help Print out this help.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/backup.php --courseid=2 --destination=/moodle/backup/\n
EOL;
echo $help;
die;
}
$admin = get_admin();
if (!$admin) {
mtrace("Error: No admin account was found");
die;
}
// Do we need to store backup somewhere else?
$dir = rtrim($options['destination'], '/');
if (!empty($dir)) {
if (!file_exists($dir) || !is_dir($dir) || !is_writable($dir)) {
mtrace("Destination directory does not exists or not writable.");
die;
}
}
// Check that the course exists.
if ($options['courseid']) {
$course = $DB->get_record('course', array('id' => $options['courseid']), '*', MUST_EXIST);
} else if ($options['courseshortname']) {
$course = $DB->get_record('course', array('shortname' => $options['courseshortname']), '*', MUST_EXIST);
}
cli_heading('Performing backup...');
$bc = new backup_controller(backup::TYPE_1COURSE, $course->id, backup::FORMAT_MOODLE,
backup::INTERACTIVE_YES, backup::MODE_GENERAL, $admin->id);
// Set the default filename.
$format = $bc->get_format();
$type = $bc->get_type();
$id = $bc->get_id();
$users = $bc->get_plan()->get_setting('users')->get_value();
$anonymised = $bc->get_plan()->get_setting('anonymize')->get_value();
$filename = backup_plan_dbops::get_default_backup_filename($format, $type, $id, $users, $anonymised);
$bc->get_plan()->get_setting('filename')->set_value($filename);
// Execution.
$bc->finish_ui();
$bc->execute_plan();
$results = $bc->get_results();
$file = $results['backup_destination']; // May be empty if file already moved to target location.
// Do we need to store backup somewhere else?
if (!empty($dir)) {
if ($file) {
mtrace("Writing " . $dir.'/'.$filename);
if ($file->copy_content_to($dir.'/'.$filename)) {
$file->delete();
mtrace("Backup completed.");
} else {
mtrace("Destination directory does not exist or is not writable. Leaving the backup in the course backup file area.");
}
}
} else {
mtrace("Backup completed, the new file is listed in the backup area of the given course");
}
$bc->destroy();
exit(0);
-125
View File
@@ -1,125 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script fixed incorrectly deleted users.
*
* @package core
* @subpackage cli
* @copyright 2013 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
// Get cli options.
list($options, $unrecognized) = cli_get_params(
array(
'courses' => false,
'fix' => false,
'help' => false
),
array(
'h' => 'help',
'c' => 'courses',
'f' => 'fix'
)
);
if ($options['help'] || empty($options['courses'])) {
$help =
"Checks and fixes that course modules and sections reference each other correctly.
Compares DB fields course_sections.sequence and course_modules.section
checking that:
- course_sections.sequence contains each module id not more than once in the course
- for each moduleid from course_sections.sequence the field course_modules.section
refers to the same section id (this means course_sections.sequence is more
important if they are different)
- each module in the course is present in one of course_sections.sequence
- section sequences do not contain non-existing course modules
If there are any mismatches, the message is displayed. If --fix is specified,
the records in DB are corrected.
This script may run for a long time on big systems if called for all courses.
Avoid executing the script when another user may simultaneously edit any of the
courses being checked (recommended to run in mainenance mode).
Options:
-c, --courses List courses that need to be checked (comma-separated
values or * for all). Required
-f, --fix Fix the mismatches in DB. If not specified check only and
report problems to STDERR
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/fix_course_sequence.php --courses=*
\$sudo -u www-data /usr/bin/php admin/cli/fix_course_sequence.php --courses=2,3,4 --fix
";
echo $help;
die;
}
$courseslist = preg_split('/\s*,\s*/', $options['courses'], -1, PREG_SPLIT_NO_EMPTY);
if (in_array('*', $courseslist)) {
$where = '';
$params = array();
} else {
list($sql, $params) = $DB->get_in_or_equal($courseslist, SQL_PARAMS_NAMED, 'id');
$where = 'WHERE id '. $sql;
}
$coursescount = $DB->get_field_sql('SELECT count(id) FROM {course} '. $where, $params);
if (!$coursescount) {
cli_error('No courses found');
}
echo "Checking $coursescount courses...\n\n";
require_once($CFG->dirroot. '/course/lib.php');
$problems = array();
$courses = $DB->get_fieldset_sql('SELECT id FROM {course} '. $where, $params);
foreach ($courses as $courseid) {
$errors = course_integrity_check($courseid, null, null, true, empty($options['fix']));
if ($errors) {
if (!empty($options['fix'])) {
// Reset the course cache to make sure cache is recalculated next time the course is viewed.
rebuild_course_cache($courseid, true);
}
foreach ($errors as $error) {
cli_problem($error);
}
$problems[] = $courseid;
} else {
echo "Course [$courseid] is OK\n";
}
}
if (!count($problems)) {
echo "\n...All courses are OK\n";
} else {
if (!empty($options['fix'])) {
echo "\n...Found and fixed ".count($problems)." courses with problems". "\n";
} else {
echo "\n...Found ".count($problems)." courses with problems. To fix run:\n";
echo "\$sudo -u www-data /usr/bin/php admin/cli/fix_course_sequence.php --courses=".join(',', $problems)." --fix". "\n";
}
}
+13 -86
View File
@@ -36,12 +36,6 @@ if (isset($_SERVER['REMOTE_ADDR'])) {
exit(1);
}
// Force OPcache reset if used, we do not want any stale caches
// when preparing test environment.
if (function_exists('opcache_reset')) {
opcache_reset();
}
$help =
"Command line Moodle installer, creates config.php and initializes database.
Please note you must execute this script with the same uid as apache
@@ -64,8 +58,7 @@ Options:
--dbname=NAME Database name. Default is moodle
--dbuser=USERNAME Database user. Default is root
--dbpass=PASSWORD Database password. Default is blank
--dbport=NUMBER Use database port.
--dbsocket=PATH Use database socket, 1 means default. Available for some databases only.
--dbsocket Use database sockets. Available for some databases only.
--prefix=STRING Table prefix for above database tables. Default is mdl_
--fullname=STRING The fullname of the site
--shortname=STRING The shortname of the site
@@ -134,24 +127,19 @@ if (function_exists('date_default_timezone_set') and function_exists('date_defau
/** Used by library scripts to check they are being called by Moodle */
define('MOODLE_INTERNAL', true);
// Disables all caching.
// Disables caching.. just in case.
define('CACHE_DISABLE_ALL', true);
define('PHPUNIT_TEST', false);
define('IGNORE_COMPONENT_CACHE', true);
// Check that PHP is of a sufficient version
if (version_compare(phpversion(), "5.4.4") < 0) {
if (version_compare(phpversion(), "5.3.2") < 0) {
$phpversion = phpversion();
// do NOT localise - lang strings would not work here and we CAN NOT move it after installib
fwrite(STDERR, "Moodle 2.7 or later requires at least PHP 5.4.4 (currently using version $phpversion).\n");
fwrite(STDERR, "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).\n");
fwrite(STDERR, "Please upgrade your server software or install older Moodle version.\n");
exit(1);
}
// set up configuration
global $CFG;
$CFG = new stdClass();
$CFG->lang = 'en';
$CFG->dirroot = dirname(dirname(dirname(__FILE__)));
@@ -161,11 +149,6 @@ $CFG->httpswwwroot = $CFG->wwwroot;
$CFG->docroot = 'http://docs.moodle.org';
$CFG->running_installer = true;
$CFG->early_install_lang = true;
$CFG->ostype = (stristr(PHP_OS, 'win') && !stristr(PHP_OS, 'darwin')) ? 'WINDOWS' : 'UNIX';
$CFG->dboptions = array();
$CFG->debug = (E_ALL | E_STRICT);
$CFG->debugdisplay = true;
$CFG->debugdeveloper = true;
$parts = explode('/', str_replace('\\', '/', dirname(dirname(__FILE__))));
$CFG->admin = array_pop($parts);
@@ -174,14 +157,10 @@ $CFG->admin = array_pop($parts);
//the problem is that we need specific version of quickforms and hacked excel files :-(
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
require_once($CFG->libdir.'/classes/component.php');
require_once($CFG->libdir.'/classes/text.php');
require_once($CFG->libdir.'/classes/string_manager.php');
require_once($CFG->libdir.'/classes/string_manager_install.php');
require_once($CFG->libdir.'/classes/string_manager_standard.php');
require_once($CFG->libdir.'/installlib.php');
require_once($CFG->libdir.'/clilib.php');
require_once($CFG->libdir.'/setuplib.php');
require_once($CFG->libdir.'/textlib.class.php');
require_once($CFG->libdir.'/weblib.php');
require_once($CFG->libdir.'/dmllib.php');
require_once($CFG->libdir.'/moodlelib.php');
@@ -190,32 +169,11 @@ require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
require_once($CFG->dirroot.'/cache/lib.php');
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
// Required because the database checks below lead to session interaction which is going to lead us to requiring autoloaded classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
require($CFG->dirroot.'/version.php');
$CFG->target_release = $release;
\core\session\manager::init_empty_session();
global $SESSION;
global $USER;
global $COURSE;
$COURSE = new stdClass();
$COURSE->id = 1;
global $SITE;
$SITE = $COURSE;
define('SITEID', 1);
//Database types
$databases = array('mysqli' => moodle_database::get_driver_instance('mysqli', 'native'),
'mariadb'=> moodle_database::get_driver_instance('mariadb', 'native'),
'pgsql' => moodle_database::get_driver_instance('pgsql', 'native'),
'oci' => moodle_database::get_driver_instance('oci', 'native'),
'sqlsrv' => moodle_database::get_driver_instance('sqlsrv', 'native'), // MS SQL*Server PHP driver
@@ -245,8 +203,7 @@ list($options, $unrecognized) = cli_get_params(
'dbname' => 'moodle',
'dbuser' => empty($distro->dbuser) ? 'root' : $distro->dbuser, // let distros set dbuser
'dbpass' => '',
'dbport' => '',
'dbsocket' => '',
'dbsocket' => false,
'prefix' => 'mdl_',
'fullname' => '',
'shortname' => '',
@@ -336,8 +293,6 @@ if ($interactive) {
}
}
$CFG->directorypermissions = $chmod;
$CFG->filepermissions = ($CFG->directorypermissions & 0666);
$CFG->umaskpermissions = (($CFG->directorypermissions & 0777) ^ 0777);
//We need wwwroot before we test dataroot
$wwwroot = clean_param($options['wwwroot'], PARAM_URL);
@@ -424,9 +379,8 @@ if ($interactive) {
cli_error(get_string('pathserrcreatedataroot', 'install', $a));
}
}
$CFG->tempdir = $CFG->dataroot.'/temp';
$CFG->cachedir = $CFG->dataroot.'/cache';
$CFG->localcachedir = $CFG->dataroot.'/localcache';
$CFG->tempdir = $CFG->dataroot.'/temp';
$CFG->cachedir = $CFG->dataroot.'/cache';
// download required lang packs
if ($CFG->lang !== 'en') {
@@ -542,34 +496,6 @@ if ($interactive) {
$CFG->prefix = $options['prefix'];
}
// ask for db port
if ($interactive) {
cli_separator();
cli_heading(get_string('databaseport', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbport']);
$CFG->dboptions['dbport'] = (int)cli_input($prompt, $options['dbport']);
} else {
$CFG->dboptions['dbport'] = (int)$options['dbport'];
}
if ($CFG->dboptions['dbport'] <= 0) {
$CFG->dboptions['dbport'] = '';
}
// ask for db socket
if ($CFG->ostype === 'WINDOWS') {
$CFG->dboptions['dbsocket'] = '';
} else if ($interactive and empty($CFG->dboptions['dbport'])) {
cli_separator();
cli_heading(get_string('databasesocket', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbsocket']);
$CFG->dboptions['dbsocket'] = cli_input($prompt, $options['dbsocket']);
} else {
$CFG->dboptions['dbsocket'] = $options['dbsocket'];
}
// ask for db user
if ($interactive) {
cli_separator();
@@ -598,14 +524,14 @@ if ($interactive) {
$CFG->dbpass = cli_input($prompt, $options['dbpass']);
if (function_exists('distro_pre_create_db')) { // Hook for distros needing to do something before DB creation
$distro = distro_pre_create_db($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbport'=>$CFG->dboptions['dbport'], 'dbsocket'=>$CFG->dboptions['dbsocket']), $distro);
$distro = distro_pre_create_db($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbsocket'=>$options['dbsocket']), $distro);
}
$hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbport'=>$CFG->dboptions['dbport'], 'dbsocket'=>$CFG->dboptions['dbsocket']));
$hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbsocket'=>$options['dbsocket']));
} while ($hint_database !== '');
} else {
$CFG->dbpass = $options['dbpass'];
$hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbport'=>$CFG->dboptions['dbport'], 'dbsocket'=>$CFG->dboptions['dbsocket']));
$hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbsocket'=>$options['dbsocket']));
if ($hint_database !== '') {
cli_error(get_string('dbconnectionerror', 'install'));
}
@@ -745,8 +671,9 @@ if (!$envstatus) {
}
// Test plugin dependencies.
require_once($CFG->libdir . '/pluginlib.php');
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
cli_error(get_string('pluginschecktodo', 'admin'));
}
+4 -10
View File
@@ -29,19 +29,12 @@
*/
define('CLI_SCRIPT', true);
define('CACHE_DISABLE_ALL', true);
// extra execution prevention - we can not just require config.php here
if (isset($_SERVER['REMOTE_ADDR'])) {
exit(1);
}
// Force OPcache reset if used, we do not want any stale caches
// when preparing test environment.
if (function_exists('opcache_reset')) {
opcache_reset();
}
$help =
"Advanced command line Moodle database installer.
Please note you must execute this script with the same uid as apache.
@@ -62,10 +55,10 @@ Example:
";
// Check that PHP is of a sufficient version
if (version_compare(phpversion(), "5.4.4") < 0) {
if (version_compare(phpversion(), "5.3.2") < 0) {
$phpversion = phpversion();
// do NOT localise - lang strings would not work here and we CAN NOT move it after installib
fwrite(STDERR, "Moodle 2.7 or later requires at least PHP 5.4.4 (currently using version $phpversion).\n");
fwrite(STDERR, "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).\n");
fwrite(STDERR, "Please upgrade your server software or install older Moodle version.\n");
exit(1);
}
@@ -167,8 +160,9 @@ if (!$envstatus) {
}
// Test plugin dependencies.
require_once($CFG->libdir . '/pluginlib.php');
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
cli_error(get_string('pluginschecktodo', 'admin'));
}
+10 -46
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,7 +16,7 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Enable or disable maintenance mode.
* Enable or disable maintenance mode
*
* @package core
* @subpackage cli
@@ -25,13 +26,12 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once("$CFG->libdir/clilib.php");
require_once("$CFG->libdir/adminlib.php");
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
// Now get cli options.
list($options, $unrecognized) = cli_get_params(array('enable'=>false, 'enablelater'=>0, 'enableold'=>false, 'disable'=>false, 'help'=>false),
// now get cli options
list($options, $unrecognized) = cli_get_params(array('enable'=>false, 'disable'=>false, 'help'=>false),
array('h'=>'help'));
if ($unrecognized) {
@@ -45,14 +45,12 @@ if ($options['help']) {
Current status displayed if not option specified.
Options:
--enable Enable CLI maintenance mode
--enablelater=MINUTES Number of minutes before entering CLI maintenance mode
--enableold Enable legacy half-maintenance mode
--enable Enable maintenance mode
--disable Disable maintenance mode
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/maintenance.php
\$sudo -u www-data /usr/bin/php admin/cli/maintenance.php
"; //TODO: localize - to be translated later when everything is finished
echo $help;
@@ -61,52 +59,18 @@ Example:
cli_heading(get_string('sitemaintenancemode', 'admin')." ($CFG->wwwroot)");
if ($options['enablelater']) {
if (file_exists("$CFG->dataroot/climaintenance.html")) {
// Already enabled, sorry.
echo get_string('clistatusenabled', 'admin')."\n";
return 1;
}
$time = time() + ($options['enablelater']*60);
set_config('maintenance_later', $time);
echo get_string('clistatusenabledlater', 'admin', userdate($time))."\n";
return 0;
} else if ($options['enable']) {
if (file_exists("$CFG->dataroot/climaintenance.html")) {
// The maintenance is already enabled, nothing to do.
} else {
enable_cli_maintenance_mode();
}
set_config('maintenance_enabled', 0);
unset_config('maintenance_later');
echo get_string('sitemaintenanceoncli', 'admin')."\n";
exit(0);
} else if ($options['enableold']) {
if ($options['enable']) {
set_config('maintenance_enabled', 1);
unset_config('maintenance_later');
echo get_string('sitemaintenanceon', 'admin')."\n";
exit(0);
} else if ($options['disable']) {
set_config('maintenance_enabled', 0);
unset_config('maintenance_later');
if (file_exists("$CFG->dataroot/climaintenance.html")) {
unlink("$CFG->dataroot/climaintenance.html");
}
echo get_string('sitemaintenanceoff', 'admin')."\n";
exit(0);
}
if (!empty($CFG->maintenance_enabled) or file_exists("$CFG->dataroot/climaintenance.html")) {
if (!empty($CFG->maintenance_enabled)) {
echo get_string('clistatusenabled', 'admin')."\n";
} else if (isset($CFG->maintenance_later)) {
echo get_string('clistatusenabledlater', 'admin', userdate($CFG->maintenance_later))."\n";
} else {
echo get_string('clistatusdisabled', 'admin')."\n";
}
-202
View File
@@ -1,202 +0,0 @@
<?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/>.
/**
* MySQL table row compression tool tool.
*
* @package core
* @copyright 2014 Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Petr Skoda <petr.skoda@totaralms.com>
*/
define('CLI_SCRIPT', true);
require(dirname(__FILE__).'/../../config.php');
require_once($CFG->libdir . '/clilib.php');
if ($DB->get_dbfamily() !== 'mysql') {
cli_error('This script is used for MySQL databases only.');
}
$engine = strtolower($DB->get_dbengine());
if ($engine !== 'innodb' and $engine !== 'xtradb') {
cli_error('This script is for MySQL servers using InnoDB or XtraDB engines only.');
}
list($options, $unrecognized) = cli_get_params(
array('help' => false, 'info' => false, 'list' => false, 'fix' => false, 'showsql' => false),
array('h' => 'help', 'i' => 'info', 'l' => 'list', 'f' => 'fix', 's' => 'showsql')
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$help =
"Script for detection of row size problems in MySQL InnoDB tables.
By default InnoDB storage table is using legacy Antelope file format
which has major restriction on database row size.
Use this script to detect and fix database tables with potential data
overflow problems.
Options:
-i, --info Show database information
-l, --list List problematic tables
-f, --fix Attempt to fix all tables (requires SUPER privilege)
-s, --showsql Print SQL statements for fixing of tables
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/mysql_compressed_rows.php -l
";
/** @var mysql_sql_generator $generator */
$generator = $DB->get_manager()->generator;
$info = $DB->get_server_info();
$filepertable = $DB->get_record_sql("SHOW VARIABLES LIKE 'innodb_file_per_table'");
$filepertable = $filepertable ? $filepertable->value : '';
$fileformat = $DB->get_record_sql("SHOW VARIABLES LIKE 'innodb_file_format'");
$fileformat = $fileformat ? $fileformat->value : '';
$prefix = $DB->get_prefix();
$database = $CFG->dbname;
if (!empty($options['info'])) {
echo "Database version: " . $info['description'] . "\n";
echo "Database name: $database\n";
echo "Database engine: " . $DB->get_dbengine() . "\n";
echo "innodb_file_per_table: $filepertable\n";
echo "innodb_file_format: $fileformat\n";
exit(0);
} else if (!empty($options['list'])) {
$problem = false;
foreach ($DB->get_tables(false) as $table) {
$columns = $DB->get_columns($table, false);
$size = $generator->guess_antolope_row_size($columns);
$format = $DB->get_row_format($table);
if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) {
continue;
}
echo str_pad($prefix . $table, 32, ' ', STR_PAD_RIGHT);
echo str_pad($format, 11, ' ', STR_PAD_RIGHT);
if ($format === 'Compact' or $format === 'Redundant') {
$problem = true;
echo " (needs fixing)\n";
} else if ($format !== 'Compressed' and $format !== 'Dynamic') {
echo " (unknown)\n";
} else {
echo "\n";
}
}
if ($problem) {
exit(1);
}
exit(0);
} else if (!empty($options['fix'])) {
$fixtables = array();
foreach ($DB->get_tables(false) as $table) {
$columns = $DB->get_columns($table, false);
$size = $generator->guess_antolope_row_size($columns);
$format = $DB->get_row_format($table);
if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) {
continue;
}
if ($format === 'Compact' or $format === 'Redundant') {
$fixtables[$table] = $table;
}
}
if (!$fixtables) {
echo "No changes necessary\n";
exit(0);
}
if ($filepertable !== 'ON') {
try {
$DB->execute("SET GLOBAL innodb_file_per_table=1");
} catch (dml_exception $e) {
echo "Cannot enable GLOBAL innodb_file_per_table setting, use --showsql option and execute the statements manually.";
throw $e;
}
}
if ($fileformat !== 'Barracuda') {
try {
$DB->execute("SET GLOBAL innodb_file_format=Barracuda");
} catch (dml_exception $e) {
echo "Cannot change GLOBAL innodb_file_format setting, use --showsql option and execute the statements manually.";
throw $e;
}
}
if (!$DB->is_compressed_row_format_supported(false)) {
echo "MySQL server is not compatible with compressed row format.";
exit(1);
}
foreach ($fixtables as $table) {
$DB->change_database_structure("ALTER TABLE {$prefix}$table ROW_FORMAT=Compressed");
echo str_pad($prefix . $table, 32, ' ', STR_PAD_RIGHT) . " ... Compressed\n";
}
exit(0);
} else if (!empty($options['showsql'])) {
$fixtables = array();
foreach ($DB->get_tables(false) as $table) {
$columns = $DB->get_columns($table, false);
$size = $generator->guess_antolope_row_size($columns);
$format = $DB->get_row_format($table);
if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) {
continue;
}
if ($format === 'Compact' or $format === 'Redundant') {
$fixtables[$table] = $table;
}
}
if (!$fixtables) {
echo "No changes necessary\n";
exit(0);
}
echo "Copy the following SQL statements and execute them using account with SUPER privilege:\n\n";
echo "USE $database;\n";
echo "SET SESSION sql_mode=STRICT_ALL_TABLES;\n";
echo "SET GLOBAL innodb_file_per_table=1;\n";
echo "SET GLOBAL innodb_file_format=Barracuda;\n";
foreach ($fixtables as $table) {
echo "ALTER TABLE {$prefix}$table ROW_FORMAT=Compressed;\n";
}
echo "\n";
exit(0);
} else {
echo $help;
die;
}
+3 -15
View File
@@ -29,20 +29,14 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// Force OPcache reset if used, we do not want any stale caches
// when detecting if upgrade necessary or when running upgrade.
if (function_exists('opcache_reset') and !isset($_SERVER['REMOTE_ADDR'])) {
opcache_reset();
}
define('CLI_SCRIPT', true);
define('CACHE_DISABLE_ALL', true);
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/adminlib.php'); // various admin-only functions
require_once($CFG->libdir.'/upgradelib.php'); // general upgrade/install related functions
require_once($CFG->libdir.'/clilib.php'); // cli only functions
require_once($CFG->libdir.'/environmentlib.php');
require_once($CFG->libdir.'/pluginlib.php');
// now get cli options
list($options, $unrecognized) = cli_get_params(
@@ -116,7 +110,7 @@ if (!$envstatus) {
// Test plugin dependencies.
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
cli_error(get_string('pluginschecktodo', 'admin'));
}
@@ -156,12 +150,6 @@ if ($interactive) {
}
if ($version > $CFG->version) {
// We purge all of MUC's caches here.
// Caches are disabled for upgrade by CACHE_DISABLE_ALL so we must set the first arg to true.
// This ensures a real config object is loaded and the stores will be purged.
// This is the only way we can purge custom caches such as memcache or APC.
// Note: all other calls to caches will still used the disabled API.
cache_helper::purge_all(true);
upgrade_core($version, true);
}
set_config('release', $release);
@@ -171,7 +159,7 @@ set_config('branch', $branch);
upgrade_noncore(true);
// log in as admin - we need doanything permission when applying defaults
\core\session\manager::set_user(get_admin());
session_set_user(get_admin());
// apply all default settings, just in case do it twice to fill all defaults
admin_apply_default_settings(NULL, false);
+51 -3
View File
@@ -24,9 +24,11 @@
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');
@@ -38,7 +40,8 @@ require_sesskey();
$return = new moodle_url('/admin/settings.php', array('section' => 'manageformats'));
$formatplugins = core_plugin_manager::instance()->get_plugins_of_type('format');
$allplugins = plugin_manager::instance()->get_plugins();
$formatplugins = $allplugins['format'];
$sortorder = array_flip(array_keys($formatplugins));
if (!isset($formatplugins[$formatname])) {
@@ -52,13 +55,11 @@ switch ($action) {
print_error('cannotdisableformat', 'error', $return);
}
set_config('disabled', 1, 'format_'. $formatname);
core_plugin_manager::reset_caches();
}
break;
case 'enable':
if (!$formatplugins[$formatname]->is_enabled()) {
unset_config('disabled', 'format_'. $formatname);
core_plugin_manager::reset_caches();
}
break;
case 'up':
@@ -79,5 +80,52 @@ switch ($action) {
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);
+16 -2
View File
@@ -53,7 +53,7 @@ require_once($CFG->libdir.'/clilib.php');
require_once($CFG->libdir.'/cronlib.php');
// extra safety
\core\session\manager::write_close();
session_get_instance()->write_close();
// check if execution allowed
if (!empty($CFG->cronclionly)) {
@@ -72,10 +72,24 @@ if (!empty($CFG->cronremotepassword)) {
}
// send mime type and encoding
@header('Content-Type: text/plain; charset=utf-8');
if (check_browser_version('MSIE')) {
//ugly IE hack to work around downloading instead of viewing
@header('Content-Type: text/html; charset=utf-8');
echo "<xmp>"; //<pre> is not good enough for us here
} else {
//send proper plaintext header
@header('Content-Type: text/plain; charset=utf-8');
}
// we do not want html markup in emulated CLI
@ini_set('html_errors', 'off');
// execute the cron
cron_run();
// finish the IE hack
if (check_browser_version('MSIE')) {
echo "</xmp>";
}
+41 -1
View File
@@ -83,6 +83,47 @@ 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;
}
@@ -93,7 +134,6 @@ if (empty($active_editors)) {
}
set_config('texteditors', implode(',', $active_editors));
core_plugin_manager::reset_caches();
if ($return) {
redirect ($returnurl);
+48 -17
View File
@@ -31,6 +31,7 @@ require_once($CFG->libdir.'/adminlib.php');
$action = required_param('action', PARAM_ALPHANUMEXT);
$enrol = required_param('enrol', PARAM_PLUGIN);
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$migrate = optional_param('migrate', 0, PARAM_BOOL);
$PAGE->set_url('/admin/enrol.php');
$PAGE->set_context(context_system::instance());
@@ -50,7 +51,6 @@ switch ($action) {
case 'disable':
unset($enabled[$enrol]);
set_config('enrol_plugins_enabled', implode(',', array_keys($enabled)));
core_plugin_manager::reset_caches();
$syscontext->mark_dirty(); // resets all enrol caches
break;
@@ -61,7 +61,6 @@ switch ($action) {
$enabled = array_keys($enabled);
$enabled[] = $enrol;
set_config('enrol_plugins_enabled', implode(',', $enabled));
core_plugin_manager::reset_caches();
$syscontext->mark_dirty(); // resets all enrol caches
break;
@@ -97,7 +96,7 @@ switch ($action) {
set_config('enrol_plugins_enabled', implode(',', $enabled));
break;
case 'migrate':
case 'uninstall':
if (get_string_manager()->string_exists('pluginname', 'enrol_'.$enrol)) {
$strplugin = get_string('pluginname', 'enrol_'.$enrol);
} else {
@@ -107,26 +106,58 @@ switch ($action) {
$PAGE->set_title($strplugin);
echo $OUTPUT->header();
// This may take a long time.
core_php_time_limit::raise();
if (!$confirm) {
echo $OUTPUT->heading(get_string('enrolments', 'enrol'));
// Disable plugin to prevent concurrent cron execution.
unset($enabled[$enrol]);
set_config('enrol_plugins_enabled', implode(',', array_keys($enabled)));
$deleteurl = new moodle_url('/admin/enrol.php', array('action'=>'uninstall', 'enrol'=>$enrol, 'sesskey'=>sesskey(), 'confirm'=>1, 'migrate'=>0));
$migrateurl = new moodle_url('/admin/enrol.php', array('action'=>'uninstall', 'enrol'=>$enrol, 'sesskey'=>sesskey(), 'confirm'=>1, 'migrate'=>1));
echo $OUTPUT->heading(get_string('uninstallmigrating', 'enrol', 'enrol_'.$enrol));
$migrate = new single_button($migrateurl, get_string('uninstallmigrate', 'enrol'));
$delete = new single_button($deleteurl, get_string('uninstalldelete', 'enrol'));
$cancel = new single_button($return, get_string('cancel'), 'get');
require_once("$CFG->dirroot/enrol/manual/locallib.php");
enrol_manual_migrate_plugin_enrolments($enrol);
$buttons = $OUTPUT->render($delete) . $OUTPUT->render($cancel);
if ($enrol !== 'manual') {
$buttons = $OUTPUT->render($migrate) . $buttons;
}
echo $OUTPUT->notification(get_string('success'), 'notifysuccess');
echo $OUTPUT->box_start('generalbox', 'notice');
echo html_writer::tag('p', markdown_to_html(get_string('uninstallconfirm', 'enrol', $strplugin)));
echo html_writer::tag('div', $buttons, array('class' => 'buttons'));
echo $OUTPUT->box_end();
if (!$return = core_plugin_manager::instance()->get_uninstall_url('enrol_'.$enrol, 'manage')) {
$return = new moodle_url('/admin/plugins.php');
echo $OUTPUT->footer();
exit;
} else {
// This may take a long time.
set_time_limit(0);
// Disable plugin to prevent concurrent cron execution.
unset($enabled[$enrol]);
set_config('enrol_plugins_enabled', implode(',', array_keys($enabled)));
if ($migrate) {
echo $OUTPUT->heading(get_string('uninstallmigrating', 'enrol', 'enrol_'.$enrol));
require_once("$CFG->dirroot/enrol/manual/locallib.php");
enrol_manual_migrate_plugin_enrolments($enrol);
echo $OUTPUT->notification(get_string('success'), 'notifysuccess');
}
// Delete everything!!
uninstall_plugin('enrol', $enrol);
$syscontext->mark_dirty(); // Resets all enrol caches.
$a = new stdClass();
$a->plugin = $strplugin;
$a->directory = "$CFG->dirroot/enrol/$enrol";
echo $OUTPUT->notification(get_string('uninstalldeletefiles', 'enrol', $a), 'notifysuccess');
echo $OUTPUT->continue_button($return);
echo $OUTPUT->footer();
exit;
}
echo $OUTPUT->continue_button($return);
echo $OUTPUT->footer();
exit;
}
+3 -3
View File
@@ -45,7 +45,7 @@ admin_externalpage_setup('environment', '', $extraurlparams);
// Handle the 'updatecomponent' action
if ($action == 'updatecomponent' && confirm_sesskey()) {
// Create component installer and execute it
if ($cd = new component_installer('https://download.moodle.org',
if ($cd = new component_installer('http://download.moodle.org',
'environment',
'environment.zip')) {
$status = $cd->install(); //returns COMPONENT_(ERROR | UPTODATE | INSTALLED)
@@ -53,7 +53,7 @@ if ($action == 'updatecomponent' && confirm_sesskey()) {
case COMPONENT_ERROR:
if ($cd->get_error() == 'remotedownloaderror') {
$a = new stdClass();
$a->url = 'https://download.moodle.org/environment/environment.zip';
$a->url = 'http://download.moodle.org/environment/environment.zip';
$a->dest = $CFG->dataroot . '/';
print_error($cd->get_error(), 'error', $PAGE->url, $a);
die();
@@ -102,7 +102,7 @@ if ($contents = load_environment_xml()) {
}
// Get the results of the environment check.
list($envstatus, $environment_results) = check_moodle_environment($version, ENV_SELECT_NEWER);
list($envstatus, $environment_results) = check_moodle_environment($version);
// Display the page.
$output = $PAGE->get_renderer('core', 'admin');
-552
View File
@@ -899,7 +899,6 @@
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.3.5" />
<VENDOR name="mysql" version="5.1.33" />
<VENDOR name="postgres" version="8.3" />
<VENDOR name="mssql" version="9.0" />
@@ -1006,557 +1005,6 @@
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
</MOODLE>
<MOODLE version="2.7" requires="2.2">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.5.31" />
<VENDOR name="mysql" version="5.5.31" />
<VENDOR name="postgres" version="9.1" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.4.4" level="required">
<RESTRICT function="restrict_php_version_7" message="unsupportedphpversion7" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="optional">
<FEEDBACK>
<ON_CHECK message="opensslrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlrpc" level="optional">
<FEEDBACK>
<ON_CHECK message="xmlrpcrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="optional">
<FEEDBACK>
<ON_CHECK message="intlrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="2.8" requires="2.2">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.5.31" />
<VENDOR name="mysql" version="5.5.31" />
<VENDOR name="postgres" version="9.1" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.4.4" level="required">
<RESTRICT function="restrict_php_version_7" message="unsupportedphpversion7" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="optional">
<FEEDBACK>
<ON_CHECK message="opensslrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlrpc" level="optional">
<FEEDBACK>
<ON_CHECK message="xmlrpcrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="optional">
<FEEDBACK>
<ON_CHECK message="intlrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="2.9" requires="2.2">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.5.31" />
<VENDOR name="mysql" version="5.5.31" />
<VENDOR name="postgres" version="9.1" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.4.4" level="required">
<RESTRICT function="restrict_php_version_7" message="unsupportedphpversion7" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="optional">
<FEEDBACK>
<ON_CHECK message="opensslrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlrpc" level="optional">
<FEEDBACK>
<ON_CHECK message="xmlrpcrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="optional">
<FEEDBACK>
<ON_CHECK message="intlrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.0" requires="2.2">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.5.31" />
<VENDOR name="mysql" version="5.5.31" />
<VENDOR name="postgres" version="9.1" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.4.4" level="required">
<RESTRICT function="restrict_php_version_7" message="unsupportedphpversion7" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="optional">
<FEEDBACK>
<ON_CHECK message="opensslrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlrpc" level="optional">
<FEEDBACK>
<ON_CHECK message="xmlrpcrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="optional">
<FEEDBACK>
<ON_CHECK message="intlrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+201 -167
View File
@@ -1,225 +1,254 @@
<?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/>.
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.org //
// //
// Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com //
// //
// This program 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 2 of the License, or //
// (at your option) any later version. //
// //
// This program 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: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
/**
* Filter management page.
* Processes actions from the admin_setting_managefilters object (defined in
* adminlib.php).
*
* @package core
* @copyright 1999 onwards Martin Dougiamas http://dougiamas.com
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package administration
*//** */
require_once(dirname(__FILE__) . '/../config.php');
require_once($CFG->libdir . '/adminlib.php');
require_once(dirname(__FILE__) . '/../config.php');
require_once($CFG->libdir . '/adminlib.php');
$action = optional_param('action', '', PARAM_ALPHA);
$filterpath = optional_param('filterpath', '', PARAM_PLUGIN);
$action = optional_param('action', '', PARAM_ALPHANUMEXT);
$filterpath = optional_param('filterpath', '', PARAM_PATH);
require_login();
$systemcontext = context_system::instance();
require_capability('moodle/site:config', $systemcontext);
require_login();
$systemcontext = context_system::instance();
require_capability('moodle/site:config', $systemcontext);
admin_externalpage_setup('managefilters');
$returnurl = "$CFG->wwwroot/$CFG->admin/filters.php";
admin_externalpage_setup('managefilters');
// Clean up bogus filter states first.
$plugininfos = core_plugin_manager::instance()->get_plugins_of_type('filter');
$filters = array();
$states = filter_get_global_states();
foreach ($states as $state) {
if (!isset($plugininfos[$state->filter]) and !get_config('filter_'.$state->filter, 'version')) {
// Purge messy leftovers after incorrectly uninstalled plugins and unfinished installs.
$DB->delete_records('filter_active', array('filter' => $state->filter));
$DB->delete_records('filter_config', array('filter' => $state->filter));
error_log('Deleted bogus "filter_'.$state->filter.'" states and config data.');
} else {
$filters[$state->filter] = $state;
$filters = filter_get_global_states();
// In case any new filters have been installed, but not put in the table yet.
$fitlernames = filter_get_all_installed();
$newfilters = $fitlernames;
foreach ($filters as $filter => $notused) {
unset($newfilters[$filter]);
}
}
// Add properly installed and upgraded filters to the global states table.
foreach ($plugininfos as $filter => $info) {
if (isset($filters[$filter])) {
continue;
}
/** @var \core\plugininfo\base $info */
if ($info->is_installed_and_upgraded()) {
filter_set_global_state($filter, TEXTFILTER_DISABLED);
$states = filter_get_global_states();
foreach ($states as $state) {
if ($state->filter === $filter) {
$filters[$filter] = $state;
break;
}
/// Process actions ============================================================
if ($action) {
if (!isset($filters[$filterpath]) && !isset($newfilters[$filterpath])) {
throw new moodle_exception('filternotinstalled', 'error', $returnurl, $filterpath);
}
if (!confirm_sesskey()) {
redirect($returnurl);
}
}
}
if ($action) {
require_sesskey();
}
// Process actions.
switch ($action) {
switch ($action) {
case 'setstate':
if (isset($filters[$filterpath]) and $newstate = optional_param('newstate', '', PARAM_INT)) {
if ($newstate = optional_param('newstate', '', PARAM_INT)) {
filter_set_global_state($filterpath, $newstate);
if ($newstate == TEXTFILTER_DISABLED) {
filter_set_applies_to_strings($filterpath, false);
}
unset($newfilters[$filterpath]);
}
break;
case 'setapplyto':
if (isset($filters[$filterpath])) {
$applytostrings = optional_param('stringstoo', false, PARAM_BOOL);
filter_set_applies_to_strings($filterpath, $applytostrings);
}
$applytostrings = optional_param('stringstoo', false, PARAM_BOOL);
filter_set_applies_to_strings($filterpath, $applytostrings);
break;
case 'down':
if (isset($filters[$filterpath])) {
filter_set_global_state($filterpath, $filters[$filterpath]->active, 1);
$oldpos = $filters[$filterpath]->sortorder;
if ($oldpos <= count($filters)) {
filter_set_global_state($filterpath, $filters[$filterpath]->active, $oldpos + 1);
}
}
break;
case 'up':
if (isset($filters[$filterpath])) {
$oldpos = $filters[$filterpath]->sortorder;
filter_set_global_state($filterpath, $filters[$filterpath]->active, -1);
if ($oldpos >= 1) {
filter_set_global_state($filterpath, $filters[$filterpath]->active, $oldpos - 1);
}
}
break;
}
// Reset caches and return.
if ($action) {
reset_text_filters_cache();
core_plugin_manager::reset_caches();
redirect(new moodle_url('/admin/filters.php'));
}
case 'delete':
if (!empty($filternames[$filterpath])) {
$filtername = $filternames[$filterpath];
} else {
$filtername = $filterpath;
}
// Print the page heading.
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('filtersettings', 'admin'));
if (substr($filterpath, 0, 4) == 'mod/') {
$mod = basename($filterpath);
$a = new stdClass;
$a->filter = $filtername;
$a->module = get_string('modulename', $mod);
print_error('cannotdeletemodfilter', 'admin', $returnurl, $a);
}
$states = filter_get_global_states();
$stringfilters = filter_get_string_filters();
// If not yet confirmed, display a confirmation message.
if (!optional_param('confirm', '', PARAM_BOOL)) {
$title = get_string('deletefilterareyousure', 'admin', $filtername);
echo $OUTPUT->header();
echo $OUTPUT->heading($title);
$table = new html_table();
$table->head = array(get_string('filter'), get_string('isactive', 'filters'),
get_string('order'), get_string('applyto', 'filters'), get_string('settings'), get_string('uninstallplugin', 'core_admin'));
$table->colclasses = array ('leftalign', 'leftalign', 'centeralign', 'leftalign', 'leftalign', 'leftalign');
$table->attributes['class'] = 'admintable generaltable';
$table->id = 'filterssetting';
$table->data = array();
$linkcontinue = new moodle_url($returnurl, array('action' => 'delete', 'filterpath' => $filterpath, 'confirm' => 1));
$formcancel = new single_button(new moodle_url($returnurl), get_string('no'), 'get');
echo $OUTPUT->confirm(get_string('deletefilterareyousuremessage', 'admin', $filtername), $linkcontinue, $formcancel);
echo $OUTPUT->footer();
exit;
}
$lastactive = null;
foreach ($states as $state) {
if ($state->active != TEXTFILTER_DISABLED) {
$lastactive = $state->filter;
// Do the deletion.
$title = get_string('deletingfilter', 'admin', $filtername);
echo $OUTPUT->header();
echo $OUTPUT->heading($title);
// Delete all data for this plugin.
filter_delete_all_for_filter($filterpath);
$a = new stdClass;
$a->filter = $filtername;
$a->directory = $filterpath;
echo $OUTPUT->box(get_string('deletefilterfiles', 'admin', $a), 'generalbox', 'notice');
echo $OUTPUT->continue_button($returnurl);
echo $OUTPUT->footer();
exit;
}
}
// Iterate through filters adding to display table.
$firstrow = true;
foreach ($states as $state) {
$filter = $state->filter;
if (!isset($plugininfos[$filter])) {
continue;
// Add any missing filters to the DB table.
foreach ($newfilters as $filter => $notused) {
filter_set_global_state($filter, TEXTFILTER_DISABLED);
}
$plugininfo = $plugininfos[$filter];
$applytostrings = isset($stringfilters[$filter]) && $state->active != TEXTFILTER_DISABLED;
$row = get_table_row($plugininfo, $state, $firstrow, $filter == $lastactive, $applytostrings);
$table->data[] = $row;
if ($state->active == TEXTFILTER_DISABLED) {
// Reset caches and return
if ($action) {
reset_text_filters_cache();
redirect($returnurl);
}
/// End of process actions =====================================================
/// Print the page heading.
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('filtersettings', 'admin'));
$activechoices = array(
TEXTFILTER_DISABLED => get_string('disabled', 'filters'),
TEXTFILTER_OFF => get_string('offbutavailable', 'filters'),
TEXTFILTER_ON => get_string('on', 'filters'),
);
$applytochoices = array(
0 => get_string('content', 'filters'),
1 => get_string('contentandheadings', 'filters'),
);
$filters = filter_get_global_states();
// In case any new filters have been installed, but not put in the table yet.
$filternames = filter_get_all_installed();
$newfilters = $filternames;
foreach ($filters as $filter => $notused) {
unset($newfilters[$filter]);
}
$stringfilters = filter_get_string_filters();
$table = new html_table();
$table->head = array(get_string('filter'), get_string('isactive', 'filters'),
get_string('order'), get_string('applyto', 'filters'), get_string('settings'), get_string('delete'));
$table->align = array('left', 'left', 'center', 'left', 'left');
$table->width = '100%';
$table->data = array();
$lastactive = null;
foreach ($filters as $filter => $filterinfo) {
if ($filterinfo->active != TEXTFILTER_DISABLED) {
$lastactive = $filter;
}
}
// iterate through filters adding to display table
$firstrow = true;
foreach ($filters as $filter => $filterinfo) {
$applytostrings = isset($stringfilters[$filter]) && $filterinfo->active != TEXTFILTER_DISABLED;
$row = get_table_row($filterinfo, $firstrow, $filter == $lastactive, $applytostrings);
$table->data[] = $row;
if ($filterinfo->active == TEXTFILTER_DISABLED) {
$table->rowclasses[] = 'dimmed_text';
} else {
$table->rowclasses[] = '';
}
$firstrow = false;
}
foreach ($newfilters as $filter => $filtername) {
$filterinfo = new stdClass;
$filterinfo->filter = $filter;
$filterinfo->active = TEXTFILTER_DISABLED;
$row = get_table_row($filterinfo, false, false, false);
$table->data[] = $row;
$table->rowclasses[] = 'dimmed_text';
} else {
$table->rowclasses[] = '';
}
$firstrow = false;
}
echo html_writer::table($table);
echo '<p class="filtersettingnote">' . get_string('filterallwarning', 'filters') . '</p>';
echo $OUTPUT->footer();
die;
echo html_writer::table($table);
echo '<p class="filtersettingnote">' . get_string('filterallwarning', 'filters') . '</p>';
echo $OUTPUT->footer();
/// Display helper functions ===================================================
/**
* Return action URL.
*
* @param string $filterpath
* @param string $action
* @return moodle_url
*/
function filters_action_url($filterpath, $action) {
if ($action === 'delete') {
return core_plugin_manager::instance()->get_uninstall_url('filter_'.$filterpath, 'manage');
}
return new moodle_url('/admin/filters.php', array('sesskey'=>sesskey(), 'filterpath'=>$filterpath, 'action'=>$action));
}
/**
* Construct table record.
*
* @param \core\plugininfo\filter $plugininfo
* @param stdClass $state
* @param bool $isfirstrow
* @param bool $islastactive
* @param bool $applytostrings
* @return array data
*/
function get_table_row(\core\plugininfo\filter $plugininfo, $state, $isfirstrow, $islastactive, $applytostrings) {
global $OUTPUT;
function get_table_row($filterinfo, $isfirstrow, $islastactive, $applytostrings) {
global $CFG, $OUTPUT, $activechoices, $applytochoices, $filternames; //TODO: this is sloppy coding style!!
$row = array();
$filter = $state->filter;
$active = $plugininfo->is_installed_and_upgraded();
$filter = $filterinfo->filter;
static $activechoices;
static $applytochoices;
if (!isset($activechoices)) {
$activechoices = array(
TEXTFILTER_DISABLED => get_string('disabled', 'core_filters'),
TEXTFILTER_OFF => get_string('offbutavailable', 'core_filters'),
TEXTFILTER_ON => get_string('on', 'core_filters'),
);
$applytochoices = array(
0 => get_string('content', 'core_filters'),
1 => get_string('contentandheadings', 'core_filters'),
);
// Filter name
if (!empty($filternames[$filter])) {
$row[] = $filternames[$filter];
} else {
$row[] = '<span class="error">' . get_string('filemissing', '', $filter) . '</span>';
}
// Filter name.
$displayname = $plugininfo->displayname;
if (!$plugininfo->rootdir) {
$displayname = '<span class="error">' . $displayname . ' - ' . get_string('status_missing', 'core_plugin') . '</span>';
} else if (!$active) {
$displayname = '<span class="error">' . $displayname . ' - ' . get_string('error') . '</span>';
}
$row[] = $displayname;
// Disable/off/on.
$select = new single_select(filters_action_url($filter, 'setstate'), 'newstate', $activechoices, $state->active, null, 'active' . $filter);
// Disable/off/on
$select = new single_select(filters_action_url($filter, 'setstate'), 'newstate', $activechoices, $filterinfo->active, null, 'active' . basename($filter));
$select->set_label(get_string('isactive', 'filters'), array('class' => 'accesshide'));
$row[] = $OUTPUT->render($select);
// Re-order.
// Re-order
$updown = '';
$spacer = '<img src="' . $OUTPUT->pix_url('spacer') . '" class="iconsmall" alt="" />';
if ($state->active != TEXTFILTER_DISABLED) {
if ($filterinfo->active != TEXTFILTER_DISABLED) {
if (!$isfirstrow) {
$updown .= $OUTPUT->action_icon(filters_action_url($filter, 'up'), new pix_icon('t/up', get_string('up'), '', array('class' => 'iconsmall')));
} else {
@@ -234,20 +263,25 @@ function get_table_row(\core\plugininfo\filter $plugininfo, $state, $isfirstrow,
$row[] = $updown;
// Apply to strings.
$select = new single_select(filters_action_url($filter, 'setapplyto'), 'stringstoo', $applytochoices, $applytostrings, null, 'applyto' . $filter);
$select = new single_select(filters_action_url($filter, 'setapplyto'), 'stringstoo', $applytochoices, $applytostrings, null, 'applyto' . basename($filter));
$select->set_label(get_string('applyto', 'filters'), array('class' => 'accesshide'));
$select->disabled = ($state->active == TEXTFILTER_DISABLED);
$select->disabled = $filterinfo->active == TEXTFILTER_DISABLED;
$row[] = $OUTPUT->render($select);
// Settings link, if required.
if ($active and filter_has_global_settings($filter)) {
$row[] = html_writer::link(new moodle_url('/admin/settings.php', array('section'=>'filtersetting'.$filter)), get_string('settings'));
// Settings link, if required
if (filter_has_global_settings($filter)) {
$row[] = '<a href="' . $CFG->wwwroot . '/' . $CFG->admin . '/settings.php?section=filtersetting' .
str_replace('/', '',$filter) . '">' . get_string('settings') . '</a>';
} else {
$row[] = '';
}
// Uninstall.
$row[] = html_writer::link(filters_action_url($filter, 'delete'), get_string('uninstallplugin', 'core_admin'));
// Delete
if (substr($filter, 0, 4) != 'mod/') {
$row[] = '<a href="' . filters_action_url($filter, 'delete') . '">' . get_string('delete') . '</a>';
} else {
$row[] = '';
}
return $row;
}
+150
View File
@@ -0,0 +1,150 @@
<?php
/** This expects the output from a command like
* clamscan -r --infected --no-summary <files> 2>&1 | php -d error_log=/path/to/log thisfile.php
* also it's important that the output of clamscan prints the FULL PATH to each infected file, so use absolute paths for area to scan
* also it should be run as root, or whatever the webserver runs as so that it has the right permissions in the quarantine dir etc.
* php -d error_log=/path/to/log thisfile.php will override the default error log for php cli, which is stderr, so if you want this script to just print stuff out, use php thisfile.php instead.
*/
die('TODO: MDL-19380');
$fd = fopen('php://stdin','r');
if (!$fd) {
exit();
}
require_once(dirname(dirname(__FILE__)).'/config.php');
require_once($CFG->libdir.'/eventslib.php');
require_once($CFG->dirroot.'/lib/uploadlib.php'); // contains virus handling stuff.
$site = get_site();
while(!feof($fd)) {
$entry = fgets($fd);
if (strlen(trim($entry)) == 0) {
continue;
}
if (!$file = validate_line($entry)) {
continue;
}
$bits = explode('/',$file);
$a->filename = $bits[count($bits)-1];
if (!$log = $DB->get_record("log", array("module"=>"upload", "info"=>$file, "action"=>"upload"))) {
$a->action = clam_handle_infected_file($file,0,false);
clam_replace_infected_file($file);
notify_admins_unknown($file,$a);
continue;
}
$action = clam_handle_infected_file($file,$log->userid,true);
clam_replace_infected_file($file);
list($ctxselect, $ctxjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
$sql = "SELECT c.id, c.fullname $ctxselect FROM {course} c $ctxjoin WHERE c.id = :courseid";
$course = $DB->get_record_sql($sql, array('courseid' => $log->course));
context_instance_preload($course);
$user = $DB->get_record("user", array("id"=>$log->userid));
$subject = get_string('virusfoundsubject','moodle',format_string($site->fullname));
$a->date = userdate($log->time);
$a->action = $action;
$a->course = format_string($course->fullname, true, array('context' => context_course::instance($course->id)));
$a->user = fullname($user);
notify_user($user,$subject,$a);
notify_admins($user,$subject,$a);
}
fclose($fd);
function notify_user($user,$subject,$a) {
if (!$user) {
return false;
}
$body = get_string('virusfoundlater','moodle',$a);
$eventdata = new stdClass();
$eventdata->modulename = 'moodle';
$eventdata->userfrom = get_admin();
$eventdata->userto = $user;
$eventdata->subject = $subject;
$eventdata->fullmessage = $body;
$eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = '';
$eventdata->smallmessage = '';
message_send($eventdata);
}
function notify_admins($user,$subject,$a) {
$admins = get_admins();
$body = get_string('virusfoundlateradmin','moodle',$a);
foreach ($admins as $admin) {
$eventdata = new stdClass();
$eventdata->modulename = 'moodle';
$eventdata->userfrom = get_admin();
$eventdata->userto = $admin;
$eventdata->subject = $subject;
$eventdata->fullmessage = $body;
$eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = '';
$eventdata->smallmessage = '';
message_send($eventdata);
}
}
function notify_admins_unknown($file,$a) {
global $site;
$admins = get_admins();
$subject = get_string('virusfoundsubject','moodle',format_string($site->fullname));
$body = get_string('virusfoundlateradminnolog','moodle',$a);
foreach ($admins as $admin) {
$eventdata = new stdClass();
$eventdata->modulename = 'moodle';
$eventdata->userfrom = get_admin();
$eventdata->userto = $admin;
$eventdata->subject = $subject;
$eventdata->fullmessage = $body;
$eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = '';
$eventdata->smallmessage = '';
message_send($eventdata);
}
}
function validate_line($line) {
global $CFG;
if (strpos($line,"FOUND") === false) {
return false;
}
$index = strpos($line,":");
$file = substr($line,0,$index);
if (!(strpos($file,$CFG->dataroot) === false)) {
if (!file_exists($file)) {
return false;
}
}
else {
if ($file{0} == "/") {
$file = $CFG->dataroot.$file;
}
else {
$file = $CFG->dataroot."/".$file;
}
if (!file_exists($file)) {
return false;
}
}
// clean up
$file = preg_replace('/\.\//','/',$file);
$file = preg_replace('/\/\//','/',$file);
return $file;
}
+98 -218
View File
@@ -30,10 +30,10 @@ if (!file_exists('../config.php')) {
}
// Check that PHP is of a sufficient version as soon as possible
if (version_compare(phpversion(), '5.4.4') < 0) {
if (version_compare(phpversion(), '5.3.2') < 0) {
$phpversion = phpversion();
// do NOT localise - lang strings would not work here and we CAN NOT move it to later place
echo "Moodle 2.7 or later requires at least PHP 5.4.4 (currently using version $phpversion).<br />";
echo "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).<br />";
echo "Please upgrade your server software or install older Moodle version.";
die();
}
@@ -45,48 +45,12 @@ if (!function_exists('iconv')) {
die();
}
// Make sure php5-json is available.
if (!function_exists('json_encode') || !function_exists('json_decode')) {
// This also shouldn't happen.
echo 'Moodle requires the json PHP extension. Please install or enable the json extension.';
die();
}
define('NO_OUTPUT_BUFFERING', true);
if ((isset($_GET['cache']) and $_GET['cache'] === '0')
or (isset($_POST['cache']) and $_POST['cache'] === '0')
or (!isset($_POST['cache']) and !isset($_GET['cache']) and empty($_GET['sesskey']) and empty($_POST['sesskey']))) {
// Prevent caching at all cost when visiting this page directly,
// we redirect to self once we known no upgrades are necessary.
// Note: $_GET and $_POST are used here intentionally because our param cleaning is not loaded yet.
// Note2: the sesskey is present in all block editing hacks, we can not redirect there, so enable caching.
define('CACHE_DISABLE_ALL', true);
// Force OPcache reset if used, we do not want any stale caches
// when detecting if upgrade necessary or when running upgrade.
if (function_exists('opcache_reset')) {
opcache_reset();
}
$cache = 0;
} else {
$cache = 1;
}
require('../config.php');
// Invalidate the cache of version.php in any circumstances to help core_component
// detecting if the version has changed and component cache should be reset.
if (function_exists('opcache_invalidate')) {
opcache_invalidate($CFG->dirroot . '/version.php', true);
}
// Make sure the component cache gets rebuilt if necessary, any method that
// indirectly calls the protected init() method is good here.
core_component::get_core_subsystems();
require_once($CFG->libdir.'/adminlib.php'); // various admin-only functions
require_once($CFG->libdir.'/upgradelib.php'); // general upgrade/install related functions
require_once($CFG->libdir.'/pluginlib.php'); // available updates notifications
$id = optional_param('id', '', PARAM_TEXT);
$confirmupgrade = optional_param('confirmupgrade', 0, PARAM_BOOL);
@@ -95,37 +59,22 @@ $confirmplugins = optional_param('confirmplugincheck', 0, PARAM_BOOL);
$showallplugins = optional_param('showallplugins', 0, PARAM_BOOL);
$agreelicense = optional_param('agreelicense', 0, PARAM_BOOL);
$fetchupdates = optional_param('fetchupdates', 0, PARAM_BOOL);
$newaddonreq = optional_param('installaddonrequest', null, PARAM_RAW);
// Set up PAGE.
$url = new moodle_url('/admin/index.php');
$url->param('cache', $cache);
$PAGE->set_url($url);
unset($url);
// Are we returning from an add-on installation request at moodle.org/plugins?
if ($newaddonreq and !$cache and empty($CFG->disableonclickaddoninstall)) {
$target = new moodle_url('/admin/tool/installaddon/index.php', array(
'installaddonrequest' => $newaddonreq,
'confirm' => 0));
if (!isloggedin() or isguestuser()) {
// Login and go the the add-on tool page.
$SESSION->wantsurl = $target->out();
redirect(get_login_url());
}
redirect($target);
}
// Check some PHP server settings
$PAGE->set_url('/admin/index.php');
$PAGE->set_pagelayout('admin'); // Set a default pagelayout
$documentationlink = '<a href="http://docs.moodle.org/en/Installation">Installation docs</a>';
// Check some PHP server settings
if (ini_get_bool('session.auto_start')) {
print_error('phpvaroff', 'debug', '', (object)array('name'=>'session.auto_start', 'link'=>$documentationlink));
}
if (ini_get_bool('magic_quotes_runtime')) {
print_error('phpvaroff', 'debug', '', (object)array('name'=>'magic_quotes_runtime', 'link'=>$documentationlink));
}
if (!ini_get_bool('file_uploads')) {
print_error('phpvaron', 'debug', '', (object)array('name'=>'file_uploads', 'link'=>$documentationlink));
}
@@ -165,7 +114,7 @@ if (!core_tables_exist()) {
$strinstallation = get_string('installation', 'install');
// remove current session content completely
\core\session\manager::terminate_current();
session_get_instance()->terminate_current();
if (empty($agreelicense)) {
$strlicense = get_string('license');
@@ -175,7 +124,6 @@ if (!core_tables_exist()) {
$PAGE->set_heading($strinstallation);
$PAGE->set_cacheable(false);
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
echo $output->install_licence_page();
die();
@@ -190,7 +138,6 @@ if (!core_tables_exist()) {
$PAGE->set_heading($strinstallation . ' - Moodle ' . $CFG->target_release);
$PAGE->set_cacheable(false);
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
echo $output->install_environment_page($maturity, $envstatus, $environment_results, $release);
die();
@@ -198,7 +145,7 @@ if (!core_tables_exist()) {
// check plugin dependencies
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
$PAGE->navbar->add(get_string('pluginscheck', 'admin'));
$PAGE->set_title($strinstallation);
$PAGE->set_heading($strinstallation . ' - Moodle ' . $CFG->target_release);
@@ -237,13 +184,6 @@ if (!core_tables_exist()) {
// Check version of Moodle code on disk compared with database
// and upgrade if possible.
if (!$cache) {
// Do not try to do anything fancy in non-cached mode,
// this prevents themes from fetching data from non-existent tables.
$PAGE->set_pagelayout('maintenance');
$PAGE->set_popup_notification_allowed(false);
}
$stradministration = get_string('administration');
$PAGE->set_context(context_system::instance());
@@ -251,51 +191,33 @@ if (empty($CFG->version)) {
print_error('missingconfigversion', 'debug');
}
// Detect config cache inconsistency, this happens when you switch branches on dev servers.
if ($CFG->version != $DB->get_field('config', 'value', array('name'=>'version'))) {
purge_all_caches();
redirect(new moodle_url('/admin/index.php'), 'Config cache inconsistency detected, resetting caches...');
}
if (!$cache and $version > $CFG->version) { // upgrade
// Warning about upgrading a test site.
$testsite = false;
if (defined('BEHAT_SITE_RUNNING')) {
$testsite = 'behat';
}
// We purge all of MUC's caches here.
// Caches are disabled for upgrade by CACHE_DISABLE_ALL so we must set the first arg to true.
// This ensures a real config object is loaded and the stores will be purged.
// This is the only way we can purge custom caches such as memcache or APC.
// Note: all other calls to caches will still used the disabled API.
cache_helper::purge_all(true);
// We then purge the regular caches.
if ($version > $CFG->version) { // upgrade
purge_all_caches();
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
$PAGE->set_pagelayout('maintenance');
$PAGE->set_popup_notification_allowed(false);
if (upgrade_stale_php_files_present()) {
$PAGE->set_title($stradministration);
$PAGE->set_cacheable(false);
$output = $PAGE->get_renderer('core', 'admin');
echo $output->upgrade_stale_php_files_page();
die();
}
if (empty($confirmupgrade)) {
$a = new stdClass();
$a->oldversion = "$CFG->release (".sprintf('%.2f', $CFG->version).")";
$a->newversion = "$release (".sprintf('%.2f', $version).")";
$a->oldversion = "$CFG->release ($CFG->version)";
$a->newversion = "$release ($version)";
$strdatabasechecking = get_string('databasechecking', '', $a);
$PAGE->set_title($stradministration);
$PAGE->set_heading($strdatabasechecking);
$PAGE->set_cacheable(false);
echo $output->upgrade_confirm_page($a->newversion, $maturity, $testsite);
$output = $PAGE->get_renderer('core', 'admin');
echo $output->upgrade_confirm_page($a->newversion, $maturity);
die();
} else if (empty($confirmrelease)){
@@ -308,6 +230,7 @@ if (!$cache and $version > $CFG->version) { // upgrade
$PAGE->set_heading($strcurrentrelease);
$PAGE->set_cacheable(false);
$output = $PAGE->get_renderer('core', 'admin');
echo $output->upgrade_environment_page($release, $envstatus, $environment_results);
die();
@@ -319,45 +242,45 @@ if (!$cache and $version > $CFG->version) { // upgrade
$PAGE->set_heading($strplugincheck);
$PAGE->set_cacheable(false);
$reloadurl = new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'confirmrelease' => 1, 'cache' => 0));
$reloadurl = new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'confirmrelease' => 1));
if ($fetchupdates) {
// No sesskey support guaranteed here, because sessions might not work yet.
$updateschecker = \core\update\checker::instance();
if ($updateschecker->enabled()) {
$updateschecker->fetch();
}
redirect($reloadurl);
}
$deployer = \core\update\deployer::instance();
if ($deployer->enabled()) {
$deployer->initialize($reloadurl, $reloadurl);
$deploydata = $deployer->submitted_data();
if (!empty($deploydata)) {
// No sesskey support guaranteed here, because sessions might not work yet.
echo $output->upgrade_plugin_confirm_deploy_page($deployer, $deploydata);
die();
}
}
echo $output->upgrade_plugin_check_page(core_plugin_manager::instance(), \core\update\checker::instance(),
$version, $showallplugins, $reloadurl,
new moodle_url('/admin/index.php', array('confirmupgrade'=>1, 'confirmrelease'=>1, 'confirmplugincheck'=>1, 'cache'=>0)));
die();
} else {
// Always verify plugin dependencies!
// check plugin dependencies first
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
$reloadurl = new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'confirmrelease' => 1, 'cache' => 0));
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
$output = $PAGE->get_renderer('core', 'admin');
echo $output->unsatisfied_dependencies_page($version, $failed, $reloadurl);
die();
}
unset($failed);
// Launch main upgrade.
if ($fetchupdates) {
// no sesskey support guaranteed here
if (empty($CFG->disableupdatenotifications)) {
available_update_checker::instance()->fetch();
}
redirect($reloadurl);
}
$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)));
die();
} else {
// Launch main upgrade
upgrade_core($version, true);
}
} else if ($version < $CFG->version) {
@@ -366,70 +289,62 @@ if (!$cache and $version > $CFG->version) { // upgrade
}
// Updated human-readable release version if necessary
if (!$cache and $release <> $CFG->release) { // Update the release version
if ($release <> $CFG->release) { // Update the release version
set_config('release', $release);
}
if (!$cache and $branch <> $CFG->branch) { // Update the branch
if ($branch <> $CFG->branch) { // Update the branch
set_config('branch', $branch);
}
if (!$cache and moodle_needs_upgrading()) {
if (moodle_needs_upgrading()) {
if (!$PAGE->headerprinted) {
// means core upgrade or installation was not already done
if (!$confirmplugins) {
$strplugincheck = get_string('plugincheck');
$PAGE->set_pagelayout('maintenance');
$PAGE->set_popup_notification_allowed(false);
$PAGE->navbar->add($strplugincheck);
$PAGE->set_title($strplugincheck);
$PAGE->set_heading($strplugincheck);
$PAGE->set_cacheable(false);
if ($fetchupdates) {
require_sesskey();
$updateschecker = \core\update\checker::instance();
if ($updateschecker->enabled()) {
$updateschecker->fetch();
}
// no sesskey support guaranteed here
available_update_checker::instance()->fetch();
redirect($PAGE->url);
}
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
$deployer = \core\update\deployer::instance();
$deployer = available_update_deployer::instance();
if ($deployer->enabled()) {
$deployer->initialize($PAGE->url, $PAGE->url);
$deploydata = $deployer->submitted_data();
if (!empty($deploydata)) {
require_sesskey();
echo $output->upgrade_plugin_confirm_deploy_page($deployer, $deploydata);
die();
}
}
// Show plugins info.
echo $output->upgrade_plugin_check_page(core_plugin_manager::instance(), \core\update\checker::instance(),
// check plugin dependencies first
$failed = array();
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
echo $output->unsatisfied_dependencies_page($version, $failed, $PAGE->url);
die();
}
unset($failed);
// dependencies check passed, let's rock!
echo $output->upgrade_plugin_check_page(plugin_manager::instance(), available_update_checker::instance(),
$version, $showallplugins,
new moodle_url($PAGE->url),
new moodle_url('/admin/index.php', array('confirmplugincheck'=>1, 'cache'=>0)));
new moodle_url('/admin/index.php', array('confirmplugincheck'=>1)));
die();
}
// Make sure plugin dependencies are always checked.
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
$reloadurl = new moodle_url('/admin/index.php', array('cache' => 0));
echo $output->unsatisfied_dependencies_page($version, $failed, $reloadurl);
die();
}
unset($failed);
}
// install/upgrade all plugins and other parts
upgrade_noncore(true);
}
@@ -489,30 +404,8 @@ if (during_initial_install()) {
upgrade_finished('upgradesettings.php');
}
if (has_capability('moodle/site:config', context_system::instance())) {
if ($fetchupdates) {
require_sesskey();
$updateschecker = \core\update\checker::instance();
if ($updateschecker->enabled()) {
$updateschecker->fetch();
}
redirect(new moodle_url('/admin/index.php', array('cache' => 0)));
}
}
// Now we can be sure everything was upgraded and caches work fine,
// redirect if necessary to make sure caching is enabled.
if (!$cache) {
redirect(new moodle_url('/admin/index.php', array('cache' => 1)));
}
// Check for valid admin user - no guest autologin
require_login(0, false);
if (isguestuser()) {
// Login as real user!
$SESSION->wantsurl = (string)new moodle_url('/admin/index.php');
redirect(get_login_url());
}
$context = context_system::instance();
require_capability('moodle/site:config', $context);
@@ -541,68 +434,55 @@ if (any_new_admin_settings($adminroot)){
redirect('upgradesettings.php');
}
// Return to original page that started the plugin uninstallation if necessary.
if (isset($SESSION->pluginuninstallreturn)) {
$return = $SESSION->pluginuninstallreturn;
unset($SESSION->pluginuninstallreturn);
if ($return) {
redirect($return);
}
}
// Everything should now be set up, and the user is an admin
// Print default admin page with notifications.
$errorsdisplayed = defined('WARN_DISPLAY_ERRORS_ENABLED');
// We make the assumption that at least one schedule task should run once per day.
$lastcron = $DB->get_field_sql('SELECT MAX(lastruntime) FROM {task_scheduled}');
$lastcron = $DB->get_field_sql('SELECT MAX(lastcron) FROM {modules}');
$cronoverdue = ($lastcron < time() - 3600 * 24);
$dbproblems = $DB->diagnose();
$maintenancemode = !empty($CFG->maintenance_enabled);
// Available updates for Moodle core.
$updateschecker = \core\update\checker::instance();
// Available updates for Moodle core
$updateschecker = available_update_checker::instance();
$availableupdates = array();
$availableupdatesfetch = null;
$availableupdates['core'] = $updateschecker->get_update_info('core',
array('minmaturity' => $CFG->updateminmaturity, 'notifybuilds' => $CFG->updatenotifybuilds));
if (empty($CFG->disableupdatenotifications)) {
// Only compute the update information when it is going to be displayed to the user.
$availableupdates['core'] = $updateschecker->get_update_info('core',
array('minmaturity' => $CFG->updateminmaturity, 'notifybuilds' => $CFG->updatenotifybuilds));
// Available updates for contributed plugins
$pluginman = core_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;
// 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();
}
// 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€');
//check if the site is registered on Moodle.org
$registered = $DB->count_records('registration_hubs', array('huburl' => HUB_MOODLEORGHUBURL, 'confirmed' => 1));
// Check if there are any cache warnings.
$cachewarnings = cache_helper::warnings();
admin_externalpage_setup('adminnotifications');
/* @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
if ($fetchupdates) {
require_sesskey();
$updateschecker->fetch();
redirect($PAGE->url);
}
echo $output->admin_notifications_page($maturity, $insecuredataroot, $errorsdisplayed, $cronoverdue, $dbproblems,
$maintenancemode, $availableupdates, $availableupdatesfetch, $buggyiconvnomb,
$registered, $cachewarnings);
$output = $PAGE->get_renderer('core', 'admin');
echo $output->admin_notifications_page($maturity, $insecuredataroot, $errorsdisplayed,
$cronoverdue, $dbproblems, $maintenancemode, $availableupdates, $availableupdatesfetch, $buggyiconvnomb,
$registered);
+12 -1
View File
@@ -18,7 +18,7 @@
/**
* This file contains functions used by the admin pages
*
* @since Moodle 2.1
* @since 2.1
* @package admin
* @copyright 2011 Andrew Davis
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@@ -35,5 +35,16 @@ function admin_page_type_list($pagetype, $parentcontext, $currentcontext) {
'admin-*' => get_string('page-admin-x', 'pagetype'),
$pagetype => get_string('page-admin-current', 'pagetype')
);
// Add the missing * (any page) option for them. MDL-30340
// TODO: These pages are really 'pagetype-varying' - MDL-30564 -
// and some day we should stop behaving that way, so proper pagetypes
// can be specified for it (like course-category-* or so).
// Luckly... the option we are introducing '*' is independent
// of that varying behavior, so will work.
if ($pagetype == 'admin-course-category') {
$array += array(
'*' => get_string('page-x', 'pagetype')
);
}
return $array;
}
+42 -10
View File
@@ -33,21 +33,55 @@ require_once($CFG->libdir.'/tablelib.php');
admin_externalpage_setup('managelocalplugins');
$delete = optional_param('delete', '', PARAM_PLUGIN);
$confirm = optional_param('confirm', '', PARAM_BOOL);
/// If data submitted, then process and store.
if (!empty($delete) and confirm_sesskey()) {
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('localplugins'));
if (!$confirm) {
if (get_string_manager()->string_exists('pluginname', 'local_' . $delete)) {
$strpluginname = get_string('pluginname', 'local_' . $delete);
} else {
$strpluginname = $delete;
}
echo $OUTPUT->confirm(get_string('localplugindeleteconfirm', '', $strpluginname),
new moodle_url($PAGE->url, array('delete' => $delete, 'confirm' => 1)),
$PAGE->url);
echo $OUTPUT->footer();
die();
} else {
uninstall_plugin('local', $delete);
$a = new stdclass();
$a->name = $delete;
$pluginlocation = get_plugin_types();
$a->directory = $pluginlocation['local'] . '/' . $delete;
echo $OUTPUT->notification(get_string('plugindeletefiles', '', $a), 'notifysuccess');
echo $OUTPUT->continue_button($PAGE->url);
echo $OUTPUT->footer();
die();
}
}
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('localplugins'));
/// Print the table of all installed local plugins
$table = new flexible_table('localplugins_administration_table');
$table->define_columns(array('name', 'version', 'uninstall'));
$table->define_headers(array(get_string('plugin'), get_string('version'), get_string('uninstallplugin', 'core_admin')));
$table->define_columns(array('name', 'version', 'delete'));
$table->define_headers(array(get_string('plugin'), get_string('version'), get_string('delete')));
$table->define_baseurl($PAGE->url);
$table->set_attribute('id', 'localplugins');
$table->set_attribute('class', 'admintable generaltable');
$table->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
$table->setup();
$plugins = array();
foreach (core_component::get_plugin_list('local') as $plugin => $plugindir) {
foreach (get_plugin_list('local') as $plugin => $plugindir) {
if (get_string_manager()->string_exists('pluginname', 'local_' . $plugin)) {
$strpluginname = get_string('pluginname', 'local_' . $plugin);
} else {
@@ -55,13 +89,11 @@ foreach (core_component::get_plugin_list('local') as $plugin => $plugindir) {
}
$plugins[$plugin] = $strpluginname;
}
core_collator::asort($plugins);
collatorlib::asort($plugins);
foreach ($plugins as $plugin => $name) {
$uninstall = '';
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('local_'.$plugin, 'manage')) {
$uninstall = html_writer::link($uninstallurl, get_string('uninstallplugin', 'core_admin'));
}
$delete = new moodle_url($PAGE->url, array('delete' => $plugin, 'sesskey' => sesskey()));
$delete = html_writer::link($delete, get_string('delete'));
$version = get_config('local_' . $plugin);
if (!empty($version->version)) {
@@ -70,7 +102,7 @@ foreach ($plugins as $plugin => $name) {
$version = '?';
}
$table->add_data(array($name, $version, $uninstall));
$table->add_data(array($name, $version, $delete));
}
$table->print_html();
+28 -4
View File
@@ -34,6 +34,8 @@ require_capability('moodle/site:config', context_system::instance());
// Get the submitted params
$disable = optional_param('disable', 0, PARAM_INT);
$enable = optional_param('enable', 0, PARAM_INT);
$uninstall = optional_param('uninstall', 0, PARAM_INT);
$confirm = optional_param('confirm', false, PARAM_BOOL);
$headingtitle = get_string('managemessageoutputs', 'message');
@@ -42,7 +44,6 @@ if (!empty($disable) && confirm_sesskey()) {
print_error('outputdoesnotexist', 'message');
}
$DB->set_field('message_processors', 'enabled', '0', array('id'=>$processor->id)); // Disable output
core_plugin_manager::reset_caches();
}
if (!empty($enable) && confirm_sesskey()) {
@@ -50,10 +51,33 @@ if (!empty($enable) && confirm_sesskey()) {
print_error('outputdoesnotexist', 'message');
}
$DB->set_field('message_processors', 'enabled', '1', array('id'=>$processor->id)); // Enable output
core_plugin_manager::reset_caches();
}
if ($disable || $enable) {
if (!empty($uninstall) && confirm_sesskey()) {
echo $OUTPUT->header();
echo $OUTPUT->heading($headingtitle);
if (!$processor = $DB->get_record('message_processors', array('id'=>$uninstall))) {
print_error('outputdoesnotexist', 'message');
}
$processorname = get_string('pluginname', 'message_'.$processor->name);
if (!$confirm) {
echo $OUTPUT->confirm(get_string('processordeleteconfirm', 'message', $processorname), 'message.php?uninstall='.$processor->id.'&confirm=1', 'message.php');
echo $OUTPUT->footer();
exit;
} else {
message_processor_uninstall($processor->name);
$a = new stdClass();
$a->processor = $processorname;
$a->directory = $CFG->dirroot.'/message/output/'.$processor->name;
notice(get_string('processordeletefiles', 'message', $a), 'message.php');
}
}
if ($disable || $enable || $uninstall) {
$url = new moodle_url('message.php');
redirect($url);
}
@@ -71,4 +95,4 @@ $messageoutputs = $renderer->manage_messageoutputs($processors);
echo $OUTPUT->header();
echo $OUTPUT->heading($headingtitle);
echo $messageoutputs;
echo $OUTPUT->footer();
echo $OUTPUT->footer();
+6 -8
View File
@@ -16,6 +16,8 @@ require_login();
admin_externalpage_setup('ssoaccesscontrol');
echo $OUTPUT->header();
if (!extension_loaded('openssl')) {
print_error('requiresopenssl', 'mnet');
}
@@ -63,11 +65,9 @@ if (!empty($action) and confirm_sesskey()) {
if (mnet_update_sso_access_control($idrec->username, $idrec->mnet_host_id, $accessctrl)) {
if ($accessctrl == 'allow') {
redirect('access_control.php', get_string('ssl_acl_allow','mnet', array('user' => $idrec->username,
'host' => $mnethosts[$idrec->mnet_host_id])));
} else if ($accessctrl == 'deny') {
redirect('access_control.php', get_string('ssl_acl_deny','mnet', array('user' => $idrec->username,
'host' => $mnethosts[$idrec->mnet_host_id])));
redirect('access_control.php', get_string('ssl_acl_allow','mnet', array('uset'=>$idrec->username, 'host'=>$mnethosts[$idrec->mnet_host_id])));
} elseif ($accessctrl == 'deny') {
redirect('access_control.php', get_string('ssl_acl_deny','mnet', array('user'=>$idrec->username, 'host'=>$mnethosts[$idrec->mnet_host_id])));
}
}
break;
@@ -103,7 +103,7 @@ if ($form = data_submitted() and confirm_sesskey()) {
$usernames = explode(',', $form->username);
foreach ($usernames as $username) {
$username = trim(core_text::strtolower($username));
$username = trim(textlib::strtolower($username));
if (!empty($username)) {
if (mnet_update_sso_access_control($username, $form->mnet_host_id, $form->accessctrl)) {
if ($form->accessctrl == 'allow') {
@@ -118,8 +118,6 @@ if ($form = data_submitted() and confirm_sesskey()) {
exit;
}
echo $OUTPUT->header();
// Explain
echo $OUTPUT->box(get_string('ssoacldescr','mnet'));
// Are the needed bits enabled?
+2 -2
View File
@@ -85,7 +85,7 @@
echo $OUTPUT->header();
?>
<form method="post" action="index.php">
<table align="center" width="635" class="generaltable" border="0" cellpadding="5" cellspacing="0">
<table align="center" width="635" class="generalbox" border="0" cellpadding="5" cellspacing="0">
<tr>
<td class="generalboxcontent">
<table cellpadding="9" cellspacing="0" >
@@ -106,7 +106,7 @@
</table>
</form>
<form method="post" action="index.php">
<table align="center" width="635" class="generaltable" border="0" cellpadding="5" cellspacing="0">
<table align="center" width="635" class="generalbox" border="0" cellpadding="5" cellspacing="0">
<tr>
<td class="generalboxcontent">
<table cellpadding="9" cellspacing="0" >
+1 -6
View File
@@ -78,13 +78,9 @@ class mnet_review_host_form extends moodleform {
$mnet_peer = $this->_customdata['peer'];
$mform->addElement('hidden', 'last_connect_time');
$mform->setType('last_connect_time', PARAM_INT);
$mform->addElement('hidden', 'id');
$mform->setType('id', PARAM_INT);
$mform->addElement('hidden', 'applicationid');
$mform->setType('applicationid', PARAM_INT);
$mform->addElement('hidden', 'oldpublickey');
$mform->setType('oldpublickey', PARAM_PEM);
$mform->addElement('text', 'name', get_string('site'), array('maxlength' => 80, 'size' => 50));
$mform->setType('name', PARAM_NOTAGS);
@@ -95,7 +91,7 @@ class mnet_review_host_form extends moodleform {
$mform->addRule('wwwroot', get_string('maximumchars', '', 255), 'maxlength', 255, 'client');
$themes = array('' => get_string('forceno'));
foreach (array_keys(core_component::get_plugin_list('theme')) as $themename) {
foreach (array_keys(get_plugin_list('theme')) as $themename) {
$themes[$themename] = get_string('pluginname', 'theme_'.$themename);
}
$mform->addElement('select', 'theme', get_string('forcetheme'), $themes);
@@ -152,7 +148,6 @@ class mnet_review_host_form extends moodleform {
$mform->addGroup($radioarray, 'radioar', get_string('deleted'), array(' ', ' '), false);
} else {
$mform->addElement('hidden', 'deleted');
$mform->setType('deleted', PARAM_BOOL);
}
// finished with static stuff, print save button
-2
View File
@@ -50,8 +50,6 @@ class mnet_profile_form extends moodleform {
}
$mform->addElement('hidden', 'hostid', $this->_customdata['hostid']);
$mform->setType('hostid', PARAM_INT);
$fields = mnet_profile_field_options();
// Fields to import ----------------------------------------------------
-3
View File
@@ -39,7 +39,6 @@ class mnet_services_form extends moodleform {
$myservices = mnet_get_service_info($mnet_peer);
$mform->addElement('hidden', 'hostid', $mnet_peer->id);
$mform->setType('hostid', PARAM_INT);
$count = 0;
foreach ($myservices as $name => $versions) {
@@ -56,8 +55,6 @@ class mnet_services_form extends moodleform {
$mform->addElement('html', '<h3>' . get_string($name.'_name', $langmodule , $mnet_peer->name) . '</h3>' . get_string($name.'_description', $langmodule, $mnet_peer->name));
$mform->addElement('hidden', 'exists[' . $version['serviceid'] . ']', 1);
// Temporary fix until MDL-38885 gets integrated.
$mform->setType('exists', PARAM_BOOL);
$pubstr = get_string('publish','mnet');
if (!empty($version['hostsubscribes'])) {
+61 -30
View File
@@ -13,12 +13,14 @@
$show = optional_param('show', '', PARAM_PLUGIN);
$hide = optional_param('hide', '', PARAM_PLUGIN);
$delete = optional_param('delete', '', PARAM_PLUGIN);
$confirm = optional_param('confirm', '', PARAM_BOOL);
/// Print headings
$stractivities = get_string("activities");
$struninstall = get_string('uninstallplugin', 'core_admin');
$strdelete = get_string("delete");
$strversion = get_string("version");
$strhide = get_string("hide");
$strshow = get_string("show");
@@ -40,14 +42,14 @@
SET visibleold=visible, visible=0
WHERE module=?";
$DB->execute($sql, array($module->id));
// Increment course.cacherev for courses where we just made something invisible.
// This will force cache rebuilding on the next request.
increment_revision_number('course', 'cacherev',
"id IN (SELECT DISTINCT course
// clear the course modinfo cache for courses
// where we just deleted something
$sql = "UPDATE {course}
SET modinfo=''
WHERE id IN (SELECT DISTINCT course
FROM {course_modules}
WHERE visibleold=1 AND module=?)",
array($module->id));
core_plugin_manager::reset_caches();
WHERE visibleold=1 AND module=?)";
$DB->execute($sql, array($module->id));
admin_get_root(true, false); // settings not required - only pages
}
@@ -57,17 +59,49 @@
}
$DB->set_field("modules", "visible", "1", array("id"=>$module->id)); // Show main module
$DB->set_field('course_modules', 'visible', '1', array('visibleold'=>1, 'module'=>$module->id)); // Get the previous saved visible state for the course module.
// Increment course.cacherev for courses where we just made something visible.
// This will force cache rebuilding on the next request.
increment_revision_number('course', 'cacherev',
"id IN (SELECT DISTINCT course
// clear the course modinfo cache for courses
// where we just made something visible
$sql = "UPDATE {course}
SET modinfo = ''
WHERE id IN (SELECT DISTINCT course
FROM {course_modules}
WHERE visible=1 AND module=?)",
array($module->id));
core_plugin_manager::reset_caches();
WHERE visible=1 AND module=?)";
$DB->execute($sql, array($module->id));
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($delete) and confirm_sesskey()) {
echo $OUTPUT->header();
echo $OUTPUT->heading($stractivities);
if (get_string_manager()->string_exists('modulename', $delete)) {
$strmodulename = get_string('modulename', $delete);
} else {
$strmodulename = $delete;
}
if (!$confirm) {
echo $OUTPUT->confirm(get_string("moduledeleteconfirm", "", $strmodulename), "modules.php?delete=$delete&confirm=1", "modules.php");
echo $OUTPUT->footer();
exit;
} else { // Delete everything!!
if ($delete == "forum") {
print_error("cannotdeleteforummodule", 'forum');
}
uninstall_plugin('mod', $delete);
$a = new stdClass();
$a->module = $strmodulename;
$a->directory = "$CFG->dirroot/mod/$delete";
echo $OUTPUT->notification(get_string("moduledeletefiles", "", $a), 'notifysuccess');
echo $OUTPUT->continue_button("modules.php");
echo $OUTPUT->footer();
exit;
}
}
echo $OUTPUT->header();
echo $OUTPUT->heading($stractivities);
@@ -80,11 +114,11 @@
/// Print the table of all modules
// construct the flexible table ready to display
$table = new flexible_table(MODULE_TABLE);
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'uninstall', 'settings'));
$table->define_headers(array($stractivitymodule, $stractivities, $strversion, "$strhide/$strshow", $strsettings, $struninstall));
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'delete', 'settings'));
$table->define_headers(array($stractivitymodule, $stractivities, $strversion, "$strhide/$strshow", $strdelete, $strsettings));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/modules.php');
$table->set_attribute('id', 'modules');
$table->set_attribute('class', 'admintable generaltable');
$table->set_attribute('class', 'generaltable');
$table->setup();
foreach ($modules as $module) {
@@ -99,10 +133,7 @@
$missing = false;
}
$uninstall = '';
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('mod_'.$module->name, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $struninstall);
}
$delete = "<a href=\"modules.php?delete=$module->name&amp;sesskey=".sesskey()."\">$strdelete</a>";
if (file_exists("$CFG->dirroot/mod/$module->name/settings.php") ||
file_exists("$CFG->dirroot/mod/$module->name/settingstree.php")) {
@@ -135,23 +166,23 @@
} else {
$visible = "<a href=\"modules.php?show=$module->name&amp;sesskey=".sesskey()."\" title=\"$strshow\">".
"<img src=\"" . $OUTPUT->pix_url('t/show') . "\" class=\"iconsmall\" alt=\"$strshow\" /></a>";
$class = 'dimmed_text';
$class = ' class="dimmed_text"';
}
if ($module->name == "forum") {
$uninstall = "";
$delete = "";
$visible = "";
$class = "";
}
$version = get_config('mod_'.$module->name, 'version');
$table->add_data(array(
$strmodulename,
'<span'.$class.'>'.$strmodulename.'</span>',
$countlink,
$version,
'<span'.$class.'>'.$module->version.'</span>',
$visible,
$settings,
$uninstall,
), $class);
$delete,
$settings
));
}
$table->print_html();
+174
View File
@@ -0,0 +1,174 @@
<?php
if (!isset($CFG)) {
require('../config.php');
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('oacleanup');
echo $OUTPUT->header();
online_assignment_cleanup(true);
echo $OUTPUT->footer();
}
function online_assignment_cleanup($output=false) {
global $CFG, $DB, $OUTPUT;
if ($output) {
echo $OUTPUT->heading('Online Assignment Cleanup');
echo '<center>';
}
/// We don't want to run this code if we are doing an upgrade from an assignment
/// version earlier than 2005041400
/// because the assignment type field will not exist
$amv = $DB->get_field('modules', 'version', array('name'=>'assignment'));
if ((int)$amv < 2005041400) {
if ($output) {
echo '</center>';
}
return;
}
/// get the module id for assignments from db
$arecord = $DB->get_record('modules', array('name', 'assignment'));
$aid = $arecord->id;
/// get a list of all courses on this site
list($ctxselect, $ctxjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx');
$sql = "SELECT c.* $ctxselect FROM {course} c $ctxjoin";
$courses = $DB->get_records_sql($sql);
/// cycle through each course
foreach ($courses as $course) {
context_instance_preload($course);
$context = context_course::instance($course->id);
if (empty($course->fullname)) {
$fullname = get_string('course').': '.$course->id;
} else {
$fullname = format_string($course->fullname, true, array('context' => $context));
}
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, $courseformatoptions['numsections']);
if (!($xsections = $DB->get_records_sql($sql, $params))) {
if ($output) echo 'No extra sections<br />';
continue;
}
/// cycle through each of the xtra sections
foreach ($xsections as $xsection) {
if ($output) echo 'Checking Section: '.$xsection->section.'<br />';
/// grab any module instances from the sequence field
if (!empty($xsection->sequence)) {
$instances = explode(',', $xsection->sequence);
/// cycle through the instances
foreach ($instances as $instance) {
/// is this an instance of an online assignment
$sql = "SELECT a.id
FROM {course_modules} cm, {assignment} a
WHERE cm.id = ? AND cm.module = ? AND
cm.instance = a.id AND a.assignmenttype = 'online'";
$params = array($instance, $aid);
/// if record exists then we need to move instance to it's correct section
if ($DB->record_exists_sql($sql, $params)) {
/// check the new section id
/// the journal update erroneously stored it in course_sections->section
$newsection = $xsection->section;
/// double check the new section
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;
}
$newsection = $zerosection->id;
}
/// grab the section record
if (!($section = $DB->get_record('course_sections', array('id'=>$newsection)))) {
if ($output) {
echo 'Serious error: Cannot retrieve section: '.$newsection.' for course: '. $fullname .'<br />';
}
continue;
}
/// explode the sequence
if (($sequence = explode(',', $section->sequence)) === false) {
$sequence = array();
}
/// add instance to correct section
array_push($sequence, $instance);
/// implode the sequence
$section->sequence = implode(',', $sequence);
$DB->set_field('course_sections', 'sequence', $section->sequence, array('id'=>$section->id));
/// now we need to remove the instance from the old sequence
/// grab the old section record
if (!($section = $DB->get_record('course_sections', array('id'=>$xsection->id)))) {
if ($output) echo 'Serious error: Cannot retrieve old section: '.$xsection->id.' for course: '.$fullname.'<br />';
continue;
}
/// explode the sequence
if (($sequence = explode(',', $section->sequence)) === false) {
$sequence = array();
}
/// remove the old value from the array
$key = array_search($instance, $sequence);
unset($sequence[$key]);
/// implode the sequence
$section->sequence = implode(',', $sequence);
$DB->set_field('course_sections', 'sequence', $section->sequence, array('id'=>$section->id));
if ($output) echo 'Online Assignment (instance '.$instance.') moved from section '.$section->id.': to section '.$newsection.'<br />';
}
}
}
/// if the summary and sequence are empty then remove this section
if (empty($xsection->summary) and empty($xsection->sequence)) {
$DB->delete_records('course_sections', array('id'=>$xsection->id));
if ($output) echo 'Deleting empty section '.$xsection->section.'<br />';
}
}
}
echo '</center>';
}
+40 -12
View File
@@ -18,7 +18,7 @@
* Provides an overview of installed plagiarism plugins
*
* Displays the list of found plagiarism plugins, their version (if found) and
* a link to uninstall the plagiarism plugin.
* a link to delete the plagiarism plugin.
*
* @see http://docs.moodle.org/dev/Plagiarism_API
* @package admin
@@ -30,17 +30,47 @@ require_once(dirname(dirname(__FILE__)) . '/config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
admin_externalpage_setup('manageplagiarismplugins');
$delete = optional_param('delete', '', PARAM_PLUGIN);
$confirm = optional_param('confirm', false, PARAM_BOOL);
if (!empty($delete) and confirm_sesskey()) { // If data submitted, then process and store.
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('manageplagiarism', 'plagiarism'));
if (!$confirm) {
if (get_string_manager()->string_exists('pluginname', 'plagiarism_' . $delete)) {
$strpluginname = get_string('pluginname', 'plagiarism_' . $delete);
} else {
$strpluginname = $delete;
}
echo $OUTPUT->confirm(get_string('plagiarismplugindeleteconfirm', 'plagiarism', $strpluginname),
new moodle_url($PAGE->url, array('delete' => $delete, 'confirm' => 1)),
$PAGE->url);
echo $OUTPUT->footer();
die();
} else {
uninstall_plugin('plagiarism', $delete);
$a = new stdclass();
$a->name = $delete;
$pluginlocation = get_plugin_types();
$a->directory = $pluginlocation['plagiarism'] . '/' . $delete;
echo $OUTPUT->notification(get_string('plugindeletefiles', '', $a), 'notifysuccess');
echo $OUTPUT->continue_button($PAGE->url);
echo $OUTPUT->footer();
die();
}
}
echo $OUTPUT->header();
// Print the table of all installed plagiarism plugins.
$txt = get_strings(array('settings', 'name', 'version'));
$txt->uninstall = get_string('uninstallplugin', 'core_admin');
$txt = get_strings(array('settings', 'name', 'version', 'delete'));
$plagiarismplugins = core_component::get_plugin_list('plagiarism');
$plagiarismplugins = get_plugin_list('plagiarism');
if (empty($plagiarismplugins)) {
echo $OUTPUT->notification(get_string('nopluginsinstalled', 'plagiarism'));
echo $OUTPUT->footer();
@@ -51,7 +81,7 @@ echo $OUTPUT->heading(get_string('availableplugins', 'plagiarism'), 3, 'main');
echo $OUTPUT->box_start('generalbox authsui');
$table = new html_table();
$table->head = array($txt->name, $txt->version, $txt->uninstall, $txt->settings);
$table->head = array($txt->name, $txt->version, $txt->delete, $txt->settings);
$table->colclasses = array('mdl-left', 'mdl-align', 'mdl-align', 'mdl-align');
$table->data = array();
$table->attributes['class'] = 'manageplagiarismtable generaltable';
@@ -71,12 +101,10 @@ foreach ($plagiarismplugins as $plugin => $dir) {
} else {
$version = '?';
}
// uninstall link.
$uninstall = '';
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('plagiarism_'.$plugin, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $txt->uninstall);
}
$table->data[] = array($displayname, $version, $uninstall, $settings);
// Delete link.
$delete = new moodle_url($PAGE->url, array('delete' => $plugin, 'sesskey' => sesskey()));
$delete = html_writer::link($delete, get_string('delete'));
$table->data[] = array($displayname, $version, $delete, $settings);
}
}
echo html_writer::table($table);
+10 -150
View File
@@ -18,15 +18,6 @@
/**
* UI for general plugins management
*
* Supported HTTP parameters:
*
* ?fetchremote=1 - check for available updates
* ?updatesonly=1 - display plugins with available update only
* ?contribonly=1 - display non-standard add-ons only
* ?uninstall=foo_bar - uninstall the given plugin
* ?delete=foo_bar - delete the plugin folder (it must not be installed)
* &confirm=1 - confirm the uninstall or delete action
*
* @package core
* @subpackage admin
* @copyright 2011 David Mudrak <david@moodle.com>
@@ -35,150 +26,17 @@
require_once(dirname(dirname(__FILE__)) . '/config.php');
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/filelib.php');
require_once($CFG->libdir . '/pluginlib.php');
admin_externalpage_setup('pluginsoverview');
require_capability('moodle/site:config', context_system::instance());
$fetchremote = optional_param('fetchremote', false, PARAM_BOOL);
$updatesonly = optional_param('updatesonly', false, PARAM_BOOL);
$contribonly = optional_param('contribonly', false, PARAM_BOOL);
$uninstall = optional_param('uninstall', '', PARAM_COMPONENT);
$delete = optional_param('delete', '', PARAM_COMPONENT);
$confirmed = optional_param('confirm', false, PARAM_BOOL);
$return = optional_param('return', 'overview', PARAM_ALPHA);
// NOTE: do not use admin_externalpage_setup() here because it loads
// full admin tree which is not possible during uninstallation.
require_login();
$syscontext = context_system::instance();
require_capability('moodle/site:config', $syscontext);
$pluginman = core_plugin_manager::instance();
if ($uninstall) {
require_sesskey();
if (!$confirmed) {
admin_externalpage_setup('pluginsoverview');
} else {
$PAGE->set_url('/admin/plugins.php');
$PAGE->set_context($syscontext);
$PAGE->set_pagelayout('maintenance');
$PAGE->set_popup_notification_allowed(false);
}
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
$pluginfo = $pluginman->get_plugin_info($uninstall);
// Make sure we know the plugin.
if (is_null($pluginfo)) {
throw new moodle_exception('err_uninstalling_unknown_plugin', 'core_plugin', '', array('plugin' => $uninstall),
'core_plugin_manager::get_plugin_info() returned null for the plugin to be uninstalled');
}
$pluginname = $pluginman->plugin_name($pluginfo->component);
$PAGE->set_title($pluginname);
$PAGE->navbar->add(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
if (!$pluginman->can_uninstall_plugin($pluginfo->component)) {
throw new moodle_exception('err_cannot_uninstall_plugin', 'core_plugin', '',
array('plugin' => $pluginfo->component),
'core_plugin_manager::can_uninstall_plugin() returned false');
}
if (!$confirmed) {
$continueurl = new moodle_url($PAGE->url, array('uninstall' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1, 'return'=>$return));
$cancelurl = $pluginfo->get_return_url_after_uninstall($return);
echo $output->plugin_uninstall_confirm_page($pluginman, $pluginfo, $continueurl, $cancelurl);
exit();
} else {
$SESSION->pluginuninstallreturn = $pluginfo->get_return_url_after_uninstall($return);
$progress = new progress_trace_buffer(new text_progress_trace(), false);
$pluginman->uninstall_plugin($pluginfo->component, $progress);
$progress->finished();
if ($pluginman->is_plugin_folder_removable($pluginfo->component)) {
$continueurl = new moodle_url($PAGE->url, array('delete' => $pluginfo->component, 'sesskey' => sesskey(), 'confirm' => 1));
echo $output->plugin_uninstall_results_removable_page($pluginman, $pluginfo, $progress, $continueurl);
// Reset op code caches.
if (function_exists('opcache_reset')) {
opcache_reset();
}
exit();
} else {
echo $output->plugin_uninstall_results_page($pluginman, $pluginfo, $progress);
// Reset op code caches.
if (function_exists('opcache_reset')) {
opcache_reset();
}
exit();
}
}
}
if ($delete and $confirmed) {
require_sesskey();
$PAGE->set_url('/admin/plugins.php');
$PAGE->set_context($syscontext);
$PAGE->set_pagelayout('maintenance');
$PAGE->set_popup_notification_allowed(false);
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
$pluginfo = $pluginman->get_plugin_info($delete);
// Make sure we know the plugin.
if (is_null($pluginfo)) {
throw new moodle_exception('err_removing_unknown_plugin', 'core_plugin', '', array('plugin' => $delete),
'core_plugin_manager::get_plugin_info() returned null for the plugin to be deleted');
}
$pluginname = $pluginman->plugin_name($pluginfo->component);
$PAGE->set_title($pluginname);
$PAGE->navbar->add(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
// Make sure it is not installed.
if (!is_null($pluginfo->versiondb)) {
throw new moodle_exception('err_removing_installed_plugin', 'core_plugin', '',
array('plugin' => $pluginfo->component, 'versiondb' => $pluginfo->versiondb),
'core_plugin_manager::get_plugin_info() returned not-null versiondb for the plugin to be deleted');
}
// Make sure the folder is removable.
if (!$pluginman->is_plugin_folder_removable($pluginfo->component)) {
throw new moodle_exception('err_removing_unremovable_folder', 'core_plugin', '',
array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir),
'plugin root folder is not removable as expected');
}
// Make sure the folder is within Moodle installation tree.
if (strpos($pluginfo->rootdir, $CFG->dirroot) !== 0) {
throw new moodle_exception('err_unexpected_plugin_rootdir', 'core_plugin', '',
array('plugin' => $pluginfo->component, 'rootdir' => $pluginfo->rootdir, 'dirroot' => $CFG->dirroot),
'plugin root folder not in the moodle dirroot');
}
// So long, and thanks for all the bugs.
fulldelete($pluginfo->rootdir);
// Reset op code caches.
if (function_exists('opcache_reset')) {
opcache_reset();
}
// We need to execute upgrade to make sure everything including caches is up to date.
redirect(new moodle_url('/admin/index.php'));
}
admin_externalpage_setup('pluginsoverview');
/** @var core_admin_renderer $output */
$output = $PAGE->get_renderer('core', 'admin');
$checker = \core\update\checker::instance();
$pluginman = plugin_manager::instance();
$checker = available_update_checker::instance();
// Filtering options.
$options = array(
@@ -192,10 +50,12 @@ if ($fetchremote) {
redirect(new moodle_url($PAGE->url, $options));
}
$deployer = \core\update\deployer::instance();
$output = $PAGE->get_renderer('core', 'admin');
$deployer = available_update_deployer::instance();
if ($deployer->enabled()) {
$myurl = new moodle_url($PAGE->url, array('updatesonly' => $updatesonly, 'contribonly' => $contribonly));
$deployer->initialize($myurl, new moodle_url('/admin'));
$deployer->initialize($myurl, $myurl);
$deploydata = $deployer->submitted_data();
if (!empty($deploydata)) {
+1 -3
View File
@@ -88,7 +88,6 @@ if (($action == 'edit') || ($action == 'new')) {
} else {
portfolio_static_function($plugin, 'create_instance', $plugin, $fromform->name, $fromform);
}
core_plugin_manager::reset_caches();
$savedstr = get_string('instancesaved', 'portfolio');
redirect($baseurl, $savedstr, 1);
exit;
@@ -117,7 +116,6 @@ if (($action == 'edit') || ($action == 'new')) {
$instance->set('visible', $visible);
$instance->save();
core_plugin_manager::reset_caches();
$return = true;
} else if ($action == 'delete') {
$instance = portfolio_instance($portfolio);
@@ -162,7 +160,7 @@ if (($action == 'edit') || ($action == 'new')) {
$output = $OUTPUT->box_start('generalbox');
$plugins = core_component::get_plugin_list('portfolio');
$plugins = get_plugin_list('portfolio');
$plugins = array_keys($plugins);
$instances = portfolio_instances(false, false);
$usedplugins = array();
+72 -11
View File
@@ -28,6 +28,7 @@
require_once(dirname(__FILE__) . '/../config.php');
require_once($CFG->libdir . '/questionlib.php');
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/pluginlib.php');
require_once($CFG->libdir . '/tablelib.php');
// Check permissions.
@@ -38,8 +39,8 @@ require_capability('moodle/question:config', $systemcontext);
admin_externalpage_setup('manageqbehaviours');
$thispageurl = new moodle_url('/admin/qbehaviours.php');
$behaviours = core_component::get_plugin_list('qbehaviour');
$pluginmanager = core_plugin_manager::instance();
$behaviours = get_plugin_list('qbehaviour');
$pluginmanager = plugin_manager::instance();
// Get some data we will need - question counts and which types are needed.
$counts = $DB->get_records_sql_menu("
@@ -91,7 +92,6 @@ if (($disable = optional_param('disable', '', PARAM_PLUGIN)) && confirm_sesskey(
$disabledbehaviours[] = $disable;
set_config('disabledbehaviours', implode(',', $disabledbehaviours), 'question');
}
core_plugin_manager::reset_caches();
redirect($thispageurl);
}
@@ -109,7 +109,6 @@ if (($enable = optional_param('enable', '', PARAM_PLUGIN)) && confirm_sesskey())
unset($disabledbehaviours[$key]);
set_config('disabledbehaviours', implode(',', $disabledbehaviours), 'question');
}
core_plugin_manager::reset_caches();
redirect($thispageurl);
}
@@ -137,6 +136,70 @@ if (($down = optional_param('down', '', PARAM_PLUGIN)) && confirm_sesskey()) {
redirect($thispageurl);
}
// Delete.
if (($delete = optional_param('delete', '', PARAM_PLUGIN)) && confirm_sesskey()) {
// Check it is OK to delete this question type.
if ($delete == 'missing') {
print_error('cannotdeletemissingbehaviour', 'question', $thispageurl);
}
if (!isset($behaviours[$delete])) {
print_error('unknownbehaviour', 'question', $thispageurl, $delete);
}
$behaviourname = $sortedbehaviours[$delete];
if ($counts[$delete] > 0) {
print_error('cannotdeletebehaviourinuse', 'question', $thispageurl, $behaviourname);
}
if ($needed[$delete] > 0) {
print_error('cannotdeleteneededbehaviour', 'question', $thispageurl, $behaviourname);
}
// If not yet confirmed, display a confirmation message.
if (!optional_param('confirm', '', PARAM_BOOL)) {
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('deletebehaviourareyousure', 'question', $behaviourname));
echo $OUTPUT->confirm(
get_string('deletebehaviourareyousuremessage', 'question', $behaviourname),
new moodle_url($thispageurl, array('delete' => $delete, 'confirm' => 1)),
$thispageurl);
echo $OUTPUT->footer();
exit;
}
// Do the deletion.
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('deletingbehaviour', 'question', $behaviourname));
// Delete any configuration records.
if (!unset_all_config_for_plugin('qbehaviour_' . $delete)) {
echo $OUTPUT->notification(get_string('errordeletingconfig', 'admin', 'qbehaviour_' . $delete));
}
if (($key = array_search($delete, $disabledbehaviours)) !== false) {
unset($disabledbehaviours[$key]);
set_config('disabledbehaviours', implode(',', $disabledbehaviours), 'question');
}
$behaviourorder = array_keys($sortedbehaviours);
if (($key = array_search($delete, $behaviourorder)) !== false) {
unset($behaviourorder[$key]);
set_config('behavioursortorder', implode(',', $behaviourorder), 'question');
}
// Then the tables themselves
drop_plugin_tables($delete, get_plugin_directory('qbehaviour', $delete) . '/db/install.xml', false);
// Remove event handlers and dequeue pending events
events_uninstall('qbehaviour_' . $delete);
$a = new stdClass();
$a->behaviour = $behaviourname;
$a->directory = get_plugin_directory('qbehaviour', $delete);
echo $OUTPUT->box(get_string('qbehaviourdeletefiles', 'question', $a), 'generalbox', 'notice');
echo $OUTPUT->continue_button($thispageurl);
echo $OUTPUT->footer();
exit;
}
// End of process actions ==================================================
// Print the page heading.
@@ -147,12 +210,12 @@ echo $OUTPUT->heading(get_string('manageqbehaviours', 'admin'));
$table = new flexible_table('qbehaviouradmintable');
$table->define_baseurl($thispageurl);
$table->define_columns(array('behaviour', 'numqas', 'version', 'requires',
'available', 'uninstall'));
'available', 'delete'));
$table->define_headers(array(get_string('behaviour', 'question'), get_string('numqas', 'question'),
get_string('version'), get_string('requires', 'admin'),
get_string('availableq', 'question'), get_string('uninstallplugin', 'core_admin')));
get_string('availableq', 'question'), get_string('delete')));
$table->set_attribute('id', 'qbehaviours');
$table->set_attribute('class', 'generaltable admintable');
$table->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
$table->setup();
// Add a row for each question type.
@@ -207,11 +270,9 @@ foreach ($sortedbehaviours as $behaviour => $behaviourname) {
if ($needed[$behaviour]) {
$row[] = '';
} else {
$uninstallurl = core_plugin_manager::instance()->get_uninstall_url('qbehaviour_'.$behaviour, 'manage');
if ($uninstallurl) {
$row[] = html_writer::link($uninstallurl, get_string('uninstallplugin', 'core_admin'),
$row[] = html_writer::link(new moodle_url($thispageurl,
array('delete' => $behaviour, 'sesskey' => sesskey())), get_string('delete'),
array('title' => get_string('uninstallbehaviour', 'question')));
}
}
$table->add_data($row, $rowclass);
+72 -15
View File
@@ -28,6 +28,7 @@
require_once(dirname(__FILE__) . '/../config.php');
require_once($CFG->libdir . '/questionlib.php');
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/pluginlib.php');
require_once($CFG->libdir . '/tablelib.php');
// Check permissions.
@@ -40,7 +41,7 @@ admin_externalpage_setup('manageqtypes');
$thispageurl = new moodle_url('/admin/qtypes.php');
$qtypes = question_bank::get_all_qtypes();
$pluginmanager = core_plugin_manager::instance();
$pluginmanager = plugin_manager::instance();
// Get some data we will need - question counts and which types are needed.
$counts = $DB->get_records_sql("
@@ -121,6 +122,64 @@ if (($down = optional_param('down', '', PARAM_PLUGIN)) && confirm_sesskey()) {
redirect($thispageurl);
}
// Delete.
if (($delete = optional_param('delete', '', PARAM_PLUGIN)) && confirm_sesskey()) {
// Check it is OK to delete this question type.
if ($delete == 'missingtype') {
print_error('cannotdeletemissingqtype', 'question', $thispageurl);
}
if (!isset($qtypes[$delete])) {
print_error('unknownquestiontype', 'question', $thispageurl, $delete);
}
$qtypename = $qtypes[$delete]->local_name();
if ($counts[$delete]->numquestions + $counts[$delete]->numhidden > 0) {
print_error('cannotdeleteqtypeinuse', 'question', $thispageurl, $qtypename);
}
if ($needed[$delete] > 0) {
print_error('cannotdeleteqtypeneeded', 'question', $thispageurl, $qtypename);
}
// If not yet confirmed, display a confirmation message.
if (!optional_param('confirm', '', PARAM_BOOL)) {
$qtypename = $qtypes[$delete]->local_name();
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('deleteqtypeareyousure', 'question', $qtypename));
echo $OUTPUT->confirm(get_string('deleteqtypeareyousuremessage', 'question', $qtypename),
new moodle_url($thispageurl, array('delete' => $delete, 'confirm' => 1)),
$thispageurl);
echo $OUTPUT->footer();
exit;
}
// Do the deletion.
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('deletingqtype', 'question', $qtypename));
// Delete any configuration records.
if (!unset_all_config_for_plugin('qtype_' . $delete)) {
echo $OUTPUT->notification(get_string('errordeletingconfig', 'admin', 'qtype_' . $delete));
}
unset_config($delete . '_disabled', 'question');
unset_config($delete . '_sortorder', 'question');
// Then the tables themselves
drop_plugin_tables($delete, $qtypes[$delete]->plugin_dir() . '/db/install.xml', false);
// Remove event handlers and dequeue pending events
events_uninstall('qtype_' . $delete);
$a = new stdClass();
$a->qtype = $qtypename;
$a->directory = $qtypes[$delete]->plugin_dir();
echo $OUTPUT->box(get_string('qtypedeletefiles', 'question', $a), 'generalbox', 'notice');
echo $OUTPUT->continue_button($thispageurl);
echo $OUTPUT->footer();
exit;
}
// End of process actions ==================================================
// Print the page heading.
@@ -131,12 +190,12 @@ echo $OUTPUT->heading(get_string('manageqtypes', 'admin'));
$table = new flexible_table('qtypeadmintable');
$table->define_baseurl($thispageurl);
$table->define_columns(array('questiontype', 'numquestions', 'version', 'requires',
'availableto', 'uninstall', 'settings'));
'availableto', 'delete', 'settings'));
$table->define_headers(array(get_string('questiontype', 'question'), get_string('numquestions', 'question'),
get_string('version'), get_string('requires', 'admin'), get_string('availableq', 'question'),
get_string('settings'), get_string('uninstallplugin', 'core_admin')));
get_string('delete'), get_string('settings')));
$table->set_attribute('id', 'qtypes');
$table->set_attribute('class', 'admintable generaltable');
$table->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
$table->setup();
// Add a row for each question type.
@@ -206,6 +265,15 @@ foreach ($sortedqtypes as $qtypename => $localname) {
$icons .= question_type_icon_html('down', $qtypename, 't/down', get_string('down'), '');
$row[] = $icons;
// Delete link, if available.
if ($needed[$qtypename]) {
$row[] = '';
} else {
$row[] = html_writer::link(new moodle_url($thispageurl,
array('delete' => $qtypename, 'sesskey' => sesskey())), get_string('delete'),
array('title' => get_string('uninstallqtype', 'question')));
}
// Settings link, if available.
$settings = admin_get_root()->locate('qtypesetting' . $qtypename);
if ($settings instanceof admin_externalpage) {
@@ -217,17 +285,6 @@ foreach ($sortedqtypes as $qtypename => $localname) {
$row[] = '';
}
// Uninstall link, if available.
if ($needed[$qtypename]) {
$row[] = '';
} else {
$uninstallurl = core_plugin_manager::instance()->get_uninstall_url('qtype_'.$qtypename, 'manage');
if ($uninstallurl) {
$row[] = html_writer::link($uninstallurl, get_string('uninstallplugin', 'core_admin'),
array('title' => get_string('uninstallqtype', 'question')));
}
}
$table->add_data($row, $rowclass);
}
+1 -1
View File
@@ -65,7 +65,7 @@ if (!empty($registeredhub) and $registeredhub->token == $token) {
$registeredhub->hubname = $hubname;
$registrationmanager->update_registeredhub($registeredhub);
// Display notification message.
//display notficiation message
$notificationmessage = $OUTPUT->notification(
get_string('registrationconfirmedon', 'hub', $hublink), 'notifysuccess');
echo $notificationmessage;
+24 -63
View File
@@ -49,10 +49,8 @@ class site_unregistration_form extends moodleform {
$unregisterlabel = get_string('unregister', 'hub');
$mform->addElement('checkbox', 'unpublishalladvertisedcourses', '',
' ' . get_string('unpublishalladvertisedcourses', 'hub'));
$mform->setType('unpublishalladvertisedcourses', PARAM_INT);
$mform->addElement('checkbox', 'unpublishalluploadedcourses', '',
' ' . get_string('unpublishalluploadedcourses', 'hub'));
$mform->setType('unpublishalluploadedcourses', PARAM_INT);
$mform->addElement('hidden', 'confirm', 1);
$mform->setType('confirm', PARAM_INT);
@@ -84,6 +82,7 @@ class site_clean_registration_data_form extends moodleform {
$unregisterlabel = get_string('forceunregister', 'hub');
$mform->addElement('static', '', get_string('warning', 'hub'), get_string('forceunregisterconfirmation', 'hub', $hubname));
$mform->addElement('hidden', 'confirm', 1);
$mform->setType('confirm', PARAM_INT);
$mform->addElement('hidden', 'unregistration', 1);
@@ -137,8 +136,8 @@ class hub_selector_form extends moodleform {
$options = array();
foreach ($hubs as $hub) {
//to not display a name longer than 100 character (too big)
if (core_text::strlen($hub['name']) > 100) {
$hubname = core_text::substr($hub['name'], 0, 100);
if (textlib::strlen($hub['name']) > 100) {
$hubname = textlib::substr($hub['name'], 0, 100);
$hubname = $hubname . "...";
} else {
$hubname = $hub['name'];
@@ -150,7 +149,6 @@ class hub_selector_form extends moodleform {
if (!empty($hubs)) {
$mform->addElement('select', 'publichub', get_string('publichub', 'hub'),
$options, array("size" => 15));
$mform->setType('publichub', PARAM_URL);
}
$mform->addElement('static', 'or', '', get_string('orenterprivatehub', 'hub'));
@@ -158,10 +156,8 @@ class hub_selector_form extends moodleform {
//Private hub
$mform->addElement('text', 'unlistedurl', get_string('privatehuburl', 'hub'),
array('class' => 'registration_textfield'));
$mform->setType('unlistedurl', PARAM_URL);
$mform->addElement('text', 'password', get_string('password'),
array('class' => 'registration_textfield'));
$mform->setType('password', PARAM_RAW);
$this->add_action_buttons(false, get_string('selecthub', 'hub'));
}
@@ -175,8 +171,11 @@ class hub_selector_form extends moodleform {
$unlistedurl = $this->_form->_submitValues['unlistedurl'];
if (empty($unlistedurl)) {
$errors['unlistedurl'] = get_string('badurlformat', 'hub');
if (!empty($unlistedurl)) {
$unlistedurltotest = clean_param($unlistedurl, PARAM_URL);
if (empty($unlistedurltotest)) {
$errors['unlistedurl'] = get_string('badurlformat', 'hub');
}
}
return $errors;
@@ -244,8 +243,6 @@ class site_registration_form extends moodleform {
$postsnumber = get_config('hub', 'site_postsnumber_' . $cleanhuburl);
$questionsnumber = get_config('hub', 'site_questionsnumber_' . $cleanhuburl);
$resourcesnumber = get_config('hub', 'site_resourcesnumber_' . $cleanhuburl);
$badgesnumber = get_config('hub', 'site_badges_' . $cleanhuburl);
$issuedbadgesnumber = get_config('hub', 'site_issuedbadges_' . $cleanhuburl);
$mediancoursesize = get_config('hub', 'site_mediancoursesize_' . $cleanhuburl);
$participantnumberaveragecfg = get_config('hub', 'site_participantnumberaverage_' . $cleanhuburl);
$modulenumberaveragecfg = get_config('hub', 'site_modulenumberaverage_' . $cleanhuburl);
@@ -275,7 +272,6 @@ class site_registration_form extends moodleform {
$options[HUB_SITELINKPUBLISHED] = $registrationmanager->get_site_privacy_string(HUB_SITELINKPUBLISHED);
$mform->addElement('select', 'privacy', get_string('siteprivacy', 'hub'), $options);
$mform->setDefault('privacy', $privacy);
$mform->setType('privacy', PARAM_ALPHA);
$mform->addHelpButton('privacy', 'privacy', 'hub');
unset($options);
@@ -287,7 +283,7 @@ class site_registration_form extends moodleform {
$mform->addHelpButton('description', 'sitedesc', 'hub');
$languages = get_string_manager()->get_list_of_languages();
core_collator::asort($languages);
collatorlib::asort($languages);
$mform->addElement('select', 'language', get_string('sitelang', 'hub'),
$languages);
$mform->setType('language', PARAM_ALPHANUMEXT);
@@ -309,13 +305,11 @@ class site_registration_form extends moodleform {
$countries = get_string_manager()->get_list_of_countries();
$mform->addElement('select', 'countrycode', get_string('sitecountry', 'hub'), $countries);
$mform->setDefault('countrycode', $country);
$mform->setType('countrycode', PARAM_ALPHANUMEXT);
$mform->addHelpButton('countrycode', 'sitecountry', 'hub');
$mform->addElement('text', 'geolocation', get_string('sitegeolocation', 'hub'),
array('class' => 'registration_textfield'));
$mform->setDefault('geolocation', $geolocation);
$mform->setType('geolocation', PARAM_RAW);
$mform->addHelpButton('geolocation', 'sitegeolocation', 'hub');
$mform->addElement('text', 'contactname', get_string('siteadmin', 'hub'),
@@ -333,7 +327,7 @@ class site_registration_form extends moodleform {
$mform->addElement('text', 'contactemail', get_string('siteemail', 'hub'),
array('class' => 'registration_textfield'));
$mform->addRule('contactemail', $strrequired, 'required', null, 'client');
$mform->setType('contactemail', PARAM_EMAIL);
$mform->setType('contactemail', PARAM_TEXT);
$mform->setDefault('contactemail', $contactemail);
$mform->addHelpButton('contactemail', 'siteemail', 'hub');
@@ -342,7 +336,6 @@ class site_registration_form extends moodleform {
$options[1] = get_string("registrationcontactyes");
$mform->addElement('select', 'contactable', get_string('siteregistrationcontact', 'hub'), $options);
$mform->setDefault('contactable', $contactable);
$mform->setType('contactable', PARAM_INT);
$mform->addHelpButton('contactable', 'siteregistrationcontact', 'hub');
unset($options);
@@ -351,7 +344,6 @@ class site_registration_form extends moodleform {
$options[1] = get_string("registrationyes");
$mform->addElement('select', 'emailalert', get_string('siteregistrationemail', 'hub'), $options);
$mform->setDefault('emailalert', $emailalert);
$mform->setType('emailalert', PARAM_INT);
$mform->addHelpButton('emailalert', 'siteregistrationemail', 'hub');
unset($options);
@@ -382,111 +374,80 @@ class site_registration_form extends moodleform {
require_once($CFG->dirroot . "/course/lib.php");
$participantnumberaverage = number_format(average_number_of_participants(), 2);
$modulenumberaverage = number_format(average_number_of_courses_modules(), 2);
require_once($CFG->libdir . '/badgeslib.php');
$badges = $DB->count_records_select('badge', 'status <> ' . BADGE_STATUS_ARCHIVED);
$issuedbadges = $DB->count_records('badge_issued');
if (HUB_MOODLEORGHUBURL != $huburl) {
$mform->addElement('checkbox', 'courses', get_string('sendfollowinginfo', 'hub'),
" " . get_string('coursesnumber', 'hub', $coursecount));
$mform->setDefault('courses', $coursesnumber != -1);
$mform->setType('courses', PARAM_INT);
$mform->addHelpButton('courses', 'sendfollowinginfo', 'hub');
$mform->addElement('checkbox', 'users', '',
" " . get_string('usersnumber', 'hub', $usercount));
$mform->setDefault('users', $usersnumber != -1);
$mform->setType('users', PARAM_INT);
$mform->addElement('checkbox', 'roleassignments', '',
" " . get_string('roleassignmentsnumber', 'hub', $roleassigncount));
$mform->setDefault('roleassignments', $roleassignmentsnumber != -1);
$mform->setType('roleassignments', PARAM_INT);
$mform->addElement('checkbox', 'posts', '',
" " . get_string('postsnumber', 'hub', $postcount));
$mform->setDefault('posts', $postsnumber != -1);
$mform->setType('posts', PARAM_INT);
$mform->addElement('checkbox', 'questions', '',
" " . get_string('questionsnumber', 'hub', $questioncount));
$mform->setDefault('questions', $questionsnumber != -1);
$mform->setType('questions', PARAM_INT);
$mform->addElement('checkbox', 'resources', '',
" " . get_string('resourcesnumber', 'hub', $resourcecount));
$mform->setDefault('resources', $resourcesnumber != -1);
$mform->setType('resources', PARAM_INT);
$mform->addElement('checkbox', 'badges', '',
" " . get_string('badgesnumber', 'hub', $badges));
$mform->setDefault('badges', $badgesnumber != -1);
$mform->setType('resources', PARAM_INT);
$mform->addElement('checkbox', 'issuedbadges', '',
" " . get_string('issuedbadgesnumber', 'hub', $issuedbadges));
$mform->setDefault('issuedbadges', $issuedbadgesnumber != -1);
$mform->setType('resources', PARAM_INT);
$mform->addElement('checkbox', 'participantnumberaverage', '',
" " . get_string('participantnumberaverage', 'hub', $participantnumberaverage));
$mform->setDefault('participantnumberaverage', $participantnumberaveragecfg != -1);
$mform->setType('participantnumberaverage', PARAM_FLOAT);
$mform->addElement('checkbox', 'modulenumberaverage', '',
" " . get_string('modulenumberaverage', 'hub', $modulenumberaverage));
$mform->setDefault('modulenumberaverage', $modulenumberaveragecfg != -1);
$mform->setType('modulenumberaverage', PARAM_FLOAT);
} else {
$mform->addElement('static', 'courseslabel', get_string('sendfollowinginfo', 'hub'),
" " . get_string('coursesnumber', 'hub', $coursecount));
$mform->addElement('hidden', 'courses', 1);
$mform->setType('courses', PARAM_INT);
$mform->addElement('hidden', 'courses', true);
$mform->setType('courses', PARAM_FLOAT);
$mform->addHelpButton('courseslabel', 'sendfollowinginfo', 'hub');
$mform->addElement('static', 'userslabel', '',
" " . get_string('usersnumber', 'hub', $usercount));
$mform->addElement('hidden', 'users', 1);
$mform->setType('users', PARAM_INT);
$mform->addElement('hidden', 'users', true);
$mform->setType('users', PARAM_FLOAT);
$mform->addElement('static', 'roleassignmentslabel', '',
" " . get_string('roleassignmentsnumber', 'hub', $roleassigncount));
$mform->addElement('hidden', 'roleassignments', 1);
$mform->setType('roleassignments', PARAM_INT);
$mform->addElement('hidden', 'roleassignments', true);
$mform->setType('roleassignments', PARAM_FLOAT);
$mform->addElement('static', 'postslabel', '',
" " . get_string('postsnumber', 'hub', $postcount));
$mform->addElement('hidden', 'posts', 1);
$mform->setType('posts', PARAM_INT);
$mform->addElement('hidden', 'posts', true);
$mform->setType('posts', PARAM_FLOAT);
$mform->addElement('static', 'questionslabel', '',
" " . get_string('questionsnumber', 'hub', $questioncount));
$mform->addElement('hidden', 'questions', 1);
$mform->setType('questions', PARAM_INT);
$mform->addElement('hidden', 'questions', true);
$mform->setType('questions', PARAM_FLOAT);
$mform->addElement('static', 'resourceslabel', '',
" " . get_string('resourcesnumber', 'hub', $resourcecount));
$mform->addElement('hidden', 'resources', 1);
$mform->setType('resources', PARAM_INT);
$mform->addElement('static', 'badgeslabel', '',
" " . get_string('badgesnumber', 'hub', $badges));
$mform->addElement('hidden', 'badges', 1);
$mform->setType('badges', PARAM_INT);
$mform->addElement('static', 'issuedbadgeslabel', '',
" " . get_string('issuedbadgesnumber', 'hub', $issuedbadges));
$mform->addElement('hidden', 'issuedbadges', true);
$mform->setType('issuedbadges', PARAM_INT);
$mform->addElement('hidden', 'resources', true);
$mform->setType('resources', PARAM_FLOAT);
$mform->addElement('static', 'participantnumberaveragelabel', '',
" " . get_string('participantnumberaverage', 'hub', $participantnumberaverage));
$mform->addElement('hidden', 'participantnumberaverage', 1);
$mform->addElement('hidden', 'participantnumberaverage', true);
$mform->setType('participantnumberaverage', PARAM_FLOAT);
$mform->addElement('static', 'modulenumberaveragelabel', '',
" " . get_string('modulenumberaverage', 'hub', $modulenumberaverage));
$mform->addElement('hidden', 'modulenumberaverage', 1);
$mform->addElement('hidden', 'modulenumberaverage', true);
$mform->setType('modulenumberaverage', PARAM_FLOAT);
}
+3 -3
View File
@@ -22,9 +22,9 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL
* @copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com
*
* On this page the administrator selects which hub he wants to register (except for moodle.net)
* Admins can register with moodle.net via the site admin menu "Registration" link.
* On this page the administrator can also unregister from any hubs including moodle.net.
* On this page the administrator selects which hub he wants to register,
* except for MOOCH. Admins can register with MOOCH with the top admin menu "Registration" link.
* On this page the administrator can also unregister from any hubs, including MOOCH.
*/
require('../../config.php');
+22 -40
View File
@@ -53,36 +53,32 @@ class registration_manager {
public function cron() {
global $CFG;
if (extension_loaded('xmlrpc')) {
//check if the last registration cron update was less than a week ago
$lastcron = get_config('registration', 'crontime');
if ($lastcron > strtotime("-7 day")) { // Prevent this happening more than once a week.
return;
}
if ($lastcron === false or $lastcron < strtotime("-7 day")) { //set to a week, see MDL-23704
$function = 'hub_update_site_info';
require_once($CFG->dirroot . "/webservice/xmlrpc/lib.php");
$function = 'hub_update_site_info';
require_once($CFG->dirroot . "/webservice/xmlrpc/lib.php");
// Update all hubs where the site is registered.
$hubs = $this->get_registered_on_hubs();
if (empty($hubs)) {
mtrace(get_string('registrationwarning', 'admin'));
}
foreach ($hubs as $hub) {
// Update the registration.
$siteinfo = $this->get_site_info($hub->huburl);
$params = array('siteinfo' => $siteinfo);
$serverurl = $hub->huburl . "/local/hub/webservice/webservices.php";
$xmlrpcclient = new webservice_xmlrpc_client($serverurl, $hub->token);
try {
$result = $xmlrpcclient->call($function, $params);
mtrace(get_string('siteupdatedcron', 'hub', $hub->hubname));
} catch (Exception $e) {
$errorparam = new stdClass();
$errorparam->errormessage = $e->getMessage();
$errorparam->hubname = $hub->hubname;
mtrace(get_string('errorcron', 'hub', $errorparam));
//update all hub where the site is registered on
$hubs = $this->get_registered_on_hubs();
foreach ($hubs as $hub) {
//update the registration
$siteinfo = $this->get_site_info($hub->huburl);
$params = array('siteinfo' => $siteinfo);
$serverurl = $hub->huburl . "/local/hub/webservice/webservices.php";
$xmlrpcclient = new webservice_xmlrpc_client($serverurl, $hub->token);
try {
$result = $xmlrpcclient->call($function, $params);
mtrace(get_string('siteupdatedcron', 'hub', $hub->hubname));
} catch (Exception $e) {
$errorparam = new stdClass();
$errorparam->errormessage = $e->getMessage();
$errorparam->hubname = $hub->hubname;
mtrace(get_string('errorcron', 'hub', $errorparam));
}
}
set_config('crontime', time(), 'registration');
}
set_config('crontime', time(), 'registration');
} else {
mtrace(get_string('errorcronnoxmlrpc', 'hub'));
}
@@ -251,20 +247,6 @@ class registration_manager {
$resourcecount = $DB->count_records('resource');
}
$siteinfo['resources'] = $resourcecount;
// Badge statistics.
require_once($CFG->libdir . '/badgeslib.php');
if (get_config('hub', 'site_badges_' . $cleanhuburl) == -1) {
$badges = -1;
} else {
$badges = $DB->count_records_select('badge', 'status <> ' . BADGE_STATUS_ARCHIVED);
}
$siteinfo['badges'] = $badges;
if (get_config('hub', 'site_issuedbadges_' . $cleanhuburl) == -1) {
$issuedbadges = -1;
} else {
$issuedbadges = $DB->count_records('badge_issued');
}
$siteinfo['issuedbadges'] = $issuedbadges;
//TODO
require_once($CFG->dirroot . "/course/lib.php");
if (get_config('hub', 'site_participantnumberaverage_' . $cleanhuburl) == -1) {
+1 -14
View File
@@ -39,8 +39,6 @@ require_once($CFG->dirroot . '/' . $CFG->admin . '/registration/forms.php');
require_once($CFG->dirroot . '/webservice/lib.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/registration/lib.php');
require_sesskey();
$huburl = required_param('huburl', PARAM_URL);
$huburl = rtrim($huburl, "/");
@@ -68,7 +66,7 @@ if (!empty($fromform) and confirm_sesskey()) {
// Set to -1 all optional data marked as "don't send" by the admin.
// The function get_site_info() will not calculate the optional data if config is set to -1.
$inputnames = array('courses', 'users', 'roleassignments', 'posts', 'questions', 'resources',
'badges', 'issuedbadges', 'modulenumberaverage', 'participantnumberaverage');
'modulenumberaverage', 'participantnumberaverage');
foreach ($inputnames as $inputname) {
if (empty($fromform->{$inputname})) {
$fromform->{$inputname} = -1;
@@ -97,8 +95,6 @@ if (!empty($fromform) and confirm_sesskey()) {
set_config('site_postsnumber_' . $cleanhuburl, $fromform->posts, 'hub');
set_config('site_questionsnumber_' . $cleanhuburl, $fromform->questions, 'hub');
set_config('site_resourcesnumber_' . $cleanhuburl, $fromform->resources, 'hub');
set_config('site_badges_' . $cleanhuburl, $fromform->badges, 'hub');
set_config('site_issuedbadges_' . $cleanhuburl, $fromform->issuedbadges, 'hub');
set_config('site_modulenumberaverage_' . $cleanhuburl, $fromform->modulenumberaverage, 'hub');
set_config('site_participantnumberaverage_' . $cleanhuburl, $fromform->participantnumberaverage, 'hub');
}
@@ -137,8 +133,6 @@ if (!empty($fromform) and empty($update) and confirm_sesskey()) {
$fromform->posts = $siteinfo['posts'];
$fromform->questions = $siteinfo['questions'];
$fromform->resources = $siteinfo['resources'];
$fromform->badges = $siteinfo['badges'];
$fromform->issuedbadges = $siteinfo['issuedbadges'];
$fromform->modulenumberaverage = $siteinfo['modulenumberaverage'];
$fromform->participantnumberaverage = $siteinfo['participantnumberaverage'];
$fromform->street = $siteinfo['street'];
@@ -179,13 +173,6 @@ if (!empty($error)) {
//some Moodle.org resitration explanation
if ($huburl == HUB_MOODLEORGHUBURL) {
if (!empty($registeredhub->token)) {
$registrationmessage = get_string('pleaserefreshregistration', 'admin');
} else {
$registrationmessage = get_string('registrationwarning', 'admin');
}
echo $OUTPUT->notification($registrationmessage);
echo $OUTPUT->heading(get_string('registerwithmoodleorg', 'admin'));
$renderer = $PAGE->get_renderer('core', 'register');
echo $renderer->moodleorg_registration_message();
+6 -11
View File
@@ -36,18 +36,13 @@ class core_register_renderer extends plugin_renderer_base {
* @return string
*/
public function moodleorg_registration_message() {
$moodleorgstatslink = html_writer::link('http://moodle.net/stats',
get_string('statsmoodleorg', 'admin'),
array('target' => '_blank'));
$hublink = html_writer::link('https://moodle.net/mod/page/view.php?id=1',
get_string('moodleorghubname', 'admin'),
array('target' => '_blank'));
$moodleorgregmsg = get_string('registermoodleorg', 'admin', $hublink);
$moodleorgurl = html_writer::link('http://moodle.org', 'Moodle.org');
$moodleorgstatsurl = html_writer::link('http://moodle.org/stats', get_string('statsmoodleorg', 'admin'));
$moochurl = html_writer::link(HUB_MOODLEORGHUBURL, 'Moodle.net');
$moodleorgregmsg = get_string('registermoodleorg', 'admin', $moodleorgurl);
$items = array(get_string('registermoodleorgli1', 'admin'),
get_string('registermoodleorgli2', 'admin', $moodleorgstatslink));
get_string('registermoodleorgli2', 'admin', $moodleorgstatsurl),
get_string('registermoodleorgli3', 'admin', $moochurl));
$moodleorgregmsg .= html_writer::alist($items);
return $moodleorgregmsg;
}
+95 -258
View File
@@ -25,6 +25,7 @@
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/pluginlib.php');
/**
* Standard HTML output renderer for core_admin subsystem
@@ -120,7 +121,7 @@ class core_admin_renderer extends plugin_renderer_base {
$output .= $this->header();
$output .= $this->heading(get_string('pluginscheck', 'admin'));
$output .= $this->warning(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
$output .= $this->plugins_check_table(core_plugin_manager::instance(), $version, array('xdep' => true));
$output .= $this->plugins_check_table(plugin_manager::instance(), $version, array('xdep' => true));
$output .= $this->warning(get_string('pluginschecktodo', 'admin'));
$output .= $this->continue_button($reloadurl);
@@ -134,20 +135,17 @@ class core_admin_renderer extends plugin_renderer_base {
* during upgrade.
* @param string $strnewversion
* @param int $maturity
* @param string $testsite
* @return string HTML to output.
*/
public function upgrade_confirm_page($strnewversion, $maturity, $testsite) {
public function upgrade_confirm_page($strnewversion, $maturity) {
$output = '';
$continueurl = new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'cache' => 0));
$continue = new single_button($continueurl, get_string('continue'), 'get');
$cancelurl = new moodle_url('/admin/index.php');
$continueurl = new moodle_url('index.php', array('confirmupgrade' => 1));
$cancelurl = new moodle_url('index.php');
$output .= $this->header();
$output .= $this->maturity_warning($maturity);
$output .= $this->test_site_warning($testsite);
$output .= $this->confirm(get_string('upgradesure', 'admin', $strnewversion), $continue, $cancelurl);
$output .= $this->confirm(get_string('upgradesure', 'admin', $strnewversion), $continueurl, $cancelurl);
$output .= $this->footer();
return $output;
@@ -170,7 +168,7 @@ class core_admin_renderer extends plugin_renderer_base {
$output .= $this->environment_check_table($envstatus, $environment_results);
if (!$envstatus) {
$output .= $this->upgrade_reload(new moodle_url('/admin/index.php'), array('confirmupgrade' => 1, 'cache' => 0));
$output .= $this->upgrade_reload(new moodle_url('/admin/index.php'), array('confirmupgrade' => 1));
} else {
$output .= $this->notification(get_string('environmentok', 'admin'), 'notifysuccess');
@@ -179,7 +177,7 @@ class core_admin_renderer extends plugin_renderer_base {
$output .= $this->box(get_string('langpackwillbeupdated', 'admin'), 'generalbox', 'notice');
}
$output .= $this->continue_button(new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'confirmrelease' => 1, 'cache' => 0)));
$output .= $this->continue_button(new moodle_url('/admin/index.php', array('confirmupgrade' => 1, 'confirmrelease' => 1)));
}
$output .= $this->footer();
@@ -189,15 +187,15 @@ class core_admin_renderer extends plugin_renderer_base {
/**
* Display the upgrade page that lists all the plugins that require attention.
* @param core_plugin_manager $pluginman provides information about the plugins.
* @param \core\update\checker $checker provides information about available updates.
* @param plugin_manager $pluginman provides information about the plugins.
* @param available_update_checker $checker provides information about available updates.
* @param int $version the version of the Moodle code from version.php.
* @param bool $showallplugins
* @param moodle_url $reloadurl
* @param moodle_url $continueurl
* @return string HTML to output.
*/
public function upgrade_plugin_check_page(core_plugin_manager $pluginman, \core\update\checker $checker,
public function upgrade_plugin_check_page(plugin_manager $pluginman, available_update_checker $checker,
$version, $showallplugins, $reloadurl, $continueurl) {
global $CFG;
@@ -239,11 +237,11 @@ class core_admin_renderer extends plugin_renderer_base {
/**
* Prints a page with a summary of plugin deployment to be confirmed.
*
* @param \core\update\deployer $deployer
* @param array $data deployer's data package as returned by {@link \core\update\deployer::submitted_data()}
* @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(\core\update\deployer $deployer, array $data) {
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.');
@@ -281,10 +279,10 @@ class core_admin_renderer extends plugin_renderer_base {
$output .= $this->output->container(get_string('updatepluginconfirmexternal', 'core_plugin', $repotype), 'updatepluginconfirmexternal');
}
$widget = $deployer->make_execution_widget($data['updateinfo'], $data['returnurl']);
$widget = $deployer->make_execution_widget($data['updateinfo']);
$output .= $this->output->render($widget);
$output .= $this->output->single_button($data['callerurl'], get_string('cancel', 'core'), 'get');
$output .= $this->output->single_button($data['returnurl'], get_string('cancel', 'core'), 'get');
$output .= $this->container_end();
$output .= $this->footer();
@@ -301,15 +299,14 @@ class core_admin_renderer extends plugin_renderer_base {
* @param bool $dbproblems warn db has problems
* @param bool $maintenancemode warn in maintenance mode
* @param bool $buggyiconvnomb warn iconv problems
* @param array|null $availableupdates array of \core\update\info objects or null
* @param array|null $availableupdates array of available_update_info objects or null
* @param int|null $availableupdatesfetch timestamp of the most recent updates fetch or null (unknown)
* @param string[] $cachewarnings An array containing warnings from the Cache API.
*
* @return string HTML to output.
*/
public function admin_notifications_page($maturity, $insecuredataroot, $errorsdisplayed,
$cronoverdue, $dbproblems, $maintenancemode, $availableupdates, $availableupdatesfetch,
$buggyiconvnomb, $registered, array $cachewarnings = array()) {
$buggyiconvnomb, $registered) {
global $CFG;
$output = '';
@@ -322,7 +319,6 @@ class core_admin_renderer extends plugin_renderer_base {
$output .= $this->cron_overdue_warning($cronoverdue);
$output .= $this->db_problems($dbproblems);
$output .= $this->maintenance_mode_warning($maintenancemode);
$output .= $this->cache_warnings($cachewarnings);
$output .= $this->registration_warning($registered);
//////////////////////////////////////////////////////////////////////////////////////////////////
@@ -342,12 +338,12 @@ class core_admin_renderer extends plugin_renderer_base {
* bool contribonly - show only contributed extensions
* bool updatesonly - show only plugins with an available update
*
* @param core_plugin_manager $pluginman
* @param \core\update\checker $checker
* @param plugin_manager $pluginman
* @param available_update_checker $checker
* @param array $options filtering options
* @return string HTML to output.
*/
public function plugin_management_page(core_plugin_manager $pluginman, \core\update\checker $checker, array $options = array()) {
public function plugin_management_page(plugin_manager $pluginman, available_update_checker $checker, array $options = array()) {
global $CFG;
$output = '';
@@ -375,98 +371,6 @@ class core_admin_renderer extends plugin_renderer_base {
return $output;
}
/**
* Display a page to confirm the plugin uninstallation.
*
* @param core_plugin_manager $pluginman
* @param \core\plugininfo\base $pluginfo
* @param moodle_url $continueurl URL to continue after confirmation
* @param moodle_url $cancelurl URL to to go if cancelled
* @return string
*/
public function plugin_uninstall_confirm_page(core_plugin_manager $pluginman, \core\plugininfo\base $pluginfo, moodle_url $continueurl, moodle_url $cancelurl) {
$output = '';
$pluginname = $pluginman->plugin_name($pluginfo->component);
$confirm = '<p>' . get_string('uninstallconfirm', 'core_plugin', array('name' => $pluginname)) . '</p>';
if ($extraconfirm = $pluginfo->get_uninstall_extra_warning()) {
$confirm .= $extraconfirm;
}
$output .= $this->output->header();
$output .= $this->output->heading(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
$output .= $this->output->confirm($confirm, $continueurl, $cancelurl);
$output .= $this->output->footer();
return $output;
}
/**
* Display a page with results of plugin uninstallation and offer removal of plugin files.
*
* @param core_plugin_manager $pluginman
* @param \core\plugininfo\base $pluginfo
* @param progress_trace_buffer $progress
* @param moodle_url $continueurl URL to continue to remove the plugin folder
* @return string
*/
public function plugin_uninstall_results_removable_page(core_plugin_manager $pluginman, \core\plugininfo\base $pluginfo,
progress_trace_buffer $progress, moodle_url $continueurl) {
$output = '';
$pluginname = $pluginman->plugin_name($pluginfo->component);
// Do not show navigation here, they must click one of the buttons.
$this->page->set_pagelayout('maintenance');
$this->page->set_cacheable(false);
$output .= $this->output->header();
$output .= $this->output->heading(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
$output .= $this->output->box($progress->get_buffer(), 'generalbox uninstallresultmessage');
$confirm = $this->output->container(get_string('uninstalldeleteconfirm', 'core_plugin',
array('name' => $pluginname, 'rootdir' => $pluginfo->rootdir)), 'uninstalldeleteconfirm');
if ($repotype = $pluginman->plugin_external_source($pluginfo->component)) {
$confirm .= $this->output->container(get_string('uninstalldeleteconfirmexternal', 'core_plugin', $repotype),
'uninstalldeleteconfirmexternal');
}
// After any uninstall we must execute full upgrade to finish the cleanup!
$output .= $this->output->confirm($confirm, $continueurl, new moodle_url('/admin/index.php'));
$output .= $this->output->footer();
return $output;
}
/**
* Display a page with results of plugin uninstallation and inform about the need to remove plugin files manually.
*
* @param core_plugin_manager $pluginman
* @param \core\plugininfo\base $pluginfo
* @param progress_trace_buffer $progress
* @return string
*/
public function plugin_uninstall_results_page(core_plugin_manager $pluginman, \core\plugininfo\base $pluginfo, progress_trace_buffer $progress) {
$output = '';
$pluginname = $pluginfo->component;
$output .= $this->output->header();
$output .= $this->output->heading(get_string('uninstalling', 'core_plugin', array('name' => $pluginname)));
$output .= $this->output->box($progress->get_buffer(), 'generalbox uninstallresultmessage');
$output .= $this->output->box(get_string('uninstalldelete', 'core_plugin',
array('name' => $pluginname, 'rootdir' => $pluginfo->rootdir)), 'generalbox uninstalldelete');
$output .= $this->output->continue_button(new moodle_url('/admin/index.php'));
$output .= $this->output->footer();
return $output;
}
/**
* Display the plugin management page (admin/environment.php).
* @param array $versions
@@ -564,23 +468,11 @@ class core_admin_renderer extends plugin_renderer_base {
* @return string HTML to output.
*/
public function cron_overdue_warning($cronoverdue) {
global $CFG;
if (!$cronoverdue) {
return '';
}
if (empty($CFG->cronclionly)) {
$url = new moodle_url('/admin/cron.php');
if (!empty($CFG->cronremotepassword)) {
$url = new moodle_url('/admin/cron.php', array('password' => $CFG->cronremotepassword));
}
return $this->warning(get_string('cronwarning', 'admin', $url->out()) . '&nbsp;' .
$this->help_icon('cron', 'admin'));
}
// $CFG->cronclionly is not empty: cron can run only from CLI.
return $this->warning(get_string('cronwarningcli', 'admin') . '&nbsp;' .
return $this->warning(get_string('cronwarning', 'admin') . '&nbsp;' .
$this->help_icon('cron', 'admin'));
}
@@ -597,19 +489,6 @@ class core_admin_renderer extends plugin_renderer_base {
return $this->warning($dbproblems);
}
/**
* Renders cache warnings if there are any.
*
* @param string[] $cachewarnings
* @return string
*/
public function cache_warnings(array $cachewarnings) {
if (!count($cachewarnings)) {
return '';
}
return join("\n", array_map(array($this, 'warning'), $cachewarnings));
}
/**
* Render an appropriate message if the site in in maintenance mode.
* @param bool $maintenancemode
@@ -637,26 +516,10 @@ class core_admin_renderer extends plugin_renderer_base {
}
$maturitylevel = get_string('maturity' . $maturity, 'admin');
return $this->warning(
return $this->box(
$this->container(get_string('maturitycorewarning', 'admin', $maturitylevel)) .
$this->container($this->doc_link('admin/versions', get_string('morehelp'))),
'error');
}
/*
* If necessary, displays a warning about upgrading a test site.
*
* @param string $testsite
* @return string HTML
*/
protected function test_site_warning($testsite) {
if (!$testsite) {
return '';
}
$warning = (get_string('testsiteupgradewarning', 'admin', $testsite));
return $this->warning($warning, 'error');
'generalbox maturitywarning');
}
/**
@@ -688,16 +551,11 @@ class core_admin_renderer extends plugin_renderer_base {
return ''; // No worries.
}
$level = 'warning';
if ($maturity == MATURITY_ALPHA) {
$level = 'error';
}
$maturitylevel = get_string('maturity' . $maturity, 'admin');
$warningtext = get_string('maturitycoreinfo', 'admin', $maturitylevel);
$warningtext .= ' ' . $this->doc_link('admin/versions', get_string('morehelp'));
return $this->warning($warningtext, $level);
return $this->box(
get_string('maturitycoreinfo', 'admin', $maturitylevel) . ' ' .
$this->doc_link('admin/versions', get_string('morehelp')),
'generalbox adminwarning maturityinfo maturity'.$maturity);
}
/**
@@ -706,13 +564,13 @@ class core_admin_renderer extends plugin_renderer_base {
* 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 \core\update\info objects or null
* @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 = '';
$updateinfo = $this->box_start('generalbox adminwarning availableupdatesinfo');
$someupdateavailable = false;
if (is_array($updates)) {
if (is_array($updates['core'])) {
@@ -741,15 +599,16 @@ class core_admin_renderer extends plugin_renderer_base {
}
$updateinfo .= $this->container_start('checkforupdates');
$fetchurl = new moodle_url('/admin/index.php', array('fetchupdates' => 1, 'sesskey' => sesskey(), 'cache' => 0));
$updateinfo .= $this->single_button($fetchurl, get_string('checkforupdates', 'core_plugin'));
$updateinfo .= $this->single_button(new moodle_url($this->page->url, array('fetchupdates' => 1)), get_string('checkforupdates', 'core_plugin'));
if ($fetch) {
$updateinfo .= $this->container(get_string('checkforupdateslast', 'core_plugin',
userdate($fetch, get_string('strftimedatetime', 'core_langconfig'))));
}
$updateinfo .= $this->container_end();
return $this->warning($updateinfo);
$updateinfo .= $this->box_end();
return $updateinfo;
}
/**
@@ -762,7 +621,7 @@ class core_admin_renderer extends plugin_renderer_base {
if (!$registered) {
$registerbutton = $this->single_button(new moodle_url('/admin/registration/register.php',
$registerbutton = $this->single_button(new moodle_url('registration/register.php',
array('huburl' => HUB_MOODLEORGHUBURL, 'hubname' => 'Moodle.org')),
get_string('register', 'admin'));
@@ -776,9 +635,9 @@ class core_admin_renderer extends plugin_renderer_base {
/**
* Helper method to render the information about the available Moodle update
*
* @param \core\update\info $updateinfo information about the available Moodle core update
* @param available_update_info $updateinfo information about the available Moodle core update
*/
protected function moodle_available_update_info(\core\update\info $updateinfo) {
protected function moodle_available_update_info(available_update_info $updateinfo) {
$boxclasses = 'moodleupdateinfo';
$info = array();
@@ -845,12 +704,12 @@ class core_admin_renderer extends plugin_renderer_base {
* (bool)full = false: whether to display up-to-date plugins, too
* (bool)xdep = false: display the plugins with unsatisified dependecies only
*
* @param core_plugin_manager $pluginman provides information about the plugins.
* @param plugin_manager $pluginman provides information about the plugins.
* @param int $version the version of the Moodle code from version.php.
* @param array $options rendering options
* @return string HTML code
*/
public function plugins_check_table(core_plugin_manager $pluginman, $version, array $options = array()) {
public function plugins_check_table(plugin_manager $pluginman, $version, array $options = array()) {
global $CFG;
$plugininfo = $pluginman->get_plugins();
@@ -943,7 +802,7 @@ class core_admin_renderer extends plugin_renderer_base {
$requires = new html_table_cell($this->required_column($plugin, $pluginman, $version));
$statusisboring = in_array($statuscode, array(
core_plugin_manager::PLUGIN_STATUS_NODB, core_plugin_manager::PLUGIN_STATUS_UPTODATE));
plugin_manager::PLUGIN_STATUS_NODB, plugin_manager::PLUGIN_STATUS_UPTODATE));
$coredependency = $plugin->is_core_dependency_satisfied($version);
$otherpluginsdependencies = $pluginman->are_dependencies_satisfied($plugin->get_other_required_plugins());
@@ -955,7 +814,7 @@ class core_admin_renderer extends plugin_renderer_base {
continue;
}
} else if ($statusisboring and $dependenciesok and empty($availableupdates)) {
} else if ($isstandard and $statusisboring and $dependenciesok and empty($availableupdates)) {
// no change is going to happen to the plugin - display it only
// if the user wants to see the full list
if (empty($options['full'])) {
@@ -990,7 +849,7 @@ class core_admin_renderer extends plugin_renderer_base {
$out .= $this->output->heading(get_string('nonehighlighted', 'core_plugin'));
if (empty($options['full'])) {
$out .= html_writer::link(new moodle_url('/admin/index.php',
array('confirmupgrade' => 1, 'confirmrelease' => 1, 'showallplugins' => 1, 'cache' => 0)),
array('confirmupgrade' => 1, 'confirmrelease' => 1, 'showallplugins' => 1)),
get_string('nonehighlightedinfo', 'core_plugin'));
}
$out .= $this->output->container_end();
@@ -1000,11 +859,11 @@ class core_admin_renderer extends plugin_renderer_base {
$out .= $this->output->heading(get_string('somehighlighted', 'core_plugin', $sumofhighlighted));
if (empty($options['full'])) {
$out .= html_writer::link(new moodle_url('/admin/index.php',
array('confirmupgrade' => 1, 'confirmrelease' => 1, 'showallplugins' => 1, 'cache' => 0)),
array('confirmupgrade' => 1, 'confirmrelease' => 1, 'showallplugins' => 1)),
get_string('somehighlightedinfo', 'core_plugin'));
} else {
$out .= html_writer::link(new moodle_url('/admin/index.php',
array('confirmupgrade' => 1, 'confirmrelease' => 1, 'showallplugins' => 0, 'cache' => 0)),
array('confirmupgrade' => 1, 'confirmrelease' => 1, 'showallplugins' => 0)),
get_string('somehighlightedonly', 'core_plugin'));
}
$out .= $this->output->container_end();
@@ -1019,12 +878,12 @@ class core_admin_renderer extends plugin_renderer_base {
/**
* Formats the information that needs to go in the 'Requires' column.
* @param \core\plugininfo\base $plugin the plugin we are rendering the row for.
* @param core_plugin_manager $pluginman provides data on all the plugins.
* @param plugininfo_base $plugin the plugin we are rendering the row for.
* @param plugin_manager $pluginman provides data on all the plugins.
* @param string $version
* @return string HTML code
*/
protected function required_column(\core\plugininfo\base $plugin, core_plugin_manager $pluginman, $version) {
protected function required_column(plugininfo_base $plugin, plugin_manager $pluginman, $version) {
$requires = array();
if (!empty($plugin->versionrequires)) {
@@ -1039,28 +898,19 @@ class core_admin_renderer extends plugin_renderer_base {
}
foreach ($plugin->get_other_required_plugins() as $component => $requiredversion) {
$ok = true;
$otherplugin = $pluginman->get_plugin_info($component);
$actions = array();
if (is_null($otherplugin)) {
// The required plugin is not installed.
$class = 'requires-failed requires-missing';
$installurl = new moodle_url('https://moodle.org/plugins/view.php', array('plugin' => $component));
$uploadurl = new moodle_url('/admin/tool/installaddon/');
$actions[] = html_writer::link($installurl, get_string('dependencyinstall', 'core_plugin'));
$actions[] = html_writer::link($uploadurl, get_string('dependencyupload', 'core_plugin'));
$ok = false;
} else if ($requiredversion != ANY_VERSION and $otherplugin->versiondisk < $requiredversion) {
// The required plugin is installed but needs to be updated.
$class = 'requires-failed requires-outdated';
if (!$otherplugin->is_standard()) {
$updateurl = new moodle_url($this->page->url, array('sesskey' => sesskey(), 'fetchupdates' => 1));
$actions[] = html_writer::link($updateurl, get_string('checkforupdates', 'core_plugin'));
}
$ok = false;
}
} else {
// Already installed plugin with sufficient version.
if ($ok) {
$class = 'requires-ok';
} else {
$class = 'requires-failed';
}
if ($requiredversion != ANY_VERSION) {
@@ -1068,11 +918,11 @@ class core_admin_renderer extends plugin_renderer_base {
} else {
$str = 'otherplugin';
}
$componenturl = new moodle_url('https://moodle.org/plugins/view.php?plugin='.$component);
$componenturl = html_writer::tag('a', $component, array('href' => $componenturl->out()));
$requires[] = html_writer::tag('li',
html_writer::div(get_string($str, 'core_plugin',
array('component' => $component, 'version' => $requiredversion)), 'component').
html_writer::div(implode(' | ', $actions), 'actions'),
get_string($str, 'core_plugin',
array('component' => $componenturl, 'version' => $requiredversion)),
array('class' => $class));
}
@@ -1085,11 +935,11 @@ class core_admin_renderer extends plugin_renderer_base {
/**
* Prints an overview about the plugins - number of installed, number of extensions etc.
*
* @param core_plugin_manager $pluginman provides information about the plugins
* @param plugin_manager $pluginman provides information about the plugins
* @param array $options filtering options
* @return string as usually
*/
public function plugins_overview_panel(core_plugin_manager $pluginman, array $options = array()) {
public function plugins_overview_panel(plugin_manager $pluginman, array $options = array()) {
global $CFG;
$plugininfo = $pluginman->get_plugins();
@@ -1098,7 +948,7 @@ class core_admin_renderer extends plugin_renderer_base {
foreach ($plugininfo as $type => $plugins) {
foreach ($plugins as $name => $plugin) {
if ($plugin->get_status() === core_plugin_manager::PLUGIN_STATUS_MISSING) {
if ($plugin->get_status() === plugin_manager::PLUGIN_STATUS_MISSING) {
continue;
}
$numtotal++;
@@ -1165,11 +1015,11 @@ class core_admin_renderer extends plugin_renderer_base {
*
* This default implementation renders all plugins into one big table.
*
* @param core_plugin_manager $pluginman provides information about the plugins.
* @param plugin_manager $pluginman provides information about the plugins.
* @param array $options filtering options
* @return string HTML code
*/
public function plugins_control_panel(core_plugin_manager $pluginman, array $options = array()) {
public function plugins_control_panel(plugin_manager $pluginman, array $options = array()) {
global $CFG;
$plugininfo = $pluginman->get_plugins();
@@ -1213,32 +1063,26 @@ class core_admin_renderer extends plugin_renderer_base {
get_string('displayname', 'core_plugin'),
get_string('source', 'core_plugin'),
get_string('version', 'core_plugin'),
get_string('release', 'core_plugin'),
get_string('availability', 'core_plugin'),
get_string('actions', 'core_plugin'),
get_string('notes','core_plugin'),
);
$table->headspan = array(1, 1, 1, 1, 1, 2, 1);
$table->colclasses = array(
'pluginname', 'source', 'version', 'release', 'availability', 'settings', 'uninstall', 'notes'
'pluginname', 'source', 'version', 'availability', 'actions', 'notes'
);
foreach ($plugininfo as $type => $plugins) {
$heading = $pluginman->plugintype_name_plural($type);
$pluginclass = core_plugin_manager::resolve_plugininfo_class($type);
if ($manageurl = $pluginclass::get_manage_url()) {
$heading = html_writer::link($manageurl, $heading);
}
$header = new html_table_cell(html_writer::tag('span', $heading, array('id'=>'plugin_type_cell_'.$type)));
$header = new html_table_cell($pluginman->plugintype_name_plural($type));
$header->header = true;
$header->colspan = array_sum($table->headspan);
$header->colspan = count($table->head);
$header = new html_table_row(array($header));
$header->attributes['class'] = 'plugintypeheader type-' . $type;
$table->data[] = $header;
if (empty($plugins)) {
$msg = new html_table_cell(get_string('noneinstalled', 'core_plugin'));
$msg->colspan = array_sum($table->headspan);
$msg->colspan = count($table->head);
$row = new html_table_row(array($msg));
$row->attributes['class'] .= 'msg msg-noneinstalled';
$table->data[] = $row;
@@ -1254,12 +1098,9 @@ class core_admin_renderer extends plugin_renderer_base {
} else {
$icon = $this->output->pix_icon('spacer', '', 'moodle', array('class' => 'icon pluginicon noicon'));
}
$status = $plugin->get_status();
$row->attributes['class'] .= ' status-'.$status;
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
$msg = html_writer::tag('span', get_string('status_missing', 'core_plugin'), array('class' => 'statusmsg'));
} else if ($status === core_plugin_manager::PLUGIN_STATUS_NEW) {
$msg = html_writer::tag('span', get_string('status_new', 'core_plugin'), array('class' => 'statusmsg'));
if ($plugin->get_status() === plugin_manager::PLUGIN_STATUS_MISSING) {
$msg = html_writer::tag('span', get_string('status_missing', 'core_plugin'), array('class' => 'notifyproblem'));
$row->attributes['class'] .= ' missingfromdisk';
} else {
$msg = '';
}
@@ -1276,7 +1117,6 @@ class core_admin_renderer extends plugin_renderer_base {
}
$version = new html_table_cell($plugin->versiondb);
$release = new html_table_cell($plugin->release);
$isenabled = $plugin->is_enabled();
if (is_null($isenabled)) {
@@ -1289,20 +1129,19 @@ class core_admin_renderer extends plugin_renderer_base {
$availability = new html_table_cell(get_string('plugindisabled', 'core_plugin'));
}
$actions = array();
$settingsurl = $plugin->get_settings_url();
if (!is_null($settingsurl)) {
$settings = html_writer::link($settingsurl, get_string('settings', 'core_plugin'), array('class' => 'settings'));
} else {
$settings = '';
$actions[] = html_writer::link($settingsurl, get_string('settings', 'core_plugin'), array('class' => 'settings'));
}
$settings = new html_table_cell($settings);
if ($uninstallurl = $pluginman->get_uninstall_url($plugin->component, 'overview')) {
$uninstall = html_writer::link($uninstallurl, get_string('uninstall', 'core_plugin'));
} else {
$uninstall = '';
$uninstallurl = $plugin->get_uninstall_url();
if (!is_null($uninstallurl)) {
$actions[] = html_writer::link($uninstallurl, get_string('uninstall', 'core_plugin'), array('class' => 'uninstall'));
}
$uninstall = new html_table_cell($uninstall);
$actions = new html_table_cell(implode(html_writer::tag('span', ' ', array('class' => 'separator')), $actions));
$requriedby = $pluginman->other_plugins_that_require($plugin->component);
if ($requriedby) {
@@ -1322,7 +1161,7 @@ class core_admin_renderer extends plugin_renderer_base {
$notes = new html_table_cell($requiredby.$updateinfo);
$row->cells = array(
$pluginname, $source, $version, $release, $availability, $settings, $uninstall, $notes
$pluginname, $source, $version, $availability, $actions, $notes
);
$table->data[] = $row;
}
@@ -1337,9 +1176,9 @@ class core_admin_renderer extends plugin_renderer_base {
* The passed objects always provides at least the 'version' property containing
* the (higher) version of the plugin available.
*
* @param \core\update\info $updateinfo information about the available update for the plugin
* @param available_update_info $updateinfo information about the available update for the plugin
*/
protected function plugin_available_update_info(\core\update\info $updateinfo) {
protected function plugin_available_update_info(available_update_info $updateinfo) {
$boxclasses = 'pluginupdateinfo';
$info = array();
@@ -1368,7 +1207,7 @@ class core_admin_renderer extends plugin_renderer_base {
$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 = \core\update\deployer::instance();
$deployer = available_update_deployer::instance();
if ($deployer->initialized()) {
$impediments = $deployer->deployment_impediments($updateinfo);
if (empty($impediments)) {
@@ -1394,7 +1233,7 @@ class core_admin_renderer extends plugin_renderer_base {
* configuration and how it suits Moodle needs.
*
* @param boolean $result final result of the check (true/false)
* @param environment_results[] $environment_results array of results gathered
* @param array $environment_results array of results gathered
* @return string HTML to output.
*/
public function environment_check_table($result, $environment_results) {
@@ -1406,12 +1245,12 @@ class core_admin_renderer extends plugin_renderer_base {
get_string('name'),
get_string('info'),
get_string('report'),
get_string('plugin'),
get_string('status'),
);
$servertable->colclasses = array('centeralign name', 'centeralign info', 'leftalign report', 'leftalign plugin', 'centeralign status');
$servertable->attributes['class'] = 'admintable environmenttable generaltable';
$servertable->id = 'serverstatus';
$servertable->align = array('center', 'center', 'left', 'center');
$servertable->wrap = array('nowrap', '', '', 'nowrap');
$servertable->size = array('10', 10, '100%', '10');
$servertable->attributes['class'] = 'environmenttable generaltable';
$serverdata = array('ok'=>array(), 'warn'=>array(), 'error'=>array());
@@ -1419,12 +1258,12 @@ class core_admin_renderer extends plugin_renderer_base {
$othertable->head = array(
get_string('info'),
get_string('report'),
get_string('plugin'),
get_string('status'),
);
$othertable->colclasses = array('aligncenter info', 'alignleft report', 'alignleft plugin', 'aligncenter status');
$othertable->attributes['class'] = 'admintable environmenttable generaltable';
$othertable->id = 'otherserverstatus';
$othertable->align = array('center', 'left', 'center');
$othertable->wrap = array('', '', 'nowrap');
$othertable->size = array(10, '100%', '10');
$othertable->attributes['class'] = 'environmenttable generaltable';
$otherdata = array('ok'=>array(), 'warn'=>array(), 'error'=>array());
@@ -1438,7 +1277,6 @@ class core_admin_renderer extends plugin_renderer_base {
$type = $environment_result->getPart();
$info = $environment_result->getInfo();
$status = $environment_result->getStatus();
$plugin = $environment_result->getPluginName();
$error_code = $environment_result->getErrorCode();
// Process Report field
$rec = new stdClass();
@@ -1515,8 +1353,7 @@ class core_admin_renderer extends plugin_renderer_base {
if (!empty($info)){
$linkparts[] = $info;
}
// Plugin environments do not have docs pages yet.
if (empty($CFG->docroot) or $environment_result->plugin) {
if (empty($CFG->docroot)) {
$report = get_string($stringtouse, 'admin', $rec);
} else {
$report = $this->doc_link(join($linkparts, '/'), get_string($stringtouse, 'admin', $rec));
@@ -1542,9 +1379,9 @@ class core_admin_renderer extends plugin_renderer_base {
// Add the row to the table
if ($environment_result->getPart() == 'custom_check'){
$otherdata[$messagetype][] = array ($info, $report, $plugin, $status);
$otherdata[$messagetype][] = array ($info, $report, $status);
} else {
$serverdata[$messagetype][] = array ($type, $info, $report, $plugin, $status);
$serverdata[$messagetype][] = array ($type, $info, $report, $status);
}
}
}
+43 -25
View File
@@ -18,7 +18,7 @@
* Provides an overview of installed reports
*
* Displays the list of found reports, their version (if found) and
* a link to uninstall the report.
* a link to delete the report.
*
* The code is based on admin/localplugins.php by David Mudrak.
*
@@ -33,24 +33,55 @@ require_once($CFG->libdir.'/tablelib.php');
admin_externalpage_setup('managereports');
$delete = optional_param('delete', '', PARAM_PLUGIN);
$confirm = optional_param('confirm', '', PARAM_BOOL);
/// If data submitted, then process and store.
if (!empty($delete) and confirm_sesskey()) {
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('reports'));
if (!$confirm) {
if (get_string_manager()->string_exists('pluginname', 'report_' . $delete)) {
$strpluginname = get_string('pluginname', 'report_' . $delete);
} else {
$strpluginname = $delete;
}
echo $OUTPUT->confirm(get_string('reportsdeleteconfirm', 'admin', $strpluginname),
new moodle_url($PAGE->url, array('delete' => $delete, 'confirm' => 1)),
$PAGE->url);
echo $OUTPUT->footer();
die();
} else {
uninstall_plugin('report', $delete);
$a = new stdclass();
$a->name = $delete;
$pluginlocation = get_plugin_types();
$a->directory = $pluginlocation['report'] . '/' . $delete;
echo $OUTPUT->notification(get_string('plugindeletefiles', '', $a), 'notifysuccess');
echo $OUTPUT->continue_button($PAGE->url);
echo $OUTPUT->footer();
die();
}
}
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('reports'));
/// Print the table of all installed report plugins
$struninstall = get_string('uninstallplugin', 'core_admin');
$table = new flexible_table('reportplugins_administration_table');
$table->define_columns(array('name', 'logstoressupported', 'version', 'uninstall'));
$table->define_headers(array(get_string('plugin'), get_string('logstoressupported', 'admin'), get_string('version'),
$struninstall));
$table->define_columns(array('name', 'version', 'delete'));
$table->define_headers(array(get_string('plugin'), get_string('version'), get_string('delete')));
$table->define_baseurl($PAGE->url);
$table->set_attribute('id', 'reportplugins');
$table->set_attribute('class', 'admintable generaltable');
$table->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
$table->setup();
$plugins = array();
foreach (core_component::get_plugin_list('report') as $plugin => $plugindir) {
foreach (get_plugin_list('report') as $plugin => $plugindir) {
if (get_string_manager()->string_exists('pluginname', 'report_' . $plugin)) {
$strpluginname = get_string('pluginname', 'report_' . $plugin);
} else {
@@ -58,7 +89,7 @@ foreach (core_component::get_plugin_list('report') as $plugin => $plugindir) {
}
$plugins[$plugin] = $strpluginname;
}
core_collator::asort($plugins);
collatorlib::asort($plugins);
$like = $DB->sql_like('plugin', '?', true, true, false, '|');
$params = array('report|_%');
@@ -72,22 +103,9 @@ foreach ($installed as $config) {
}
}
$logmanager = get_log_manager();
foreach ($plugins as $plugin => $name) {
$uninstall = '';
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('report_'.$plugin, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $struninstall);
}
$stores = $logmanager->get_supported_logstores('report_' . $plugin);
if ($stores === false) {
$supportedstores = get_string('logstorenotrequired', 'admin');
} else if (!empty($stores)) {
$supportedstores = implode(', ', $stores);
} else {
$supportedstores = get_string('nosupportedlogstore', 'admin');;
}
$delete = new moodle_url($PAGE->url, array('delete' => $plugin, 'sesskey' => sesskey()));
$delete = html_writer::link($delete, get_string('delete'));
if (!isset($versions[$plugin])) {
if (file_exists("$CFG->dirroot/report/$plugin/version.php")) {
@@ -108,7 +126,7 @@ foreach ($plugins as $plugin => $name) {
}
}
$table->add_data(array($name, $supportedstores, $version, $uninstall));
$table->add_data(array($name, $version, $delete));
}
$table->print_html();
+14 -32
View File
@@ -148,7 +148,6 @@ if (($action == 'edit') || ($action == 'new')) {
}
if ($success) {
// configs saved
core_plugin_manager::reset_caches();
redirect($baseurl);
} else {
print_error('instancenotsaved', 'repository', $baseurl);
@@ -189,7 +188,6 @@ if (($action == 'edit') || ($action == 'new')) {
print_error('invalidplugin', 'repository', '', $repository);
}
$repositorytype->update_visibility(true);
core_plugin_manager::reset_caches();
$return = true;
} else if ($action == 'hide') {
if (!confirm_sesskey()) {
@@ -200,7 +198,6 @@ if (($action == 'edit') || ($action == 'new')) {
print_error('invalidplugin', 'repository', '', $repository);
}
$repositorytype->update_visibility(false);
core_plugin_manager::reset_caches();
$return = true;
} else if ($action == 'delete') {
$repositorytype = repository::get_type_by_typename($repository);
@@ -211,7 +208,6 @@ if (($action == 'edit') || ($action == 'new')) {
}
if ($repositorytype->delete($downloadcontents)) {
core_plugin_manager::reset_caches();
redirect($baseurl);
} else {
print_error('instancenotdeleted', 'repository', $baseurl);
@@ -264,7 +260,6 @@ if (($action == 'edit') || ($action == 'new')) {
$strshow = get_string('on', 'repository');
$strhide = get_string('off', 'repository');
$strdelete = get_string('disabled', 'repository');
$struninstall = get_string('uninstallplugin', 'core_admin');
$actionchoicesforexisting = array(
'show' => $strshow,
@@ -287,21 +282,18 @@ if (($action == 'edit') || ($action == 'new')) {
// Table to list plug-ins
$table = new html_table();
$table->head = array(get_string('name'), get_string('isactive', 'repository'), get_string('order'), $settingsstr, $struninstall);
$table->colclasses = array('leftalign', 'centeralign', 'centeralign', 'centeralign', 'centeralign', 'centeralign');
$table->id = 'repositoriessetting';
$table->head = array(get_string('name'), get_string('isactive', 'repository'), get_string('order'), $settingsstr);
$table->align = array('left', 'center', 'center', 'center', 'center');
$table->data = array();
$table->attributes['class'] = 'admintable generaltable';
// Get list of used plug-ins
$repositorytypes = repository::get_types();
// Array to store plugins being used
$alreadyplugins = array();
if (!empty($repositorytypes)) {
$totalrepositorytypes = count($repositorytypes);
$instances = repository::get_types();
if (!empty($instances)) {
// Array to store plugins being used
$alreadyplugins = array();
$totalinstances = count($instances);
$updowncount = 1;
foreach ($repositorytypes as $i) {
foreach ($instances as $i) {
$settings = '';
$typename = $i->get_typename();
// Display edit link only if you can config the type or if it has multiple instances (e.g. has instance config)
@@ -324,10 +316,9 @@ if (($action == 'edit') || ($action == 'new')) {
$userinstances = array();
foreach ($instances as $instance) {
$repocontext = context::instance_by_id($instance->instance->contextid);
if ($repocontext->contextlevel == CONTEXT_COURSE) {
if ($instance->context->contextlevel == CONTEXT_COURSE) {
$courseinstances[] = $instance;
} else if ($repocontext->contextlevel == CONTEXT_USER) {
} else if ($instance->context->contextlevel == CONTEXT_USER) {
$userinstances[] = $instance;
}
}
@@ -375,7 +366,7 @@ if (($action == 'edit') || ($action == 'new')) {
else {
$updown .= $spacer;
}
if ($updowncount < $totalrepositorytypes) {
if ($updowncount < $totalinstances) {
$updown .= "<a href=\"$sesskeyurl&amp;action=movedown&amp;repos=".$typename."\">";
$updown .= "<img src=\"" . $OUTPUT->pix_url('t/down') . "\" alt=\"down\" /></a>";
}
@@ -385,12 +376,7 @@ if (($action == 'edit') || ($action == 'new')) {
$updowncount++;
$uninstall = '';
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('repository_' . $typename, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $struninstall);
}
$table->data[] = array($i->get_readablename(), $OUTPUT->render($select), $updown, $settings, $uninstall);
$table->data[] = array($i->get_readablename(), $OUTPUT->render($select), $updown, $settings);
if (!in_array($typename, $alreadyplugins)) {
$alreadyplugins[] = $typename;
@@ -399,18 +385,14 @@ if (($action == 'edit') || ($action == 'new')) {
}
// Get all the plugins that exist on disk
$plugins = core_component::get_plugin_list('repository');
$plugins = get_plugin_list('repository');
if (!empty($plugins)) {
foreach ($plugins as $plugin => $dir) {
// Check that it has not already been listed
if (!in_array($plugin, $alreadyplugins)) {
$select = new single_select(repository_action_url($plugin, 'repos'), 'action', $actionchoicesfornew, 'delete', null, 'applyto' . basename($plugin));
$select->set_label(get_string('action'), array('class' => 'accesshide'));
$uninstall = '';
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('repository_' . $plugin, 'manage')) {
$uninstall = html_writer::link($uninstallurl, $struninstall);
}
$table->data[] = array(get_string('pluginname', 'repository_'.$plugin), $OUTPUT->render($select), '', '', $uninstall);
$table->data[] = array(get_string('pluginname', 'repository_'.$plugin), $OUTPUT->render($select), '', '');
}
}
}
+2 -5
View File
@@ -62,7 +62,7 @@ $return = true;
if (!empty($edit) || !empty($new)) {
if (!empty($edit)) {
$instance = repository::get_instance($edit);
if (!$instance->can_be_edited_by_user()) {
if ($instance->instance->contextid != $context->id) {
throw new repository_exception('nopermissiontoaccess', 'repository');
}
$instancetype = repository::get_type_by_id($instance->options['typeid']);
@@ -102,7 +102,6 @@ if (!empty($edit) || !empty($new)) {
$data = data_submitted();
}
if ($success) {
core_plugin_manager::reset_caches();
redirect($parenturl);
} else {
print_error('instancenotsaved', 'repository', $parenturl);
@@ -119,20 +118,18 @@ if (!empty($edit) || !empty($new)) {
} else if (!empty($hide)) {
$instance = repository::get_type_by_typename($hide);
$instance->hide();
core_plugin_manager::reset_caches();
$return = true;
} else if (!empty($delete)) {
$instance = repository::get_instance($delete);
if ($instance->readonly) {
// If you try to delete an instance set as readonly, display an error message.
throw new repository_exception('readonlyinstance', 'repository');
} else if (!$instance->can_be_edited_by_user()) {
} else if ($instance->instance->contextid != $context->id) {
throw new repository_exception('nopermissiontoaccess', 'repository');
}
if ($sure) {
if ($instance->delete($downloadcontents)) {
$deletedstr = get_string('instancedeleted', 'repository');
core_plugin_manager::reset_caches();
redirect($parenturl, $deletedstr, 3);
} else {
print_error('instancenotdeleted', 'repository', $parenturl);
+24 -21
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,15 +16,16 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Select site administrators.
* Lets you site administrators
*
* @package core_role
* @copyright 2010 Petr Skoda {@link http://skodak.org}
* @package core
* @subpackage role
* @copyright 2010 Petr Skoda (skodak) http://skodak.org
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$confirmadd = optional_param('confirmadd', 0, PARAM_INT);
$confirmdel = optional_param('confirmdel', 0, PARAM_INT);
@@ -35,10 +37,10 @@ if (!is_siteadmin()) {
die;
}
$admisselector = new core_role_admins_existing_selector();
$admisselector = new admins_existing_selector();
$admisselector->set_extra_fields(array('username', 'email'));
$potentialadmisselector = new core_role_admins_potential_selector();
$potentialadmisselector = new admins_potential_selector();
$potentialadmisselector->set_extra_fields(array('username', 'email'));
if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
@@ -46,8 +48,7 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
$user = reset($userstoadd);
$username = fullname($user) . " ($user->username, $user->email)";
echo $OUTPUT->header();
$yesurl = new moodle_url('/admin/roles/admins.php', array('confirmadd'=>$user->id, 'sesskey'=>sesskey()));
echo $OUTPUT->confirm(get_string('confirmaddadmin', 'core_role', $username), $yesurl, $PAGE->url);
echo $OUTPUT->confirm(get_string('confirmaddadmin', 'role', $username), new moodle_url('/admin/roles/admins.php', array('confirmadd'=>$user->id, 'sesskey'=>sesskey())), $PAGE->url);
echo $OUTPUT->footer();
die;
}
@@ -56,12 +57,11 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
if ($userstoremove = $admisselector->get_selected_users()) {
$user = reset($userstoremove);
if ($USER->id == $user->id) {
// Can not remove self.
//can not remove self
} else {
$username = fullname($user) . " ($user->username, $user->email)";
echo $OUTPUT->header();
$yesurl = new moodle_url('/admin/roles/admins.php', array('confirmdel'=>$user->id, 'sesskey'=>sesskey()));
echo $OUTPUT->confirm(get_string('confirmdeladmin', 'core_role', $username), $yesurl, $PAGE->url);
echo $OUTPUT->confirm(get_string('confirmdeladmin', 'role', $username), new moodle_url('/admin/roles/admins.php', array('confirmdel'=>$user->id, 'sesskey'=>sesskey())), $PAGE->url);
echo $OUTPUT->footer();
die;
}
@@ -72,7 +72,7 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
$newmain = reset($newmain);
$newmain = $newmain->id;
$admins = array();
foreach (explode(',', $CFG->siteadmins) as $admin) {
foreach(explode(',', $CFG->siteadmins) as $admin) {
$admin = (int)$admin;
if ($admin) {
$admins[$admin] = $admin;
@@ -89,7 +89,7 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
} else if ($confirmadd and confirm_sesskey()) {
$admins = array();
foreach (explode(',', $CFG->siteadmins) as $admin) {
foreach(explode(',', $CFG->siteadmins) as $admin) {
$admin = (int)$admin;
if ($admin) {
$admins[$admin] = $admin;
@@ -101,7 +101,7 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
} else if ($confirmdel and confirm_sesskey() and $confirmdel != $USER->id) {
$admins = array();
foreach (explode(',', $CFG->siteadmins) as $admin) {
foreach(explode(',', $CFG->siteadmins) as $admin) {
$admin = (int)$admin;
if ($admin) {
$admins[$admin] = $admin;
@@ -112,12 +112,12 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) {
redirect($PAGE->url);
}
// Print header.
/// Print header
echo $OUTPUT->header();
?>
<div id="addadmisform">
<h3 class="main"><?php print_string('manageadmins', 'core_role'); ?></h3>
<h3 class="main"><?php print_string('manageadmins', 'role'); ?></h3>
<form id="assignform" method="post" action="<?php echo $PAGE->url ?>">
<div>
@@ -127,18 +127,18 @@ echo $OUTPUT->header();
<tr>
<td id='existingcell'>
<p>
<label for="removeselect"><?php print_string('existingadmins', 'core_role'); ?></label>
<label for="removeselect"><?php print_string('existingadmins', 'role'); ?></label>
</p>
<?php $admisselector->display(); ?>
</td>
<td id="buttonscell">
<td id='buttonscell'>
<p class="arrow_button">
<input name="add" id="add" type="submit" value="<?php echo $OUTPUT->larrow().'&nbsp;'.get_string('add'); ?>" title="<?php print_string('add'); ?>" /><br />
<input name="remove" id="remove" type="submit" value="<?php echo get_string('remove').'&nbsp;'.$OUTPUT->rarrow(); ?>" title="<?php print_string('remove'); ?>" />
<input name="main" id="main" type="submit" value="<?php echo get_string('mainadminset', 'core_role'); ?>" title="<?php print_string('mainadminset', 'core_role'); ?>" />
<input name="main" id="main" type="submit" value="<?php echo get_string('mainadminset', 'role'); ?>" title="<?php print_string('mainadminset', 'role'); ?>" />
</p>
</td>
<td id="potentialcell">
<td id='potentialcell'>
<p>
<label for="addselect"><?php print_string('users'); ?></label>
</p>
@@ -152,4 +152,7 @@ echo $OUTPUT->header();
<?php
//this must be after calling display() on the selectors so their setup JS executes first
//////$PAGE->requires->js_function_call('init_add_remove_admis_page');
echo $OUTPUT->footer();
+10 -22
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,21 +16,23 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Allow overriding of roles by other roles.
* Allow overriding of roles by other roles
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$mode = required_param('mode', PARAM_ALPHANUMEXT);
$classformode = array(
'assign' => 'core_role_allow_assign_page',
'override' => 'core_role_allow_override_page',
'switch' => 'core_role_allow_switch_page'
'assign' => 'role_allow_assign_page',
'override' => 'role_allow_override_page',
'switch' => 'role_allow_switch_page'
);
if (!isset($classformode[$mode])) {
print_error('invalidmode', '', '', $mode);
@@ -45,23 +48,8 @@ $controller = new $classformode[$mode]();
if (optional_param('submit', false, PARAM_BOOL) && data_submitted() && confirm_sesskey()) {
$controller->process_submission();
$syscontext->mark_dirty();
$event = null;
// Create event depending on mode.
switch ($mode) {
case 'assign':
$event = \core\event\role_allow_assign_updated::create(array('context' => $syscontext));
break;
case 'override':
$event = \core\event\role_allow_override_updated::create(array('context' => $syscontext));
break;
case 'switch':
$event = \core\event\role_allow_switch_updated::create(array('context' => $syscontext));
break;
}
if ($event) {
$event->trigger();
}
mark_context_dirty($syscontext->path);
add_to_log(SITEID, 'role', 'edit allow ' . $mode, str_replace($CFG->wwwroot . '/', '', $baseurl), '', '', $USER->id);
redirect($baseurl);
}
+50 -68
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,21 +16,21 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Assign roles to users.
* Lets you assign roles to users in a particular context.
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../config.php');
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
define("MAX_USERS_TO_LIST_PER_ROLE", 10);
$contextid = required_param('contextid', PARAM_INT);
$roleid = optional_param('roleid', 0, PARAM_INT);
$returnto = optional_param('return', null, PARAM_ALPHANUMEXT);
$contextid = required_param('contextid',PARAM_INT);
$roleid = optional_param('roleid', 0, PARAM_INT);
list($context, $course, $cm) = get_context_info_array($contextid);
@@ -50,25 +51,25 @@ if ($course) {
}
// Security.
// security
require_login($course, false, $cm);
require_capability('moodle/role:assign', $context);
$PAGE->set_url($url);
$PAGE->set_context($context);
$contextname = $context->get_context_name();
$contextname = print_context_name($context);
$courseid = $course->id;
// These are needed early because of tabs.php.
// These are needed early because of tabs.php
list($assignableroles, $assigncounts, $nameswithcounts) = get_assignable_roles($context, ROLENAME_BOTH, true);
$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
// Make sure this user can assign this role.
// Make sure this user can assign this role
if ($roleid && !isset($assignableroles[$roleid])) {
$a = new stdClass;
$a->roleid = $roleid;
$a->context = $contextname;
print_error('cannotassignrolehere', '', $context->get_url(), $a);
print_error('cannotassignrolehere', '', get_context_url($context), $a);
}
// Work out an appropriate page title.
@@ -76,12 +77,12 @@ if ($roleid) {
$a = new stdClass;
$a->role = $assignableroles[$roleid];
$a->context = $contextname;
$title = get_string('assignrolenameincontext', 'core_role', $a);
$title = get_string('assignrolenameincontext', 'role', $a);
} else {
if ($isfrontpage) {
$title = get_string('frontpageroles', 'admin');
} else {
$title = get_string('assignrolesin', 'core_role', $contextname);
$title = get_string('assignrolesin', 'role', $contextname);
}
}
@@ -91,10 +92,10 @@ if ($roleid) {
// Create the user selector objects.
$options = array('context' => $context, 'roleid' => $roleid);
$potentialuserselector = core_role_get_potential_user_selector($context, 'addselect', $options);
$currentuserselector = new core_role_existing_role_holders('removeselect', $options);
$potentialuserselector = roles_get_potential_user_selector($context, 'addselect', $options);
$currentuserselector = new existing_role_holders('removeselect', $options);
// Process incoming role assignments.
// Process incoming role assignments
$errors = array();
if (optional_param('add', false, PARAM_BOOL) && confirm_sesskey()) {
$userstoassign = $potentialuserselector->get_selected_users();
@@ -111,24 +112,28 @@ if ($roleid) {
$potentialuserselector->invalidate_selected_users();
$currentuserselector->invalidate_selected_users();
$rolename = $assignableroles[$roleid];
add_to_log($course->id, 'role', 'assign', 'admin/roles/assign.php?contextid='.$context->id.'&roleid='.$roleid, $rolename, '', $USER->id);
// Counts have changed, so reload.
list($assignableroles, $assigncounts, $nameswithcounts) = get_assignable_roles($context, ROLENAME_BOTH, true);
}
}
// Process incoming role unassignments.
// Process incoming role unassignments
if (optional_param('remove', false, PARAM_BOOL) && confirm_sesskey()) {
$userstounassign = $currentuserselector->get_selected_users();
if (!empty($userstounassign)) {
foreach ($userstounassign as $removeuser) {
// Unassign only roles that are added manually, no messing with other components!!!
//unassign only roles that are added manually, no messing with other components!!!
role_unassign($roleid, $removeuser->id, $context->id, '');
}
$potentialuserselector->invalidate_selected_users();
$currentuserselector->invalidate_selected_users();
$rolename = $assignableroles[$roleid];
add_to_log($course->id, 'role', 'unassign', 'admin/roles/assign.php?contextid='.$context->id.'&roleid='.$roleid, $rolename, '', $USER->id);
// Counts have changed, so reload.
list($assignableroles, $assigncounts, $nameswithcounts) = get_assignable_roles($context, ROLENAME_BOTH, true);
}
@@ -140,7 +145,6 @@ $PAGE->set_title($title);
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
break;
case CONTEXT_USER:
@@ -149,17 +153,17 @@ switch ($context->contextlevel) {
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading($SITE->fullname);
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
$PAGE->set_heading(get_string('frontpage', 'admin'));
admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading($context->get_context_name(false));
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
@@ -170,28 +174,25 @@ switch ($context->contextlevel) {
echo $OUTPUT->header();
// Print heading.
echo $OUTPUT->heading_with_help($title, 'assignroles', 'core_role');
echo $OUTPUT->heading_with_help($title, 'assignroles', 'role');
if ($roleid) {
// Show UI for assigning a particular role to users.
// Print a warning if we are assigning system roles.
if ($context->contextlevel == CONTEXT_SYSTEM) {
echo $OUTPUT->notification(get_string('globalroleswarning', 'core_role'));
echo $OUTPUT->box(get_string('globalroleswarning', 'role'));
}
// Print the form.
$assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
if ($returnto !== null) {
$assignurl->param('return', $returnto);
}
$assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
?>
<form id="assignform" method="post" action="<?php echo $assignurl ?>"><div>
<input type="hidden" name="sesskey" value="<?php echo sesskey() ?>" />
<table id="assigningrole" summary="" class="admintable roleassigntable generaltable" cellspacing="0">
<table summary="" class="roleassigntable generaltable generalbox boxaligncenter" cellspacing="0">
<tr>
<td id="existingcell">
<p><label for="removeselect"><?php print_string('extusers', 'core_role'); ?></label></p>
<p><label for="removeselect"><?php print_string('extusers', 'role'); ?></label></p>
<?php $currentuserselector->display() ?>
</td>
<td id="buttonscell">
@@ -204,7 +205,7 @@ if ($roleid) {
</div>
</td>
<td id="potentialcell">
<p><label for="addselect"><?php print_string('potusers', 'core_role'); ?></label></p>
<p><label for="addselect"><?php print_string('potusers', 'role'); ?></label></p>
<?php $potentialuserselector->display() ?>
</td>
</tr>
@@ -228,45 +229,37 @@ if ($roleid) {
// Print a form to swap roles, and a link back to the all roles list.
echo '<div class="backlink">';
$newroleurl = new moodle_url($PAGE->url);
if ($returnto !== null) {
$newroleurl->param('return', $returnto);
}
$select = new single_select($newroleurl, 'roleid', $nameswithcounts, $roleid, null);
$select->label = get_string('assignanotherrole', 'core_role');
$select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
$select->label = get_string('assignanotherrole', 'role');
echo $OUTPUT->render($select);
$backurl = new moodle_url('/admin/roles/assign.php', array('contextid' => $contextid));
if ($returnto !== null) {
$backurl->param('return', $returnto);
}
echo '<p><a href="' . $backurl->out() . '">' . get_string('backtoallroles', 'core_role') . '</a></p>';
echo '<p><a href="' . $backurl->out() . '">' . get_string('backtoallroles', 'role') . '</a></p>';
echo '</div>';
} else if (empty($assignableroles)) {
// Print a message that there are no roles that can me assigned here.
echo $OUTPUT->heading(get_string('notabletoassignroleshere', 'core_role'), 3);
echo $OUTPUT->heading(get_string('notabletoassignroleshere', 'role'), 3);
} else {
// Show UI for choosing a role to assign.
// Print a warning if we are assigning system roles.
if ($context->contextlevel == CONTEXT_SYSTEM) {
echo $OUTPUT->notification(get_string('globalroleswarning', 'core_role'));
echo $OUTPUT->box(get_string('globalroleswarning', 'role'));
}
// Print instruction.
echo $OUTPUT->heading(get_string('chooseroletoassign', 'core_role'), 3);
// Print instruction
echo $OUTPUT->heading(get_string('chooseroletoassign', 'role'), 3);
// Get the names of role holders for roles with between 1 and MAX_USERS_TO_LIST_PER_ROLE users,
// and so determine whether to show the extra column.
$roleholdernames = array();
$strmorethanmax = get_string('morethan', 'core_role', MAX_USERS_TO_LIST_PER_ROLE);
$strmorethanmax = get_string('morethan', 'role', MAX_USERS_TO_LIST_PER_ROLE);
$showroleholders = false;
foreach ($assignableroles as $roleid => $notused) {
$roleusers = '';
if (0 < $assigncounts[$roleid] && $assigncounts[$roleid] <= MAX_USERS_TO_LIST_PER_ROLE) {
$userfields = 'u.id, u.username, ' . get_all_user_name_fields(true, 'u');
$roleusers = get_role_users($roleid, $context, false, $userfields);
$roleusers = get_role_users($roleid, $context, false, 'u.id, u.firstname, u.lastname');
if (!empty($roleusers)) {
$strroleusers = array();
foreach ($roleusers as $user) {
@@ -277,32 +270,28 @@ if ($roleid) {
}
} else if ($assigncounts[$roleid] > MAX_USERS_TO_LIST_PER_ROLE) {
$assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
if ($returnto !== null) {
$assignurl->param('return', $returnto);
}
$roleholdernames[$roleid] = '<a href="'.$assignurl.'">'.$strmorethanmax.'</a>';
} else {
$roleholdernames[$roleid] = '';
}
}
// Print overview table.
// Print overview table
$table = new html_table();
$table->id = 'assignrole';
$table->head = array(get_string('role'), get_string('description'), get_string('userswiththisrole', 'core_role'));
$table->colclasses = array('leftalign role', 'leftalign', 'centeralign userrole');
$table->attributes['class'] = 'admintable generaltable';
$table->tablealign = 'center';
$table->width = '60%';
$table->head = array(get_string('role'), get_string('description'), get_string('userswiththisrole', 'role'));
$table->wrap = array('nowrap', '', 'nowrap');
$table->align = array('left', 'left', 'center');
if ($showroleholders) {
$table->headspan = array(1, 1, 2);
$table->colclasses[] = 'leftalign roleholder';
$table->wrap[] = 'nowrap';
$table->align[] = 'left';
}
foreach ($assignableroles as $roleid => $rolename) {
$description = format_string($DB->get_field('role', 'description', array('id'=>$roleid)));
$assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
if ($returnto !== null) {
$assignurl->param('return', $returnto);
}
$row = array('<a href="'.$assignurl.'">'.$rolename.'</a>',
$description, $assigncounts[$roleid]);
if ($showroleholders) {
@@ -314,15 +303,8 @@ if ($roleid) {
echo html_writer::table($table);
if ($context->contextlevel > CONTEXT_USER) {
if ($context->contextlevel === CONTEXT_COURSECAT && $returnto === 'management') {
$url = new moodle_url('/course/management.php', array('categoryid' => $context->instanceid));
} else {
$url = $context->get_url();
}
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href' => $url));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
}
+21 -27
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -17,14 +18,16 @@
/**
* Shows the result of has_capability for every capability for a user in a context.
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$contextid = required_param('contextid', PARAM_INT);
$contextid = required_param('contextid',PARAM_INT);
list($context, $course, $cm) = get_context_info_array($contextid);
@@ -44,41 +47,32 @@ if ($course) {
}
}
// Security first.
// security first
require_login($course, false, $cm);
if (!has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:manage'), $context)) {
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'core_role'));
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'role'));
}
$PAGE->set_url($url);
if ($context->contextlevel == CONTEXT_USER and $USER->id != $context->instanceid) {
$PAGE->navigation->extend_for_user($user);
$PAGE->set_context(context_course::instance($course->id));
} else {
$PAGE->set_context($context);
}
$PAGE->set_context($context);
$courseid = $course->id;
$contextname = $context->get_context_name();
$contextname = print_context_name($context);
// Get the user_selector we will need.
// 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 core_role_check_users_selector('reportuser', $options);
$userselector = new role_check_users_selector('reportuser', $options);
$userselector->set_rows(20);
// Work out an appropriate page title.
$title = get_string('checkpermissionsin', 'core_role', $contextname);
$title = get_string('checkpermissionsin', 'role', $contextname);
$PAGE->set_pagelayout('admin');
$PAGE->set_title($title);
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
require_once($CFG->libdir.'/adminlib.php');
admin_externalpage_setup('checkpermissions', '', array('contextid' => $contextid));
break;
case CONTEXT_USER:
@@ -87,17 +81,17 @@ switch ($context->contextlevel) {
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading($SITE->fullname);
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
$PAGE->set_heading(get_string('frontpage', 'admin'));
admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php');
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading($context->get_context_name(false));
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
@@ -123,7 +117,7 @@ if (!is_null($reportuser)) {
echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
if (!empty($roleassignments)) {
echo $OUTPUT->heading(get_string('rolesforuser', 'core_role', fullname($reportuser)), 3);
echo $OUTPUT->heading(get_string('rolesforuser', 'role', fullname($reportuser)), 3);
echo html_writer::start_tag('ul');
$systemcontext = context_system::instance();
@@ -137,20 +131,20 @@ if (!is_null($reportuser)) {
array('action' => 'view', 'roleid' => $ra->roleid)), $rolename);
}
echo html_writer::tag('li', get_string('roleincontext', 'core_role',
echo html_writer::tag('li', get_string('roleincontext', 'role',
array('role' => $rolename, 'context' => $link)));
}
echo html_writer::end_tag('ul');
}
echo $OUTPUT->heading(get_string('permissionsforuser', 'core_role', fullname($reportuser)), 3);
$table = new core_role_check_capability_table($context, $reportuser, $contextname);
echo $OUTPUT->heading(get_string('permissionsforuser', 'role', fullname($reportuser)), 3);
$table = new check_capability_table($context, $reportuser, $contextname);
$table->display();
echo $OUTPUT->box_end();
$selectheading = get_string('selectanotheruser', 'core_role');
$selectheading = get_string('selectanotheruser', 'role');
} else {
$selectheading = get_string('selectauser', 'core_role');
$selectheading = get_string('selectauser', 'role');
}
// Show UI for choosing a user to report on.
@@ -171,14 +165,14 @@ echo $OUTPUT->heading('<label for="reportuser">' . $selectheading . '</label>',
$userselector->display();
// Submit button and the end of the form.
echo '<p id="chooseusersubmit"><input type="submit" value="' . get_string('showthisuserspermissions', 'core_role') . '" /></p>';
echo '<p id="chooseusersubmit"><input type="submit" value="' . get_string('showthisuserspermissions', 'role') . '" /></p>';
echo '</form>';
echo $OUTPUT->box_end();
// Appropriate back link.
if ($context->contextlevel > CONTEXT_USER) {
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>$context->get_url()));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
@@ -1,98 +0,0 @@
<?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/>.
/**
* Existing admin user selector.
*
* @package core_role
* @copyright 2010 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot.'/user/selector/lib.php');
class core_role_admins_existing_selector extends user_selector_base {
/**
* Create instance.
*
* @param string $name control name
* @param array $options should have two elements with keys groupid and courseid.
*/
public function __construct($name = null, $options = array()) {
if (is_null($name)) {
$name = 'removeselect';
}
$options['multiselect'] = false;
parent::__construct($name, $options);
}
public function find_users($search) {
global $DB, $CFG;
list($wherecondition, $params) = $this->search_sql($search, '');
$fields = 'SELECT ' . $this->required_fields_sql('');
if ($wherecondition) {
$wherecondition = "$wherecondition AND id IN ($CFG->siteadmins)";
} else {
$wherecondition = "id IN ($CFG->siteadmins)";
}
$sql = " FROM {user}
WHERE $wherecondition";
list($sort, $sortparams) = users_order_by_sql('', $search, $this->accesscontext);
$params = array_merge($params, $sortparams);
$order = ' ORDER BY ' . $sort;
$availableusers = $DB->get_records_sql($fields . $sql . $order, $params);
if (empty($availableusers)) {
return array();
}
$mainadmin = array();
$mainadminuser = get_admin();
if ($mainadminuser && isset($availableusers[$mainadminuser->id])) {
$mainadmin = array($mainadminuser->id => $availableusers[$mainadminuser->id]);
unset($availableusers[$mainadminuser->id]);
}
$result = array();
if ($mainadmin) {
$result[get_string('mainadmin', 'core_role')] = $mainadmin;
}
if ($availableusers) {
if ($search) {
$groupname = get_string('extusersmatching', 'core_role', $search);
} else {
$groupname = get_string('extusers', 'core_role');
}
$result[$groupname] = $availableusers;
}
return $result;
}
protected function get_options() {
global $CFG;
$options = parent::get_options();
$options['file'] = $CFG->admin . '/roles/lib.php';
return $options;
}
}
@@ -1,91 +0,0 @@
<?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/>.
/**
* Potential admin user selector.
*
* @package core_role
* @copyright 2010 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot.'/user/selector/lib.php');
class core_role_admins_potential_selector extends user_selector_base {
/**
* Create instance.
*
* @param string $name control name
* @param array $options should have two elements with keys groupid and courseid.
*/
public function __construct($name = null, $options = array()) {
global $CFG;
if (is_null($name)) {
$name = 'addselect';
}
$options['multiselect'] = false;
$options['exclude'] = explode(',', $CFG->siteadmins);
parent::__construct($name, $options);
}
public function find_users($search) {
global $CFG, $DB;
list($wherecondition, $params) = $this->search_sql($search, '');
$fields = 'SELECT ' . $this->required_fields_sql('');
$countfields = 'SELECT COUNT(1)';
$sql = " FROM {user}
WHERE $wherecondition AND mnethostid = :localmnet";
// It could be dangerous to make remote users admins and also this could lead to other problems.
$params['localmnet'] = $CFG->mnet_localhost_id;
list($sort, $sortparams) = users_order_by_sql('', $search, $this->accesscontext);
$order = ' ORDER BY ' . $sort;
// Check to see if there are too many to show sensibly.
if (!$this->is_validating()) {
$potentialcount = $DB->count_records_sql($countfields . $sql, $params);
if ($potentialcount > $this->maxusersperpage) {
return $this->too_many_results($search, $potentialcount);
}
}
$availableusers = $DB->get_records_sql($fields . $sql . $order, array_merge($params, $sortparams));
if (empty($availableusers)) {
return array();
}
if ($search) {
$groupname = get_string('potusersmatching', 'core_role', $search);
} else {
$groupname = get_string('potusers', 'core_role');
}
return array($groupname => $availableusers);
}
protected function get_options() {
global $CFG;
$options = parent::get_options();
$options['file'] = $CFG->admin . '/roles/lib.php';
return $options;
}
}
-49
View File
@@ -1,49 +0,0 @@
<?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/>.
/**
* Role assign matrix.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Subclass of role_allow_role_page for the Allow assigns tab.
*/
class core_role_allow_assign_page extends core_role_allow_role_page {
public function __construct() {
parent::__construct('role_allow_assign', 'allowassign');
}
protected function set_allow($fromroleid, $targetroleid) {
allow_assign($fromroleid, $targetroleid);
}
protected function get_cell_tooltip($fromrole, $targetrole) {
$a = new stdClass;
$a->fromrole = $fromrole->localname;
$a->targetrole = $targetrole->localname;
return get_string('allowroletoassign', 'core_role', $a);
}
public function get_intro_text() {
return get_string('configallowassign', 'core_admin');
}
}
@@ -1,49 +0,0 @@
<?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/>.
/**
* Role override matrix.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Subclass of role_allow_role_page for the Allow overrides tab.
*/
class core_role_allow_override_page extends core_role_allow_role_page {
public function __construct() {
parent::__construct('role_allow_override', 'allowoverride');
}
protected function set_allow($fromroleid, $targetroleid) {
allow_override($fromroleid, $targetroleid);
}
protected function get_cell_tooltip($fromrole, $targetrole) {
$a = new stdClass;
$a->fromrole = $fromrole->localname;
$a->targetrole = $targetrole->localname;
return get_string('allowroletooverride', 'core_role', $a);
}
public function get_intro_text() {
return get_string('configallowoverride2', 'core_admin');
}
}
-164
View File
@@ -1,164 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Base class for allow matrices.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Base class for managing the data in the grid of checkboxes on the role allow
* allow/overrides/switch editing pages (allow.php).
*/
abstract class core_role_allow_role_page {
protected $tablename;
protected $targetcolname;
protected $roles;
protected $allowed = null;
/**
* Constructor.
*
* @param string $tablename the table where our data is stored.
* @param string $targetcolname the name of the target role id column.
*/
public function __construct($tablename, $targetcolname) {
$this->tablename = $tablename;
$this->targetcolname = $targetcolname;
$this->load_required_roles();
}
/**
* Load information about all the roles we will need information about.
*/
protected function load_required_roles() {
// Get all roles.
$this->roles = role_fix_names(get_all_roles(), context_system::instance(), ROLENAME_ORIGINAL);
}
/**
* Update the data with the new settings submitted by the user.
*/
public function process_submission() {
global $DB;
// Delete all records, then add back the ones that should be allowed.
$DB->delete_records($this->tablename);
foreach ($this->roles as $fromroleid => $notused) {
foreach ($this->roles as $targetroleid => $alsonotused) {
if (optional_param('s_' . $fromroleid . '_' . $targetroleid, false, PARAM_BOOL)) {
$this->set_allow($fromroleid, $targetroleid);
}
}
}
}
/**
* Set one allow in the database.
* @param int $fromroleid
* @param int $targetroleid
*/
protected abstract function set_allow($fromroleid, $targetroleid);
/**
* Load the current allows from the database.
*/
public function load_current_settings() {
global $DB;
// Load the current settings.
$this->allowed = array();
foreach ($this->roles as $role) {
// Make an array $role->id => false. This is probably too clever for its own good.
$this->allowed[$role->id] = array_combine(array_keys($this->roles), array_fill(0, count($this->roles), false));
}
$rs = $DB->get_recordset($this->tablename);
foreach ($rs as $allow) {
$this->allowed[$allow->roleid][$allow->{$this->targetcolname}] = true;
}
$rs->close();
}
/**
* Is target allowed?
*
* @param integer $targetroleid a role id.
* @return boolean whether the user should be allowed to select this role as a target role.
*/
protected function is_allowed_target($targetroleid) {
return true;
}
/**
* Returns structure that can be passed to print_table,
* containing one cell for each checkbox.
* @return html_table a table
*/
public function get_table() {
$table = new html_table();
$table->tablealign = 'center';
$table->cellpadding = 5;
$table->cellspacing = 0;
$table->width = '90%';
$table->align = array('left');
$table->rotateheaders = true;
$table->head = array('&#xa0;');
$table->colclasses = array('');
// Add role name headers.
foreach ($this->roles as $targetrole) {
$table->head[] = $targetrole->localname;
$table->align[] = 'left';
if ($this->is_allowed_target($targetrole->id)) {
$table->colclasses[] = '';
} else {
$table->colclasses[] = 'dimmed_text';
}
}
// Now the rest of the table.
foreach ($this->roles as $fromrole) {
$row = array($fromrole->localname);
foreach ($this->roles as $targetrole) {
$checked = '';
$disabled = '';
if ($this->allowed[$fromrole->id][$targetrole->id]) {
$checked = 'checked="checked" ';
}
if (!$this->is_allowed_target($targetrole->id)) {
$disabled = 'disabled="disabled" ';
}
$name = 's_' . $fromrole->id . '_' . $targetrole->id;
$tooltip = $this->get_cell_tooltip($fromrole, $targetrole);
$row[] = '<input type="checkbox" name="' . $name . '" id="' . $name .
'" title="' . $tooltip . '" value="1" ' . $checked . $disabled . '/>' .
'<label for="' . $name . '" class="accesshide">' . $tooltip . '</label>';
}
$table->data[] = $row;
}
return $table;
}
/**
* Snippet of text displayed above the table, telling the admin what to do.
* @return string
*/
public abstract function get_intro_text();
}
-61
View File
@@ -1,61 +0,0 @@
<?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/>.
/**
* Role witch matrix.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Subclass of role_allow_role_page for the Allow switches tab.
*/
class core_role_allow_switch_page extends core_role_allow_role_page {
protected $allowedtargetroles;
public function __construct() {
parent::__construct('role_allow_switch', 'allowswitch');
}
protected function load_required_roles() {
global $DB;
parent::load_required_roles();
$this->allowedtargetroles = $DB->get_records_menu('role', null, 'id');
}
protected function set_allow($fromroleid, $targetroleid) {
allow_switch($fromroleid, $targetroleid);
}
protected function is_allowed_target($targetroleid) {
return isset($this->allowedtargetroles[$targetroleid]);
}
protected function get_cell_tooltip($fromrole, $targetrole) {
$a = new stdClass;
$a->fromrole = $fromrole->localname;
$a->targetrole = $targetrole->localname;
return get_string('allowroletoswitch', 'core_role', $a);
}
public function get_intro_text() {
return get_string('configallowswitch', 'core_admin');
}
}
@@ -1,61 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot.'/user/selector/lib.php');
/**
* Base class to avoid duplicating code.
*/
abstract class core_role_assign_user_selector_base extends user_selector_base {
protected $roleid;
protected $context;
/**
* @param string $name control name
* @param array $options should have two elements with keys groupid and courseid.
*/
public function __construct($name, $options) {
global $CFG;
if (isset($options['context'])) {
$this->context = $options['context'];
} else {
$this->context = context::instance_by_id($options['contextid']);
}
$options['accesscontext'] = $this->context;
parent::__construct($name, $options);
$this->roleid = $options['roleid'];
require_once($CFG->dirroot . '/group/lib.php');
}
protected function get_options() {
global $CFG;
$options = parent::get_options();
$options['file'] = $CFG->admin . '/roles/lib.php';
$options['roleid'] = $this->roleid;
$options['contextid'] = $this->context->id;
return $options;
}
}
@@ -1,179 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Base capability table.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* This class represents a table with one row for each of a list of capabilities
* where the first cell in the row contains the capability name, and there is
* arbitrary stuff in the rest of the row. This class is used by
* admin/roles/manage.php, override.php and check.php.
*
* An ajaxy search UI shown at the top, if JavaScript is on.
*/
abstract class core_role_capability_table_base {
/** The context this table relates to. */
protected $context;
/** The capabilities to display. Initialised as $context->get_capabilities(). */
protected $capabilities = array();
/** Added as an id="" attribute to the table on output. */
protected $id;
/** Added to the class="" attribute on output. */
protected $classes = array('rolecap');
/** Default number of capabilities in the table for the search UI to be shown. */
const NUM_CAPS_FOR_SEARCH = 12;
/**
* Constructor.
* @param context $context the context this table relates to.
* @param string $id what to put in the id="" attribute.
*/
public function __construct(context $context, $id) {
$this->context = $context;
$this->capabilities = $context->get_capabilities();
$this->id = $id;
}
/**
* Use this to add class="" attributes to the table. You get the rolecap by
* default.
* @param array $classnames of class names.
*/
public function add_classes($classnames) {
$this->classes = array_unique(array_merge($this->classes, $classnames));
}
/**
* Display the table.
*/
public function display() {
if (count($this->capabilities) > self::NUM_CAPS_FOR_SEARCH) {
global $PAGE;
$jsmodule = array(
'name' => 'rolescapfilter',
'fullpath' => '/admin/roles/module.js',
'strings' => array(
array('filter', 'moodle'),
array('clear', 'moodle'), ),
'requires' => array('node', 'cookie', 'escape')
);
$PAGE->requires->js_init_call('M.core_role.init_cap_table_filter', array($this->id, $this->context->id), false,
$jsmodule);
}
echo '<table class="' . implode(' ', $this->classes) . '" id="' . $this->id . '">' . "\n<thead>\n";
echo '<tr><th class="name" align="left" scope="col">' . get_string('capability', 'core_role') . '</th>';
$this->add_header_cells();
echo "</tr>\n</thead>\n<tbody>\n";
// Loop over capabilities.
$contextlevel = 0;
$component = '';
foreach ($this->capabilities as $capability) {
if ($this->skip_row($capability)) {
continue;
}
// Prints a breaker if component or name or context level has changed.
if (component_level_changed($capability, $component, $contextlevel)) {
$this->print_heading_row($capability);
}
$contextlevel = $capability->contextlevel;
$component = $capability->component;
// Start the row.
echo '<tr class="' . implode(' ', array_unique(array_merge(array('rolecap'),
$this->get_row_classes($capability)))) . '">';
// Table cell for the capability name.
echo '<th scope="row" class="name"><span class="cap-desc">' . get_capability_docs_link($capability) .
'<span class="cap-name">' . $capability->name . '</span></span></th>';
// Add the cells specific to this table.
$this->add_row_cells($capability);
// End the row.
echo "</tr>\n";
}
// End of the table.
echo "</tbody>\n</table>\n";
}
/**
* Used to output a heading rows when the context level or component changes.
* @param stdClass $capability gives the new component and contextlevel.
*/
protected function print_heading_row($capability) {
echo '<tr class="rolecapheading header"><td colspan="' . (1 + $this->num_extra_columns()) . '" class="header"><strong>' .
get_component_string($capability->component, $capability->contextlevel) .
'</strong></td></tr>';
}
/**
* For subclasses to override, output header cells, after the initial capability one.
*/
protected abstract function add_header_cells();
/**
* For subclasses to override, return the number of cells that add_header_cells/add_row_cells output.
*/
protected abstract function num_extra_columns();
/**
* For subclasses to override. Allows certain capabilties
* to be left out of the table.
*
* @param object $capability the capability this row relates to.
* @return boolean. If true, this row is omitted from the table.
*/
protected function skip_row($capability) {
return false;
}
/**
* For subclasses to override. A change to reaturn class names that are added
* to the class="" attribute on the &lt;tr> for this capability.
*
* @param stdClass $capability the capability this row relates to.
* @return array of class name strings.
*/
protected function get_row_classes($capability) {
return array();
}
/**
* For subclasses to override. Output the data cells for this capability. The
* capability name cell will already have been output.
*
* You can rely on get_row_classes always being called before add_row_cells.
*
* @param stdClass $capability the capability this row relates to.
*/
protected abstract function add_row_cells($capability);
}
@@ -1,193 +0,0 @@
<?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/>.
/**
* Capabilities table with risks.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* This subclass is the bases for both the define roles and override roles
* pages. As well as adding the risks columns, this also provides generic
* facilities for showing a certain number of permissions columns, and
* recording the current and submitted permissions for each capability.
*/
abstract class core_role_capability_table_with_risks extends core_role_capability_table_base {
protected $allrisks;
protected $allpermissions; // We don't need perms ourselves, but all our subclasses do.
protected $strperms; // Language string cache.
protected $risksurl; // URL in moodledocs about risks.
protected $riskicons = array(); // Cache to avoid regenerating the HTML for each risk icon.
/** @var array The capabilities to highlight as default/inherited. */
protected $parentpermissions;
protected $displaypermissions;
protected $permissions;
protected $changed;
protected $roleid;
public function __construct($context, $id, $roleid) {
parent::__construct($context, $id);
$this->allrisks = get_all_risks();
$this->risksurl = get_docs_url(s(get_string('risks', 'core_role')));
$this->allpermissions = array(
CAP_INHERIT => 'inherit',
CAP_ALLOW => 'allow',
CAP_PREVENT => 'prevent' ,
CAP_PROHIBIT => 'prohibit',
);
$this->strperms = array();
foreach ($this->allpermissions as $permname) {
$this->strperms[$permname] = get_string($permname, 'core_role');
}
$this->roleid = $roleid;
$this->load_current_permissions();
// Fill in any blank permissions with an explicit CAP_INHERIT, and init a locked field.
foreach ($this->capabilities as $capid => $cap) {
if (!isset($this->permissions[$cap->name])) {
$this->permissions[$cap->name] = CAP_INHERIT;
}
$this->capabilities[$capid]->locked = false;
}
}
protected function load_current_permissions() {
global $DB;
// Load the overrides/definition in this context.
if ($this->roleid) {
$this->permissions = $DB->get_records_menu('role_capabilities', array('roleid' => $this->roleid,
'contextid' => $this->context->id), '', 'capability,permission');
} else {
$this->permissions = array();
}
}
protected abstract function load_parent_permissions();
/**
* Update $this->permissions based on submitted data, while making a list of
* changed capabilities in $this->changed.
*/
public function read_submitted_permissions() {
$this->changed = array();
foreach ($this->capabilities as $cap) {
if ($cap->locked || $this->skip_row($cap)) {
// The user is not allowed to change the permission for this capability.
continue;
}
$permission = optional_param($cap->name, null, PARAM_PERMISSION);
if (is_null($permission)) {
// A permission was not specified in submitted data.
continue;
}
// If the permission has changed, update $this->permissions and
// Record the fact there is data to save.
if ($this->permissions[$cap->name] != $permission) {
$this->permissions[$cap->name] = $permission;
$this->changed[] = $cap->name;
}
}
}
/**
* Save the new values of any permissions that have been changed.
*/
public function save_changes() {
// Set the permissions.
foreach ($this->changed as $changedcap) {
assign_capability($changedcap, $this->permissions[$changedcap],
$this->roleid, $this->context->id, true);
}
// Force accessinfo refresh for users visiting this context.
$this->context->mark_dirty();
}
public function display() {
$this->load_parent_permissions();
foreach ($this->capabilities as $cap) {
if (!isset($this->parentpermissions[$cap->name])) {
$this->parentpermissions[$cap->name] = CAP_INHERIT;
}
}
parent::display();
}
protected function add_header_cells() {
global $OUTPUT;
echo '<th colspan="' . count($this->displaypermissions) . '" scope="col">' .
get_string('permission', 'core_role') . ' ' . $OUTPUT->help_icon('permission', 'core_role') . '</th>';
echo '<th class="risk" colspan="' . count($this->allrisks) . '" scope="col">' . get_string('risks', 'core_role') . '</th>';
}
protected function num_extra_columns() {
return count($this->displaypermissions) + count($this->allrisks);
}
protected function get_row_classes($capability) {
$rowclasses = array();
foreach ($this->allrisks as $riskname => $risk) {
if ($risk & (int)$capability->riskbitmask) {
$rowclasses[] = $riskname;
}
}
return $rowclasses;
}
protected abstract function add_permission_cells($capability);
protected function add_row_cells($capability) {
$this->add_permission_cells($capability);
// One cell for each possible risk.
foreach ($this->allrisks as $riskname => $risk) {
echo '<td class="risk ' . str_replace('risk', '', $riskname) . '">';
if ($risk & (int)$capability->riskbitmask) {
echo $this->get_risk_icon($riskname);
}
echo '</td>';
}
}
/**
* Print a risk icon, as a link to the Risks page on Moodle Docs.
*
* @param string $type the type of risk, will be one of the keys from the
* get_all_risks array. Must start with 'risk'.
*/
public function get_risk_icon($type) {
global $OUTPUT;
if (!isset($this->riskicons[$type])) {
$iconurl = $OUTPUT->pix_url('i/' . str_replace('risk', 'risk_', $type));
$text = '<img src="' . $iconurl . '" alt="' . get_string($type . 'short', 'admin') . '" />';
$action = new popup_action('click', $this->risksurl, 'docspopup');
$this->riskicons[$type] = $OUTPUT->action_link($this->risksurl, $text, $action, array('title'=>get_string($type, 'admin')));
}
return $this->riskicons[$type];
}
}
@@ -1,84 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Subclass of core_role_capability_table_base for use on the Check permissions page.
*
* We have one additional column, Allowed, which contains yes/no.
*/
class core_role_check_capability_table extends core_role_capability_table_base {
protected $user;
protected $fullname;
protected $contextname;
protected $stryes;
protected $strno;
private $hascap;
/**
* Constructor
* @param object $context the context this table relates to.
* @param object $user the user we are generating the results for.
* @param string $contextname $context->get_context_name() - to save recomputing.
*/
public function __construct($context, $user, $contextname) {
parent::__construct($context, 'explaincaps');
$this->user = $user;
$this->fullname = fullname($user);
$this->contextname = $contextname;
$this->stryes = get_string('yes');
$this->strno = get_string('no');
}
protected function add_header_cells() {
echo '<th>' . get_string('allowed', 'core_role') . '</th>';
}
protected function num_extra_columns() {
return 1;
}
protected function get_row_classes($capability) {
$this->hascap = has_capability($capability->name, $this->context, $this->user->id);
if ($this->hascap) {
return array('yes');
} else {
return array('no');
}
}
protected function add_row_cells($capability) {
if ($this->hascap) {
$result = $this->stryes;
} else {
$result = $this->strno;
}
$a = new stdClass;
$a->fullname = $this->fullname;
$a->capability = $capability->name;
$a->context = $this->contextname;
echo '<td>' . $result . '</td>';
}
}
@@ -1,153 +0,0 @@
<?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/>.
/**
* User selector.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot.'/user/selector/lib.php');
/**
* User selector subclass for the selection of users in the check permissions page.
*
* @copyright 2012 Petr Skoda {@link http://skodak.org}
*/
class core_role_check_users_selector extends user_selector_base {
/** @var bool limit listing of users to enrolled only */
protected $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', 'core_role', $search);
} else {
$groupname1 = get_string('enrolledusers', 'enrol');
$groupname2 = get_string('potusers', 'core_role');
}
if ($sql1) {
$enrolleduserscount = $DB->count_records_sql($countfields . $sql1, $params);
if (!$this->is_validating() and $enrolleduserscount > $this->maxusersperpage) {
$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->maxusersperpage) {
$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;
}
}
@@ -1,646 +0,0 @@
<?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/>.
/**
* Advanced role definition form.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* As well as tracking the permissions information about the role we are creating
* or editing, we also track the other information about the role. (This class is
* starting to be more and more like a formslib form in some respects.)
*/
class core_role_define_role_table_advanced extends core_role_capability_table_with_risks {
/** @var stdClass Used to store other information (besides permissions) about the role we are creating/editing. */
protected $role;
/** @var array Used to store errors found when validating the data. */
protected $errors;
protected $contextlevels;
protected $allcontextlevels;
protected $disabled = '';
protected $allowassign;
protected $allowoverride;
protected $allowswitch;
public function __construct($context, $roleid) {
$this->roleid = $roleid;
parent::__construct($context, 'defineroletable', $roleid);
$this->displaypermissions = $this->allpermissions;
$this->strperms[$this->allpermissions[CAP_INHERIT]] = get_string('notset', 'core_role');
$this->allcontextlevels = array();
$levels = context_helper::get_all_levels();
foreach ($levels as $level => $classname) {
$this->allcontextlevels[$level] = context_helper::get_level_name($level);
}
}
protected function load_current_permissions() {
global $DB;
if ($this->roleid) {
if (!$this->role = $DB->get_record('role', array('id' => $this->roleid))) {
throw new moodle_exception('invalidroleid');
}
$contextlevels = get_role_contextlevels($this->roleid);
// Put the contextlevels in the array keys, as well as the values.
if (!empty($contextlevels)) {
$this->contextlevels = array_combine($contextlevels, $contextlevels);
} else {
$this->contextlevels = array();
}
$this->allowassign = array_keys($this->get_allow_roles_list('assign'));
$this->allowoverride = array_keys($this->get_allow_roles_list('override'));
$this->allowswitch = array_keys($this->get_allow_roles_list('switch'));
} else {
$this->role = new stdClass;
$this->role->name = '';
$this->role->shortname = '';
$this->role->description = '';
$this->role->archetype = '';
$this->contextlevels = array();
$this->allowassign = array();
$this->allowoverride = array();
$this->allowswitch = array();
}
parent::load_current_permissions();
}
public function read_submitted_permissions() {
global $DB;
$this->errors = array();
// Role short name. We clean this in a special way. We want to end up
// with only lowercase safe ASCII characters.
$shortname = optional_param('shortname', null, PARAM_RAW);
if (!is_null($shortname)) {
$this->role->shortname = $shortname;
$this->role->shortname = core_text::specialtoascii($this->role->shortname);
$this->role->shortname = core_text::strtolower(clean_param($this->role->shortname, PARAM_ALPHANUMEXT));
if (empty($this->role->shortname)) {
$this->errors['shortname'] = get_string('errorbadroleshortname', 'core_role');
}
}
if ($DB->record_exists_select('role', 'shortname = ? and id <> ?', array($this->role->shortname, $this->roleid))) {
$this->errors['shortname'] = get_string('errorexistsroleshortname', 'core_role');
}
// Role name.
$name = optional_param('name', null, PARAM_TEXT);
if (!is_null($name)) {
$this->role->name = $name;
// Hack: short names of standard roles are equal to archetypes, empty name means localised via lang packs.
$archetypes = get_role_archetypes();
if (!isset($archetypes[$shortname]) and html_is_blank($this->role->name)) {
$this->errors['name'] = get_string('errorbadrolename', 'core_role');
}
}
if ($this->role->name !== '' and $DB->record_exists_select('role', 'name = ? and id <> ?', array($this->role->name, $this->roleid))) {
$this->errors['name'] = get_string('errorexistsrolename', 'core_role');
}
// Description.
$description = optional_param('description', null, PARAM_RAW);
if (!is_null($description)) {
$this->role->description = $description;
}
// Legacy type.
$archetype = optional_param('archetype', null, PARAM_RAW);
if (isset($archetype)) {
$archetypes = get_role_archetypes();
if (isset($archetypes[$archetype])) {
$this->role->archetype = $archetype;
} else {
$this->role->archetype = '';
}
}
// Assignable context levels.
foreach ($this->allcontextlevels as $cl => $notused) {
$assignable = optional_param('contextlevel' . $cl, null, PARAM_BOOL);
if (!is_null($assignable)) {
if ($assignable) {
$this->contextlevels[$cl] = $cl;
} else {
unset($this->contextlevels[$cl]);
}
}
}
// Allowed roles.
$allow = optional_param_array('allowassign', null, PARAM_INT);
if (!is_null($allow)) {
$this->allowassign = $allow;
}
$allow = optional_param_array('allowoverride', null, PARAM_INT);
if (!is_null($allow)) {
$this->allowoverride = $allow;
}
$allow = optional_param_array('allowswitch', null, PARAM_INT);
if (!is_null($allow)) {
$this->allowswitch = $allow;
}
// Now read the permissions for each capability.
parent::read_submitted_permissions();
}
public function is_submission_valid() {
return empty($this->errors);
}
/**
* Call this after the table has been initialised,
* this resets everything to that role.
*
* @param int $roleid role id or 0 for no role
* @param array $options array with following keys:
* 'name', 'shortname', 'description', 'permissions', 'archetype',
* 'contextlevels', 'allowassign', 'allowoverride', 'allowswitch'
*/
public function force_duplicate($roleid, array $options) {
global $DB;
if ($roleid == 0) {
// This means reset to nothing == remove everything.
if ($options['shortname']) {
$this->role->shortname = '';
}
if ($options['name']) {
$this->role->name = '';
}
if ($options['description']) {
$this->role->description = '';
}
if ($options['archetype']) {
$this->role->archetype = '';
}
if ($options['contextlevels']) {
$this->contextlevels = array();
}
if ($options['allowassign']) {
$this->allowassign = array();
}
if ($options['allowoverride']) {
$this->allowoverride = array();
}
if ($options['allowswitch']) {
$this->allowswitch = array();
}
if ($options['permissions']) {
foreach ($this->capabilities as $capid => $cap) {
$this->permissions[$cap->name] = CAP_INHERIT;
}
}
return;
}
$role = $DB->get_record('role', array('id'=>$roleid), '*', MUST_EXIST);
if ($options['shortname']) {
$this->role->shortname = $role->shortname;
}
if ($options['name']) {
$this->role->name = $role->name;
}
if ($options['description']) {
$this->role->description = $role->description;
}
if ($options['archetype']) {
$this->role->archetype = $role->archetype;
}
if ($options['contextlevels']) {
$this->contextlevels = array();
$levels = get_role_contextlevels($roleid);
foreach ($levels as $cl) {
$this->contextlevels[$cl] = $cl;
}
}
if ($options['allowassign']) {
$this->allowassign = array_keys($this->get_allow_roles_list('assign', $roleid));
}
if ($options['allowoverride']) {
$this->allowoverride = array_keys($this->get_allow_roles_list('override', $roleid));
}
if ($options['allowswitch']) {
$this->allowswitch = array_keys($this->get_allow_roles_list('switch', $roleid));
}
if ($options['permissions']) {
$this->permissions = $DB->get_records_menu('role_capabilities',
array('roleid' => $roleid, 'contextid' => context_system::instance()->id),
'', 'capability,permission');
foreach ($this->capabilities as $capid => $cap) {
if (!isset($this->permissions[$cap->name])) {
$this->permissions[$cap->name] = CAP_INHERIT;
}
}
}
}
/**
* Change the role definition to match given archetype.
*
* @param string $archetype
* @param array $options array with following keys:
* 'name', 'shortname', 'description', 'permissions', 'archetype',
* 'contextlevels', 'allowassign', 'allowoverride', 'allowswitch'
*/
public function force_archetype($archetype, array $options) {
$archetypes = get_role_archetypes();
if (!isset($archetypes[$archetype])) {
throw new coding_exception('Unknown archetype: '.$archetype);
}
if ($options['shortname']) {
$this->role->shortname = '';
}
if ($options['name']) {
$this->role->name = '';
}
if ($options['description']) {
$this->role->description = '';
}
if ($options['archetype']) {
$this->role->archetype = $archetype;
}
if ($options['contextlevels']) {
$this->contextlevels = array();
$defaults = get_default_contextlevels($archetype);
foreach ($defaults as $cl) {
$this->contextlevels[$cl] = $cl;
}
}
if ($options['allowassign']) {
$this->allowassign = get_default_role_archetype_allows('assign', $archetype);
}
if ($options['allowoverride']) {
$this->allowoverride = get_default_role_archetype_allows('override', $archetype);
}
if ($options['allowswitch']) {
$this->allowswitch = get_default_role_archetype_allows('switch', $archetype);
}
if ($options['permissions']) {
$defaultpermissions = get_default_capabilities($archetype);
foreach ($this->permissions as $k => $v) {
if (isset($defaultpermissions[$k])) {
$this->permissions[$k] = $defaultpermissions[$k];
continue;
}
$this->permissions[$k] = CAP_INHERIT;
}
}
}
/**
* Change the role definition to match given preset.
*
* @param string $xml
* @param array $options array with following keys:
* 'name', 'shortname', 'description', 'permissions', 'archetype',
* 'contextlevels', 'allowassign', 'allowoverride', 'allowswitch'
*/
public function force_preset($xml, array $options) {
if (!$info = core_role_preset::parse_preset($xml)) {
throw new coding_exception('Invalid role preset');
}
if ($options['shortname']) {
if (isset($info['shortname'])) {
$this->role->shortname = $info['shortname'];
}
}
if ($options['name']) {
if (isset($info['name'])) {
$this->role->name = $info['name'];
}
}
if ($options['description']) {
if (isset($info['description'])) {
$this->role->description = $info['description'];
}
}
if ($options['archetype']) {
if (isset($info['archetype'])) {
$this->role->archetype = $info['archetype'];
}
}
if ($options['contextlevels']) {
if (isset($info['contextlevels'])) {
$this->contextlevels = $info['contextlevels'];
}
}
foreach (array('assign', 'override', 'switch') as $type) {
if ($options['allow'.$type]) {
if (isset($info['allow'.$type])) {
$this->{'allow'.$type} = $info['allow'.$type];
}
}
}
if ($options['permissions']) {
foreach ($this->permissions as $k => $v) {
// Note: do not set everything else to CAP_INHERIT here
// because the xml file might not contain all capabilities.
if (isset($info['permissions'][$k])) {
$this->permissions[$k] = $info['permissions'][$k];
}
}
}
}
public function get_role_name() {
return $this->role->name;
}
public function get_role_id() {
return $this->role->id;
}
public function get_archetype() {
return $this->role->archetype;
}
protected function load_parent_permissions() {
$this->parentpermissions = get_default_capabilities($this->role->archetype);
}
public function save_changes() {
global $DB;
if (!$this->roleid) {
// Creating role.
$this->role->id = create_role($this->role->name, $this->role->shortname, $this->role->description, $this->role->archetype);
$this->roleid = $this->role->id; // Needed to make the parent::save_changes(); call work.
} else {
// Updating role.
$DB->update_record('role', $this->role);
}
// Assignable contexts.
set_role_contextlevels($this->role->id, $this->contextlevels);
// Set allowed roles.
$this->save_allow('assign');
$this->save_allow('override');
$this->save_allow('switch');
// Permissions.
parent::save_changes();
}
protected function save_allow($type) {
global $DB;
$current = array_keys($this->get_allow_roles_list($type));
$wanted = $this->{'allow'.$type};
$addfunction = 'allow_'.$type;
$deltable = 'role_allow_'.$type;
$field = 'allow'.$type;
foreach ($current as $roleid) {
if (!in_array($roleid, $wanted)) {
$DB->delete_records($deltable, array('roleid'=>$this->roleid, $field=>$roleid));
continue;
}
$key = array_search($roleid, $wanted);
unset($wanted[$key]);
}
foreach ($wanted as $roleid) {
if ($roleid == -1) {
$roleid = $this->roleid;
}
$addfunction($this->roleid, $roleid);
}
}
protected function get_name_field($id) {
return '<input type="text" id="' . $id . '" name="' . $id . '" maxlength="254" value="' . s($this->role->name) . '" />';
}
protected function get_shortname_field($id) {
return '<input type="text" id="' . $id . '" name="' . $id . '" maxlength="254" value="' . s($this->role->shortname) . '" />';
}
protected function get_description_field($id) {
return print_textarea(true, 10, 50, 50, 10, 'description', $this->role->description, 0, true);
}
protected function get_archetype_field($id) {
$options = array();
$options[''] = get_string('none');
foreach (get_role_archetypes() as $type) {
$options[$type] = get_string('archetype'.$type, 'role');
}
return html_writer::select($options, 'archetype', $this->role->archetype, false);
}
protected function get_assignable_levels_control() {
$output = '';
foreach ($this->allcontextlevels as $cl => $clname) {
$extraarguments = $this->disabled;
if (in_array($cl, $this->contextlevels)) {
$extraarguments .= 'checked="checked" ';
}
if (!$this->disabled) {
$output .= '<input type="hidden" name="contextlevel' . $cl . '" value="0" />';
}
$output .= '<input type="checkbox" id="cl' . $cl . '" name="contextlevel' . $cl .
'" value="1" ' . $extraarguments . '/> ';
$output .= '<label for="cl' . $cl . '">' . $clname . "</label><br />\n";
}
return $output;
}
/**
* Returns an array of roles of the allowed type.
*
* @param string $type Must be one of: assign, switch, or override.
* @param int $roleid (null means current role)
* @return array
*/
protected function get_allow_roles_list($type, $roleid = null) {
global $DB;
if ($type !== 'assign' and $type !== 'switch' and $type !== 'override') {
debugging('Invalid role allowed type specified', DEBUG_DEVELOPER);
return array();
}
if ($roleid === null) {
$roleid = $this->roleid;
}
if (empty($roleid)) {
return array();
}
$sql = "SELECT r.*
FROM {role} r
JOIN {role_allow_{$type}} a ON a.allow{$type} = r.id
WHERE a.roleid = :roleid
ORDER BY r.sortorder ASC";
return $DB->get_records_sql($sql, array('roleid'=>$roleid));
}
/**
* Returns an array of roles with the allowed type.
*
* @param string $type Must be one of: assign, switch, or override.
* @return array Am array of role names with the allowed type
*/
protected function get_allow_role_control($type) {
if ($type !== 'assign' and $type !== 'switch' and $type !== 'override') {
debugging('Invalid role allowed type specified', DEBUG_DEVELOPER);
return '';
}
$property = 'allow'.$type;
$selected = $this->$property;
$options = array();
foreach (role_get_names(null, ROLENAME_ALIAS) as $role) {
$options[$role->id] = $role->localname;
}
if ($this->roleid == 0) {
$options[-1] = get_string('thisnewrole', 'core_role');
}
return html_writer::select($options, 'allow'.$type.'[]', $selected, false, array('multiple'=>'multiple', 'size'=>10));
}
/**
* Returns information about the risks associated with a role.
*
* @return string
*/
protected function get_role_risks_info() {
return '';
}
protected function print_field($name, $caption, $field) {
global $OUTPUT;
// Attempt to generate HTML like formslib.
echo '<div class="fitem">';
echo '<div class="fitemtitle">';
if ($name) {
echo '<label for="' . $name . '">';
}
echo $caption;
if ($name) {
echo "</label>\n";
}
echo '</div>';
if (isset($this->errors[$name])) {
$extraclass = ' error';
} else {
$extraclass = '';
}
echo '<div class="felement' . $extraclass . '">';
echo $field;
if (isset($this->errors[$name])) {
echo $OUTPUT->error_text($this->errors[$name]);
}
echo '</div>';
echo '</div>';
}
protected function print_show_hide_advanced_button() {
echo '<p class="definenotice">' . get_string('highlightedcellsshowdefault', 'core_role') . ' </p>';
echo '<div class="advancedbutton">';
echo '<input type="submit" name="toggleadvanced" value="' . get_string('hideadvanced', 'form') . '" />';
echo '</div>';
}
public function display() {
global $OUTPUT;
// Extra fields at the top of the page.
echo '<div class="topfields clearfix">';
$this->print_field('shortname', get_string('roleshortname', 'core_role').'&nbsp;'.$OUTPUT->help_icon('roleshortname', 'core_role'), $this->get_shortname_field('shortname'));
$this->print_field('name', get_string('customrolename', 'core_role').'&nbsp;'.$OUTPUT->help_icon('customrolename', 'core_role'), $this->get_name_field('name'));
$this->print_field('edit-description', get_string('customroledescription', 'core_role').'&nbsp;'.$OUTPUT->help_icon('customroledescription', 'core_role'),
$this->get_description_field('description'));
$this->print_field('menuarchetype', get_string('archetype', 'core_role').'&nbsp;'.$OUTPUT->help_icon('archetype', 'core_role'), $this->get_archetype_field('archetype'));
$this->print_field('', get_string('maybeassignedin', 'core_role'), $this->get_assignable_levels_control());
$this->print_field('menuallowassign', get_string('allowassign', 'core_role'), $this->get_allow_role_control('assign'));
$this->print_field('menuallowoverride', get_string('allowoverride', 'core_role'), $this->get_allow_role_control('override'));
$this->print_field('menuallowswitch', get_string('allowswitch', 'core_role'), $this->get_allow_role_control('switch'));
if ($risks = $this->get_role_risks_info()) {
$this->print_field('', get_string('rolerisks', 'core_role'), $risks);
}
echo "</div>";
$this->print_show_hide_advanced_button();
// Now the permissions table.
parent::display();
}
protected function add_permission_cells($capability) {
// One cell for each possible permission.
foreach ($this->displaypermissions as $perm => $permname) {
$strperm = $this->strperms[$permname];
$extraclass = '';
if ($perm == $this->parentpermissions[$capability->name]) {
$extraclass = ' capdefault';
}
$checked = '';
if ($this->permissions[$capability->name] == $perm) {
$checked = 'checked="checked" ';
}
echo '<td class="' . $permname . $extraclass . '">';
echo '<label><input type="radio" name="' . $capability->name .
'" value="' . $perm . '" ' . $checked . '/> ';
echo '<span class="note">' . $strperm . '</span>';
echo '</label></td>';
}
}
}
@@ -1,63 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class core_role_define_role_table_basic extends core_role_define_role_table_advanced {
protected $stradvmessage;
protected $strallow;
public function __construct($context, $roleid) {
parent::__construct($context, $roleid);
$this->displaypermissions = array(CAP_ALLOW => $this->allpermissions[CAP_ALLOW]);
$this->stradvmessage = get_string('useshowadvancedtochange', 'core_role');
$this->strallow = $this->strperms[$this->allpermissions[CAP_ALLOW]];
}
protected function print_show_hide_advanced_button() {
echo '<div class="advancedbutton">';
echo '<input type="submit" name="toggleadvanced" value="' . get_string('showadvanced', 'form') . '" />';
echo '</div>';
}
protected function add_permission_cells($capability) {
$perm = $this->permissions[$capability->name];
$permname = $this->allpermissions[$perm];
$defaultperm = $this->allpermissions[$this->parentpermissions[$capability->name]];
echo '<td class="' . $permname . '">';
if ($perm == CAP_ALLOW || $perm == CAP_INHERIT) {
$checked = '';
if ($perm == CAP_ALLOW) {
$checked = 'checked="checked" ';
}
echo '<input type="hidden" name="' . $capability->name . '" value="' . CAP_INHERIT . '" />';
echo '<label><input type="checkbox" name="' . $capability->name .
'" value="' . CAP_ALLOW . '" ' . $checked . '/> ' . $this->strallow . '</label>';
} else {
echo '<input type="hidden" name="' . $capability->name . '" value="' . $perm . '" />';
echo $this->strperms[$permname] . '<span class="note">' . $this->stradvmessage . '</span>';
}
echo '</td>';
}
}
@@ -1,153 +0,0 @@
<?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/>.
/**
* Existing user selector.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* User selector subclass for the list of users who already have the role in
* question on the assign roles page.
*/
class core_role_existing_role_holders extends core_role_assign_user_selector_base {
public function find_users($search) {
global $DB;
list($wherecondition, $params) = $this->search_sql($search, 'u');
list($ctxcondition, $ctxparams) = $DB->get_in_or_equal($this->context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'ctx');
$params = array_merge($params, $ctxparams);
$params['roleid'] = $this->roleid;
list($sort, $sortparams) = users_order_by_sql('u', $search, $this->accesscontext);
$params = array_merge($params, $sortparams);
$fields = "SELECT ra.id AS raid," . $this->required_fields_sql('u') . ",ra.contextid,ra.component ";
$countfields = "SELECT COUNT(1) ";
$sql = "FROM {role_assignments} ra
JOIN {user} u ON u.id = ra.userid
JOIN {context} ctx ON ra.contextid = ctx.id
WHERE $wherecondition
AND ctx.id $ctxcondition
AND ra.roleid = :roleid";
$order = " ORDER BY ctx.depth DESC, ra.component, $sort";
if (!$this->is_validating()) {
$existinguserscount = $DB->count_records_sql($countfields . $sql, $params);
if ($existinguserscount > $this->maxusersperpage) {
return $this->too_many_results($search, $existinguserscount);
}
}
$contextusers = $DB->get_records_sql($fields . $sql . $order, $params);
// No users at all.
if (empty($contextusers)) {
return array();
}
// We have users. Out put them in groups by context depth.
// To help the loop below, tack a dummy user on the end of the results
// array, to trigger output of the last group.
$dummyuser = new stdClass;
$dummyuser->contextid = 0;
$dummyuser->id = 0;
$dummyuser->component = '';
$contextusers[] = $dummyuser;
$results = array(); // The results array we are building up.
$doneusers = array(); // Ensures we only list each user at most once.
$currentcontextid = $this->context->id;
$currentgroup = array();
foreach ($contextusers as $user) {
if (isset($doneusers[$user->id])) {
continue;
}
$doneusers[$user->id] = 1;
if ($user->contextid != $currentcontextid) {
// We have got to the end of the previous group. Add it to the results array.
if ($currentcontextid == $this->context->id) {
$groupname = $this->this_con_group_name($search, count($currentgroup));
} else {
$groupname = $this->parent_con_group_name($search, $currentcontextid);
}
$results[$groupname] = $currentgroup;
// Get ready for the next group.
$currentcontextid = $user->contextid;
$currentgroup = array();
}
// Add this user to the group we are building up.
unset($user->contextid);
if ($currentcontextid != $this->context->id) {
$user->disabled = true;
}
if ($user->component !== '') {
// Bad luck, you can tweak only manual role assignments.
$user->disabled = true;
}
unset($user->component);
$currentgroup[$user->id] = $user;
}
return $results;
}
protected function this_con_group_name($search, $numusers) {
if ($this->context->contextlevel == CONTEXT_SYSTEM) {
// Special case in the System context.
if ($search) {
return get_string('extusersmatching', 'core_role', $search);
} else {
return get_string('extusers', 'core_role');
}
}
$contexttype = context_helper::get_level_name($this->context->contextlevel);
if ($search) {
$a = new stdClass;
$a->search = $search;
$a->contexttype = $contexttype;
if ($numusers) {
return get_string('usersinthisxmatching', 'core_role', $a);
} else {
return get_string('noneinthisxmatching', 'core_role', $a);
}
} else {
if ($numusers) {
return get_string('usersinthisx', 'core_role', $contexttype);
} else {
return get_string('noneinthisx', 'core_role', $contexttype);
}
}
}
protected function parent_con_group_name($search, $contextid) {
$context = context::instance_by_id($contextid);
$contextname = $context->get_context_name(true, true);
if ($search) {
$a = new stdClass;
$a->contextname = $contextname;
$a->search = $search;
return get_string('usersfrommatching', 'core_role', $a);
} else {
return get_string('usersfrom', 'core_role', $contextname);
}
}
}
@@ -1,102 +0,0 @@
<?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/>.
/**
* override permissions table.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class core_role_override_permissions_table_advanced extends core_role_capability_table_with_risks {
protected $strnotset;
protected $haslockedcapabilities = false;
/**
* Constructor.
*
* This method loads loads all the information about the current state of
* the overrides, then updates that based on any submitted data. It also
* works out which capabilities should be locked for this user.
*
* @param object $context the context this table relates to.
* @param integer $roleid the role being overridden.
* @param boolean $safeoverridesonly If true, the user is only allowed to override
* capabilities with no risks.
*/
public function __construct($context, $roleid, $safeoverridesonly) {
parent::__construct($context, 'overriderolestable', $roleid);
$this->displaypermissions = $this->allpermissions;
$this->strnotset = get_string('notset', 'core_role');
// Determine which capabilities should be locked.
if ($safeoverridesonly) {
foreach ($this->capabilities as $capid => $cap) {
if (!is_safe_capability($cap)) {
$this->capabilities[$capid]->locked = true;
$this->haslockedcapabilities = true;
}
}
}
}
protected function load_parent_permissions() {
// Get the capabilities from the parent context, so that can be shown in the interface.
$parentcontext = $this->context->get_parent_context();
$this->parentpermissions = role_context_capabilities($this->roleid, $parentcontext);
}
public function has_locked_capabilities() {
return $this->haslockedcapabilities;
}
protected function add_permission_cells($capability) {
$disabled = '';
if ($capability->locked || $this->parentpermissions[$capability->name] == CAP_PROHIBIT) {
$disabled = ' disabled="disabled"';
}
// One cell for each possible permission.
foreach ($this->displaypermissions as $perm => $permname) {
$strperm = $this->strperms[$permname];
$extraclass = '';
if ($perm != CAP_INHERIT && $perm == $this->parentpermissions[$capability->name]) {
$extraclass = ' capcurrent';
}
$checked = '';
if ($this->permissions[$capability->name] == $perm) {
$checked = 'checked="checked" ';
}
echo '<td class="' . $permname . $extraclass . '">';
echo '<label><input type="radio" name="' . $capability->name .
'" value="' . $perm . '" ' . $checked . $disabled . '/> ';
if ($perm == CAP_INHERIT) {
$inherited = $this->parentpermissions[$capability->name];
if ($inherited == CAP_INHERIT) {
$inherited = $this->strnotset;
} else {
$inherited = $this->strperms[$this->allpermissions[$inherited]];
}
$strperm .= ' (' . $inherited . ')';
}
echo '<span class="note">' . $strperm . '</span>';
echo '</label></td>';
}
}
}
@@ -1,66 +0,0 @@
<?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/>.
/**
* Allow something form.
*
* @package core_role
* @copyright 2009 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once("$CFG->libdir/formslib.php");
class core_role_permission_allow_form extends moodleform {
/**
* Define the form.
*/
protected function definition() {
global $CFG;
$mform = $this->_form;
list($context, $capability, $overridableroles) = $this->_customdata;
list($needed, $forbidden) = get_roles_with_cap_in_context($context, $capability->name);
foreach ($needed as $id => $unused) {
unset($overridableroles[$id]);
}
foreach ($forbidden as $id => $unused) {
unset($overridableroles[$id]);
}
$mform->addElement('header', 'allowheader', get_string('roleallowheader', 'core_role'));
$mform->addElement('select', 'roleid', get_string('roleselect', 'core_role'), $overridableroles);
$mform->addElement('hidden', 'capability');
$mform->setType('capability', PARAM_CAPABILITY);
$mform->setDefault('capability', $capability->name);
$mform->addElement('hidden', 'contextid');
$mform->setType('contextid', PARAM_INT);
$mform->setDefault('contextid', $context->id);
$mform->addElement('hidden', 'allow');
$mform->setType('allow', PARAM_INT);
$mform->setDefault('allow', 1);
$this->add_action_buttons(true, get_string('allow', 'core_role'));
}
}
@@ -1,64 +0,0 @@
<?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/>.
/**
* Prohibit something form.
*
* @package core_role
* @copyright 2009 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once("$CFG->libdir/formslib.php");
class core_role_permission_prohibit_form extends moodleform {
/**
* Define the form.
*/
protected function definition() {
global $CFG;
$mform = $this->_form;
list($context, $capability, $overridableroles) = $this->_customdata;
list($needed, $forbidden) = get_roles_with_cap_in_context($context, $capability->name);
foreach ($forbidden as $id => $unused) {
unset($overridableroles[$id]);
}
$mform->addElement('header', 'ptohibitheader', get_string('roleprohibitheader', 'core_role'));
$mform->addElement('select', 'roleid', get_string('roleselect', 'core_role'), $overridableroles);
$mform->addElement('hidden', 'capability');
$mform->setType('capability', PARAM_CAPABILITY);
$mform->setDefault('capability', $capability->name);
$mform->addElement('hidden', 'contextid');
$mform->setType('contextid', PARAM_INT);
$mform->setDefault('contextid', $context->id);
$mform->addElement('hidden', 'prohibit');
$mform->setType('prohibit', PARAM_INT);
$mform->setDefault('prohibit', 1);
$this->add_action_buttons(true, get_string('prohibit', 'core_role'));
}
}
-150
View File
@@ -1,150 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 2009 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Subclass of core_role_capability_table_base for use on the Permissions page.
*/
class core_role_permissions_table extends core_role_capability_table_base {
protected $contextname;
protected $allowoverrides;
protected $allowsafeoverrides;
protected $overridableroles;
protected $roles;
protected $icons = array();
/**
* Constructor.
* @param context $context the context this table relates to.
* @param string $contextname $context->get_context_name() - to save recomputing.
* @param array $allowoverrides
* @param array $allowsafeoverrides
* @param array $overridableroles
*/
public function __construct($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles) {
parent::__construct($context, 'permissions');
$this->contextname = $contextname;
$this->allowoverrides = $allowoverrides;
$this->allowsafeoverrides = $allowsafeoverrides;
$this->overridableroles = $overridableroles;
$roles = get_all_roles($context);
$this->roles = role_fix_names(array_reverse($roles, true), $context, ROLENAME_ALIAS, true);
}
protected function add_header_cells() {
echo '<th>' . get_string('risks', 'core_role') . '</th>';
echo '<th>' . get_string('neededroles', 'core_role') . '</th>';
echo '<th>' . get_string('prohibitedroles', 'core_role') . '</th>';
}
protected function num_extra_columns() {
return 3;
}
protected function add_row_cells($capability) {
global $OUTPUT, $PAGE;
$context = $this->context;
$contextid = $this->context->id;
$allowoverrides = $this->allowoverrides;
$allowsafeoverrides = $this->allowsafeoverrides;
$overridableroles = $this->overridableroles;
$roles = $this->roles;
list($needed, $forbidden) = get_roles_with_cap_in_context($context, $capability->name);
$neededroles = array();
$forbiddenroles = array();
$allowable = $overridableroles;
$forbitable = $overridableroles;
foreach ($neededroles as $id => $unused) {
unset($allowable[$id]);
}
foreach ($forbidden as $id => $unused) {
unset($allowable[$id]);
unset($forbitable[$id]);
}
foreach ($roles as $id => $name) {
if (isset($needed[$id])) {
$neededroles[$id] = $roles[$id];
if (isset($overridableroles[$id]) and ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability)))) {
$preventurl = new moodle_url($PAGE->url, array('contextid'=>$contextid, 'roleid'=>$id, 'capability'=>$capability->name, 'prevent'=>1));
$neededroles[$id] .= $OUTPUT->action_icon($preventurl, new pix_icon('t/delete', get_string('prevent', 'core_role')));
}
}
}
$neededroles = implode(', ', $neededroles);
foreach ($roles as $id => $name) {
if (isset($forbidden[$id]) and ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability)))) {
$forbiddenroles[$id] = $roles[$id];
if (isset($overridableroles[$id]) and prohibit_is_removable($id, $context, $capability->name)) {
$unprohibiturl = new moodle_url($PAGE->url, array('contextid'=>$contextid, 'roleid'=>$id, 'capability'=>$capability->name, 'unprohibit'=>1));
$forbiddenroles[$id] .= $OUTPUT->action_icon($unprohibiturl, new pix_icon('t/delete', get_string('delete')));
}
}
}
$forbiddenroles = implode(', ', $forbiddenroles);
if ($allowable and ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability)))) {
$allowurl = new moodle_url($PAGE->url, array('contextid'=>$contextid, 'capability'=>$capability->name, 'allow'=>1));
$neededroles .= '<div class="allowmore">'.$OUTPUT->action_icon($allowurl, new pix_icon('t/add', get_string('allow', 'core_role'))).'</div>';
}
if ($forbitable and ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability)))) {
$prohibiturl = new moodle_url($PAGE->url, array('contextid'=>$contextid, 'capability'=>$capability->name, 'prohibit'=>1));
$forbiddenroles .= '<div class="prohibitmore">'.$OUTPUT->action_icon($prohibiturl, new pix_icon('t/add', get_string('prohibit', 'core_role'))).'</div>';
}
$risks = $this->get_risks($capability);
echo '<td>' . $risks . '</td>';
echo '<td>' . $neededroles . '</td>';
echo '<td>' . $forbiddenroles . '</td>';
}
protected function get_risks($capability) {
global $OUTPUT;
$allrisks = get_all_risks();
$risksurl = new moodle_url(get_docs_url(s(get_string('risks', 'core_role'))));
$return = '';
foreach ($allrisks as $type => $risk) {
if ($risk & (int)$capability->riskbitmask) {
if (!isset($this->icons[$type])) {
$pixicon = new pix_icon('/i/' . str_replace('risk', 'risk_', $type), get_string($type . 'short', 'admin'));
$this->icons[$type] = $OUTPUT->action_icon($risksurl, $pixicon, new popup_action('click', $risksurl));
}
$return .= $this->icons[$type];
}
}
return $return;
}
}
@@ -1,86 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* User selector subclass for the list of potential users on the assign roles page,
* when we are assigning in a context below the course level. (CONTEXT_MODULE and
* some CONTEXT_BLOCK).
*
* This returns only enrolled users in this context.
*/
class core_role_potential_assignees_below_course extends core_role_assign_user_selector_base {
public function find_users($search) {
global $DB;
list($enrolsql, $eparams) = get_enrolled_sql($this->context);
// Now we have to go to the database.
list($wherecondition, $params) = $this->search_sql($search, 'u');
$params = array_merge($params, $eparams);
if ($wherecondition) {
$wherecondition = ' AND ' . $wherecondition;
}
$fields = 'SELECT ' . $this->required_fields_sql('u');
$countfields = 'SELECT COUNT(u.id)';
$sql = " FROM ($enrolsql) enrolled_users_view
JOIN {user} u ON u.id = enrolled_users_view.id
LEFT JOIN {role_assignments} ra ON (ra.userid = enrolled_users_view.id AND
ra.roleid = :roleid AND ra.contextid = :contextid)
WHERE ra.id IS NULL
$wherecondition";
$params['contextid'] = $this->context->id;
$params['roleid'] = $this->roleid;
list($sort, $sortparams) = users_order_by_sql('u', $search, $this->accesscontext);
$order = ' ORDER BY ' . $sort;
// Check to see if there are too many to show sensibly.
if (!$this->is_validating()) {
$potentialmemberscount = $DB->count_records_sql($countfields . $sql, $params);
if ($potentialmemberscount > $this->maxusersperpage) {
return $this->too_many_results($search, $potentialmemberscount);
}
}
// If not, show them.
$availableusers = $DB->get_records_sql($fields . $sql . $order, array_merge($params, $sortparams));
if (empty($availableusers)) {
return array();
}
if ($search) {
$groupname = get_string('potusersmatching', 'core_role', $search);
} else {
$groupname = get_string('potusers', 'core_role');
}
return array($groupname => $availableusers);
}
}
@@ -1,76 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* 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
* show all the users in the system who do not already have the role.
*/
class core_role_potential_assignees_course_and_above extends core_role_assign_user_selector_base {
public function find_users($search) {
global $DB;
list($wherecondition, $params) = $this->search_sql($search, '');
$fields = 'SELECT ' . $this->required_fields_sql('');
$countfields = 'SELECT COUNT(1)';
$sql = " FROM {user}
WHERE $wherecondition
AND id NOT IN (
SELECT r.userid
FROM {role_assignments} r
WHERE r.contextid = :contextid
AND r.roleid = :roleid)";
list($sort, $sortparams) = users_order_by_sql('', $search, $this->accesscontext);
$order = ' ORDER BY ' . $sort;
$params['contextid'] = $this->context->id;
$params['roleid'] = $this->roleid;
if (!$this->is_validating()) {
$potentialmemberscount = $DB->count_records_sql($countfields . $sql, $params);
if ($potentialmemberscount > $this->maxusersperpage) {
return $this->too_many_results($search, $potentialmemberscount);
}
}
$availableusers = $DB->get_records_sql($fields . $sql . $order, array_merge($params, $sortparams));
if (empty($availableusers)) {
return array();
}
if ($search) {
$groupname = get_string('potusersmatching', 'core_role', $search);
} else {
$groupname = get_string('potusers', 'core_role');
}
return array($groupname => $availableusers);
}
}
-314
View File
@@ -1,314 +0,0 @@
<?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/>.
/**
* New role XML processing.
*
* @package core_role
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* XML role file manipulation class.
*
* @package core_role
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_role_preset {
/**
* Send role export xml file to browser.
*
* @param int $roleid
* @return void does not return, send the file to output
*/
public static function send_export_xml($roleid) {
global $CFG, $DB;
require_once($CFG->libdir . '/filelib.php');
$role = $DB->get_record('role', array('id'=>$roleid), '*', MUST_EXIST);
if ($role->shortname) {
$filename = $role->shortname.'.xml';
} else {
$filename = 'role.xml';
}
$xml = self::get_export_xml($roleid);
send_file($xml, $filename, 0, false, true, true);
die();
}
/**
* Generate role export xml file.
*
* @param $roleid
* @return string
*/
public static function get_export_xml($roleid) {
global $DB;
$role = $DB->get_record('role', array('id'=>$roleid), '*', MUST_EXIST);
$dom = new DOMDocument('1.0', 'UTF-8');
$top = $dom->createElement('role');
$dom->appendChild($top);
$top->appendChild($dom->createElement('shortname', $role->shortname));
$top->appendChild($dom->createElement('name', $role->name));
$top->appendChild($dom->createElement('description', $role->description));
$top->appendChild($dom->createElement('archetype', $role->archetype));
$contextlevels = $dom->createElement('contextlevels');
$top->appendChild($contextlevels);
foreach (get_role_contextlevels($roleid) as $level) {
$name = context_helper::get_class_for_level($level);
$name = preg_replace('/^context_/', '', $name);
$contextlevels->appendChild($dom->createElement('level', $name));
}
foreach (array('assign', 'override', 'switch') as $type) {
$allows = $dom->createElement('allow'.$type);
$top->appendChild($allows);
$records = $DB->get_records('role_allow_'.$type, array('roleid'=>$roleid), "allow$type ASC");
foreach ($records as $record) {
if (!$ar = $DB->get_record('role', array('id'=>$record->{'allow'.$type}))) {
continue;
}
$allows->appendChild($dom->createElement('shortname', $ar->shortname));
}
}
$permissions = $dom->createElement('permissions');
$top->appendChild($permissions);
$capabilities = $DB->get_records_sql_menu(
"SELECT capability, permission
FROM {role_capabilities}
WHERE contextid = :syscontext AND roleid = :roleid
ORDER BY capability ASC",
array('syscontext'=>context_system::instance()->id, 'roleid'=>$roleid));
$allcapabilities = $DB->get_records('capabilities', array(), 'name ASC');
foreach ($allcapabilities as $cap) {
if (!isset($capabilities[$cap->name])) {
$permissions->appendChild($dom->createElement('inherit', $cap->name));
}
}
foreach ($capabilities as $capability => $permission) {
if ($permission == CAP_ALLOW) {
$permissions->appendChild($dom->createElement('allow', $capability));
}
}
foreach ($capabilities as $capability => $permission) {
if ($permission == CAP_PREVENT) {
$permissions->appendChild($dom->createElement('prevent', $capability));
}
}
foreach ($capabilities as $capability => $permission) {
if ($permission == CAP_PROHIBIT) {
$permissions->appendChild($dom->createElement('prohibit', $capability));
}
}
return $dom->saveXML();
}
/**
* Is this XML valid role preset?
*
* @param string $xml
* @return bool
*/
public static function is_valid_preset($xml) {
$dom = new DOMDocument();
if (!$dom->loadXML($xml)) {
return false;
} else {
$val = @$dom->schemaValidate(__DIR__.'/../role_schema.xml');
if (!$val) {
return false;
}
}
return true;
}
/**
* Parse role preset xml file.
*
* @param string $xml
* @return array role info, null on error
*/
public static function parse_preset($xml) {
global $DB;
$info = array();
if (!self::is_valid_preset($xml)) {
return null;
}
$dom = new DOMDocument();
$dom->loadXML($xml);
$info['shortname'] = self::get_node_value($dom, '/role/shortname');
if (isset($info['shortname'])) {
$info['shortname'] = strtolower(clean_param($info['shortname'], PARAM_ALPHANUMEXT));
}
$info['name'] = self::get_node_value($dom, '/role/name');
if (isset($value)) {
$info['name'] = clean_param($info['name'], PARAM_TEXT);
}
$info['description'] = self::get_node_value($dom, '/role/description');
if (isset($value)) {
$info['description'] = clean_param($info['description'], PARAM_CLEANHTML);
}
$info['archetype'] = self::get_node_value($dom, '/role/archetype');
if (isset($value)) {
$archetypes = get_role_archetypes();
if (!isset($archetypes[$info['archetype']])) {
$info['archetype'] = null;
}
}
$values = self::get_node_children_values($dom, '/role/contextlevels', 'level');
if (isset($values)) {
$info['contextlevels'] = array();
$levelmap = array_flip(context_helper::get_all_levels());
foreach ($values as $value) {
$level = 'context_'.$value;
if (isset($levelmap[$level])) {
$cl = $levelmap[$level];
$info['contextlevels'][$cl] = $cl;
}
}
}
foreach (array('assign', 'override', 'switch') as $type) {
$values = self::get_node_children_values($dom, '/role/allow'.$type, 'shortname');
if (!isset($values)) {
$info['allow'.$type] = null;
continue;
}
$info['allow'.$type] = array();
foreach ($values as $value) {
if ($value === $info['shortname']) {
array_unshift($info['allow'.$type], -1); // Means self.
}
if ($role = $DB->get_record('role', array('shortname'=>$value))) {
$info['allow'.$type][] = $role->id;
continue;
}
}
}
$info['permissions'] = array();
$values = self::get_node_children_values($dom, '/role/permissions', 'inherit');
if (isset($values)) {
foreach ($values as $value) {
if ($value = clean_param($value, PARAM_CAPABILITY)) {
$info['permissions'][$value] = CAP_INHERIT;
}
}
}
$values = self::get_node_children_values($dom, '/role/permissions', 'allow');
if (isset($values)) {
foreach ($values as $value) {
if ($value = clean_param($value, PARAM_CAPABILITY)) {
$info['permissions'][$value] = CAP_ALLOW;
}
}
}
$values = self::get_node_children_values($dom, '/role/permissions', 'prevent');
if (isset($values)) {
foreach ($values as $value) {
if ($value = clean_param($value, PARAM_CAPABILITY)) {
$info['permissions'][$value] = CAP_PREVENT;
}
}
}
$values = self::get_node_children_values($dom, '/role/permissions', 'prohibit');
if (isset($values)) {
foreach ($values as $value) {
if ($value = clean_param($value, PARAM_CAPABILITY)) {
$info['permissions'][$value] = CAP_PROHIBIT;
}
}
}
return $info;
}
protected static function get_node(DOMDocument $dom, $path) {
$parts = explode('/', $path);
$elname = end($parts);
$nodes = $dom->getElementsByTagName($elname);
if ($nodes->length == 0) {
return null;
}
foreach ($nodes as $node) {
if ($node->getNodePath() === $path) {
return $node;
}
}
return null;
}
protected static function get_node_value(DOMDocument $dom, $path) {
if (!$node = self::get_node($dom, $path)) {
return null;
}
return $node->nodeValue;
}
protected static function get_node_children(DOMDocument $dom, $path, $tagname) {
if (!$node = self::get_node($dom, $path)) {
return null;
}
$return = array();
foreach ($node->childNodes as $child) {
if ($child->nodeName === $tagname) {
$return[] = $child;
}
}
return $return;
}
protected static function get_node_children_values(DOMDocument $dom, $path, $tagname) {
$children = self::get_node_children($dom, $path, $tagname);
if ($children === null) {
return null;
}
$return = array();
foreach ($children as $child) {
$return[] = $child->nodeValue;
}
return $return;
}
}
-120
View File
@@ -1,120 +0,0 @@
<?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/>.
/**
* Role add/reset selection form.
*
* @package core_role
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once("$CFG->libdir/formslib.php");
/**
* Role add/reset selection form.
*
* @package core_role
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_role_preset_form extends moodleform {
/**
* Definition of this form.
*/
protected function definition() {
$mform = $this->_form;
$data = $this->_customdata;
$options = array();
$group = get_string('other');
$options[$group] = array();
$options[$group][0] = get_string('norole', 'core_role');
$group = get_string('role', 'core');
$options[$group] = array();
foreach (role_get_names(null, ROLENAME_BOTH) as $role) {
// Allow reset to self too, it may be useful when importing incomplete XML preset.
$options[$group][$role->id] = $role->localname;
}
$group = get_string('archetype', 'core_role');
$options[$group] = array();
foreach (get_role_archetypes() as $type) {
$options[$group][$type] = get_string('archetype'.$type, 'core_role');
}
$mform->addElement('header', 'presetheader', get_string('roleresetdefaults', 'core_role'));
$mform->addElement('selectgroups', 'resettype', get_string('roleresetrole', 'core_role'), $options);
$mform->addElement('filepicker', 'rolepreset', get_string('rolerepreset', 'core_role'));
if ($data['roleid']) {
$mform->addElement('header', 'resetheader', get_string('resetrole', 'core_role'));
$mform->addElement('advcheckbox', 'shortname', get_string('roleshortname', 'core_role'));
$mform->addElement('advcheckbox', 'name', get_string('customrolename', 'core_role'));
$mform->addElement('advcheckbox', 'description', get_string('customroledescription', 'core_role'));
$mform->addElement('advcheckbox', 'archetype', get_string('archetype', 'core_role'));
$mform->addElement('advcheckbox', 'contextlevels', get_string('maybeassignedin', 'core_role'));
$mform->addElement('advcheckbox', 'allowassign', get_string('allowassign', 'core_role'));
$mform->addElement('advcheckbox', 'allowoverride', get_string('allowoverride', 'core_role'));
$mform->addElement('advcheckbox', 'allowswitch', get_string('allowswitch', 'core_role'));
$mform->addElement('advcheckbox', 'permissions', get_string('permissions', 'core_role'));
}
$mform->addElement('hidden', 'roleid');
$mform->setType('roleid', PARAM_INT);
$mform->addElement('hidden', 'action');
$mform->setType('action', PARAM_ALPHA);
$mform->addElement('hidden', 'return');
$mform->setType('return', PARAM_ALPHA);
$this->add_action_buttons(true, get_string('continue', 'core'));
$this->set_data($data);
}
/**
* Validate this form.
*
* @param array $data submitted data
* @param array $files not used
* @return array errors
*/
public function validation($data, $files) {
$errors = parent::validation($data, $files);
if ($files = $this->get_draft_files('rolepreset')) {
/** @var stored_file $file */
$file = reset($files);
$xml = $file->get_content();
if (!core_role_preset::is_valid_preset($xml)) {
$errors['rolepreset'] = get_string('invalidpresetfile', 'core_role');
}
}
return $errors;
}
}
@@ -1,136 +0,0 @@
<?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/>.
/**
* Library code used by the roles administration interfaces.
*
* @package core_role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class core_role_view_role_definition_table extends core_role_define_role_table_advanced {
public function __construct($context, $roleid) {
parent::__construct($context, $roleid);
$this->displaypermissions = array(CAP_ALLOW => $this->allpermissions[CAP_ALLOW]);
$this->disabled = 'disabled="disabled" ';
}
public function save_changes() {
throw new moodle_exception('invalidaccess');
}
protected function get_name_field($id) {
return role_get_name($this->role);
}
protected function get_shortname_field($id) {
return $this->role->shortname;
}
protected function get_description_field($id) {
return role_get_description($this->role);
}
protected function get_archetype_field($id) {
if (empty($this->role->archetype)) {
return get_string('none');
} else {
return get_string('archetype'.$this->role->archetype, 'core_role');
}
}
protected function get_allow_role_control($type) {
if ($roles = $this->get_allow_roles_list($type)) {
$roles = role_fix_names($roles, null, ROLENAME_ORIGINAL, true);
return implode(', ', $roles);
} else {
return get_string('none');
}
}
protected function print_show_hide_advanced_button() {
// Do nothing.
}
/**
* Returns HTML risk icons.
*
* @return string
*/
protected function get_role_risks_info() {
global $OUTPUT;
if (empty($this->roleid)) {
return '';
}
$risks = array();
$allrisks = get_all_risks();
foreach ($this->capabilities as $capability) {
$perm = $this->permissions[$capability->name];
if ($perm != CAP_ALLOW) {
continue;
}
foreach ($allrisks as $type => $risk) {
if ($risk & (int)$capability->riskbitmask) {
$risks[$type] = $risk;
}
}
}
$risksurl = new moodle_url(get_docs_url(s(get_string('risks', 'core_role'))));
foreach ($risks as $type => $risk) {
$pixicon = new pix_icon('/i/' . str_replace('risk', 'risk_', $type), get_string($type . 'short', 'admin'));
$risks[$type] = $OUTPUT->action_icon($risksurl, $pixicon, new popup_action('click', $risksurl));
}
return implode(' ', $risks);
}
/**
* Returns true if the row should be skipped.
*
* @param string $capability
* @return bool
*/
protected function skip_row($capability) {
$perm = $this->permissions[$capability->name];
if ($perm == CAP_INHERIT) {
// Do not print empty rows in role overview, admins need to know quickly what is allowed and prohibited,
// if they want to see the list of all capabilities they can go to edit role page.
return true;
}
parent::skip_row($capability);
}
protected function add_permission_cells($capability) {
$perm = $this->permissions[$capability->name];
$permname = $this->allpermissions[$perm];
$defaultperm = $this->allpermissions[$this->parentpermissions[$capability->name]];
if ($permname != $defaultperm) {
$default = get_string('defaultx', 'core_role', $this->strperms[$defaultperm]);
} else {
$default = "&#xa0;";
}
echo '<td class="' . $permname . '">' . $this->strperms[$permname] . '<span class="note">' .
$default . '</span></td>';
}
}
+122 -228
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -18,271 +19,164 @@
* Lets the user edit role definitions.
*
* Responds to actions:
* add - add a new role (allows import, duplicate, archetype)
* export - save xml role definition
* add - add a new role
* duplicate - like add, only initialise the new role by using an existing one.
* edit - edit the definition of a role
* view - view the definition of a role
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->libdir.'/adminlib.php');
$action = required_param('action', PARAM_ALPHA);
if (!in_array($action, array('add', 'export', 'edit', 'reset', 'view'))) {
throw new moodle_exception('invalidaccess');
}
if ($action != 'add') {
$roleid = required_param('roleid', PARAM_INT);
} else {
$roleid = 0;
}
$resettype = optional_param('resettype', '', PARAM_RAW);
$return = optional_param('return', 'manage', PARAM_ALPHA);
// Get the base URL for this and related pages into a convenient variable.
$baseurl = new moodle_url('/admin/roles/define.php', array('action'=>$action, 'roleid'=>$roleid));
$manageurl = new moodle_url('/admin/roles/manage.php');
if ($return === 'manage') {
$returnurl = $manageurl;
} else {
$returnurl = new moodle_url('/admin/roles/define.php', array('action'=>'view', 'roleid'=>$roleid));;
}
// Check access permissions.
$systemcontext = context_system::instance();
require_login();
require_capability('moodle/role:manage', $systemcontext);
admin_externalpage_setup('defineroles', '', array('action' => $action, 'roleid' => $roleid), new moodle_url('/admin/roles/define.php'));
// Export role.
if ($action === 'export') {
core_role_preset::send_export_xml($roleid);
die;
}
// Handle the toggle advanced mode button.
$showadvanced = get_user_preferences('definerole_showadvanced', false);
if (optional_param('toggleadvanced', false, PARAM_BOOL)) {
$showadvanced = !$showadvanced;
set_user_preference('definerole_showadvanced', $showadvanced);
}
// Get some basic data we are going to need.
$roles = get_all_roles();
$rolenames = role_fix_names($roles, $systemcontext, ROLENAME_ORIGINAL);
$rolescount = count($roles);
if ($action === 'add') {
$title = get_string('addinganewrole', 'core_role');
} else if ($action == 'view') {
$title = get_string('viewingdefinitionofrolex', 'core_role', $rolenames[$roleid]->localname);
} else if ($action == 'reset') {
$title = get_string('resettingrole', 'core_role', $rolenames[$roleid]->localname);
} else {
$title = get_string('editingrolex', 'core_role', $rolenames[$roleid]->localname);
}
// Decide how to create new role.
if ($action === 'add' and $resettype !== 'none') {
$mform = new core_role_preset_form(null, array('action'=>'add', 'roleid'=>0, 'resettype'=>'0', 'return'=>'manage'));
if ($mform->is_cancelled()) {
redirect($manageurl);
} else if ($data = $mform->get_data()) {
$resettype = $data->resettype;
$options = array(
'shortname' => 1,
'name' => 1,
'description' => 1,
'permissions' => 1,
'archetype' => 1,
'contextlevels' => 1,
'allowassign' => 1,
'allowoverride' => 1,
'allowswitch' => 1);
if ($showadvanced) {
$definitiontable = new core_role_define_role_table_advanced($systemcontext, 0);
} else {
$definitiontable = new core_role_define_role_table_basic($systemcontext, 0);
}
if (is_number($resettype)) {
// Duplicate the role.
$definitiontable->force_duplicate($resettype, $options);
} else {
// Must be an archetype.
$definitiontable->force_archetype($resettype, $options);
}
if ($xml = $mform->get_file_content('rolepreset')) {
$definitiontable->force_preset($xml, $options);
}
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$action = required_param('action', PARAM_ALPHA);
if (!in_array($action, array('add', 'duplicate', 'edit', 'view'))) {
throw new moodle_exception('invalidaccess');
}
if ($action != 'add') {
$roleid = required_param('roleid', PARAM_INT);
} else {
echo $OUTPUT->header();
echo $OUTPUT->heading_with_help($title, 'roles', 'core_role');
$mform->display();
echo $OUTPUT->footer();
die;
$roleid = 0;
}
} else if ($action === 'reset' and $resettype !== 'none') {
if (!$role = $DB->get_record('role', array('id'=>$roleid))) {
/// Get the base URL for this and related pages into a convenient variable.
$manageurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/manage.php';
$defineurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/define.php';
if ($action == 'duplicate') {
$baseurl = $defineurl . '?action=add';
} else {
$baseurl = $defineurl . '?action=' . $action;
if ($roleid) {
$baseurl .= '&amp;roleid=' . $roleid;
}
}
/// Check access permissions.
$systemcontext = context_system::instance();
require_login();
require_capability('moodle/role:manage', $systemcontext);
admin_externalpage_setup('defineroles', '', array('action' => $action, 'roleid' => $roleid), $defineurl);
/// Handle the cancel button.
if (optional_param('cancel', false, PARAM_BOOL)) {
redirect($manageurl);
}
$resettype = empty($role->archetype) ? '0' : $role->archetype;
$mform = new core_role_preset_form(null,
array('action'=>'reset', 'roleid'=>$roleid, 'resettype'=>$resettype , 'permissions'=>1, 'archetype'=>1, 'contextlevels'=>1, 'return'=>$return));
if ($mform->is_cancelled()) {
redirect($returnurl);
} else if ($data = $mform->get_data()) {
$resettype = $data->resettype;
$options = array(
'shortname' => $data->shortname,
'name' => $data->name,
'description' => $data->description,
'permissions' => $data->permissions,
'archetype' => $data->archetype,
'contextlevels' => $data->contextlevels,
'allowassign' => $data->allowassign,
'allowoverride' => $data->allowoverride,
'allowswitch' => $data->allowswitch);
if ($showadvanced) {
$definitiontable = new core_role_define_role_table_advanced($systemcontext, $roleid);
} else {
$definitiontable = new core_role_define_role_table_basic($systemcontext, $roleid);
}
if (is_number($resettype)) {
// Duplicate the role.
$definitiontable->force_duplicate($resettype, $options);
} else {
// Must be an archetype.
$definitiontable->force_archetype($resettype, $options);
}
if ($xml = $mform->get_file_content('rolepreset')) {
$definitiontable->force_preset($xml, $options);
}
} else {
echo $OUTPUT->header();
echo $OUTPUT->heading_with_help($title, 'roles', 'core_role');
$mform->display();
echo $OUTPUT->footer();
die;
/// Handle the toggle advanced mode button.
$showadvanced = get_user_preferences('definerole_showadvanced', false);
if (optional_param('toggleadvanced', false, PARAM_BOOL)) {
$showadvanced = !$showadvanced;
set_user_preference('definerole_showadvanced', $showadvanced);
}
} else {
// Create the table object.
if ($action === 'view') {
$definitiontable = new core_role_view_role_definition_table($systemcontext, $roleid);
/// Get some basic data we are going to need.
$roles = get_all_roles();
$rolenames = role_fix_names($roles, $systemcontext, ROLENAME_ORIGINAL);
$rolescount = count($roles);
/// Create the table object.
if ($action == 'view') {
$definitiontable = new view_role_definition_table($systemcontext, $roleid);
} else if ($showadvanced) {
$definitiontable = new core_role_define_role_table_advanced($systemcontext, $roleid);
$definitiontable = new define_role_table_advanced($systemcontext, $roleid);
} else {
$definitiontable = new core_role_define_role_table_basic($systemcontext, $roleid);
$definitiontable = new define_role_table_basic($systemcontext, $roleid);
}
$definitiontable->read_submitted_permissions();
}
// Handle the cancel button.
if (optional_param('cancel', false, PARAM_BOOL)) {
redirect($returnurl);
}
// Process submission in necessary.
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey() && $definitiontable->is_submission_valid()) {
$definitiontable->save_changes();
$tableroleid = $definitiontable->get_role_id();
// Trigger event.
$event = \core\event\role_capabilities_updated::create(
array(
'context' => $systemcontext,
'objectid' => $roleid
)
);
$event->set_legacy_logdata(array(SITEID, 'role', $action, 'admin/roles/define.php?action=view&roleid=' . $tableroleid,
$definitiontable->get_role_name(), '', $USER->id));
if (!empty($role)) {
$event->add_record_snapshot('role', $role);
if ($action == 'duplicate') {
$definitiontable->make_copy();
}
$event->trigger();
if ($action === 'add') {
redirect(new moodle_url('/admin/roles/define.php', array('action'=>'view', 'roleid'=>$definitiontable->get_role_id())));
/// Process submission in necessary.
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey() && $definitiontable->is_submission_valid()) {
$definitiontable->save_changes();
add_to_log(SITEID, 'role', $action, 'admin/roles/define.php?action=view&roleid=' .
$definitiontable->get_role_id(), $definitiontable->get_role_name(), '', $USER->id);
redirect($manageurl);
}
/// Print the page header and tabs.
echo $OUTPUT->header();
$currenttab = 'manage';
include('managetabs.php');
if ($action == 'add') {
$title = get_string('addinganewrole', 'role');
} else if ($action == 'duplicate') {
$title = get_string('addingrolebycopying', 'role', $rolenames[$roleid]->localname);
} else if ($action == 'view') {
$title = get_string('viewingdefinitionofrolex', 'role', $rolenames[$roleid]->localname);
} else if ($action == 'edit') {
$title = get_string('editingrolex', 'role', $rolenames[$roleid]->localname);
}
echo $OUTPUT->heading_with_help($title, 'roles', 'role');
/// Work out some button labels.
if ($action == 'add' || $action == 'duplicate') {
$submitlabel = get_string('createthisrole', 'role');
} else {
redirect($returnurl);
$submitlabel = get_string('savechanges');
}
}
// Print the page header and tabs.
echo $OUTPUT->header();
/// On the view page, show some extra controls at the top.
if ($action == 'view') {
echo $OUTPUT->container_start('buttons');
$options = array();
$options['roleid'] = $roleid;
$options['action'] = 'edit';
echo $OUTPUT->single_button(new moodle_url($defineurl, $options), get_string('edit'));
$options['action'] = 'reset';
if ($definitiontable->get_archetype()) {
echo $OUTPUT->single_button(new moodle_url($manageurl, $options), get_string('resetrole', 'role'));
} else {
echo $OUTPUT->single_button(new moodle_url($manageurl, $options), get_string('resetrolenolegacy', 'role'));
}
$options['action'] = 'duplicate';
echo $OUTPUT->single_button(new moodle_url($defineurl, $options), get_string('duplicaterole', 'role'));
echo $OUTPUT->single_button(new moodle_url($manageurl), get_string('listallroles', 'role'));
echo $OUTPUT->container_end();
}
$currenttab = 'manage';
require('managetabs.php');
echo $OUTPUT->heading_with_help($title, 'roles', 'core_role');
// Work out some button labels.
if ($action === 'add') {
$submitlabel = get_string('createthisrole', 'core_role');
} else {
$submitlabel = get_string('savechanges');
}
// On the view page, show some extra controls at the top.
if ($action === 'view') {
echo $OUTPUT->container_start('buttons');
$url = new moodle_url('/admin/roles/define.php', array('action'=>'edit', 'roleid'=>$roleid, 'return'=>'define'));
echo $OUTPUT->single_button(new moodle_url($url), get_string('edit'));
$url = new moodle_url('/admin/roles/define.php', array('action'=>'reset', 'roleid'=>$roleid, 'return'=>'define'));
echo $OUTPUT->single_button(new moodle_url($url), get_string('resetrole', 'core_role'));
$url = new moodle_url('/admin/roles/define.php', array('action'=>'export', 'roleid'=>$roleid));
echo $OUTPUT->single_button(new moodle_url($url), get_string('export', 'core_role'));
echo $OUTPUT->single_button($manageurl, get_string('listallroles', 'core_role'));
echo $OUTPUT->container_end();
}
// Start the form.
echo $OUTPUT->box_start('generalbox');
if ($action === 'view') {
echo '<div class="mform">';
} else {
// Start the form.
echo $OUTPUT->box_start('generalbox');
if ($action == 'view') {
echo '<div class="mform">';
} else {
?>
<form id="rolesform" class="mform" action="<?php p($baseurl->out(false)); ?>" method="post"><div>
<form id="rolesform" class="mform" action="<?php echo $baseurl; ?>" method="post"><div>
<input type="hidden" name="sesskey" value="<?php p(sesskey()) ?>" />
<input type="hidden" name="return" value="<?php p($return); ?>" />
<input type="hidden" name="resettype" value="none" />
<div class="submit buttons">
<input type="submit" name="savechanges" value="<?php p($submitlabel); ?>" />
<input type="submit" name="savechanges" value="<?php echo $submitlabel; ?>" />
<input type="submit" name="cancel" value="<?php print_string('cancel'); ?>" />
</div>
<?php
}
}
// Print the form controls.
$definitiontable->display();
// Print the form controls.
$definitiontable->display();
// Close the stuff we left open above.
if ($action === 'view') {
echo '</div>';
} else {
?>
/// Close the stuff we left open above.
if ($action == 'view') {
echo '</div>';
} else {
?>
<div class="submit buttons">
<input type="submit" name="savechanges" value="<?php p($submitlabel); ?>" />
<input type="submit" name="savechanges" value="<?php echo $submitlabel; ?>" />
<input type="submit" name="cancel" value="<?php print_string('cancel'); ?>" />
</div>
</div></form>
<?php
}
echo $OUTPUT->box_end();
<?php
}
echo $OUTPUT->box_end();
// Print a link back to the all roles list.
echo '<div class="backlink">';
echo '<p><a href="' . s($manageurl->out(false)) . '">' . get_string('backtoallroles', 'core_role') . '</a></p>';
echo '</div>';
/// Print a link back to the all roles list.
echo '<div class="backlink">';
echo '<p><a href="' . $manageurl . '">' . get_string('backtoallroles', 'role') . '</a></p>';
echo '</div>';
echo $OUTPUT->footer();
echo $OUTPUT->footer();
+1721 -18
View File
File diff suppressed because it is too large Load Diff
+203 -160
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -22,196 +23,238 @@
* delete - delete a role (with are-you-sure)
* moveup - change the sort order
* movedown - change the sort order
* reset - set a role's permissions back to the default for that legacy role type.
*
* For all but the first two of those, you also need a roleid parameter, and
* possibly some other data.
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
require_once(dirname(__FILE__) . '/../../config.php');
require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$action = optional_param('action', '', PARAM_ALPHA);
if ($action) {
$roleid = required_param('roleid', PARAM_INT);
} else {
$roleid = 0;
}
$action = optional_param('action', '', PARAM_ALPHA);
if ($action) {
$roleid = required_param('roleid', PARAM_INT);
}
// Get the base URL for this and related pages into a convenient variable.
$baseurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/manage.php';
$defineurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/define.php';
/// Get the base URL for this and related pages into a convenient variable.
$baseurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/manage.php';
$defineurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/define.php';
// Check access permissions.
$systemcontext = context_system::instance();
require_login();
require_capability('moodle/role:manage', $systemcontext);
admin_externalpage_setup('defineroles');
/// Check access permissions.
$systemcontext = context_system::instance();
require_login();
require_capability('moodle/role:manage', $systemcontext);
admin_externalpage_setup('defineroles');
// Get some basic data we are going to need.
$roles = role_fix_names(get_all_roles(), $systemcontext, ROLENAME_ORIGINAL);
/// Get some basic data we are going to need.
$roles = role_fix_names(get_all_roles(), $systemcontext, ROLENAME_ORIGINAL);
$undeletableroles = array();
$undeletableroles[$CFG->notloggedinroleid] = 1;
$undeletableroles[$CFG->guestroleid] = 1;
$undeletableroles[$CFG->defaultuserroleid] = 1;
$undeletableroles = array();
$undeletableroles[$CFG->notloggedinroleid] = 1;
$undeletableroles[$CFG->guestroleid] = 1;
$undeletableroles[$CFG->defaultuserroleid] = 1;
// Process submitted data.
$confirmed = (optional_param('confirm', false, PARAM_BOOL) && data_submitted() && confirm_sesskey());
switch ($action) {
case 'delete':
if (isset($undeletableroles[$roleid])) {
print_error('cannotdeletethisrole', '', $baseurl);
}
if (!$confirmed) {
// Show confirmation.
echo $OUTPUT->header();
$optionsyes = array('action'=>'delete', 'roleid'=>$roleid, 'sesskey'=>sesskey(), 'confirm'=>1);
$a = new stdClass();
$a->id = $roleid;
$a->name = $roles[$roleid]->name;
$a->shortname = $roles[$roleid]->shortname;
$a->count = $DB->count_records_select('role_assignments',
'roleid = ?', array($roleid), 'COUNT(DISTINCT userid)');
///.Process submitted data.
$confirmed = optional_param('confirm', false, PARAM_BOOL) && data_submitted() && confirm_sesskey();
switch ($action) {
case 'delete':
if (isset($undeletableroles[$roleid])) {
print_error('cannotdeletethisrole', '', $baseurl);
}
if (!$confirmed) {
// show confirmation
echo $OUTPUT->header();
$optionsyes = array('action'=>'delete', 'roleid'=>$roleid, 'sesskey'=>sesskey(), 'confirm'=>1);
$a = new stdClass();
$a->id = $roleid;
$a->name = $roles[$roleid]->name;
$a->shortname = $roles[$roleid]->shortname;
$a->count = $DB->count_records('role_assignments', array('roleid'=>$roleid));
$formcontinue = new single_button(new moodle_url($baseurl, $optionsyes), get_string('yes'));
$formcancel = new single_button(new moodle_url($baseurl), get_string('no'), 'get');
echo $OUTPUT->confirm(get_string('deleterolesure', 'core_role', $a), $formcontinue, $formcancel);
echo $OUTPUT->footer();
die;
}
if (!delete_role($roleid)) {
// The delete failed, but mark the context dirty in case.
$systemcontext->mark_dirty();
print_error('cannotdeleterolewithid', 'error', $baseurl, $roleid);
}
// Deleted a role sitewide...
$systemcontext->mark_dirty();
redirect($baseurl);
break;
$formcontinue = new single_button(new moodle_url($baseurl, $optionsyes), get_string('yes'));
$formcancel = new single_button(new moodle_url($baseurl), get_string('no'), 'get');
echo $OUTPUT->confirm(get_string('deleterolesure', 'role', $a), $formcontinue, $formcancel);
echo $OUTPUT->footer();
die;
}
if (!delete_role($roleid)) {
// The delete failed, but mark the context dirty in case.
mark_context_dirty($systemcontext->path);
print_error('cannotdeleterolewithid', 'error', $baseurl, $roleid);
}
// Deleted a role sitewide...
mark_context_dirty($systemcontext->path);
add_to_log(SITEID, 'role', 'delete', 'admin/roles/manage.php', $roles[$roleid]->localname, '', $USER->id);
redirect($baseurl);
break;
case 'moveup':
if (confirm_sesskey()) {
$prevrole = null;
$thisrole = null;
foreach ($roles as $role) {
if ($role->id == $roleid) {
$thisrole = $role;
break;
case 'moveup':
if (confirm_sesskey()) {
$prevrole = null;
$thisrole = null;
foreach ($roles as $role) {
if ($role->id == $roleid) {
$thisrole = $role;
break;
} else {
$prevrole = $role;
}
}
if (is_null($thisrole) || is_null($prevrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
if (!switch_roles($thisrole, $prevrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
}
redirect($baseurl);
break;
case 'movedown':
if (confirm_sesskey()) {
$thisrole = null;
$nextrole = null;
foreach ($roles as $role) {
if ($role->id == $roleid) {
$thisrole = $role;
} else if (!is_null($thisrole)) {
$nextrole = $role;
break;
}
}
if (is_null($nextrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
if (!switch_roles($thisrole, $nextrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
}
redirect($baseurl);
break;
case 'reset':
if (!$confirmed) {
// show confirmation
echo $OUTPUT->header();
$optionsyes = array('action'=>'reset', 'roleid'=>$roleid, 'sesskey'=>sesskey(), 'confirm'=>1);
$optionsno = array('action'=>'view', 'roleid'=>$roleid);
$a = new stdClass();
$a->id = $roleid;
$a->name = $roles[$roleid]->name;
$a->shortname = $roles[$roleid]->shortname;
$a->legacytype = $roles[$roleid]->archetype;
if (empty($a->legacytype)) {
$warning = get_string('resetrolesurenolegacy', 'role', $a);
} else {
$prevrole = $role;
$warning = get_string('resetrolesure', 'role', $a);
}
$formcontinue = new single_button(new moodle_url('manage.php', $optionsyes), get_string('yes'));
$formcancel = new single_button(new moodle_url('manage.php', $optionsno), get_string('no'), 'get');
echo $OUTPUT->confirm($warning, $formcontinue, $formcancel);
echo $OUTPUT->footer();
die;
}
if (is_null($thisrole) || is_null($prevrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
// Reset context levels for standard archetypes
if ($roles[$roleid]->archetype) {
set_role_contextlevels($roleid, get_default_contextlevels($roles[$roleid]->archetype));
}
if (!switch_roles($thisrole, $prevrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
}
redirect($baseurl);
break;
//reset or delete the capabilities
reset_role_capabilities($roleid);
case 'movedown':
if (confirm_sesskey()) {
$thisrole = null;
$nextrole = null;
foreach ($roles as $role) {
if ($role->id == $roleid) {
$thisrole = $role;
} else if (!is_null($thisrole)) {
$nextrole = $role;
break;
}
}
if (is_null($nextrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
if (!switch_roles($thisrole, $nextrole)) {
print_error('cannotmoverolewithid', 'error', '', $roleid);
}
}
// Mark context dirty, log and redirect.
mark_context_dirty($systemcontext->path);
add_to_log(SITEID, 'role', 'reset', 'admin/roles/manage.php?action=reset&roleid=' . $roleid, $roles[$roleid]->localname, '', $USER->id);
redirect($defineurl . '?action=view&roleid=' . $roleid);
break;
}
redirect($baseurl);
break;
/// Print the page header and tabs.
echo $OUTPUT->header();
}
$currenttab = 'manage';
include_once('managetabs.php');
// Print the page header and tabs.
echo $OUTPUT->header();
$currenttab = 'manage';
require('managetabs.php');
// Initialise table.
$table = new html_table();
$table->colclasses = array('leftalign', 'leftalign', 'leftalign', 'leftalign');
$table->id = 'roles';
$table->attributes['class'] = 'admintable generaltable';
$table->head = array(
get_string('role') . ' ' . $OUTPUT->help_icon('roles', 'core_role'),
get_string('description'),
get_string('roleshortname', 'core_role'),
get_string('edit')
);
// Get some strings outside the loop.
$stredit = get_string('edit');
$strdelete = get_string('delete');
$strmoveup = get_string('moveup');
$strmovedown = get_string('movedown');
// Print a list of roles with edit/copy/delete/reorder icons.
$table->data = array();
$firstrole = reset($roles);
$lastrole = end($roles);
foreach ($roles as $role) {
// Basic data.
$row = array(
'<a href="' . $defineurl . '?action=view&amp;roleid=' . $role->id . '">' . $role->localname . '</a>',
role_get_description($role),
s($role->shortname),
'',
/// Initialise table.
$table = new html_table();
$table->tablealign = 'center';
$table->align = array('left', 'left', 'left', 'left');
$table->wrap = array('nowrap', '', 'nowrap','nowrap');
$table->width = '90%';
$table->head = array(
get_string('role') . ' ' . $OUTPUT->help_icon('roles', 'role'),
get_string('description'),
get_string('roleshortname', 'role'),
get_string('edit')
);
// Move up.
if ($role->sortorder != $firstrole->sortorder) {
$row[3] .= get_action_icon($baseurl . '?action=moveup&amp;roleid=' . $role->id . '&amp;sesskey=' . sesskey(), 'up', $strmoveup, $strmoveup);
} else {
$row[3] .= get_spacer();
}
// Move down.
if ($role->sortorder != $lastrole->sortorder) {
$row[3] .= get_action_icon($baseurl . '?action=movedown&amp;roleid=' . $role->id . '&amp;sesskey=' . sesskey(), 'down', $strmovedown, $strmovedown);
} else {
$row[3] .= get_spacer();
}
// Edit.
$row[3] .= get_action_icon($defineurl . '?action=edit&amp;roleid=' . $role->id,
'edit', $stredit, get_string('editxrole', 'core_role', $role->localname));
// Delete.
if (isset($undeletableroles[$role->id])) {
$row[3] .= get_spacer();
} else {
$row[3] .= get_action_icon($baseurl . '?action=delete&amp;roleid=' . $role->id,
'delete', $strdelete, get_string('deletexrole', 'core_role', $role->localname));
}
/// Get some strings outside the loop.
$stredit = get_string('edit');
$strduplicate = get_string('duplicate');
$strdelete = get_string('delete');
$strmoveup = get_string('moveup');
$strmovedown = get_string('movedown');
$table->data[] = $row;
}
echo html_writer::table($table);
/// Print a list of roles with edit/copy/delete/reorder icons.
$table->data = array();
$firstrole = reset($roles);
$lastrole = end($roles);
foreach ($roles as $role) {
echo $OUTPUT->container_start('buttons');
echo $OUTPUT->single_button(new moodle_url($defineurl, array('action' => 'add')), get_string('addrole', 'core_role'), 'get');
echo $OUTPUT->container_end();
/// Basic data.
$row = array(
'<a href="' . $defineurl . '?action=view&amp;roleid=' . $role->id . '">' . $role->localname . '</a>',
role_get_description($role),
s($role->shortname),
'',
);
echo $OUTPUT->footer();
die;
/// Icons:
// move up
if ($role->sortorder != $firstrole->sortorder) {
$row[3] .= get_action_icon($baseurl . '?action=moveup&amp;roleid=' . $role->id . '&amp;sesskey=' . sesskey(), 'up', $strmoveup, $strmoveup);
} else {
$row[3] .= get_spacer();
}
// move down
if ($role->sortorder != $lastrole->sortorder) {
$row[3] .= get_action_icon($baseurl . '?action=movedown&amp;roleid=' . $role->id . '&amp;sesskey=' . sesskey(), 'down', $strmovedown, $strmovedown);
} else {
$row[3] .= get_spacer();
}
// edit
$row[3] .= get_action_icon($defineurl . '?action=edit&amp;roleid=' . $role->id,
'edit', $stredit, get_string('editxrole', 'role', $role->localname));
// duplicate
$row[3] .= get_action_icon($defineurl . '?action=duplicate&amp;roleid=' . $role->id,
'copy', $strduplicate, get_string('createrolebycopying', 'role', $role->localname));
// delete
if (isset($undeletableroles[$role->id])) {
$row[3] .= get_spacer();
} else {
$row[3] .= get_action_icon($baseurl . '?action=delete&amp;roleid=' . $role->id,
'delete', $strdelete, get_string('deletexrole', 'role', $role->localname));
}
$table->data[] = $row;
}
echo html_writer::table($table);
echo $OUTPUT->container_start('buttons');
echo $OUTPUT->single_button(new moodle_url($defineurl, array('action' => 'add')), get_string('addrole', 'role'), 'get');
echo $OUTPUT->container_end();
echo $OUTPUT->footer();
die;
function get_action_icon($url, $icon, $alt, $tooltip) {
global $OUTPUT;
+12 -7
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -17,18 +18,22 @@
/**
* Defines the tab bar used on the manage/allow assign/allow overrides pages.
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
if (!defined('MOODLE_INTERNAL')) {
die('Direct access to this script is forbidden.'); // It must be included from a Moodle page
}
$toprow = array();
$toprow[] = new tabobject('manage', new moodle_url('/admin/roles/manage.php'), get_string('manageroles', 'core_role'));
$toprow[] = new tabobject('assign', new moodle_url('/admin/roles/allow.php', array('mode'=>'assign')), get_string('allowassign', 'core_role'));
$toprow[] = new tabobject('override', new moodle_url('/admin/roles/allow.php', array('mode'=>'override')), get_string('allowoverride', 'core_role'));
$toprow[] = new tabobject('switch', new moodle_url('/admin/roles/allow.php', array('mode'=>'switch')), get_string('allowswitch', 'core_role'));
$toprow[] = new tabobject('manage', new moodle_url('/admin/roles/manage.php'), get_string('manageroles', 'role'));
$toprow[] = new tabobject('assign', new moodle_url('/admin/roles/allow.php', array('mode'=>'assign')), get_string('allowassign', 'role'));
$toprow[] = new tabobject('override', new moodle_url('/admin/roles/allow.php', array('mode'=>'override')), get_string('allowoverride', 'role'));
$toprow[] = new tabobject('switch', new moodle_url('/admin/roles/allow.php', array('mode'=>'switch')), get_string('allowswitch', 'role'));
$tabs = array($toprow);
echo $OUTPUT->tabtree($toprow, $currenttab);
print_tabs($tabs, $currenttab);
+1 -1
View File
@@ -51,7 +51,7 @@ M.core_role.init_cap_table_filter = function(Y, tableid, contextid) {
marginRight : 'auto'
});
// Create the capability search input.
this.input = Y.Node.create('<input type="text" id="'+this.table.get('id')+'capabilitysearch" value="'+Y.Escape.html(filtervalue)+'" />');
this.input = Y.Node.create('<input type="text" id="'+this.table.get('id')+'capabilitysearch" value="'+filtervalue+'" />');
// Create a label for the search input.
this.label = Y.Node.create('<label for="'+this.input.get('id')+'">'+M.str.moodle.filter+' </label>');
// Create a clear button to clear the input.
+27 -50
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -17,15 +18,17 @@
/**
* Lets you override role definitions in contexts.
*
* @package core_role
* @package core
* @subpackage role
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require('../../config.php');
require_once("$CFG->dirroot/$CFG->admin/roles/lib.php");
$contextid = required_param('contextid', PARAM_INT);
$roleid = required_param('roleid', PARAM_INT);
$contextid = required_param('contextid', PARAM_INT); // context id
$roleid = required_param('roleid', PARAM_INT); // requested role id
list($context, $course, $cm) = get_context_info_array($contextid);
@@ -45,7 +48,7 @@ if ($course) {
}
}
// Security first.
// security first
require_login($course, false, $cm);
$safeoverridesonly = false;
if (!has_capability('moodle/role:override', $context)) {
@@ -53,19 +56,9 @@ if (!has_capability('moodle/role:override', $context)) {
$safeoverridesonly = true;
}
$PAGE->set_url($url);
$PAGE->set_context($context);
$PAGE->set_pagelayout('admin');
if ($context->contextlevel == CONTEXT_USER and $USER->id != $context->instanceid) {
$PAGE->navigation->extend_for_user($user);
$PAGE->set_context(context_course::instance($course->id));
navigation_node::override_active_url(new moodle_url('/admin/roles/permissions.php',
array('contextid'=>$context->id, 'userid'=>$context->instanceid, 'courseid'=>$course->id)));
} else {
$PAGE->set_context($context);
navigation_node::override_active_url(new moodle_url('/admin/roles/permissions.php', array('contextid'=>$context->id)));
}
$courseid = $course->id;
$returnurl = new moodle_url('/admin/roles/permissions.php', array('contextid' => $context->id));
@@ -77,15 +70,15 @@ if (optional_param('cancel', false, PARAM_BOOL)) {
$role = $DB->get_record('role', array('id'=>$roleid), '*', MUST_EXIST);
// These are needed early.
// These are needed early
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
list($overridableroles, $overridecounts, $nameswithcounts) = get_overridable_roles($context, ROLENAME_BOTH, true);
// Work out an appropriate page title.
$contextname = $context->get_context_name();
$straction = get_string('overrideroles', 'core_role'); // Used by tabs.php.
$contextname = print_context_name($context);
$straction = get_string('overrideroles', 'role'); // Used by tabs.php
$a = (object)array('context' => $contextname, 'role' => $overridableroles[$roleid]);
$title = get_string('overridepermissionsforrole', 'core_role', $a);
$title = get_string('overridepermissionsforrole', 'role', $a);
$currenttab = 'permissions';
@@ -101,17 +94,17 @@ switch ($context->contextlevel) {
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading($SITE->fullname);
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
$PAGE->set_heading(get_string('frontpage', 'admin'));
admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading($context->get_context_name(false));
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
@@ -119,61 +112,45 @@ switch ($context->contextlevel) {
break;
}
// Make sure this user can override that role.
// Make sure this user can override that role
if (empty($overridableroles[$roleid])) {
$a = new stdClass;
$a->roleid = $roleid;
$a->context = $contextname;
print_error('cannotoverriderolehere', '', $context->get_url(), $a);
print_error('cannotoverriderolehere', '', get_context_url($context), $a);
}
// If we are actually overriding a role, create the table object, and save changes if appropriate.
$overridestable = new core_role_override_permissions_table_advanced($context, $roleid, $safeoverridesonly);
$overridestable = new override_permissions_table_advanced($context, $roleid, $safeoverridesonly);
$overridestable->read_submitted_permissions();
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
$overridestable->save_changes();
$rolename = $overridableroles[$roleid];
// Trigger event.
$event = \core\event\role_capabilities_updated::create(
array(
'context' => $context,
'objectid' => $roleid,
)
);
$event->set_legacy_logdata(
array(
$course->id, 'role', 'override', 'admin/roles/override.php?contextid=' . $context->id . '&roleid=' . $roleid,
$rolename, '', $USER->id
)
);
$event->add_record_snapshot('role', $role);
$event->trigger();
add_to_log($course->id, 'role', 'override', 'admin/roles/override.php?contextid='.$context->id.'&roleid='.$roleid, $rolename, '', $USER->id);
redirect($returnurl);
}
// Finally start page output.
// Finally start page output
echo $OUTPUT->header();
echo $OUTPUT->heading_with_help($title, 'overridepermissions', 'core_role');
echo $OUTPUT->heading_with_help($title, 'overridepermissions', 'role');
// Show UI for overriding roles.
if (!empty($capabilities)) {
echo $OUTPUT->box(get_string('nocapabilitiesincontext', 'core_role'), 'generalbox boxaligncenter');
echo $OUTPUT->box(get_string('nocapabilitiesincontext', 'role'), 'generalbox boxaligncenter');
} else {
// Print the capabilities overrideable in this context.
// Print the capabilities overrideable in this context
echo $OUTPUT->box_start('generalbox capbox');
echo html_writer::start_tag('form', array('id'=>'overrideform', 'action'=>$PAGE->url->out(), 'method'=>'post'));
echo html_writer::start_tag('div');
echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'roleid', 'value'=>$roleid));
echo html_writer::tag('p', get_string('highlightedcellsshowinherit', 'core_role'), array('class'=>'overridenotice'));
echo html_writer::tag('p', get_string('highlightedcellsshowinherit', 'role'), array('class'=>'overridenotice'));
$overridestable->display();
if ($overridestable->has_locked_capabilities()) {
echo '<p class="overridenotice">' . get_string('safeoverridenotice', 'core_role') . "</p>\n";
echo '<p class="overridenotice">' . get_string('safeoverridenotice', 'role') . "</p>\n";
}
echo html_writer::start_tag('div', array('class'=>'submit_buttons'));
@@ -188,9 +165,9 @@ if (!empty($capabilities)) {
// Print a form to swap roles, and a link back to the all roles list.
echo html_writer::start_tag('div', array('class'=>'backlink'));
$select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
$select->label = get_string('overrideanotherrole', 'core_role');
$select->label = get_string('overrideanotherrole', 'role');
echo $OUTPUT->render($select);
echo html_writer::tag('p', html_writer::tag('a', get_string('backtoallroles', 'core_role'), array('href'=>$returnurl)));
echo html_writer::tag('p', html_writer::tag('a', get_string('backtoallroles', 'role'), array('href'=>$returnurl)));
echo html_writer::end_tag('div');
echo $OUTPUT->footer();
+36 -48
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,16 +16,19 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Change permissions.
* This script serves draft files of current user
*
* @package core_role
* @copyright 2009 Petr Skoda {@link http://skodak.org}
* @package core
* @subpackage role
* @copyright 2009 Petr Skoda (skodak) info@skodak.org
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require('../../config.php');
require_once("$CFG->dirroot/$CFG->admin/roles/lib.php");
require_once("permissions_forms.php");
$contextid = required_param('contextid', PARAM_INT);
$contextid = required_param('contextid',PARAM_INT);
$roleid = optional_param('roleid', 0, PARAM_INT);
$capability = optional_param('capability', false, PARAM_CAPABILITY);
@@ -33,7 +37,6 @@ $prevent = optional_param('prevent', 0, PARAM_BOOL);
$allow = optional_param('allow', 0, PARAM_BOOL);
$unprohibit = optional_param('unprohibit', 0, PARAM_BOOL);
$prohibit = optional_param('prohibit', 0, PARAM_BOOL);
$return = optional_param('return', null, PARAM_ALPHANUMEXT);
list($context, $course, $cm) = get_context_info_array($contextid);
@@ -53,22 +56,15 @@ if ($course) {
}
}
// Security first.
// security first
require_login($course, false, $cm);
require_capability('moodle/role:review', $context);
$PAGE->set_url($url);
if ($context->contextlevel == CONTEXT_USER and $USER->id != $context->instanceid) {
$PAGE->navigation->extend_for_user($user);
$PAGE->set_context(context_course::instance($course->id));
} else {
$PAGE->set_context($context);
}
$PAGE->set_context($context);
$courseid = $course->id;
// These are needed early because of tabs.php.
// These are needed early because of tabs.php
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
list($overridableroles, $overridecounts, $nameswithcounts) = get_overridable_roles($context, ROLENAME_BOTH, true);
if ($capability) {
@@ -78,9 +74,9 @@ if ($capability) {
$allowoverrides = has_capability('moodle/role:override', $context);
$allowsafeoverrides = has_capability('moodle/role:safeoverride', $context);
$contextname = $context->get_context_name();
$title = get_string('permissionsincontext', 'core_role', $contextname);
$straction = get_string('permissions', 'core_role'); // Used by tabs.php.
$contextname = print_context_name($context);
$title = get_string('permissionsincontext', 'role', $contextname);
$straction = get_string('permissions', 'role'); // Used by tabs.php
$currenttab = 'permissions';
$PAGE->set_pagelayout('admin');
@@ -95,17 +91,17 @@ switch ($context->contextlevel) {
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading($SITE->fullname);
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
$PAGE->set_heading(get_string('frontpage', 'admin'));
admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading($context->get_context_name(false));
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
@@ -113,12 +109,12 @@ switch ($context->contextlevel) {
break;
}
// Handle confirmations and actions.
// We have a capability and overrides are allowed or safe overrides are allowed and this is safe.
// handle confirmations and actions
// We have a capability and overrides are allowed or safe overrides are allowed and this is safe
if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capability($capability)))) {
// If we already know the the role ID, it is overrideable, and we are setting prevent or unprohibit.
// If we already know the the role ID, it is overrideable, and we are setting prevent or unprohibit
if (isset($overridableroles[$roleid]) && ($prevent || $unprohibit)) {
// We are preventing.
// We are preventing
if ($prevent) {
if ($confirm && data_submitted() && confirm_sesskey()) {
role_change_permission($roleid, $context, $capability->name, CAP_PREVENT);
@@ -126,24 +122,22 @@ if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capabilit
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
$message = get_string('confirmroleprevent', 'core_role', $a);
$continueurl = new moodle_url($PAGE->url,
array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'prevent'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
$message = get_string('confirmroleprevent', 'role', $a);
$continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'prevent'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
}
}
// We are unprohibiting.
// We are unprohibiting
if ($unprohibit) {
if ($confirm && data_submitted() && confirm_sesskey()) {
role_change_permission($roleid, $context, $capability->name, CAP_INHERIT);
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
$message = get_string('confirmroleunprohibit', 'core_role', $a);
$continueurl = new moodle_url($PAGE->url,
array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'unprohibit'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
$message = get_string('confirmroleunprohibit', 'role', $a);
$continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'unprohibit'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
}
}
// Display and print.
// Display and print
echo $OUTPUT->header();
echo $OUTPUT->heading($title);
echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
@@ -153,7 +147,7 @@ if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capabilit
if ($allow || $prohibit) {
if ($allow) {
$mform = new core_role_permission_allow_form(null, array($context, $capability, $overridableroles));
$mform = new role_allow_form(null, array($context, $capability, $overridableroles));
if ($mform->is_cancelled()) {
redirect($PAGE->url);
} else if ($data = $mform->get_data() and !empty($data->roleid)) {
@@ -164,11 +158,11 @@ if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capabilit
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
$message = get_string('roleallowinfo', 'core_role', $a);
$message = get_string('roleallowinfo', 'role', $a);
}
}
if ($prohibit) {
$mform = new core_role_permission_prohibit_form(null, array($context, $capability, $overridableroles));
$mform = new role_prohibit_form(null, array($context, $capability, $overridableroles));
if ($mform->is_cancelled()) {
redirect($PAGE->url);
} else if ($data = $mform->get_data() and !empty($data->roleid)) {
@@ -179,7 +173,7 @@ if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capabilit
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
$message = get_string('roleprohibitinfo', 'core_role', $a);
$message = get_string('roleprohibitinfo', 'role', $a);
}
}
echo $OUTPUT->header();
@@ -194,13 +188,13 @@ if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capabilit
echo $OUTPUT->header();
echo $OUTPUT->heading($title);
$table = new core_role_permissions_table($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles);
$table = new permissions_table($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles);
echo $OUTPUT->box_start('generalbox capbox');
// Print link to advanced override page.
// print link to advanced override page
if ($overridableroles) {
$overrideurl = new moodle_url('/admin/roles/override.php', array('contextid' => $context->id));
$select = new single_select($overrideurl, 'roleid', $nameswithcounts);
$select->label = get_string('advancedoverride', 'core_role');
$select->label = get_string('advancedoverride', 'role');
echo html_writer::tag('div', $OUTPUT->render($select), array('class'=>'advancedoverride'));
}
$table->display();
@@ -208,16 +202,10 @@ echo $OUTPUT->box_end();
if ($context->contextlevel > CONTEXT_USER) {
if ($context->contextlevel === CONTEXT_COURSECAT && $return === 'management') {
$url = new moodle_url('/course/management.php', array('categoryid' => $context->instanceid));
} else {
$url = $context->get_url();
}
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href' => $url));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
echo $OUTPUT->footer($course);
+101
View File
@@ -0,0 +1,101 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script serves draft files of current user
*
* @package core
* @subpackage role
* @copyright 2009 Petr Skoda (skodak) info@skodak.org
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once("$CFG->libdir/formslib.php");
class role_allow_form extends moodleform {
// Define the form
function definition() {
global $CFG;
$mform = $this->_form;
list($context, $capability, $overridableroles) = $this->_customdata;
list($needed, $forbidden) = get_roles_with_cap_in_context($context, $capability->name);
foreach($needed as $id=>$unused) {
unset($overridableroles[$id]);
}
foreach($forbidden as $id=>$unused) {
unset($overridableroles[$id]);
}
$mform->addElement('header', 'allowheader', get_string('roleallowheader', 'role'));
$mform->addElement('select', 'roleid', get_string('roleselect', 'role'), $overridableroles);
$mform->addElement('hidden','capability');
$mform->setType('capability', PARAM_CAPABILITY);
$mform->setDefault('capability', $capability->name);
$mform->addElement('hidden','contextid');
$mform->setType('contextid', PARAM_INT);
$mform->setDefault('contextid', $context->id);
$mform->addElement('hidden','allow');
$mform->setType('allow', PARAM_INT);
$mform->setDefault('allow', 1);
$this->add_action_buttons(true, get_string('allow', 'role'));
}
}
class role_prohibit_form extends moodleform {
// Define the form
function definition() {
global $CFG;
$mform = $this->_form;
list($context, $capability, $overridableroles) = $this->_customdata;
list($needed, $forbidden) = get_roles_with_cap_in_context($context, $capability->name);
foreach($forbidden as $id=>$unused) {
unset($overridableroles[$id]);
}
$mform->addElement('header', 'ptohibitheader', get_string('roleprohibitheader', 'role'));
$mform->addElement('select', 'roleid', get_string('roleselect', 'role'), $overridableroles);
$mform->addElement('hidden','capability');
$mform->setType('capability', PARAM_CAPABILITY);
$mform->setDefault('capability', $capability->name);
$mform->addElement('hidden','contextid');
$mform->setType('contextid', PARAM_INT);
$mform->setDefault('contextid', $context->id);
$mform->addElement('hidden','prohibit');
$mform->setType('prohibit', PARAM_INT);
$mform->setDefault('prohibit', 1);
$this->add_action_buttons(true, get_string('prohibit', 'role'));
}
}
-65
View File
@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="role">
<xs:complexType>
<xs:sequence>
<xs:element ref="shortname" minOccurs="0"/>
<xs:element ref="name" minOccurs="0"/>
<xs:element ref="description" minOccurs="0"/>
<xs:element ref="archetype" minOccurs="0"/>
<xs:element ref="contextlevels" minOccurs="0"/>
<xs:element ref="allowassign" minOccurs="0"/>
<xs:element ref="allowoverride" minOccurs="0"/>
<xs:element ref="allowswitch" minOccurs="0"/>
<xs:element ref="permissions" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="archetype" type="xs:string"/>
<xs:element name="contextlevels">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="level"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="level" type="xs:string"/>
<xs:element name="allowassign">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="shortname"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="allowoverride">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="shortname"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="allowswitch">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="shortname"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="permissions">
<xs:complexType>
<xs:sequence>
<xs:element ref="inherit" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="allow" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="prevent" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="prohibit" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="shortname" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
<xs:element name="inherit" type="xs:string"/>
<xs:element name="allow" type="xs:string"/>
<xs:element name="prevent" type="xs:string"/>
<xs:element name="prohibit" type="xs:string"/>
</xs:schema>
-79
View File
@@ -1,79 +0,0 @@
<?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/>.
/**
* Role XML presets test case.
*
* @package core_role
* @category phpunit
* @copyright 2013 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class core_role_preset_testcase extends advanced_testcase {
public function test_xml() {
global $DB;
$roles = $DB->get_records('role');
foreach ($roles as $role) {
$xml = core_role_preset::get_export_xml($role->id);
$this->assertTrue(core_role_preset::is_valid_preset($xml));
$info = core_role_preset::parse_preset($xml);
$this->assertSame($role->shortname, $info['shortname']);
$this->assertSame($role->name, $info['name']);
$this->assertSame($role->description, $info['description']);
$this->assertSame($role->archetype, $info['archetype']);
$contextlevels = get_role_contextlevels($role->id);
$this->assertEquals(array_values($contextlevels), array_values($info['contextlevels']));
foreach (array('assign', 'override', 'switch') as $type) {
$records = $DB->get_records('role_allow_'.$type, array('roleid'=>$role->id), "allow$type ASC");
$allows = array();
foreach ($records as $record) {
if ($record->{'allow'.$type} == $role->id) {
array_unshift($allows, -1);
}
$allows[] = $record->{'allow'.$type};
}
$this->assertEquals($allows, $info['allow'.$type], "$type $role->shortname does not match");
}
$capabilities = $DB->get_records_sql(
"SELECT *
FROM {role_capabilities}
WHERE contextid = :syscontext AND roleid = :roleid
ORDER BY capability ASC",
array('syscontext'=>context_system::instance()->id, 'roleid'=>$role->id));
foreach ($capabilities as $cap) {
$this->assertEquals($cap->permission, $info['permissions'][$cap->capability]);
unset($info['permissions'][$cap->capability]);
}
// The remainders should be only inherits.
foreach ($info['permissions'] as $capability => $permission) {
if ($permission == CAP_INHERIT) {
continue;
}
$this->fail('only CAP_INHERIT expected');
}
}
}
}
+45 -43
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -18,13 +19,14 @@
* User roles report list all the users who have been assigned a particular
* role in all contexts.
*
* @package core_role
* @package core
* @subpackage role
* @copyright &copy; 2007 The Open University and others
* @author t.j.hunt@open.ac.uk and others
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../config.php');
require_once(dirname(__FILE__) . '/../../config.php');
// Get params.
$userid = required_param('userid', PARAM_INT);
@@ -41,21 +43,15 @@ $systemcontext = context_system::instance();
$baseurl = new moodle_url('/admin/roles/usersroles.php', array('userid'=>$userid, 'courseid'=>$courseid));
$PAGE->set_url($baseurl);
$PAGE->set_context($coursecontext);
$PAGE->set_pagelayout('admin');
// Check login and permissions.
if ($course->id == SITEID) {
require_login();
$PAGE->set_context($usercontext);
} else {
require_login($course);
$PAGE->set_context($coursecontext);
}
/// Check login and permissions.
require_login($course);
$canview = has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
'moodle/role:override', 'moodle/role:manage'), $usercontext);
if (!$canview) {
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'core_role'));
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'role'));
}
if ($userid != $USER->id) {
@@ -69,26 +65,32 @@ if ($course->id != $SITE->id || $userid != $USER->id) {
$PAGE->navbar->includesettingsbase = true;
}
// Now get the role assignments for this user.
$sql = "SELECT ra.id, ra.userid, ra.contextid, ra.roleid, ra.component, ra.itemid, c.path
FROM {role_assignments} ra
JOIN {context} c ON ra.contextid = c.id
JOIN {role} r ON ra.roleid = r.id
WHERE ra.userid = ?
ORDER BY contextlevel DESC, contextid ASC, r.sortorder ASC";
/// Now get the role assignments for this user.
$sql = "SELECT
ra.id, ra.userid, ra.contextid, ra.roleid, ra.component, ra.itemid,
c.path
FROM
{role_assignments} ra
JOIN {context} c ON ra.contextid = c.id
JOIN {role} r ON ra.roleid = r.id
WHERE
ra.userid = ?
"./*AND ra.active = 1*/"
ORDER BY
contextlevel DESC, contextid ASC, r.sortorder ASC";
$roleassignments = $DB->get_records_sql($sql, array($user->id));
$allroles = role_fix_names(get_all_roles());
// In order to display a nice tree of contexts, we need to get all the
// ancestors of all the contexts in the query we just did.
/// In order to display a nice tree of contexts, we need to get all the
/// ancestors of all the contexts in the query we just did.
$requiredcontexts = array();
foreach ($roleassignments as $ra) {
$requiredcontexts = array_merge($requiredcontexts, explode('/', trim($ra->path, '/')));
}
$requiredcontexts = array_unique($requiredcontexts);
// Now load those contexts.
/// Now load those contexts.
if ($requiredcontexts) {
list($sqlcontexttest, $contextparams) = $DB->get_in_or_equal($requiredcontexts);
$contexts = get_sorted_contexts('ctx.id ' . $sqlcontexttest, $contextparams);
@@ -96,22 +98,22 @@ if ($requiredcontexts) {
$contexts = array();
}
// Prepare some empty arrays to hold the data we are about to compute.
/// Prepare some empty arrays to hold the data we are about to compute.
foreach ($contexts as $conid => $con) {
$contexts[$conid]->children = array();
$contexts[$conid]->roleassignments = array();
}
// Put the contexts into a tree structure.
/// Put the contexts into a tree structure.
foreach ($contexts as $conid => $con) {
$context = context::instance_by_id($conid);
$parentcontext = $context->get_parent_context();
if ($parentcontext) {
$contexts[$parentcontext->id]->children[] = $conid;
$parentcontextid = get_parent_contextid($context);
if ($parentcontextid) {
$contexts[$parentcontextid]->children[] = $conid;
}
}
// Put the role capabilities into the context tree.
/// Put the role capabilities into the context tree.
foreach ($roleassignments as $ra) {
$contexts[$ra->contextid]->roleassignments[$ra->roleid] = $ra;
}
@@ -119,30 +121,30 @@ foreach ($roleassignments as $ra) {
$assignableroles = get_assignable_roles($usercontext, ROLENAME_BOTH);
$overridableroles = get_overridable_roles($usercontext, ROLENAME_BOTH);
// Print the header.
/// Print the header
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $coursecontext));
$straction = get_string('thisusersroles', 'core_role');
$title = get_string('xroleassignments', 'core_role', $fullname);
$straction = get_string('thisusersroles', 'role');
$title = get_string('xroleassignments', 'role', $fullname);
// Course header.
/// Course header
$PAGE->set_title($title);
if ($courseid == SITEID) {
if ($courseid != SITEID) {
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname.': '.$fullname);
$PAGE->set_heading($course->fullname);
}
echo $OUTPUT->header();
echo $OUTPUT->heading($title);
echo $OUTPUT->heading($title, 3);
echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthnormal');
// Display them.
if (!$roleassignments) {
echo '<p>', get_string('noroleassignments', 'core_role'), '</p>';
echo '<p>', get_string('noroleassignments', 'role'), '</p>';
} else {
print_report_tree($systemcontext->id, $contexts, $systemcontext, $fullname, $allroles);
}
// End of page.
/// End of page.
echo $OUTPUT->box_end();
echo $OUTPUT->footer();
@@ -153,13 +155,13 @@ function print_report_tree($contextid, $contexts, $systemcontext, $fullname, $al
static $stredit = null, $strcheckpermissions, $globalroleassigner, $assignurl, $checkurl;
if (is_null($stredit)) {
$stredit = get_string('edit');
$strcheckpermissions = get_string('checkpermissions', 'core_role');
$strcheckpermissions = get_string('checkpermissions', 'role');
$globalroleassigner = has_capability('moodle/role:assign', $systemcontext);
$assignurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/assign.php';
$checkurl = $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php';
}
// Pull the current context into an array for convenience.
// Pull the current context into an array for convinience.
$context = context::instance_by_id($contextid);
// Print the context name.
@@ -187,11 +189,11 @@ function print_report_tree($contextid, $contexts, $systemcontext, $fullname, $al
$a->fullname = $fullname;
$a->contextlevel = $context->get_level_name();
if ($context->contextlevel == CONTEXT_SYSTEM) {
$strgoto = get_string('gotoassignsystemroles', 'core_role');
$strcheck = get_string('checksystempermissionsfor', 'core_role', $a);
$strgoto = get_string('gotoassignsystemroles', 'role');
$strcheck = get_string('checksystempermissionsfor', 'role', $a);
} else {
$strgoto = get_string('gotoassignroles', 'core_role', $a);
$strcheck = get_string('checkuserspermissionshere', 'core_role', $a);
$strgoto = get_string('gotoassignroles', 'role', $a);
$strcheck = get_string('checkuserspermissionshere', 'role', $a);
}
echo ' <a title="' . $strgoto . '" href="' . $raurl . '"><img class="iconsmall" src="' .
$OUTPUT->pix_url('t/edit') . '" alt="' . $stredit . '" /></a> ';
+3 -3
View File
@@ -22,6 +22,7 @@ if ($data = data_submitted() and confirm_sesskey()) {
if (admin_write_settings($data)) {
$statusmsg = get_string('changessaved');
}
$adminroot = admin_get_root(true); //reload tree
if (!empty($adminroot->errors)) {
$errormsg = get_string('errorwithsettings', 'admin');
@@ -43,11 +44,10 @@ if ($errormsg !== '') {
$resultshtml = admin_search_settings_html($query); // case insensitive search only
echo '<form action="' . $PAGE->url->out(true) . '" method="post" id="adminsettings">';
echo '<form action="search.php" method="post" id="adminsettings">';
echo '<div>';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
// HACK to prevent browsers from automatically inserting the user's password into the wrong fields.
echo prevent_form_autofill_password();
echo '<input type="hidden" name="query" value="'.s($query).'" />';
echo '</div>';
echo '<fieldset>';
echo '<div class="clearer"><!-- --></div>';
+1 -5
View File
@@ -14,7 +14,6 @@ $PAGE->set_url('/admin/settings.php', array('section' => $section));
$PAGE->set_pagetype('admin-setting-' . $section);
$PAGE->set_pagelayout('admin');
$PAGE->navigation->clear_cache();
navigation_node::require_admin_tree();
$adminroot = admin_get_root(); // need all settings
$settingspage = $adminroot->locate($section, true);
@@ -48,6 +47,7 @@ if ($data = data_submitted() and confirm_sesskey()) {
$errormsg = get_string('errorwithsettings', 'admin');
$firsterror = reset($adminroot->errors);
}
$adminroot = admin_get_root(true); //reload tree
$settingspage = $adminroot->locate($section, true);
}
@@ -77,8 +77,6 @@ if (empty($SITE->fullname)) {
echo html_writer::input_hidden_params($PAGE->url);
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="hidden" name="return" value="'.$return.'" />';
// HACK to prevent browsers from automatically inserting the user's password into the wrong fields.
echo prevent_form_autofill_password();
echo $settingspage->output_html();
@@ -121,8 +119,6 @@ if (empty($SITE->fullname)) {
echo html_writer::input_hidden_params($PAGE->url);
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<input type="hidden" name="return" value="'.$return.'" />';
// HACK to prevent browsers from automatically inserting the user's password into the wrong fields.
echo prevent_form_autofill_password();
echo $OUTPUT->heading($settingspage->visiblename);
echo $settingspage->output_html();
+7 -40
View File
@@ -2,12 +2,7 @@
// This file defines settingpages and externalpages under the "appearance" category
$capabilities = array(
'moodle/my:configsyspages',
'moodle/tag:manage'
);
if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // speedup for non-admins, add all caps used on this page
if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$ADMIN->add('appearance', new admin_category('themes', new lang_string('themes')));
// "themesettings" settingpage
@@ -29,7 +24,7 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
$ADMIN->add('themes', new admin_externalpage('themeselector', new lang_string('themeselector','admin'), $CFG->wwwroot . '/theme/index.php'));
// settings for each theme
foreach (core_component::get_plugin_list('theme') as $theme => $themedir) {
foreach (get_plugin_list('theme') as $theme => $themedir) {
$settings_path = "$themedir/settings.php";
if (file_exists($settings_path)) {
$settings = new admin_settingpage('themesetting'.$theme, new lang_string('pluginname', 'theme_'.$theme));
@@ -41,11 +36,8 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
}
// Calendar settings.
// calendar
$temp = new admin_settingpage('calendar', new lang_string('calendarsettings','admin'));
$temp->add(new admin_setting_configselect('calendartype', new lang_string('calendartype', 'admin'),
new lang_string('calendartype_desc', 'admin'), 'gregorian', \core_calendar\type_factory::get_list_of_calendar_types()));
$temp->add(new admin_setting_special_adminseesall());
//this is hacky because we do not want to include the stuff from calendar/lib.php
$temp->add(new admin_setting_configselect('calendar_site_timeformat', new lang_string('pref_timeformat', 'calendar'),
@@ -75,21 +67,7 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
}
$temp->add(new admin_setting_configselect('calendar_maxevents',new lang_string('configmaxevents','admin'),new lang_string('helpupcomingmaxevents', 'admin'),10,$options));
$temp->add(new admin_setting_configcheckbox('enablecalendarexport', new lang_string('enablecalendarexport', 'admin'), new lang_string('configenablecalendarexport','admin'), 1));
// Calendar custom export settings.
$days = array(365 => new lang_string('numdays', '', 365),
180 => new lang_string('numdays', '', 180),
150 => new lang_string('numdays', '', 150),
120 => new lang_string('numdays', '', 120),
90 => new lang_string('numdays', '', 90),
60 => new lang_string('numdays', '', 60),
30 => new lang_string('numdays', '', 30),
5 => new lang_string('numdays', '', 5));
$temp->add(new admin_setting_configcheckbox('calendar_customexport', new lang_string('configcalendarcustomexport', 'admin'), new lang_string('helpcalendarcustomexport','admin'), 1));
$temp->add(new admin_setting_configselect('calendar_exportlookahead', new lang_string('configexportlookahead','admin'), new lang_string('helpexportlookahead', 'admin'), 365, $days));
$temp->add(new admin_setting_configselect('calendar_exportlookback', new lang_string('configexportlookback','admin'), new lang_string('helpexportlookback', 'admin'), 5, $days));
$temp->add(new admin_setting_configtext('calendar_exportsalt', new lang_string('calendarexportsalt','admin'), new lang_string('configcalendarexportsalt', 'admin'), random_string(60)));
$temp->add(new admin_setting_configcheckbox('calendar_showicalsource', new lang_string('configshowicalsource', 'admin'), new lang_string('helpshowicalsource','admin'), 1));
$ADMIN->add('appearance', $temp);
// blog
@@ -118,7 +96,6 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
);
$temp->add(new admin_setting_configselect('defaulthomepage', new lang_string('defaulthomepage', 'admin'), new lang_string('configdefaulthomepage', 'admin'), HOMEPAGE_SITE, $choices));
$temp->add(new admin_setting_configcheckbox('allowguestmymoodle', new lang_string('allowguestmymoodle', 'admin'), new lang_string('configallowguestmymoodle', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('navshowfullcoursenames', new lang_string('navshowfullcoursenames', 'admin'), new lang_string('navshowfullcoursenames_help', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('navshowcategories', new lang_string('navshowcategories', 'admin'), new lang_string('confignavshowcategories', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('navshowmycoursecategories', new lang_string('navshowmycoursecategories', 'admin'), new lang_string('navshowmycoursecategories_help', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('navshowallcourses', new lang_string('navshowallcourses', 'admin'), new lang_string('confignavshowallcourses', 'admin'), 0));
@@ -191,18 +168,13 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
// "documentation" settingpage
$temp = new admin_settingpage('documentation', new lang_string('moodledocs'));
$temp->add(new admin_setting_configtext('docroot', new lang_string('docroot', 'admin'), new lang_string('configdocroot', 'admin'), 'http://docs.moodle.org', PARAM_URL));
$ltemp = array('' => get_string('forceno'));
$ltemp += get_string_manager()->get_list_of_translations(true);
$temp->add(new admin_setting_configselect('doclang', get_string('doclang', 'admin'), get_string('configdoclang', 'admin'), '', $ltemp));
$temp->add(new admin_setting_configcheckbox('doctonewwindow', new lang_string('doctonewwindow', 'admin'), new lang_string('configdoctonewwindow', 'admin'), 0));
$ADMIN->add('appearance', $temp);
$temp = new admin_externalpage('mypage', new lang_string('mypage', 'admin'), $CFG->wwwroot . '/my/indexsys.php',
'moodle/my:configsyspages');
$temp = new admin_externalpage('mypage', new lang_string('mypage', 'admin'), $CFG->wwwroot . '/my/indexsys.php');
$ADMIN->add('appearance', $temp);
$temp = new admin_externalpage('profilepage', new lang_string('myprofile', 'admin'), $CFG->wwwroot . '/user/profilesys.php',
'moodle/my:configsyspages');
$temp = new admin_externalpage('profilepage', new lang_string('myprofile', 'admin'), $CFG->wwwroot . '/user/profilesys.php');
$ADMIN->add('appearance', $temp);
// coursecontact is the person responsible for course - usually manages enrolments, receives notification, etc.
@@ -213,25 +185,20 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
new lang_string('courselistshortnames_desc', 'admin'), 0));
$temp->add(new admin_setting_configtext('coursesperpage', new lang_string('coursesperpage', 'admin'), new lang_string('configcoursesperpage', 'admin'), 20, PARAM_INT));
$temp->add(new admin_setting_configtext('courseswithsummarieslimit', new lang_string('courseswithsummarieslimit', 'admin'), new lang_string('configcourseswithsummarieslimit', 'admin'), 10, PARAM_INT));
$temp->add(new admin_setting_configtext('courseoverviewfileslimit', new lang_string('courseoverviewfileslimit'),
new lang_string('configcourseoverviewfileslimit', 'admin'), 1, PARAM_INT));
$temp->add(new admin_setting_configtext('courseoverviewfilesext', new lang_string('courseoverviewfilesext'),
new lang_string('configcourseoverviewfilesext', 'admin'), '.jpg,.gif,.png'));
$ADMIN->add('appearance', $temp);
$temp = new admin_settingpage('ajax', new lang_string('ajaxuse'));
$temp->add(new admin_setting_configcheckbox('enableajax', new lang_string('enableajax', 'admin'), new lang_string('configenableajax', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('useexternalyui', new lang_string('useexternalyui', 'admin'), new lang_string('configuseexternalyui', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('yuicomboloading', new lang_string('yuicomboloading', 'admin'), new lang_string('configyuicomboloading', 'admin'), 1));
$setting = new admin_setting_configcheckbox('cachejs', new lang_string('cachejs', 'admin'), new lang_string('cachejs_help', 'admin'), 1);
$setting->set_updatedcallback('js_reset_all_caches');
$temp->add($setting);
$temp->add(new admin_setting_configcheckbox('modchooserdefault', new lang_string('modchooserdefault', 'admin'), new lang_string('configmodchooserdefault', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('modeditingmenu', new lang_string('modeditingmenu', 'admin'), new lang_string('modeditingmenu_desc', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('blockeditingmenu', new lang_string('blockeditingmenu', 'admin'), new lang_string('blockeditingmenu_desc', 'admin'), 1));
$ADMIN->add('appearance', $temp);
// link to tag management interface
$ADMIN->add('appearance', new admin_externalpage('managetags', new lang_string('managetags', 'tag'), $CFG->wwwroot.'/tag/manage.php', 'moodle/tag:manage'));
$ADMIN->add('appearance', new admin_externalpage('managetags', new lang_string('managetags', 'tag'), "$CFG->wwwroot/tag/manage.php"));
$temp = new admin_settingpage('additionalhtml', new lang_string('additionalhtml', 'admin'));
$temp->add(new admin_setting_heading('additionalhtml_heading', new lang_string('additionalhtml_heading', 'admin'), new lang_string('additionalhtml_desc', 'admin')));
-94
View File
@@ -1,94 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file defines settingpages and externalpages under the "badges" section
*
* @package core
* @subpackage badges
* @copyright 2012 onwards Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Yuliya Bozhko <yuliya.bozhko@totaralms.com>
*/
global $SITE;
if (($hassiteconfig || has_any_capability(array(
'moodle/badges:viewawarded',
'moodle/badges:createbadge',
'moodle/badges:manageglobalsettings',
'moodle/badges:awardbadge',
'moodle/badges:configurecriteria',
'moodle/badges:configuremessages',
'moodle/badges:configuredetails',
'moodle/badges:deletebadge'), $systemcontext))) {
require_once($CFG->libdir . '/badgeslib.php');
$globalsettings = new admin_settingpage('badgesettings', new lang_string('badgesettings', 'badges'),
array('moodle/badges:manageglobalsettings'), empty($CFG->enablebadges));
$globalsettings->add(new admin_setting_configtext('badges_defaultissuername',
new lang_string('defaultissuername', 'badges'),
new lang_string('defaultissuername_desc', 'badges'),
$SITE->fullname ? $SITE->fullname : $SITE->shortname, PARAM_TEXT));
$globalsettings->add(new admin_setting_configtext('badges_defaultissuercontact',
new lang_string('defaultissuercontact', 'badges'),
new lang_string('defaultissuercontact_desc', 'badges'),
get_config('moodle','supportemail'), PARAM_EMAIL));
$globalsettings->add(new admin_setting_configtext('badges_badgesalt',
new lang_string('badgesalt', 'badges'),
new lang_string('badgesalt_desc', 'badges'),
'badges' . $SITE->timecreated, PARAM_ALPHANUM));
$globalsettings->add(new admin_setting_configcheckbox('badges_allowexternalbackpack',
new lang_string('allowexternalbackpack', 'badges'),
new lang_string('allowexternalbackpack_desc', 'badges'), 1));
$globalsettings->add(new admin_setting_configcheckbox('badges_allowcoursebadges',
new lang_string('allowcoursebadges', 'badges'),
new lang_string('allowcoursebadges_desc', 'badges'), 1));
$ADMIN->add('badges', $globalsettings);
$ADMIN->add('badges',
new admin_externalpage('managebadges',
new lang_string('managebadges', 'badges'),
new moodle_url('/badges/index.php', array('type' => BADGE_TYPE_SITE)),
array(
'moodle/badges:viewawarded',
'moodle/badges:createbadge',
'moodle/badges:awardbadge',
'moodle/badges:configurecriteria',
'moodle/badges:configuremessages',
'moodle/badges:configuredetails',
'moodle/badges:deletebadge'
),
empty($CFG->enablebadges)
)
);
$ADMIN->add('badges',
new admin_externalpage('newbadge',
new lang_string('newbadge', 'badges'),
new moodle_url('/badges/newbadge.php', array('type' => BADGE_TYPE_SITE)),
array('moodle/badges:createbadge'), empty($CFG->enablebadges)
)
);
}
+53 -121
View File
@@ -1,122 +1,40 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file defines settingpages and externalpages under the "courses" category
*
* @package core
* @copyright 2002 onwards Martin Dougiamas (http://dougiamas.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// This file defines settingpages and externalpages under the "courses" category
$capabilities = array(
'moodle/backup:backupcourse',
'moodle/category:manage',
'moodle/course:create',
'moodle/site:approvecourse',
'moodle/restore:restorecourse'
);
if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
// Speedup for non-admins, add all caps used on this page.
$ADMIN->add('courses',
new admin_externalpage('coursemgmt', new lang_string('coursemgmt', 'admin'),
$CFG->wwwroot . '/course/management.php',
array('moodle/category:manage', 'moodle/course:create')
)
);
$ADMIN->add('courses',
new admin_externalpage('addcategory', new lang_string('addcategory', 'admin'),
new moodle_url('/course/editcategory.php', array('parent' => 0)),
array('moodle/category:manage')
)
);
$ADMIN->add('courses',
new admin_externalpage('restorecourse', new lang_string('restorecourse', 'admin'),
new moodle_url('/backup/restorefile.php', array('contextid' => context_system::instance()->id)),
array('moodle/course:create')
)
);
if ($hassiteconfig
or has_capability('moodle/backup:backupcourse', $systemcontext)
or has_capability('moodle/category:manage', $systemcontext)
or has_capability('moodle/course:create', $systemcontext)
or has_capability('moodle/site:approvecourse', $systemcontext)) { // speedup for non-admins, add all caps used on this page
// Course Default Settings Page.
// NOTE: these settings must be applied after all other settings because they depend on them.
$ADMIN->add('courses', new admin_externalpage('coursemgmt', new lang_string('coursemgmt', 'admin'), $CFG->wwwroot . '/course/index.php?categoryedit=on',
array('moodle/category:manage', 'moodle/course:create')));
// Main course settings.
/// Course Default Settings Page
/// 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'));
require_once($CFG->dirroot.'/course/lib.php');
$choices = array();
$choices['0'] = new lang_string('hide');
$choices['1'] = new lang_string('show');
$temp->add(new admin_setting_configselect('moodlecourse/visible', new lang_string('visible'), new lang_string('visible_help'),
1, $choices));
// Course format.
$temp->add(new admin_setting_heading('courseformathdr', new lang_string('type_format', 'plugin'), ''));
$courseformats = get_sorted_course_formats(true);
$formcourseformats = array();
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));
$temp->add(new admin_setting_configselect('moodlecourse/format', new lang_string('format'), new lang_string('coursehelpformat'), 'weeks',$formcourseformats));
$temp->add(new admin_setting_configtext('moodlecourse/maxsections', new lang_string('maxnumberweeks'),
new lang_string('maxnumberweeks_desc'), 52));
$temp->add(new admin_setting_configtext('moodlecourse/maxsections', new lang_string('maxnumberweeks'), new lang_string('maxnumberweeks_desc'), 52));
$temp->add(new admin_settings_num_course_sections('moodlecourse/numsections', new lang_string('numberweeks'),
new lang_string('coursehelpnumberweeks'), 10));
$temp->add(new admin_settings_num_course_sections('moodlecourse/numsections', new lang_string('numberweeks'), new lang_string('coursehelpnumberweeks'), 10));
$choices = array();
$choices['0'] = new lang_string('hiddensectionscollapsed');
$choices['1'] = new lang_string('hiddensectionsinvisible');
$temp->add(new admin_setting_configselect('moodlecourse/hiddensections', new lang_string('hiddensections'),
new lang_string('coursehelphiddensections'), 0, $choices));
$choices = array();
$choices[COURSE_DISPLAY_SINGLEPAGE] = new lang_string('coursedisplay_single');
$choices[COURSE_DISPLAY_MULTIPAGE] = new lang_string('coursedisplay_multi');
$temp->add(new admin_setting_configselect('moodlecourse/coursedisplay', new lang_string('coursedisplay'),
new lang_string('coursedisplay_help'), COURSE_DISPLAY_SINGLEPAGE, $choices));
// Appearance.
$temp->add(new admin_setting_heading('appearancehdr', new lang_string('appearance'), ''));
$languages = array();
$languages[''] = new lang_string('forceno');
$languages += get_string_manager()->get_list_of_translations();
$temp->add(new admin_setting_configselect('moodlecourse/lang', new lang_string('forcelanguage'), '', key($languages),
$languages));
$temp->add(new admin_setting_configselect('moodlecourse/hiddensections', new lang_string('hiddensections'), new lang_string('coursehelphiddensections'), 0,$choices));
$options = range(0, 10);
$temp->add(new admin_setting_configselect('moodlecourse/newsitems', new lang_string('newsitemsnumber'),
new lang_string('coursehelpnewsitemsnumber'), 5, $options));
$temp->add(new admin_setting_configselect('moodlecourse/showgrades', new lang_string('showgrades'),
new lang_string('coursehelpshowgrades'), 1, array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
$temp->add(new admin_setting_configselect('moodlecourse/showreports', new lang_string('showreports'), '', 0,
array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
// Files and uploads.
$temp->add(new admin_setting_heading('filesanduploadshdr', new lang_string('filesanduploads'), ''));
if (!empty($CFG->legacyfilesinnewcourses)) {
$choices = array('0'=>new lang_string('no'), '2'=>new lang_string('yes'));
$temp->add(new admin_setting_configselect('moodlecourse/legacyfiles', new lang_string('courselegacyfiles'),
new lang_string('courselegacyfiles_help'), key($choices), $choices));
}
$temp->add(new admin_setting_configselect('moodlecourse/newsitems', new lang_string('newsitemsnumber'), new lang_string('coursehelpnewsitemsnumber'), 5,$options));
$temp->add(new admin_setting_configselect('moodlecourse/showgrades', new lang_string('showgrades'), new lang_string('coursehelpshowgrades'), 1,array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
$temp->add(new admin_setting_configselect('moodlecourse/showreports', new lang_string('showreports'), '', 0,array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
$currentmaxbytes = get_config('moodlecourse', 'maxbytes');
if (isset($CFG->maxbytes)) {
@@ -124,15 +42,18 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
} else {
$choices = get_max_upload_sizes(0, 0, 0, $currentmaxbytes);
}
$temp->add(new admin_setting_configselect('moodlecourse/maxbytes', new lang_string('maximumupload'),
new lang_string('coursehelpmaximumupload'), key($choices), $choices));
$temp->add(new admin_setting_configselect('moodlecourse/maxbytes', new lang_string('maximumupload'), new lang_string('coursehelpmaximumupload'), key($choices), $choices));
// Completion tracking.
$temp->add(new admin_setting_heading('progress', new lang_string('completion','completion'), ''));
$temp->add(new admin_setting_configselect('moodlecourse/enablecompletion', new lang_string('completion', 'completion'),
new lang_string('enablecompletion_help', 'completion'), 0, array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
if (!empty($CFG->legacyfilesinnewcourses)) {
$choices = array('0'=>new lang_string('no'), '2'=>new lang_string('yes'));
$temp->add(new admin_setting_configselect('moodlecourse/legacyfiles', new lang_string('courselegacyfiles'), new lang_string('courselegacyfiles_help'), key($choices), $choices));
}
$choices = array();
$choices[COURSE_DISPLAY_SINGLEPAGE] = new lang_string('coursedisplay_single');
$choices[COURSE_DISPLAY_MULTIPAGE] = new lang_string('coursedisplay_multi');
$temp->add(new admin_setting_configselect('moodlecourse/coursedisplay', new lang_string('coursedisplay'), new lang_string('coursedisplay_help'), COURSE_DISPLAY_SINGLEPAGE, $choices));
// Groups.
$temp->add(new admin_setting_heading('groups', new lang_string('groups', 'group'), ''));
$choices = array();
$choices[NOGROUPS] = new lang_string('groupsnone', 'group');
@@ -141,10 +62,28 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_configselect('moodlecourse/groupmode', new lang_string('groupmode'), '', key($choices),$choices));
$temp->add(new admin_setting_configselect('moodlecourse/groupmodeforce', new lang_string('force'), new lang_string('coursehelpforce'), 0,array(0 => new lang_string('no'), 1 => new lang_string('yes'))));
$temp->add(new admin_setting_heading('availability', new lang_string('availability'), ''));
$choices = array();
$choices['0'] = new lang_string('courseavailablenot');
$choices['1'] = new lang_string('courseavailable');
$temp->add(new admin_setting_configselect('moodlecourse/visible', new lang_string('visible'), '', 1,$choices));
$temp->add(new admin_setting_heading('language', new lang_string('language'), ''));
$languages=array();
$languages[''] = new lang_string('forceno');
$languages += get_string_manager()->get_list_of_translations();
$temp->add(new admin_setting_configselect('moodlecourse/lang', new lang_string('forcelanguage'), '',key($languages),$languages));
$temp->add(new admin_setting_heading('progress', new lang_string('progress','completion'), ''));
$temp->add(new admin_setting_configselect('moodlecourse/enablecompletion', new lang_string('completion','completion'), '',
0, array(0 => new lang_string('completiondisabled','completion'), 1 => new lang_string('completionenabled','completion'))));
$temp->add(new admin_setting_configcheckbox('moodlecourse/completionstartonenrol', new lang_string('completionstartonenrol','completion'), new lang_string('completionstartonenrolhelp', 'completion'), 0));
$ADMIN->add('courses', $temp);
// "courserequests" settingpage.
/// "courserequests" settingpage
$temp = new admin_settingpage('courserequest', new lang_string('courserequest'));
$temp->add(new admin_setting_configcheckbox('enablecourserequests', new lang_string('enablecourserequests', 'admin'), new lang_string('configenablecourserequests', 'admin'), 0));
$temp->add(new admin_settings_coursecat_select('defaultrequestcategory', new lang_string('defaultrequestcategory', 'admin'), new lang_string('configdefaultrequestcategory', 'admin'), 1));
@@ -152,13 +91,13 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_users_with_capability('courserequestnotify', new lang_string('courserequestnotify', 'admin'), new lang_string('configcourserequestnotify2', 'admin'), array(), 'moodle/site:approvecourse'));
$ADMIN->add('courses', $temp);
// Pending course requests.
/// Pending course requests.
if (!empty($CFG->enablecourserequests)) {
$ADMIN->add('courses', new admin_externalpage('coursespending', new lang_string('pendingrequests'),
$CFG->wwwroot . '/course/pending.php', array('moodle/site:approvecourse')));
}
// Add a category for backups.
// Add a category for backups
$ADMIN->add('courses', new admin_category('backups', new lang_string('backups','admin')));
// Create a page for general backups configuration and defaults.
@@ -191,16 +130,9 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_blocks', new lang_string('generalblocks','backup'), new lang_string('configgeneralblocks','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_filters', new lang_string('generalfilters','backup'), new lang_string('configgeneralfilters','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_comments', new lang_string('generalcomments','backup'), new lang_string('configgeneralcomments','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_badges', new lang_string('generalbadges','backup'), new lang_string('configgeneralbadges','backup'), array('value'=>1,'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_userscompletion', new lang_string('generaluserscompletion','backup'), new lang_string('configgeneraluserscompletion','backup'), array('value'=>1, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_logs', new lang_string('generallogs','backup'), new lang_string('configgenerallogs','backup'), array('value'=>0, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_histories', new lang_string('generalhistories','backup'), new lang_string('configgeneralhistories','backup'), array('value'=>0, 'locked'=>0)));
$temp->add(new admin_setting_configcheckbox_with_lock('backup/backup_general_questionbank', new lang_string('generalquestionbank','backup'), new lang_string('configgeneralquestionbank','backup'), array('value'=>1, 'locked'=>0)));
$ADMIN->add('backups', $temp);
// Create a page for general import configuration and defaults.
$temp = new admin_settingpage('importgeneralsettings', new lang_string('importgeneralsettings', 'backup'), 'moodle/backup:backupcourse');
$temp->add(new admin_setting_configtext('backup/import_general_maxresults', new lang_string('importgeneralmaxresults', 'backup'), new lang_string('importgeneralmaxresults_desc', 'backup'), 10));
$ADMIN->add('backups', $temp);
// Create a page for automated backups configuration and defaults.
@@ -266,14 +198,14 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) {
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_blocks', new lang_string('generalblocks','backup'), new lang_string('configgeneralblocks','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_filters', new lang_string('generalfilters','backup'), new lang_string('configgeneralfilters','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_comments', new lang_string('generalcomments','backup'), new lang_string('configgeneralcomments','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_badges', new lang_string('generalbadges','backup'), new lang_string('configgeneralbadges','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_userscompletion', new lang_string('generaluserscompletion','backup'), new lang_string('configgeneraluserscompletion','backup'), 1));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_logs', new lang_string('generallogs', 'backup'), new lang_string('configgenerallogs', 'backup'), 0));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_histories', new lang_string('generalhistories','backup'), new lang_string('configgeneralhistories','backup'), 0));
$temp->add(new admin_setting_configcheckbox('backup/backup_auto_questionbank', new lang_string('generalquestionbank','backup'), new lang_string('configgeneralquestionbank','backup'), 1));
//$temp->add(new admin_setting_configcheckbox('backup/backup_auto_messages', new lang_string('messages', 'message'), new lang_string('backupmessageshelp','message'), 0));
//$temp->add(new admin_setting_configcheckbox('backup/backup_auto_blogs', new lang_string('blogs', 'blog'), new lang_string('backupblogshelp','blog'), 0));
$ADMIN->add('backups', $temp);
}
} // end of speedup
+37 -50
View File
@@ -19,15 +19,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$enablecssoptimiser->set_updatedcallback('theme_reset_all_caches');
$temp->add($enablecssoptimiser);
// Backup archive .mbz format: switching to .tar.gz enables larger files, better
// progress reporting and possibly better performance. This is an experimental
// setting but if successful, should be removed and enabled by default in a future
// version. Note: this setting controls newly-created backups only; restore always
// supports both formats.
$temp->add(new admin_setting_configcheckbox('enabletgzbackups',
new lang_string('enabletgzbackups', 'admin'),
new lang_string('enabletgzbackups_desc', 'admin'), 0));
$ADMIN->add('experimental', $temp);
// "debugging" settingpage
@@ -41,46 +32,44 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$temp->add(new admin_setting_configcheckbox('debugpageinfo', new lang_string('debugpageinfo', 'admin'), new lang_string('configdebugpageinfo', 'admin'), 0));
$ADMIN->add('development', $temp);
// "Profiling" settingpage (conditionally if the 'xhprof' extension is available only).
$xhprofenabled = extension_loaded('xhprof') && function_exists('xhprof_enable');
$temp = new admin_settingpage('profiling', new lang_string('profiling', 'admin'), 'moodle/site:config', !$xhprofenabled);
// Main profiling switch.
$temp->add(new admin_setting_configcheckbox('profilingenabled', new lang_string('profilingenabled', 'admin'), new lang_string('profilingenabled_help', 'admin'), false));
// List of URLs that will be automatically profiled.
$temp->add(new admin_setting_configtextarea('profilingincluded', new lang_string('profilingincluded', 'admin'), new lang_string('profilingincluded_help', 'admin'), ''));
// List of URLs that won't be profiled ever.
$temp->add(new admin_setting_configtextarea('profilingexcluded', new lang_string('profilingexcluded', 'admin'), new lang_string('profilingexcluded_help', 'admin'), ''));
// Allow random profiling each XX requests.
$temp->add(new admin_setting_configtext('profilingautofrec', new lang_string('profilingautofrec', 'admin'), new lang_string('profilingautofrec_help', 'admin'), 0, PARAM_INT));
// Allow PROFILEME/DONTPROFILEME GPC.
$temp->add(new admin_setting_configcheckbox('profilingallowme', new lang_string('profilingallowme', 'admin'), new lang_string('profilingallowme_help', 'admin'), false));
// Allow PROFILEALL/PROFILEALLSTOP GPC.
$temp->add(new admin_setting_configcheckbox('profilingallowall', new lang_string('profilingallowall', 'admin'), new lang_string('profilingallowall_help', 'admin'), false));
// TODO: Allow to skip PHP functions (XHPROF_FLAGS_NO_BUILTINS)
// TODO: Allow to skip call_user functions (ignored_functions array)
// Specify the life time (in minutes) of profiling runs.
$temp->add(new admin_setting_configselect('profilinglifetime', new lang_string('profilinglifetime', 'admin'), new lang_string('profilinglifetime_help', 'admin'), 24*60, array(
0 => new lang_string('neverdeleteruns', 'admin'),
30*24*60 => new lang_string('numdays', '', 30),
15*24*60 => new lang_string('numdays', '', 15),
7*24*60 => new lang_string('numdays', '', 7),
4*24*60 => new lang_string('numdays', '', 4),
2*24*60 => new lang_string('numdays', '', 2),
24*60 => new lang_string('numhours', '', 24),
16*80 => new lang_string('numhours', '', 16),
8*60 => new lang_string('numhours', '', 8),
4*60 => new lang_string('numhours', '', 4),
2*60 => new lang_string('numhours', '', 2),
60 => new lang_string('numminutes', '', 60),
30 => new lang_string('numminutes', '', 30),
15 => new lang_string('numminutes', '', 15))));
// Define the prefix to be added to imported profiling runs.
$temp->add(new admin_setting_configtext('profilingimportprefix',
new lang_string('profilingimportprefix', 'admin'),
new lang_string('profilingimportprefix_desc', 'admin'), '(I)', PARAM_TAG, 10));
// "profiling" settingpage (conditionally if the 'xhprof' extension is available only)
if (extension_loaded('xhprof') && function_exists('xhprof_enable')) {
$temp = new admin_settingpage('profiling', new lang_string('profiling', 'admin'));
// Main profiling switch
$temp->add(new admin_setting_configcheckbox('profilingenabled', new lang_string('profilingenabled', 'admin'), new lang_string('profilingenabled_help', 'admin'), false));
// List of URLs that will be automatically profiled
$temp->add(new admin_setting_configtextarea('profilingincluded', new lang_string('profilingincluded', 'admin'), new lang_string('profilingincluded_help', 'admin'), ''));
// List of URLs that won't be profiled ever
$temp->add(new admin_setting_configtextarea('profilingexcluded', new lang_string('profilingexcluded', 'admin'), new lang_string('profilingexcluded_help', 'admin'), ''));
// Allow random profiling each XX requests
$temp->add(new admin_setting_configtext('profilingautofrec', new lang_string('profilingautofrec', 'admin'), new lang_string('profilingautofrec_help', 'admin'), 0, PARAM_INT));
// Allow PROFILEME/DONTPROFILEME GPC
$temp->add(new admin_setting_configcheckbox('profilingallowme', new lang_string('profilingallowme', 'admin'), new lang_string('profilingallowme_help', 'admin'), false));
// Allow PROFILEALL/PROFILEALLSTOP GPC
$temp->add(new admin_setting_configcheckbox('profilingallowall', new lang_string('profilingallowall', 'admin'), new lang_string('profilingallowall_help', 'admin'), false));
// TODO: Allow to skip PHP functions (XHPROF_FLAGS_NO_BUILTINS)
// TODO: Allow to skip call_user functions (ignored_functions array)
// Specify the life time (in minutes) of profiling runs
$temp->add(new admin_setting_configselect('profilinglifetime', new lang_string('profilinglifetime', 'admin'), new lang_string('profilinglifetime_help', 'admin'), 24*60, array(
0 => new lang_string('neverdeleteruns', 'admin'),
30*24*60 => new lang_string('numdays', '', 30),
15*24*60 => new lang_string('numdays', '', 15),
7*24*60 => new lang_string('numdays', '', 7),
4*24*60 => new lang_string('numdays', '', 4),
2*24*60 => new lang_string('numdays', '', 2),
24*60 => new lang_string('numhours', '', 24),
16*80 => new lang_string('numhours', '', 16),
8*60 => new lang_string('numhours', '', 8),
4*60 => new lang_string('numhours', '', 4),
2*60 => new lang_string('numhours', '', 2),
60 => new lang_string('numminutes', '', 60),
30 => new lang_string('numminutes', '', 30),
15 => new lang_string('numminutes', '', 15))));
// Add the 'profiling' page to admin block
$ADMIN->add('development', $temp);
}
// Add the 'profiling' page to admin block.
$ADMIN->add('development', $temp);
// Web service test clients DO NOT COMMIT : THE EXTERNAL WEB PAGE IS NOT AN ADMIN PAGE !!!!!
$ADMIN->add('development', new admin_externalpage('testclient', new lang_string('testclient', 'webservice'), "$CFG->wwwroot/$CFG->admin/webservice/testclient.php"));
@@ -91,6 +80,4 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
}
$ADMIN->add('development', new admin_externalpage('purgecaches', new lang_string('purgecaches','admin'), "$CFG->wwwroot/$CFG->admin/purgecaches.php"));
$ADMIN->add('development', new admin_externalpage('thirdpartylibs', new lang_string('thirdpartylibs','admin'), "$CFG->wwwroot/$CFG->admin/thirdpartylibs.php"));
} // end of speedup
+24 -3
View File
@@ -32,9 +32,7 @@ if (!during_initial_install()) { //do not use during installation
for ($i=1; $i<100; $i++) {
$options[$i] = $i;
}
$temp->add(new admin_setting_configselect('maxcategorydepth', new lang_string('configsitemaxcategorydepth','admin'), new lang_string('configsitemaxcategorydepthhelp','admin'), 2, $options));
$temp->add(new admin_setting_configtext('frontpagecourselimit', new lang_string('configfrontpagecourselimit','admin'), new lang_string('configfrontpagecourselimithelp','admin'), 200, PARAM_INT));
$temp->add(new admin_setting_configselect('maxcategorydepth', new lang_string('configsitemaxcategorydepth','admin'), new lang_string('configsitemaxcategorydepthhelp','admin'), 0, $options));
$temp->add(new admin_setting_sitesetcheckbox('numsections', new lang_string('sitesection'), new lang_string('sitesectionhelp','admin'), 1));
$temp->add(new admin_setting_sitesetselect('newsitems', new lang_string('newsitemsnumber'), '', 3,
@@ -69,6 +67,29 @@ if (!during_initial_install()) { //do not use during installation
}
$temp->add(new admin_setting_configselect('defaultfrontpageroleid', new lang_string('frontpagedefaultrole', 'admin'), '', $defaultfrontpageroleid, $options));
$ADMIN->add('frontpage', $temp);
$ADMIN->add('frontpage', new admin_externalpage('frontpageroles', new lang_string('frontpageroles', 'admin'), "$CFG->wwwroot/$CFG->admin/roles/assign.php?contextid=" . $frontpagecontext->id, 'moodle/role:assign', false, $frontpagecontext));
$ADMIN->add('frontpage', new admin_externalpage('frontpagefilters', new lang_string('frontpagefilters', 'admin'), "$CFG->wwwroot/filter/manage.php?contextid=" . $frontpagecontext->id, 'moodle/filter:manage', false, $frontpagecontext));
$ADMIN->add('frontpage', new admin_externalpage('frontpagebackup', new lang_string('frontpagebackup', 'admin'), $CFG->wwwroot.'/backup/backup.php?id='.SITEID, 'moodle/backup:backupcourse', false, $frontpagecontext));
$ADMIN->add('frontpage', new admin_externalpage('frontpagerestore', new lang_string('frontpagerestore', 'admin'), $CFG->wwwroot.'/backup/restorefile.php?contextid='.$frontpagecontext->id, 'moodle/restore:restorecourse', false, $frontpagecontext));
$questioncapabilities = array(
'moodle/question:add',
'moodle/question:editmine',
'moodle/question:editall',
'moodle/question:viewmine',
'moodle/question:viewall',
'moodle/question:movemine',
'moodle/question:moveall');
$ADMIN->add('frontpage', new admin_externalpage('frontpagequestions', new lang_string('frontpagequestions', 'admin'), $CFG->wwwroot.'/question/edit.php?courseid='.SITEID, $questioncapabilities, false, $frontpagecontext));
if (!empty($SITE->legacyfiles) and $SITE->legacyfiles === 2) {
$ADMIN->add('frontpage', new admin_externalpage('sitefiles', new lang_string('sitelegacyfiles'), $CFG->wwwroot . '/files/index.php?id=' . SITEID, 'moodle/course:managefiles', false, $frontpagecontext));
}
}
}
+3 -7
View File
@@ -67,10 +67,6 @@ if (has_capability('moodle/grade:manage', $systemcontext)
$temp->add(new admin_setting_special_gradeexport());
$temp->add(new admin_setting_special_gradelimiting());
$temp->add(new admin_setting_special_gradepointmax());
$temp->add(new admin_setting_special_gradepointdefault());
}
$ADMIN->add('grades', $temp);
@@ -182,7 +178,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
// Reports
$ADMIN->add('grades', new admin_category('gradereports', new lang_string('reportsettings', 'grades')));
foreach (core_component::get_plugin_list('gradereport') as $plugin => $plugindir) {
foreach (get_plugin_list('gradereport') as $plugin => $plugindir) {
// Include all the settings commands for this plugin if there are any
if (file_exists($plugindir.'/settings.php')) {
$settings = new admin_settingpage('gradereport'.$plugin, new lang_string('pluginname', 'gradereport_'.$plugin), 'moodle/grade:manage');
@@ -195,7 +191,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
// Imports
$ADMIN->add('grades', new admin_category('gradeimports', new lang_string('importsettings', 'grades')));
foreach (core_component::get_plugin_list('gradeimport') as $plugin => $plugindir) {
foreach (get_plugin_list('gradeimport') as $plugin => $plugindir) {
// Include all the settings commands for this plugin if there are any
if (file_exists($plugindir.'/settings.php')) {
@@ -210,7 +206,7 @@ if (has_capability('moodle/grade:manage', $systemcontext)
// Exports
$ADMIN->add('grades', new admin_category('gradeexports', new lang_string('exportsettings', 'grades')));
foreach (core_component::get_plugin_list('gradeexport') as $plugin => $plugindir) {
foreach (get_plugin_list('gradeexport') as $plugin => $plugindir) {
// Include all the settings commands for this plugin if there are any
if (file_exists($plugindir.'/settings.php')) {
$settings = new admin_settingpage('gradeexport'.$plugin, new lang_string('pluginname', 'gradeexport_'.$plugin), 'moodle/grade:manage');
+96 -153
View File
@@ -1,68 +1,47 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Load all plugins into the admin tree.
*
* Please note that is file is always loaded last - it means that you can inject entries into other categories too.
*
* @package core
* @copyright 2007 Petr Skoda {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/*
* Please note that is file is always loaded last - it means that you can inject entries into other categories too.
*/
if ($hassiteconfig) {
/* @var admin_root $ADMIN */
$ADMIN->locate('modules')->set_sorting(true);
require_once("$CFG->libdir/pluginlib.php");
$allplugins = plugin_manager::instance()->get_plugins();
$ADMIN->add('modules', new admin_page_pluginsoverview());
// activity modules
$ADMIN->add('modules', new admin_category('modsettings', new lang_string('activitymodules')));
$ADMIN->add('modsettings', new admin_page_managemods());
foreach (core_plugin_manager::instance()->get_plugins_of_type('mod') as $plugin) {
/** @var \core\plugininfo\mod $plugin */
$plugin->load_settings($ADMIN, 'modsettings', $hassiteconfig);
foreach ($allplugins['mod'] as $module) {
$module->load_settings($ADMIN, 'modsettings', $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 (core_plugin_manager::instance()->get_plugins_of_type('format') as $plugin) {
/** @var \core\plugininfo\format $plugin */
$plugin->load_settings($ADMIN, 'formatsettings', $hassiteconfig);
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());
foreach (core_plugin_manager::instance()->get_plugins_of_type('block') as $plugin) {
/** @var \core\plugininfo\block $plugin */
$plugin->load_settings($ADMIN, 'blocksettings', $hassiteconfig);
foreach ($allplugins['block'] as $block) {
$block->load_settings($ADMIN, 'blocksettings', $hassiteconfig);
}
// message outputs
$ADMIN->add('modules', new admin_category('messageoutputs', new lang_string('messageoutputs', 'message')));
$ADMIN->add('messageoutputs', new admin_page_managemessageoutputs());
$ADMIN->add('messageoutputs', new admin_page_defaultmessageoutputs());
foreach (core_plugin_manager::instance()->get_plugins_of_type('message') as $plugin) {
/** @var \core\plugininfo\message $plugin */
$plugin->load_settings($ADMIN, 'messageoutputs', $hassiteconfig);
foreach ($allplugins['message'] as $processor) {
$processor->load_settings($ADMIN, 'messageoutputs', $hassiteconfig);
}
// authentication plugins
@@ -72,7 +51,6 @@ if ($hassiteconfig) {
$temp->add(new admin_setting_manageauths());
$temp->add(new admin_setting_heading('manageauthscommonheading', new lang_string('commonsettings', 'admin'), ''));
$temp->add(new admin_setting_special_registerauth());
$temp->add(new admin_setting_configcheckbox('authloginviaemail', new lang_string('authloginviaemail', 'core_auth'), new lang_string('authloginviaemail_desc', 'core_auth'), 0));
$temp->add(new admin_setting_configcheckbox('authpreventaccountcreation', new lang_string('authpreventaccountcreation', 'admin'), new lang_string('authpreventaccountcreation_help', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('loginpageautofocus', new lang_string('loginpageautofocus', 'admin'), new lang_string('loginpageautofocus_help', 'admin'), 0));
$temp->add(new admin_setting_configselect('guestloginbutton', new lang_string('guestloginbutton', 'auth'),
@@ -91,12 +69,8 @@ if ($hassiteconfig) {
$temp->add(new admin_setting_configtext('recaptchaprivatekey', new lang_string('recaptchaprivatekey', 'admin'), new lang_string('configrecaptchaprivatekey', 'admin'), '', PARAM_NOTAGS));
$ADMIN->add('authsettings', $temp);
$temp = new admin_externalpage('authtestsettings', get_string('testsettings', 'core_auth'), new moodle_url("/auth/test_settings.php"), 'moodle/site:config', true);
$ADMIN->add('authsettings', $temp);
foreach (core_plugin_manager::instance()->get_plugins_of_type('auth') as $plugin) {
/** @var \core\plugininfo\auth $plugin */
$plugin->load_settings($ADMIN, 'authsettings', $hassiteconfig);
foreach ($allplugins['auth'] as $auth) {
$auth->load_settings($ADMIN, 'authsettings', $hassiteconfig);
}
// Enrolment plugins
@@ -104,13 +78,8 @@ if ($hassiteconfig) {
$temp = new admin_settingpage('manageenrols', new lang_string('manageenrols', 'enrol'));
$temp->add(new admin_setting_manageenrols());
$ADMIN->add('enrolments', $temp);
$temp = new admin_externalpage('enroltestsettings', get_string('testsettings', 'core_enrol'), new moodle_url("/enrol/test_settings.php"), 'moodle/site:config', true);
$ADMIN->add('enrolments', $temp);
foreach(core_plugin_manager::instance()->get_plugins_of_type('enrol') as $plugin) {
/** @var \core\plugininfo\enrol $plugin */
$plugin->load_settings($ADMIN, 'enrolments', $hassiteconfig);
foreach($allplugins['enrol'] as $enrol) {
$enrol->load_settings($ADMIN, 'enrolments', $hassiteconfig);
}
@@ -119,9 +88,8 @@ if ($hassiteconfig) {
$temp = new admin_settingpage('manageeditors', new lang_string('editorsettings', 'editor'));
$temp->add(new admin_setting_manageeditors());
$ADMIN->add('editorsettings', $temp);
foreach (core_plugin_manager::instance()->get_plugins_of_type('editor') as $plugin) {
/** @var \core\plugininfo\editor $plugin */
$plugin->load_settings($ADMIN, 'editorsettings', $hassiteconfig);
foreach ($allplugins['editor'] as $editor) {
$editor->load_settings($ADMIN, 'editorsettings', $hassiteconfig);
}
/// License types
@@ -146,7 +114,31 @@ if ($hassiteconfig) {
// "filtersettings" settingpage
$temp = new admin_settingpage('commonfiltersettings', new lang_string('commonfiltersettings', 'admin'));
if ($ADMIN->fulltree) {
$cachetimes = array(
604800 => new lang_string('numdays','',7),
86400 => new lang_string('numdays','',1),
43200 => new lang_string('numhours','',12),
10800 => new lang_string('numhours','',3),
7200 => new lang_string('numhours','',2),
3600 => new lang_string('numhours','',1),
2700 => new lang_string('numminutes','',45),
1800 => new lang_string('numminutes','',30),
900 => new lang_string('numminutes','',15),
600 => new lang_string('numminutes','',10),
540 => new lang_string('numminutes','',9),
480 => new lang_string('numminutes','',8),
420 => new lang_string('numminutes','',7),
360 => new lang_string('numminutes','',6),
300 => new lang_string('numminutes','',5),
240 => new lang_string('numminutes','',4),
180 => new lang_string('numminutes','',3),
120 => new lang_string('numminutes','',2),
60 => new lang_string('numminutes','',1),
30 => new lang_string('numseconds','',30),
0 => new lang_string('no')
);
$items = array();
$items[] = new admin_setting_configselect('cachetext', new lang_string('cachetext', 'admin'), new lang_string('configcachetext', 'admin'), 60, $cachetimes);
$items[] = new admin_setting_configselect('filteruploadedfiles', new lang_string('filteruploadedfiles', 'admin'), new lang_string('configfilteruploadedfiles', 'admin'), 0,
array('0' => new lang_string('none'), '1' => new lang_string('allfiles'), '2' => new lang_string('htmlfilesonly')));
$items[] = new admin_setting_configcheckbox('filtermatchoneperpage', new lang_string('filtermatchoneperpage', 'admin'), new lang_string('configfiltermatchoneperpage', 'admin'), 0);
@@ -158,9 +150,8 @@ if ($hassiteconfig) {
}
$ADMIN->add('filtersettings', $temp);
foreach (core_plugin_manager::instance()->get_plugins_of_type('filter') as $plugin) {
/** @var \core\plugininfo\filter $plugin */
$plugin->load_settings($ADMIN, 'filtersettings', $hassiteconfig);
foreach ($allplugins['filter'] as $filter) {
$filter->load_settings($ADMIN, 'filtersettings', $hassiteconfig);
}
@@ -205,9 +196,9 @@ if ($hassiteconfig) {
50, PARAM_INT, 3));
$ADMIN->add('portfoliosettings', $temp);
$ADMIN->add('portfoliosettings', new admin_externalpage('portfolionew', new lang_string('addnewportfolio', 'portfolio'), $url, 'moodle/site:config', true));
$ADMIN->add('portfoliosettings', new admin_externalpage('portfoliodelete', new lang_string('deleteportfolio', 'portfolio'), $url, 'moodle/site:config', true));
$ADMIN->add('portfoliosettings', new admin_externalpage('portfoliocontroller', new lang_string('manageportfolios', 'portfolio'), $url, 'moodle/site:config', true));
$ADMIN->add('portfoliosettings', new admin_externalpage('portfolionew', new lang_string('addnewportfolio', 'portfolio'), $url, 'moodle/site:config', true), '', $url);
$ADMIN->add('portfoliosettings', new admin_externalpage('portfoliodelete', new lang_string('deleteportfolio', 'portfolio'), $url, 'moodle/site:config', true), '', $url);
$ADMIN->add('portfoliosettings', new admin_externalpage('portfoliocontroller', new lang_string('manageportfolios', 'portfolio'), $url, 'moodle/site:config', true), '', $url);
foreach (portfolio_instances(false, false) as $portfolio) {
require_once($CFG->dirroot . '/portfolio/' . $portfolio->get('plugin') . '/lib.php');
@@ -219,7 +210,9 @@ if ($hassiteconfig) {
$portfolio->get('name'),
$url . '?action=edit&pf=' . $portfolio->get('id'),
'moodle/site:config'
)
),
$portfolio->get('name'),
$url . '?action=edit&pf=' . $portfolio->get('id')
);
}
@@ -236,27 +229,27 @@ if ($hassiteconfig) {
// Add common settings page
$temp = new admin_settingpage('managerepositoriescommon', new lang_string('commonrepositorysettings', 'repository'));
$temp->add(new admin_setting_configtext('repositorycacheexpire', new lang_string('cacheexpire', 'repository'), new lang_string('configcacheexpire', 'repository'), 120, PARAM_INT));
$temp->add(new admin_setting_configtext('repositorygetfiletimeout', new lang_string('getfiletimeout', 'repository'), new lang_string('configgetfiletimeout', 'repository'), 30, PARAM_INT));
$temp->add(new admin_setting_configtext('repositorysyncfiletimeout', new lang_string('syncfiletimeout', 'repository'), new lang_string('configsyncfiletimeout', 'repository'), 1, PARAM_INT));
$temp->add(new admin_setting_configtext('repositorysyncimagetimeout', new lang_string('syncimagetimeout', 'repository'), new lang_string('configsyncimagetimeout', 'repository'), 3, PARAM_INT));
$temp->add(new admin_setting_configtext('repositorycacheexpire', new lang_string('cacheexpire', 'repository'), new lang_string('configcacheexpire', 'repository'), 120));
$temp->add(new admin_setting_configcheckbox('repositoryallowexternallinks', new lang_string('allowexternallinks', 'repository'), new lang_string('configallowexternallinks', 'repository'), 1));
$temp->add(new admin_setting_configcheckbox('legacyfilesinnewcourses', new lang_string('legacyfilesinnewcourses', 'admin'), new lang_string('legacyfilesinnewcourses_help', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('legacyfilesaddallowed', new lang_string('legacyfilesaddallowed', 'admin'), new lang_string('legacyfilesaddallowed_help', 'admin'), 1));
$ADMIN->add('repositorysettings', $temp);
$ADMIN->add('repositorysettings', new admin_externalpage('repositorynew',
new lang_string('addplugin', 'repository'), $url, 'moodle/site:config', true));
new lang_string('addplugin', 'repository'), $url, 'moodle/site:config', true),
'', $url);
$ADMIN->add('repositorysettings', new admin_externalpage('repositorydelete',
new lang_string('deleterepository', 'repository'), $url, 'moodle/site:config', true));
new lang_string('deleterepository', 'repository'), $url, 'moodle/site:config', true),
'', $url);
$ADMIN->add('repositorysettings', new admin_externalpage('repositorycontroller',
new lang_string('manage', 'repository'), $url, 'moodle/site:config', true));
new lang_string('manage', 'repository'), $url, 'moodle/site:config', true),
'', $url);
$ADMIN->add('repositorysettings', new admin_externalpage('repositoryinstancenew',
new lang_string('createrepository', 'repository'), $url, 'moodle/site:config', true));
new lang_string('createrepository', 'repository'), $url, 'moodle/site:config', true),
'', $url);
$ADMIN->add('repositorysettings', new admin_externalpage('repositoryinstanceedit',
new lang_string('editrepositoryinstance', 'repository'), $url, 'moodle/site:config', true));
foreach (core_plugin_manager::instance()->get_plugins_of_type('repository') as $plugin) {
/** @var \core\plugininfo\repository $plugin */
$plugin->load_settings($ADMIN, 'repositorysettings', $hassiteconfig);
new lang_string('editrepositoryinstance', 'repository'), $url, 'moodle/site:config', true),
'', $url);
foreach ($allplugins['repository'] as $repositorytype) {
$repositorytype->load_settings($ADMIN, 'repositorysettings', $hassiteconfig);
}
/// Web services
@@ -278,6 +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'));
$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);
@@ -301,9 +297,8 @@ if ($hassiteconfig) {
'admin'), new lang_string('configenablewsdocumentation', 'admin', $wsdoclink), false));
$ADMIN->add('webservicesettings', $temp);
/// links to protocol pages
foreach (core_plugin_manager::instance()->get_plugins_of_type('webservice') as $plugin) {
/** @var \core\plugininfo\webservice $plugin */
$plugin->load_settings($ADMIN, 'webservicesettings', $hassiteconfig);
foreach ($allplugins['webservice'] as $webservice) {
$webservice->load_settings($ADMIN, 'webservicesettings', $hassiteconfig);
}
/// manage token page link
$ADMIN->add('webservicesettings', new admin_externalpage('addwebservicetoken', new lang_string('managetokens', 'webservice'), "$CFG->wwwroot/$CFG->admin/webservice/tokens.php", 'moodle/site:config', true));
@@ -317,7 +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());
@@ -325,57 +323,8 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext))
// Question type settings.
$ADMIN->add('modules', new admin_category('qtypesettings', new lang_string('questiontypes', 'admin')));
$ADMIN->add('qtypesettings', new admin_page_manageqtypes());
// Question preview defaults.
$settings = new admin_settingpage('qdefaultsetting',
get_string('questionpreviewdefaults', 'question'),
'moodle/question:config');
$ADMIN->add('qtypesettings', $settings);
$settings->add(new admin_setting_heading('qdefaultsetting_preview_options',
'', get_string('questionpreviewdefaults_desc', 'question')));
// These keys are question_display_options::HIDDEN and VISIBLE.
$hiddenofvisible = array(
0 => get_string('notshown', 'question'),
1 => get_string('shown', 'question'),
);
$settings->add(new admin_setting_question_behaviour('question_preview/behaviour',
get_string('howquestionsbehave', 'question'), '',
'deferredfeedback'));
$settings->add(new admin_setting_configselect('question_preview/correctness',
get_string('whethercorrect', 'question'), '', 1, $hiddenofvisible));
// These keys are question_display_options::HIDDEN, MARK_ONLY and MARK_AND_MAX.
$marksoptions = array(
0 => get_string('notshown', 'question'),
1 => get_string('showmaxmarkonly', 'question'),
2 => get_string('showmarkandmax', 'question'),
);
$settings->add(new admin_setting_configselect('question_preview/marks',
get_string('marks', 'question'), '', 2, $marksoptions));
$settings->add(new admin_setting_configselect('question_preview/markdp',
get_string('decimalplacesingrades', 'question'), '', 2, array(0, 1, 2, 3, 4, 5, 6, 7)));
$settings->add(new admin_setting_configselect('question_preview/feedback',
get_string('specificfeedback', 'question'), '', 1, $hiddenofvisible));
$settings->add(new admin_setting_configselect('question_preview/generalfeedback',
get_string('generalfeedback', 'question'), '', 1, $hiddenofvisible));
$settings->add(new admin_setting_configselect('question_preview/rightanswer',
get_string('rightanswer', 'question'), '', 1, $hiddenofvisible));
$settings->add(new admin_setting_configselect('question_preview/history',
get_string('responsehistory', 'question'), '', 0, $hiddenofvisible));
// Settings for particular question types.
foreach (core_plugin_manager::instance()->get_plugins_of_type('qtype') as $plugin) {
/** @var \core\plugininfo\qtype $plugin */
$plugin->load_settings($ADMIN, 'qtypesettings', $hassiteconfig);
foreach ($allplugins['qtype'] as $qtype) {
$qtype->load_settings($ADMIN, 'qtypesettings', $hassiteconfig);
}
}
@@ -385,8 +334,7 @@ if ($hassiteconfig && !empty($CFG->enableplagiarism)) {
$ADMIN->add('plagiarism', new admin_externalpage('manageplagiarismplugins', new lang_string('manageplagiarism', 'plagiarism'),
$CFG->wwwroot . '/' . $CFG->admin . '/plagiarism.php'));
foreach (core_plugin_manager::instance()->get_plugins_of_type('plagiarism') as $plugin) {
/** @var \core\plugininfo\plagiarism $plugin */
foreach ($allplugins['plagiarism'] as $plugin) {
$plugin->load_settings($ADMIN, 'plagiarism', $hassiteconfig);
}
}
@@ -395,7 +343,7 @@ $ADMIN->add('reports', new admin_externalpage('comments', new lang_string('comme
// Course reports settings
if ($hassiteconfig) {
$pages = array();
foreach (core_component::get_plugin_list('coursereport') as $report => $path) {
foreach (get_plugin_list('coursereport') as $report => $path) {
$file = $CFG->dirroot . '/course/report/' . $report . '/settings.php';
if (file_exists($file)) {
$settings = new admin_settingpage('coursereport' . $report,
@@ -418,7 +366,7 @@ if ($hassiteconfig) {
// Now add reports
$pages = array();
foreach (core_component::get_plugin_list('report') as $report => $plugindir) {
foreach (get_plugin_list('report') as $report => $plugindir) {
$settings_path = "$plugindir/settings.php";
if (file_exists($settings_path)) {
$settings = new admin_settingpage('report' . $report,
@@ -443,10 +391,12 @@ if ($hassiteconfig) {
$CFG->wwwroot . '/' . $CFG->admin . '/tools.php'));
}
// Now add various admin tools.
foreach (core_plugin_manager::instance()->get_plugins_of_type('tool') as $plugin) {
/** @var \core\plugininfo\tool $plugin */
$plugin->load_settings($ADMIN, null, $hassiteconfig);
// Now add various admin tools
foreach (get_plugin_list('tool') as $plugin => $plugindir) {
$settings_path = "$plugindir/settings.php";
if (file_exists($settings_path)) {
include($settings_path);
}
}
// Now add the Cache plugins
@@ -455,7 +405,7 @@ if ($hassiteconfig) {
$ADMIN->add('cache', new admin_externalpage('cacheconfig', new lang_string('cacheconfig', 'cache'), $CFG->wwwroot .'/cache/admin.php'));
$ADMIN->add('cache', new admin_externalpage('cachetestperformance', new lang_string('testperformance', 'cache'), $CFG->wwwroot . '/cache/testperformance.php'));
$ADMIN->add('cache', new admin_category('cachestores', new lang_string('cachestores', 'cache')));
foreach (core_component::get_plugin_list('cachestore') as $plugin => $path) {
foreach (get_plugin_list('cachestore') as $plugin => $path) {
$settingspath = $path.'/settings.php';
if (file_exists($settingspath)) {
$settings = new admin_settingpage('cachestore_'.$plugin.'_settings', new lang_string('pluginname', 'cachestore_'.$plugin), 'moodle/site:config');
@@ -465,16 +415,6 @@ if ($hassiteconfig) {
}
}
// Add Calendar type settings.
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('calendartype', new lang_string('calendartypes', 'calendar')));
foreach (core_component::get_plugin_list_with_file('calendartype', 'settings.php') as $plugin => $settingspath) {
$settings = new admin_settingpage('calendartype_' . $plugin . '_settings', new lang_string('pluginname', 'calendartype_' . $plugin), 'moodle/site:config');
include($settingspath);
$ADMIN->add('calendartype', $settings);
}
}
/// Add all local plugins - must be always last!
if ($hassiteconfig) {
$ADMIN->add('modules', new admin_category('localplugins', new lang_string('localplugins')));
@@ -482,9 +422,12 @@ if ($hassiteconfig) {
$CFG->wwwroot . '/' . $CFG->admin . '/localplugins.php'));
}
// Extend settings for each local plugin. Note that their settings may be in any part of the
// settings tree and may be visible not only for administrators.
foreach (core_plugin_manager::instance()->get_plugins_of_type('local') as $plugin) {
/** @var \core\plugininfo\local $plugin */
$plugin->load_settings($ADMIN, null, $hassiteconfig);
// extend settings for each local plugin. Note that their settings may be in any part of the
// settings tree and may be visible not only for administrators. We can not use $allplugins here
foreach (get_plugin_list('local') as $plugin => $plugindir) {
$settings_path = "$plugindir/settings.php";
if (file_exists($settings_path)) {
include($settings_path);
continue;
}
}
+11 -29
View File
@@ -23,12 +23,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
new lang_string('configprofileroles', 'admin'),
array('student', 'teacher', 'editingteacher')));
$maxbytes = 0;
if (!empty($CFG->maxbytes)) {
$maxbytes = $CFG->maxbytes;
}
$max_upload_choices = get_max_upload_sizes(0, 0, 0, $maxbytes);
$max_upload_choices = get_max_upload_sizes();
// maxbytes set to 0 will allow the maximum server limit for uploads
$max_upload_choices[0] = new lang_string('serverlimit', 'admin');
$temp->add(new admin_setting_configselect('maxbytes', new lang_string('maxbytes', 'admin'), new lang_string('configmaxbytes', 'admin'), 0, $max_upload_choices));
// 100MB
$defaultuserquota = 104857600;
@@ -46,7 +43,11 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
1800 => new lang_string('numminutes', '', 30),
2700 => new lang_string('numminutes', '', 45),
3600 => new lang_string('numminutes', '', 60))));
$temp->add(new admin_setting_configselect('fullnamedisplay', new lang_string('fullnamedisplay', 'admin'), new lang_string('configfullnamedisplay', 'admin'),
'language', array('language' => new lang_string('language'),
'firstname lastname' => new lang_string('firstname').' + '.new lang_string('lastname'),
'lastname firstname' => new lang_string('lastname').' + '.new lang_string('firstname'),
'firstname' => new lang_string('firstname'))));
$temp->add(new admin_setting_configcheckbox('extendedusernamechars', new lang_string('extendedusernamechars', 'admin'), new lang_string('configextendedusernamechars', 'admin'), 0));
$temp->add(new admin_setting_configtext('sitepolicy', new lang_string('sitepolicy', 'admin'), new lang_string('sitepolicy_help', 'admin'), '', PARAM_RAW));
$temp->add(new admin_setting_configtext('sitepolicyguest', new lang_string('sitepolicyguest', 'admin'), new lang_string('sitepolicyguest_help', 'admin'), (isset($CFG->sitepolicy) ? $CFG->sitepolicy : ''), PARAM_RAW));
@@ -58,11 +59,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$temp->add(new admin_setting_configcheckbox('cronclionly', new lang_string('cronclionly', 'admin'), new lang_string('configcronclionly', 'admin'), 0));
$temp->add(new admin_setting_configpasswordunmask('cronremotepassword', new lang_string('cronremotepassword', 'admin'), new lang_string('configcronremotepassword', 'admin'), ''));
$options = array(0=>get_string('no'), 3=>3, 5=>5, 7=>7, 10=>10, 20=>20, 30=>30, 50=>50, 100=>100);
$temp->add(new admin_setting_configselect('lockoutthreshold', new lang_string('lockoutthreshold', 'admin'), new lang_string('lockoutthreshold_desc', 'admin'), 0, $options));
$temp->add(new admin_setting_configduration('lockoutwindow', new lang_string('lockoutwindow', 'admin'), new lang_string('lockoutwindow_desc', 'admin'), 60*30));
$temp->add(new admin_setting_configduration('lockoutduration', new lang_string('lockoutduration', 'admin'), new lang_string('lockoutduration_desc', 'admin'), 60*30));
$temp->add(new admin_setting_configcheckbox('passwordpolicy', new lang_string('passwordpolicy', 'admin'), new lang_string('configpasswordpolicy', 'admin'), 1));
$temp->add(new admin_setting_configtext('minpasswordlength', new lang_string('minpasswordlength', 'admin'), new lang_string('configminpasswordlength', 'admin'), 8, PARAM_INT));
$temp->add(new admin_setting_configtext('minpassworddigits', new lang_string('minpassworddigits', 'admin'), new lang_string('configminpassworddigits', 'admin'), 1, PARAM_INT));
@@ -70,22 +66,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$temp->add(new admin_setting_configtext('minpasswordupper', new lang_string('minpasswordupper', 'admin'), new lang_string('configminpasswordupper', 'admin'), 1, PARAM_INT));
$temp->add(new admin_setting_configtext('minpasswordnonalphanum', new lang_string('minpasswordnonalphanum', 'admin'), new lang_string('configminpasswordnonalphanum', 'admin'), 1, PARAM_INT));
$temp->add(new admin_setting_configtext('maxconsecutiveidentchars', new lang_string('maxconsecutiveidentchars', 'admin'), new lang_string('configmaxconsecutiveidentchars', 'admin'), 0, PARAM_INT));
$pwresetoptions = array(
300 => new lang_string('numminutes', '', 5),
900 => new lang_string('numminutes', '', 15),
1800 => new lang_string('numminutes', '', 30),
2700 => new lang_string('numminutes', '', 45),
3600 => new lang_string('numminutes', '', 60),
7200 => new lang_string('numminutes', '', 120),
14400 => new lang_string('numminutes', '', 240)
);
$adminsetting = new admin_setting_configselect(
'pwresettime',
new lang_string('passwordresettime','admin'),
new lang_string('configpasswordresettime','admin'),
1800,
$pwresetoptions);
$temp->add($adminsetting);
$temp->add(new admin_setting_configcheckbox('groupenrolmentkeypolicy', new lang_string('groupenrolmentkeypolicy', 'admin'), new lang_string('groupenrolmentkeypolicy_desc', 'admin'), 1));
$temp->add(new admin_setting_configcheckbox('disableuserimages', new lang_string('disableuserimages', 'admin'), new lang_string('configdisableuserimages', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('emailchangeconfirmation', new lang_string('emailchangeconfirmation', 'admin'), new lang_string('configemailchangeconfirmation', 'admin'), 1));
@@ -108,8 +88,10 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
// "notifications" settingpage
$temp = new admin_settingpage('notifications', new lang_string('notifications', 'admin'));
$temp->add(new admin_setting_configcheckbox('displayloginfailures', new lang_string('displayloginfailures', 'admin'),
new lang_string('configdisplayloginfailures', 'admin'), 0));
$temp->add(new admin_setting_configselect('displayloginfailures', new lang_string('displayloginfailures', 'admin'), new lang_string('configdisplayloginfailures', 'admin'), '', array('' => new lang_string('nobody'),
'admin' => new lang_string('administrators'),
'teacher' => new lang_string('administratorsandteachers'),
'everybody' => new lang_string('everybody'))));
$temp->add(new admin_setting_users_with_capability('notifyloginfailures', new lang_string('notifyloginfailures', 'admin'), new lang_string('confignotifyloginfailures', 'admin'), array(), 'moodle/site:config'));
$options = array();
for ($i = 1; $i <= 100; $i++) {

Some files were not shown because too many files have changed in this diff Show More