Compare commits

..

2066 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7) 698ecafa61 Moodle 2.2.5 release 2012-09-09 16:22:00 +02:00
AMOS bot eca810808c Merge branch 'MOODLE_22_STABLE' into install_22_STABLE 2012-09-08 00:34:46 +00:00
Eloy Lafuente (stronk7) 555112a5ca weekly release 2.2.4+ 2012-09-07 02:38:09 +02:00
AMOS bot 986343b8cf Automatically generated installer lang files 2012-09-07 00:35:13 +00:00
Eloy Lafuente (stronk7) 2376d7125b Merge branch 'install_22_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_22_STABLE 2012-09-07 02:18:30 +02:00
Eloy Lafuente (stronk7) 09cca2d7aa Merge branch 'MDL-34945-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-09-06 20:12:22 +02:00
Eloy Lafuente (stronk7) e7920065ac Merge branch 'MDL-34985_m22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-09-06 20:08:05 +02:00
Eloy Lafuente (stronk7) 222abcddd4 Merge branch 'MDL-35034-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-09-06 01:18:54 +02:00
Eloy Lafuente (stronk7) dd0e60cb3d MDL-29662 quiz overrides: use proper course value (was php notice). 2012-09-05 18:02:35 +02:00
Eloy Lafuente (stronk7) da91c22212 Merge branch 'w36_MDL-35077_m22_stats' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-09-05 13:13:53 +02:00
Petr Škoda 9a9d65a733 MDL-35077 do not show link to system stats report if stats disabled 2012-09-05 10:02:36 +02:00
Aparup Banerjee 8646d0aecb MDL-26504 blog: fixed SQL to add explicit casting 2012-09-05 10:41:29 +08:00
Eloy Lafuente (stronk7) 70206bbda8 MDL-34997 youtube filter: keep dimensions working for shortened urls 2012-09-05 01:17:30 +02:00
Eloy Lafuente (stronk7) d84df9f5a6 Merge branch 'MDL-34997-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-09-05 00:53:50 +02:00
Aparup Banerjee 7a5d23ea32 Merge branch 'wip-mdl-34537-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-09-04 17:33:28 +08:00
Frederic Massart 1461ecc0e4 MDL-34945 Repository: Creating an instance requires the user to have the permission to view it 2012-09-04 16:17:11 +08:00
Andrew Davis 63fbf99e07 MDL-26504 blog: added upgrade code to remove orphan external blog posts
Conflicts:
	lib/db/upgrade.php
	version.php

Conflicts:
	version.php
2012-09-04 14:04:47 +08:00
Andrew Davis 89ce191be2 MDL-26504 blog: made it delete external blog posts when the external blog is deleted 2012-09-04 14:03:14 +08:00
Tim Lock 32a0775cf9 MDL-35092: Add proxy support to enrol/paypal IPN 2012-09-04 10:58:08 +08:00
Eloy Lafuente (stronk7) e20371b316 Merge branch 'wip-mdl-34606-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-09-04 02:09:37 +02:00
Eloy Lafuente (stronk7) 81baf0d5f3 Merge branch 'MDL-34633-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-09-04 01:54:23 +02:00
Eloy Lafuente (stronk7) befce5863d Merge branch 'MDL-29662_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-09-04 01:14:33 +02:00
Eloy Lafuente (stronk7) 948835483a Merge branch 'MDL-27818_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-09-04 01:08:07 +02:00
Eloy Lafuente (stronk7) 3db989d41e Merge branch 'MDL-33306_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-09-04 00:31:23 +02:00
Eloy Lafuente (stronk7) 81f6a19377 Merge branch 'MDL-33812-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-09-04 00:20:38 +02:00
Eloy Lafuente (stronk7) 91f65d0ab4 Merge branch 'w36_MDL-34097_m22_environment' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-09-04 00:02:01 +02:00
Eloy Lafuente (stronk7) 7b3a9020e6 Merge branch 'MDL-28346-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-09-03 20:02:33 +02:00
Eloy Lafuente (stronk7) 06d5f84d71 Merge branch 'w36_MDL-35077_m22_stats' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-09-03 17:54:45 +02:00
Eloy Lafuente (stronk7) 8918cf7b0d Merge branch 'MDL-35133_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-09-03 17:48:12 +02:00
Eloy Lafuente (stronk7) d7831c74be Merge branch 'w36_MDL-35145_m22_guestdelete' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-09-03 16:18:33 +02:00
Aparup Banerjee dc5736f402 Merge branch 'MDL-35151_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-09-03 19:24:14 +08:00
Aparup Banerjee 6915eff9b1 Merge branch 'MDL-35180_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-09-03 17:39:13 +08:00
Jean-Philippe Gaudreau 1a73d34c10 MDL-34997 - Allow shortened url youtu.be and y2u.be for Youtube filter 2012-09-03 14:10:24 +08:00
Frederic Massart 4516e7204a MDL-34633 Repository: Flickr supports small images
Conflicts:

	repository/flickr/lib.php
	repository/flickr_public/lib.php
2012-09-03 14:10:15 +08:00
Frederic Massart 934de9687e MDL-35101 Repository: Public Flickr fails when the picture has no license 2012-09-03 14:10:15 +08:00
Frederic Massart 06aa3ac19f MDL-28346 Backup: Restore task can log results 2012-09-03 14:09:55 +08:00
Frederic Massart aae03dd4d4 MDL-28346 Backup: Backup does not fail when a file is missing
Conflicts:

	backup/util/ui/backup_ui_stage.class.php
2012-09-03 14:09:55 +08:00
Frederic Massart 5ef242f4a4 MDL-28346 Backup: Restore does not fail when a file is missing
Conflicts:

	backup/util/dbops/restore_dbops.class.php
2012-09-03 14:09:55 +08:00
Frederic Massart b3ab3bd054 MDL-28346 Backup: Added new status 'warning' for backup result 2012-09-03 14:09:55 +08:00
Frederic Massart 1e12baddde MDL-35034 Repository: Google Docs does not fail when download is restricted
Conflicts:

	lib/googleapi.php
	repository/googledocs/lib.php
2012-09-03 14:09:36 +08:00
Frederic Massart 0bcbc76b25 MDL-33812 Backup: Added some upgrade information about the changes 2012-09-03 14:09:26 +08:00
Frederic Massart 85616ca24f MDL-33812 Backup: Revert MDL-33521
Conflicts:

	backup/util/helper/backup_cron_helper.class.php
2012-09-03 14:09:26 +08:00
Frederic Massart cdf58e680c MDL-33812 Backup: Respect of backup_auto_keep 2012-09-03 14:09:25 +08:00
Sam Hemelryk e401131606 Merge branch 'MDL-31496_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-09-03 12:20:16 +12:00
Sam Hemelryk ead307f537 MDL-26822 user: Minor improvements post integration 2012-09-03 11:41:27 +12:00
Sam Hemelryk c0941ec996 Merge branch 'MDL-26882-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-09-03 11:25:57 +12:00
Sam Hemelryk 926fffa146 Merge branch 'wip-MDL-34318-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-09-03 10:12:15 +12:00
Sam Hemelryk 1ac4b314f6 Merge branch 'MDL-30020c-22' of git://github.com/srynot4sale/moodle into MOODLE_22_STABLE 2012-09-03 09:52:12 +12:00
Mary Evans 19685dbf5e MDL-35180 theme_afterburner: fixes IE9 compatibility view bug 2012-09-02 16:35:09 +01:00
Petr Škoda cbff07faef MDL-34097 keep current requirements for Moodle 2.4 2012-09-02 11:55:24 +02:00
AMOS bot d25a550db9 Automatically generated installer lang files 2012-09-02 00:32:47 +00:00
Mary Evans df1a0756ab MDL-35151 theme_anomaly: removed CSS selectors (.forumpost .content p) from style/general.php thus allowing YUI CSS to style paragraphs as normal. 2012-09-01 23:29:29 +01:00
Petr Škoda d6e2946e19 MDL-35145 add extra delete_user() parameter validation
We do not want to delete local admins and guest account, we need to validate the supplied parameter is valid $user record and refetch it from database.
2012-09-01 14:23:55 +02:00
Petr Škoda b06c820df6 MDL-35077 fix stats report navigation links 2012-08-31 14:18:48 +02:00
Eloy Lafuente (stronk7) 8f3c8e78a9 weekly release 2.2.4+ 2012-08-31 11:35:03 +02:00
Eloy Lafuente (stronk7) 5fcba2f9c8 Merge branch 'install_22_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_22_STABLE 2012-08-31 11:27:45 +02:00
Eloy Lafuente (stronk7) acb539b1c9 MDL-35147 lesson qformat import: Dirty hack to support array questiontext structures. 2012-08-31 03:00:49 +02:00
Tim Hunt 228533be80 MDL-27818 question bank: multilang category names don't work. 2012-08-30 22:48:50 +01:00
Tim Hunt b8c475d631 MDL-35133 accesslib: context_module::get_context_name should format_string
Otherwise activites with multilang names are displayed badly.
2012-08-30 22:47:33 +01:00
Eloy Lafuente (stronk7) 165bfe5454 Merge branch 'MDL-35147_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-30 20:12:15 +02:00
Eloy Lafuente (stronk7) ce754f10c6 MDL-31244, MDL-25063 there is no phpuni support in 22_STABLE 2012-08-30 18:34:25 +02:00
Eloy Lafuente (stronk7) 049b47ca09 Merge branch 'MDL-31244_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-30 18:32:20 +02:00
Tim Hunt 22462fba4f MDL-35147 lesson: fix regression from MDL-25492.
I really wish someone would fix lesson to use the question bank.
2012-08-30 13:12:13 +01:00
Ankit Agarwal 30de036731 MDL-26882 profile: Applying cap check (site:viewuseridentity) to email field in user profile 2012-08-30 15:38:25 +08:00
Ankit Agarwal 952fef7299 MDL-26882 profile: Apllying the cap check site:viewuseridentity to user profile 2012-08-30 15:38:22 +08:00
Adrian Greeve 09332feae8 MDL-32108 - navigation - After logging in the user is directed to mysite instead of site home.
Thanks to lurii Kucherov for this patch.
2012-08-30 12:14:55 +08:00
Tim Hunt fe470a231f MDL-29662 quiz overrides: update dates during course reset.
Also, fix duplicate SQL clause in similar code in lib,
and fix error when saving overrides.
2012-08-29 18:43:25 +01:00
Tim Hunt ee91ffedb3 MDL-33306 qtype multichoice: fix display of right answer.
Also, fix  higlighing of last edited question in the qeustion bank, when
it co-incides with a grey row.
2012-08-29 17:48:16 +01:00
Eloy Lafuente (stronk7) 06606caf71 Merge branch 'wip-mdl-30121-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-08-29 12:15:29 +02:00
Aparup Banerjee 12f57ec9c3 Merge branch 'wip-mdl-31623-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-08-29 16:57:20 +08:00
Aparup Banerjee 2335d65949 Merge branch 'MDL-31959_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-29 15:34:06 +08:00
Aparup Banerjee 32b8a7bcf0 Merge branch 'wip-mdl-34040-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-08-29 14:45:44 +08:00
Aparup Banerjee 6a4d3ec290 Merge branch 'MDL-34952_22' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-08-29 13:27:23 +08:00
Eloy Lafuente (stronk7) 90241eaaf8 Merge branch 'MDL-29598_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-08-28 23:24:11 +02:00
Eloy Lafuente (stronk7) 6e8d3ac1bf Merge branch 'MDL-25492_22' of git://github.com/jmvedrine/moodle into MOODLE_22_STABLE 2012-08-28 20:12:48 +02:00
Eloy Lafuente (stronk7) 1c37f8865d Merge branch 'MDL-31837_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-28 20:10:43 +02:00
Tim Hunt 9345e7bfb8 MDL-31837 qtype_numerical: fix old-style unit tests. 2012-08-28 15:54:17 +01:00
Aparup Banerjee 56d47558ff Merge branch 'MDL-31837_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-28 17:04:48 +08:00
Aparup Banerjee 0639b9ca1a Merge branch 'MDL-32464_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-28 16:55:14 +08:00
Adrian Greeve 6117966d3b MDL-34318 - blog - Removal of blog associations from the database on delete.
Thanks to Erik Lundberg for this patch.
2012-08-28 15:59:21 +08:00
Jean-Michel Vedrine db6bac8b16 MDL25492_22 error in version and requires changed by mistake 2012-08-28 08:06:13 +02:00
Aaron Barnes c186374c3b MDL-30020 blocks/completion: Some criteria do not display complete
Also includes a spruce up of the code
2012-08-28 11:46:26 +12:00
Eloy Lafuente (stronk7) 4df4c677bd Merge branch 'MDL-34406_fullname_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-08-27 20:04:16 +02:00
Eloy Lafuente (stronk7) 3dd9961f44 Merge branch 'MDL-34430_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-27 18:51:25 +02:00
Eloy Lafuente (stronk7) 006052e19c Merge branch 'MDL-34993_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-27 18:36:19 +02:00
Eloy Lafuente (stronk7) 31970a66a8 Merge branch 'm22_MDL-34994' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-08-27 18:23:45 +02:00
Eloy Lafuente (stronk7) e5783fd132 Merge branch 'MDL-35026_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-27 17:54:55 +02:00
Eloy Lafuente (stronk7) 70c160f27d Merge branch 'MDL-35003_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-27 17:51:41 +02:00
Eloy Lafuente (stronk7) c06b18a475 Merge branch 'MDL-35023_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-27 16:34:02 +02:00
Eloy Lafuente (stronk7) aa81647c4c Merge branch 'MDL-35055_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-27 16:17:06 +02:00
Aparup Banerjee ad24b3a320 Merge branch 'MDL-31633-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-08-27 17:26:53 +08:00
Rajesh Taneja 3851c53f76 MDl-34606 Administration: id for clear button is set properly, and disabled on page load 2012-08-27 15:16:29 +08:00
Rajesh Taneja f731735624 MDL-34537 Enrolments: Assign alternative odd and even class to manual enrol popup 2012-08-27 14:20:06 +08:00
Aparup Banerjee f76fe80874 Merge branch 'MDL-34996_22' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-08-27 13:48:03 +08:00
AMOS bot 9bb3b99e56 Automatically generated installer lang files 2012-08-27 00:32:48 +00:00
Aaron Barnes 40efa28d9e MDL-32386 completion: Fix incorrect method parameters 2012-08-27 11:54:41 +12:00
Andreas Grabs fb2cbe2466 MDL-34996 - Improve help text for Feedback dependancies 2012-08-24 23:04:07 +02:00
Andreas Grabs 20af48348b MDL-34952 - change get_info() to public access 2012-08-24 21:53:45 +02:00
Tim Hunt 1600029de9 MDL-32464 qformat multianswer: fix missing include.
Also, add a sample file that can be used for testing, and add a unit
test to verify this is working.
2012-08-24 16:58:30 +01:00
Tim Hunt 170130d756 MDL-35055 question import: slight error with the Match grades option.
Even in the 'Error if grade not listed case', it was applying a small
tolerance. In the case of a fuzzy match, it was returning the inexact
grade from the import file, rather than the precise grade that Moodle
was expecting.

That causes problems when the editing form is displayed, because the
value from the database does not match any of the available options, so
the grade is changed to 0%.
2012-08-24 15:46:12 +01:00
Jean-Michel Vedrine 1d23052a60 MDL25-492 Blackboard V6+ question import is broken 2012-08-24 14:06:56 +02:00
Ankit Agarwal 2fc41b1ccd MDL-31633 grades: Fixing incorrect redirect when trying to edit grade letters from admin settings 2012-08-24 14:59:01 +08:00
Tim Lock 91de7cb26e MDL-31623 Course: Course reset bypass modules, which are removed 2012-08-24 11:00:16 +08:00
Rajesh Taneja e0b1515fde MDL-30121 Assignment: Draft submission files will not be included in zip, if activity is open 2012-08-24 10:55:09 +08:00
David Monllao c52a364c27 MDL-29598 backup Avoid possible future duplicate grade letters
More info in restore_activity_grades_structure_step->process_grade_letter() comments
2012-08-24 08:56:15 +08:00
Justin Filip 481415635f MDL-29598 backup Check whether a grade_letters record exists before trying to insert a new record 2012-08-24 08:56:14 +08:00
Tim Hunt 4458b51cc4 MDL-34430 qtype essay: upgrade from MDL-31393 needs a progress bar. 2012-08-23 20:04:01 +01:00
Tim Hunt 1482c2b20b MDL-35026 qtype multianswer: misnamed string.
AMOS BEGIN
 MOV [questionnadded,qtype_multianswer],[questionsadded,qtype_multianswer]
AMOS END
2012-08-23 19:02:16 +01:00
Tim Hunt e60c61e570 MDL-35023 qtype calculated: fix strict syntax problem. 2012-08-23 19:01:57 +01:00
Tim Hunt d9c2ecc342 MDL-35003 questions: remove stray full stop after correct answer.
In a few situations, this full stop makes things a bit more grammatical,
but there are many other situations where it causes problems. So, on
balance we will remove it.
2012-08-23 19:01:39 +01:00
Tim Hunt cf6b831723 MDL-34993 questions: convert numeric fields to float on load.
NUMBER(X,Y) typically come back from the DB as strings. If you don't
convert them to float, then when you display them, it appears as
1.0000000, which is not normally what you want.

Also, increase the size of the field on the edit form, so if you
question does have default mark 0.1234567, you can see that!
2012-08-23 19:01:21 +01:00
Tim Hunt 6d24c26b52 MDL-31837 numerical tolerance: better handling of very
small tolerances.

The changes between Moodle 1.9 and 2.1 made the marking of very small
answers like 10^-20 almost impossible. This change fixes it.

This fix is almost entirely due the the careful research of Pierre
Pichet, who carefully testing various proposals, and worked out that
this one seemed best.
2012-08-23 18:59:11 +01:00
Tim Hunt 5a058f33a3 MDL-31244, MDL-25063 algebra filter: fix common false positives.
There are two well-known cases where the algebra filter messes up input
that is obviously not meant for the algebra filter:

1. Copy and paste of unified diffs.

2. @@PLUGINFILE@@ tokens in the HTML that are due to be replaced by the
files API.

This fix detects these two cases, and just stops the algebra filter from
replacing them.
2012-08-23 18:58:54 +01:00
Eloy Lafuente (stronk7) 4ff0f02857 weekly release 2.2.4+ 2012-08-23 19:24:57 +02:00
Eloy Lafuente (stronk7) 956592f590 Merge branch 'install_22_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_22_STABLE 2012-08-23 19:18:56 +02:00
Eloy Lafuente (stronk7) b6c52b4740 MDL-31957 Course reset: Add missing global 2012-08-23 02:13:08 +02:00
Dan Poltawski 6ab7e3a3d5 MDL-34870 enrol_cohort - don't need to do useless work 2012-08-22 10:03:40 +08:00
Adam Olley 892600868b MDL-34870: Prevent cohort enrol sync when updating course record 2012-08-22 10:03:34 +08:00
Dan Poltawski faf8ef6f04 Merge branch 'MDL-34733_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-22 09:16:32 +08:00
Eloy Lafuente (stronk7) d90e2237fe Merge branch 'wip-mdl-32759-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-08-22 02:34:35 +02:00
Eloy Lafuente (stronk7) b1dbeb8dff MDL-34702 quiz DB: fix non-matching savepoint 2012-08-22 02:28:02 +02:00
Eloy Lafuente (stronk7) 407c0fbcd6 Merge branch 'MDL-34702_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-22 02:12:11 +02:00
Dan Marsden b33d969d91 MDL-34994 mod_choice: fix restore of user responses - use correct optionid 2012-08-22 09:05:07 +12:00
Tim Hunt bfa34d8de3 MDL-34733 quiz 'secure' mode: finish review link broken in previews
Here, we use a nasty hack to fix the problem on stable branches without
an API change.
2012-08-21 12:12:11 +01:00
Juho Viitasalo 83d8c6b290 Changed two notification to output correctly 2012-08-21 15:38:27 +08:00
Dan Poltawski 4263e87000 Merge branch 'MDL-34569_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-21 12:35:23 +08:00
Petr Škoda adf397d88a MDL-34901 fix user login times handling 2012-08-21 12:02:48 +08:00
Dan Poltawski 08d2cbe451 Merge branch 'MDL-34742-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-21 11:59:38 +08:00
Dan Poltawski 06d9aa79b8 MDL-34808 qformat_examview - increment version 2012-08-21 11:06:23 +08:00
Dan Poltawski 6532971105 Merge branch 'MDL-34808_22' of git://github.com/jmvedrine/moodle into MOODLE_22_STABLE 2012-08-21 11:01:02 +08:00
David Monllao a0e94952d0 MDL-31496 mod_data Replacing inline styles for CSS classes in templates and browse view 2012-08-21 10:50:08 +08:00
David Monllao e8e8e49345 MDL-31496 mod_data Replacing inline styles for CSS classes in text inputs 2012-08-21 10:50:08 +08:00
David Monllao 42eb95f55c MDL-31496 mod_data Replacing inline styles for CSS classes in search containers 2012-08-21 10:50:08 +08:00
David Monllao 12f21bbb82 MDL-31496 mod_data Replacing inline styles for CSS classes in textarea elements 2012-08-21 10:50:08 +08:00
Dan Poltawski 3c061d5f83 MDL-34738 qformat_blackboard - increment version number 2012-08-21 09:53:59 +08:00
Jean-Michel Vedrine eeef6f2813 MDL-34738 qformat blackboard: blackboard format is broken
Conflicts:
	question/format/blackboard/format.php
2012-08-21 09:52:29 +08:00
Eloy Lafuente (stronk7) 0142a4b595 Merge branch 'MDL-29847_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-21 01:29:08 +02:00
Eloy Lafuente (stronk7) d60f8ef2db Merge branch 'MDL-31957-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-08-21 01:23:52 +02:00
Eric Merrill cae60d13ab MDL-34985 gradebook Fixing issue where default parent in Full View Add Category could be inconsistent.
Turns out the correct default was already computed, but was not being applied to the setting.
2012-08-20 17:14:07 -04:00
Eloy Lafuente (stronk7) de4c3e62cf Merge branch 'w34_MDL-34868_m22_gmapsv2' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-08-20 20:18:37 +02:00
Eloy Lafuente (stronk7) 85bd3fd899 Merge branch 'MDL-28531-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-20 16:28:38 +02:00
Eloy Lafuente (stronk7) 59e2a77596 Merge branch 'MDL-34529' of git://github.com/jasonilicic/moodle into MOODLE_22_STABLE 2012-08-20 13:59:55 +02:00
Nathan Mares 3ea975b6ba MDL-34372: Fix query in backup_cron_helper so it works on Postgres 8.3
Amended by stronk7@moodle.org to use uppercase SQL keywords.
2012-08-20 13:29:03 +02:00
Dan Poltawski 0863fbe14a Merge branch 'MDL-34779-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-08-20 15:59:06 +08:00
Michael de Raadt d62450f1dc MDL-34779 settings: Updating lang string corrposnding to the fullnamedisplay setting 2012-08-20 15:47:55 +08:00
Dan Poltawski 9549417007 Merge branch 'MDL-34957_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-08-20 14:23:35 +08:00
Rajesh Taneja 642603d40c MDL-34040 Filters: Added wmode=transparent for tinymce moodlemedia plugin, to avoid overlapping 2012-08-20 14:04:59 +08:00
Dan Poltawski 00fe761b3e Merge branch 'MDL-34535-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-08-20 12:07:02 +08:00
Dan Poltawski 2f7ca09572 Merge branch 'wip-MDL-31810-stable22' of git://github.com/phalacee/moodle into MOODLE_22_STABLE 2012-08-20 12:01:43 +08:00
Dan Poltawski b869f5d045 Merge branch 'wip-mdl-31734-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-08-20 11:57:27 +08:00
Dan Poltawski d2dccd8162 Merge branch 'MDL-30405-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-20 11:40:07 +08:00
Dan Poltawski 279c39f71d Merge branch 'MDL-30370_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-08-20 11:22:34 +08:00
Andrew Davis 6ebac8f0c1 MDL-34406 message: removed an unnecessary string creation 2012-08-20 10:17:30 +08:00
Petr Škoda 0df0664e4d MDL-34868 update deprecated Google maps API V2 key info 2012-08-19 18:22:13 +02:00
Jean-Michel Vedrine 4b4373ed3d MDL-34808 qformat examview Add phpunit tests to examview import format 2012-08-19 16:44:24 +02:00
Mary Evans a18539406c MDL-34957 theme_base: made small change to custommenu CSS in style/core.css to fix vertical arrow overlap in menu item 2012-08-19 01:49:34 +01:00
AMOS bot e212bd3aab Automatically generated installer lang files 2012-08-19 00:31:37 +00:00
Tim Hunt cb12522cea MDL-29847 question preview: garbage collect old preview data.
This adds cron code which looks for question previews that have not been
touched for more than 24 hours, and deletes them.

We try to delete previews immediately. For example if the user clicks
start again, then we immediately delete their previous preview. However,
we can't do that if they just close the preview window. Hence we need
some cron code to clean up old preview that have got left lying around.

Normally, this code will not have much to do, so it will be very fast,
so we can afford to run it every cron.

This has been implemented in such a way that in future it will be easy
to add other cron code to the question bank.

Sadly, to make this work on MySQL, we require a horrible hack in the
already hacky delete_usage_records_for_mysql function.
2012-08-17 10:53:05 +01:00
sam marshall eaead2aea8 MDL-31957 Course reset: Does not erase activity completion data 2012-08-17 10:41:14 +01:00
Frederic Massart 24d063dbb8 MDL-28531 Unit Tests: Fixed tests to work with core update 2012-08-17 14:46:04 +08:00
Frederic Massart a356a5f615 MDL-28531 Backup: Automated backups run when they are scheduled
Conflicts:

	lib/tests/backup_test.php
2012-08-17 14:46:03 +08:00
Frederic Massart e70c06f548 MDL-34648 Chat: No more errors when sentence begin with 'To' 2012-08-17 14:45:53 +08:00
Matt Meisberger 83985d7856 MDL-34742 - adding ability to move blocks into empty column 2012-08-17 14:45:20 +08:00
Rajesh Taneja bcc92a4cc7 MDL-31734 Course: removed unused sectiontitle string 2012-08-17 14:34:06 +08:00
Rajesh Taneja 617144c9ff MDL-26492 Lesson: lesson_get_user_grades will return grade of all users if userid=0 2012-08-17 14:31:27 +08:00
Rossiani Wijaya 6e8fad9d04 MDL-34569 - add label for search wiki input text 2012-08-17 11:30:37 +08:00
Rossiani Wijaya ee5a93f38e MDL-34569 accessibility compliance for wiki module: Add label for input text and select tag 2012-08-17 11:16:36 +08:00
AMOS bot 4f15cd4180 Automatically generated installer lang files 2012-08-17 00:31:52 +00:00
Tim Hunt 7fbbcdbdd8 MDL-34702 quiz DB: questiondecimalpoints has wrong default.
Thanks to the folks at UCL for tracking down this problem. It has only
hidden for 2+ years!

Conflicts:

	mod/quiz/db/install.xml
	mod/quiz/version.php
2012-08-16 17:41:14 +01:00
Eloy Lafuente (stronk7) 76c9fcc967 weekly release 2.2.4+ 2012-08-16 17:25:09 +02:00
Eloy Lafuente (stronk7) 2ebd272124 Merge branch 'install_22_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_22_STABLE 2012-08-16 17:22:18 +02:00
Rossiani Wijaya e155365566 MDL-34563 - change string firstname to lastname and add accesshide class 2012-08-16 14:18:46 +08:00
Rossiani Wijaya afee2a7af2 MDL-34563 - removed double labeling and add label for input text 2012-08-16 14:18:37 +08:00
Aparup Banerjee 408dfe97b8 Merge branch 'MDL-34565_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-16 11:51:54 +08:00
Jason Fowler 7ceb8dacb7 MDL-31810 - Fixing unclosed DIV tags throughout Moodle 2012-08-16 10:56:01 +08:00
David Monllao 227b0f5a7d MDL-30370 mod_forum - Removing duplicate seleted field in the DB query
Credit to Iñigo Zendegi
2012-08-15 17:01:35 +08:00
Rossiani Wijaya 9a460c38fd MDL-34565 - remove duplicate labeling 2012-08-15 16:25:21 +08:00
Eloy Lafuente (stronk7) 4dd7c5cafd Merge branch 'MDL-34862_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-15 03:32:59 +02:00
AMOS bot 0beb16d923 Automatically generated installer lang files 2012-08-15 00:31:34 +00:00
Sam Hemelryk 5d44dbd1eb Merge branch 'MDL-33531_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-08-15 11:21:57 +12:00
Dan Poltawski 3403906010 MDL-29192 - clarify email_to_user call 2012-08-15 01:17:57 +02:00
Aparup Banerjee e4744c5896 Merge branch 'wip-MDL-34748-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-08-14 15:30:16 +08:00
Ankit Agarwal 9b18d9ce59 MDL-34535 message: userto should use is_number instead of is_init 2012-08-14 14:41:57 +08:00
Aparup Banerjee eed4c2339c Merge branch 'MDL-34563_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-14 14:34:53 +08:00
Rossiani Wijaya 3798162934 MDL-34563 - change plural strings and removed colon for accesshide label 2012-08-14 13:56:57 +08:00
Aparup Banerjee 97da1cf0ec Merge branch 'MDL-34565_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-14 13:53:43 +08:00
Dan Poltawski 8f4ff87e5e Merge branch 'MDL-34728_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-14 13:33:16 +08:00
Dan Poltawski 37b1a5264b Merge branch 'MDL-34807_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-14 12:08:09 +08:00
Rajesh Taneja 2b59c68796 MDL-32759 Assignment: Changing grade for existing assignments will show warning that grades will not be scaled 2012-08-14 11:44:41 +08:00
Tim Hunt 1907f7e082 MDL-34862 question preview: improve preview ownership check.
Users should only be able to access their own quetion preview. In the
past, for reasons I can no longer remember, this was enforced
using the session. It is much better to set the question_usage to belong
to the user's context.
2012-08-13 17:44:22 +01:00
Tim Hunt c090746541 MDL-34807 question bank: navigation loses place.
The symptom is that where we are now is not shown in the settings
navigation. However, the underlying cause is that question/edit.php is
doing some crazy thing of its own to build $PAGE->url, rather than using
the one returned by question_edit_setup.

Not that this patch itentionally removes the returnurl param. It was
added as part of a big change MDL-20276, which I think just got this
detail wrong. That variable is never used.
2012-08-13 11:29:46 +01:00
Tim Hunt c9b212083c MDL-34728 forms: woy for other JS to trigger disableIf update.
This was discovered while working on MDL-32705. If some JavaScript (for
example a select all/none link) changes the state of some form fields,
then the disabledIf state of other form elements does not automatically
update.

The existing form JS was so well encapsulated that this was impossible.
This change pokes a hole in the encapsulation, and provides an API
    M.form.updateFormState(formid);
that other bits of JS code can call when necessary.
2012-08-13 11:20:29 +01:00
Rossiani Wijaya 7e68a5205a MDL-34563 accessibility compliance for data module: Add forform input text and select tag 2012-08-13 15:14:27 +08:00
Rossiani Wijaya 92af44e829 MDL-34565: change to plural strings 2012-08-13 15:11:06 +08:00
Rossiani Wijaya 914a5ab622 MDL-34565 accessibility compliance for forum module: Add forform input text and select tag 2012-08-13 15:11:06 +08:00
Marina Glancy b56249893d MDL-34748 repository_filesystem: Sort files by title by default 2012-08-13 12:10:28 +08:00
Dan Poltawski 3311b367ae Merge branch 'MDL-34835_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-08-13 10:20:35 +08:00
Petr Škoda 76bdfc1d79 MDL-34840 fix fatal pg error during upgrade
This is a regression caused by MDL-30515
2012-08-11 17:49:11 +02:00
AMOS bot 329dae9cb7 Automatically generated installer lang files 2012-08-11 00:31:32 +00:00
Mary Evans 3f7bbb4aeb MDL-34835 theme_fusion: fixed displaced navbar by extending #region-header.inside bottom margin by 70px in style/pagelayout.css 2012-08-10 20:36:37 +01:00
David Monllao cfcb4304c5 MDL-33531 backup Added format_string to course shortname 2012-08-10 08:43:24 +08:00
David Monllao b5ce7c4afc MDL-33531 backup Avoiding possible Notice 2012-08-10 08:43:24 +08:00
Lorenzo Nicora dcc36c3aa2 MDL-33531 Fixed the regexp used to find old backup files 2012-08-10 08:43:23 +08:00
AMOS bot 52b5634eaa Automatically generated installer lang files 2012-08-10 00:31:49 +00:00
Eloy Lafuente (stronk7) c36de79f5c weekly release 2.2.4+ 2012-08-09 20:51:09 +02:00
Eloy Lafuente (stronk7) 20244afd2c Merge branch 'install_22_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_22_STABLE 2012-08-09 20:46:25 +02:00
Tim Hunt 8cec008393 MDL-34590 javascript-static: nuclear option in openpopup
I think we have finally tamed Chrome on all platforms. (Crosses fingers.)
2012-08-09 17:17:50 +02:00
Rossiani Wijaya 072af5529b MDL-34575: fixed string typo and string duplication for label 2012-08-08 12:33:57 +08:00
Dan Marsden c491b300a3 MDL-34656 prevent login form from being shown inside iframe - also prevent wantsurl from being set to loadsco.php which isn't a valid page for initial load.
Conflicts:
	mod/scorm/loadSCO.php
2012-08-08 02:04:08 +02:00
Eloy Lafuente (stronk7) 8a991d8692 Merge branch 'MDL-34704_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-08 01:54:12 +02:00
Eloy Lafuente (stronk7) eab358f916 Merge branch 'wip-mdl-30792-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-08-08 01:01:28 +02:00
Charles Fulton 1238c6fee7 MDL-32023 wiki: remove hard-coded edit string 2012-08-08 00:29:48 +02:00
Charles Fulton 8440c2c72c MDL-29129 wiki: fix a hardcoded string 2012-08-07 23:59:39 +02:00
Aparup Banerjee 3407c2ffe0 Merge branch 'MDL-34566_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-07 15:08:04 +08:00
Aparup Banerjee 8bcbce1576 Merge branch 'MDL-34564_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-07 14:58:05 +08:00
Aparup Banerjee 24bcc1e525 Merge branch 'MDL-34560_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-07 14:45:55 +08:00
Aparup Banerjee 7733795102 Merge branch 'MDL-34559_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-07 14:37:24 +08:00
Aparup Banerjee 451b9aae0f Revert "Merge branch 'MDL-28531-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE"
This reverts commit 0c9a3490bb, reversing
changes made to dd9f138e1d.
2012-08-07 14:28:22 +08:00
Aparup Banerjee 0c9a3490bb Merge branch 'MDL-28531-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-07 13:58:45 +08:00
Rossiani Wijaya 807010c975 MDL-34559: removing accesshide class 2012-08-07 13:38:39 +08:00
Aparup Banerjee dd9f138e1d Merge branch 'MDL-34715-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-07 10:42:37 +08:00
Dan Poltawski 2dc3011aaf Merge branch 'MDL-34562_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-07 10:16:59 +08:00
Dan Poltawski 74552ee06a Merge branch 'MDL-34567_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-07 10:03:27 +08:00
Aparup Banerjee 07b64939e8 Merge branch 'MDL-22663-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-07 10:01:04 +08:00
Aparup Banerjee e8b2b43aff Merge branch 'MDL-33022-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-08-07 09:24:05 +08:00
Dan Poltawski c8a605729d Merge branch 'wip-MDL-34669-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-08-07 08:48:45 +08:00
AMOS bot ea7537197b Automatically generated installer lang files 2012-08-07 00:31:57 +00:00
Eloy Lafuente (stronk7) 12b7b430a4 Merge branch 'MDL-31753' of git://github.com/enovation/moodle into MOODLE_22_STABLE 2012-08-07 02:12:57 +02:00
Kirill Astashov 1d8cd19d72 MDL-34669: Fix editor filepicker context bt trying to use page context 2012-08-06 16:57:24 +08:00
Aparup Banerjee f2a044dc6b Merge branch 'MDL-31599-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-08-06 16:44:17 +08:00
Aparup Banerjee a1ee3b38a2 Merge branch 'MDL-34716-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-08-06 16:38:20 +08:00
Rossiani Wijaya 90f288d617 MDL-34562 accessibility compliance for chat module: Add <label> for input text and select tag 2012-08-06 16:30:00 +08:00
Dan Poltawski ab6f805dd4 Merge branch 'MDL-34561_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-06 15:49:18 +08:00
Rossiani Wijaya cdbf85e62a MDL-34561 accessibility compliance for assignment module: add accesshide class 2012-08-06 15:17:18 +08:00
Dan Poltawski 572024c4e6 Merge branch 'MDL-34707_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-06 14:42:19 +08:00
Charles Fulton 456014e502 MDL-34629 wiki: convert default format value during restore 2012-08-06 14:19:53 +08:00
Dan Poltawski c834462e08 Merge branch 'MDL-34561_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-06 14:09:02 +08:00
Dan Poltawski a0e776e02d Merge branch 'MDL-25983_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-08-06 13:53:03 +08:00
Dan Poltawski 957576fd62 Merge branch 'MDL-34259-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-06 12:21:50 +08:00
Dan Poltawski dc5ab79d39 Merge branch 'MDL-34574_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-06 12:12:38 +08:00
Dan Poltawski 4f73ef521e MDL-34575 lang/notes: reorder string to be alphabetical 2012-08-06 12:08:35 +08:00
Dan Poltawski d4e606c8c0 Merge branch 'MDL-34575_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-06 12:06:47 +08:00
Dan Poltawski d0374ba31e Merge branch 'MDL-34558_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-06 11:54:19 +08:00
Dan Poltawski 9980863f30 Merge branch 'MDL-34557_accessibility_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-08-06 11:49:59 +08:00
Dan Poltawski b02ff428de Merge branch 'MDL-34705_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-06 11:31:44 +08:00
Dan Poltawski 77c3dbfc77 Merge branch 'MDL-28207-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-08-06 10:40:51 +08:00
Dan Poltawski 659a30df30 Merge branch 'MDL-34590_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-08-06 10:11:33 +08:00
Dan Poltawski c574b5dddd Merge branch 'MDL-34405_m22' of git://github.com/kordan/moodle into MOODLE_22_STABLE 2012-08-06 10:06:40 +08:00
Dan Poltawski b690238e6b Merge branch 'w32_MDL-34585_m22_blogfiles' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-08-06 09:46:03 +08:00
Sam Hemelryk 5831c9f891 Merge branch 'MDL-34708_m22' of git://github.com/nebgor/moodle into MOODLE_22_STABLE 2012-08-06 12:04:40 +12:00
Sam Hemelryk 297e891c1f Merge branch 'MDL-34658-22' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-08-06 11:44:09 +12:00
Andreas Grabs 1dd8dd8496 MDL-34670 - undefined variable in feedback templates 2012-08-06 11:37:17 +12:00
Sam Hemelryk 07d8e5cfa7 Merge branch 'MDL-34645_22' of git://github.com/aolley/moodle into MOODLE_22_STABLE 2012-08-06 11:04:47 +12:00
Sam Hemelryk f5543aa05e Merge branch 'MDL-34647_22' of git://github.com/aolley/moodle into MOODLE_22_STABLE 2012-08-06 10:58:18 +12:00
Aparup Banerjee 542ed166a5 MDL-34708 Forms library : Fixed incorrect calendar day displayed across timezones. Credit to Matthew Davidson and team at rose-hulman.edu. 2012-08-05 23:33:04 +08:00
Rossiani Wijaya 2b8d9b5b7c MDL-34560 accessibility compliance for message: Add label for input text and select tag 2012-08-04 17:01:34 +08:00
Tim Hunt 45c29ec08d MDL-34704 couse, accesslib: improve $CFG->courselistshortnames
1. get_context_name should respect the $CFG->courselistshortnames
setting.

2. When $CFG->courselistshortnames is on, what to display should use a
language string, rather than string concatenation. This makes it
possible for people to configure the display. For example, they might
want 'My first course [M101]' instead of 'M101 My first course'.
2012-08-03 14:47:37 +01:00
Tim Hunt 92b7cdd052 MDL-34590 javascript-static: full-screep popups for Chrome.
I have left in both:
1. the code to get the window size correct initially, becuase that seems
sensible; and
2. the subsequent resize (with the setTimeout that Chrome requires,
thanks Jeff Rader for finding that) becuase on Chrome, it gets the size
a bit too big initially, so this correction is necessary.
2012-08-03 13:21:56 +01:00
Andreas Grabs 8821ce4d3d MDL-34658 - Saving failed because missing or false values 2012-08-03 12:00:22 +02:00
AMOS bot 25866795de Automatically generated installer lang files 2012-08-03 11:45:30 +02:00
Dan Poltawski d638b5f0aa MDL-34716 outcomes: Fix admin tree location 2012-08-03 16:07:36 +08:00
Frederic Massart 23249b70bd MDL-22663 Repository: WebDAV supports Digest authentication 2012-08-03 14:02:34 +08:00
Frederic Massart 9f412a79d0 MDL-22663 Repository: WebDAV supports SSL and chunked data
Conflicts:

	repository/webdav/lib.php
2012-08-03 13:58:26 +08:00
Frederic Massart f515f00aae MDL-22663 Repository: Fixed strict standards notices in WebDAV lib 2012-08-03 13:58:22 +08:00
Rossiani Wijaya 9106db46b6 MDL-34575 accessibility compliance for notes: Add form input text and select tag 2012-08-03 13:43:32 +08:00
Rossiani Wijaya a367cd0e5b MDL-34574 accessibility compliance for mymobile theme: Add forform input text and select tag 2012-08-03 12:54:22 +08:00
Rossiani Wijaya d9abbfdf5d MDL-34567 accessibility compliance for lesson module: Add forform input text and select tag 2012-08-03 12:54:16 +08:00
Rossiani Wijaya bfdae7324b MDL-34566 accessibility compliance for glossary module: Add forform input text and select tag 2012-08-03 12:54:15 +08:00
Rossiani Wijaya 5ec0afb99a MDL-34564 accessibility compliance for feedback module: Add forform input text and select tag 2012-08-03 12:54:12 +08:00
Rossiani Wijaya 7fc8b19110 MDL-34561 accessibility compliance for assignment module: Add forform input text and select tag 2012-08-03 12:54:09 +08:00
Rossiani Wijaya 0c12ac81ee MDL-34559 accessibility compliance for grade: Add forform input text and select tag 2012-08-03 12:54:08 +08:00
Rossiani Wijaya 57d086caa3 MDL-34558 accessibility compliance for filter: Add forform input text and select tag 2012-08-03 12:54:07 +08:00
Rossiani Wijaya 09fab4e7b3 MDL-34557 accessibility compliance for enrol: Add forform input text and select tag 2012-08-03 12:54:06 +08:00
Rajesh Taneja 64171aac70 MDL-30792 Files API: Cleaner approach to get maxbytes size in filepicker 2012-08-03 11:47:44 +08:00
Rajesh Taneja fa7a8a9899 MDL-30792 Files API: maxbytes will be set by get_max_upload_file_size if less then 0 or greater then max moodle limit 2012-08-03 11:44:20 +08:00
Frederic Massart bf8777d126 MDL-28531 Backup: Automated backups run when they are scheduled
Conflicts:

	lib/tests/backup_test.php
2012-08-03 09:30:14 +08:00
Frederic Massart e45890a841 MDL-34259 Lesson: True/false questions don't break on missing answer 2012-08-03 09:23:13 +08:00
Frederic Massart cbb011a1a6 MDL-28207 Course: Showing/hiding/marking a section respect capabilities 2012-08-03 09:21:14 +08:00
Tim Hunt cd914a25d0 MDL-34707 backup UI: only include the JS once. 2012-08-02 18:48:07 +01:00
Tim Hunt f66ad4aa11 MDL-34705 role assignments list: should link to contexts.
This will make Admin's lives a bit easier.
2012-08-02 18:15:40 +01:00
Petr Škoda bfa9be6230 MDL-34585 fix broken blog file access control 2012-08-02 09:59:31 +02:00
David Monllao a830d9071e MDL-25983 enrol_imsenterprise Importing the course summary when adding new courses 2012-08-02 15:35:25 +08:00
Dan Poltawski f2ddce97bd weekly release 2.2.4+ 2012-08-02 14:39:59 +08:00
Dan Poltawski 347bea1069 MDL-31599 block_news - incorrect RSS feed for guest user
Was previously using the userid 0, rather than guest to use
authenticated RSS feed.

Thanks to Paul Verrall at LUNS for helping me debug this.
2012-08-02 11:11:44 +08:00
Dan Marsden 9d94aa3154 MDL-33022 mod_form: set correct groupid when editing an existing post 2012-08-02 10:48:01 +08:00
Petr Škoda 8e6cbb58d8 MDL-34368 fix another validuntil condition 2012-08-01 15:07:16 +08:00
Ankit Agarwal 6efb36babf MDL-32827 calendar: include global to check for events with courseid as siteid 2012-08-01 15:20:52 +12:00
Dan Poltawski a9dcb44830 MDL-34599 mod_quiz: optional $thispage & $nextpage
The previous change making the params required was a regression.
2012-08-01 09:07:02 +08:00
Charles Fulton 854a3741bc MDL-29909 wiki: do not show groups when no groups present 2012-08-01 12:40:06 +12:00
Dan Poltawski 37699accdb MDL-32791 mod_quiz - correct bad version
Many thanks for Jenkins for spotting it :)
2012-07-31 19:40:33 +08:00
Dan Poltawski a14127cdbc Merge branch 'MDL-32791_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-31 17:46:27 +08:00
Dan Poltawski 254f6e4d96 Merge branch 'MDL-34599_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-31 17:42:57 +08:00
Rossiani Wijaya bc2a87e252 MDL-34556 accessibility compliance for course: Add forform input text and select tag 2012-07-31 17:18:04 +08:00
Rossiani Wijaya e1d3079fb6 MDL-34555 accessibility compliance for calendar: Add forform input text and select tag 2012-07-31 17:12:07 +08:00
Rossiani Wijaya 65ae20ba36 MDL-34554 accessibility compliance for blocks: Add forform input text and select tag 2012-07-31 17:06:16 +08:00
Rossiani Wijaya 229904970b MDL-34553 accessibility compliance for authentication: Add forform input text and select tag 2012-07-31 16:59:55 +08:00
Rossiani Wijaya d3b86750a3 MDL-34552 accessibility compliance for admin: Add forform input text and select tag 2012-07-31 16:35:30 +08:00
Aparup Banerjee 0e12789b27 MDL-34650 added MDLs to todo comment and deprecation comment.
(also triggering an amos script here for the other MDL-34650 commit)

AMOS BEGIN
  CPY [minute,form],[minute,core]
  CPY [month,form],[month,core]
  CPY [options,editor],[options,core]
  CPY [selectacourse,backup],[selectacourse,core]
AMOS END
2012-07-31 15:40:15 +08:00
Aparup Banerjee b63bc5027b MDL-34650 typo correction 2012-07-31 13:23:42 +08:00
Aparup Banerjee 906f0ddbca Merge branch 'MDL-34650_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-31 13:20:52 +08:00
Sam Hemelryk b21f174957 Merge branch 'MDL-34528_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-07-31 16:49:20 +12:00
Sam Hemelryk 6cb03ab5d3 Merge branch 'MDL-30515_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-31 16:40:37 +12:00
Sam Hemelryk 09c3821bf4 Merge branch 'MDL-32499_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-31 16:29:41 +12:00
Sam Hemelryk dd204f3a8f Merge branch 'MDL-32931_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-31 16:18:41 +12:00
Sam Hemelryk ab474e3e6d Merge branch 'MDL-32827-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-07-31 16:15:49 +12:00
Rossiani Wijaya 9000014032 MDL-34650 - accessibility compliance: Add <label> for form input text and select tag 2012-07-31 12:10:47 +08:00
Dan Poltawski 6b11733524 Merge branch 'MDL-25953-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-31 12:02:20 +08:00
Ankit Agarwal a521e7e01f MDL-32827 calendar: update eventtype of broken event in bulk instead of doing it one by one 2012-07-31 11:20:00 +08:00
Dan Poltawski a40624990c Merge branch 'MDL-34624_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-07-31 11:10:44 +08:00
Dan Poltawski b5affb62a8 Merge branch 'MDL-34255_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-31 10:32:00 +08:00
Jerome Mouneyrac 8884e3a2a8 MDL-33869 user_get_user_details: add support for 'Show user identity' fields set by administrator 2012-07-31 10:28:11 +08:00
Crafton Williams 01924246c3 MDL-33869 user_get_user_details: allow return of idnumber 2012-07-31 10:28:02 +08:00
Adam Olley 625aa8b043 MDL-34647: admintool: uploaduser enrolments now obey enrolperiod directive 2012-07-31 11:37:34 +09:30
Adam Olley aef7e750b0 MDL-34645: enrol_manual: enrolment init to pass default duration setting 2012-07-31 11:10:16 +09:30
Dan Poltawski e9c0708633 Merge branch 'MDL-34483_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-31 09:12:37 +08:00
Sam Hemelryk d3fd4849ae Merge branch 'MDL-28568_noncontact_warning_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-07-31 11:59:02 +12:00
Tim Hunt ae1ecaf94a MDL-34483 qformat_examview: Commit example file.
Supplied by Rick Jerz.
2012-07-30 11:56:51 +01:00
Nathan Mares 20c116f9f7 MDL-34368: Fix broken query in so tokens are correctly checked against the linked service 2012-07-30 15:49:51 +08:00
Dan Poltawski 7a9aacfcce Merge branch 'MDL-34507-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-30 14:05:07 +08:00
Dan Poltawski fe8dff2b01 Merge branch 'MDL-34589_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-30 13:56:13 +08:00
Dan Poltawski a1355c4876 Merge branch 'MDL-33537_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-30 13:46:40 +08:00
Dan Poltawski 368fb63346 Merge branch 'w31_MDL-34538_m22_validatefloats' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-30 12:35:17 +08:00
Dan Poltawski 617eabaf87 Merge branch 'MDL-31509_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-30 12:15:57 +08:00
Dan Poltawski 0022ff1787 Merge branch 'wip-mdl-34239-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-07-30 12:05:36 +08:00
Dan Poltawski f2a59d76d0 Merge branch 'MDL-34519_22_course_reset_patch' of git://github.com/rlorenzo/moodle into MOODLE_22_STABLE 2012-07-30 11:58:06 +08:00
Mary Evans 108ea10c38 MDL-34528 theme-canvas: Removed redundent exclude stylesheet configurations from CANVAS theme 2012-07-29 21:56:18 +01:00
kordan 1d55b8ecae MDL-34405 theme_formal_white: added background for quiz overview 2012-07-29 16:02:36 +02:00
Mary Evans 658c9cc336 MDL-34624 theme_base: added background-color to style/admin.css for role edit default 2012-07-29 14:48:54 +01:00
Tim Hunt c3d3eb3100 MDL-31509 quiz outcomes: let people associate quizzes with outcomes.
The quiz does not really support outcomes, but even so in 1.9 you could
select outcomes on the quiz edit form, and apparently this was useful to
some people, therefore we should re-enable it.
2012-07-27 18:13:51 +01:00
Petr Škoda aee963dac8 MDL-34538 fix PARAM_FLOAT validation 2012-07-27 18:46:23 +02:00
Tim Hunt d4b3dd67ad MDL-32791 quiz db: clean up garbage data that was causing problems.
Melinda Kraft reported having rows in their quiz_question_instances
table which caused various problems. These rows are meaningless, so I
have done a DB upgrade step to clean them up, which should deal with the
bad side-effets they were causing.
2012-07-27 16:47:56 +01:00
Jean-Michel Vedrine c354a10bd2 MDL-34483 qformat_examview: handle more questions.
These fixes come from testing with the example file supplied by Rick
Jerz.
2012-07-27 12:21:01 +01:00
Jean-Michel Vedrine 0f19cdac5e MDL-34483 qformat_examview: clean the code to make codechecker happy 2012-07-27 12:21:00 +01:00
Jean-Michel Vedrine 2275b67a95 MDL-34483 qformat_examview: changes required to make it basically work. 2012-07-27 12:20:58 +01:00
Tim Hunt dcfdf468fc MDL-34599 quiz attempts: more robust if page number out of range.
Rather than throwing an exception, we should just show the first/last
page of the quiz if the page number is out-of-range.
2012-07-27 11:48:04 +01:00
Rajesh Taneja 835731d129 MDL-34239 Blog: Editing blog associated with module will be keep it's association 2012-07-27 14:02:31 +08:00
Ankit Agarwal 44793f390f MDL-32827 calendar: Added logic to handle calendar events with empty eventtypes during restore 2012-07-27 11:17:19 +08:00
Ankit Agarwal de2635879e MDL-32827 calendar: bumping the version 2012-07-27 11:17:18 +08:00
Ankit Agarwal 7a5bbcf7f2 MDL-32827 calendar: Fixining calender entries with no eventtype 2012-07-27 11:16:30 +08:00
Frederic Massart 7bef288418 MDL-25953 Repository: Amazon S3 supports sub directories
Conflicts:

	repository/s3/lib.php
2012-07-27 10:52:06 +08:00
Frederic Massart b5b24718e3 MDL-25953 Repository: Updated Amazon S3 library
Conflicts:

	repository/s3/lib.php
2012-07-27 10:52:06 +08:00
Frederic Massart 0a9f98bf4e MDL-34507 Filepicker: Repositories with specific filetypes are displayed when expected 2012-07-27 10:01:14 +08:00
David Monllao c04f9dd478 MDL-32499 gradingform_rubric Avoid backup/restore of rubric fillings without an existing criteria 2012-07-27 09:28:41 +08:00
David Monllao b729292ca3 MDL-32931 mod_forum Polishing patch and taking into account courses without previous accesses 2012-07-27 09:28:33 +08:00
Tom Lanyon a6bc93ae8f MDL-32931 mod_forum Change forum overview to avoid use of (potentially large and slow ) log table. 2012-07-27 09:28:33 +08:00
David Monllao 16c5104baa MDL-30515 grade Removing duplicate values to avoid upgrade to 2.x crash 2012-07-27 09:26:29 +08:00
Tim Hunt d87c8d7ffd MDL-34589 quiz report graphs: PHP5.4 issue with unset($array[$float]).
Thanks to Matthew Davidson for diagnosing the problem.
2012-07-26 19:00:15 +01:00
Aparup Banerjee dd9274c4fc weekly release 2.2.4+ 2012-07-26 14:27:35 +08:00
Rossiani Wijaya 05d7440e19 MDL-34255 group calendar events: fixed adding group calendar event for students 2012-07-26 14:24:44 +08:00
Aparup Banerjee d61be4030f Merge branch 'install_22_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_22_STABLE 2012-07-26 14:00:57 +08:00
AMOS bot 2b7bbba7c4 Automatically generated installer lang files 2012-07-26 00:31:45 +00:00
Dan Poltawski 60f5190149 Merge branch 'MDL-13629_droplow_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-07-25 12:29:56 +08:00
Dan Poltawski a875f820c2 MDL-27083 - upgrade: fix incorrect version number 2012-07-25 09:56:43 +08:00
Jason Ilicic 0c62ad79fb MDL-34529: Fixed ordering of course sections when performing import/restore by adding the sort parameter. 2012-07-25 10:29:55 +09:30
Sam Hemelryk 775673d4b1 Merge branch 'MDL-27083-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-25 09:18:06 +12:00
Rex Lorenzo 6570f0e041 MDL-34519 - Course reset not protected by proper capability 2012-07-24 12:04:41 -07:00
Aparup Banerjee 2a912a7aff MDL-26969 assignment : clarified phpdoc and fixed whitespace. 2012-07-24 16:40:24 +08:00
Aparup Banerjee aa95731b73 Merge branch 'MDL-26969_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-24 16:40:19 +08:00
Petr Škoda 249f07e616 MDL-34129 show course info on enrolment page 2012-07-24 13:42:03 +08:00
Aparup Banerjee ccbdbc7f67 Merge branch 'wip-mdl-33159-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-07-24 11:03:15 +08:00
AMOS bot f0521d9b1a Automatically generated installer lang files 2012-07-24 00:31:58 +00:00
Dan Poltawski 59cc009152 Merge branch 'MDL-34251_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-23 14:02:15 +08:00
Dan Poltawski 5d6842891e Merge branch 'MDL-34226_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-23 13:54:11 +08:00
Rajesh Taneja 4dba21f35a MDL-34148 Blog: Fixed variable name used for saving module name
Updated Erik's patch to match coding style
2012-07-23 13:46:26 +08:00
Erik Lundberg d6d00b134e MDL-34148: Instead of using the module name from the filesystem, the blog menu now fetches the module name with get_string(). 2012-07-23 13:46:25 +08:00
Dan Poltawski 5d32507ebe Merge branch 'wip-MDL-34404-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-07-23 13:26:20 +08:00
Dan Poltawski 7dd07a8d38 Merge branch 'w30_MDL-34396_m22_loginhttpsspell' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-23 12:20:16 +08:00
Frederic Massart c7f65058d0 MDL-27083 Questions: Orphaned questions are adopted on upgrade 2012-07-23 12:09:20 +08:00
Rossiani Wijaya 6961237957 MDL-26969 Assignment module - upload: fixed get_submission() return value to nothing when param is set to false. 2012-07-23 11:33:11 +08:00
Aparup Banerjee aeb48cca52 Merge branch 'MDL-32665_chat_popup_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-07-23 10:22:09 +08:00
Sam Hemelryk 0fd928ddeb Merge branch 'MDL-33560-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-23 12:25:09 +12:00
Jean-Philippe Gaudreau 0319cba7ee MDL-31516 Fixing grade_edit_tree::format_number 2012-07-23 12:22:52 +12:00
Sam Hemelryk 71268ddb62 Merge branch 'MDL-29563_22' of https://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-23 11:49:28 +12:00
Jason Ilicic 465775fc67 MDL-34427: Corrected language string when not allowed to enter the chat room. 2012-07-23 11:40:31 +12:00
Sam Hemelryk 82bb3c039c Merge branch 'm22_MDL-34374' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-07-23 11:37:59 +12:00
Sam Hemelryk 5e202b6cb4 Merge branch 'm22_MDL-34233' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-07-23 11:26:41 +12:00
Sam Hemelryk 5f6c20bca2 Merge branch 'MDL-34265-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-07-23 10:39:30 +12:00
Andrew Robert Nicols 6bec1fe66f MDL-34322 Don't display empty navigation nodes which have no link 2012-07-23 09:43:31 +12:00
Sam Hemelryk 4298cce0b6 MDL-34243 completion: Fixed up call to completion_criteria::factory that was passing object 2012-07-23 09:39:02 +12:00
Aaron Barnes 4ed5856a08 MDL-34243 completion: get_criteria() incorrectly passing object 2012-07-23 09:39:02 +12:00
Luke Tucker 150e548537 MDL-34396 Ensure TinyMCE editor spell checking works on pages with $PAGE->https_required() 2012-07-21 20:31:05 +02:00
David Monllao 2322b97e38 MDL-33537 gradingform_rubric Adding the definition when retrieving grading instances
Credit to Sam Chaffee
2012-07-20 14:59:11 +08:00
Derick Turner 125840c2a1 MDL-33159 course: Fix for site wide restricted modules not being selected by default 2012-07-20 12:33:51 +08:00
Tim Hunt b0e0762ca0 MDL-34251 question engine: possible infinite loop loading usages
In the case where either a question_attempt had not steps, or a
question_usage had not question_attempts, the load_from_records methods
could get stuck in an infinite loop.
2012-07-19 12:45:47 +01:00
Tim Hunt db5b519022 MDL-34226 multichoice qtype: correct is_complete_response for multianswer
The multianswer qtype uses the multi-choice one, and the way it does its
responses array breaks an assumption that multi-choice was making.
2012-07-19 12:45:31 +01:00
Andrew Davis 9e198bd6a6 MDL-28568 message: added a warning message when the user is about to message someone who cant reply 2012-07-19 17:07:12 +08:00
Sam Hemelryk db593ec914 MDL-33448 javascript: Added caching for the YUI instance used for debug in get_string 2012-07-19 20:22:32 +12:00
Ankit Agarwal 2fd58992ba MDL-34265 SCORM: Removing sorting from unsortable columns 2012-07-19 15:58:28 +08:00
Dan Marsden 03cafd97b1 MDL-34233 SCORM backup - change to using set_source_sql to preserve order of records in backup. 2012-07-19 19:40:36 +12:00
David Monllao e352a32604 MDL-29563 course Throwing an exception instead of a message 2012-07-19 15:36:37 +08:00
David Monllao f3d81a05ad MDL-29563 course Hide duplication button in activities without backup2 support - Credit to Mark Nielsen 2012-07-19 15:36:37 +08:00
Dan Poltawski 947ba9c802 weekly release 2.2.4+ 2012-07-19 13:46:58 +08:00
Dan Poltawski 9c2d2071ee Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-07-19 13:42:26 +08:00
Dan Marsden caf7fb15d5 MDL-34374 SCORM prevent skipview being set to always when used inside a SCORM course format. 2012-07-19 09:05:38 +12:00
Andrew Davis f7b9d61121 MDL-32665 mod_chat: disabled popup notifications in the chat windows 2012-07-18 19:08:32 +08:00
Andrew Davis 90fa8589dd MDL-13629 grade: added some unit tests to clarify the handling of droplow and improved apply_limit_rules() 2012-07-18 09:38:26 +08:00
Frederic Massart eb51ce159f MDL-33560 Enrol: Enrol password can be unmasked 2012-07-17 16:48:59 +08:00
Sam Hemelryk bff217f18b Merge branch 'MDL-33575_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-17 15:50:00 +12:00
Rossiani Wijaya f014bd253f MDL-33575 choice module: add label to checkbox element when privacy of results is set to publish full results 2012-07-17 10:16:33 +08:00
AMOS bot b43646c86a Automatically generated installer lang files 2012-07-17 00:31:52 +00:00
David Monllaó 6fb835d5a3 MDL-30876 filter_mediaplugin Wrapping the style sheets access with try & catch
Conflicts:

	lib/javascript-static.js
2012-07-17 12:21:11 +12:00
Dan Poltawski 6fc4e1becb Merge branch 'MDL-34187_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-16 15:57:43 +08:00
Aparup Banerjee fefcb951bc MDL-26587 Question : fixed restoring shortanswer where answers are missing due to data error in mbz file. 2012-07-16 15:51:19 +08:00
Dan Poltawski 5d0d6c692c Merge branch 'MDL-23219_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-16 14:33:06 +08:00
Dan Poltawski 38d358fc37 Merge branch 'wip-mdl-30798-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-07-16 14:26:15 +08:00
Rajesh Taneja 0c9b8dc4b3 MDL-30798 Blog: link param for entries about this course link is fixed 2012-07-16 14:12:35 +08:00
Dan Poltawski 49b4842325 Merge branch 'MDL-31622-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-16 11:34:29 +08:00
Dan Poltawski 091c725382 Merge branch 'w29_MDL-34271_m22_mysqlcollation' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-16 11:01:16 +08:00
Dan Poltawski 62b488086b Merge branch 'MDL-34164_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-16 10:05:59 +08:00
Sam Hemelryk f1cb47f9a3 Merge branch 'MDL-33624-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-07-16 13:50:48 +12:00
Dan Poltawski b8722357c7 MDL-33624 lang - remove incosistent use of placeholder 2012-07-16 09:46:11 +08:00
Sam Hemelryk 3c0d5ff61e Merge branch 'MDL-26145_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-16 11:57:25 +12:00
Sam Hemelryk a9fb701ad5 Merge branch 'MDL-28155_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-07-16 11:50:13 +12:00
Sam Hemelryk aa83dea5e8 Merge branch 'MDL-32310-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-07-16 11:00:49 +12:00
Sam Hemelryk 0cc403cbe6 Merge branch 'MDL-33917-2' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-07-16 10:49:57 +12:00
Charles Fulton 3635131be5 MDL-27563 shibboleth: set context on login page 2012-07-16 09:39:47 +12:00
Sam Hemelryk 9f55156eb4 Merge branch 'MDL-33788b-22' of git://github.com/srynot4sale/moodle into MOODLE_22_STABLE 2012-07-16 09:18:36 +12:00
AMOS bot f54ebb38f4 Automatically generated installer lang files 2012-07-15 00:32:07 +00:00
Tim Hunt 03c558af10 MDL-34164 quiz reports: only try to show graphs if GD is installed.
if (empty($CFG->gdversion)) { seems to be the common idiom for this.
I refactored the graph output into the renderer, to avoid having to
duplicate that test three times.

Conflicts:

	mod/quiz/report/overview/report.php
2012-07-14 09:29:35 +01:00
Tim Hunt f2c88f41fe MDL-34257 quiz 'secure' window: does not close automatically.
Conflicts:

	mod/quiz/version.php
2012-07-13 18:05:15 +01:00
Tim Hunt d8f23e09f2 MDL-23219 check permissions: show relevant role-assignments.
Adding this list of role assignments should make it much easier for
admins to work out why, when the permissions shown in the check
permisisons page are now what they expect.

I thought about making the links go more directly to, for example, the
assign roles pages for each context, but because of things like
enrolments in courses that is hard. It is only two clicks to go to the
context, then click the right link in the settings block there.

I also re-orderd some of the code in check.php to try to get all the DB
code before all the output code.
2012-07-13 15:23:18 +01:00
Dan Poltawski dea59b1e67 MDL-33917 mod_resource - fix upgrade of front page resources
This only affected resources linked  as a full url
2012-07-13 15:44:12 +08:00
Frederic Massart b1aa16a30e MDL-31622 Forms: Date selector supports i18n 2012-07-13 08:57:44 +08:00
AMOS bot d59c3ffff7 Automatically generated installer lang files 2012-07-13 00:32:29 +00:00
Petr Škoda 397cbe04e4 MDL-34271 add new cli tool for mysql collation conversions 2012-07-12 14:58:14 +02:00
Petr Škoda 39f6deda84 MDL-34271 use the same collation when adding new tables or columns 2012-07-12 14:57:27 +02:00
Petr Škoda 61c4fa28c1 MDL-34271 cleanup mysql engine hack before adding similar collation hack 2012-07-12 14:42:13 +02:00
Dan Poltawski 9a7c3d5fea weekly release 2.2.4+ 2012-07-12 16:02:22 +08:00
Dan Poltawski 400cf711e0 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-07-12 15:50:35 +08:00
Sam Hemelryk f163de5a8c Merge branch 'MDL-32297-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-12 18:24:36 +12:00
Sam Hemelryk bdbe35e740 Revert "MDL-33575 choice module: add label to checkbox element when privacy of results is set to publish full results"
This reverts commit ccef0a8b0a.
2012-07-12 18:21:36 +12:00
Paul Nicholls 8290c59cdf MDL-32582 - filter/multimedia: MP3 Flow Player doesn't work in Chrome if empty stylesheets are present 2012-07-12 13:40:57 +08:00
Mary Evans 53bf5f7cce MDL-31169 theme_base: adds clearfix to page layouts so body height is not zero 2012-07-12 09:51:39 +08:00
Frederic Massart 7c6c39f153 MDL-32297 Forms: Date Picker JS popup is not constraint to parent form 2012-07-12 09:51:23 +08:00
AMOS bot f16836f3b3 Automatically generated installer lang files 2012-07-12 00:32:30 +00:00
Petr Škoda 4000115abe MDL-34175 one more hardcoded /admin/ in mnet 2012-07-12 09:44:38 +12:00
David Monllao ac430a06f5 MDL-28155 mod_assignment Using the this object instead of a string 2012-07-11 15:14:19 +08:00
AMOS bot a1320c7545 Automatically generated installer lang files 2012-07-10 20:33:22 +02:00
Petr Skoda ae5b8854e5 MDL-33712 add support for unique moodle tags in tinymce 2012-07-10 15:56:22 +08:00
Sun Zhigang 7add6bb507 MDL-28155 mod_assignment - Fix an ugly hack
Show download all link for any assignment types which implement
the download_submissions() method
2012-07-10 13:32:36 +08:00
Dan Poltawski 4fdabcce0e Merge branch 'MDL-34171_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-10 09:25:32 +08:00
Petr Škoda b1eae8a90d MDL-34155 use course visibility default when creator does not have moodle/course:visibility 2012-07-10 12:49:18 +12:00
Petr Škoda 7232e79e8e MDL-34175 a few more renamed admin fixes
Conflicts:

	admin/tool/assignmentupgrade/batchupgrade.php
	admin/tool/assignmentupgrade/index.php
	admin/tool/assignmentupgrade/listnotupgraded.php
	admin/tool/assignmentupgrade/upgradesingle.php
	admin/tool/assignmentupgrade/upgradesingleconfirm.php
2012-07-10 12:44:52 +12:00
Petr Škoda 0f7e3d045d MDL-34175 automatically fix admin JS links 2012-07-10 12:44:06 +12:00
Dan Marsden 5d7f0fcc1e MDL-34198 SCORM remove unecessary get_records call 2012-07-10 08:34:53 +08:00
Sam Hemelryk 714f2d590a Merge branch 'MDL-29470-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-10 12:09:14 +12:00
Sam Hemelryk 730ff61856 Merge branch 'MDL-32297-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-10 12:05:42 +12:00
Charles Fulton 2064567b6e MDL-27800 admin: make front page restore link consistent
Conflicts:

	admin/settings/frontpage.php
2012-07-10 11:33:34 +12:00
Dan Poltawski 1e73d1ddaa Merge branch 'MDL-18301-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-09 14:27:23 +08:00
Dan Poltawski a36631fcee Merge branch 'MDL-32057_22' of git://github.com/aolley/moodle into MOODLE_22_STABLE 2012-07-09 14:14:25 +08:00
Frederic Massart afedb66359 MDL-29470 Backup: fixed unexpected next automated backup date 2012-07-09 13:48:52 +08:00
Dan Poltawski 92e63062d4 Merge branch 'MDL-33030_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-09 13:42:40 +08:00
Dan Poltawski 1c426aca1a Merge branch 'wip-mdl-29969-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-07-09 13:39:27 +08:00
Dan Poltawski 98fb4b4f09 Merge branch 'MDL-34077-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-09 13:37:47 +08:00
Gilles-Philippe Leblanc 751f5b0ae9 MDL-33822 SCORM Interactions report - fix formatting of empty cells. 2012-07-09 17:24:35 +12:00
Dan Poltawski f5fe53613b MDL-17395 auth_email: clarify description 2012-07-09 17:19:45 +12:00
Aaron Barnes c4c0b5a4e9 MDL-33788 completion: SQL optimisation 2012-07-09 15:39:20 +12:00
Ankit Agarwal 409d09a6c2 MDL-27831 calendar: Removing reduntand control icons in delete.php 2012-07-09 11:31:19 +08:00
Dan Poltawski 4dff0a79ed Merge branch 'MDL-33885-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-09 10:32:00 +08:00
Sam Hemelryk ccef0a8b0a MDL-33575 choice module: add label to checkbox element when privacy of results is set to publish full results 2012-07-09 10:56:33 +12:00
Sam Hemelryk df40666775 Merge branch 'MDL-30816_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-09 10:28:37 +12:00
Sam Hemelryk 8e7d4f3317 Merge branch 'MDL-33514-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-07-09 10:24:23 +12:00
AMOS bot 8450522521 Automatically generated installer lang files 2012-07-07 00:31:25 +00:00
Tim Hunt b2fba4af15 MDL-34171 qformat_gift: Fix edge case with special character escaping.
We need to escape \ on export, because it is un-escaped on import.
2012-07-06 10:46:57 +01:00
David Monllao 937963c589 MDL-26145 mod_chat Talk feature not working correctly 2012-07-06 16:13:40 +08:00
Frederic Massart 480d12fe8f MDL-33885 Blog: Added maxlength rule to subject field 2012-07-06 13:17:12 +08:00
Frederic Massart 5c984fd630 MDL-18301 Gradebook: Added feature for components to control grade visibility 2012-07-06 09:54:22 +08:00
Sam Hemelryk 305fbe760a Moodle 2.2.4 release 2012-07-06 11:28:23 +12:00
Sam Hemelryk 79ef66af49 weekly release 2.2.3+ 2012-07-06 10:06:32 +12:00
Sam Hemelryk ce70f9d0f7 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-07-06 09:49:32 +12:00
Rossiani Wijaya 14ed66c339 MDL-30816 Choice module: add format_string() for choice name. 2012-07-05 12:22:26 +08:00
Rossiani Wijaya ba09f6b84e MDL-30816 choice module: fixed accessibility for responses table and make it easier for screenreader to read it 2012-07-05 12:22:14 +08:00
Eloy Lafuente (stronk7) 3021f92c8c Merge branch 'MDL-34145_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-05 03:41:38 +02:00
AMOS bot 0cdc8c2261 Automatically generated installer lang files 2012-07-05 00:31:16 +00:00
Sam Hemelryk db948187be MDL-33770 webservices: Fixed error with core_group_create_groups when no enrolment key provided 2012-07-05 09:22:40 +12:00
Eloy Lafuente (stronk7) 16ce52bb7d MDL-32062 question engine: fix simpletests broken by the change. 2012-07-04 17:16:21 +02:00
Petr Škoda 90048d3cba MDL-33876 skip deleted users in enrol_database sync 2012-07-04 04:17:20 +02:00
Dan Poltawski 8e12fdea29 Merge branch 'wip-MDL-34047-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-07-04 09:51:36 +08:00
Sam Hemelryk e0c7cb6ffa Merge branch 'MDL-32614_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-07-04 13:14:48 +12:00
Eloy Lafuente (stronk7) 7351ed0134 MDL-32614 lti: on restore, clean any typeid to convert the tool to selfcontained.
This is known to be imperfect, awaiting for MDL-34161 to fix the whole thing. Also,
unrelated, there are some basiclti => lti replacements.
2012-07-04 02:15:39 +02:00
Chris Scribner 683f0e73d4 MDL-32614: Removing code which disassociated LTI instances from their tool types upon restore. 2012-07-04 02:15:31 +02:00
Dan Poltawski dc6451ce04 MDL-31692 mod_lti - ensure that various mforms are used properly
* typesettings.php and instructor_edit_tool_type.php are tided
   up properly to ensure proper use for form data
* An incorrect PARAM type is corrected for typename
2012-07-04 10:08:17 +12:00
Sam Hemelryk c0c6e7966e Merge branch 'MDL-32062_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-04 09:53:40 +12:00
Sam Hemelryk dcce217160 Merge branch 'MDL-32851-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-07-04 09:42:30 +12:00
sam marshall 547695f20d MDL-33466: Group restriction should hide activity even with 'show availability' option
This is a modified version of fix by Luke Tucker at NetSpot - thanks.
2012-07-04 09:38:12 +12:00
Jonathan Harker afb6a8aa24 MDL-27125 better manage file handles when downloading multiple files.
Based on Dongsheng Cai's branch: s11_MDL-27125_curl_file_handler_master
2012-07-04 09:33:17 +12:00
Kevin Wiliarty ca6141c264 MDL-33749 follow redirects for URL downloader
Conflicts:

	repository/url/lib.php
2012-07-04 08:37:23 +12:00
Sam Hemelryk 56861454c1 Merge branch 'wip-mdl-32787-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-07-04 08:25:46 +12:00
Eloy Lafuente (stronk7) 54bf19763e Merge branch 'MDL-33426-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-07-03 16:09:22 +02:00
sam marshall 383fc1fbae MDL-33426 Completion: Multilang activity names wrong in alt/title 2012-07-03 13:09:15 +01:00
Marina Glancy c0cea70f0b MDL-34047 repository URL downloader must say that it returns only images 2012-07-03 14:20:47 +08:00
Rajesh Taneja 4598cc934a MDL-32787 user: rule required for custom profile fields applies to all users editing own profile 2012-07-03 13:42:45 +08:00
Dan Poltawski c47951f806 Merge branch 'MDL-30903-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-03 11:51:36 +08:00
Dan Poltawski eb8509c5c3 Merge branch 'MDL-34008_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-03 11:47:36 +08:00
Dan Poltawski 9db56e51d9 Merge branch 'w27_MDL-34036_m22_bulkrole' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-03 11:40:22 +08:00
Dan Poltawski b33cc65f3e Merge branch 'MDL-30883_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-03 11:01:52 +08:00
Sam Hemelryk 06a3ab6c0b Merge branch 'wip-MDL-33957-stable22' of git://github.com/phalacee/moodle into MOODLE_22_STABLE 2012-07-03 14:57:23 +12:00
Dan Poltawski 705b30e99e Merge branch 'w27_MDL-34123_m22_newpasslang' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-03 10:39:26 +08:00
ISHIKAWA Takayuki 81bf2a1a1d MDL-33757 gradebook: Adding support to sort userlist by email address 2012-07-03 09:45:34 +08:00
AMOS bot 92697b53ee Automatically generated installer lang files 2012-07-03 00:31:31 +00:00
Adam Olley b857ff8c19 MDL-32057: Fix cohort enrolment css for ie7 2012-07-03 09:25:10 +09:30
Sam Hemelryk b16832db0d Merge branch 'MOODLE_22_STABLE-MDL-33770' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-07-03 11:48:16 +12:00
Frederic Massart 842a71a6ac MDL-33814 Output renderers: table cell objects are only created when needed 2012-07-03 11:36:47 +12:00
Frederic Massart f2fdb7f73a MDL-33796 Glossary: removed unused missing string 2012-07-03 01:07:19 +02:00
Dan Poltawski 662ddae6c2 MDL-9214 - improve comment for custom login instructions 2012-07-03 10:47:31 +12:00
Dan Poltawski 1bcd3da0de MDL-32286 - fix ambigious english string 2012-07-03 10:43:02 +12:00
Matthew G. Switlik f90d6ddb6d MDL-28151 resource: prevent cropping of large images
Conflicts:

	theme/base/style/core.css
2012-07-03 10:15:44 +12:00
Eloy Lafuente (stronk7) dbaad889e8 Merge branch 'MDL-23813_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-02 23:53:29 +02:00
Aparup Banerjee 9d8d2ee619 MDL-23254 Authentication : used httpswwwroot as root url during authentication procedure where $PAGE->https_required() is specified. 2012-07-03 09:42:47 +12:00
Dan Poltawski 4a9727aa23 MDL-34081 dml: mssql driver was using case insensitve sql 2012-07-02 21:08:41 +02:00
Tim Hunt d8b0e1bc26 MDL-23813 glossary filter: add missing YUI dependency
Fix found by Huy Hoang. I am just making a commit.
2012-07-02 17:49:08 +01:00
Eloy Lafuente (stronk7) 50dfe52884 MDL-34121 bump versions to efectively get the upgrade performed. 2012-07-02 18:22:58 +02:00
Eloy Lafuente (stronk7) e2710cb374 Merge branch 'w27_MDL-34121_m22_killbackupmess' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-02 18:21:04 +02:00
Tim Hunt 78040342e0 MDL-34145 postgres driver: fix get_tables perf on <= 9.0
The query of the information_schema view seems to be painfully slow on
older versions of postgres (2000ms instead of 20ms). Therefore, it is
worth detecting that case, and using a more postgres specific feedback.
This is particularly important for 2.3+ unit tests.

Thanks to Petr Skoda for his help with this.
2012-07-02 16:21:17 +01:00
Dan Poltawski 041a4a7d94 Merge branch 'MDL-33916-MOODLE_22_STABLE-1' of git://git.luns.net.uk/moodle into MOODLE_22_STABLE 2012-07-02 17:37:16 +08:00
Dan Poltawski 8c4489c53b MDL-31802 - navigation: add a comment about session reduction 2012-07-02 17:30:12 +08:00
Dan Poltawski 66f9505a53 Merge branch 'MDL-31802_22' of git://github.com/aolley/moodle into MOODLE_22_STABLE 2012-07-02 17:25:07 +08:00
Petr Škoda 1d5490dfed MDL-34120 do not try to create new passwords for incorrectly deleted users
There is still some code that ignores delete_user() and instead hacks the user table directly, skip the borked user records for now when sending new passwords.
2012-07-02 16:48:45 +08:00
Dan Poltawski 8579d40d59 Merge branch 'w27_MDL-34045_m22_idnumber' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-07-02 16:34:28 +08:00
Dan Poltawski c185e558a6 Merge branch 'MDL-34025_m22' of https://github.com/markn86/moodle into MOODLE_22_STABLE 2012-07-02 16:28:20 +08:00
Rossiani Wijaya 06f52d36cc MDL-33030 Lesson module: fixed progress bar 2012-07-02 16:21:17 +08:00
Dan Poltawski ca6495bb72 Merge branch 'MDL-33924_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-02 16:19:28 +08:00
Dan Poltawski cd7265af3a Merge branch 'm22_MDL-33914' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-07-02 16:14:52 +08:00
Dan Poltawski 4769b04283 Merge branch 'MDL-33780_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-07-02 16:07:42 +08:00
Dan Poltawski 1693774015 Merge branch 'm22_MDL-33053_AICC_flattened_TOC' of git://github.com/scara/moodle into MOODLE_22_STABLE 2012-07-02 15:50:32 +08:00
Dan Poltawski de856ec6a8 Merge branch 'MDL-32605-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-07-02 15:46:07 +08:00
Dan Poltawski c25e1814ce Merge branch 'MDL-30008-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-07-02 15:43:21 +08:00
Andrew Davis 95718caae7 MDL-25476 messages: switched some notification emails to come from the support contact instead of admin 2012-07-02 15:41:38 +08:00
Dan Poltawski 42ed5416a5 Merge branch 'MDL-9073-22' of github.com:FMCorz/moodle into MOODLE_22_STABLE 2012-07-02 15:34:27 +08:00
Dan Poltawski bf9417002d Merge branch 'm22_MDL-31203_advanced_forum_search_always_reverts_date_from_and_to' of git://github.com/kanikagoyal/moodle into MOODLE_22_STABLE 2012-07-02 15:24:29 +08:00
Rossiani Wijaya b8251ddc44 fixed the ->spacer <br> param 2012-07-02 15:20:59 +08:00
Mark Nielsen 92e6515548 fixed undefined variable 2012-07-02 15:20:54 +08:00
Dan Poltawski 52f95b5431 Merge branch 'MDL-31987_assignment_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-07-02 15:12:57 +08:00
Rossiani Wijaya c6483eb217 MDL-31987 Assignment module: fixed upgrade version 2012-07-02 14:55:03 +08:00
Dan Poltawski 19219f8c10 MDL-31987 Assignment module: fix sql for postgres. 2012-07-02 14:54:03 +08:00
Rossiani Wijaya b9fdddbabd MDL-31987 Assignment module: Assignment count submissions correctly.
For advanced upload assignment, store file count of each submission
into assignment_submissions.numfiles

When counting submissions, if the assignment is open and tracking
drafts, only submissions which has send for marking are counted.
Otherwise, submissions which has numfiles > 0 are counted.

Also change a hardcoded 'submitted' to ASSIGNMENT_STATUS_SUBMITTED.

This patch was originally written by: Sunner Sun <sunner@gmail.com>.

I made some modifation to fixed count_real_submissions() query (ref: MDL-32207) in /mod/assignment/type/upload/assignment.class.php file
2012-07-02 14:54:03 +08:00
Rajesh Taneja af70031477 MDL-29969 Administration: Default value for numsections is set to 1 for site frontpage 2012-07-02 14:34:55 +08:00
Dan Poltawski de9de3cc1b Merge branch 'MDL-27842-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-07-02 11:27:33 +08:00
Sam Hemelryk 461499b836 Merge branch 'MDL-33932_22' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-07-02 14:31:43 +12:00
Sam Hemelryk 803122e110 Merge branch 'MDL-33627_22' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-07-02 14:05:57 +12:00
Eloy Lafuente (stronk7) 116714e8dc weekly release 2.2.3+ 2012-07-02 00:52:37 +02:00
Eloy Lafuente (stronk7) 880b243c8d Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-07-02 00:41:10 +02:00
Sam Hemelryk 1d2b991046 Merge branch 'MDL-34044-22' of git://github.com/srynot4sale/moodle into MOODLE_22_STABLE 2012-07-02 08:22:26 +12:00
Eloy Lafuente (stronk7) 260bbdbc09 Merge branch 'MDL-32249c-22' of github.com:srynot4sale/moodle into MOODLE_22_STABLE 2012-07-01 02:15:19 +02:00
Sun Zhigang 713e6922e0 MDL-31201 wiki: fix a hardcoded string 2012-06-30 22:01:24 +02:00
Petr Škoda 3721bbf279 MDL-34123 use user's lang when sending new emails 2012-06-30 20:47:04 +02:00
Petr Škoda f2b9ab28e6 MDL-34036 fix course role user selector 2012-06-30 15:41:08 +02:00
Petr Škoda 5464847212 MDL-34121 drop unused backup tables that were supposed to be dropped long ago
The backup/restore leftovers that referenced these will be dropped in 2.4
2012-06-30 14:04:31 +02:00
Petr Škoda c45e903821 MDL-34045 fix invalid idnumber field type in cohort form 2012-06-30 07:51:45 +02:00
Ankit Agarwal 06314d7faf MDL-27842 calendar: remove usage of deprecated function calendar_print_event 2012-06-29 14:56:56 +08:00
Frederic Massart b8fba415a5 MDL-32297 Forms: Date Picker JS popup is not constraint to parent form 2012-06-29 14:21:20 +08:00
Frederic Massart f544bb6bf6 MDL-34077 Repositories: Flickr and Picasa can have custom names
Conflicts:

	repository/picasa/lib.php
2012-06-28 12:13:57 +08:00
Adam Olley 66424a611f MDL-31802: Remove section summaries from navigation_cache 2012-06-28 11:08:08 +09:30
AMOS bot 65c02d62ae Automatically generated installer lang files 2012-06-28 00:31:30 +00:00
Charles Fulton a00d309b33 MDL-32851 resource: skip resources with invalid files 2012-06-27 06:21:29 -07:00
Tim Hunt 5f980afc0e MDL-33924 quiz: incorrect foreign key definition.
Thanks to Jean-Michel Vedrine for spotting this.≈
2012-06-27 08:03:32 +01:00
Mark Nelson 0601dd6961 MDL-34025 - quiz secure window: fix popup closing 2012-06-27 14:32:04 +08:00
Ankit Agarwal 404cc924aa MDL-32605 calendar: Fixing the missing parameter for get_string call 2012-06-27 13:31:54 +08:00
Aaron Barnes c657426438 MDL-34044 completion: Fix regression caused by MDL-26626 2012-06-27 12:01:36 +12:00
Tim Hunt f54292267b MDL-32062 question engine: fix re-grading attempts from 2.0
The code to upgrade attempts from before Moodle 2.0 to 2.1 created
attempt data that was not exactly the same as a new attempt created in
2.1+. This did not matter very much - revew and the quiz reports all
worked OK - but it broke on re-grade.

These changes detect the problem data in the re-grade code, an apply a
work-around so that the re-grade gives the correct result.
2012-06-26 09:57:41 +01:00
Tim Hunt dd613b60ec MDL-34008 formslib: repeat_elements replace {no} for submits & buttons 2012-06-26 09:51:36 +01:00
Tim Hunt f4bd9d38a6 MDL-33780 question import: strip UTF8 BOM
Previously, if there was a byte-order mark at the start of the file, the
import would just break, which was silly. Much better to just strip it
off.
2012-06-26 09:51:23 +01:00
Tim Hunt 62cfefdbee MDL-30883 question flags: aria attributes for accessibility
Also, update code to use html_writer, and fix pointer style when not
editable.
2012-06-26 09:50:43 +01:00
Aaron Barnes 91190892f1 MDL-32249 completion: Make grade criteria more consistent
Also, round course grades and remove hardcoded string.

Note: This patch also removes the ability to update the course grade
from the completion interface
2012-06-26 13:58:19 +12:00
AMOS bot f0ad78b829 Automatically generated installer lang files 2012-06-26 00:31:30 +00:00
AMOS bot adb1616724 Merge branch 'MOODLE_22_STABLE' into install_22_STABLE 2012-06-26 00:31:30 +00:00
Andreas Grabs 90e0da6f75 MDL-33932_22 - added array_unique() 2012-06-25 21:51:59 +02:00
Andreas Grabs c6fbd0c8bf MDL-33627 - feedback block now show all feedbacks 2012-06-25 21:51:56 +02:00
Dan Poltawski 68b0cae5bc Merge branch 'MDL-33984_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-06-25 21:57:08 +08:00
Eloy Lafuente (stronk7) 72988ea0f4 MDL-33984 mysql: take rid of old unicode & mysql 4.1 message on error. 2012-06-25 15:49:27 +02:00
Dan Poltawski e9a8da9d76 Merge branch 'MDL-33984_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-06-25 18:47:10 +08:00
Eloy Lafuente (stronk7) b030363b02 MDL-33984 mysql - raise min version to 5.1.33.
Because of http://bugs.mysql.com/bug.php?id=42758 and other benefits.
2012-06-25 12:33:22 +02:00
AMOS bot 9f0e9e6296 Automatically generated installer lang files 2012-06-25 00:31:44 +00:00
Eloy Lafuente (stronk7) 1257e3b729 Merge branch 'w25_MDL-33733_m22_unzipstorage' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-06-25 01:21:52 +02:00
Eloy Lafuente (stronk7) 59f80a1b88 weekly release 2.2.3+ 2012-06-24 18:34:58 +02:00
Eloy Lafuente (stronk7) 84acd5d794 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-06-24 18:28:55 +02:00
Dan Marsden fc79f4ca61 MDL-33914 SCORM show scrollbar on TOC if too long. 2012-06-22 22:22:32 +12:00
Jason Fowler 61c520c03c MDL-33957 - Installation - Fixing field lengths so they are long enough for data entry, and don't distort page rendering 2012-06-22 10:48:08 +08:00
AMOS bot e0c06eddc3 Automatically generated installer lang files 2012-06-22 00:31:26 +00:00
Sam Hemelryk b917d504a3 Merge branch 'MDL-27675_22' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-06-21 11:29:32 +12:00
Sam Hemelryk 217926aaa1 Merge branch 'MDL-33808-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-06-21 10:06:32 +12:00
Andrew Robert Nicols 83d3858b16 MDL-33916 Ensure that capabilities are checked for cached user enrolments 2012-06-20 17:02:00 +01:00
Aparup Banerjee f4eaf5c7f0 Merge branch 'wip-MDL-33811-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-06-20 17:18:30 +08:00
Frederic Massart 6991ad41a3 MDL-9073 Glossary: uncategorised entries are printable 2012-06-20 12:26:59 +08:00
Jason Fowler c9af9c7570 MDL-32290 - Repositories - Fixing missing slash from the URL path 2012-06-20 10:42:06 +08:00
AMOS bot df4870fb31 Automatically generated installer lang files 2012-06-20 00:31:20 +00:00
Dan Poltawski c80ffce497 MDL-3971 - mod_forum: contain () in span 2012-06-20 11:40:52 +12:00
Jason Fowler 0646f76fb6 MDL-32990 - Repositories - Updating Box.net API calls to use HTTPS 2012-06-19 15:07:08 +08:00
Dan Poltawski 63472c089e MDL-33808 - format title on the repository instance screen 2012-06-19 12:10:44 +08:00
Dan Poltawski 2249f52fe2 MDL-33808 - incorrect cleaning of repository names 2012-06-19 11:27:26 +08:00
Eloy Lafuente (stronk7) 984109868d Merge branch 'MDL-33523_22' of git://github.com/dmiletic/moodle into MOODLE_22_STABLE 2012-06-19 03:10:12 +02:00
AMOS bot ecbe7b1154 Automatically generated installer lang files 2012-06-19 00:31:19 +00:00
Sam Hemelryk 13d01b3338 MDL-33811 Fixed left over debugging code preventing proper setting of YUI gallery version 2012-06-19 11:26:50 +12:00
Dan Poltawski 5e1fc324de Merge branch 'MDL-26892_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-06-18 21:40:59 +08:00
Dan Poltawski d9a92e8f41 Merge branch 'wip-MDL-33603-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-06-18 15:07:42 +08:00
Dan Poltawski 2b4dff5697 Merge branch 'wip-mdl-33607-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-06-18 14:34:39 +08:00
Adrian Greeve d9a3cd37fe MDL-33603 - data - added another sql query to allow links to records to work. 2012-06-18 10:25:47 +08:00
Petr Skoda 1d823156f7 MDL-33733 fix broken zip_packer->extract_to_storage() when extracting from stored_file 2012-06-17 23:00:47 +02:00
AMOS bot 124bda4f28 Automatically generated installer lang files 2012-06-16 00:31:32 +00:00
Eloy Lafuente (stronk7) b7f81b199c weekly release 2.2.3+ 2012-06-15 20:28:01 +02:00
Tim Hunt 6d94ae6827 MDL-26892 questions: images lost during upgrade.
This affects questions shared in the system or course category areas of
the question bank.

Thanks to Chris Edwards for working out what was going wrong.
2012-06-15 17:01:18 +01:00
Dan Poltawski 034f40257e Merge branch 'MDL-33756_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-06-15 18:38:56 +08:00
Rajesh Taneja f68fd67f0c MDl-33607 wiki-2: check subwiki before fetching it from db 2012-06-15 16:58:14 +08:00
Jerome Mouneyrac ebf57c7e94 MDL-33770 Web service: create_groups should not require enrolmentkey
Conflicts:

	group/externallib.php
2012-06-15 15:18:29 +08:00
Dan Poltawski b6c9003756 Merge branch 'MDL-32279_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-06-15 11:03:19 +08:00
Eloy Lafuente (stronk7) 0d1bd690cb MDL-33756 backup: converters only available in general course backups. 2012-06-15 02:29:11 +02:00
Eloy Lafuente (stronk7) aa0bf8596a MDL-32279 glossary filter: nasty hack to get filter working with cached texts.
For Moodle 2.3 the filters API has been extended to offer a
setup() method, able to define all the page/init requirements
for each filter.

For this (2.2) version, where the setup() method is
not available, we are abusing badly the hash() method because
it's the unique point out from the caching mechanism where we
can inject such requirements. Alternative solutions like
backporting the API or add the requirements to all the pages
have been considered worse than this abuse.

Note, finally that this is not backportable to 2.1 because the
glossary filter there is a legacy one, so it does not have the
hash() facility either. Unique workaround there is to disable caching.
2012-06-15 00:39:08 +02:00
Darko Miletic 65345f200c MDL-33523: fix 2012-06-14 18:05:32 -03:00
Dan Poltawski be87ace1b6 Merge branch 'MDL-33035-m22' of git://github.com/sunner/moodle into MOODLE_22_STABLE 2012-06-14 12:29:21 +08:00
Frederic Massart f17cc9cfe8 MDL-30008 Filepicker: correctly handles allowed file types 2012-06-14 10:01:57 +08:00
Dan Poltawski c2a3bd52d2 Merge branch 'MDL-33581_MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-06-13 17:45:36 +08:00
Eloy Lafuente (stronk7) cd9f44d8df MDL-33682 backup: keep old behavior, aka, use section number on empty section name. 2012-06-13 00:56:57 +02:00
Eloy Lafuente (stronk7) 0f63503db0 Merge branch 'MDL-33682_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-06-13 00:56:22 +02:00
Eloy Lafuente (stronk7) 897329c247 Merge branch 'MDL-33681_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-06-13 00:06:41 +02:00
Tim Hunt de50c77537 MDL-33682 backup: cope with sections called '0'
It was not previously possible to have a section called 0 because of
bugs in the standard course formats, but we hit this with the OU course
format. You got an exception because backup settings tested to see if
their lable was empty, which means a section name of '0' was fatal.
Should work now.
2012-06-12 17:51:40 +01:00
Tim Hunt 8ad93cebfa MDL-33681 course: cannot have a section called '0'.
No reason to prevent this. It is just a matter of doing a proper test,
rather than the sloppy PHP !empty().
2012-06-12 17:51:30 +01:00
Aparup Banerjee 89c3d84eda Merge branch 'm22_MDL-33515' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-06-12 11:27:48 +08:00
Eloy Lafuente (stronk7) 63e5ddeb20 weekly release 2.2.3+ 2012-06-12 02:59:54 +02:00
Eloy Lafuente (stronk7) acb0b565b1 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-06-12 02:55:22 +02:00
Aparup Banerjee c93ff53c82 Merge branch 'MDL-33548_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-06-11 13:55:54 +08:00
Eloy Lafuente (stronk7) 75bb216d66 MDL-33455 restore: process grade_grades only if user matches.
Note this has been applied both to individual activities grade_grades
and to general ones.
2012-06-11 11:14:57 +08:00
Dan Poltawski e16922ede9 MDL-33514 - rss: also exclude suspended users feeds
Thanks Petr!
2012-06-11 10:27:25 +08:00
AMOS bot cdfa338430 Automatically generated installer lang files 2012-06-09 00:31:21 +00:00
Dan Marsden a911b4cb3e MDL-33515 SCORM - attempts grading setting is confusing - last attempt is really last completed attempt. 2012-06-08 20:35:52 +12:00
Jerome Mouneyrac 1850ab013c MDL-33581 missing parameter defaults for some external functions
Conflicts:

	course/externallib.php
2012-06-08 12:00:20 +08:00
Eloy Lafuente (stronk7) 887e2c8535 Merge branch 'w23_MDL-33583_m22_keepall' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-06-08 01:56:31 +02:00
Petr Skoda b98956fdd2 MDL-30725 save automated external only backups directly to ext storage, do not pollute file pool
This solution is based on code by Tony Levi, thanks!
2012-06-08 01:46:19 +02:00
Sam Hemelryk 29515af1d8 Merge branch 'MDL-33080_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-06-08 10:23:04 +12:00
Sam Hemelryk 52b6c9bc01 Merge branch 'MDL-32325-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-06-08 10:20:37 +12:00
Eloy Lafuente (stronk7) 746a8b2838 Merge branch 'MDL-32985_integration_22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-06-08 00:05:01 +02:00
Dan Poltawski 1e93a653a4 Merge branch 'MDL-33532_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-06-07 22:23:48 +08:00
Tim Hunt a41848a445 MDL-33532 quiz editing: let uses enter locale floats.
So, for example, Croatian users can set the maximum grade to 65,5.

Conflicts:

	mod/quiz/edit.php
2012-06-07 12:58:39 +01:00
Petr Skoda 31ffef36ac MDL-33583 really keep all automated backup files when told to do so 2012-06-07 11:13:12 +02:00
Andreas Grabs bac1415a0b MDL-27675 - Feedback module abuses data_submitted 2012-06-06 23:16:54 +02:00
Tim Hunt e78e39cdbb MDL-33548 quiz manual grading: check the grade is in range.
To do this nicely, I refactored some code out of the quiz manual grading
report.
2012-06-06 20:23:05 +01:00
Eric Merrill 4e6fbf663c MDL-32985 cron: Fixing related problem with setting of lastnotifyfailure
Because of a flaw in the logic, lastnotifyfailure was not set unless
there was a failure. This means that after 1 hour of no failures, the
function would execute every cron cycle, which has a pretty high cost
on large sites.
2012-06-06 12:06:22 -04:00
Dan Poltawski bc8bf2376c MDL-33514 - rss: only retrieve RSS feeds for valid users 2012-06-06 23:37:45 +08:00
Frederic Massart d1e6d47f1a MDL-32325 Glossary: Entrylist print version is XHTML compliant 2012-06-06 13:17:26 +08:00
Sam Hemelryk 50eb136630 Merge branch 'MDL-33090_22-missing-xmldb-strings' of git://github.com/rlorenzo/moodle into MOODLE_22_STABLE 2012-06-06 15:37:28 +12:00
Dan Poltawski 99778c82c7 Merge branch 'MDL-33119_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-06-06 10:32:07 +08:00
AMOS bot af7278a4ff Automatically generated installer lang files 2012-06-06 00:31:29 +00:00
Sam Hemelryk 57dd3c6909 Merge branch 'MDL-30837-22' of https://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-06-06 10:59:43 +12:00
Sam Hemelryk 8d7887cdb5 MDL-31520 user-ws: Optimised if statement for email access by moving admin check to the start 2012-06-06 10:37:36 +12:00
Sam Hemelryk 65d7459b6d Merge branch 'MDL-31520-MOODLE_22_STABLE' of git://github.com/fabiomsouto/moodle into MOODLE_22_STABLE 2012-06-06 10:37:36 +12:00
Sam Hemelryk 6a27fc8b34 Merge branch 'MDL-33353_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-06-06 10:25:06 +12:00
Sam Hemelryk 9331c1ec8c Merge branch 'MDL-31823_22' of git://github.com/dmonllao/moodle into MOODLE_22_STABLE 2012-06-06 10:13:39 +12:00
Sam Hemelryk 46d433f701 Merge branch 'MDL-33441-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-06-06 10:09:54 +12:00
Sam Hemelryk 928a51ad3d Merge branch 'MDL-33487-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-06-06 10:06:05 +12:00
Sam Hemelryk 882ef2f226 MDL-26277: Fixed whitespace post integration 2012-06-06 09:13:58 +12:00
Sam Hemelryk 042ae10e1d Merge branch 'MDL-26277-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-06-06 09:07:17 +12:00
Dan Poltawski 20253ec57b MDL-33441 course/lib.php prevent fatal error when no visible categories 2012-06-05 16:41:30 +08:00
Aparup Banerjee 092e389f4f Merge branch 'wip-mdl-33455-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-06-05 15:15:44 +08:00
Koen Roggemans bc861f559d MDL-29103 web service strings improvement 2012-06-05 12:44:02 +08:00
Dan Poltawski c4b48436f9 Merge branch 'MDL-33401-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-06-05 12:34:58 +08:00
Tim Barker db181b6a14 MDL-33476 repositories: Added instructions to assist with setting up Dropbox keys 2012-06-05 12:16:18 +08:00
Dan Poltawski 5fd1ca61b8 Merge branch 'MDL-30880_feedback_property_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-06-05 11:58:40 +08:00
Rajesh Taneja 33db7d7276 MDL-33455 gradebook: Grade will not be inserted for unknown user 2012-06-05 11:21:29 +08:00
Dan Poltawski dd428d8c06 MDL-31460 mod_forum: fix trailing whitespace 2012-06-05 09:35:34 +08:00
Dan Poltawski e2cc9b272e Merge branch 'MDL-31460_unsubscribe_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-06-05 09:35:31 +08:00
Frederic Massart 3824133b8e MDL-30837 Accessibility: removed navigation icons default alt text 2012-06-05 09:16:38 +08:00
Ankit Agarwal c8471b85e1 MDL-33401 blocks: Allow managers to have block:edit capability by default 2012-06-05 08:50:36 +08:00
Eloy Lafuente (stronk7) 55a83bd034 Merge branch 'MDL-32649_ratings_sort_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-06-05 02:23:30 +02:00
Eloy Lafuente (stronk7) 5d0c60f882 MDL-32985 cron: prevent notices on "new" sites. 2012-06-05 02:15:49 +02:00
Eloy Lafuente (stronk7) 8b01dd9d0f Merge branch 'MDL-32985_m22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-06-05 02:02:40 +02:00
Eloy Lafuente (stronk7) 2b75dbe9b1 MDL-33080 IMSCC: look for imsmanifest.xml @ root dir 2012-06-05 01:05:52 +02:00
Eloy Lafuente (stronk7) b71e34d890 MDL-33353 make fix_utf8() to work better under some systems.
This is a partial backport of MDL-32586 and MDL-33007 in order
to get some systems handling utf-8 strings better:

- debian/ubuntu. Avoid some glibc iconv() implementations to
  throw one PHP notice each time the //IGNORE option is used.
- redhat. Avoid some implementations to return false
  each time the //IGNORE option is used.

Note this does not include any backport of the admin notification
not the configmin stuff.
2012-06-04 12:40:37 +02:00
David Monllaó e313d1695b MDL-31823 - Remote hosts users created via mnet enrolments marked as confirmed 2012-06-04 10:39:08 +02:00
Dan Poltawski 085adaf545 Merge branch 'MDL-29173_calc_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-06-04 16:22:07 +08:00
AMOS bot 129abbb41b Automatically generated installer lang files 2012-06-02 00:31:36 +00:00
Dan Poltawski 4819f2eadd MDL-33487 - mod_forum: incorrect param ordering
Thanks to Garret Gengler for spotting it.
2012-06-01 23:35:49 +08:00
Tim Hunt 3c96772120 MDL-33119 quiz complete report: fix placeholders in attempt string. 2012-06-01 08:57:05 -06:00
Eloy Lafuente (stronk7) fbbb4cc708 weekly release 2.2.3+ 2012-06-01 09:48:50 +02:00
Eloy Lafuente (stronk7) f674c132b3 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-06-01 09:43:19 +02:00
Andrew Davis d09e2a36f2 MDL-30880 grade: added a check for the feedback property existing before it is used 2012-06-01 10:44:14 +07:00
Dan Poltawski 5411ca9e40 Merge branch 'MDL-33434_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-05-31 16:59:37 +08:00
Andrew Robert Nicols ed2b8be31a MDL-33040 Reports : Validate dates correctly on log page 2012-05-31 15:20:36 +08:00
Aparup Banerjee c7fc98256a Merge branch 'MDL-33140_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-05-31 14:15:44 +08:00
Frederic Massart d1ced7c144 MDL-33398 Cron: fix wrong variable type in completion criterias 2012-05-31 12:50:48 +08:00
Dan Poltawski 4625a1b540 Merge branch 'MDL-33397-22' of https://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-05-31 10:36:05 +08:00
Eloy Lafuente (stronk7) 21bb3f9466 MDL-33434 mssql: Improve handling of returned ids on insert.
This commit moves from the batch SCOPE_IDENTITY() way to return
the inserted ids to the OUTPUT alternative (supported and
recommended since 2005). Also the handling of possible return
values is improved, with all the alternatives leading to expected results.
2012-05-31 01:44:45 +02:00
Eloy Lafuente (stronk7) 514da614c3 MDL-33434 dml: define expected results when unique constraint is violated on insert. 2012-05-31 01:44:23 +02:00
Tim Hunt 78e010e9df MDL-33140 quiz browser security: block copy/paste more 2012-05-30 14:49:40 -06:00
Sam Hemelryk 91d9449144 Revert "Merge branch 'MDL-27675_22_wip' of git://github.com/grabs/moodle into MOODLE_22_STABLE"
This reverts commit e5d6cd5461, reversing
changes made to dcd5d0840b.
2012-05-30 16:36:01 +12:00
Dan Poltawski 787132eabc Merge branch 'MDL-33398b-22' of git://github.com/srynot4sale/moodle into MOODLE_22_STABLE 2012-05-30 11:36:01 +08:00
Aaron Barnes 8e6ec68cdf MDL-33398 completion: Fix coding error (should be arrays not objects) 2012-05-30 13:38:39 +12:00
AMOS bot 562129c91d Automatically generated installer lang files 2012-05-30 00:31:22 +00:00
Andrew Davis db5e62d250 MDL-29173 grade: altered the definiton of round() and added some more unit tests 2012-05-29 16:31:36 +07:00
Dan Poltawski c5fc1191e0 Merge branch 'MDL-30905-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-05-29 16:20:36 +08:00
Dan Poltawski ef6ad52352 Merge branch 'wip-mdl-33102-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-05-29 16:11:08 +08:00
Frederic Massart 03ba959758 MDL-33397 Filepicker: cancel button always present in private files 2012-05-29 15:18:05 +08:00
Dan Poltawski 1605e8d8d2 Merge branch 'MDL-30888-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-05-29 15:12:43 +08:00
Dan Poltawski 865f537fea Merge branch 'MDL-33212-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-05-29 15:10:55 +08:00
Andrew Davis cd2b730489 MDL-31460 mod_forum: added some controls to mod/forum/unsubscribeall.php to prevent the removal of subscriptions the user shouldnt be able to delete 2012-05-29 08:22:38 +07:00
sam marshall bcaed19cc9 MDL-33212 Course page: Eye icon should override other conditions 2012-05-28 16:26:36 +01:00
Dan Poltawski 92f03977db Revert "MDL-33212 Course page: Eye icon should override other conditions"
This reverts commit e57802961b.
2012-05-28 16:58:09 +08:00
Dan Poltawski 7e3707635c Merge branch 'MDL-33212-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-05-28 16:03:11 +08:00
Dan Poltawski d855d780a3 Merge branch 'MDL-31393_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-05-28 15:24:08 +08:00
Dan Poltawski 0e55d4af36 Merge branch 'wip-MDL-32199-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-05-28 15:18:57 +08:00
Charles Fulton c9ab8472a6 MDL-33194 forum: correct number of parameters for get_record() 2012-05-28 14:59:19 +08:00
Dan Poltawski f4cfa2cbd6 Merge branch 'm22_MDL-27368' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-05-28 14:32:53 +08:00
Adrian Greeve 35124c3c4f MDL-32199 - forum - Ensure that forum RSS feeds don't leak posts and discussions.
Alteration to the code to hide the body of the post / discussion

rebase conflict resolution
2012-05-28 13:08:12 +08:00
Dan Poltawski 857e992ff7 Revert "MDL-29173 grade: altered the definiton of round() in /lib/evalmath/evalmath.class.php"
Breaking unit tests.

This reverts commit 4be0947bbe.
2012-05-28 12:38:29 +08:00
Dan Poltawski a66bb4213e Merge branch 'MDL-29173_calc_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-05-28 12:16:26 +08:00
Sam Hemelryk 5a3f6eb468 Merge branch 'MDL-33364_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-05-28 13:51:09 +12:00
Sam Hemelryk 5bd7b691b6 MDL-27675 mod_feedback: Tidy up of phpdocs and scope within feedback mod 2012-05-28 13:39:13 +12:00
Eloy Lafuente (stronk7) ce46ec1eaf MDL-33364 automated backup: return and log each course result correctly 2012-05-28 02:50:02 +02:00
Sam Hemelryk e5d6cd5461 Merge branch 'MDL-27675_22_wip' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-05-28 11:44:18 +12:00
Sam Hemelryk dcd5d0840b Merge branch 'MDL-33191_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-05-28 11:21:58 +12:00
Sam Hemelryk d48f4d2f75 Merge branch 'MDL-33325-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-05-28 10:52:12 +12:00
Andreas Grabs 64258fa070 MDL-27675 - Feedback module abuses data_submitted 2012-05-28 00:37:19 +02:00
Dan Marsden 35f858e855 MDL-27368 Clean up invalid course completion records
keep oldest timestamps from all records
2012-05-28 09:03:44 +12:00
Eloy Lafuente (stronk7) 5bb8e807eb weekly release 2.2.3+ 2012-05-25 12:50:52 +02:00
Eloy Lafuente (stronk7) 5606d3aa5c Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-05-25 12:44:47 +02:00
Dan Poltawski adb9f1aa1a Merge branch 'MDL-29924-22' of git://github.com/FMCorz/moodle into MOODLE_22_STABLE 2012-05-25 11:14:38 +08:00
Dan Poltawski 2c1dda9302 MDL-28557 - calendar: fix trivial whitespace issue 2012-05-25 11:09:10 +08:00
Dan Poltawski 4902915edb Merge branch 'MDL-28557-22' of git://github.com/bostelm/moodle into MOODLE_22_STABLE 2012-05-25 11:09:07 +08:00
Jerome Mouneyrac 8d83e44bc4 MDL-33028 display debuginfo when server die at developer mode 2012-05-25 10:23:02 +08:00
AMOS bot 62c4db2a24 Automatically generated installer lang files 2012-05-25 00:31:24 +00:00
Ankit Agarwal 792d1ea2dd MDL-33325 folder: 'set as main file' option removed, from filepicker when editing a file in a folder resource 2012-05-24 16:12:39 +08:00
Andrew Robert Nicols a8cf5e9574 MDL-33186 Ensure that the comment textarea exists before toggling it 2012-05-24 15:53:57 +08:00
Aparup Banerjee c61f5f8730 MDL-33318 lib : code style fix 2012-05-24 15:42:32 +08:00
Aparup Banerjee 4fb3cc5894 Merge branch 'm22_MDL-33318' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-05-24 15:42:22 +08:00
Frederic Massart 04c5f73665 MDL-30905 Accessibility: recent activity list is XHTML compliant 2012-05-24 13:50:45 +08:00
Frederic Massart 0d1e39b466 MDL-30903 Accessibility: user profile page uses table headers 2012-05-24 13:34:35 +08:00
Dan Marsden f67ac6697c MDL-33318 use $CFG->admin in path correctly - thanks to Clarence Prudhoe for report/fix 2012-05-24 14:09:36 +12:00
Frederic Massart bfb54eeea3 MDL-30888 Accessibility: small calendars summary does not display 'Data table' 2012-05-24 09:24:44 +08:00
AMOS bot bb5bda8aa1 Automatically generated installer lang files 2012-05-24 00:31:35 +00:00
Sam Hemelryk 3d1e457e3e Merge branch 'MDL-32203c-22' of git://github.com/srynot4sale/moodle into MOODLE_22_STABLE 2012-05-24 11:48:40 +12:00
Sam Hemelryk 05ceae9bb2 Merge branch 'MDL-26562-22' of git://github.com/vadimonus/moodle into MOODLE_22_STABLE 2012-05-24 10:56:16 +12:00
sam marshall e57802961b MDL-33212 Course page: Eye icon should override other conditions
Conflicts:

	lib/conditionlib.php
2012-05-23 13:50:42 +01:00
Dan Poltawski 605b539184 Merge branch 'wip-mdl-32155-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-05-23 13:28:08 +08:00
Rajesh Taneja c58c05ad4f MDL-32155 blocks: User can't access file, if block is hidden or doesn't have block:view capability 2012-05-23 12:57:31 +08:00
Andrew Davis fcb203c11b MDL-32649 rating: fixed the sorting in /rating/index.php 2012-05-23 08:36:51 +07:00
Mary Evans 11ba685a7b MDL-33191 theme_magazine: changes to magazine/config.php fixes $THEME->layouts for Base & Standard 2012-05-22 17:15:06 +01:00
Sun Zhigang 0f6113cba0 MDL-33035 workshop: typo in strings 2012-05-22 19:23:43 +08:00
Dan Poltawski b51ac4e290 Merge branch 'w21_MDL-32564_m22_timezonecontext' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-22 13:34:24 +08:00
Dan Poltawski fee000ff4e Merge branch 'MDL-32981-22' of github.com:FMCorz/moodle into MOODLE_22_STABLE 2012-05-22 11:16:06 +08:00
Frederic Massart 0c9fb0c1cb MDL-32981 Filepicker: my private files uses edit page instead of view 2012-05-22 10:50:44 +08:00
Sam Hemelryk 3e11be405b Merge branch 'MDL-32204-mnet-auth_22' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-05-22 14:49:23 +12:00
Kordan 319887f86e MDL-33055 theme_formal_white: changed "general" to "standard" in $theme->layouts array index 2012-05-22 14:31:29 +12:00
Rajesh Taneja b27eef0f7e MDL-33102 blogs: userid will be added during blog visibility upgrade 2012-05-22 10:00:30 +08:00
Andrew Davis 6dbe8ddbd8 MDL-29173 grade: altered the definiton of round() in /lib/evalmath/evalmath.class.php 2012-05-22 08:39:31 +07:00
Fábio Souto cd358c666f Allow admin to consult user email address
Currently the admin user cannot check the user email using this function. This fix allows the admin user to retrieve the email in any situation.
2012-05-21 10:36:32 +01:00
Mary Evans bb61c874bb MDL-33118 theme_mymobile: changed MAIN_CONTENT_TOKEN in layout/embedded.php to new format 2012-05-20 22:44:05 +01:00
Vadim Dvorovenko d78b67b2fc MDL-26562
Signed-off-by: Vadim Dvorovenko <vadimon@mail.ru>
2012-05-20 19:45:38 +07:00
Rex Lorenzo c31149fa67 MDL-33090 - Missing strings in XMLDB editor - added in missing strings 2012-05-19 21:31:08 -07:00
Petr Skoda 2f76ac6362 MDL-32564 fix admin/timezone.php page setup 2012-05-19 18:54:40 +02:00
Eloy Lafuente (stronk7) 14fdcb4f13 weekly release 2.2.3+ 2012-05-19 12:23:35 +02:00
Eloy Lafuente (stronk7) 2871fedb58 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-05-19 12:17:27 +02:00
Adrian Greeve 42446a0b6d MDL-32126 replaced _order with sortorder to make sorting work in oracle 2012-05-18 11:25:18 +02:00
Dan Poltawski 7fcdb8275c Merge branch 'MDL-32535-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-05-18 10:28:26 +08:00
AMOS bot 1ac90bc28e Automatically generated installer lang files 2012-05-18 00:31:51 +00:00
Matteo Scaramuccia 8e1f3b11c7 MDL-33053 AICC: Incorrect Table Of Content hierarchy using "structured" AICC
courses
[Fix] 'scorm_scoes' doesn't contain all the entries described in the DES file
[Fix] HTMLizing the parent relationship, described in the CST file,
      fails: it considers 'index = 0' (found) equals to 'false'	(not found)
2012-05-18 00:40:50 +02:00
Rajesh Taneja a71e869f34 MDL-32866 filemanager: Fixed Page url typo 2012-05-17 16:48:35 +08:00
Frederic Massart 3dc794a8f5 MDL-29924 Glossary: Entry attachments displayed in Moodle dialogue 2012-05-17 15:02:48 +08:00
Dan Poltawski 1765044c64 Merge branch 'w20_MDL-32967_m22_sqlsrvstrings' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-17 14:30:38 +08:00
Dan Poltawski 573e559c96 Merge branch 'MDL-31814_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-05-17 14:11:22 +08:00
Juho Viitasalo 5724bb16eb MDL-31850 wiki: extra whitespace removed from form 2012-05-17 14:49:21 +12:00
Sam Hemelryk 843599ae86 Merge branch 'm22_MDL-32794' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-05-17 12:27:37 +12:00
Aparup Banerjee 5a6042c9be Merge branch 'MDL-32633_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-05-16 16:05:42 +08:00
sam marshall e8cc54227e MDL-32988 Lib: Course delete does availability/completion in wrong order
When deleting modules that failed to delete using normal method, it deleted
the course-modules table first and then the availability/completion,
which depend on the entries in course-modules table. This commit switches
the order.
2012-05-16 14:04:13 +08:00
Aparup Banerjee b3e26da9d9 MDL-32921 lti : reused a moodle_url. 2012-05-16 13:51:53 +08:00
Chris Scribner de05ce07c2 MDL-32921: Fixing an issue with adding LTI tool providers from the admin UI 2012-05-16 13:51:45 +08:00
AMOS bot c163f86350 Automatically generated installer lang files 2012-05-16 00:31:36 +00:00
Henning Bostelmann d9df0e34fc MDL-28557 Calendar filters: show all group events in course to teacher 2012-05-15 22:25:01 +01:00
Sam Hemelryk f97184b9c9 Merge branch 'MDL-31458-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-05-16 09:12:06 +12:00
Wiktor Wandachowicz f8e01f918b MDL-32204 MNet: set auth method to mnet for users enrolled remotely 2012-05-15 15:36:42 +02:00
Aparup Banerjee 479f14a07b Merge branch 'MDL-32861-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-05-15 16:10:33 +08:00
Aparup Banerjee 1eab78b30e Merge branch 'MDL-25695-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-05-15 11:08:21 +08:00
AMOS bot 2ce6285fb0 Automatically generated installer lang files 2012-05-15 00:31:40 +00:00
Dan Marsden 4e3a4dd55c MDL-32794 SCORM prevent items in tree that have no navigation from triggering a navigation change. 2012-05-15 09:37:03 +12:00
Eric Merrill 278fc5d6dc MDL-32985 cron: don't execute notify_login_failures unnecessarily 2012-05-14 11:22:42 -04:00
Dan Poltawski 4acfacdbf8 MDL-32714 workshop - fix broken unit tests
Using a quick and dirty recordset mock. Thanks to Eloy for the
brainpower.
2012-05-14 22:17:19 +08:00
Dan Poltawski f4d4fcaa41 Merge branch 'MDL-32863_22' of git://github.com/jonof/moodle into MOODLE_22_STABLE 2012-05-14 20:49:12 +08:00
Dan Poltawski 418f8dd9a7 Merge branch 'MDL-31719_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-05-14 15:53:25 +08:00
Dan Poltawski 7e647445dd Merge branch 'MDL-31804_ambiguous_sql_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-05-14 14:20:16 +08:00
Dan Poltawski 97bb109b55 Merge branch 'MDL-24401_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-05-14 14:12:36 +08:00
Dan Poltawski a6bc302e64 Merge branch 'w20_MDL-32915_m22_chatdiv' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-14 14:06:45 +08:00
Dan Poltawski 043a0d4c27 Merge branch 'wip-MDL-32872-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-05-14 14:01:03 +08:00
Dan Poltawski 8dd8427aa2 Merge branch 'wip-MDL-32611-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-05-14 13:13:06 +08:00
Jonathon Fowler d5e59d8950 MDL-31804 duplicated columns cause Oracle error in grader report 2012-05-14 11:08:48 +07:00
Jonathon Fowler f3248ac9f2 MDL-32863 question: fix for Oracle ambiguous column error 2012-05-14 12:53:36 +10:00
Dan Poltawski 39a3a53069 Merge branch 'MDL-32714-rubric_22' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-05-14 10:41:54 +08:00
Andrew Robert Nicols bf03cf12b7 MDL-32340 Improve performance of calendar selection 2012-05-14 14:05:25 +12:00
Adrian Greeve 7d127b53e3 MDL-32126 - data - backport of advanced search re-write 2012-05-14 12:39:30 +12:00
Sam Hemelryk 734d880e35 MDL-32611 editcategory: Fixed up navigation error. 2012-05-14 09:17:06 +12:00
Sam Hemelryk 2146aae7bf MDL-32872 tool_roles: Fixed up navigation on user roles page 2012-05-14 08:54:28 +12:00
Mary Evans 6e765a4ce5 MDL-31719 lang/en/admin.php: changes text in $string['configallowthemechangeonurl'] to make less ambiguous 2012-05-13 15:12:33 +01:00
Petr Skoda 7c4f93cd5f MDL-32967 add diagnostic strings for missing Microsoft drivers for SQL Server 2012-05-13 12:23:39 +02:00
Petr Skoda 94492249ec MDL-32915 fix bogus open div in basic chat ui 2012-05-13 10:25:50 +02:00
David Mudrak 1f90d92464 MDL-32714 workshop: fixed SQL to load assessment form fields
Obvious problems emerged once there were some records in the
workshopform_rubric table with no workshopform_rubric_levels. As l.id
(empty in that case) was used as the key of the returned array, they all
were collapsed into a single one.
2012-05-12 10:25:41 +02:00
Eloy Lafuente (stronk7) 7d3704f293 Moodle release 2.2.3 2012-05-12 03:26:46 +02:00
Petr Skoda ce4126c7a9 MDL-31558 add missing mimetype to send_temp_file()
backported from master
2012-05-11 22:04:33 +02:00
Tim Hunt fd32dbfa1d MDL-32633 quiz editing: recreate grade item when max changed from 0 2012-05-11 20:05:22 +01:00
Eloy Lafuente (stronk7) 48861429c7 weekly release 2.2.2+ 2012-05-11 12:17:31 +02:00
Eloy Lafuente (stronk7) 6cf9033d8d Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-05-11 12:10:42 +02:00
Dan Poltawski a6f5a72ef5 MDL-31458 forum: email subjects containing ampersand are sent as &amp; 2012-05-11 15:30:40 +08:00
Sam Hemelryk 94b0258dc3 MDL-31763 mod_data: Fixed array iteration reference issue 2012-05-10 17:31:24 +12:00
Sam Hemelryk f818719f11 Merge branch 'wip-MDL-31763-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-05-10 15:14:28 +12:00
Adrian Greeve 194c653a11 MDL-31763 - data - users can only override their own presets unless they have manage presets permission. 2012-05-10 10:23:12 +08:00
AMOS bot 3782723995 Automatically generated installer lang files 2012-05-10 00:31:45 +00:00
Eloy Lafuente (stronk7) 6ba42caef7 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-05-09 19:31:46 +02:00
Tim Hunt 673ee48eb8 MDL-31393 qtype_essay upgrade: save old question_answers.feebdack 2012-05-09 15:09:27 +01:00
Charles Fulton 2d129fbea0 MDL-32861 filemanager: respect course upload limit 2012-05-09 05:09:28 -07:00
Dan Poltawski b37bb96b0f Merge branch 'wip-mdl-31498-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-05-09 17:46:15 +08:00
Rossiani Wijaya a6b4124840 MDL-24401: fixed string for adding content page 2012-05-09 14:37:11 +08:00
Andrew Davis ad9fee8416 MDL-31488 admin: made admin_externalpage_setup() try to guess the reason why the requested section couldnt be found 2012-05-09 11:58:24 +08:00
Dan Poltawski 1357fde409 Merge branch 'w19_MDL-32733_m22_authorizemessage' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-09 10:28:55 +08:00
Dan Poltawski c0ba02d066 Merge branch 'w19_MDL-32775_m22_searchpix' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-09 10:22:55 +08:00
Sam Hemelryk 93af314f78 Merge branch 'MDL-32164-MOODLE_22_STABLE-1' of git://git.luns.net.uk/moodle into MOODLE_22_STABLE 2012-05-09 11:45:57 +12:00
Sam Hemelryk a1f173f774 Merge branch 'MDL-18095-MOODLE_22_STABLE-1' of git://git.luns.net.uk/moodle into MOODLE_22_STABLE 2012-05-09 11:31:40 +12:00
Petr Skoda 3a48019ea3 MDL-32178 ignore duplicates in enroL_database external course table 2012-05-09 11:18:55 +12:00
Ruslan Kabalin ed88a0b815 MDL-18095 gradebook: Make sure grade override flag is cleared whenever required
The check for feedback and grade equality between recorded values and the current
form ones before removing override flag is not really required.
2012-05-08 12:07:41 +01:00
Frederic Massart 8d716acba5 MDL-32718 Fixed typo in column name 2012-05-08 15:55:40 +08:00
Sam Hemelryk f4e4ac8c59 Merge branch 'MDL-32670_22' of git://github.com/rlorenzo/moodle into MOODLE_22_STABLE 2012-05-08 18:06:52 +12:00
Sam Hemelryk 329920fa22 Merge branch 'MDL-31671-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-05-08 17:41:52 +12:00
Dan Poltawski d6a84028e5 Merge branch 'w19_MDL-31691_m22_cohortidnumber' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-08 12:40:39 +08:00
Dan Poltawski 22f754bae6 Merge branch 'MDL-32718-sql-typo_22' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-05-08 12:35:56 +08:00
AMOS bot ffeebe6088 Automatically generated installer lang files 2012-05-08 00:31:45 +00:00
David Mudrak 0bfc4d763a MDL-32718 fixing an SQL typo in workshop_get_recent_mod_activity() 2012-05-07 10:04:46 +02:00
Dan Poltawski 4b641eaf82 Merge branch 'MDL-18335_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-05-07 15:32:31 +08:00
Ankit Agarwal 47b43d0b4c MDL-31671 calendar: update_event hook should be triggered when updating event 2012-05-07 15:04:56 +08:00
Ankit Agarwal d28da62e34 MDL-31671 calendar: Fixing error when trying to delete parent of a repeated event series 2012-05-07 15:04:56 +08:00
Dan Poltawski 9d3f3b5093 Revert "MDL-32379: Fix memory leak in session_set_user"
This reverts commit 22dc32042a.

This integrator didn't properly read the diff, sorry
2012-05-07 14:40:35 +08:00
Dan Poltawski e71b8ccbd1 Merge branch 'MDL-32684_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-05-07 13:03:57 +08:00
Dan Poltawski 9d669d60bd Merge branch 'MDL-32430_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-05-07 12:48:24 +08:00
Davo Smith 73db83bfaa MDL-32698 Question - Fixed typos in load_question_attempt 2012-05-07 12:06:04 +08:00
Charles Fulton 900e37bec7 MDL-26277 grade import: validate file pointer before reading 2012-05-06 20:33:30 -07:00
Dan Poltawski 35f7fa3d36 Merge branch 'mdl32379_22' of git://github.com/tlevi/moodle into MOODLE_22_STABLE 2012-05-07 11:29:09 +08:00
Petr Skoda 5c85ac9572 MDL-31691 treat cohort idnumbers as plain text 2012-05-06 21:38:24 +02:00
Petr Skoda fee082d56c MDL-32735 add missing message provider info for unmaintained enrol_authorize 2012-05-06 12:08:34 +02:00
Petr Skoda 9622a33982 MDL-32775 fix invalid url in mediaplugin CSS 2012-05-05 10:41:11 +02:00
Tim Hunt 57f2278c69 MDL-31814 question bank: fix possible error with sort columns. 2012-05-04 17:30:24 +01:00
Tim Hunt fca1061612 MDL-32430 quiz calendar events: fix pluginfile URLs in the description. 2012-05-04 15:23:54 +01:00
Eloy Lafuente (stronk7) 8075bd8d8a weekly release 2.2.2+ 2012-05-04 13:11:17 +02:00
Eloy Lafuente (stronk7) 4553925614 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-05-04 13:07:00 +02:00
Aaron Barnes 373d42cf3a MDL-32203 completion: Fix issues with data object where clauses 2012-05-04 15:03:20 +12:00
Dan Poltawski 08546a8973 MDL-32693 webservice: fix typo in URL 2012-05-03 18:22:45 +02:00
Marina Glancy 3bb5950c7e MDL-32416: Picasa repository now returns path, also fixed album title retrieval 2012-05-03 11:34:19 +08:00
Rex Lorenzo fd1e4d5039 MDL-32670 mod/chat: also added missing call to ->set_heading in report.php 2012-05-02 19:08:51 -07:00
AMOS bot 1cecb26b18 Automatically generated installer lang files 2012-05-03 00:31:31 +00:00
Eloy Lafuente (stronk7) 8b727da971 MDL-32234 Library: usergetdate tests moved to assertIdentical()
(to check both type and value)
2012-05-03 00:45:39 +02:00
Eloy Lafuente (stronk7) 46d732c252 Merge branch 'wip-mdl-32234-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-05-03 00:40:23 +02:00
Rajesh Taneja 3416857d84 MDL-31498 formslib: repeat_elements will now set default for group elements 2012-05-02 17:10:30 +08:00
Aparup Banerjee 58d053313f Merge branch 'MDL-28657-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-05-02 13:55:50 +08:00
Jerome Mouneyrac e0a57f8ccc MDL-31762 username should be lowercase and check against PARAM_USERNAME when creating/updating user by web service 2012-05-02 17:52:35 +12:00
Mary Evans 3dde1fcafb MDL-32684 lib/pagelib: adds break; statements to theme order in lib/pagelib.php 2012-05-02 01:42:34 +01:00
ppichet cc2a87e3fe MDL-32181 question/calculatedmulti validate multianswers
restructuring the validation function of edit_calculatedmulti_form.php
adding $variant to
qtype_calculated_question_helper::start_attempt($this, $step, $variant);
2012-05-01 10:53:56 +08:00
Sam Hemelryk d0eeb25a64 Merge branch 'w18_MDL-32607_m22_upgrade2' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-05-01 13:33:53 +12:00
Sam Hemelryk 0ee1c3db00 Merge branch 'MDL-28955_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-05-01 13:17:12 +12:00
Sam Hemelryk 9a260ddd2c MDL-32012 Fixed white space 2012-05-01 12:38:53 +12:00
Sam Hemelryk fc3a00dc64 Merge branch 'MDL-32012_m22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-05-01 12:37:42 +12:00
AMOS bot 6e3ef95711 Automatically generated installer lang files 2012-05-01 00:31:42 +00:00
Sam Hemelryk 44835cdc8b Merge branch 'MDL-29264_zindex_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-05-01 08:23:48 +12:00
Rossiani Wijaya 81308ee649 MDL-18335 calendar event: fixed role capability checking to create new event 2012-04-30 17:38:10 +08:00
Tim Hunt 1434fdf7a6 MDL-32357 Try to fix unread post notification for blog-style forums.
I know that showing unread posts is not 100% blog-style, but I think
it is useful functionality, therefore, I chose to fix it, rather than,
say, disable it completely.

I think this fix will only affect blog-style forums since
forum_print_latest_discussions is only called with mode 'plain' in
three places:
1. Blog-style forums - the case we want to fix,
2. Site news forum, and
3. Social course format.

In all cases, having read tracking work properly seems like the
right thing to do.
2012-04-30 14:29:56 +08:00
Rajesh Taneja daa44ab05e MDL-32234 Library: usergetdate return different values when timezone is set
usergetdate should return consistent values for different timezone. There are
two return path
1. If timezone is servertime, it returns getdate
2. If timezone other then servertime, it use gmstrftime, which returns string and
   values with leading zero.
In second case, leading zero's are removed and values are type casted. One major fix
is with yday, getdate returns 0 through 365, whereas %j returns 001 through 366. This
has been fixed as well.
2012-04-30 10:54:11 +08:00
Sam Hemelryk 3464845868 Merge branch 'm22_MDL-32597' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-04-30 13:21:49 +12:00
Sam Hemelryk 390c3bc54a Merge branch 'MDL-28735-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-04-30 13:15:03 +12:00
Sam Hemelryk ead5f3793b Merge branch 'MDL-26523_grader_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-30 12:46:37 +12:00
Sam Hemelryk b5907a8674 Merge branch 'MDL-31429_paypal_messages_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-30 12:33:40 +12:00
Aparup Banerjee 839e233f17 MDL-19391 Database : fixed icon size 2012-04-30 12:21:12 +12:00
Sam Hemelryk d76ac3bab6 MDL-31510 grader report: Fixed whitespace 2012-04-30 12:13:09 +12:00
Sam Hemelryk 8a8f68ff97 Merge branch 'MDL-31510_group_activities_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-30 12:11:12 +12:00
Sam Hemelryk b969338742 Merge branch 'MDL-32238-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-04-30 12:02:50 +12:00
Sam Hemelryk ba69b6952a Merge branch 'MDL-32624_22_wip' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-04-30 11:57:26 +12:00
Mary Evans e1765762c2 MDL-28955 theme_nimble: added css rules to display horizontal/vertical-menu-submenu-indicator 2012-04-28 02:28:37 +01:00
Rex Lorenzo ceb66eb1fd MDL-32670 mod/chat: added missing call to $PAGE->set_heading 2012-04-27 16:02:38 -07:00
Eric Merrill d68cf3877c MDL-32012 resource: flaw in restore from moodle 1.9 backups 2012-04-27 16:16:44 -04:00
Petr Skoda 9257815ff1 MDL-32607 prevent upgrade_set_timeout abort in CLI scripts
Credit goes to Michael Aherne, thanks.
2012-04-27 13:46:07 +02:00
Eloy Lafuente (stronk7) 446dbeed7a weekly release 2.2.2+ 2012-04-27 12:47:40 +02:00
Eloy Lafuente (stronk7) 5f5990903f Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-04-27 12:41:09 +02:00
Eloy Lafuente (stronk7) 0baa0a305d Revert "MDL-32249 completion: Round course grades and remove hardcoded string"
This reverts commit b795d69cc3.
2012-04-27 12:06:39 +02:00
Andrew Davis 23caf506ba MDL-29264 course: removed the z-index from course css for course completion elements 2012-04-27 11:11:33 +07:00
Andrew Davis 50223a8ae1 MDL-26523 grade: fixed a called to addHelpButton() that was asking for a non-existent string 2012-04-27 09:19:35 +07:00
AMOS bot 1fc08528c7 Automatically generated installer lang files 2012-04-27 00:31:44 +00:00
Andrew Davis 79c0996c64 MDL-31510 grade: made the user report observe $cm->uservisible so that activities not available to a student because of groups do not appear on their user report 2012-04-26 16:59:48 +07:00
Andrew Davis 923ea459d8 MDL-31429 enrol: added db/messages.php for enrolment plugins and added some smarts to messaging so it won't display message settings for disabled enrolment plugins 2012-04-26 16:10:13 +07:00
Chris Follin ab01926c99 MDL-31429 enrol: Add missing string for PayPal enrolment messages.
Signed-off-by: Andrew Davis <andrew@moodle.com>
2012-04-26 16:08:51 +07:00
Marina Glancy 47a6c7ee31 MDL-32417: Fixed regression in original (cherrypick) backport 2012-04-26 10:22:58 +02:00
Eloy Lafuente (stronk7) c821346cfe Merge branch 'MDL-19263-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-04-26 02:59:16 +02:00
Eloy Lafuente (stronk7) b8fffc6128 Merge branch 'MDL-32630-workshop-calendar_22' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-04-26 02:20:22 +02:00
David Mudrak 08258a6dfb MDL-32630 workshop_calendar_update() does not check for calendar permissions
As discussed in MDL-32631, calendar_event::update() should not do
capability checks at all. Until that issue is fixed, we just explicitly
declare that no capability checks should be done.

The function workshop_calendar_update() is executed when adding or
updating a workshop instance (where permissions to modify the instance
were already checked and are sufficient) and in the upgrade code (where
no check should be performed anyway).
2012-04-25 16:04:47 +02:00
Eloy Lafuente (stronk7) cf1f0dfb43 Merge branch 'MDL-32192_copy_string_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-25 13:08:05 +02:00
Marina Glancy 8c19c9cfd0 MDL-32417: Fixed pagination bug in Flickr search results, also return thumbnail sizes 2012-04-25 03:42:42 +02:00
Eloy Lafuente (stronk7) 76c51e3b9b MDL-32490 Offline assignment: phpdocs and whitespace fixes 2012-04-25 02:41:39 +02:00
Henning Bostelmann 48dd268c8d MDL-32490 Offline assignment: do not display lateness information 2012-04-25 02:41:32 +02:00
AMOS bot d71590772f Automatically generated installer lang files 2012-04-25 00:31:38 +00:00
Eloy Lafuente (stronk7) 89d13f61ca Merge branch 'MDL-32082_messaging_readability_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-25 01:57:13 +02:00
Eloy Lafuente (stronk7) 5f250cff88 Merge branch 'wip-MDL-30478-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-04-25 01:12:41 +02:00
Eloy Lafuente (stronk7) 46c485a63c Merge branch 'MDL-31548-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-04-24 23:29:54 +02:00
Andreas Grabs 36e673a766 MDL-32624 - initialbars disappears 2012-04-24 21:25:15 +02:00
Eloy Lafuente (stronk7) 352476d131 MDL-31914 db fix - cannot use table aliases on DELETE statements. Credit goes to Andrew Nicols (LUNS). 2012-04-24 13:08:29 +02:00
Eloy Lafuente (stronk7) b5dd45511d Merge branch 'MDL-32249-22' of github.com:srynot4sale/moodle into MOODLE_22_STABLE 2012-04-24 12:58:50 +02:00
Eloy Lafuente (stronk7) 5c487f23ae MDL-32102 Course completion - bump to 2011120502.08 (07 was already in use) 2012-04-24 12:30:49 +02:00
Andrew Robert Nicols 8a28dbd4e1 MDL-31914 Ensure that completion criteria are deleted when removing a course module 2012-04-24 12:28:33 +02:00
Dan Poltawski 8589241024 Merge branch 'm22_MDL-32102' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-04-24 15:17:51 +08:00
Ankit Agarwal 525a4642cd MDL-32238 course: Timemodifed should be updated when a course's visible status is toggled from the category page 2012-04-24 13:41:28 +08:00
Dan Poltawski d25f6a8ecb Merge branch 'w17_MDL-32427_m22_protocols' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-24 10:27:22 +08:00
Dan Poltawski 1d6070951a Merge branch 'w17_MDL-25407_m22_innodb' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-24 10:23:34 +08:00
Ankit Agarwal 958f4ff45f MDL-28735 calendar: Fixing issues with course selection dropdown 2012-04-24 09:39:12 +08:00
Andrew Robert Nicols 8d66adc9b8 MDL-32454 Fix issues highlighted by strict warnings in MNet code 2012-04-24 01:54:26 +02:00
Andrew Robert Nicols 186fe7abe9 MDL-32514 Remove onclick for the group delete button 2012-04-24 01:43:08 +02:00
Dan Marsden 80f9011c00 MDL-32597 typo in path to version.php file for local plugins 2012-04-24 11:14:57 +12:00
Eloy Lafuente (stronk7) 0742a01d54 Merge branch 'MDL-19549-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-04-24 01:01:06 +02:00
Eloy Lafuente (stronk7) cbc6589769 Merge branch 'MDL-28176-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-04-24 00:31:06 +02:00
Eloy Lafuente (stronk7) f46c9dd0f2 Merge branch 'MDL-32134-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-04-24 00:08:44 +02:00
Eloy Lafuente (stronk7) 5a2d320ca6 Merge branch 'wip-MDL-26500-22' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-04-24 00:05:16 +02:00
Petr Skoda 3b1055ee4c MDL-25407 ignore errors in CLI mysql engine conversion script 2012-04-23 19:20:00 +02:00
Eloy Lafuente (stronk7) f7de3d4360 MDL-29262 simpletest: fix forgotten mock objects to avoid strict notices 2012-04-23 16:30:37 +02:00
Dan Poltawski 1e13c7b154 Merge branch 'MDL-32431' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-04-23 17:10:57 +08:00
Dan Poltawski ac05e65ef2 Merge branch 'w17_MDL-32477_m22_cloneperm' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-23 16:35:34 +08:00
Petr Skoda c609c3968e MDL-32427 fix suport for extra schemes in links in HTML Purifier 2012-04-23 10:30:43 +02:00
Dan Poltawski 7b969f0bb0 Merge branch 'w17_MDL-31553_m22_clitimeout' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-23 15:25:49 +08:00
Petr Skoda 3691c0de24 MDL-31553 do not timeout CLI upgrade scripts
Credit goes to Michael Aherne.
2012-04-23 08:53:41 +02:00
Dan Poltawski 4be12986aa Merge branch 'MDL-32462_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-23 12:54:07 +08:00
Dan Poltawski 2d3659da69 Merge branch 'MDL-32104-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-04-23 12:50:02 +08:00
Dan Poltawski 7c4e7f8fdf Merge branch 'MDL-29262_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-04-23 12:42:33 +08:00
Dan Poltawski ced892ebb2 Merge branch 'w17_MDL-25407_m22_innodb' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-23 12:24:48 +08:00
Jerome Mouneyrac 6d8e40a429 MDL-31431 webservices: improve user pic docs
Explain how to retrieve profile picture when forcelogin is set to NO and guestaccess to Yes
2012-04-23 11:43:27 +08:00
Andrew Robert Nicols 2bda67fa52 MDL-32459 Adjust order of remote enrolment help text to suit form order 2012-04-23 10:44:11 +08:00
Iñaki Arenaza ead9fe0cdf MDL-16646 auth/cas CAS configuration page mis-spellings
Signed-off-by: Iñaki Arenaza <iarenaza@mondragon.edu>
2012-04-23 10:33:59 +08:00
Dan Poltawski d97f2caf13 Merge branch 'MDL-23647_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-04-23 10:27:51 +08:00
Chris Follin f084d74ed1 MDL-32492 auth/cas: respect https login links 2012-04-23 09:50:17 +08:00
Aaron Barnes b795d69cc3 MDL-32249 completion: Round course grades and remove hardcoded string 2012-04-23 12:24:54 +12:00
Dan Marsden f778133a99 MDL-32102 Course completion - only restore user completion if not adding to existing course 2012-04-23 11:33:33 +12:00
Eloy Lafuente (stronk7) 6a726a9901 MDL-29262 restore: Clean controller obj form DB once finished ok 2012-04-23 00:36:41 +02:00
Eloy Lafuente (stronk7) 412ae7b629 MDL-29262 backup: Clean controller obj form DB once finished ok 2012-04-23 00:36:32 +02:00
Eloy Lafuente (stronk7) c3cc54fcce MDL-29262 backup: new setting to control the ttl of backup logs
Add one new backup setting, moving from the general CFG->loglifetime,
to be able to delete backup logged information often.

Conflicts:

	admin/settings/courses.php
	version.php
2012-04-23 00:35:10 +02:00
AMOS bot 9fed35fb09 Automatically generated installer lang files 2012-04-22 00:31:41 +00:00
Petr Skoda 6e41a68058 MDL-25407 ignore errors when converting to InnoDB and ignore timeout
This should help resolve problems with table views and other unsupported stuff.
2012-04-21 11:51:51 +02:00
Andrew Davis 65634948fa MDL-32191 grade:renamed a mis-spelled string name
AMOS BEGIN
 CPY [invalidgradeitmeid,error],[invalidgradeitemid,error]
AMOS END
2012-04-21 11:44:40 +07:00
Andrew Davis 85427358fc MDL-32082 message: added a function to make user checks more readable 2012-04-21 11:22:28 +07:00
Charles Fulton 8df946ba30 MDL-25695 wiki: enable anchor tags 2012-04-20 12:49:26 -07:00
Charles Fulton edb257109e MDL-28657 backup: make automated backup filenames site admin-configurable 2012-04-20 08:48:29 -07:00
Charles Fulton e89535552b MDL-19263 assignment: only notify users enrolled in course 2012-04-20 06:15:03 -07:00
Tim Hunt c08ea5202f MDL-32462 accesslib: fix context_user::build_paths performance
The problem was that the query was updating every row whether it needed
it or not. This turns out to be a really bad thing to do on Postgres,
because it then triggers a long expensive vacuum, which lock the context
table for a long time a really bad thing to do.
2012-04-20 10:30:26 +01:00
Tim Hunt bd680d8a01 MDL-32519 completio: Fix spelling of Enrolled. 2012-04-20 10:24:17 +01:00
Ankit Agarwal 1ac84ccdfc MDL-32431 backup: Adding the feature to support backing up and restoring calendar events 2012-04-20 08:57:49 +08:00
Ankit Agarwal 661fc73a96 MDL-32104 forum: Fixing issue with logs during restore 2012-04-20 08:55:33 +08:00
Ankit Agarwal 62c325eefe MDL-31548 enrollments: Introducing new api enrol_get_all_users_courses() that returns all user courses without any checks 2012-04-20 08:53:58 +08:00
AMOS bot e5a5ca2bcb Automatically generated installer lang files 2012-04-20 00:32:29 +00:00
Adrian Greeve 595b68e2fd MDL-30478 - wiki - Fixing up group problems when viewing and creating wiki pages.
Thanks to Matt Kolb for his contribution.
2012-04-20 07:32:13 +08:00
Petr Skoda 804feede10 MDL-32477 allow cloning of plugin permissions from core
Please note it is discouraged to clone from different plugin type because the upgrade order is not guaranteed.
2012-04-19 22:11:15 +02:00
sam marshall dc2c1b8974 MDL-32535 Completion lang string incorrect use, text 2012-04-19 14:46:49 +01:00
Dan Poltawski 93fb7b528b weekly release 2.2.2+ 2012-04-19 17:48:21 +08:00
Dan Poltawski d6f387e262 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-04-19 17:39:12 +08:00
Andrew Robert Nicols a25ac01e95 MDL-32061 Use old lesson_answer ID and correct when restoring lesson attempts 2012-04-18 02:44:01 +02:00
Jerome Mouneyrac adca1840c4 MDL-30225 Creating new web service tokens create error 2012-04-17 18:54:03 +08:00
Dan Poltawski 54ba4bf583 MDL-26500 blog: Rewrite pluginfile urls in RSS 2012-04-17 17:47:34 +08:00
Dan Poltawski 403c191be1 MDL-26500 mod/glossary: Rewrite pluginfile urls in RSS 2012-04-17 17:47:34 +08:00
Dan Poltawski 69065330c4 MDL-26500 mod/forum: Rewrite pluginfile urls in RSS 2012-04-17 17:47:33 +08:00
Dan Poltawski c8ad77f876 MDL-19549 lang: make a string less scary 2012-04-17 17:17:29 +08:00
Dan Poltawski 35eb31fa38 Merge branch 'MDL-25660-workshop-calendar_22' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-04-17 16:07:12 +08:00
Dan Poltawski dc52f193eb MDL-28176 lang - rephrase conditional access description 2012-04-17 13:38:03 +08:00
Dan Poltawski e449096842 MDL-32134 lang: Add missing PNG string 2012-04-17 11:29:52 +08:00
AMOS bot 49eb5cf372 Automatically generated installer lang files 2012-04-17 00:31:48 +00:00
Dan Poltawski 36ddd604b5 Merge branch 'w16_MDL-32437_m22_tablename' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-16 20:50:25 +08:00
Dan Poltawski 1399a5bc41 Merge branch 'MDL-32358_22' of https://github.com/ppichet/moodle into MOODLE_22_STABLE 2012-04-16 14:31:17 +08:00
Jerome Mouneyrac 2547042fe6 MDL-31694 Fix XSS security issue with service name accepting javascript 2012-04-16 14:27:45 +08:00
Sam Hemelryk 5335b7deb8 Merge branch 'MDL-29174_MOODLE_22' of git://github.com/raymanuk/moodle into MOODLE_22_STABLE 2012-04-16 17:37:04 +12:00
Dan Poltawski afa1de62b2 Merge branch 'wip-MDL-32393-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-04-16 13:29:07 +08:00
Dan Poltawski d2db892076 MDL-32443 queupgradehelper cli: fix path & whitespace 2012-04-16 13:23:17 +08:00
Dan Poltawski ddbc74866d Merge branch 'MDL-32443_m22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-04-16 13:14:42 +08:00
Sam Hemelryk 80bc3d9880 Merge branch 'MDL-32385_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-04-16 17:06:09 +12:00
Dan Poltawski d4608845b2 Merge branch 'MDL-32404_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-16 13:01:52 +08:00
Sam Hemelryk 4a979297aa Merge branch 'MDL-32444_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-04-16 15:59:38 +12:00
Eric Merrill ce4ca89ef1 MDL-32443 qeupgradehelper: Add cli tool to execute qeupgrade helper 2012-04-15 23:51:56 -04:00
Sam Hemelryk 41d2e418a7 MDL-32353 fixed up very minor whitespace 2012-04-16 15:22:59 +12:00
Sam Hemelryk 11990142b0 Merge branch 'MDL-32353_m22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-04-16 15:11:59 +12:00
Dan Poltawski 253b5f4d7e Merge branch 'MDL-32442_m22' of git://github.com/merrill-oakland/moodle into MOODLE_22_STABLE 2012-04-16 10:51:46 +08:00
ppichet 8858129c17 MDL-32358 : numerical question: validation messages errors
The selected unit parameter is added answer paramter when renderer call
 $question->get_validation_error() so that it mimics the
is_complete_response(array $response) structure.
2012-04-15 22:29:32 -04:00
Sam Hemelryk 0656d45fbc Merge branch 'm22_MDL-32388' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-04-16 12:23:10 +12:00
Sam Hemelryk 98a4be5176 Merge branch 'MDL-30819_grader_col_highlight_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-16 11:45:36 +12:00
Mary Evans b2fd3caea6 MDL-23647 theme_anomaly: Removed margin + added padding to current week main content to give it more definition. 2012-04-16 00:37:21 +01:00
Sam Hemelryk 77b300ca51 Merge branch 'MDL-30955_forum_ratings_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-04-16 11:34:26 +12:00
Sam Hemelryk cb36e6ba4a Merge branch 'MDL-32316_22_wip' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-04-16 11:00:25 +12:00
Sam Hemelryk b182c1238e Merge branch 'MDL-27547-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-04-16 10:47:58 +12:00
Petr Skoda fead3b432a MDL-32437 fix invalid gradebook query sql 2012-04-15 14:26:18 +02:00
Mary Evans 877a07f709 MDL-32444 theme_afterburner: adds 5px margin to the left of #loginbtn, input, button, select in /style/afterburner_styles.css 2012-04-15 01:50:31 +01:00
Tim Hunt e0538fa845 MDL-32404 question export: missing error message when exporting an empty category. 2012-04-14 15:44:22 +01:00
Mary Evans 41f8ca66e0 MDL-32385 theme_base: adds line-height:normal in style/course.css for section summary 2012-04-14 15:04:31 +01:00
Eric Merrill a68b0363bf MDL-32442 questionupgrade: error in SQL from postgres systems 2012-04-14 09:06:02 -04:00
AMOS bot 47860563bc Automatically generated installer lang files 2012-04-14 00:31:56 +00:00
David Mudrak ade4de356e MDL-25660 workshop removes its calendar events on instance deletion 2012-04-13 13:11:09 +02:00
David Mudrak 4494053b02 MDL-25660 recreate all workshop calendar events
Due to complex workshop upgrade path from 1.9 and missing calendar events
support in 2.x, the only safe way to get rid of potentially invalid
calendar events (such as those reported in MDL-26687) is to remove all
current workshop events and recreate them from scratch.
2012-04-13 04:43:58 +02:00
David Mudrak 6c6042404a MDL-25660 workshop registers events in the calendar 2012-04-13 04:43:40 +02:00
Eric Merrill 085cc4ef9a MDL-32353 backup: Flaw in settings logic for user info and anonymise 2012-04-12 10:57:24 -04:00
Dan Poltawski b1d3043354 weekly release 2.2.2+ 2012-04-12 13:27:17 +08:00
Dan Poltawski dc201dce9e Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-04-12 12:59:46 +08:00
Andrew Davis 92a7892d42 MDL-30955 rating: corrected /rating/index.php as it was determining the maximum rating incorrectly for custom scales 2012-04-12 10:19:15 +07:00
Andrew Davis c2e8445bf1 MDL-30819 grade: fixed column highlighting on the grader report 2012-04-12 10:14:36 +07:00
AMOS bot e6524dcbf9 Automatically generated installer lang files 2012-04-12 00:31:27 +00:00
Dan Marsden 2ed2d8c111 MDL-32388 SCORM: Fix chrome pop-ups 2012-04-11 21:05:49 +12:00
Jerome Mouneyrac e8a2384eb6 MDL-27547 When deleting a local plugin containing a built-in service, the built-in service is not deleted 2012-04-11 15:01:12 +08:00
Sam Hemelryk 61231c48fa Revert "MDL-30843 and MDL-30842 - accessibility compliance: Add <label> for form input text and select tag"
This reverts commit f01c7ddc7c.
2012-04-11 17:20:29 +12:00
Dan Poltawski b0a994f460 Merge branch 'MDL-32217_22' of git://github.com/ppichet/moodle into MOODLE_22_STABLE 2012-04-11 09:27:38 +08:00
Sam Hemelryk bd8d0b81d6 MDL-32393 navigation: Fixed up issue when rendering action_link instances for the navigation 2012-04-11 10:57:15 +12:00
Sam Hemelryk 999f7e3e17 MDL-32124 mod_feedback: Cleanup post-integration of unused var 2012-04-10 17:21:59 +12:00
Sam Hemelryk ec01a02d8b Merge branch 'MDL-32124_22_wip' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-04-10 17:11:57 +12:00
Tony Levi e71b08c529 MDL-32379: Fix memory leak in session_set_user
session_set_user mistakingly sets the session user to be a reference to the passed object.

This is a problem when alot of data is attached to the session user object,
as any process holding a list of these users will use more memory each time it changes user.
2012-04-10 14:09:10 +09:30
Jason Fowler d4341ff79c MDL-27427 - Blog - Adding ability to delete entries from external blogs 2012-04-10 12:05:20 +08:00
Dan Poltawski 697f104ac1 Merge branch 'wip-mdl-30051-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-04-10 11:06:09 +08:00
sam marshall 167c8c6714 MDL-32349 Installing can time out with large number of plugins 2012-04-10 12:40:00 +12:00
ppichet d8c5082b76 MDL-32217_22 Setting options->unitgradingtype
Signed-off-by: ppichet <pichet.pierre@uqam.ca>
2012-04-09 20:09:50 -04:00
Sam Hemelryk b054ead121 Merge branch 'MDL-30843_b_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-04-10 11:01:37 +12:00
Sam Hemelryk 3f046db150 Merge branch 'wip-mdl-32270-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-04-10 10:53:19 +12:00
Sam Hemelryk d9cc6b7a31 Merge branch 'w15_MDL-32263_m22_enroladmin' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-04-10 10:48:15 +12:00
Andreas Grabs eb11030b38 MDL-32316 feedback: fix tem type label does honor trusted text 2012-04-10 00:27:59 +02:00
Petr Skoda 43400d60de MDL-32263 remove broken admin test in enrol_check_plugins() 2012-04-09 20:01:28 +02:00
Hugh Davenport 2719e7c8f9 MDL-32308 Fix error when testing id of guest user 2012-04-09 19:05:54 +02:00
Andreas Grabs 767ed44ca4 MDL-32124 - mails to non respondents are sent as plain text with html-tags 2012-04-07 17:31:39 +02:00
Aparup Banerjee f24ff8f8d4 weekly release 2.2.2+ 2012-04-05 16:42:19 +08:00
Aparup Banerjee 42bcf023b4 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-04-05 16:19:49 +08:00
Aparup Banerjee c461a6a0a7 Merge branch 'wip-MDL-31631-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-04-04 13:41:00 +08:00
Eloy Lafuente (stronk7) bdd773ba40 Merge branch 'MDL-32240_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-04 00:11:43 +02:00
Eloy Lafuente (stronk7) fcc24148d6 Merge branch 'wip-MDL-29678-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-04-03 23:52:32 +02:00
Sam Hemelryk 729ef69705 Merge branch 'MDL-32137-MOODLE_22_STABLE-1' of git://git.luns.net.uk/moodle into MOODLE_22_STABLE 2012-04-04 08:21:52 +12:00
Eloy Lafuente (stronk7) 8c6bc1e000 Merge branch 'wip-MDL-32018-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-04-03 21:06:16 +02:00
Ray Guo d6b01141a1 MDL-29174 Remove the empty modulename_extend_navigation() stub from 7
modules.
2012-04-03 15:46:54 +01:00
Ruslan Kabalin 4f4bf67a31 MDL-32137 Fix message preference settings.
When a messaging output is set to forced, users should not be able to change
that. Regression intoroduced in bb3546f3 made possible to change checkboxes
(but not avoid forced settings). This fix replace checkboxes for 'forced'
settings with the corresponding message, similar to how it worked for
disallowed before.
2012-04-03 11:55:38 +01:00
Aparup Banerjee d0f6d6172a Merge branch 'wip-MDL-30784-stable22' of git://github.com/phalacee/moodle into MOODLE_22_STABLE 2012-04-03 17:00:51 +08:00
Aparup Banerjee 3ba909de87 Merge branch 'wip-MDL-31789-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-04-03 16:32:06 +08:00
Marina Glancy 97c0418e64 MDL-32171: add 'Manage' link to Picasa repository
Conflicts:

	repository/picasa/lib.php
2012-04-03 13:07:06 +08:00
Dan Poltawski a028969cc7 Merge branch 'wip-mdl-30904-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-04-03 11:39:21 +08:00
Rajesh Taneja cb2c45b31f MDL-32270 Library: ->defaulthomepage is checked before used 2012-04-03 11:29:33 +08:00
Dan Poltawski 65e5640a94 Merge branch 'MDL-32220_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-03 11:10:19 +08:00
Sam Hemelryk f65eadd42d Merge branch 'wip-mdl-32150-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-04-03 10:32:53 +12:00
Davo Smith ed9cc071d5 MDL-32213 Question upgrade now correctly handles non-core manually-graded question types 2012-04-02 17:00:44 +08:00
Dan Poltawski 41b4bb03b2 Merge branch 'MDL-32039_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-02 11:50:50 +08:00
Andreas Grabs 18ca35b3fa MDL-31768 - it is not possible to add a picture to the thanks page in feedback 2012-04-02 11:18:19 +08:00
Dan Poltawski 17ee774fdf Merge branch 'MDL-32214' of git://github.com/mkassaei/moodle into MOODLE_22_STABLE 2012-04-02 11:02:37 +08:00
Sam Hemelryk 2de2d0d2cd Merge branch 'MDL-32239_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-02 14:31:08 +12:00
Dan Poltawski 94bea73f29 Merge branch 'wip-MDL-32264-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-04-02 10:16:50 +08:00
Rajesh Taneja a99a9a163e MDL-32150 Libraries: checkbox controller will not check or uncheck freezed checkboxes 2012-04-02 10:12:06 +08:00
Dan Poltawski d54abc73a1 Merge branch 'MDL-32246_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-02 10:06:23 +08:00
Dan Poltawski 46303d1deb Merge branch 'MDL-32201_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-04-02 09:42:37 +08:00
Sam Hemelryk 0292c465fe Merge branch 'MDL-32256-cron-return_22_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-04-02 11:27:55 +12:00
Sam Hemelryk 12376c971f Merge branch 'MDL-32258-data-cron_22_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-04-02 11:24:41 +12:00
Kanika Goyal 84c10aaa7c MDL-31908 Glossary: entry list format- printable version does not show content 2012-04-02 11:20:55 +12:00
Sam Hemelryk fc0acdfacd Merge branch 'MDL-32289_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-04-02 10:16:20 +12:00
Mary Evans 59c0293d9e MDL-32289 theme_afterburner: added lang menu to frontpage layout in config.php 2012-04-01 01:12:03 +01:00
Mary Evans 04b1865d44 MDL-32262 theme_afterburner: fixed missing comma in afterburner_styles.css 2012-04-01 00:40:05 +01:00
Kanika Goyal 31238c016e MDL-31203 mod_forum: advanced search posts must be newer older than date, reverts date 2012-03-31 19:05:32 +05:30
Rajesh Taneja d2fbfb5f73 MDL-30051 cron: login error sql is now cross db 2012-03-30 16:50:42 +08:00
Rossiani Wijaya f01c7ddc7c MDL-30843 and MDL-30842 - accessibility compliance: Add <label> for form input text and select tag 2012-03-30 16:44:13 +08:00
Rajesh Taneja 48e43c12e6 MDL-32150 Libraries: checkall and uncheckall will not select disabled or readonly checkboxes 2012-03-30 13:04:52 +08:00
Rajesh Taneja f90a927b52 MDL-30904 Calendar: Event links are descriptive with hidden event name, for screen readers 2012-03-30 13:02:02 +08:00
AMOS bot 120aa6fd38 Automatically generated installer lang files 2012-03-30 00:33:10 +00:00
Jason Fowler 11c5042847 MDL-30784 - lib - Patch provided by Jason Hardin to provide detection for Android Tablets to allow the theme engine to provide the tablet theme 2012-03-30 08:24:32 +08:00
Sam Hemelryk 76fae9b6ab MDL-29678 lib: Require login now overrides to false for AJAX scripts 2012-03-30 10:23:56 +13:00
Sam Hemelryk 431c68a867 MDL-29678 navigation: Navigation AJAX require_login calls no longer set wantsurl or redirect 2012-03-30 10:23:56 +13:00
Sam Hemelryk 7b88b81a49 MDL-31631 navigation: Removed caching of activities and sections arrays in favour of relying on cminfo caching 2012-03-30 10:22:56 +13:00
Sam Hemelryk 4b023f2a10 MDL-32018 mod_wiki: Fixed up whitespace after peer-review 2012-03-30 10:21:32 +13:00
Sam Hemelryk 2be11d5faf MDL-32018 mod_wiki: Fixed formatting of the page title so that is is consistent and secure 2012-03-30 10:21:32 +13:00
Sam Hemelryk d6105bc1e1 MDL-32018 mod_wiki: Improved form definitions to ensure they consistent and secure 2012-03-30 10:21:32 +13:00
Sam Hemelryk 7068811aa9 MDL-32264 theme_standard: Fixed multi-day calendar event border issue 2012-03-30 10:19:51 +13:00
Tim Hunt 2c92dc7bab MDL-32039 qeupgradehelper: fix typos in the lang strings 2012-03-29 21:38:24 +01:00
Tim Hunt 0971dd7939 MDL-32201 question export: use qformat_xml::write_answer in base class
Without this, images in answers were not being written to the export
file for questions using extra_answer_fields.
2012-03-29 15:20:17 +01:00
David Mudrak 5e9050d1fb MDL-32258 database module does not have any data_cron() function to execute 2012-03-29 16:02:54 +02:00
David Mudrak d55cca19cf MDL-32256 quiz_cron() now returns true as expected by the current API 2012-03-29 15:52:40 +02:00
Tim Hunt 0175c5efaa MDL-32240 quiz editing: check permissions questions are added.
We also check permissions when removing questions from the quiz, so that
we do not let users make mistakes they cannot immediately undo.

Conflicts:

	mod/quiz/editlib.php
2012-03-29 14:52:19 +01:00
Tim Hunt 29e247e44e MDL-32239 question bank: wrong cap checks editing/viewing quesitions
None of these problems affect the default roles. They only occur when
the permissions have been edited to allow restricted subsets of the
question capabilities.

In some cases, things that the restriced subset of capabilities should
have allowed were blocked by errors. In other cases, users were allowed
to do more than they should bave been due to failures to check the
right capabilities in the right places.

For full details, see the bug report.

Two of the bugs were previously reported separately as MDL-26395 and
MDL-27232.
2012-03-29 14:34:09 +01:00
Tim Hunt 112bbb8ff4 MDL-32246 question export: should cope with unrecognised qtypes.
If a question is of an unrecognised type, then we just omit it from the export.
2012-03-29 14:09:19 +01:00
Tim Hunt e4a8f90479 MDL-32220 question import: files sometimes stored in the wrong context.
Sadly, this involves a small API change, but I don't believe anyone was
using the argument I had to remove (because we were sometimes passing a
wrong value, and there is not way to compute the right value at that
point in the code.)

Also sadly, the code to compute the context we are importing into is now
rather spaghetti-like, but it works.

Conflicts:

	question/format/examview/format.php
	question/format/learnwise/format.php
	question/format/webct/format.php
2012-03-29 14:08:52 +01:00
Eloy Lafuente (stronk7) 58db57ad53 weekly release 2.2.2+ 2012-03-29 13:25:05 +02:00
Eloy Lafuente (stronk7) cf6b626f39 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-03-29 13:20:12 +02:00
Dan Poltawski bddec3c1d6 Revert "MDL-31914 Ensure that completion criteria are deleted when removing a course module"
This reverts commit 3bf0bb64fd.
2012-03-29 15:58:08 +08:00
AMOS bot 340691baab Automatically generated installer lang files 2012-03-29 00:31:47 +00:00
Marina Glancy 67ace38c82 MDL-31789: Allowing context object to be passed to JS using json_encode()
Classes with magic properties such as context do not pass through json_encode().
The solution is to implement iterator in such classes and convert what we
feed to json_encode to array using 'foreach' before we pass it to json_encode():
- class context implements IteratorAggregate
- added function convert_to_array() that converts anything to array
- before calling json_encode we convert the argument to array
2012-03-28 11:43:46 +08:00
M Kassaei 4bc0b067b6 MDL-32214 quiz regrading: with many attempts, PHP runs out of memory 2012-03-27 16:15:25 +01:00
Dan Poltawski 9d0610f0f3 MDL-31775 lesson: fix undefined variable warnings 2012-03-27 20:02:48 +08:00
Andrew Robert Nicols 3bf0bb64fd MDL-31914 Ensure that completion criteria are deleted when removing a course module
Conflicts:

	lib/db/upgrade.php
	version.php
2012-03-27 10:28:38 +02:00
Dan Poltawski 59fccfb0cf Merge branch 'MDL-32028_m22' of git://github.com/nebgor/moodle into MOODLE_22_STABLE 2012-03-27 14:47:44 +08:00
Aparup Banerjee 0161e20b65 Merge branch 'wip-MDL-32106-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-03-27 10:10:19 +08:00
Tim Lock da496c52f8 MDL-31869: Searching for users in messaging with multiple roles generates a warning 2012-03-27 10:00:29 +08:00
Sam Hemelryk ec202ddbba Merge branch 'MDL-22510-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-03-27 11:03:08 +13:00
Sam Hemelryk 015c334a73 Merge branch 'm22_MDL-32147' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-03-27 09:51:28 +13:00
Dan Poltawski e0f6644dc0 Merge branch 'MDL-31775_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-03-26 14:41:46 +08:00
Dan Poltawski 26420be610 Merge branch 'MDL-32172_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-03-26 12:22:57 +08:00
Dan Poltawski 4270267ee9 Merge branch 'm22_MDL-31856_choice_responses_inconsistently_displayed' of git://github.com/kanikagoyal/moodle into MOODLE_22_STABLE 2012-03-26 12:11:18 +08:00
Dan Poltawski 55878aa09b Merge branch 'MDL-27710_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-03-26 11:27:38 +08:00
Marina Glancy e30281eed5 MDL-32106: fixed JS bug - when html element did not exist the script stopped 2012-03-26 10:48:08 +08:00
Ankit Agarwal d06b2e0c89 MDL-22510 libraries: Set wantsurl only when $setwantsurltome is set in
require_login
2012-03-26 08:56:17 +08:00
Iurii Kucherov 071746fb4a MDL-31513 rename 'Edit service' to 'Save changes' 2012-03-26 12:12:08 +13:00
Andrew Robert Nicols 07435fc117 MDL-32142 Add missing langstring for section backups 2012-03-26 12:01:50 +13:00
Sam Hemelryk 2733a8c4d5 Merge branch 'wip-mdl-29331-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-03-26 11:57:29 +13:00
Rajesh Taneja ea496d1a00 MDL-31903 course: Title on highlight and hide icon should be only added in ie 2012-03-26 11:45:58 +13:00
Rajesh Taneja f6fd27e70a MDL-31903 course: Highlight icon will get iniatlised properly 2012-03-26 11:45:58 +13:00
Rajesh Taneja e06bc8c074 MDL-31903 course: update patch to fix course highlight icon and title toggle 2012-03-26 11:45:58 +13:00
Juho Viitasalo 46424df47a MDL-31903 course: Fixed course highlight icon and title toggle 2012-03-26 11:45:58 +13:00
Sam Hemelryk abdbeec6bb Merge branch 'MDL-29400' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-03-26 11:19:27 +13:00
Ruslan Kabalin 772c720527 MDL-32026 messaging: Fix non-existing variable in the error output 2012-03-26 11:14:12 +13:00
Mary Evans 4cfd77fc0e MDL-30019 theme_fusion: fix for mod-assignment-submission page by reducing font-size and page wapper padding 2012-03-25 08:24:22 +01:00
AMOS bot 7ec66c7da8 Merge branch 'MOODLE_22_STABLE' into install_22_STABLE 2012-03-24 00:32:16 +00:00
Andrew Robert Nicols 44f2c95717 MDL-32164 Add string for file encoding
AMOS BEGIN
  CPY [encoding,tool_uploaduser],[fileencoding,mod_data]
AMOS END
2012-03-23 09:54:59 +00:00
Rossiani Wijaya a69d0091fa MDL-32172 Lesson Module: add variable initialization for 2012-03-23 15:39:12 +08:00
Rajesh Taneja c0254bafa8 MDL-29331 Users: Participants list with user_details now show check box for bluk operation 2012-03-23 11:28:58 +08:00
AMOS bot e8e1b85e72 Automatically generated installer lang files 2012-03-23 00:31:45 +00:00
Sam Hemelryk a81e8c47f1 weekly release 2.2.2+ 2012-03-23 12:19:07 +13:00
Sam Hemelryk 292f509cff Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-03-23 12:11:03 +13:00
Dan Marsden 7ebb628d8d MDL-32147 - use correct 404 for server type 2012-03-23 10:00:31 +13:00
Dan Marsden ef1889484b MDL-32147 SCORM improve performance of 404s for files inside SCORM packages. 2012-03-23 09:44:32 +13:00
Kanika Goyal 4941396825 MDL-31856, if choice not open, responses inconsistently displayed 2012-03-22 18:57:49 +05:30
Sam Hemelryk 366d7c0aba MDL-31528 categories: Fixed up typo 2012-03-22 09:45:45 +13:00
Sam Hemelryk 11c86239b7 MDL-31528 category: Fixed use of lang_string class 2012-03-21 14:28:37 +13:00
Sam Hemelryk 89399cb129 Merge branch 'wip-mdl-31640-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-03-21 09:50:13 +13:00
Sam Hemelryk 0d2001b756 Merge branch 'MDL-28952-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-03-21 09:29:12 +13:00
Andrew Robert Nicols 9c6d59285e MDL-32065 Allow feedback images to be themed 2012-03-21 09:25:22 +13:00
Dan Poltawski 91e79a37cc Merge branch 'MDL-31266_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-03-20 21:45:03 +08:00
Rossiani Wijaya 9530780571 MDL-31775 Lesson Module: fixed start at last page seen bug 2012-03-20 17:36:21 +08:00
Aparup Banerjee a57b5479db MDL-29848 glossary: fixed whitespace 2012-03-20 16:12:54 +08:00
Aparup Banerjee 6a680dd4aa Merge branch 'MDL-29848-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-03-20 16:12:21 +08:00
Rossiani Wijaya a8e1b6b3ef MDL-27710 lesson module: add the following jump options: unseen branch page, random page and random branch 2012-03-20 15:20:08 +08:00
Andrew Davis e9ed7e0ed0 MDL-31818 grade: removed some broken code to do with overriding students per page, added a post variable so the page isnt lost when submitting grades 2012-03-20 13:24:36 +08:00
Ankit Agarwal 9f84da6969 MDL-28592 blocks: changing the arguments to moodle_url::out() 2012-03-20 10:58:56 +08:00
Aparup Banerjee fbc708dc4d Merge branch 'wip-MDL-31528-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-03-20 10:10:11 +08:00
Dan Poltawski 507e6a2eda MDL-29400 assignment: Require a file to be uploaded in form
Don't display 'File uploaded successfully' when no file uploaded for
both upload and uploadsingle
2012-03-20 09:06:13 +08:00
Sam Hemelryk dff9c69fa8 Merge branch 'wip-MDL-32036-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-03-20 13:41:20 +13:00
Sam Hemelryk 26777ab2c3 Merge branch 'wip-MDL-32037-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-03-20 13:33:17 +13:00
Sam Hemelryk e9d7fb3a88 Merge branch 'w12_MDL-32071_m22_dbfamily' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-20 11:40:01 +13:00
Sam Hemelryk e6c9fdb384 Merge branch 'w12_MDL-32079_m22_folderrev' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-20 11:34:09 +13:00
M Kassaei cff8f5db55 MDL-32053 question: Question bank table displayed inconsistently 2012-03-20 11:01:21 +13:00
M Kassaei 5691235ace MDL-32048 mod_quiz: Question bank select/deselect all shows strange behaviour in IE 2012-03-20 10:56:02 +13:00
Sam Hemelryk 33ce9928d8 Merge branch 'MDL-32064_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-03-20 10:37:27 +13:00
Sam Hemelryk 2cd9cfcc97 Merge branch 'MDL-32084_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-03-19 20:38:14 +13:00
Sam Hemelryk a440a25c64 Merge branch 'w12_MDL-32090_m22_groupui' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-19 20:33:38 +13:00
Petr Skoda 59307a664c MDL-27553 admin: Fixed override bug 2012-03-19 20:21:52 +13:00
Rajesh Taneja 42ec1aa258 MDL-31640 course: removed extra error message, perpage is set properly, modulelink hidden field, and new context call is used. 2012-03-19 15:17:37 +08:00
Rajesh Taneja 246e844e5f MDL-31640 course: Move to, edit and search functionality in search.php is fixed with proper permission check 2012-03-19 15:17:31 +08:00
Petr Skoda ad6c9ad223 MDL-31703 allow serving of JavaScript from unsupported '/' dirroot 2012-03-19 20:16:49 +13:00
Sam Hemelryk 56f55380a9 Merge branch 'wip-mdl-26674-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-03-19 20:06:28 +13:00
Sam Hemelryk aa7574545f MDL-31528 navigation: Fixed up missing break and optimised category.php 2012-03-19 19:32:43 +13:00
Sam Hemelryk 739d5c91b9 MDL-31984 Fixed whitespace during integration 2012-03-19 19:12:31 +13:00
Brian Jorgensen 2e83093eba MDL-31984: add debugging message if theme renderer file is missnamed 2012-03-19 19:12:30 +13:00
Rajesh Taneja 2e32076884 MDL-26674 wiki2.0: cleaned wiki event logging patch 2012-03-19 11:20:17 +08:00
Diane Villemure e10faa46a6 MDL-26674 wiki2.0: Fixed wiki activity log 2012-03-19 11:20:11 +08:00
Sam Hemelryk 8b66d25681 Merge branch 'wip-MDL-27064-stable22' of git://github.com/phalacee/moodle into MOODLE_22_STABLE 2012-03-19 15:48:52 +13:00
Andrew Robert Nicols 51ffccda4d MDL-32004 Set the defaultrequestcategory correctly when deleting/creating the default category 2012-03-19 14:38:48 +13:00
Sam Hemelryk fc109fac2d Merge branch 'MDL-28187_messaging_nav_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-03-19 14:14:17 +13:00
Sam Hemelryk 3905c1f75b Merge branch 'MDL-31835_recent_conversations_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-03-19 14:07:05 +13:00
AMOS bot 2c4e52a7df Automatically generated installer lang files 2012-03-19 00:31:50 +00:00
Sam Hemelryk fb2e8f82c9 Merge branch 'MDL-30890_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-03-19 10:27:22 +13:00
Mary Evans ce539ad701 MDL-32084 theme_fusion: removed default tagline in frontpage.php and changed configtextarea to configtext in settings.php 2012-03-17 21:46:52 +00:00
Andrew Davis 4bf46b6e96 MDL-28187 message: fixed up $PAGE->set_url() in /message/index.php so the nav highlighted properly 2012-03-17 11:59:29 +07:00
AMOS bot 5c1a9d64ac Automatically generated installer lang files 2012-03-17 00:31:43 +00:00
Petr Skoda 466b9bad29 MDL-32090 fix invalid group members url
Credit goes to Jean-Philippe Gaudreau.
2012-03-16 20:12:27 +01:00
Tim Hunt b1ddd85ca1 MDL-32064 quiz navigation: JS form submit must fire submit event handlers. 2012-03-16 15:00:51 +00:00
Petr Skoda 1f373dfef0 MDL-32071 fix incorrect get_dbfamily() call 2012-03-16 10:31:30 +01:00
Petr Skoda 69439955e6 MDL-32071 fix fatal problems in experimental forum_usetextsearches 2012-03-16 10:30:14 +01:00
Petr Skoda 96f953cbe2 MDL-32079 folder revision must be incremented after any file change 2012-03-16 10:11:40 +01:00
Ankit Agarwal 0ce936b081 MDL-28952 blocks: Fixing the extra escaping issue with profile links 2012-03-16 15:44:51 +08:00
Andrew Davis c232e12bf2 MDL-31835 message: added a view conversation type link after each conversation on the recent conversation screen 2012-03-16 13:28:08 +07:00
Sam Hemelryk fa0f103c89 MDL-31528 navigation: Tidied up page for viewing and managing categories 2012-03-16 10:35:53 +13:00
Sam Hemelryk fc08a60dc1 MDL-31528 navigation: Fixed up navbar generation when editing categories 2012-03-16 10:35:53 +13:00
Sam Hemelryk 51f205a7e3 MDL-31528 navigation: Fixed up generation for category contexts 2012-03-16 10:35:53 +13:00
Tim Hunt 7d0f9cef34 MDL-31594 question manual grading: did not handle comma as decimal. 2012-03-15 18:48:42 +00:00
Eloy Lafuente (stronk7) 832626da76 weekly release 2.2.2+ 2012-03-15 11:46:12 +01:00
Eloy Lafuente (stronk7) f51ba2033b Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-03-15 11:42:06 +01:00
Rossiani Wijaya 3db8d8499e MDL-30890 accessibility compliance: add summary to calendar table 2012-03-15 17:09:34 +08:00
Aparup Banerjee be626b193e MDL-32028 Documentation : removed legacy 1.x documentation 2012-03-15 15:20:08 +08:00
Jason Fowler 658762de67 MDL-27064 - Blog - Changing the link text for different levels of blog entries 2012-03-15 08:52:46 +08:00
AMOS bot 494884fe7c Automatically generated installer lang files 2012-03-15 00:31:52 +00:00
Charles Fulton 104ed36274 MDL-26243 calendar: display correct number of repeated events 2012-03-15 00:41:10 +01:00
Eloy Lafuente (stronk7) 27c202c1c0 MDL-31911 admin tools: moved loop after tools admin category created 2012-03-15 00:27:41 +01:00
Eloy Lafuente (stronk7) 3ef24c6f3b MDL-28972 formslib: whitespace fixes 2012-03-14 18:11:24 +01:00
Marina Glancy 9616f3f71d MDL-32036: Repositories wikimedia and youtube lack paging
repositories wikimedia and youtube:
- save last search in
- process parameter 'page'
- remove buttons 'Refresh', 'Search' and 'Logout' since they don't have meaning
filepicker:
- allow unknown number of pages (['pages'] = -1), show one 'Next' page after the current (both JS and non-JS modes)
repository wikimedia:
- add non-AJAX search form to make it work with JS disabled
2012-03-14 14:26:21 +08:00
Marina Glancy e6be794910 MDL-32037: MDL-32037: After displaying error message filepicker could not send proper request to server
We need to make sure that code executed on error does not create more requests and
especially does not create the same request that resulted with error. So now by default
filepicker will clear the right side of the window if repository_ajax.php returned an
error.
Also fixed an 'invalidsesskey' error string.
2012-03-14 13:12:59 +08:00
Sam Hemelryk b87ca9b713 Merge branch 'wip-mdl-28972-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-03-14 14:39:59 +13:00
Davo Smith 7f40235c18 MDL-31853 Fix pagelayout problem with admin_externalpage_setup 2012-03-14 09:24:51 +08:00
AMOS bot 378ef32da0 Automatically generated installer lang files 2012-03-14 00:31:53 +00:00
Davo Smith da9cfb9630 MDL-29147 Quickform fixed insertElementBefore to ignore duplicate unnamed elements 2012-03-14 11:54:42 +13:00
Sam Hemelryk 999e6901c8 Merge branch 'MDL-29440' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-03-14 11:30:06 +13:00
Kordan b2ace0016f MDL-31975 theme_formal_white: minor css cleanup 2012-03-14 11:24:01 +13:00
Ankit Agarwal d22a68bd18 MDL-28998 libraries: Using default value of 0 for userid during login 2012-03-14 10:47:40 +13:00
Eloy Lafuente (stronk7) a784430288 Merge branch 'MDL-31981_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-03-13 18:09:24 +01:00
Andrew Davis 08b6184488 MDL-31834 message: fixed up some not quite correct usage of moodle/site:readallmessages 2012-03-13 16:49:30 +01:00
Eloy Lafuente (stronk7) 3da552e27c Merge branch 'wip-MDL-31175-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-03-13 16:16:18 +01:00
Eloy Lafuente (stronk7) 489981eaba MDL-31718 add a few more tests to check that lens and tags are properly handled
Conflicts:

	lib/simpletest/testmoodlelib.php
2012-03-13 13:16:47 +01:00
Eloy Lafuente (stronk7) 6014124ea3 Merge branch 'w11_MDL-31718_m22_shortentext' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-13 13:14:48 +01:00
Aparup Banerjee c04109fcb1 Merge branch 'wip-mdl-27862-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-03-13 15:28:12 +08:00
Rossiani Wijaya 7f7aac7ad1 MDL-31266 Lesson module: Improve feedback so that the responses are concatenated instead of overwritten 2012-03-13 14:54:39 +08:00
Aparup Banerjee 298dd4ca5d Merge branch 'wip-mdl-30817-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-03-13 11:51:54 +08:00
Aparup Banerjee 08ba77f32e Merge branch 'MDL-30867_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-03-13 11:32:29 +08:00
Mary Evans 33e69c39ef MDL-31008 themes: (base theme) reversed MDL-26712 by making dimmed objects grey and added new rule for dimmed activity label text to give 50% transparancy instead 2012-03-13 10:58:25 +08:00
Aparup Banerjee d047098e46 MDL-31910 Quiz : fixed whitespace 2012-03-13 10:15:30 +08:00
M Kassaei 52b26f8a5b MDL-31910 Quiz : Error on Manual Grading report 2012-03-13 10:15:24 +08:00
Davo Smith 66e23d6a6c MDL-31935 Fixed restore backup link in course search 2012-03-13 10:01:31 +08:00
Ruslan Kabalin e9f2ede177 MDL-31808 Upload assignment: fix user feedback display 2012-03-13 14:10:31 +13:00
Ruslan Kabalin 861de3cda1 MDL-31917 Improve assigment submission usability
Say 'View' if assignment has been graded via gradebook and changing
grades via submissions interface is not possible.
2012-03-13 14:05:08 +13:00
Ruslan Kabalin 2b6a38f5c2 MDL-31919 Fix assignment overview output to respect gradebook grading.
Currenly, if assigment has been graded in gradebook only, in the assigment
overview it is listed as not graded.
2012-03-13 14:01:04 +13:00
Eloy Lafuente (stronk7) 3ad6f443b4 Merge branch 'w11_MDL-31913_m22_tinymce' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-13 00:35:19 +01:00
Sam Hemelryk 22dde645f4 Merge branch 'w11_MDL-27457_m22_enrolnorecover' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-13 11:59:53 +13:00
Sam Hemelryk d254ae8cfe Merge branch 'MDL-30298_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-03-13 11:56:18 +13:00
Sam Hemelryk ec2b87aede Merge branch 'MDL-31702_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-03-13 10:33:39 +13:00
Eloy Lafuente (stronk7) 0b1579b2d8 Merge branch 'w11_MDL-31956_m22_paypal' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-12 21:37:01 +01:00
Michael Aherne 07f641f250 MDL-31979 Typo in config-dist.php 2012-03-12 20:18:47 +01:00
Eloy Lafuente (stronk7) 33d1075328 Merge branch 'w11_MDL-31595_m22_enrolme' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-12 18:01:01 +01:00
Petr Skoda 1b75985a39 MDL-31595 improve enrol link comments 2012-03-12 16:49:22 +01:00
Eloy Lafuente (stronk7) 3e6e265d1a Merge branch 'w11_MDL-31815_m22_confirmemail' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-12 16:34:13 +01:00
Eloy Lafuente (stronk7) 7fabd5af5c Merge branch 'w11_MDL-31534_m22_pageinitroot' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-12 15:49:30 +01:00
Petr Skoda c81e5bc9cc MDL-31534 init PAGE before require_login() 2012-03-12 13:59:08 +01:00
Eloy Lafuente (stronk7) 13cd1994af Merge branch 'w11_MDL-31494_m22_adodblink' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-12 13:38:40 +01:00
Mary Evans 6ac047c7de MDL-30298 report_progress: adds outer wrapper with class no-overflow to report table so as to enable horizontal scroll bar 2012-03-12 10:45:55 +00:00
Jason Fowler f29d40dc03 MDL-27064 - Blog - Changing the link text for different levels of blog entries 2012-03-12 15:28:21 +08:00
Sam Hemelryk b3fe3fb6c8 Merge branch 'm22_MDL-31888' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE
Conflicts:
	mod/scorm/styles.css
2012-03-12 17:29:11 +13:00
Sam Hemelryk 12d0b6c5ae MDL-27304 mod_wiki: Fixed up phpdocs for globals 2012-03-12 17:20:48 +13:00
Sam Hemelryk 25ff180756 Merge branch 'MDL-27304-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-03-12 17:05:21 +13:00
Sam Hemelryk cbb8087b30 Merge branch 'MDL-31664-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-03-12 17:02:07 +13:00
Rajesh Taneja 030f323fbb MDL-28972 formslib: orignalvalue is considered and checkboxes are updated depending on orignalvalue of controller 2012-03-12 11:51:08 +08:00
Rajesh Taneja 10fd3cd054 MDL-28972 formslib: Checkbox controller will use yui to select and unselect checkboxes 2012-03-12 11:51:01 +08:00
Sam Hemelryk 840dc3cb94 Merge branch 'MDL-28997-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-03-12 15:26:21 +13:00
Rajesh Taneja 495baea515 MDL-27862 Themes: Device name first letter is capital and font is made similar to theme name font 2012-03-12 10:19:03 +08:00
Rajesh Taneja 7f2d783fad MDL-27862 Themes: clear theme cache button will redirect to the page on which it was pressed 2012-03-12 10:19:03 +08:00
Rajesh Taneja 1b99f0565a MDL-27862 Themes: replaced disabled use theme button with unset theme button 2012-03-12 10:19:03 +08:00
Rajesh Taneja f5ee52a7fe MDL-27862 Themes: Added button to un-select theme for devices, except default device 2012-03-12 10:19:03 +08:00
Rajesh Taneja 06d09486b5 MDL-27862 Themes: Strings updated on theme selection pages 2012-03-12 10:19:03 +08:00
Rajesh Taneja 337e7897de MDL-30817 activity_completion: Fixed title and alt string (on checkbox) to have module name prefixed 2012-03-12 10:17:12 +08:00
Andrew Robert Nicols aacacde221 MDL-31811 Add/Correct checks on activity read-only periods 2012-03-12 15:15:38 +13:00
Andrew Robert Nicols 0c1e3a753b MDL-31877 Correct get_users exception 2012-03-12 14:57:21 +13:00
Andrew Robert Nicols 15958e8677 MDL-31918 Use cached module info for activity completion report 2012-03-12 14:55:13 +13:00
Dan Poltawski eb1f147000 MDL-29440 calendar: iCal export don't allow html in description export 2012-03-12 09:51:07 +08:00
Andrew Robert Nicols cfaa50a61d MDL-31923 Correctly respect hiddenfields and capabilities 2012-03-12 14:46:34 +13:00
Sam Hemelryk 7ac10ac609 Merge branch 'MDL-31841_feedback_align_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-03-12 14:22:10 +13:00
Sam Hemelryk 113b864ffc Merge branch 'wip-MDL-30906-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-03-12 14:19:50 +13:00
Sam Hemelryk 7303944957 MDL-31175 backup: Fixed undefined in register_dependency 2012-03-12 09:43:00 +13:00
Petr Skoda dd21fb11f0 MDL-31718 utf-8 support in shorten_text() 2012-03-11 21:32:07 +01:00
Mary Evans 10a6003a3a MDL-30298 report_completion: adds outer wrapper with class no-overflow to report table so as to enable horizontal scroll bar 2012-03-11 15:17:59 +00:00
Eloy Lafuente (stronk7) 476626d39e Moodle release 2.2.2 2012-03-11 16:00:29 +01:00
Mary Evans ed4a909035 MDL-30298 theme_binarius: adds horizontal scroll to report layout 2012-03-11 01:34:09 +00:00
Petr Skoda 2bf4996444 MDL-31956 fix enrol string components
Credit goes to Mark Nelson
2012-03-10 13:01:53 +01:00
Petr Skoda 4e68456832 MDL-31494 fix link to adodb driver docs
target="_bank" is valid again in html5, it does help a lot here no matter what legacy accessibility guides say…
2012-03-10 11:05:31 +01:00
Petr Skoda caec0405f4 MDL-31815 encode dots in confirm url which helps email clients with url highlighting 2012-03-10 10:47:19 +01:00
Petr Skoda 181918691c MDL-27457 fix JS error on enrol when grade history disabled 2012-03-10 09:59:58 +01:00
Petr Skoda 45962a179c MDL-31595 do not show enrolee link to guest account 2012-03-10 09:41:31 +01:00
Petr Skoda 61df8b24d2 MDL-30636 switch to new TinyMCE 3.4.9 2012-03-10 08:57:24 +01:00
Petr Skoda 5b585b8ddf MDL-30636 add TinyMCE 3.4.9 2012-03-10 08:57:24 +01:00
Tim Hunt 0aa433a054 MDL-31981 shortanswer qtype does not handle \* in correct response. 2012-03-09 19:01:59 +00:00
Tim Hunt 53e40ebe2d MDL-31702 quiz: clarify error message that has been confusing people. 2012-03-09 15:29:19 +00:00
Eloy Lafuente (stronk7) 5f51b09aec Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-03-09 11:56:33 +01:00
AMOS bot 4ed9533352 Automatically generated installer lang files 2012-03-09 11:54:16 +01:00
Eloy Lafuente (stronk7) 6c43ac23f8 weekly release 2.2.1+ 2012-03-09 11:13:49 +01:00
Eloy Lafuente (stronk7) 9be61d94fd Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-03-09 11:04:06 +01:00
Rossiani Wijaya f822433322 MDL-30867 Lesson module: fix lesson essay question formtting to be consistent with user selection 2012-03-09 17:36:44 +08:00
Eloy Lafuente (stronk7) c44c8eb96b Merge branch 'wip-MDL-31248-MOODLE_22_STABLE-v3' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-03-09 09:46:35 +01:00
Eloy Lafuente (stronk7) be0b3ea0ea Revert "MDL-31248 - lib - Alteration to the rc4encrypt function to allow for old password use."
This reverts commit 6f3e759ecb.
2012-03-09 09:37:43 +01:00
Ankit Agarwal 44b4c10a47 MDL-28998 libraries: Adding validation to customisable profile fields during signup 2012-03-09 14:51:29 +08:00
Adrian Greeve 9e7fa5f2bb MDL-31248 - lib - Retaining the old password key and creating a new cookie prefix. 2012-03-09 13:37:40 +08:00
Eloy Lafuente (stronk7) 009d72139f Revert "[MDL-31708] - wiki 2.0 non-group member can see edit option in navigation block."
This reverts commit c583993d8c.
2012-03-09 02:21:30 +01:00
Eloy Lafuente (stronk7) 478207515c Revert "MDL-31708 wiki groups: whitespace fix"
This reverts commit 27da392f3c.
2012-03-09 02:21:26 +01:00
Charles Fulton b1f60fe2f7 MDL-27304 wiki: link to user's course profile 2012-03-08 05:07:06 -08:00
Andrew Davis 9d75f3a0b9 MDL-31841 grade: prevented the feedback column on the user report from being centered 2012-03-08 15:24:19 +07:00
Eloy Lafuente (stronk7) 1312ff8740 Merge branch 'wip-MDL-31248-MOODLE_22_STABLE-v2' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-03-08 02:28:41 +01:00
AMOS bot bb3b8185a9 Automatically generated installer lang files 2012-03-08 00:31:39 +00:00
Adrian Greeve 6f3e759ecb MDL-31248 - lib - Alteration to the rc4encrypt function to allow for old password use. 2012-03-08 08:08:05 +08:00
Eloy Lafuente (stronk7) 2615855713 Merge branch 'wip-MDL-29086-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-03-08 00:48:22 +01:00
Eloy Lafuente (stronk7) c904abc752 Merge branch 'MDL-31712_M22' of git://github.com/kordan/moodle into MOODLE_22_STABLE 2012-03-07 15:40:50 +01:00
Petr Skoda bfcb69ef70 MDL-31689 fix moodle_database:execute() description
Conflicts:

	lib/dml/moodle_database.php
2012-03-07 12:43:00 +01:00
Eloy Lafuente (stronk7) 4d4e00682b MDL-31832 CLI upgrade will return 0 exit status if no upgrade is needed
Discussed with David, both points were valid but finally
we agreed about to consider the "no upgrade needed" exit
a normal/succesful one, mainly because it keeps previous
behavior the same (exit non-zero only for real errors).
2012-03-07 11:02:47 +01:00
David Mudrak 1acc431b98 MDL-31832 CLI upgrade checks if the upgrade is actually needed 2012-03-07 11:02:10 +01:00
Eloy Lafuente (stronk7) 251ed425e4 MDL-28364 whitespace fixes 2012-03-07 04:01:36 +01:00
Eloy Lafuente (stronk7) 5da8f5d11e Merge branch 'MDL-28364_22' of git://github.com/jonof/moodle into MOODLE_22_STABLE 2012-03-07 04:01:09 +01:00
Eloy Lafuente (stronk7) 49b4703187 MDL-23787 data: Init 2 arrays (global scope) that may conflict with other global scope code 2012-03-07 01:49:07 +01:00
Marina Glancy 0736188d75 MDL-23787 added possibility to embed images into textarea fields in database activity 2012-03-07 01:49:02 +01:00
AMOS bot 20640e3597 Automatically generated installer lang files 2012-03-07 00:31:46 +00:00
Ruslan Kabalin 1555c3d89f MDL-31255 Fix move of highlighted section when JS is off 2012-03-07 00:19:05 +01:00
Sam Hemelryk deaf559402 Merge branch 'MDL-28387-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-03-07 11:46:32 +13:00
Gootvilig David Hai 8d11716bfc MDL-31876 questionlib: fix question_has_capability_on memory bloat 2012-03-06 21:31:55 +01:00
Eloy Lafuente (stronk7) a9b03dc661 Merge branch 'MDL-31829_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-03-06 21:23:44 +01:00
Dan Marsden cbf6a4989e MDL-31888 SCORM prevent scrollbars on yui div 2012-03-07 09:03:14 +13:00
Eloy Lafuente (stronk7) fc7776f50a Merge branch 'w10_MDL-31785_m22_htmlpurifier' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-06 13:11:41 +01:00
Eloy Lafuente (stronk7) 27da392f3c MDL-31708 wiki groups: whitespace fix 2012-03-06 11:46:22 +01:00
Adrian Greeve 35d565ad8f MDL-30906 - course - Changed the <hx> tags to follow a sequential order 2012-03-06 14:54:49 +08:00
Gilles-Philippe Leblanc c583993d8c [MDL-31708] - wiki 2.0 non-group member can see edit option in navigation block. 2012-03-06 10:20:51 +08:00
Sam Hemelryk bd87189222 Merge branch 'MDL-27764_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-03-06 10:19:00 +13:00
Mary Evans ad7ecc08d3 MDL-31328_master theme_sky_high: fixed report layout and related files + updated css + added horizontal scroll 2012-03-06 09:59:27 +13:00
Sam Hemelryk 575a553094 Merge branch 'MDL-31828_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-03-05 17:03:20 +13:00
Sam Hemelryk 7d6c1a19bb Merge branch 'w10_MDL-31807_m22_cohort' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-03-05 16:56:05 +13:00
Sam Hemelryk 94cfcb36a5 Merge branch 'MDL-29347-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-03-05 16:13:08 +13:00
Sam Hemelryk ec5a34443c MDL-30724 mod_assignment: Minor fixes during integration 2012-03-05 16:09:50 +13:00
Sam Hemelryk 0c0ae1c696 Merge branch '22_MDL-30724_count_real_submissions_eloy_suggests' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-03-05 16:08:30 +13:00
Tony Levi 3d1573914c MDL-31819: admin: allow install to proceed when multiple admins exist already 2012-03-05 15:54:39 +13:00
Sam Hemelryk 9772d6d376 MDL-31794 theme_formalwhite: Fixed up tabs 2012-03-05 15:29:27 +13:00
Sam Hemelryk f8c24829ab Merge branch 'MDL-31707_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-03-05 15:21:19 +13:00
Kordan 141f588d8e MDL-29367 theme_formalwhite: Lines between RSS and upcoming events 2012-03-05 15:15:57 +13:00
Kordan 835ecea7fe MDL-31786 theme_formalwhite: bigger userid and password fields size in login page 2012-03-05 15:07:40 +13:00
kordan 053a3ad67d MDL-31794 theme_formalwhite: let tab-bar give evidence of the current tab and page 2012-03-05 15:01:50 +13:00
Eloy Lafuente (stronk7) dfa28b875d MDL-27764 restore - always restore as much info as possible (1.9 approach)
In 2.0 we had reduced the types of restore operations where we allow
to load the section names and section descriptions, only proceeding
when restoring to new course or to existing course, deleting.

With this patch, we change to the old 1.9 way, that was to restore
the section information always, no matter of the type of restore
operation (course restore, import, to new or to existing course,
deleting or adding). The only exception is that it's always checked that
the target section names and descriptions are empty.
2012-03-05 02:48:56 +01:00
Sam Hemelryk 4e738cab73 Merge branch 'MDL-26037_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-03-05 14:03:26 +13:00
Sam Hemelryk 62a2c4fd22 Merge branch 'MDL-29248_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-03-05 13:54:27 +13:00
Kordan f8c083e968 MDL-29127 theme_formalwhite: highlight for unread forum post 2012-03-05 12:37:37 +13:00
Sam Hemelryk bf4649edb5 Merge branch 'm22_MDL-31749' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-03-05 12:30:05 +13:00
Sam Hemelryk e6f2103ce7 Merge branch 'MDL-24235-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-03-05 12:22:19 +13:00
Sam Hemelryk fecb44d7b5 Merge branch 'MDL-31806-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-03-05 12:05:39 +13:00
Sam Hemelryk c71b744a43 Merge branch 'MDL-30893-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-03-05 11:52:45 +13:00
Sam Hemelryk 5c3c0a8ce5 Merge branch 'MDL-31466-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-03-05 11:30:53 +13:00
AMOS bot c3f525dc49 Automatically generated installer lang files 2012-03-04 00:31:48 +00:00
Petr Skoda 9e8fe8469b MDL-31785 fix and improve htmlpurifier tests 2012-03-03 11:25:34 +01:00
Petr Skoda 54ef6f4b01 MDL-31785 import HTMLPurifier 4.4.0+
Includes one extra fix for _blank 8c9d461a6259d7b8ac4ae5c9c9e95ab176cfcda3 compared to 4.4.0 release.
2012-03-03 11:25:34 +01:00
Petr Skoda 0908a1a327 MDL-31807 fix invalid nulls in cohort components
Credit goes to Stephen.
2012-03-03 10:57:16 +01:00
AMOS bot 5cb002eaa6 Automatically generated installer lang files 2012-03-03 00:31:38 +00:00
Charles Fulton 683c8259ea MDL-24235 bennu: remove dependency on mbstring from library 2012-03-02 07:59:15 -08:00
Charles Fulton a7bc85ea03 MDL-29848 glossary: get proper context for comments on exported entry 2012-03-02 07:48:42 -08:00
Adrian Greeve d1deac2d80 MDL-29086 - data - Fix for allowing the deletion of database activity presets.
Thank you to Matthias Hunstock for providing the patch for this.
2012-03-02 14:32:37 +08:00
Ankit Agarwal 43956b2c68 MDL-28387 logs: Log data when a user is deleted 2012-03-02 13:18:32 +08:00
Ankit Agarwal 72ffaf4e39 MDL-31466 Tags Adding a capability check to make sure hidden courses are not displayed in tag search results 2012-03-02 12:09:59 +08:00
Ankit Agarwal d2943aa711 MDL-30893 Accessibility Submit button in forgot password page now have separate ids 2012-03-02 11:30:07 +08:00
Andrew Davis d736ed90f7 MDL-31353 grade: added a missing YUI requires 2012-03-02 09:48:03 +07:00
Dan Marsden 50147ef444 MDL-31749 - remove extra space from scorm pop-up - especially for afterburner theme 2012-03-02 09:13:32 +13:00
Tim Hunt 2db787e242 MDL-31829 question engine SQL typo breaks some regrades.
Also, some MySQL-only code had not been updated.

This problem only affected a small minority of question attempts, like
this:
1. Suppose you have a shortanswer question with correct answer 'Toad'
and some hints.
2. Suppose a student attempts this using the interactive behaviour and
on the first try responds 'Frog', and on the second try responds 'Toad'.
3. Then suppose the teacher edits the question to make 'Frog' correct.
4. Then, when the quiz is regraded, the question_attempt_step for the
second try will need to be deleted. That is where the buggy code was.
2012-03-01 12:38:51 +00:00
Eloy Lafuente (stronk7) dff99bd6c5 MDL-26037 restore: fixes for mssql, php 5.4 and small improvs 2012-03-01 13:19:24 +01:00
Tony Levi 80d78f3aae MDL-26037: import: display search box even when no courses are currently displayed 2012-03-01 13:19:24 +01:00
Tony Levi 9b3a01563c MDL-26037: restore/import: check through all courses instead of only first 250 2012-03-01 13:19:23 +01:00
Eloy Lafuente (stronk7) 9f4ad8a5dd MDL-29248 backup: take rid of the setting and code handling the 'private' user filearea 2012-03-01 13:16:01 +01:00
Eloy Lafuente (stronk7) 6339bf1051 MDL-29248 backup: delete user_files settings, lang strings and uses
Conflicts:

	admin/settings/courses.php
	version.php
2012-03-01 13:15:46 +01:00
Tim Hunt 21356da7ee MDL-31828 attachements to essay questions do not work on Oracle. 2012-03-01 12:12:14 +00:00
Eloy Lafuente (stronk7) ce3cd1f122 MDL-31707 environment - add check for the hash extension 2012-03-01 12:52:07 +01:00
Eloy Lafuente (stronk7) e356fb68fd weekly release 2.2.1+ 2012-03-01 11:30:35 +01:00
Eloy Lafuente (stronk7) e8681669bc Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-03-01 11:26:02 +01:00
Aparup Banerjee 6d29b2989f MDL-27793 themes : anomaly theme rtl+ltr login box element widths fixed to be acceptable for IE and FF. 2012-03-01 09:23:29 +01:00
Sam Hemelryk ebbb914346 Merge branch 'MDL-31831_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-03-01 14:34:52 +13:00
Eloy Lafuente (stronk7) ee3d7d8a71 MDL-31831 whitespace clean - take2 2012-03-01 02:07:51 +01:00
Charles Fulton 044cd0a0d6 MDL-31806 tags: remove second occurrence of id in query string 2012-02-29 05:19:34 -08:00
Aparup Banerjee 2e2ca2af54 MDL-25027 web service: moved validation to before changes to DB transaction. 2012-02-29 09:57:25 +01:00
Eloy Lafuente (stronk7) f2a6db61a9 Merge branch 'wip-mdl-29274-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-29 02:19:19 +01:00
Eloy Lafuente (stronk7) 3716fb55e1 Merge branch 'MDL-31748_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-02-29 02:10:48 +01:00
Eloy Lafuente (stronk7) cafbb73f5b Merge branch 'MDL-26496_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-02-29 02:06:07 +01:00
AMOS bot efd5bc7eb0 Automatically generated installer lang files 2012-02-29 00:31:17 +00:00
Eloy Lafuente (stronk7) 46ccd8b12b Merge branch 'wip-MDL-31738-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-02-29 00:30:27 +01:00
Eloy Lafuente (stronk7) 313f98c88a Merge branch 'MDL-25027_stable_consistency_fix_m22' of git://github.com/nebgor/moodle into MOODLE_22_STABLE 2012-02-28 17:34:12 +01:00
Aparup Banerjee 2e0d0590da Merge branch 'MDL-14837_show-time-on-no-duration-events_22_STABLE' of https://github.com/ncsu-delta/moodle into MOODLE_22_STABLE 2012-02-28 16:41:52 +08:00
Aparup Banerjee 91470a354e Merge branch '22_MDL-31419_fix_auth_typo' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-28 16:23:21 +08:00
Aparup Banerjee 01c7382881 Merge branch 'MDL-30878-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-28 15:37:36 +08:00
Aparup Banerjee 9a7310e80b Merge branch 'MDL-28386-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-02-28 14:42:08 +08:00
Dan Marsden 8b4e28f87e MDL-31086 Calendar : fix sql to get distinct list of courses 2012-02-28 14:37:10 +08:00
Aparup Banerjee 415dd485a5 Merge branch 'MDL-31335_mtrace_email_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-02-28 14:15:37 +08:00
Aparup Banerjee 844d4f0ce0 Merge branch 'wip-mdl-22896-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-28 13:48:40 +08:00
Aparup Banerjee fe4e706f3a Merge branch 'MDL-31399_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-02-28 12:05:20 +08:00
Gerard (Gerry) Caulfield ca3cfd88cc MDL-31419 Fixing "Suspended acount" typo in auth.php 2012-02-28 11:28:07 +08:00
Eloy Lafuente (stronk7) e61fabb720 Merge branch 'MDL-27793_m22' of git://github.com/nebgor/moodle into MOODLE_22_STABLE 2012-02-28 03:52:53 +01:00
Jonathon Fowler bb98f4fda3 MDL-28364 handle question formats that support multiple file types 2012-02-28 09:24:54 +10:00
Eloy Lafuente (stronk7) 845b165edf MDL-29161 weblib: added one more test about un-keyed array params 2012-02-27 22:21:57 +01:00
Eloy Lafuente (stronk7) aaa24bb35c Merge branch 'MDL-29161_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-02-27 22:21:50 +01:00
Eloy Lafuente (stronk7) 0c93bbde9e Merge branch 'MDL-31721_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-02-27 22:06:46 +01:00
Eloy Lafuente (stronk7) bd4b665ed6 Merge branch 'MDL-31729_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-02-27 19:02:42 +01:00
Eloy Lafuente (stronk7) edb03ff65b Merge branch 'MDL-29256-resource-format_22_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-02-27 18:54:35 +01:00
Eloy Lafuente (stronk7) 98e9b0f21e Merge branch 'MDL-29199' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-02-27 18:47:51 +01:00
Eloy Lafuente (stronk7) 515acf7914 Merge branch 'MDL-29229' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-02-27 17:07:24 +01:00
Eloy Lafuente (stronk7) 1415ba2319 Merge branch 'MDL-29523' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-02-27 16:51:54 +01:00
Eloy Lafuente (stronk7) bcf5427193 Merge branch 'MDL-29592' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-02-27 16:06:19 +01:00
Eloy Lafuente (stronk7) 0d40a799e5 Merge branch 'MDL-31348' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-02-27 15:57:09 +01:00
Eloy Lafuente (stronk7) 5775c7ec63 Merge branch 'MDL-31546' of git://github.com/danpoltawski/moodle into MOODLE_22_STABLE 2012-02-27 15:44:28 +01:00
Marina Glancy ccd6fa9e44 MDL-31738: added functions mod_xxx_get_file_info() to glossary and data modules 2012-02-27 14:14:03 +08:00
Gerard (Gerry) Caulfield 69beea7165 MDL-30724 Limit assignment_count_real_submissions() to only select real
submissions

I've also refactored some code so that it is more structured and allows
for easier overriding of function associated with counting submissions
and updated associated doc blocks.
2012-02-27 12:30:30 +08:00
Dongsheng Cai d049031e95 MDL-29347 core_enrol_get_enrolled_users web service should limit the number of participants - Jerome/Dongsheng 2012-02-27 11:45:04 +08:00
Sun Zhigang e91dd85ed7 MDL-29523 filemanager: Fix a hardcode string 2012-02-27 09:28:14 +08:00
AMOS bot 5b5ff2dac6 Automatically generated installer lang files 2012-02-27 00:31:17 +00:00
Dan Poltawski 170c23d2d2 MDL-29592 weblib: prevent warnings when $USER not set 2012-02-26 18:39:40 +08:00
Mary Evans 0bad02fd57 MDL-31748_master theme_afterburner: added min-width to fix missing horizontal scroll bar when page is reduced in browser window 2012-02-25 18:12:41 +00:00
Glenn Ansley afb0b3f421 MDL-14837 Calendar: Display start time on calendar events with no duration 2012-02-24 09:10:40 -05:00
Rajesh Taneja f013b576ec MDL-29274 blocks: people block will use course context for making url and not module context 2012-02-24 16:39:51 +08:00
Dan Poltawski ca69aa758f MDL-31651 course/info: Fix hardcoded string 2012-02-24 16:12:54 +08:00
Kordan f6df6e93db accessibility colors for formal_white M22 2012-02-24 07:35:56 +01:00
Dan Poltawski 9ee937eb33 MDL-29199 dml: fix query logging on Oracle
thanks to Jonathon Fowler for the fix
2012-02-24 11:55:14 +08:00
Dan Poltawski 08bcf220b3 MDL-31546 wiki: remove stray semicolon
causing errors on oracle

Thanks to Jonathon Fowler for the patch
2012-02-24 11:39:56 +08:00
Rajesh Taneja cd1a0a72a5 MDL-22896 libraries: Updated regular expression in html2text, for replacing unknown/unhandled entities 2012-02-24 10:10:08 +08:00
Adam Olley ed53f70413 MDL-29229 message: Set contactlist pull-down width to not exceed parent columns width 2012-02-24 10:08:55 +08:00
Aparup Banerjee f356ebc979 MDL-27793 Themes : review changes - removed .dir-rtl from .loginbox selector rule to be default css rule. made them same width too. 2012-02-24 09:52:40 +08:00
Aparup Banerjee 26c1694fdc MDL-27793 Themes : fixed "remember username" wrapping unnecessarily. 2012-02-24 09:52:40 +08:00
Aparup Banerjee 89ec652e10 MDL-27793 Themes : fixed base (and other themes) theme's loginbox
- fixed translated lengthy terms were being clipped
 - fixed clipping and positioning of loginbox in rtl and ltr languages both
2012-02-24 09:52:40 +08:00
AMOS bot 82f50464f1 Automatically generated installer lang files 2012-02-24 00:31:45 +00:00
Tim Hunt ea9f1a8faa MDL-31729 questions: files for hints are not moved or deleted.
The files that belong to the question hints are neither moved when the
question is moved to another context, nor deleted when the question is
deleted.

Oops! How come no one noticed that until today.
2012-02-23 12:04:30 +00:00
Tim Hunt db15713237 MDL-31721 question editing: improve working for Show num correct
AMOS BEGIN
 CPY [shownumpartscorrect,question],[shownumpartscorrectwhenfinished,question]
AMOS END
2012-02-23 12:04:10 +00:00
Tim Hunt 94cd982f84 MDL-29161 weblib: moodle_ulr::out does not cope with array params. 2012-02-23 12:03:50 +00:00
Tomasz Muras 8435db0112 MDL-31753 Get correct course ID for Community finder search link. 2012-02-23 11:51:03 +00:00
Eloy Lafuente (stronk7) d1c12af76e weekly release 2.2.1+ 2012-02-23 11:38:57 +01:00
Eloy Lafuente (stronk7) 17d8e3ec8a Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-02-23 11:34:52 +01:00
Rossiani Wijaya 4fbf7ca46c MDL-31399 Lesson Module: Fixed horizontal scroll bar issue when using rtl language format (eg: arabic) 2012-02-23 15:08:21 +08:00
Dan Poltawski b69337ee63 MDL-31348 calendar: event links not using user timezone
thanks to Ben Thomas for the patch
2012-02-23 14:56:08 +08:00
Eduardo Pinto c468eab4f0 MDL-26496 Lesson Module: removed warning when no answer is selected from single choice question 2012-02-23 14:05:07 +08:00
AMOS bot 23aa41015a Automatically generated installer lang files 2012-02-23 00:31:08 +00:00
AMOS bot cf38e1f2ef Automatically generated installer lang files 2012-02-22 00:31:15 +00:00
Sam Hemelryk 68eeca8621 Merge branch 'MDL-30910_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-02-22 10:21:53 +13:00
Eloy Lafuente (stronk7) 7b1890513f Merge branch 'wip-MDL-30830-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-02-21 21:19:33 +01:00
David Mudrak 2d89ead370 MDL-29256 Fixed incorrect calculation of contentformat
Legacy Resource modules of the type Web page force the HTML format for
their content. The format stored in the reference field is valid only
for legacy resources of the type Plain text page. See page_20_migrate()
function.
2012-02-21 11:12:00 +01:00
Eloy Lafuente (stronk7) 52f37a943c Merge branch '22_MDL-25996_making_language_editing_terms_user_friendly' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-21 10:48:20 +01:00
Aparup Banerjee d45c949f64 MDL-25027 Web Service: added email validation to create_users() - just like GUI 2012-02-21 15:29:20 +08:00
Aparup Banerjee 758e086b1c MDL-25027 Web Service: removed user info(firstname,lastname) truncation for GUI-WS consistency.
Currently there is no validation on user info (firstname/lastname) in user/editadvanced_form.php
2012-02-21 15:29:11 +08:00
Rossiani Wijaya 9551675cf9 MDL-30910: Lesson Module: fix lesson progress bar for screen readers
AMOS BEGIN
   CPY [progresscompleted, mod_lesson]
AMOS END
2012-02-21 12:38:33 +08:00
EVAN Irving-Pease a92ed77229 MDL-28386 Authentication Fixing user id issue with logs when a new user is added 2012-02-21 07:48:19 +05:30
Gerard (Gerry) Caulfield c39546eb72 MDL-25996 Updating languaged editing interface terms to make them user
friendly
2012-02-21 09:59:34 +08:00
Sam Hemelryk 31593361a8 Merge branch 'MDL-30249-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-21 14:56:13 +13:00
Darko Miletic 3a9104cb54 MDL-31561: Implemented fix for honoring correct number of course
sections
2012-02-21 02:30:50 +01:00
Darko Miletic 9f260add10 MDL-31562: Implemented support for exporting labels, minor additional
cleanups
2012-02-21 02:29:10 +01:00
Eloy Lafuente (stronk7) 894c5e0b86 Merge branch 'wip-mdl-25432-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-21 02:10:29 +01:00
AMOS bot a8ea83c89b Automatically generated installer lang files 2012-02-21 00:31:16 +00:00
Sam Hemelryk f231525992 Merge branch 'MDL-29402-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-02-21 10:43:41 +13:00
Andrew Robert Nicols e546d72787 MDL-19421 Correct lesson dependency mapping on restore 2012-02-20 17:17:12 +01:00
Eloy Lafuente (stronk7) 9b228afffe Merge branch 'MDL-31345_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-02-20 15:40:02 +01:00
Eloy Lafuente (stronk7) f24d063a5e Merge branch 'wip-MDL-25299-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-02-20 12:59:11 +01:00
Sam Hemelryk ab04c70d56 Merge branch 'wip-mdl-29967-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-20 18:20:22 +13:00
Sam Hemelryk ace2654b5d Merged MDL-29254 with conflict resolution 2012-02-20 18:06:06 +13:00
Sam Hemelryk c8072f8b50 Merge branch 'wip-MDL-30780-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-02-20 17:29:33 +13:00
Sam Hemelryk e86284fefd Merge branch 'wip-MDL-31627-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-02-20 17:25:36 +13:00
Sam Hemelryk c63a91d44a Merge branch '22_MDL-31388_fix_enrol_LDAP_typo' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-20 17:13:25 +13:00
Sam Hemelryk cf6fa5025d Merge branch 'MDL-31532_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-02-20 17:10:39 +13:00
Sam Hemelryk 5a91cf1e2a Merge branch 'm22_MDL-31381' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-20 17:04:30 +13:00
Sam Hemelryk 3ba632dce5 Merge branch 'MDL-31432_messaging_popup_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-02-20 16:58:20 +13:00
Sam Hemelryk 10701ea814 Merge branch '22_MDL-30957_adding_assignment_completion_status_method_and_call' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-20 16:52:35 +13:00
Gerard (Gerry) Caulfield 0ac0d06efb MDL-30957 Adding a new method "is_complete" to assignment lib for
testing if a submission has actually been submitted and then adding a
call to it before displaying the the assignment submission date header

As recommended I've simplified the functions and split the logic out into appropriate upload classes.
2012-02-20 11:37:45 +08:00
Andrew Davis a648791534 MDL-31335 message: wrapped calls to mtrace() in email_to_user() within a check to make sure its a CLI script 2012-02-20 10:35:07 +07:00
Andrew Davis e6510e0920 MDL-31432 message: prevent messaging popups while viewing messages 2012-02-20 10:14:27 +07:00
Sam Hemelryk 7654fe5811 Merge branch 'm22_MDL-31397' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-20 16:03:08 +13:00
Sam Hemelryk 34d7e1ce9b Merge branch 'm22_MDL-31652' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-20 15:53:36 +13:00
Sam Hemelryk 6f22c38b48 Merge branch 'MDL-30965-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-02-20 15:44:47 +13:00
Andrew Robert Nicols 9ef38abc49 MDL-31589 Sort order of lesson answers before restoring them 2012-02-20 15:19:20 +13:00
Andrew Robert Nicols 22f94b8ef7 MDL-31590 Correct title of error dialogue on filepicker
Thanks to Gilles-Philippe Leblanc for this patch
2012-02-20 15:01:47 +13:00
Rajesh Taneja 21144ea8c6 MDL-29254 blog: added check in upgrade for summary and content to be null fields 2012-02-20 09:35:58 +08:00
Rajesh Taneja 7e19c5e1f5 MDL-25432 backup: Catching exception for orphan course modules and it's block (if any), and logging them, no exception will be thrown for this now. 2012-02-20 09:29:26 +08:00
Eloy Lafuente (stronk7) 47ac7c3668 MDL-31532 restore: avoid null course->hiddensections problems. Credit goes to Petri Asikainen. Thanks! 2012-02-20 01:36:23 +01:00
AMOS bot c05b26f9c9 Automatically generated installer lang files 2012-02-20 00:31:19 +00:00
Sam Hemelryk a55688b394 Merge branch 'MDL-31556_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-02-20 12:39:02 +13:00
Sam Hemelryk bc392be2a8 Merge branch 'MDL-31647-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-02-20 11:54:30 +13:00
Sam Hemelryk 11a3fcb1be Merge branch 'MDL-30495-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-20 11:50:39 +13:00
Sam Hemelryk 8a40b2d894 MDL-30521 upgrade: Corrected version bump for uniquehash field upgrade 2012-02-20 10:56:56 +13:00
Sam Hemelryk 3fe335c455 Merge branch 'wip-mdl-30521-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-20 10:29:46 +13:00
AMOS bot 1acda0143c Automatically generated installer lang files 2012-02-18 00:31:28 +00:00
Charles Fulton 3bb16960af MDL-31664 fix invalid boolean to string comparison 2012-02-17 13:19:25 -08:00
sam marshall ac98193cf3 MDL-31647 Glossary: Links to glossary entries from glossary main page should not be popups 2012-02-17 10:37:24 +00:00
Jerome Mouneyrac e90d5dcfb2 MDL-30249 Display warning when downloading/uploading a file 2012-02-17 17:05:27 +08:00
Dan Marsden bb8d8346ad SCORM MDL-31381 decrease max width of TOC to prevent SCORM content from being hidden, remove padding from pop-up and improve maxheight calculation 2012-02-17 17:14:53 +13:00
Sam Hemelryk 5ac02b6e21 MDL-25299 mnet: Fixed validation when no public key is provided 2012-02-17 16:47:37 +13:00
Gerard (Gerry) Caulfield 517609f295 MDL-31388 Fixing typo in enrol_ldap 2012-02-17 11:45:47 +08:00
Ankit Agarwal 2b6f171390 MDL-30965 SCORM Removing unused variable ->head 2012-02-17 09:14:42 +05:30
Marina Glancy 18a44d8a77 MDL-31627: Arialist theme do not resize content when there are no blocks 2012-02-17 11:01:14 +08:00
Marina Glancy cffba6db62 MDL-30780: fixing the disappearance of right part of the very wide rubric 2012-02-17 11:01:07 +08:00
Dan Marsden dc71212c3c MDL-31652 SCORM - hide updatefreq setting and remove it if not required. 2012-02-17 15:32:13 +13:00
Dan Marsden 731882b52d SCORM MDL-31397 - add slashes to js string 2012-02-17 15:24:08 +13:00
Sam Hemelryk 644262726c MDL-30830 dock: Added the title using accesshide for screen readers 2012-02-17 14:52:32 +13:00
Eloy Lafuente (stronk7) ad5202771a weekly release 2.2.1+ 2012-02-17 01:48:09 +01:00
Eloy Lafuente (stronk7) cad211198a Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-02-17 01:43:38 +01:00
AMOS bot 1d2b681ec0 Automatically generated installer lang files 2012-02-17 00:31:13 +00:00
Joseph Rezeau 6404d22954 MDL-31556 Lesson Module: fixed missing 'lesson closes' event in calendar 2012-02-16 16:00:31 +08:00
Sam Hemelryk 124e846e83 Merge branch '22_MDL-30935_lti_change_instructor_role_to_teacher' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-16 15:40:38 +13:00
Sam Hemelryk 671fc51e00 Revert "MDL-30935_in_lti_change_role_from_instructor_to_teacher"
This reverts commit 76fe39b8d8.
2012-02-16 15:40:34 +13:00
Gerard (Gerry) Caulfield 4821f14caa MDL-30935_in_lti_change_role_from_instructor_to_teacher 2012-02-16 10:25:09 +08:00
Jerome Mouneyrac 4b9f199c65 MDL-30495 HTML5 apps cannot call Webservices functions if a HTTP resource is retrieved from the Moodle installation 2012-02-15 11:36:38 +08:00
Sam Hemelryk 7a419e5789 MDL-30888 course-search: Fixed typo 2012-02-15 16:28:55 +13:00
Sam Hemelryk 646704c8d0 Merge branch 'wip-mdl-30388-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-15 16:23:33 +13:00
Rajesh Taneja 1ff9608513 MDL-30388 Blocks: navigation block is visible on block search page 2012-02-15 10:19:58 +08:00
Rajesh Taneja 943056a9e5 MDL-30388 Blocks: Search view for block instances fixed, with proper page url and pagination 2012-02-15 10:19:47 +08:00
Andrew Robert Nicols 9e6edb0ee6 [MDL-31386] Correctly order answers in a lesson backup 2012-02-15 03:15:26 +01:00
Michael Aherne b81c860628 MDL-31495 Performance improvement in question engine upgrade SQL 2012-02-15 09:37:51 +08:00
AMOS bot 5b45d2d0fa Automatically generated installer lang files 2012-02-15 00:31:16 +00:00
Sam Hemelryk 269754e487 MDL-30709 mod_assignment: Renamed callback to mod_assignment_get_file_info 2012-02-15 11:27:01 +13:00
Charles Fulton 8cd38f2535 MDL-29402 QandA forum questions should be emailed 2012-02-14 05:59:40 -08:00
Eloy Lafuente (stronk7) 32d4d0d1ce Merge branch 'MDL-30126-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-14 13:12:44 +01:00
Davo Smith 4ab3a01586 MDL-31527 XMLDB Editor - make sure default tables are created with correct plugin prefix 2012-02-14 12:12:22 +01:00
Iñaki Arenaza 9c867cfef8 MDL-29667 Plugins overview shows incorrect availability for auth & enrol plugins
We store the enabled plugins as array values but later look them up as array
keys. Just flip the array when we build it.
2012-02-14 15:49:01 +08:00
Aparup Banerjee 7fda50ccee Merge branch 'wip-mdl-28101-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-14 15:39:04 +08:00
Rajesh Taneja 83e83887e3 MDL-30521 blog: Updated uniquehash field preceision to 255 in post table 2012-02-14 14:17:50 +08:00
Davo Smith 0c8c2969d0 MDL-31541 Repositories - make sure all repository instances have unique 'sortorder' values when retrieved 2012-02-14 13:31:59 +08:00
Sam Hemelryk ebeacb73c9 Merge branch 'MDL-30911_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2012-02-14 17:41:45 +13:00
Sam Hemelryk 47e6717105 MDL-30709 mod_assignment Fixed phpdocs for assignment_get_file_info 2012-02-14 17:15:05 +13:00
Sam Hemelryk 43c6a29cc6 Merge branch 'wip-MDL-30709-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-02-14 17:14:22 +13:00
Jerome Mouneyrac 9c228a616a MDL-30126 rest client should be updated fo json support 2012-02-14 12:03:06 +08:00
Sam Hemelryk 01348282b4 Merge branch 'wip-MDL-30771-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-02-14 17:00:25 +13:00
Aparup Banerjee bef1428345 Merge branch 'MDL-29471-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-14 11:43:03 +08:00
Sam Hemelryk 4e01042343 Merge branch 'MDL-30688-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-14 15:53:46 +13:00
Sam Hemelryk 8348cea56a Merge branch 'MDL-31604-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-14 15:48:09 +13:00
Sam Hemelryk 5129af8051 Merge branch '22_MDL-26807_remove_withselectedusers_strings_and_references' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-14 15:32:00 +13:00
Sam Hemelryk a6f81e7fd8 Merge branch '22_MDL-27285_fixing_grammar_on_wiki_links_page' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-14 15:27:57 +13:00
Sam Hemelryk af61dca6d0 Merge branch '22_MDL-27654_add_space_to_somefieldrequired_string' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-14 15:21:07 +13:00
Sam Hemelryk 03134095f9 Merge branch '22_MDL-30935_lti_change_instructor_role_to_teacher' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-14 15:12:22 +13:00
Sam Hemelryk 908de866bd Merge branch '22_MDL-31107_fixing_below_typos' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-14 15:08:13 +13:00
Mary Evans 959ea1241a MDL-31345_master theme_afterburner: adds horizontal scroll bar to pagelayout-report 2012-02-14 01:48:23 +00:00
Sam Hemelryk 01080b468f Merge branch 'MDL-28283-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-02-14 13:59:04 +13:00
Sam Hemelryk 66bd7ae432 Merge branch 'MDL-30815-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-02-14 13:44:52 +13:00
Andrew Robert Nicols 08b213beea MDL-31515 Allow for subsequent files to overwrite old files in database activity records 2012-02-14 10:57:06 +13:00
Sam Hemelryk 2787eeb9b3 Merge branch 'MDL-29080_export_hidden2_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-02-14 10:47:30 +13:00
Jerome Mouneyrac 6049f806f9 MDL-30688 REST simpleserver does not accept the moodlewsrestformat parameter 2012-02-13 16:43:33 +08:00
Sam Hemelryk bc967db3d4 Merge branch '22_MDL-29153_fix_typo_in_resource' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-13 18:04:06 +13:00
Sam Hemelryk 877d9f8430 Merge branch '22_MDL-30723_fixing_several_english_typos' of git://github.com/gerrywastaken/moodle into MOODLE_22_STABLE 2012-02-13 18:00:23 +13:00
Sam Hemelryk a87151d552 Merge branch 'm22_MDL-31085' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-13 17:52:36 +13:00
Andrew Robert Nicols 8c51b948d6 MDL-31502 Check whether a category has subcategories or courses within it before using those variables 2012-02-13 17:48:51 +13:00
Sam Hemelryk f7562f72fb Merge branch 'wip-MDL-25185-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-02-13 17:34:39 +13:00
Sam Hemelryk 38d0571f23 Merge branch 'wip-MDL-31396-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-02-13 17:17:29 +13:00
Sam Hemelryk ff60281e4f Merge branch 'wip-MDL-31463-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2012-02-13 17:02:32 +13:00
Anita Viglinoe 04773f2508 MDL-28283-master Completion Future dates can now be set as completion criteria 2012-02-13 09:02:49 +05:30
Rossiani Wijaya 254a642146 MDL-30911: mod_lesson: fix sub-heading level to be lower than lesson title. This issue is an improvement of accessibility compliance 2012-02-13 11:29:39 +08:00
Ankit Agarwal af7a1f2999 MDL-30815 Choice Labels are now explicitly tied with input elements 2012-02-13 08:44:12 +05:30
Eloy Lafuente 12ba874956 MDL-31604 Fix capabilities displayed without spaces causing text going out of the screen 2012-02-13 10:49:48 +08:00
Sam Hemelryk 8b927cfb8b Merge branch 'wip-mdl-31576-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-02-13 15:30:13 +13:00
Rajesh Taneja b71bd1e6ec MDL-28101 wiki2.0: escape bold and italics for NWIKI formatting 2012-02-13 10:27:40 +08:00
Sam Hemelryk 5eb8ad6129 Merge branch 'MDL-31554_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-02-13 15:26:21 +13:00
Sam Hemelryk 8342143862 Merge branch 'MDL-25883-22' of https://github.com/mackensen/moodle into MOODLE_22_STABLE 2012-02-13 14:36:14 +13:00
Eloy Lafuente (stronk7) ea75a579d1 weekly release 2.2.1+ 2012-02-13 01:18:28 +01:00
Eloy Lafuente (stronk7) a72cf89d5e Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-02-13 01:14:51 +01:00
Eloy Lafuente (stronk7) 6ea4bd74a4 Revert "MDL-31345 theme_afterburner fixes pagelayout-report overflow"
This reverts commit 018f49465c.
2012-02-12 23:23:43 +01:00
Gerard (Gerry) Caulfield 23071bd4ab MDL-31107 Fixing instaces of below where it is written as bellow (two L's) 2012-02-10 15:05:16 +08:00
Gerard (Gerry) Caulfield ddb931d3ab MDL-29153 Fixing typo, "Bellow" should be "Below" 2012-02-10 14:37:43 +08:00
Marina Glancy e8d5c5a8ca MDL-30771: Enable students to view rubric definition prior to submission
Also allow advanced grading plugin to extend course module navigation, it is not necessary only definition previewing
Added option to rubric whether to show it to the students before submission and option to view description
2012-02-10 13:05:05 +08:00
Gerard (Gerry) Caulfield 76fe39b8d8 MDL-30935_in_lti_change_role_from_instructor_to_teacher 2012-02-10 10:24:04 +08:00
Gerard (Gerry) Caulfield 9f77a5bcfe MDL-27285 Updating string grammar on the wiki module's links page 2012-02-10 07:56:25 +08:00
Gerard (Gerry) Caulfield e336dd6438 MDL-26807 Updating the withselectedusers_help string 2012-02-10 02:17:35 +08:00
Gerard (Gerry) Caulfield f8b8874dcf MDL-30723 Fixing English typo(s) 2012-02-10 01:49:21 +08:00
Gerard (Gerry) Caulfield 742cf42171 MDL-27654 Insert a space into the somefieldrequired string 2012-02-10 01:26:22 +08:00
Rajesh Taneja 2080cbc2eb MDL-31576 core: Duplicate message definition removed from get_core_subsystem 2012-02-09 17:13:11 +08:00
Marina Glancy d8b6bb542c MDL-30709: Fixed bug with inserting files from Recent files repository
Two parts of changes: in assignment module function assignment_get_file_info was missing
and when populating the list of recent files the function get_file_info was not called, which caused populating the list of recent files with the files that could not later be inserted
2012-02-09 13:58:11 +08:00
Adrian Greeve 6318805a04 MDL-31463 - navigation - added a context check in the navigation for fullname permission. 2012-02-09 09:57:17 +08:00
Aparup Banerjee 3509aa0275 Merge branch 'wip-MDL-31417-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-02-09 09:45:08 +08:00
Andrew Davis feba87f45e MDL-29080 grade: simplified bug fix to prevent users without the required capabilities from being able to export hidden grade items 2012-02-09 08:35:58 +07:00
Adrian Greeve 4ec0b1caec MDL-25185 - data - Allowing data from the database to be exported according to group roles. 2012-02-09 09:29:45 +08:00
AMOS bot f26a347c25 Automatically generated installer lang files 2012-02-09 00:31:11 +00:00
Tim Hunt 025a0e65cd MDL-31554 quiz view.php notices when guest / no enroled. 2012-02-08 15:45:22 +00:00
Eloy Lafuente (stronk7) 13c25d0f87 MDL-27891 tag logs: minibump version 2012-02-08 11:44:53 +01:00
Eloy Lafuente (stronk7) 948a4d8c94 Merge branch 'MDL-27891-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-02-08 11:44:19 +01:00
Eloy Lafuente (stronk7) 2ffd822e63 Merge branch 'MDL-31345_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-02-08 11:17:26 +01:00
Ruslan Kabalin 0c657454d6 MDL-31316 Fix block controls when default home is My Moodle 2012-02-08 11:08:22 +01:00
Mary Evans 018f49465c MDL-31345 theme_afterburner fixes pagelayout-report overflow 2012-02-08 03:59:42 +00:00
Aparup Banerjee e5f77fdae4 Merge branch 'MDL-31407_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-02-08 11:27:39 +08:00
Eloy Lafuente (stronk7) 47475df527 Merge branch 'MDL-29892_overview_hidden_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-02-08 03:38:44 +01:00
Ankit Agarwal eb4d0c0d51 MDL-27891 Tags Flagging tags is now logged 2012-02-08 07:57:36 +05:30
Aparup Banerjee 4bd74c8ddc Merge branch 'm22_MDL-31461' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-08 10:12:26 +08:00
Aparup Banerjee 822790437e Merge branch 'MDL-31482-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-02-08 09:59:04 +08:00
Eloy Lafuente (stronk7) 76456cf5f2 Merge branch 'MDL-30722_forum_unsubscribe_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-02-08 02:37:46 +01:00
Eloy Lafuente (stronk7) 6fe3c3907b Merge branch 'wip-MDL-30540-stable22' of git://github.com/phalacee/moodle into MOODLE_22_STABLE 2012-02-08 01:18:09 +01:00
Eloy Lafuente (stronk7) 16f5ffacd4 Merge branch 'MDL-26384-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-02-08 00:53:15 +01:00
Eloy Lafuente (stronk7) c2db2793d2 Merge branch 'MDL-27360-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-02-07 23:49:19 +01:00
Eloy Lafuente (stronk7) 357274c6b9 Merge branch 'm22_MDL-31374' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-07 22:41:39 +01:00
sam marshall e455406b69 MDL-31482 Lib: IE8/IE7 (even with stupid user agent) should not be 'legacy' device type 2012-02-07 17:42:07 +00:00
Aparup Banerjee 3e299e464d Merge branch 'MDL-31469_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-02-07 15:12:26 +08:00
Dan Marsden 5796c9223c MDL-31985 - fix quotes in filter 2012-02-07 09:51:56 +13:00
Marina Glancy cdff347baa MDL-31417: updated list of world currencies
Some countries do not exist any more, some currencies do not exist. Some countries (and currencies) started to exist recently. Some currency codes are changed (mistype or result of denomination).

Also I tried to keep the moodle formation of the name of the currencies. The first word is not the country name but the 'belonging-to-country', i.e. not 'Sweden Krona' but 'Swedish Krona'. For some countries it was not so easy to find the correct spelling.

And finally there were some mistakes in the list, like 'Schilling' instead of 'Shilling', 'Riyal' instead of 'Rial', etc. I used currencies spelling from ISO.
2012-02-06 09:58:20 +08:00
Adrian Greeve 688c43ac3e wip-MDL-31396 - data - Exporting a preset as a zip code changed to remove errors. 2012-02-06 09:49:33 +08:00
Ankit Agarwal 6e1cf8fde8 MDL-26384 Tags Fixed redirect issue when editing is toggled 2012-02-03 14:54:04 +05:30
Jason Fowler f2301c3258 MDL-30540 - BLOG - Fixing context problems for single blog entries - Thanks Aparup and Sam for the help 2012-02-03 10:50:42 +08:00
Andrew Davis 2ad0278bd2 MDL-29892 grade: added a check to prevent hidden courses appearing on student overview reports 2012-02-03 08:56:10 +07:00
Dan Marsden 733196d843 MDL-31461 Plagiarism - adjust api functions to allow better support for renderers 2012-02-03 11:38:33 +13:00
Petr Skoda 0007843de0 MDL-29684 improve enrol_meta plugin
List of changes:
* configurable unenrol action
* new setting for synchronisation of all enrolled users or users with at least one role
* cron period increased to 1 hour in order to lower server load, courses should not get out of sync often
* CLI sync script for debugging or manual sync
* phpdocs fixes
* when plugin is disabled all roles are removed, enrollments are kept
* uninstall script
* other bugfixing
2012-02-03 11:29:47 +13:00
Tim Hunt e8e2f4f62c MDL-31469 formslib: fix invalid for="" attributes on optional dates 2012-02-02 18:16:07 +00:00
Anthony Forth 648cf3397d MDL-31445 formslib: add a nice id and class to the wrapper div for CSS 2012-02-02 18:15:31 +00:00
Tim Hunt e1ded0ff55 MDL-31407 quiz: review all uses of global $USER 2012-02-02 18:13:34 +00:00
Kyle Temkin c31783bb34 MDL-31407 quiz: finish_attempt method should not rely on $USER 2012-02-02 18:13:30 +00:00
Eloy Lafuente (stronk7) 4d2f89f85b weekly release 2.2.1+ 2012-02-02 12:13:28 +01:00
Eloy Lafuente (stronk7) 18a727e6fd Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-02-02 12:08:48 +01:00
Jerome Mouneyrac 28a3a568aa MDL-27360 Web service tokens are displayed for deleted users 2012-02-02 16:23:56 +08:00
Aparup Banerjee 6432e1b4e1 Merge branch 'm22_MDL-31360' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-02 11:13:22 +08:00
Dan Marsden 52453939f2 MDL-31360 use extra param in get_in_or_equal - one less line of code... 2012-02-01 23:09:49 +13:00
Eloy Lafuente (stronk7) be15c303e0 Merge branch 'wip-MDL-31160-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-02-01 00:54:14 +01:00
Eloy Lafuente (stronk7) acef9e8a7f Merge branch 'wip-MDL-31197-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-02-01 00:50:38 +01:00
Eloy Lafuente (stronk7) 6badc27a66 Merge branch 'm22_MDL-31039' of git://github.com/danmarsden/moodle into MOODLE_22_STABLE 2012-02-01 00:41:47 +01:00
Andrew Robert Nicols c904d241d5 MDL-31000 Respect sortorder of repositories when displaying the filepicker 2012-02-01 00:33:54 +01:00
Glenn Ansley 7da14ca7c5 MDL-31448 Replaced incorrect PHP comment 2012-01-31 23:58:06 +01:00
Eloy Lafuente (stronk7) 14b273b3c8 MDL-30714 theme_afterburner: better, output the information, LOL 2012-01-31 23:36:35 +01:00
Mary Evans b1591e5081 MDL-30714 theme_afterburner: logo link to home page 2012-01-31 23:19:51 +01:00
Eloy Lafuente (stronk7) f22c2e015a Merge branch 'MDL-31015-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-01-31 23:02:56 +01:00
Eloy Lafuente (stronk7) d4184875ce Merge branch 'MDL-30854_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-31 19:38:48 +01:00
Eloy Lafuente (stronk7) 26be1bf17a Merge branch 'MDL-30484_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-31 17:16:51 +01:00
Eloy Lafuente (stronk7) 5a1e6f2a6c Merge branch 'MDL-31314_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-31 17:06:14 +01:00
Aparup Banerjee cfbde86579 Merge branch 'MDL-30828_feedback_sort_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-01-31 16:51:08 +08:00
Aparup Banerjee 5684c6ab99 Merge branch 'MDL-30707_forum_log_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-01-31 16:43:46 +08:00
Aparup Banerjee a5f1f8c0e2 Merge branch 'MDL-29097_mod_update_create_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-01-31 14:36:15 +08:00
Dan Marsden 7759183593 MDL-28522 Choice : View reports now correctly shows unanswered column - thanks to Marcus Boon for the patch 2012-01-31 12:23:35 +08:00
Aparup Banerjee 3d257cbf08 Merge branch 'MDL-31426_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-01-31 11:52:24 +08:00
Aparup Banerjee 611d3bd71d Merge branch 'MDL-31428_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-01-31 11:15:55 +08:00
AMOS bot fc9ca7eca3 Automatically generated installer lang files 2012-01-31 00:31:14 +00:00
Eloy Lafuente (stronk7) 94e62d8d02 MDL-31428 forum: prevent some warnings with debug enabled 2012-01-31 00:25:42 +01:00
Eloy Lafuente (stronk7) e163fbc943 MDL-31426 forum: don't show/allow any subscription to not enrolled users 2012-01-30 23:22:05 +01:00
Tim Hunt 699f075ad2 MDL-30484 question engine: don't lose response files when regrading.
The problem was mostly that, in the past, we did not worry if
question_attempt_step.id changed during regrade (because we deleted the
old step row and inserted a new one). However, now that steps can have
associated files, we can't be that slack, becuase the step id is used as
the file itemid.

So, now, we have to update the existing rows during a regrade. We do
this by having the question engine tell the question_engine_unit_of_work
that the step has first been deleted, and then added back. Then we make
the unit-of-work spot that delete + add = update.

This also means that during regrading, we have to pass around some extra
ids so that new steps know the id of the step they are replacing.

Naturally, this requires some quite trickly logic, so I finally got
around to writing unit tests for question_engine_unit_of_work, which is
a good thing.

Along the way I also got around to renaming
question_attempt->set_number_in_usage, which got missed out when
everthing else was renamed to slot ages ago.

Finally, while working on this code, I noticed and fixed some PHPdoc
comments.
2012-01-30 17:05:56 +00:00
Tim Hunt a3b0c9462f MDL-31314 gradebook restore: fix category.depth on restore.
Without this, restoring backups made with the OU's custom 'restore from
1.9' feature, and possibly other people's custom converstion code, does
not work properly.

Also, fix poor recordset code.
2012-01-30 12:31:30 +00:00
Tim Hunt d4d8a51fae MDL-30854 quiz/question editing: fix create calc question & add on page.
This was one of those innocent seeming issues where, once you start
digging, you find a mess. In this case, the code that is now in
question_wizard_form::add_hidden_fields used to exist in four different
places, in four inconsistent versions. This is now all nicely
re-factored, and that solves the problem.

Along the way, I found and fixed some wrong string references in
qtype_random, and stripped out some unnecessary &s in function
declarations.
2012-01-30 12:31:02 +00:00
Aparup Banerjee db78068443 Merge branch 'MDL-26260_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-30 16:26:47 +08:00
Aparup Banerjee c8a11c7410 Merge branch 'MDL-31392_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-30 14:25:35 +08:00
AMOS bot 53cd3d4278 Automatically generated installer lang files 2012-01-30 00:31:21 +00:00
sam marshall 8c8a31c21d MDL-31015 File/URL resource 'Open' and 'Force download' options should work consistently 2012-01-27 16:02:50 +00:00
Jerome Mouneyrac 049c70ea9d MDL-29471 php warning when adding function to a new web service 2012-01-27 16:11:47 +08:00
David Mudrak 17b629d458 MDL-31317 original_site_identifier_hash falls back to null during the backup conversion
Even if the site identifier is not defined in the source 1.9 backup then the
converted 2.0 version should still contain the element to prevent PHP
notices on direct assignment.
2012-01-27 08:50:02 +01:00
Jerome Mouneyrac 15dd454840 MDL-30878 core_user_update_users user password is reset if not specified 2012-01-27 15:26:10 +08:00
Fábio Souto 1dee84c2be Updated bugfix according to Jerome suggestions
password check is done at lib.php instead of externallib.php

Conflicts:

	user/lib.php
2012-01-27 15:26:01 +08:00
Dan Marsden bfeca9d6b9 SCORM AICC MDL-31039 update external AICC url correctly - thanks to Albert Rhemrev for report/fix 2012-01-27 19:42:30 +13:00
Dan Marsden 68e719927e MDL-31360 Don't use get_in_or_equal if array is empty, tidy up structure of $extracaps array 2012-01-27 19:40:38 +13:00
Eloy Lafuente (stronk7) d4b3034bb4 weekly release 2.2.1+ 2012-01-27 02:26:26 +01:00
Eloy Lafuente (stronk7) 61622d9709 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-01-27 02:20:16 +01:00
AMOS bot d692e80d6b Automatically generated installer lang files 2012-01-27 00:31:16 +00:00
Tim Hunt e2a4d8f9d0 MDL-31392 qeupgradehelper partial upgrade support broken since 2.2 2012-01-26 16:32:10 +00:00
Sam Hemelryk 887ec885b1 Merge branch 'w04_MDL-30509_m22_slowcohort' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-25 10:29:22 +08:00
Eloy Lafuente (stronk7) b292cea475 Merge branch 'MDL-31122-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-01-25 01:52:36 +01:00
Eloy Lafuente (stronk7) fe3130a07d Merge branch 'MDL-29896-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-01-25 01:17:06 +01:00
Eloy Lafuente (stronk7) 264189da87 Merge branch 'MDL-31113_multiple_files_file_manager_22' of https://github.com/davosmith/moodle into MOODLE_22_STABLE 2012-01-25 01:06:56 +01:00
Eloy Lafuente (stronk7) 9e3824a63d Merge branch 'w04_MDL-31238_m22_php54' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-24 23:55:36 +01:00
Andrew Robert Nicols 2af7ab97d6 MDL-31245 Add missing 'icon' class to highlight button in topics format 2012-01-24 18:47:56 +01:00
Aparup Banerjee c327996e6b Merge branch 'wip-MDL-31224-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2012-01-24 23:01:26 +08:00
Eloy Lafuente (stronk7) ea5be5a976 MDL-31189 whitespace fixes 2012-01-24 13:21:00 +01:00
Eloy Lafuente (stronk7) ba09a2619e Merge branch 'w04_MDL-31183_m22_gloscounts' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-24 12:25:55 +01:00
M Kassaei 5d2dce09b3 MDL-31306 question preview: disable 'Fill correct' for qtypes that can't 2012-01-24 13:27:34 +08:00
Sam Hemelryk d0c82a5609 Merge branch 'MDL-31205_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-24 11:28:38 +08:00
Sam Hemelryk 11942210a2 Merge branch 'MDL-31189_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-01-24 11:07:00 +08:00
Sam Hemelryk a67a3a8eec Merge branch 'MDL-31231_M22' of git://github.com/lazydaisy/moodle into MOODLE_22_STABLE 2012-01-24 11:03:02 +08:00
Eloy Lafuente (stronk7) ac2a99b1b8 Merge branch 'w04_MDL-31176_m22_groupcontext' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-24 01:30:02 +01:00
Aparup Banerjee b7c8fb6610 Merge branch 'wip-MDL-28352-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-01-24 07:12:31 +08:00
Eloy Lafuente (stronk7) 2581c3cb70 Merge branch 'MDL-30033_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-24 00:09:20 +01:00
Eloy Lafuente (stronk7) b19a440a04 Merge branch 'MDL-31065_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-24 00:07:06 +01:00
Aparup Banerjee 787c2eefd3 Merge branch 'w04_MDL-31184_m22_glosreset' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-24 06:58:33 +08:00
Mary Evans 9440efcd97 MDL-31189_M22 theme_sky_high: fixed footer so page, perfomance and validators can be seen if enabled 2012-01-23 21:41:39 +00:00
Petr Skoda 3b1e1d8964 MDL-31081 limit query to one course in forum_get_subscribed_forums()
This improves performance on the forum index page. Credit goes to Mark Nielsen.
2012-01-23 21:34:05 +01:00
Mary Evans ec5bfaf5e0 MDL-31231 fixes docked navigation menu in theme_afterburner 2012-01-23 12:45:23 +00:00
Petr Skoda 58ac441cae MDL-31172 fix variable name typo in backup file logger 2012-01-23 16:10:10 +08:00
Petr Skoda ddb621b78d MDL-31173 fix variable name typo when throwing invalid $rule param exception in restore decode processor 2012-01-23 16:07:06 +08:00
Sam Hemelryk 6f421476a9 Merge branch 'w04_MDL-31177_m22_odsexport' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-23 15:37:48 +08:00
Sam Hemelryk 3c6d27b44b Merge branch 'w04_MDL-31178_m22_enrolledws' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-23 15:15:52 +08:00
Sam Hemelryk f536a092d4 Merge branch 'w04_MDL-31182_m22_messprefs' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-23 14:45:50 +08:00
Sam Hemelryk d5d5ae432c Merge branch 'w04_MDL-31186_m22_extprofiles' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-23 14:31:48 +08:00
Petr Skoda 5125c0e332 MDL-31202 do not try sending emails to invalid addresses
The use of mtrace() in email_to_user() is most probably incorrect, I am going to use it only in CLI scripts (which includes cron). This should not be considered a security issue because we should be already validating emails when accepting them from untrusted users.
2012-01-23 14:24:43 +08:00
Mary Evans a141bd9ca2 MDL-31269 theme_magazine: fixes login pagelayout in theme_magazine 2012-01-23 13:25:49 +08:00
Mary Evans 8772dd9202 MDL-31324 fixes custom css settings in theme_afterburner 2012-01-23 13:13:51 +08:00
Andrew Davis b0b6a8dac6 MDL-29097 course: refactored to avoid having two seperate calls to events_trigger() 2012-01-23 11:56:00 +07:00
Andrew Davis 35888eee0d MDL-30722 mod_forum: prevented users being auto-logged in as guest when they access /mod/forum/unsubscribeall.php 2012-01-23 11:23:34 +07:00
Andrew Davis ec0118dd5d MDL-30707 mod_forum: fixed a add_to_log() call that was causing invalid URLs to be added to the log 2012-01-23 11:05:45 +07:00
Sam Hemelryk cd5189e266 Merge branch 'MDL-31077-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2012-01-23 11:48:25 +08:00
Sam Hemelryk c95efa3936 Merge branch 'MDL-31329_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-01-23 11:25:42 +08:00
Andrew Robert Nicols abb58a56f4 MDL-31013 Add iconsmall class to 'Export to portfolio' icon 2012-01-23 11:08:51 +08:00
Eloy Lafuente (stronk7) 7ce803eeae Merge branch 'wip-MDL-31179-MOODLE_22_STABLE' of github.com:marinaglancy/moodle into MOODLE_22_STABLE 2012-01-23 01:19:45 +01:00
Petr Skoda 196eedebb1 MDL-31180 fix coding error in fake_recordset iterator 2012-01-23 01:12:32 +01:00
Eloy Lafuente (stronk7) ed6af81b50 Merge branch 'w04_MDL-31181_m22_fitlertestcfg' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-23 01:04:17 +01:00
Eloy Lafuente (stronk7) 9e2f748669 Merge branch 'MDL-31058_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-23 00:56:24 +01:00
Eloy Lafuente (stronk7) 6daa6285cc Merge branch 'w04_MDL-31185_m22_postscfg' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-23 00:28:28 +01:00
Eloy Lafuente (stronk7) 984616805e MDL-31329 timezones: updated to 2011n 2012-01-22 21:32:07 +01:00
Petr Skoda ec6c7d98f9 MDL-31176 add missing global $DB when looking for group related context in calendar 2012-01-21 19:57:33 +01:00
Petr Skoda 918bcdcfab MDL-31177 fix notices when exporting logs to ods 2012-01-21 19:51:58 +01:00
Petr Skoda d0eb3fcf88 MDL-31178 fix broken core_enrol_external::get_enrolled_users() 2012-01-21 17:59:14 +01:00
Petr Skoda ea5214d534 MDL-31181 fix missing global $CFG that was breaking unit test teardown 2012-01-21 17:08:43 +01:00
Petr Skoda c73dbf667d MDL-31182 fix fatal error when problem detected in finding messaging defaults 2012-01-21 16:59:47 +01:00
Petr Skoda 3397a096ba MDL-31183 fix non-functional glossary_count_unrated_entries() 2012-01-21 16:47:28 +01:00
Petr Skoda 47649d4328 MDL-31184 fix multiple problems when reseting individual glossary types 2012-01-21 16:31:28 +01:00
Petr Skoda 3370262bae MDL-31185 fix missing CFG in forum_get_posts_by_user() 2012-01-21 16:17:33 +01:00
Petr Skoda 06f7eb2a36 MDL-31186 fix wrong context preloading sql 2012-01-21 16:09:01 +01:00
Petr Skoda 13a1eb3c10 MDL-30509 backport perf improvement in role cleanup in cohort sync
This patch simplifies the role cleanup sql, it is not necessary to look for roles without enrolment instance because all roles are automatically unassigned when deleting enrol instances.
2012-01-21 11:55:32 +01:00
Petr Skoda caa4912f70 MDL-31208 fix obsolete get_record_sql() parameter
Credit goes to Rajesh Taneja.
2012-01-21 11:36:52 +01:00
Petr Skoda 68d4c5bc1f MDL-31238 remove now unnecessary null to stdClass conversion for plugin settings 2012-01-21 11:17:18 +01:00
Petr Skoda 057d39bbc1 MDL-31238 always return object for plugin settings from get_config()
This prevents multiple creations of objects from NULL which is note a warnings in php54
2012-01-21 11:17:18 +01:00
Tim Hunt 2f7d4b4213 MDL-31058 qtype match 1.9 restore: fix restore of dodgy questions. 2012-01-20 18:06:53 +00:00
Tim Hunt 4eac963a41 MDL-31065 question stats: fix analysis of responses not matching a given answer
When shortanswer, numerical, calculated and calculatedsimple questions
did not have a '*' match-anything answer, then any student response that
did not match any of the teacher-given answers were classified as
'[No response]', which was not right.

This patch fixes that. Such responses are now classified as
[Did not match any answer].

While I was doing this, I noticed that the display of tolerance
intervals for numerical questions in the response analysis was horrible,
so I improved it.
2012-01-20 17:46:01 +00:00
Tim Hunt 2b18b65f9a MDL-31065 qtype shortanswer: refactor the unit tests to use a proper helper. 2012-01-20 17:45:56 +00:00
Tim Hunt 277106de6e MDL-31205 quiz 'secure' window: scrollbars missing.
Embarrassing type in the arguments to openpopup
2012-01-20 16:58:32 +00:00
Tim Hunt bc8e22c4cc MDL-30033 quiz overall feedback not show for attempts with a -ve grade
This can happen, for example, if a student does really badly on a CBM quiz.
2012-01-20 16:57:26 +00:00
Jason Ilicic 8f8db0fc5f MDL-26260 Fix quiz right-click prevention loophole. 2012-01-20 16:56:59 +00:00
sam marshall 125e250a85 MDL-29896 Navigation: Make links, files clickable in nav block 2012-01-20 10:33:05 +00:00
Andrew Davis 04d9550434 MDL-30828 mod_feedback: fixed sorting when viewing responses 2012-01-20 15:51:58 +07:00
Marina Glancy e58dbe0fe8 MDL-28352: Fixed bug in html_writer::select_time causing not autoselecting month 2012-01-20 16:27:39 +08:00
Sam Hemelryk 135de8d007 MDL-31197 navigation: Fixed issue withing require_login for courses that are hidden or unavailable 2012-01-20 12:51:48 +08:00
Sam Hemelryk ac41de6697 MDL-31224 block_navigation: Fixed display of icons for node with an action_link action 2012-01-20 11:19:20 +08:00
David Penner 5a479aa628 MDL-31160 block_navigation: Fixed incorrect thrid arg to substr. 2012-01-20 11:14:21 +08:00
Marina Glancy 288503b780 MDL-31179: added missing global 2012-01-20 10:33:23 +08:00
AMOS bot 5b01459102 Automatically generated installer lang files 2012-01-20 00:31:23 +00:00
Davo Smith 6d3c3b02a6 MDL-31113 filemanager element - refresh file list from server on load 2012-01-19 19:50:05 +00:00
sam marshall 54b1dc4950 MDL-31122 Navigation: Do not show week in navigation if it contains only labels 2012-01-19 14:46:34 +00:00
Eloy Lafuente (stronk7) 269c884874 weekly release 2.2.1+ 2012-01-19 13:33:36 +01:00
Eloy Lafuente (stronk7) 4a4c146e9f Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-01-19 13:28:42 +01:00
AMOS bot bd9cbc32f5 Automatically generated installer lang files 2012-01-19 00:31:22 +00:00
Andrew Robert Nicols e639d0cca8 MDL-31242 Prevent redefinition of MOODLE_INTERNAL when loading multiple YUI modules from Moodle 2012-01-18 15:40:36 +01:00
Tim Hunt e7a8905fc9 MDL-31157 quiz cron: another regression from MDL-30635 2012-01-18 10:27:06 +01:00
Eloy Lafuente (stronk7) 4416991914 MDL-31006 revert partially @ get_config()
The change from null to stdClass() in get_config() was leading to:

1) unit tests not passing.
2) non-equivalent evaluation in conditions (null evals false,
   stdClassi() evals true)
2012-01-18 02:11:53 +01:00
AMOS bot 11bb61041b Automatically generated installer lang files 2012-01-18 00:31:36 +00:00
Petr Skoda a1317d1b99 MDL-31006 some more PHP54 notices
PHP54 compatibility - PhpStorm IDE is the best tool for this kind of work!!
2012-01-18 01:17:09 +01:00
Petr Skoda 88e2bbae6d MDL-31006 fix various notices in PHP54
PHP54 compatibility
2012-01-18 01:04:45 +01:00
Eloy Lafuente (stronk7) 2aa4f06a88 Merge branch 'w03_MDL-31213_m22_attributesmess' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 12:37:28 +01:00
Petr Skoda fc0a71999e MDL-31213 fix incorrect modifications of quickforms attributes 2012-01-17 11:21:10 +01:00
Jerome Mouneyrac 4bc3f5a2da MDL-31077 REST server should return null if nothing fail and if the description function return null. 2012-01-17 15:50:37 +08:00
Eloy Lafuente (stronk7) 14a49d6d28 Merge branch 'w03_MDL-31053_m22_contextpreloading' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 02:26:25 +01:00
Eloy Lafuente (stronk7) b837c9e84d Merge branch 'w03_MDL-31127_m22_switchaccessinit' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 02:11:36 +01:00
Eloy Lafuente (stronk7) 8838b16705 Merge branch 'w03_MDL-31161_m22_reqpluginnotice' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 02:06:06 +01:00
Eloy Lafuente (stronk7) e4715ab74a Merge branch 'MDL-31080_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-17 02:01:49 +01:00
Eloy Lafuente (stronk7) 87be88ad2f Merge branch 'w03_MDL-31142_m22_slowiconv' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 01:39:07 +01:00
Eloy Lafuente (stronk7) 27dd6a7c57 Merge branch 'w03_MDL-31171_m22_blogattachment' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 01:32:17 +01:00
AMOS bot fba6d4c169 Automatically generated installer lang files 2012-01-17 00:31:12 +00:00
Eloy Lafuente (stronk7) 9690f66447 Merge branch 'w03_MDL-31170_m22_blogblocks' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-17 00:55:45 +01:00
Sam Hemelryk 1c1b04c994 Merge branch 'MDL-31095_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-16 16:59:27 +08:00
Sam Hemelryk 8a9edd6dba Merge branch 'MDL-31135_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-16 16:41:24 +08:00
Sam Hemelryk 282dcd3c03 Merge branch 'MDL-31102_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-16 16:27:38 +08:00
Petr Skoda 76917f764f MDL-31142 fix textlib::substr() performance, invalid length in iconv_substr; use mbstring by default 2012-01-16 09:17:36 +01:00
Sam Hemelryk d5c88f9333 Merge remote-tracking branch 'skodak/w03_MDL-27165_m22_confirmed' into MOODLE_22_STABLE 2012-01-16 16:17:09 +08:00
Aparup Banerjee 1a3b5c6cfc Merge branch 'MDL-31143_22' of https://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-16 15:29:30 +08:00
Sam Hemelryk 199ba4286b Merge remote-tracking branch 'skodak/w03_MDL-29102_m22_autogrouping' into MOODLE_22_STABLE 2012-01-16 15:11:07 +08:00
Sam Hemelryk f0987e98ad Merge remote-tracking branch 'skodak/w03_MDL-30891_m22_repository' into MOODLE_22_STABLE 2012-01-16 15:01:09 +08:00
Sam Hemelryk 735d8ce2ce Merge remote-tracking branch 'skodak/w03_MDL-30958_m22_yuissl' into MOODLE_22_STABLE 2012-01-16 14:56:06 +08:00
Aparup Banerjee 0a52c0d63d Merge branch 'w03_MDL-31166_m22_clipath' of https://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-16 14:52:48 +08:00
Sam Hemelryk ec9cd69156 MDL-31011 course: Fixed typo in comment 2012-01-16 14:49:28 +08:00
Sam Hemelryk 43812bf883 Merge remote-tracking branch 'skodak/w03_MDL-31011_m22_loglinks' into MOODLE_22_STABLE 2012-01-16 14:49:28 +08:00
Aparup Banerjee 7b3dae9096 Merge branch 'w03_MDL-21992_m22_customscripts' of https://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-16 14:48:16 +08:00
Sam Hemelryk 6f960202e7 Merge remote-tracking branch 'skodak/w03_MDL-31035_m22_identitynotice' into MOODLE_22_STABLE 2012-01-16 14:38:36 +08:00
Sam Hemelryk ff65ab25c2 Merge remote-tracking branch 'skodak/w03_MDL-31117_m22_grouptodo' into MOODLE_22_STABLE 2012-01-16 14:34:58 +08:00
Sam Hemelryk ac0d9c6411 Merge remote-tracking branch 'skodak/w03_MDL-31109_m22_maintenance' into MOODLE_22_STABLE 2012-01-16 14:33:01 +08:00
Sam Hemelryk 1480ead173 Merge branch 'wip-MDL-31060-MOODLE_22_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_22_STABLE 2012-01-16 12:00:12 +08:00
Sam Hemelryk 2d48474f2a Merge branch 'MDL-31130_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-16 11:48:50 +08:00
Aparup Banerjee 94828bec35 Merge branch 'wip-MDL-31072-MOODLE_22_STABLE' of github.com:marinaglancy/moodle into MOODLE_22_STABLE 2012-01-16 11:39:43 +08:00
Andrew Robert Nicols 6a226839d0 MDL-31018 Improve consistency of horizontal alignment across grade reports 2012-01-16 11:14:46 +08:00
Sam Hemelryk 6bf567100a Merge branch 'MDL-31040-MOODLE_22_STABLE-3' of git://git.luns.net.uk/moodle into MOODLE_22_STABLE 2012-01-16 10:59:41 +08:00
Mayank Gupa 00e4cad952 MDL-30578, Updating CMILongIdentifer read comments at tracker 2012-01-16 10:16:50 +08:00
Mayank Gupa 754eb73b23 MDL-30578, Updating CMILongIdentifer to check for valid URI (RFC 3986 [6]) and URN syntax as per RFC 2141 [3] 2012-01-16 10:16:41 +08:00
Eloy Lafuente (stronk7) e09cfa968b Merge branch 'w03_MDL-31165_m22_innodbconv' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-16 02:06:57 +01:00
Eloy Lafuente (stronk7) 8b23f31909 Merge branch 'MDL-31157_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-16 01:43:20 +01:00
Charles Fulton 534f9fec11 MDL-25883 correct element name for wiki comments editor 2012-01-15 10:35:23 -08:00
Petr Skoda cee1176862 MDL-29102 fix notice when auto-creating groups in existing grouping 2012-01-15 19:27:08 +01:00
Petr Skoda 5274209ac1 MDL-31171 fix blog attachment serving in BLOG_USER_LEVEL 2012-01-15 19:11:41 +01:00
Petr Skoda 12f2dc577d MDL-31011 fix report links in logs 2012-01-15 19:02:34 +01:00
Petr Skoda 7e6f69b9af MDL-31035 fix showuseridentity notice before settings upgrade 2012-01-15 17:13:11 +01:00
Petr Skoda 7991c4c000 MDL-21992 fix custom scripts on https pages and CLI 2012-01-15 16:00:45 +01:00
Petr Skoda 7fdb5afc08 MDL-31161 fix notice when checking plugin requirements
Credit goes to Joseph Rézeau, thanks.
2012-01-15 15:35:20 +01:00
Petr Skoda a2c5642872 MDL-30958 do not use Yahoo CDN on https sites
Browsers do not like mixing of ssl and non-use content on one page. Unfortunately YAHOO does not provide the files over SSL yet - see http://yuilibrary.com/yui/docs/tutorials/faq/#does-yahoos-cdn-support-ssl
2012-01-15 15:25:01 +01:00
Petr Skoda fde76de588 MDL-31170 fix automatic blog blocks hiding/unhiding after blog level change 2012-01-15 13:40:37 +01:00
Petr Skoda 45d88e56cb MDL-31166 do not try to cleanup data root paths in CLI install script
PARAM_TYPE can not be used for full OS paths. Admins have to enter correct data there, if not they get directory creation error.
2012-01-15 11:05:30 +01:00
Petr Skoda 22d6b3da4f MDL-31165 fix InnoDB conversion query to use ENGINE parameter instead of legacy TYPE 2012-01-15 10:32:29 +01:00
AMOS bot f7ff057d0b Automatically generated installer lang files 2012-01-15 00:31:12 +00:00
Petr Skoda 04c0a7d205 MDL-31109 fix maintenance link value in get_string() 2012-01-15 00:56:29 +01:00
Petr Skoda f543eea9d6 MDL-31117 delete obsolete TODO
This TODO was added when we were still using moodledata folder for group images, it is not relevant any more because group images are in new file API which supports DB transaction rollbacks.
2012-01-15 00:44:04 +01:00
Petr Skoda a5a993abc2 MDL-31127 init USER->access when switching roles
Only admins were affected by this problem because has_capability() does not init USER->access for them.
2012-01-15 00:15:17 +01:00
Petr Skoda 38d341b0d7 MDL-27165 fix broken confirmed user filtering 2012-01-14 22:14:58 +01:00
Petr Skoda 1c83b13343 MDL-30891 fix invalid hardcoded capability check when disable legacy files repo 2012-01-14 21:58:33 +01:00
Petr Skoda 182f5cc6f6 MDL-31053 fix invalid context preloading in get_user_capability_course() 2012-01-14 21:36:32 +01:00
Tim Hunt d8b06a25b2 MDL-31157 quiz cron: timenow was not being initialised 2012-01-13 22:33:16 +00:00
Tim Hunt ef0376f4ef MDL-31095 quiz editing: only set quiz->grade to 0 if really necessary.
It is only necessary when there are (non-preview) attempts. However,
after making this change we have to ensure users cannot start attempts
when ->grade > 0 and ->sumgrades = 0.

Display ->grade on the order and paging tab of edit.php, so it is clear
what is going on when you are using that tab.

Finally, improve the error message a student gets if they try to start a
quiz with no questions.
2012-01-13 11:42:57 +00:00
Tim Hunt 090d2f90e8 MDL-31095 quiz: fix bug in quiz::has_questions. 2012-01-13 11:42:55 +00:00
Marina Glancy ee5cf900f8 MDL-31072: Fixed bug causing memory overflow for many-user systems:
when function find_users was supposed to be used for user validation but no userids were passed to it, it retrieved all users in the system.
This caused memory overflow on systems with too many users (like moodle.org).
Now we make sure that find_users is not called for validation if there is nobody to validate.

Also improved query inside find_users to make it work faster
2012-01-13 10:13:04 +08:00
Marina Glancy e5a9af0a70 MDL-31060: removed unnecessary fields from query which also caused problems in MSSQL 2012-01-13 10:12:55 +08:00
Tim Hunt b3c02fae54 MDL-31143 quiz reports: average grade of null causes php error. 2012-01-12 16:46:12 +00:00
Andrew Robert Nicols 87b8419f80 MDL-31040 Correct LTR language issue and inconsistency in display 2012-01-12 14:01:51 +00:00
Jonathon Fowler 0a2569e55c MDL-31130 question bank: toggling show all / 20 per page broken. 2012-01-12 12:44:44 +00:00
Tim Hunt a8f912faf1 MDL-31135 question instances report: 'All' option broken 2012-01-12 12:44:15 +00:00
Tim Hunt 16f75808c7 MDL-31102 question preview: fix HTML validation errors. 2012-01-12 11:33:00 +00:00
Tim Hunt a364362b95 MDL-31100 unit tests: don't mangle UTF-8 in failure messages. 2012-01-12 11:32:41 +00:00
Tim Hunt d16597b557 MDL-31080 quiz editing, must be able to see and delete missing questions 2012-01-12 11:32:22 +00:00
Eloy Lafuente (stronk7) f70f6e9ad1 weekly release 2.2.1+ 2012-01-12 11:33:19 +01:00
Eloy Lafuente (stronk7) cb5d7dbe14 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-01-12 11:25:01 +01:00
Tim Hunt 7ecee68542 MDL-26469 upgrade: cope with modules that do not set $module->cron. 2012-01-11 19:08:13 +01:00
Tim Hunt 18930123e3 MDL-26469 upgrade: module cron setting not updated. 2012-01-11 14:04:16 +00:00
Tim Hunt f40f4013f1 MDL-30635 quiz cron: fixup - enable in version.php & fn name quiz_statistics_cron 2012-01-11 14:02:17 +00:00
AMOS bot 86645a5e91 Automatically generated installer lang files 2012-01-11 00:31:22 +00:00
Eloy Lafuente (stronk7) e516577ec7 Merge branch 'MDL-31101_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-10 23:35:15 +01:00
Tim Hunt 8261570853 MDL-31101 format_string: Don't mangle < and > in strings like x < 1. 2012-01-10 14:54:40 +00:00
Rajesh Taneja 4cb258fbdf MDL-30452 Repositories: Changed default capability on repos - Thanks Michael
Signed-off-by: Rajesh Taneja <rajesh@moodle.org>
2012-01-10 11:11:34 +01:00
Sam Hemelryk 859624f26c Merge branch 'MDL-24394_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-10 14:30:22 +13:00
Sam Hemelryk 10c3c6d49c Merge branch 'MDL-31019_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-10 14:26:36 +13:00
Sam Hemelryk 7e9f29178e MDL-31000 Added comment about the importance of repository array keys 2012-01-10 12:27:38 +13:00
Sam Hemelryk 7984be4a13 Revert "MDL-31000 Respect sortorder of repositories when displaying the filepicker"
This reverts commit ce40b669cc.
2012-01-10 12:25:11 +13:00
Eloy Lafuente (stronk7) efabe26141 Merge branch 'wip-mdl-30608-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-01-09 22:19:11 +01:00
Darko Miletic a7e79bfe78 MDL-30783: Implemented fix 2012-01-09 21:51:41 +01:00
Tim Hunt c4989dc75f MDL-24394 qtype_match: should be able to use multilang for the choices. 2012-01-09 18:06:11 +00:00
Tim Hunt 0f504be67b MDL-31019 quiz secure mode. Fix typo that breaks submit. 2012-01-09 17:10:19 +00:00
Aparup Banerjee 54afb1ca01 Merge branch 'w02_MDL-30718_m22_usertimedb' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-09 12:20:34 +08:00
Sam Hemelryk da744e0065 Merge branch 'w02_MDL-31005_m22_contextlevelname' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-09 16:12:38 +13:00
Sam Hemelryk 7a44fb4d97 MDL-30608 Blocks: Fixed block disappering from search page 2012-01-09 11:04:44 +08:00
Aleksey Avdeev d43c4284e1 MDL-29046 use of install/distrolib.php in the CLI installer
Signed-off-by: Aleksey Avdeev <solo@altlinux.ru>
2012-01-09 02:32:37 +01:00
Eloy Lafuente (stronk7) f36884dde7 Merge branch 'MDL-30031-22' of git://github.com/bostelm/moodle into MOODLE_22_STABLE 2012-01-09 02:14:31 +01:00
Sam Hemelryk 5dff4c565f Merge branch 'w02_MDL-30717_m22_usercreated' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-09 14:03:00 +13:00
Sam Hemelryk 0ca7b84953 MDL-30928 lib: Fixed whitespace 2012-01-09 13:57:23 +13:00
Sam Hemelryk 995294dfa3 Merge branch 'w02_MDL-30928_m22_deletetimes' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-09 13:48:37 +13:00
Sam Hemelryk cef1e7f444 Merge branch 'w02_MDL-30969_m22_suspendedcsv' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-09 13:02:21 +13:00
Darko Miletic 23758a4588 MDL-30778: Implemented intendeduserrole support 2012-01-09 00:42:48 +01:00
Eloy Lafuente (stronk7) f35cacdc83 Merge branch 'MDL-30966-print-object_22_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-01-09 00:33:31 +01:00
Eloy Lafuente (stronk7) 7e20d8e330 Merge branch 'MDL-30635_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-09 00:18:18 +01:00
Sam Hemelryk ade2e5955e Merge branch 'MDL-30652_m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2012-01-09 12:00:22 +13:00
Andrew Robert Nicols ce40b669cc MDL-31000 Respect sortorder of repositories when displaying the filepicker 2012-01-09 11:53:53 +13:00
Petr Skoda 05042a7ed8 MDL-31005 fix strict coding style warning in context_helper
PHP54 compatibility
2012-01-08 15:42:34 +01:00
Petr Skoda 2824832a18 MDL-30717 update user->timemodified in update_user_record() 2012-01-08 15:04:06 +01:00
Petr Skoda 17330e8aae MDL-30717 add missing time created info in create_user_record()
Credit goes to Luis Gustavo Mueller de Alcantara.
2012-01-08 15:04:05 +01:00
Petr Skoda 6ac158e9e3 MDL-30718 add missing timecraeted and timeupdated, fix user undeleting 2012-01-08 14:51:47 +01:00
Petr Skoda dfff77eedd MDL-30928 include course and user deletion time in event
Credit goes to Luis Gustavo Mueller de Alcantara.
2012-01-08 14:30:06 +01:00
Petr Skoda 77536bd387 MDL-30969 add support for suspending in uploaduser admin tool 2012-01-08 14:01:49 +01:00
AMOS bot c56a8d4441 Merge branch 'MOODLE_22_STABLE' into install_22_STABLE 2012-01-08 00:31:21 +00:00
Eloy Lafuente (stronk7) a1d246334b Moodle release 2.2.1 2012-01-07 17:04:34 +01:00
AMOS bot e71389830c Automatically generated installer lang files 2012-01-07 00:31:19 +00:00
David Mudrak b886841fc8 MDL-30966 print_object() output made CLI-friendly 2012-01-06 22:47:11 +01:00
Tim Hunt 25200f80f7 MDL-30635 let quiz reports do cron in the standard way.
The old legacy way is still supported in 2.2, but this support will be
dropped in 2.3.
2012-01-06 18:13:13 +00:00
AMOS bot fdac23f168 Automatically generated installer lang files 2012-01-06 00:31:29 +00:00
Eloy Lafuente (stronk7) 7ca0ece0db weekly release 2.2+ 2012-01-05 15:06:46 +01:00
Eloy Lafuente (stronk7) dcfc7a875a Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2012-01-05 12:50:26 +01:00
Sam Hemelryk ffd6212152 Merge branch 'MDL-31017_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2012-01-05 11:17:13 +13:00
Eloy Lafuente (stronk7) 1cf721e235 MDL-31017 whitespace clean - take1 2012-01-04 16:28:59 +01:00
Eloy Lafuente (stronk7) aed7f32783 Merge branch 'MDL-30865-workshop-unittest_22_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2012-01-04 02:19:11 +01:00
Eloy Lafuente (stronk7) dbc7d20cf5 Merge branch 'MDL-30879-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2012-01-04 02:14:34 +01:00
Petr Skoda 6357d61912 MDL-30945 add support for unenrolling of individual users + code cleanup 2012-01-04 01:53:33 +01:00
AMOS bot 3acce7a095 Automatically generated installer lang files 2012-01-04 00:31:17 +00:00
Petr Skoda a36531da4f MDL-30948 do not generate new passwords for suspended accounts because they would not get any emails 2012-01-04 00:49:04 +01:00
Petr Skoda 7d1906cf7c MDL-30948 stop messaging suspended and deleted users 2012-01-04 00:49:03 +01:00
Petr Skoda 8be58774cd MDL-30951 prevent fatal error when category sync enrolment not configured 2012-01-04 00:40:26 +01:00
Petr Skoda ffbcd681f3 MDL-29917 prevent form autocompletion in most Moodle forms
The password autocompletion in case of Moodle makes sense only on the login page, the form autocompletion in general is most probably useful only on the user signup page.

This patch is compatible with html 5, unfortunately we have to ignore strict warnings in legacy xhtml 1.0 standard.
2012-01-04 10:58:31 +13:00
Petr Skoda dc49c2d461 MDL-30548 support user suspended flag in admin UI
This patch includes:
* user management suspend UI tweaks and other coding style improvements
* suspended info in user profiles
* suspend option in advanced edit form
* suspended user filtering
* hidden user fields option for suspended field

Thanks Sam Hemelryk for valuable feedback.
2012-01-04 10:51:04 +13:00
Petr Skoda 10357af3ef MDL-30950 remove references to removed admin block
Credit goes to Ralf Hilgenstock.
2012-01-03 22:35:00 +01:00
sam marshall 1800b35bf6 MDL-30879 Course page: missing space after class for new 'description on course page' feature 2012-01-03 12:42:24 +00:00
Rossiani Wijaya 6ca2f1d3ce MDL-30600 Fix mymobile theme choice renderer 2012-01-03 17:54:34 +08:00
Ankit Kumar Agarwal 9f097a7248 MDL-30652 SCORM Fixing report prefrences display for interactions report 2012-01-03 12:10:52 +05:30
Ankit Kumar Agarwal 8755b6aaca MDL-30652 SCORM Fixing report prefrences display issue for basic report 2012-01-03 12:10:43 +05:30
Ankit Kumar Agarwal bea916ae7c MDL-30652 Scorm adding proper comments 2012-01-03 12:10:21 +05:30
Aparup Banerjee 8ef685cf4c Merge branch 'wip-mdl-29844-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2012-01-03 12:31:22 +08:00
Eloy Lafuente e4b1208377 MDL-29844 Administration: Added new config for users to login for viewing profile image 2012-01-03 12:02:59 +08:00
Sam Hemelryk cd735560d3 Merge branch 'w52_MDL-30786_m22_todelete' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2012-01-03 16:35:26 +13:00
Petr Skoda a770897929 MDL-30673 fix login autocompletion protection 2012-01-03 14:09:36 +13:00
AMOS bot 40ff6e3663 Automatically generated installer lang files 2012-01-03 00:31:16 +00:00
Petr Skoda b408061558 MDL-30809 do not add guest info to add course form if default instance prevented 2012-01-03 13:05:38 +13:00
Petr Skoda be1af716b7 MDL-30924 merge upstream pspell fix
See https://github.com/moodle/custom-tinymce_spellchecker_php/tree/MOODLE_22_2.0.6a
2012-01-03 12:49:38 +13:00
Petr Skoda f69ff3b72e MDL-30926 fix course and module blog associations 2012-01-03 12:39:17 +13:00
Petr Skoda 0543bb679b MDL-30934 fix module delete cleanup
Credit goes to Rajiv Navada.
2012-01-03 12:26:35 +13:00
Petr Skoda 9cad3e182d MDL-30943 fix forgotten admin/report/ references 2012-01-03 12:23:43 +13:00
Sam Hemelryk 1243bf814b Merge branch 'MDL-30802_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-03 11:25:50 +13:00
Sam Hemelryk e972cdc5ad Merge branch 'MDL-30766_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-03 11:23:00 +13:00
Sam Hemelryk dc8d309c88 Merge branch 'MDL-30168_tim2_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-03 11:14:10 +13:00
Sam Hemelryk 860848dca8 Merge branch 'MDL-27200_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2012-01-03 11:12:01 +13:00
Henning Bostelmann aafe1618f8 MDL-29266 Assignment grading: save state of "send notifications" box 2012-01-03 11:09:59 +13:00
Petr Skoda 358e5cf791 MDL-13572 fix incorrect value printing 2012-01-03 11:01:29 +13:00
Petr Skoda a2c591662b MDL-13572 fix incorrect value printing 2012-01-03 11:01:29 +13:00
Petr Skoda 64550fa6c1 MDL-13572 do not send emails to invalid addresses 2012-01-03 11:01:29 +13:00
Mary Evans 267ff8cd27 MDL-30868 Fix for assignment view in theme_boxxie 2012-01-03 10:39:03 +13:00
Henning Bostelmann 32bbc36039 MDL-29821 Navigation tree: fix link to course notes page 2012-01-03 10:12:56 +13:00
Dan Poltawski 8129b01641 MDL-30706 mymobile: don't send login pages through ajax
By doing 'real requests' we can allow external authentication to happen
(e.g. apache module which does a redirect to external SSO system)
2012-01-03 10:09:43 +13:00
Andrew Robert Nicols a39a53fa6f MDL-30804 Rename the 'onthispage' fieldset for block configuration 2012-01-03 10:06:53 +13:00
Andrew Robert Nicols c50d05671b MDL-30805 Require HTML content for the HTML block configuration 2012-01-03 10:03:23 +13:00
Sam Hemelryk 7f7d9ce6e8 Merge branch 'MDL-13572_validate_email_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2012-01-03 09:57:14 +13:00
Eloy Lafuente (stronk7) 58a44ab228 Merge branch 'MDL-30851_22_wip' of git://github.com/grabs/moodle into MOODLE_22_STABLE 2012-01-02 20:26:40 +01:00
Petr Skoda b43c2e9d39 MDL-30953 fix utf-8 support in PSpell class
Credit for discover and proposed fix goes to David Hai Gootvilig, this patch is part of https://github.com/moodle/custom-tinymce_spellchecker_php/tree/MOODLE_22_2.0.6b which will be used in the next tinymce import. It was reported upstream as https://github.com/tinymce/tinymce_spellchecker_php/pull/5
2012-01-02 20:20:08 +01:00
AMOS bot 42cbe9be98 Automatically generated installer lang files 2011-12-29 00:31:19 +00:00
Henning Bostelmann fb93cfac00 MDL-30031 Adaptive question behaviour: ignore invalid answers without penalty 2011-12-28 17:20:51 +00:00
AMOS bot 0ba9f5a5e9 Automatically generated installer lang files 2011-12-24 00:31:35 +00:00
Andreas Grabs 9d1963b421 MDL-30851 - Syntax error in analysis_course.php 2011-12-23 17:39:16 +01:00
Tim Hunt ed82e03798 MDL-30873 quiz: display an overall grade for preview users.
Also, don't display an overall grade unless there is at least one finished attempt.
2011-12-23 11:49:59 +00:00
Tim Hunt a89d501b72 MDL-30802 question nav: fix questions link in front page course. 2011-12-23 11:49:38 +00:00
Tim Hunt 4587d4f5b7 MDL-30766 mod_quiz: fix edge cases of repaginate function. 2011-12-23 11:49:18 +00:00
Tim Hunt cb0318b633 MDL-30168 formslib: untangle automatic id generation.
Previously, we had overridden the _generateId method in almost all
subclasses; and then we mostly, but not always; ignored the value that
was generated there, and instead generated new (nicer) values in
MoodleQuickForm_Renderer::renderElement. Of course, that is not really a
logical place to (re)generate ids.

I have fixed the code so that the _generateId method now uses the 'nice
id' algorithm from renderElement. This should make the whole code flow
more logical.

This make all our overriding of _generateId unnecessary.

We do need a special _generateId for radio buttons, because you often
have different radio buttons with the same name but different values.

This change should only change the ids on radio, checkbox and
advcheckbox elements. Previously, those were essentially random, so I
don't think anyone could have been relying on the particular values.

This commit also has new unit tests, first to test the basic _generateId
algorithm, and then to create and render an example form (including some
tricky things like repeat_elements) and chech the acutal ids in the
generated HTML.
2011-12-23 11:19:48 +00:00
Tim Hunt 404e01f59e MDL-27200 missing {} in various lang strings. 2011-12-23 11:19:24 +00:00
Petr Skoda 96ebc911d7 MDL-30786 fix overview status of standard plugins to be deleted 2011-12-23 10:36:12 +01:00
David Mudrak 7d8c4fb5af MDL-30865 Workshop method aggregate_grading_grades_process() accepts explicit aggregation timestamp 2011-12-23 09:21:09 +01:00
Eloy Lafuente (stronk7) 929c26ccf1 weekly release 2.2+ 2011-12-23 03:03:32 +01:00
Eloy Lafuente (stronk7) c994fe7430 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2011-12-23 02:53:07 +01:00
AMOS bot 1d4262608c Automatically generated installer lang files 2011-12-23 00:31:21 +00:00
Eloy Lafuente (stronk7) 0016ed0115 MDL-30760 question engine: reduce summary max size
MySQL only accepts 65536 (aprox) bytes in default TEXT
columns. So we define the max allowed as 32000 to allow
99.9% of utf-8 contents to fit. If some day MDL-19603 is
implemented and all current TEXTs are moved (MySQL) to
the BIG counterparts, this restriction can be out (MDL-19603).
2011-12-23 01:16:00 +01:00
Gerard (Gerry) Caulfield 0c5e3d4564 MDL-29400 Fixing unset object bug encountered by Rajesh during testing 2011-12-22 09:55:38 +01:00
Sam Hemelryk e0c00395b7 Merge branch 'wip-MDL-18128-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2011-12-22 11:44:34 +13:00
Sam Hemelryk 9e9e0732f5 MDL-30639 mod_lesson: Used a consistent format for users display of answer 2011-12-22 11:23:15 +13:00
Sam Hemelryk 965344c08f Merge branch 'MDL-30639_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2011-12-22 11:21:08 +13:00
Tim Hunt 0f97c8afdb MDL-30704 quiz_overview: fixup, add missing rescaling.
Thanks Micheal de Raadt for catching this in testing.
2011-12-21 18:33:32 +01:00
Eloy Lafuente (stronk7) 1b5afe64c4 MDL-20245 grade: added tests for set_user_preference() and the 1333 limit
Added to tests to check that both the "limit" case of using 1333
chars is allowed and 1334 causes coding exception to happen
2011-12-21 16:30:57 +01:00
Eloy Lafuente (stronk7) 5831b4c70c MDL-20245 grade: fix version numbers
This commit puts the 22_STABLE and master main
versions back to "on-sync" mode (very first
weeks after major release).

Conflicts:

	lib/db/upgrade.php
	version.php
2011-12-21 12:25:11 +01:00
Andrew Davis 223e753520 MDL-20245 grade: increased the size of the user_preferences value column and added php validation of the data going into that column
Conflicts:

	lib/db/upgrade.php
	version.php
2011-12-21 12:23:50 +01:00
adrian@moodle.com 72682b8868 MDL-18128 - forum - Addition of group editing for forums. 2011-12-21 15:40:09 +08:00
Aparup Banerjee 8fe13ecf1a Merge branch 'wip-MDL-30541-stable22' of git://github.com/phalacee/moodle into MOODLE_22_STABLE 2011-12-21 14:16:55 +08:00
Aparup Banerjee dbfa519ad9 MDL-28126 webservice : resolved integration conflicts 2011-12-21 11:28:33 +08:00
Sam Hemelryk 6ff99dde45 Merge branch 'MDL-29239_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2011-12-21 15:00:41 +13:00
Jason Fowler 332748dd7e MDL-30541 - Blog - Fixing the context for RSS Feed headers on the single blog entry pages 2011-12-21 09:35:52 +08:00
Sam Hemelryk db65026449 Merge branch 'MDL-30704_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-21 14:30:27 +13:00
Eloy Lafuente (stronk7) 45c920b0af MDL-30777: whitespace fix 2011-12-21 00:41:20 +01:00
Darko Miletic 1be36988ac MDL-30777: Properly implemented error message 2011-12-21 00:41:09 +01:00
Eloy Lafuente (stronk7) d7964ccf87 Merge branch 'MDL-30170-mnet-undelete_22_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_22_STABLE 2011-12-20 23:33:19 +01:00
Gerard (Gerry) Caulfield efa9f19281 MDL-29400 Update the upload and uploadsingle assignment classes to so
that they only display the assignment submitted status when it has
actually been submitted.
2011-12-20 22:55:23 +01:00
Eloy Lafuente (stronk7) 6662dee76d MDL-30761 make it work under Oracle. To revisit after MDL-29765 is done. 2011-12-20 22:38:21 +01:00
Eloy Lafuente (stronk7) 1729746211 Merge branch 'w51_MDL-30761_m22_slowmysql' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-20 22:38:09 +01:00
Darko Miletic fe2a74db60 MDL-30631: Fixed the default grade import for the question for both CC
1.0 and 1.1
2011-12-20 22:02:51 +01:00
Eloy Lafuente (stronk7) 72b01fbeb3 Merge branch 'MDL-30603_m22' of https://github.com/nebgor/moodle into MOODLE_22_STABLE 2011-12-20 19:49:45 +01:00
Eloy Lafuente (stronk7) 7259dbc551 Merge branch 'MDL-29048-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2011-12-20 18:56:01 +01:00
Eloy Lafuente (stronk7) 39949b56ad Merge branch 'wip-MDL-30733-MOODLE_22_STABLE' of github.com:marinaglancy/moodle into MOODLE_22_STABLE 2011-12-20 18:52:48 +01:00
Aparup Banerjee 7110207a34 MDL-25561 Gradebook : fixed whitespaces 2011-12-20 19:15:48 +08:00
Aparup Banerjee 40b67fca0a Merge branch 'MDL-25561_user_report_name_clickable_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2011-12-20 19:15:20 +08:00
Andrew Robert Nicols b9c38ef120 MDL-30627 Ensure that the dialogue is always shown in the current view window 2011-12-20 13:38:41 +08:00
Rossiani Wijaya b8e5740796 MDL-30636 Lesson Module: fixed essay answer display format 2011-12-20 12:51:52 +08:00
Andrew Robert Nicols 8c9d533f3d MDL-30641 Stop italicising and underlining folder names in the filepicker 2011-12-20 11:55:12 +08:00
Aparup Banerjee 18952a18fd Merge branch 'MDL-30569-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2011-12-20 11:11:02 +08:00
Eloy Lafuente (stronk7) 53516a8ece Merge branch 'wip-mdl-29067-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2011-12-20 03:12:55 +01:00
Sam Hemelryk a5f35b4cf2 MDL-30770 admin: Fixed notice about missing variable 2011-12-20 02:26:34 +01:00
Eloy Lafuente (stronk7) fbb829b82d MDL-30739 add one test to confirm the solution is cross-db 2011-12-20 02:23:55 +01:00
Eloy Lafuente (stronk7) ceec817f95 Merge branch 'MDL-30739_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-20 02:21:30 +01:00
Sam Hemelryk 0cba7c0408 Merge branch 'MDL-30764-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2011-12-20 14:15:43 +13:00
Eloy Lafuente (stronk7) 2df28fda6c Merge branch 'MDL-30738_22_STABLE' of git://github.com/kiklop74/moodle into MOODLE_22_STABLE 2011-12-20 02:01:29 +01:00
Sam Hemelryk 9f83ba0887 Merge branch 'MDL-30760_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-20 13:34:53 +13:00
AMOS bot 956d1a3ab5 Automatically generated installer lang files 2011-12-20 00:31:22 +00:00
Sam Hemelryk 6005434b55 Merge branch 'MDL-30646_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-20 13:21:11 +13:00
Sam Hemelryk a8fb78b142 Merge branch 'MDL-29846_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-20 13:16:20 +13:00
Sam Hemelryk b3af6c110a Merge branch 'w51_MDL-30787_m22_coursemodedit' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-20 12:08:09 +13:00
Eloy Lafuente (stronk7) 58ca2c4b71 Merge branch 'MDL-30741_m22' of git://github.com/jfilip/moodle into MOODLE_22_STABLE 2011-12-20 00:05:13 +01:00
Sam Hemelryk 4e77491aff Merge branch 'wip-MDL-28948-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2011-12-20 10:42:45 +13:00
Petr Skoda c2ca1a3793 MDL-30779 add port and socket to dbtansfer tool 2011-12-20 10:29:11 +13:00
Sam Hemelryk 1f3933bee6 Merge branch 'w51_MDL-30765_m22_context' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-20 10:09:27 +13:00
Sam Hemelryk e7af814b0d Merge branch 'w51_MDL-30697_m22_roleslink' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-20 10:03:59 +13:00
Tim Hunt 365e163946 MDL-30704 Quiz grades report shows inconsistent averages.
Previously, for the overall grade, we averaged the final marks for each
student; while for the individual question grades, we averaged all
grades.

The report now works consistently on the principle that the averages
should include exactly what is currenlty being shown in the report. This
is more logical, and so should be easier for users to understand.

If you want to see the averages that are currently shown (e.g. just the
average of each student's highers grade) then the report options let you
do that.
2011-12-19 15:03:56 +00:00
Tim Hunt 9f689071a8 MDL-29846 qbehaviours admin: correct $needed logic.
Also, fix a notice.
2011-12-19 14:34:09 +00:00
Aparup Banerjee 85daa5926c Merge branch 'w51_MDL-30735_m22_cron' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-19 11:53:32 +08:00
Sam Hemelryk 415be0ff94 Merge branch 'w51_MDL-30789_m22_enrolupdatestatus' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-19 16:26:01 +13:00
Mary Evans e50e70d12e MDL-30500 Fix for Sky High report & print layout 2011-12-19 15:22:41 +13:00
Ankit Kumar Agarwal 8c14856d86 MDL-30569 Administration Fixing the redirect after editting is toggeled on the front page 2011-12-19 07:42:49 +05:30
Sam Hemelryk d613d7d78e Merge branch 'MDL-37049_22' of git://github.com/jamiepratt/moodle into MOODLE_22_STABLE 2011-12-19 15:05:42 +13:00
Sam Hemelryk 7c19940ca6 Merge branch 'MDL-30683_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-19 14:14:55 +13:00
Sam Hemelryk ead158db7e Merge branch 'MDL-29176_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-19 12:23:36 +13:00
Sam Hemelryk 3bcb2c1dff Merge branch 'MDL-30734_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-19 11:52:32 +13:00
Sam Hemelryk 265dbb3a54 Merge branch 'MDL-30742_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-19 11:30:42 +13:00
Sam Hemelryk 2253ea2592 Merge branch 'MDL-30744_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-19 10:53:57 +13:00
Sam Hemelryk 5ff8144cc8 Merge branch 'MDL-30758_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-19 09:28:10 +13:00
Petr Skoda 9cf83e67a1 MDL-30789 add new update_status() method to enrol plugins and improve enrol cache invalidation 2011-12-18 17:31:12 +01:00
Petr Skoda 4d199d6b33 MDL-30787 fix use of module and section edit capabilities 2011-12-18 13:55:31 +01:00
AMOS bot 8109fce46d Automatically generated installer lang files 2011-12-18 00:31:19 +00:00
Petr Skoda cb6ff0a71c MDL-30697 fix incorrect capability for role assign button
Credit goes to Alexander Bias.
2011-12-17 14:47:17 +01:00
Petr Skoda d107f1e2cd MDL-30735 fix cron maintenancerun detection
Credit goes to Rodrigo Belluomini Cardilli.
2011-12-17 14:18:22 +01:00
Petr Skoda ebad6e2f6f MDL-30765 fix invalid context variable 2011-12-16 23:03:17 +01:00
Tim Hunt 9660c98e57 MDL-30760 question engine: question summary can be longer than 64k!
1. So we will truncate the question summary to 65000 chars if necessary.

2. Also, fix one minor error in mutlianswer save_question_options.

question_bank::MAX_SUMMARY_LENGTH is not the most logical class to add
the constant to, but it needs to be accessible during upgrade, so I was
lazy and put it there.
2011-12-16 15:57:49 +00:00
Petr Skoda c34b325447 MDL-30761 improve get_user_access_sitewide() performance 2011-12-16 16:27:18 +01:00
Petr Skoda 35cd08c96e MDL-30761 fix simpletest regression caused by rubrics 2011-12-16 14:26:12 +01:00
Dan Marsden e5baaad498 MDL-28728 SCORM Add missing string 2011-12-16 11:39:12 +08:00
Rajesh Taneja 8e8a8810de MDL-29067 Admin: Added spam checking on comments, messages and forum posts 2011-12-16 11:34:43 +08:00
adrian@moodle.com 177bc9c8b9 MDL-28948 - lib - removed the hard coded key for the rc4encryt function. 2011-12-16 09:14:53 +08:00
AMOS bot 33b8721c71 Automatically generated installer lang files 2011-12-16 00:31:19 +00:00
David Mudrak 6cf3a65082 MDL-30170 MNet peers administration - various usability improvements
While fixing MDL-30170, the following tiny usability details were
improved along the way:

* the maximum length of the peer site title and the hostname is now
  validated (this was actually a real bug as the default value is pre-loaded
  from the peer) so the admin gets a nice validation error instead of
  the database write exception when trying to register a host with a
  longer site title.
* hard-coded English string 'All Hosts' is now localized
* the hostname link in the list of MNet peers leads to the peer itself
2011-12-15 21:26:45 +01:00
David Mudrak 841b2a44ef MDL-30170 MNet peers administration - highlight the undelete widget
The patch highlights the undelete radio selector at the host edit form.
It moves it to the end of the form (near the submit button) and displays
an explanation above the radio selector.

Also, the list of deleted hosts is now displayed below the table of
active peers at the Manage peers page.

The data returned by mnet_get_hosts() function now contain the deleted
status, too. It is possible to obtain deleted hosts from that function
now.
2011-12-15 21:15:56 +01:00
Tim Hunt 98402da094 MDL-29176 quiz editing: can't move questions onto a new page. 2011-12-15 19:33:01 +00:00
Tim Hunt 76ffac7f93 MDL-30646 default qbank sort should only use visible columns. 2011-12-15 18:40:32 +00:00
sam marshall 782b21dc0f MDL-30764 Activity settings: do not disable grouping dropdown if it is already set 2011-12-15 16:47:08 +00:00
Justin Filip e0b587be49 MDL-30741 Adding a new test to check for incorrect parsing of complicate HTML with a PRE tag. 2011-12-15 11:10:32 -05:00
Justin Filip e60d8e5a42 MDL-30741 Fix the handling of PRE tags with the latest code from upstream: http://trac.roundcube.net/browser/trunk/roundcubemail/program/lib/html2text.php?rev=5497 2011-12-15 11:10:20 -05:00
Tim Hunt 67cb80dc09 MDL-30758 quiz_statistics report fails if all 1st attempts require grading 2011-12-15 12:52:10 +00:00
Tim Hunt abe73c6d99 MDL-30739 qtype numerical: upgrade script uses SQL that is not cross-DB. 2011-12-15 12:22:27 +00:00
Tim Hunt f455e4e9bd MDL-30744 question editing permissions. Update to new accessslib.php code.
I don't believe this will actually fix the reported problem, which I
cannot reproduce, but it should give us much better error messages, at
which point we can fix it.
2011-12-15 11:56:21 +00:00
Tim Hunt 6d3ac4035b MDL-30592 / MDL-27183 quiz statistics: fix merge problem.
These two fixes changes the same file in different ways, causing breakage.
2011-12-15 11:22:33 +00:00
Aparup Banerjee b057855440 MDL-28126 webservice : string fixed. 2011-12-15 18:05:13 +08:00
Marina Glancy 92ec74a9a7 MDL-30733: synchronizing view_feedback with parent function to work with advanced grading
assignment_upload::view_feedback was overriden. It is altered the same way as parent function was to work with advanced grading and so it is displayed correctly in user complete report
2011-12-15 16:47:18 +08:00
Jamie Pratt 9abb69aacb MDL-30749 fixing typo referring to question instead of answer object 2011-12-15 14:47:15 +07:00
Aparup Banerjee cb8e878573 Revert "MDL-30482 create new capability for viewing glossary entries" (test failed)
This reverts commit 03adb289ec.
2011-12-15 15:46:22 +08:00
Aparup Banerjee ba0c76e7a9 Revert "MDL-30482 - Glossary - Adding capability to other areas using glossary" (testing failed)
This reverts commit b2b9890d08.
2011-12-15 15:29:36 +08:00
Eloy Lafuente (stronk7) 40ab5a4010 MDL-30592 moodlelib: minor phpdocs/debug tweaks 2011-12-14 22:44:47 +01:00
Eloy Lafuente (stronk7) a30e3c5a1a Merge branch 'MDL-30592_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-14 22:44:33 +01:00
Tim Lock cb140ca0d6 MDL-30419: IMS package content missing when using Blackboard packages 2011-12-14 21:36:04 +01:00
Darko Miletic 4026898f5c MDL-30738: Fix for 2.2 stable 2011-12-14 15:06:31 -03:00
Tim Hunt 51d861632b MDL-30742 restoring 1.9 backups with missing question data should be robust 2011-12-14 17:18:04 +00:00
Jerome Mouneyrac 72306a6ff4 MDL-28126 webservices : should not able to create token if user is deleted,unconfirmed,suspended or guest. 2011-12-15 00:52:16 +08:00
Tim Hunt 9831354928 MDL-30734 question engine: sum_usage_marks_subquery edge-case.
When all qas in a useage are 'gaveup' state, it gives NULL, not 0.0, for the total.
2011-12-14 14:30:25 +00:00
Andrew Davis 925d068de1 MDL-13572 message: added validation of the email address in the messaging preferences 2011-12-14 17:48:36 +08:00
Andrew Davis 1a35796fba MDL-25561 grade: made the student names clickable on the user report 2011-12-14 15:33:10 +08:00
Jason Fowler b2b9890d08 MDL-30482 - Glossary - Adding capability to other areas using glossary 2011-12-14 15:02:51 +08:00
Aparup Banerjee 4f7dc83fe8 Revert "MDL-30482 - Glossary - Adding capability to other areas using glossary"
This reverts commit b23dd6ee72.
2011-12-14 15:02:37 +08:00
Dan Marsden 7c183f44d4 MDL-28728 SCORM - only show delete button if data exists for this user in this scorm 2011-12-14 13:42:14 +08:00
Dan Marsden 7d919d8f27 MDL-28728 SCORM - add capability to allow users to delete own attempts - given to no-one by default. 2011-12-14 13:42:06 +08:00
Aparup Banerjee 324ea4d7de MDL-29325 fixed typo - camelcasing. 2011-12-14 13:14:28 +08:00
Mayank Gupa 9ff12f3dae MDL-30576, Fixing cmi.completion_threshold and default value of minProgressMeasure to be saved correctly in the database. 2011-12-14 17:22:45 +13:00
Sam Hemelryk 83688ab542 Merge branch 'MDL-27183_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-14 17:17:29 +13:00
Eloy Lafuente (stronk7) 2b6d08a333 Merge branch 'wip-MDL-27767-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2011-12-14 03:16:31 +01:00
Mark Nielsen e2acc0a010 MDL-29048 Glossary Force glossary type to secondary while trying to duplicate a mail glossary 2011-12-14 07:28:28 +05:30
Eloy Lafuente (stronk7) c5b8cda403 Merge branch 'w51_MDL-30605_m22_env23' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-14 02:39:11 +01:00
Sam Hemelryk d4b584c5f6 Merge branch 'MDL-30463_m22' of git://github.com/rwijaya/moodle into MOODLE_22_STABLE 2011-12-14 14:25:17 +13:00
Sam Hemelryk 2f24a39b5b Merge branch 'MDL-30140-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2011-12-14 14:08:21 +13:00
AMOS bot de1b85d795 Automatically generated installer lang files 2011-12-14 00:31:23 +00:00
Tim Hunt d6b040af81 MDL-30683 don't show overall feedback in the quiz grades report.
The grades are small, while the feedback can be big, which breaks the table layout.
2011-12-13 16:51:35 +00:00
Aparup Banerjee a23463acec Merge branch 'MDL-29772-22' of git://github.com/bostelm/moodle into MOODLE_22_STABLE 2011-12-13 17:05:07 +08:00
Aparup Banerjee 3b89933d9f MDL-29325 Enrol : reduced isset calls and improved readability 2011-12-13 16:36:49 +08:00
Dan Marsden 903ab24de4 MDL-29325 imsenterprise enrolment - allow more flexible naming of courses - thanks to Adam Barbary for patch 2011-12-13 16:27:37 +08:00
Mayank Gupa 5c8e2b97d3 MDL-30577, fixing cmi.credit, cmi.mode are not evaluated correctly 2011-12-13 14:49:47 +08:00
Aparup Banerjee 9dfd9a124d Merge branch 'MDL-30472-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2011-12-13 14:36:02 +08:00
Andrew Robert Nicols db5602f751 MDL-30362 Change icon class for editsection icons in course formats 2011-12-13 14:30:21 +08:00
Aparup Banerjee a3bb5afdd0 Merge branch 'MDL-30562_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-13 14:01:57 +08:00
Alexnader Bias 423dc3b17e MDL-30472 Course Making user lists sortable when lastacess field is hidden 2011-12-13 10:53:52 +05:30
Aparup Banerjee 3a353b12ba Merge branch 'MDL-30655-m22' of git://github.com/sammarshallou/moodle into MOODLE_22_STABLE 2011-12-13 13:21:05 +08:00
Tim Hunt 26ebc41703 MDL-30559 conditional availability: missing validation of grade rules. 2011-12-13 12:07:47 +08:00
Jason Fowler b23dd6ee72 MDL-30482 - Glossary - Adding capability to other areas using glossary 2011-12-13 11:51:40 +08:00
Charles Fulton 03adb289ec MDL-30482 create new capability for viewing glossary entries 2011-12-13 11:51:33 +08:00
Petr Skoda 1a52d9e2cc MDL-30575 more mail header cleanup 2011-12-13 10:23:56 +08:00
Mayank Gupa 1daa8c0821 MDL-30645, Fixing evaluation of default value of CMI elements. 2011-12-13 10:16:09 +08:00
Andrew Robert Nicols 51a2716e6b MDL-30653 Remove duplicate Participants link from navbar 2011-12-13 12:09:02 +13:00
Sam Hemelryk b3463f416c Merge branch 'MDL-30677_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-13 11:20:04 +13:00
Sam Hemelryk fc97bb9863 Merge branch 'MDL-30532_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-13 11:15:08 +13:00
Sam Hemelryk 8c495ea4ee Merge branch 'MDL-30498a_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-13 11:11:21 +13:00
Sam Hemelryk bb0ece5a0c Merge branch 'MDL-27143_22' of git://github.com/timhunt/moodle into MOODLE_22_STABLE 2011-12-13 10:26:31 +13:00
Sam Hemelryk e79c09855c Merge branch 'w51_MDL-30621_m22_protectdir' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-13 10:17:56 +13:00
Henning Bostelmann 1f00dc45d4 MDL-29772 Adaptive question behaviour: improve penalty information
also fixes MDL-29780: suppress penalty information if question penalty is 0
2011-12-12 15:38:16 +00:00
Petr Skoda f9c5bd9234 MDL-30621 more dataroot protection 2011-12-12 15:07:25 +01:00
Rossiani Wijaya f6b9be73f5 MDL-30463 lesson module: add space between yes and no options on start last attempt page 2011-12-12 17:13:45 +08:00
Rossiani Wijaya f08f05610b MDL-29239 fixed edit course setting for moodle/course:changesummary permission is set to prevent. 2011-12-12 15:53:54 +08:00
Aparup Banerjee b750cfde81 Merge branch 'w51_MDL-30613_m22_FULLME' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 15:05:37 +08:00
Aparup Banerjee 7210cb5d19 MDL-30603 synced and renamed incorrect ZF 1.10.6 file and name 2011-12-12 14:08:00 +08:00
Sam Hemelryk 860f7f9195 Merge branch 'w51_MDL-29117_m22_enrolnewcourse' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 17:59:24 +13:00
Sam Hemelryk a3a3186770 Merge branch 'w51_MDL-30292_m22_health' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 17:41:00 +13:00
Sam Hemelryk 424f91c056 Merge branch 'w51_MDL-30364_m22_report' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 17:37:39 +13:00
Petr Skoda 56b77440ad MDL-30415 prevent yui2 rollups in debug mode 2011-12-12 17:33:22 +13:00
Petr Skoda 92bf70765a MDL-30502 remove bogus role name param
Credit goes to Michael J Litzkow.
2011-12-12 17:24:43 +13:00
Sam Hemelryk 653599b3a4 Merge branch 'w51_MDL-30588_m22_switchrole' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 17:14:58 +13:00
Sam Hemelryk ba9489ce91 Merge branch 'w51_MDL-30659_m22_yuidebug' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 16:37:03 +13:00
Sam Hemelryk 6aabb69f9e Merge branch 'w51_MDL-30687_m22_ldapnewcourse' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-12 16:10:19 +13:00
Sam Hemelryk 02af5654f2 Merge branch 'MDL-29942-MOODLE_22_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_22_STABLE 2011-12-12 15:13:01 +13:00
Sam Hemelryk 4e8da675ac Merge branch 'MDL-28180_22' of git://github.com/stronk7/moodle into MOODLE_22_STABLE 2011-12-12 14:56:40 +13:00
Sam Hemelryk d3054582d5 Merge branch 'MDL-30198-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2011-12-12 13:57:40 +13:00
Andrew Robert Nicols c3c2a213a2 MDL-29195 Remove duplicate Participants -> Notes from navbar 2011-12-12 13:51:07 +13:00
Eloy Lafuente (stronk7) ed9c60fed7 MDL-28180 backup - on restore always prevent completion_aggr_methd dupes
This covers the last case where dupes could be happening in the
completion_aggr_methd table: Restoring one complete course into
an existing one, adding information. Now we always check if the
aggr_method exists before inserting it.
2011-12-11 23:03:51 +01:00
Eloy Lafuente (stronk7) 9de951556f MDL-28180 backup - take rid of dupes in course_completion_aggr_methd 2011-12-11 22:14:02 +01:00
Eloy Lafuente (stronk7) ff4a2ddef7 MDL-28180 backup - set excluded activities for any non-course operation 2011-12-11 21:37:33 +01:00
Petr Skoda 8d7ec82427 MDL-30687 use course defaults when template not set in ldap enrol 2011-12-11 11:07:00 +01:00
Petr Skoda c4437be63b MDL-29117 use default course settings when template not set in db enrol 2011-12-11 10:58:37 +01:00
Petr Skoda 7f467e69c0 MDL-30292 rework trailing whitespace test
Now compatible with zlib compression.
2011-12-10 20:34:20 +01:00
Petr Skoda d59ef547c9 MDL-30364 fix user report regressions 2011-12-10 20:19:07 +01:00
Petr Skoda abf82af8f7 MDL-30621 prevent warnings when creating temp and cache dirs 2011-12-10 17:35:56 +01:00
Petr Skoda 5cb418e9f8 MDL-30659 fix use of yui filters 2011-12-10 13:52:41 +01:00
Petr Skoda 7109330e9a MDL-30659 fix phpdocs problems 2011-12-10 13:52:40 +01:00
Petr Skoda e467ed219f DML-30588 do not require enrollment after switching of roles 2011-12-10 12:45:06 +01:00
AMOS bot f0c8bb711f Automatically generated installer lang files 2011-12-10 00:31:25 +00:00
Petr Skoda cfef4e754a MDL-30610 new environment requirements for 2.3 2011-12-09 21:55:23 +01:00
Petr Skoda cbd8609407 MDL-30613 use standard https checks 2011-12-09 21:27:10 +01:00
Tim Hunt 2a1733aafc MDL-30592 question_bank: make files in qtext work in the question list. 2011-12-09 19:24:20 +00:00
Tim Hunt 1357ab1d5b MDL-30592 quiz statistics, ensure images in the question text appear. 2011-12-09 19:24:13 +00:00
Tim Hunt 001f78b41f MDL-30592 moodlelib: new helper component_callback
I chose to be slighly inconsistent with plugin_callback in order to make a nicer API.
2011-12-09 19:23:54 +00:00
Tim Hunt 853f2e8eea MDL-30677 quiz: fix attempt counts when a student is in several groups. 2011-12-09 17:59:29 +00:00
Valeriy Streltsov 00c7590c95 MDL-30562 qtypes: extra_answer_fields & questionid_column_name public
Will let us make more of qtype backup and restore work automatically.
2011-12-09 17:58:31 +00:00
Tim Hunt 24e5fcbe26 MDL-30532 qeupgradehelper has broken links to quizzes. 2011-12-09 17:57:35 +00:00
Tim Hunt 4d8a37a0db MDL-30498 user name can overlap user report icon. 2011-12-09 17:57:06 +00:00
Tim Hunt 3cba5809ae MDL-27183 quiz reports: don't show data to users not in any group
if the quiz is set to separate groups, and the user does not have access all groups.
2011-12-09 17:56:35 +00:00
Tim Hunt d7320fc84a MDL-27143 question bank: questions not saved when deleting a category.
Based on a fix by Nikhil Gupta.
2011-12-09 17:56:05 +00:00
sam marshall cff596e51b MDL-30655 Blocks: Moving block to top of list can cause (harmless) PHP warnings 2011-12-09 17:45:57 +00:00
Eloy Lafuente (stronk7) acb3bf8ac1 weekly release 2.2+ 2011-12-09 16:27:08 +01:00
Eloy Lafuente (stronk7) ebd748fd71 Merge branch 'install_22_STABLE' of git://github.com/amosbot/moodle into MOODLE_22_STABLE 2011-12-09 16:09:25 +01:00
Tim Hunt 653e811ec0 MDL-30660 javascript-static: another yui3/ticket/2531561 work-around. 2011-12-09 12:41:36 +01:00
Petr Skoda 81dda1da15 MDL-30625 fail gracefully when admins not defined 2011-12-09 10:57:42 +01:00
Aparup Banerjee 9cd8fdda3c MDL-30542 minor string change 2011-12-09 17:10:12 +08:00
Jerome Mouneyrac c532957be2 MDL-30140 alternative way to select user when adding a token. When more than 500 users we display a text box instead of a select box 2011-12-09 14:51:31 +08:00
Mitsuhiro ad86ee91e9 MDL-30198 Glossary Changing string during imports 2011-12-09 10:10:38 +05:30
Petr Skoda 11892d8fdf MDL-27364 use https for recaptcha when site runs via https
Based on solution by Rajesh Taneja.
2011-12-09 11:10:13 +08:00
Tim Hunt 00aa596e8e MDL-30558 question bank, missing string with obscure permissions.
AMOS BEGIN
 MOV [selectcategoryabove,mod_quiz],[selectcategoryabove,question]
AMOS END
2011-12-09 10:47:19 +08:00
Dan Marsden 7b80d3c65a MDL-26974 - add extra logging information all the time - not just when debugging is on. 2011-12-09 10:21:08 +08:00
Mayank Gupa 7da6c0f82d MDL-30579, fixing Data Model Elements are being initialized with an empty string 2011-12-09 10:16:06 +08:00
Tim Hunt a6395af1b9 MDL-27314 quiz reports: fix JS confirmation before deleting attempts. 2011-12-09 02:35:38 +01:00
Eloy Lafuente (stronk7) 4dbdc834ff MDL-30604 Added 2 missing messages andd deleting an incorrect one 2011-12-09 02:10:18 +01:00
Aparup Banerjee bc3801cb9c MDL-30604 Added upgrade lines to upgrade.php(s) 2011-12-09 02:03:58 +01:00
AMOS bot 4e7a371b2e Automatically generated installer lang files 2011-12-09 00:31:16 +00:00
Petr Skoda db48cf080d MDL-30625 full support for main admin 2011-12-09 00:13:05 +01:00
Sam Hemelryk e0745be16b Merge branch 'MDL-30660' of git://github.com/timhunt/moodle 2011-12-09 11:48:01 +13:00
Tim Hunt 9671325a35 MDL-29579 quiz statistics, include qtext in full XHTML export. 2011-12-08 23:37:19 +01:00
Tim Hunt 1e92c729ba MDL-30660 javascript-static: M.util.show_confirm_dialog fixes 2011-12-08 17:51:45 +00:00
Dan Marsden 347f822856 MDL-30028 - use page pref correctly when pagination or re-ordering 2011-12-08 17:07:32 +08:00
Aparup Banerjee 0f69a9eaaf Merge branch 'wip-MDL-30336-MOODLE_22_STABLE' of git://github.com/abgreeve/moodle into MOODLE_22_STABLE 2011-12-08 16:19:02 +08:00
Aparup Banerjee cdbd44f00e Merge branch 'wip-mdl-30560-m22' of git://github.com/rajeshtaneja/moodle into MOODLE_22_STABLE 2011-12-08 15:54:55 +08:00
Jerome Mouneyrac 6ae2048c1f MDL-29942 trigger user events in web service calls 2011-12-08 15:19:45 +08:00
Andrew Robert Nicols 02ed16902b MDL-30350 Highlight late submissions in the submission overview page 2011-12-08 14:27:22 +08:00
Aparup Banerjee 30e1b79889 Merge branch 'MDL-27432_gd_error_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2011-12-08 14:04:46 +08:00
Aparup Banerjee d30043c852 Merge branch 'MDL-28710_rating_classes_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2011-12-08 13:48:27 +08:00
Aparup Banerjee add75e9682 Merge branch 'MDL-30607_override_email_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2011-12-08 13:39:49 +08:00
Sam Hemelryk 78baf38ea4 Merge branch 'MDL-30518' of git://github.com/mackensen/moodle into MOODLE_22_STABLE 2011-12-08 16:05:08 +13:00
Petr Skoda cad8d5ccb0 MDL-30528 stop recreating role_assignments on every login attempt for each user
Credit goes to Luis Gustavo Mueller de Alcantara.
2011-12-08 15:51:08 +13:00
adrian@moodle.com a52422abcb MDL-30336 - login - Added a setting in security that allows auto complete to be set to off in password fields. 2011-12-08 09:08:38 +08:00
Sam Hemelryk a33d85b374 Merge branch 'w50_MDL-30623_m22_guest' of git://github.com/skodak/moodle into MOODLE_22_STABLE 2011-12-08 13:50:03 +13:00
Eloy Lafuente (stronk7) da3494a8c4 Merge branch 'wip-MDL-30582-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2011-12-08 01:37:03 +01:00
AMOS bot ae7aad593c Automatically generated installer lang files 2011-12-08 00:31:19 +00:00
Eloy Lafuente (stronk7) cf2d7311ab Merge branch 'MDL-26522_user_report_menu_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE 2011-12-08 01:02:01 +01:00
Igor Sazonov 8f64668af2 MDL-27314 quiz attempts cannot be deleted in separate groups mode. 2011-12-08 00:46:49 +01:00
Jerome Mouneyrac 2af51a1dc3 MDL-29712 REST-XML server was translating too many HTML characters. use htmlspecialchars instead of htmlentities. Translated characters by htmlspecialchars are compatible with XML validation, and so XML parsers for javascript, java... 2011-12-08 12:42:44 +13:00
Eloy Lafuente (stronk7) 17e0ed7919 Merge branch 'wip-MDL-30222-m22' of git://github.com/samhemelryk/moodle into MOODLE_22_STABLE 2011-12-08 00:39:53 +01:00
Dan Marsden 7e4c833c5a MDL-30211 imsenterprise enrolment - set up default enrolment methods in new courses 2011-12-08 10:49:58 +13:00
Dan Marsden 264ca6c58d MDL-30536 Choice - remove setType so that validation works when JS is disabled 2011-12-08 10:36:48 +13:00
Sam Hemelryk b1d4c42ad6 Merge branch 'MDL-28282-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2011-12-08 10:22:58 +13:00
Sam Hemelryk 7f96df6222 Merge branch 'MDL-28588-m22' of git://github.com/ankitagarwal/moodle into MOODLE_22_STABLE 2011-12-08 10:19:22 +13:00
Petr Skoda 73553ddbaa MDL-30623 fix password upgrade path from 1.9 2011-12-07 09:15:37 +01:00
Petr Skoda a6adddfb7d MDL-30623 fix null guest passwords in existing 2.2 sites 2011-12-07 09:15:37 +01:00
Petr Skoda f10ad2d4eb MDL-30623 make sure guest password field is not null 2011-12-07 09:15:36 +01:00
Rajesh Taneja e61eecacc8 MDL-30560 Forms Lib: 'type' key for repeat_elements is restored 2011-12-07 12:04:54 +08:00
Andrew Davis 924deffba6 MDL-30607 message: removed an if condition that prevented you from clearing an overrident email address 2011-12-07 12:04:47 +08:00
Andrew Davis de276c9216 MDL-28710 rating: added some more classes to the html for entering ratings 2011-12-07 11:54:10 +08:00
Andrew Davis aed70c6d40 MDL-27432 mod_data: improved handling of the absence of the GD php extension 2011-12-07 11:48:49 +08:00
Andrew Davis b11d6236df MDL-26522 grade: made the user selection drop down on the user report behave more sensibly 2011-12-07 11:42:44 +08:00
Charles Fulton 4921fb4c9f MDL-19147 - forum - Removed single discussions from the pull down menu for moving posts to different forums. 2011-12-07 14:21:21 +13:00
AMOS bot 6a8a17eb28 Automatically generated installer lang files 2011-12-07 00:31:18 +00:00
Charles Fulton c114ff92bb MDL-19147 - forum - Removed single discussions from the pull down menu for moving posts to different forums. 2011-12-07 12:39:56 +13:00
Ankit Kumar Agarwal a77b489d67 MDL-28588 Removing IN from SQL statments 2011-12-06 11:06:23 +05:30
Ankit Kumar Agarwal 9d7ce57ae3 MDL-28282 Scorm Restorting Groups support in Scorm reports 2011-12-06 09:59:26 +05:30
Sam Hemelryk 28a6552570 MDL-30582 navigation: Fixed regression in generation of front page modules 2011-12-06 13:34:27 +13:00
Sam Hemelryk 6f2d62d022 MDL-27767 install: Shows notifications rather than throwing exceptions when installation encounters unexpected id for guest or admin 2011-12-06 12:22:17 +13:00
Sam Hemelryk a9cc3954b9 MDL-30222 Fixed home page redirection madness. Thank you Julien Boulen for providing the solution 2011-12-06 12:08:32 +13:00
AMOS bot 2324ddd3d5 Automatically generated installer lang files 2011-12-05 18:36:41 +01:00
28832 changed files with 1486785 additions and 4251550 deletions
-312
View File
@@ -1,312 +0,0 @@
{
'plugins': [
'babel',
'promise',
'jsdoc',
],
'env': {
'browser': true,
// Enable ES6+ features by default.
// See http://eslint.org/docs/user-guide/configuring#specifying-environments
// Note: The YUI override must exactly match this when disabling the ES6+ version because those features are not supported by Shifter.
'es2020': true,
'amd': true
},
'globals': {
'M': true,
'Y': true
},
'rules': {
// See http://eslint.org/docs/rules/ for all rules and explanations of all
// rules.
// === Possible Errors ===
'comma-dangle': 'off',
'no-compare-neg-zero': 'error',
'no-cond-assign': 'error',
'no-console': 'error',
'no-constant-condition': 'error',
'no-control-regex': 'error',
'no-debugger': 'error',
'no-dupe-args': 'error',
'no-dupe-keys': 'error',
'no-duplicate-case': 'error',
'no-empty': 'warn',
'no-empty-character-class': 'error',
'no-ex-assign': 'error',
'no-extra-boolean-cast': 'error',
'no-extra-parens': 'off',
'no-extra-semi': 'error',
'no-func-assign': 'error',
'no-inner-declarations': 'error',
'no-invalid-regexp': 'error',
'no-irregular-whitespace': 'error',
'no-obj-calls': 'error',
'no-prototype-builtins': 'off',
'no-regex-spaces': 'error',
'no-sparse-arrays': 'error',
'no-unexpected-multiline': 'error',
'no-unreachable': 'warn',
'no-unsafe-finally': 'error',
'no-unsafe-negation': 'error',
'use-isnan': 'error',
'valid-jsdoc': ['warn', { 'requireReturn': false, 'requireParamDescription': false, 'requireReturnDescription': false }],
'valid-typeof': 'error',
// === Best Practices ===
// (these mostly match our jshint config)
'array-callback-return': 'warn',
'block-scoped-var': 'warn',
'complexity': 'warn',
'consistent-return': 'warn',
'curly': 'error',
'dot-notation': 'warn',
'no-alert': 'warn',
'no-caller': 'error',
'no-case-declarations': 'error',
'no-div-regex': 'error',
'no-empty-pattern': 'error',
'no-empty-function': 'warn',
'no-eq-null': 'error',
'no-eval': 'error',
'no-extend-native': 'error',
'no-extra-bind': 'warn',
'no-fallthrough': 'error',
'no-floating-decimal': 'warn',
'no-global-assign': 'warn',
'no-implied-eval': 'error',
'no-invalid-this': 'error',
'no-iterator': 'error',
'no-labels': 'error',
'no-loop-func': 'error',
'no-multi-spaces': 'warn',
'no-multi-str': 'error',
'no-new-func': 'error',
'no-new-wrappers': 'error',
'no-octal': 'error',
'no-octal-escape': 'error',
'no-proto': 'error',
'no-redeclare': 'warn',
'no-restricted-globals': ['error', { 'name': 'Notification' }],
'no-return-assign': 'error',
'no-script-url': 'error',
'no-self-assign': 'error',
'no-self-compare': 'error',
'no-sequences': 'warn',
'no-throw-literal': 'warn',
'no-unmodified-loop-condition': 'error',
'no-unused-expressions': 'error',
'no-unused-labels': 'error',
'no-useless-call': 'warn',
'no-useless-escape': 'warn',
'no-with': 'error',
'wrap-iife': ['error', 'any'],
// === Variables ===
'no-delete-var': 'error',
'no-undef': 'error',
'no-undef-init': 'error',
'no-unused-vars': ['error', { 'caughtErrors': 'none' }],
// === Stylistic Issues ===
'array-bracket-spacing': 'warn',
'block-spacing': 'warn',
'brace-style': ['warn', '1tbs'],
'camelcase': 'warn',
'capitalized-comments': ['warn', 'always', { 'ignoreConsecutiveComments': true }],
'comma-spacing': ['warn', { 'before': false, 'after': true }],
'comma-style': ['warn', 'last'],
'computed-property-spacing': 'error',
'consistent-this': 'off',
'eol-last': 'off',
'func-call-spacing': ['warn', 'never'],
'func-names': 'off',
'func-style': 'off',
// indent currently not doing well with our wrapping style, so disabled.
'indent': ['off', 4, { 'SwitchCase': 1 }],
'key-spacing': ['warn', { 'beforeColon': false, 'afterColon': true, 'mode': minimum }],
'keyword-spacing': 'warn',
'linebreak-style': ['error', 'unix'],
'lines-around-comment': 'off',
'max-len': ['error', 132],
'max-lines': 'off',
'max-depth': 'warn',
'max-nested-callbacks': ['warn', 5],
'max-params': 'off',
'max-statements': 'off',
'max-statements-per-line': ['warn', { max: 2 }],
'new-cap': ['warn', { 'properties': false }],
'new-parens': 'warn',
'newline-after-var': 'off',
'newline-before-return': 'off',
'newline-per-chained-call': 'off',
'no-array-constructor': 'off',
'no-bitwise': 'error',
'no-continue': 'off',
'no-inline-comments': 'off',
'no-lonely-if': 'off',
'no-mixed-operators': 'off',
'no-mixed-spaces-and-tabs': 'error',
'no-multiple-empty-lines': 'warn',
'no-negated-condition': 'off',
'no-nested-ternary': 'warn',
'no-new-object': 'off',
'no-plusplus': 'off',
'no-tabs': 'error',
'no-ternary': 'off',
'no-trailing-spaces': 'error',
'no-underscore-dangle': 'off',
'no-unneeded-ternary': 'off',
'no-whitespace-before-property': 'warn',
'object-curly-newline': 'off',
'object-curly-spacing': 'warn',
'object-property-newline': 'off',
'one-var': 'off',
'one-var-declaration-per-line': ['warn', 'initializations'],
'operator-assignment': 'off',
'operator-linebreak': 'off',
'padded-blocks': 'off',
'quote-props': ['warn', 'as-needed', {'unnecessary': false, 'keywords': true, 'numbers': true}],
'quotes': 'off',
'require-jsdoc': 'warn',
'semi': 'error',
'semi-spacing': ['warn', {'before': false, 'after': true}],
'sort-vars': 'off',
'space-before-blocks': 'warn',
'space-before-function-paren': ['warn', 'never'],
'space-in-parens': 'warn',
'space-infix-ops': 'warn',
'space-unary-ops': 'warn',
'spaced-comment': 'warn',
'unicode-bom': 'error',
'wrap-regex': 'off',
// === Promises ===
'promise/always-return': 'warn',
'promise/no-return-wrap': 'warn',
'promise/param-names': 'warn',
'promise/catch-or-return': ['warn', {terminationMethod: ['catch', 'fail']}],
'promise/no-native': 'warn',
'promise/no-promise-in-callback': 'warn',
'promise/no-callback-in-promise': 'warn',
'promise/avoid-new': 'warn',
// === Deprecations ===
"no-restricted-properties": ['warn', {
'object': 'M',
'property': 'str',
'message': 'Use AMD module "core/str" or M.util.get_string()'
}],
},
overrides: [
{
files: ["**/yui/src/**/*.js"],
'env': {
// Disable ES6+ for YUI files.
'es2020': false,
},
// Disable some rules which we can't safely define for YUI rollups.
rules: {
'no-undef': 'off',
'no-unused-vars': 'off',
'no-unused-expressions': 'off',
// === JSDocs ===
"jsdoc/check-access": 'off',
"jsdoc/check-alignment": 'off',
"jsdoc/check-param-names": 'off',
"jsdoc/check-property-names": 'off',
"jsdoc/empty-tags": 'off',
"jsdoc/implements-on-classes": 'off',
"jsdoc/multiline-blocks": 'off',
"jsdoc/require-jsdoc": 'off',
"jsdoc/require-param": 'off',
"jsdoc/require-param-name": 'off',
"jsdoc/require-param-type": 'off',
"jsdoc/require-property": 'off',
"jsdoc/require-property-name": 'off',
"jsdoc/require-property-type": 'off',
}
},
{
files: ["**/amd/src/*.js", "**/amd/src/**/*.js", "Gruntfile.js", ".grunt/*.js", ".grunt/tasks/*.js", "jsdoc.conf.js"],
// We're using babel transpiling so use their parser
// for linting.
parser: '@babel/eslint-parser',
// Check AMD with some slightly stricter rules.
rules: {
'no-unused-vars': 'error',
'no-implicit-globals': 'error',
// Disable all of the rules that have babel versions.
'new-cap': 'off',
// Not using this rule for the time being because it isn't
// compatible with jQuery and ES6.
'no-invalid-this': 'off',
'object-curly-spacing': 'off',
'quotes': 'off',
'semi': 'off',
'no-unused-expressions': 'off',
// Enable all of the babel version of these rules.
'babel/new-cap': ['warn', { 'properties': false }],
// Not using this rule for the time being because it isn't
// compatible with jQuery and ES6.
'babel/no-invalid-this': 'off',
'babel/object-curly-spacing': 'warn',
// This is off in the original style int.
'babel/quotes': 'off',
'babel/semi': 'error',
'babel/no-unused-expressions': 'error',
// === Promises ===
// We have Promise now that we're using ES6.
'promise/no-native': 'off',
'promise/avoid-new': 'off',
// === JSDocs ===
"jsdoc/check-access": [
'error',
],
"jsdoc/check-alignment": 1, // Recommended.
"jsdoc/check-param-names": [
'error',
],
"jsdoc/check-property-names": [
'error',
],
"jsdoc/empty-tags": [
'error',
],
"jsdoc/implements-on-classes": [
'error',
],
"jsdoc/multiline-blocks": [
'error',
],
"jsdoc/require-jsdoc": [
'error',
],
"jsdoc/require-param": [
'error',
],
"jsdoc/require-param-name": [
'error',
],
"jsdoc/require-param-type": [
'error',
],
"jsdoc/require-property": [
'error',
],
"jsdoc/require-property-name": [
'error',
],
"jsdoc/require-property-type": [
'error',
],
},
parserOptions: {
'sourceType': 'module',
'requireConfigFile': false,
}
}
]
}
-24
View File
@@ -1,24 +0,0 @@
{
"indentation": ["on",{
"Feature": 0,
"Background": 2,
"Scenario": 2,
"Examples": 4,
"example": 6,
"Step": 4,
"given": 4,
"and": 4
}],
"no-dupe-feature-names": "on",
"no-dupe-scenario-names": "off",
"no-empty-file": "on",
"no-files-without-scenarios": "on",
"no-multiple-empty-lines": "on",
"no-partially-commented-tag-lines": "on",
"no-trailing-spaces": "on",
"no-unnamed-features": "on",
"no-unnamed-scenarios": "on",
"no-scenario-outlines-without-examples": "on",
"no-examples-in-scenarios": "on",
"new-line-at-eof": ["on", "yes"]
}
-3
View File
@@ -1,3 +0,0 @@
**/yui/build/** -diff
**/amd/build/** -diff
lib/dml/oci_native_moodle_package.sql text eol=lf
-2
View File
@@ -1,2 +0,0 @@
# Primary donations pages.
custom: ["https://moodle.com/donations/", moodle.org]
-71
View File
@@ -1,71 +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/>.
/**
* Template configuraton file for github actions CI/CD.
*
* @package core
* @copyright 2020 onwards Eloy Lafuente (stronk7) {@link https://stronk7.com}
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// This cannot be used out from a github actions workflow, so just exit.
getenv('GITHUB_WORKFLOW') || die; // phpcs:ignore moodle.Files.MoodleInternal.MoodleInternalGlobalState
unset($CFG);
global $CFG;
$CFG = new stdClass();
$CFG->dbtype = getenv('dbtype');
$CFG->dblibrary = 'native';
$CFG->dbhost = '127.0.0.1';
$CFG->dbname = 'test';
$CFG->dbuser = 'test';
$CFG->dbpass = 'test';
$CFG->prefix = 'm_';
$CFG->dboptions = ['dbcollation' => 'utf8mb4_bin'];
$host = 'localhost';
$CFG->wwwroot = "http://{$host}";
$CFG->dataroot = realpath(dirname(__DIR__)) . '/moodledata';
$CFG->admin = 'admin';
$CFG->directorypermissions = 0777;
// Debug options - possible to be controlled by flag in future.
$CFG->debug = (E_ALL | E_STRICT); // DEBUG_DEVELOPER.
$CFG->debugdisplay = 1;
$CFG->debugstringids = 1; // Add strings=1 to url to get string ids.
$CFG->perfdebug = 15;
$CFG->debugpageinfo = 1;
$CFG->allowthemechangeonurl = 1;
$CFG->passwordpolicy = 0;
$CFG->cronclionly = 0;
$CFG->pathtophp = getenv('pathtophp');
$CFG->phpunit_dataroot = realpath(dirname(__DIR__)) . '/phpunitdata';
$CFG->phpunit_prefix = 't_';
define('TEST_EXTERNAL_FILES_HTTP_URL', 'http://localhost:8080');
define('TEST_EXTERNAL_FILES_HTTPS_URL', 'http://localhost:8080');
define('TEST_SESSION_REDIS_HOST', 'localhost');
define('TEST_CACHESTORE_REDIS_TESTSERVERS', 'localhost');
// TODO: add others (solr, mongodb, memcached, ldap...).
// Too much for now: define('PHPUNIT_LONGTEST', true); // Only leaves a few tests out and they are run later by CI.
require_once(__DIR__ . '/lib/setup.php');
-118
View File
@@ -1,118 +0,0 @@
name: Core
on:
push:
branches-ignore:
- master
- MOODLE_[0-9]+_STABLE
tags-ignore:
- v[0-9]+.[0-9]+.[0-9]+*
env:
php: 8.2
jobs:
Grunt:
runs-on: ubuntu-22.04
steps:
- name: Checking out code
uses: actions/checkout@v3
- name: Configuring node & npm
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Installing node stuff
run: npm install
- name: Running grunt
run: npx grunt
- name: Looking for uncommitted changes
# Add all files to the git index and then run diff --cached to see all changes.
# This ensures that we get the status of all files, including new files.
# We ignore npm-shrinkwrap.json to make the tasks immune to npm changes.
run: |
git add .
git reset -- npm-shrinkwrap.json
git diff --cached --exit-code
PHPUnit:
runs-on: ${{ matrix.os }}
services:
exttests:
image: moodlehq/moodle-exttests
ports:
- 8080:80
redis:
image: redis
ports:
- 6379:6379
strategy:
fail-fast: false
matrix:
include:
# MySQL builds always run with the lowest PHP supported version.
- os: ubuntu-22.04
php: 8.0
extensions:
db: mysqli
# PostgreSQL builds always run with the highest PHP supported version.
- os: ubuntu-22.04
php: 8.2
db: pgsql
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: moodlehq/mysql-action@v1
with:
collation server: utf8mb4_bin
mysql version: 8.0
mysql database: test
mysql user: test
mysql password: test
use tmpfs: true
tmpfs size: '1024M'
extra conf: --skip-log-bin
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
uses: m4nu56/postgresql-action@v1
with:
postgresql version: 13
postgresql db: test
postgresql user: test
postgresql password: test
- name: Configuring git vars
uses: rlespinasse/github-slug-action@v4
- name: Setting up PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: max_input_vars=5000
coverage: none
- name: Checking out code from ${{ env.GITHUB_REF_SLUG }}
uses: actions/checkout@v3
- name: Setting up PHPUnit
env:
dbtype: ${{ matrix.db }}
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV # Inject installed pathtophp to env. The template config needs it.
cp .github/workflows/config-template.php config.php
mkdir ../moodledata
sudo locale-gen en_AU.UTF-8
php admin/tool/phpunit/cli/init.php --no-composer-self-update
- name: Running PHPUnit tests
env:
dbtype: ${{ matrix.db }}
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options
-144
View File
@@ -1,144 +0,0 @@
name: Windows Testing
on:
workflow_dispatch
env:
php: 8.2
jobs:
Grunt:
runs-on: windows-latest
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checking out code
uses: actions/checkout@v3
- name: Configuring node & npm
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Installing node stuff
run: npm ci
- name: Running grunt
run: npx grunt
- name: Looking for uncommitted changes
# Add all files to the git index and then run diff --cached to see all changes.
# This ensures that we get the status of all files, including new files.
# We ignore npm-shrinkwrap.json to make the tasks immune to npm changes.
run: |
git add .
git reset -- npm-shrinkwrap.json
git diff --cached --exit-code
PHPUnit:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
php: 8.2
# Ideally we should use mysql/mariadb, but they are 4x slower without tweaks and configuration
# so let's run only postgres (1.5h vs 6h) only, If some day we want to improve the mysql runs,
# this is the place to enable them.
# db: mysqli
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium, zip
- os: windows-latest
php: 8.0
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: shogo82148/actions-setup-mysql@v1
with:
mysql-version: 8.0
user: test
password: test
- name: Creating DB mysql
if: ${{ matrix.db == 'mysqli' }}
run: mysql --host 127.0.0.1 -utest -ptest -e 'CREATE DATABASE IF NOT EXISTS test COLLATE = utf8mb4_bin;';
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
run: |
# TODO: Remove these conf. modifications when php74 or php80 are lowest.
# Change to old md5 auth, because php73 does not support it.
# #password_encryption = scram-sha-256
(Get-Content "$env:PGDATA\postgresql.conf"). `
replace('#password_encryption = scram-sha-256', 'password_encryption = md5') | `
Set-Content "$env:PGDATA\postgresql.conf"
(Get-Content "$env:PGDATA\pg_hba.conf"). `
replace('scram-sha-256', 'md5') | `
Set-Content "$env:PGDATA\pg_hba.conf"
$pgService = Get-Service -Name postgresql*
Set-Service -InputObject $pgService -Status running -StartupType automatic
Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
& $env:PGBIN\psql --command="CREATE USER test PASSWORD 'test'" --command="\du"
- name: Creating DB pgsql
if: ${{ matrix.db == 'pgsql' }}
run: |
& $env:PGBIN\createdb --owner=test test
$env:PGPASSWORD = 'test'
& $env:PGBIN\psql --username=test --host=localhost --list test
- name: Configuring git vars
uses: rlespinasse/github-slug-action@v4
- name: Setting up PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: max_input_vars=5000
coverage: none
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checking out code from ${{ env.GITHUB_REF_SLUG }}
uses: actions/checkout@v3
# Needs to be done after php is available, git configured and Moodle checkout has happened.
- name: Setting up moodle-exttests service
run: |
git clone https://github.com/moodlehq/moodle-exttests.git
nssm install php-built-in C:\tools\php\php.exe -S localhost:8080 -t D:\a\moodle\moodle\moodle-exttests
nssm start php-built-in
- name: Setting up redis service
run: |
choco install redis-64 --version 3.0.503 --no-progress
nssm install redis redis-server
nssm start redis
- name: Setting up PHPUnit
env:
dbtype: ${{ matrix.db }}
shell: bash
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV # Inject installed pathtophp to env. The template config needs it.
cp .github/workflows/config-template.php config.php
mkdir ../moodledata
php admin/tool/phpunit/cli/init.php --no-composer-self-update
- name: Running PHPUnit tests
env:
dbtype: ${{ matrix.db }}
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options
+3 -33
View File
@@ -9,23 +9,15 @@
#
# See gitignore(5) man page for more details
#
# Swap files (vim)
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Temporary files including undo
*~
#
/config.php
/lib/editor/tinymce/extra/tools/temp/
*~
*.swp
/tags
/TAGS
/cscope.*
/.patches/
/.idea/
.phpstorm.*
/nbproject/
CVS
.DS_Store
@@ -33,25 +25,3 @@ CVS
/.project
/.buildpath
/.cache
.phpunit.result.cache
phpunit.xml
# Composer support. Do not ignore composer.json, or composer.lock. These should be shipped by us.
composer.phar
/vendor/
/behat.yml
*/yui/build/*/*-coverage.js
/lib/yuilib/*/build/*/*-coverage.js
# lib/yuilib/version/module/module-coverage.js
/lib/yuilib/*/*/*-coverage.js
atlassian-ide-plugin.xml
/node_modules/
/.vscode/
moodle-plugin-ci.phar
.eslintignore
.stylelintignore
/jsdoc
/admin/tool/componentlibrary/docs
/admin/tool/componentlibrary/hugo/site/data/my-index.json
.hugo_build.lock
phpcs.xml
jsconfig.json
-169
View File
@@ -1,169 +0,0 @@
// 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 is a babel plugin to add the Moodle module names to the AMD modules
* as part of the transpiling process.
*
* In addition it will also add a return statement for the default export if the
* module is using default exports. This is a highly specific Moodle thing because
* we're transpiling to AMD and none of the existing Babel 7 plugins work correctly.
*
* This will fix the issue where an ES6 module using "export default Foo" will be
* transpiled into an AMD module that returns {default: Foo}; Instead it will now
* just simply return Foo.
*
* Note: This means all other named exports in that module are ignored and won't be
* exported.
*
* @copyright 2018 Ryan Wyllie <ryan@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
"use strict";
/* eslint-env node */
module.exports = ({template, types}) => {
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
/**
* Search the list of components that match the given file name
* and return the Moodle component for that file, if found.
*
* Throw an exception if no matching component is found.
*
* @throws {Error}
* @param {string} searchFileName The file name to look for.
* @return {string} Moodle component
*/
function getModuleNameFromFileName(searchFileName) {
searchFileName = fs.realpathSync(searchFileName);
const relativeFileName = searchFileName.replace(`${cwd}${path.sep}`, '').replace(/\\/g, '/');
const [componentPath, file] = relativeFileName.split('/amd/src/');
const fileName = file.replace('.js', '');
// Check subsystems first which require an exact match.
const componentName = ComponentList.getComponentFromPath(componentPath);
if (componentName) {
return `${componentName}/${fileName}`;
}
// This matches the previous PHP behaviour that would throw an exception
// if it couldn't parse an AMD file.
throw new Error(`Unable to find module name for ${searchFileName} (${componentPath}::${file}}`);
}
/**
* This is heavily inspired by the babel-plugin-add-module-exports plugin.
* See: https://github.com/59naga/babel-plugin-add-module-exports
*
* This is used when we detect a module using "export default Foo;" to make
* sure the transpiled code just returns Foo directly rather than an object
* with the default property (i.e. {default: Foo}).
*
* Note: This means that we can't support modules that combine named exports
* with a default export.
*
* @param {String} path
* @param {String} exportObjectName
*/
function addModuleExportsDefaults(path, exportObjectName) {
const rootPath = path.findParent(path => {
return path.key === 'body' || !path.parentPath;
});
// HACK: `path.node.body.push` instead of path.pushContainer(due doesn't work in Plugin.post).
// This is hardcoded to work specifically with AMD.
rootPath.node.body.push(template(`return ${exportObjectName}.default`)());
}
return {
pre() {
this.seenDefine = false;
this.addedReturnForDefaultExport = false;
},
visitor: {
// Plugin ordering is only respected if we visit the "Program" node.
// See: https://babeljs.io/docs/en/plugins.html#plugin-preset-ordering
//
// We require this to run after the other AMD module transformation so
// let's visit the "Program" node.
Program: {
exit(path) {
path.traverse({
CallExpression(path) {
// If we find a "define" function call.
if (!this.seenDefine && path.get('callee').isIdentifier({name: 'define'})) {
// We only want to modify the first instance of define that we find.
this.seenDefine = true;
// Get the Moodle component for the file being processed.
var moduleName = getModuleNameFromFileName(this.file.opts.filename);
// The function signature of `define()` is:
// define = function (name, deps, callback) {...}
// Ensure that if the moduel supplied its own name that it is replaced.
if (path.node.arguments.length > 0) {
// Ensure that there is only one name.
if (path.node.arguments[0].type === 'StringLiteral') {
// eslint-disable-next-line
console.log(`Replacing module name '${path.node.arguments[0].extra.rawValue}' with ${moduleName}`);
path.node.arguments.shift();
}
}
// Add the module name as the first argument to the define function.
path.node.arguments.unshift(types.stringLiteral(moduleName));
// Add a space after the define function in the built file so that previous versions
// of Moodle will not try to add the module name to the file when it's being served
// by PHP. This forces the regex in PHP to not match for this file.
path.node.callee.name = 'define ';
}
// Check for any Object.defineProperty('exports', 'default') calls.
if (!this.addedReturnForDefaultExport && path.get('callee').matchesPattern('Object.defineProperty')) {
const [identifier, prop] = path.get('arguments');
const objectName = identifier.get('name').node;
const propertyName = prop.get('value').node;
if ((objectName === 'exports' || objectName === '_exports') && propertyName === 'default') {
addModuleExportsDefaults(path, objectName);
this.addedReturnForDefaultExport = true;
}
}
},
AssignmentExpression(path) {
// Check for an exports.default assignments.
if (
!this.addedReturnForDefaultExport &&
(
path.get('left').matchesPattern('exports.default') ||
path.get('left').matchesPattern('_exports.default')
)
) {
const objectName = path.get('left.object.name').node;
addModuleExportsDefaults(path, objectName);
this.addedReturnForDefaultExport = true;
}
}
}, this);
}
}
}
};
};
-394
View File
@@ -1,394 +0,0 @@
// 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/>.
/**
* Helper functions for working with Moodle component names, directories, and sources.
*
* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
"use strict";
/* eslint-env node */
/** @var {Object} A list of subsystems in Moodle */
const componentData = {};
/**
* Load details of all moodle modules.
*
* @returns {object}
*/
const fetchComponentData = () => {
const fs = require('fs');
const path = require('path');
const glob = require('glob');
const gruntFilePath = process.cwd();
if (!Object.entries(componentData).length) {
componentData.subsystems = {};
componentData.pathList = [];
// Fetch the component definiitions from the distributed JSON file.
const components = JSON.parse(fs.readFileSync(`${gruntFilePath}/lib/components.json`));
// Build the list of moodle subsystems.
componentData.subsystems.lib = 'core';
componentData.pathList.push(process.cwd() + path.sep + 'lib');
for (const [component, thisPath] of Object.entries(components.subsystems)) {
if (thisPath) {
// Prefix "core_" to the front of the subsystems.
componentData.subsystems[thisPath] = `core_${component}`;
componentData.pathList.push(process.cwd() + path.sep + thisPath);
}
}
// The list of components incldues the list of subsystems.
componentData.components = componentData.subsystems;
// Go through each of the plugintypes.
Object.entries(components.plugintypes).forEach(([pluginType, pluginTypePath]) => {
// We don't allow any code in this place..?
glob.sync(`${pluginTypePath}/*/version.php`).forEach(versionPath => {
const componentPath = fs.realpathSync(path.dirname(versionPath));
const componentName = path.basename(componentPath);
const frankenstyleName = `${pluginType}_${componentName}`;
componentData.components[`${pluginTypePath}/${componentName}`] = frankenstyleName;
componentData.pathList.push(componentPath);
// Look for any subplugins.
const subPluginConfigurationFile = `${componentPath}/db/subplugins.json`;
if (fs.existsSync(subPluginConfigurationFile)) {
const subpluginList = JSON.parse(fs.readFileSync(fs.realpathSync(subPluginConfigurationFile)));
Object.entries(subpluginList.plugintypes).forEach(([subpluginType, subpluginTypePath]) => {
glob.sync(`${subpluginTypePath}/*/version.php`).forEach(versionPath => {
const componentPath = fs.realpathSync(path.dirname(versionPath));
const componentName = path.basename(componentPath);
const frankenstyleName = `${subpluginType}_${componentName}`;
componentData.components[`${subpluginTypePath}/${componentName}`] = frankenstyleName;
componentData.pathList.push(componentPath);
});
});
}
});
});
}
return componentData;
};
/**
* Get the list of component paths.
*
* @param {string} relativeTo
* @returns {array}
*/
const getComponentPaths = (relativeTo = '') => fetchComponentData().pathList.map(componentPath => {
return componentPath.replace(relativeTo, '');
});
/**
* Get the list of paths to build AMD sources.
*
* @returns {Array}
*/
const getAmdSrcGlobList = () => {
const globList = [];
fetchComponentData().pathList.forEach(componentPath => {
globList.push(`${componentPath}/amd/src/*.js`);
globList.push(`${componentPath}/amd/src/**/*.js`);
});
return globList;
};
/**
* Get the list of paths to build YUI sources.
*
* @param {String} relativeTo
* @returns {Array}
*/
const getYuiSrcGlobList = relativeTo => {
const globList = [];
fetchComponentData().pathList.forEach(componentPath => {
const relativeComponentPath = componentPath.replace(relativeTo, '');
globList.push(`${relativeComponentPath}/yui/src/**/*.js`);
});
return globList;
};
/**
* Get the list of paths to thirdpartylibs.xml.
*
* @param {String} relativeTo
* @returns {Array}
*/
const getThirdPartyLibsList = relativeTo => {
const fs = require('fs');
const path = require('path');
return fetchComponentData().pathList
.map(componentPath => path.relative(relativeTo, componentPath) + '/thirdpartylibs.xml')
.map(componentPath => componentPath.replace(/\\/g, '/'))
.filter(path => fs.existsSync(path))
.sort();
};
/**
* Get the list of thirdparty library paths.
*
* @returns {array}
*/
const getThirdPartyPaths = () => {
const DOMParser = require('@xmldom/xmldom').DOMParser;
const fs = require('fs');
const path = require('path');
const xpath = require('xpath');
const thirdpartyfiles = getThirdPartyLibsList(fs.realpathSync('./'));
const libs = ['node_modules/', 'vendor/'];
const addLibToList = lib => {
if (!lib.match('\\*') && fs.statSync(lib).isDirectory()) {
// Ensure trailing slash on dirs.
lib = lib.replace(/\/?$/, '/');
}
// Look for duplicate paths before adding to array.
if (libs.indexOf(lib) === -1) {
libs.push(lib);
}
};
thirdpartyfiles.forEach(function(file) {
const dirname = path.dirname(file);
const xmlContent = fs.readFileSync(file, 'utf8');
const doc = new DOMParser().parseFromString(xmlContent);
const nodes = xpath.select("/libraries/library/location/text()", doc);
nodes.forEach(function(node) {
let lib = path.posix.join(dirname, node.toString());
addLibToList(lib);
});
});
return libs;
};
/**
* Find the name of the component matching the specified path.
*
* @param {String} path
* @returns {String|null} Name of matching component.
*/
const getComponentFromPath = path => {
const componentList = fetchComponentData().components;
if (componentList.hasOwnProperty(path)) {
return componentList[path];
}
return null;
};
/**
* Check whether the supplied path, relative to the Gruntfile.js, is in a known component.
*
* @param {String} checkPath The path to check. This can be with either Windows, or Linux directory separators.
* @returns {String|null}
*/
const getOwningComponentDirectory = checkPath => {
const path = require('path');
// Fetch all components into a reverse sorted array.
// This ensures that components which are within the directory of another component match first.
const pathList = Object.keys(fetchComponentData().components).sort().reverse();
for (const componentPath of pathList) {
// If the componentPath is the directory being checked, it will be empty.
// If the componentPath is a parent of the directory being checked, the relative directory will not start with ..
if (!path.relative(componentPath, checkPath).startsWith('..')) {
return componentPath;
}
}
return null;
};
/**
* Get the latest tag in a remote GitHub repository.
*
* @param {string} url The remote repository.
* @returns {Array}
*/
const getRepositoryTags = async(url) => {
const gtr = require('git-tags-remote');
try {
const tags = await gtr.get(url);
if (tags !== undefined) {
return tags;
}
} catch (error) {
return [];
}
return [];
};
/**
* Get the list of thirdparty libraries that could be upgraded.
*
* @returns {Array}
*/
const getThirdPartyLibsUpgradable = async() => {
const libraries = getThirdPartyLibsData().filter((library) => !!library.repository);
const upgradableLibraries = [];
const versionCompare = (a, b) => {
if (a === b) {
return 0;
}
const aParts = a.split('.');
const bParts = b.split('.');
for (let i = 0; i < Math.min(aParts.length, bParts.length); i++) {
const aPart = parseInt(aParts[i], 10);
const bPart = parseInt(bParts[i], 10);
if (aPart > bPart) {
// 1.1.0 > 1.0.9
return 1;
} else if (aPart < bPart) {
// 1.0.9 < 1.1.0
return -1;
} else {
// Same version.
continue;
}
}
if (aParts.length > bParts.length) {
// 1.0.1 > 1.0
return 1;
}
// 1.0 < 1.0.1
return -1;
};
for (let library of libraries) {
upgradableLibraries.push(
getRepositoryTags(library.repository).then((tagMap) => {
library.version = library.version.replace(/^v/, '');
const currentVersion = library.version.replace(/moodle-/, '');
const currentMajorVersion = library.version.split('.')[0];
const tags = [...tagMap]
.map((tagData) => tagData[0])
.filter((tag) => !tag.match(/(alpha|beta|rc)/))
.map((tag) => tag.replace(/^v/, ''))
.sort((a, b) => versionCompare(b, a));
if (!tags.length) {
library.warning = "Unable to find any comparable tags.";
return library;
}
library.latestVersion = tags[0];
tags.some((tag) => {
if (!tag) {
return false;
}
// See if the version part matches.
const majorVersion = tag.split('.')[0];
if (majorVersion === currentMajorVersion) {
library.latestSameMajorVersion = tag;
return true;
}
return false;
});
if (versionCompare(currentVersion, library.latestVersion) > 0) {
// Moodle somehow has a newer version than the latest version.
library.warning = `Newer version found: ${currentVersion} > ${library.latestVersion} for ${library.name}`;
return library;
}
if (library.version !== library.latestVersion) {
// Delete version and add it again at the end of the array. That way, current and new will stay closer.
delete library.version;
library.version = currentVersion;
return library;
}
return null;
})
);
}
return (await Promise.all(upgradableLibraries)).filter((library) => !!library);
};
/**
* Get the list of thirdparty libraries.
*
* @returns {Array}
*/
const getThirdPartyLibsData = () => {
const DOMParser = require('@xmldom/xmldom').DOMParser;
const fs = require('fs');
const xpath = require('xpath');
const path = require('path');
const libraryList = [];
const libraryFields = [
'location',
'name',
'version',
'repository',
];
const thirdpartyfiles = getThirdPartyLibsList(fs.realpathSync('./'));
thirdpartyfiles.forEach(function(libraryPath) {
const xmlContent = fs.readFileSync(libraryPath, 'utf8');
const doc = new DOMParser().parseFromString(xmlContent);
const libraries = xpath.select("/libraries/library", doc);
for (const library of libraries) {
const libraryData = [];
for (const field of libraryFields) {
libraryData[field] = xpath.select(`${field}/text()`, library)?.toString();
}
libraryData.location = path.join(path.dirname(libraryPath), libraryData.location);
libraryList.push(libraryData);
}
});
return libraryList.sort((a, b) => a.location.localeCompare(b.location));
};
module.exports = {
fetchComponentData,
getAmdSrcGlobList,
getComponentFromPath,
getComponentPaths,
getOwningComponentDirectory,
getYuiSrcGlobList,
getThirdPartyLibsList,
getThirdPartyPaths,
getThirdPartyLibsUpgradable,
};
-19
View File
@@ -1,19 +0,0 @@
# Moodle JavaScript Documentation
```
.-..-.
_____ | || |
/____/-.---_ .---. .---. .-.| || | .---.
| | _ _ |/ _ \/ _ \/ _ || |/ __ \
* | | | | | || |_| || |_| || |_| || || |___/
|_| |_| |_|\_____/\_____/\_____||_|\_____)
Moodle - the world's open source learning platform
```
## About
This generated documentation includes API documentation for JavaScript written in the AMD and ES2015 module formats within Moodle.
## Related information
See [https://moodledev.io](https://moodledev.io) for other related Developer Documentation.
-131
View File
@@ -1,131 +0,0 @@
// 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/>.
/**
* Helper functions for working with Moodle component names, directories, and sources.
*
* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
"use strict";
/* eslint-env node */
// Do not include any plugins as stanard.
const plugins = [];
plugins.push('plugins/markdown');
/**
* Get the source configuration.
*
* @return {Object}
*/
const getSource = () => {
const glob = require('glob');
const path = require('path');
const ComponentList = require(path.resolve('.grunt/components.js'));
const thirdPartyPaths = ComponentList.getThirdPartyPaths();
const source = {
include: [],
includePattern: ".+\\.js$",
};
let includeList = [];
ComponentList.getAmdSrcGlobList().forEach(async pattern => {
includeList.push(...glob.sync(pattern));
});
const cwdLength = process.cwd().length + 1;
includeList.forEach(path => {
if (source.include.indexOf(path) !== -1) {
// Ensure no duplicates.
return;
}
const relPath = path.substring(cwdLength);
if (thirdPartyPaths.indexOf(relPath) !== -1) {
return;
}
source.include.push(path);
});
source.include.push('.grunt/jsdoc/README.md');
return source;
};
const tags = {
// Allow the use of unknown tags.
// We have a lot of legacy uses of these.
allowUnknownTags: true,
// We make use of jsdoc and closure dictionaries as standard.
dictionaries: [
'jsdoc',
'closure',
],
};
// Template configuraiton.
const templates = {
cleverLinks: false,
monospaceLinks: false,
};
module.exports = {
opts: {
destination: "./jsdoc/",
template: "node_modules/docdash",
},
plugins,
recurseDepth: 10,
source: getSource(),
sourceType: 'module',
tags,
templates,
docdash: {
collapse: true,
search: true,
sort: true,
sectionOrder: [
"Namespaces",
"Modules",
"Events",
"Classes",
"Externals",
"Mixins",
"Tutorials",
"Interfaces"
],
"menu": {
"Developer Docs": {
href: "https://moodledev.io",
target: "_blank",
"class": "menu-item",
id: "devdocs"
},
"MDN Docs": {
href: "https://developer.mozilla.org/en-US/docs/Web/JavaScript",
target: "_blank",
"class": "menu-item",
id: "mdndocs",
},
},
typedefs: true,
},
};
-142
View File
@@ -1,142 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* Component Library build tasks.
*
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Get a child path of the component library.
*
* @param {string} path
* @returns {string}
*/
const getCLPath = path => `admin/tool/componentlibrary/${path}`;
/**
* Get a spawn handler.
*
* This is a generic function to write the spawn output, and then to exit if required and mark the async task as
* complete.
*
* @param {Promise} done
* @returns {function}
*/
const getSpawnHandler = done => (error, result, code) => {
grunt.log.write(result);
if (error) {
grunt.log.error(result.stdout);
process.exit(code);
}
done();
};
/**
* Spawn a function against Node with the provided args.
*
* @param {array} args
* @returns {object}
*/
const spawnNodeCall = (args) => grunt.util.spawn({
cmd: 'node',
args,
}, getSpawnHandler(grunt.task.current.async()));
/**
* Build the docs using Hugo.
*
* @returns {Object} Reference to the spawned task
*/
const docsBuild = () => spawnNodeCall([
'node_modules/hugo-bin/cli.js',
'--config', getCLPath('config.yml'),
'--cleanDestinationDir',
]);
/**
* Build the docs index using the hugo-lunr-indexer.
*
* @returns {Object} Reference to the spawned task
*/
const indexBuild = () => spawnNodeCall([
'node_modules/hugo-lunr-indexer/bin/hli.js',
'-i', getCLPath('content/**'),
'-o', getCLPath('hugo/site/data/my-index.json'),
'-l', 'yaml',
'-d', '---',
]);
/**
* Build the hugo CSS.
*
* @returns {Object} Reference to the spawned task
*/
const cssBuild = () => spawnNodeCall([
'node_modules/sass/sass.js',
'--style', 'expanded',
'--source-map',
'--embed-sources',
'--precision', 6,
'--load-path', process.cwd(),
getCLPath('hugo/scss/docs.scss'),
getCLPath('hugo/dist/css/docs.css'),
]);
// Register the various component library tasks.
grunt.registerTask('componentlibrary:docsBuild', 'Build the component library', docsBuild);
grunt.registerTask('componentlibrary:cssBuild', 'Build the component library', cssBuild);
grunt.registerTask('componentlibrary:indexBuild', 'Build the component library', indexBuild);
grunt.registerTask('componentlibrary', 'Build the component library', [
'componentlibrary:docsBuild',
'componentlibrary:cssBuild',
'componentlibrary:indexBuild',
]);
grunt.config.merge({
watch: {
componentLibraryDocs: {
files: [
getCLPath('content/**/*.md'),
getCLPath('hugo'),
],
tasks: ['componentlibrary:docsBuild', 'componentlibrary:indexBuild'],
},
componentLibraryCSS: {
files: [
getCLPath('hugo/scss/**/*.scss'),
'hugo',
],
tasks: ['componentlibrary:cssBuild'],
},
},
});
// Add the 'componentlibrary' task as a startup task.
grunt.moodleEnv.startupTasks.push('componentlibrary');
return {
docsBuild,
cssBuild,
indexBuild,
};
};
-64
View File
@@ -1,64 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
const files = grunt.moodleEnv.files;
// Project configuration.
grunt.config.merge({
eslint: {
// Even though warnings dont stop the build we don't display warnings by default because
// at this moment we've got too many core warnings.
// To display warnings call: grunt eslint --show-lint-warnings
// To fail on warnings call: grunt eslint --max-lint-warnings=0
// Also --max-lint-warnings=-1 can be used to display warnings but not fail.
options: {
quiet: (!grunt.option('show-lint-warnings')) && (typeof grunt.option('max-lint-warnings') === 'undefined'),
maxWarnings: ((typeof grunt.option('max-lint-warnings') !== 'undefined') ? grunt.option('max-lint-warnings') : -1)
},
// Check AMD src files.
amd: {src: files ? files : grunt.moodleEnv.amdSrc},
// Check YUI module source files.
yui: {src: files ? files : grunt.moodleEnv.yuiSrc},
},
});
grunt.loadNpmTasks('grunt-eslint');
// On watch, we dynamically modify config to build only affected files. This
// method is slightly complicated to deal with multiple changed files at once (copied
// from the grunt-contrib-watch readme).
let changedFiles = Object.create(null);
const onChange = grunt.util._.debounce(function() {
const files = Object.keys(changedFiles);
grunt.config('eslint.amd.src', files);
grunt.config('eslint.yui.src', files);
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', (action, filepath) => {
changedFiles[filepath] = action;
onChange();
});
};
-92
View File
@@ -1,92 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Get the list of feature files to pass to the gherkin linter.
*
* @returns {Array}
*/
const getGherkinLintTargets = () => {
if (grunt.moodleEnv.files) {
// Specific files were requested. Only check these.
return grunt.moodleEnv.files;
}
if (grunt.moodleEnv.inComponent) {
return [`${grunt.moodleEnv.runDir}/tests/behat/*.feature`];
}
return ['**/tests/behat/*.feature'];
};
const handler = function() {
const done = this.async();
const options = grunt.config('gherkinlint.options');
// Grab the gherkin-lint linter and required scaffolding.
const linter = require('gherkin-lint/dist/linter.js');
const featureFinder = require('gherkin-lint/dist/feature-finder.js');
const configParser = require('gherkin-lint/dist/config-parser.js');
const formatter = require('gherkin-lint/dist/formatters/stylish.js');
// Run the linter.
return linter.lint(
featureFinder.getFeatureFiles(grunt.file.expand(options.files)),
configParser.getConfiguration(configParser.defaultConfigFileName)
)
.then(results => {
// Print the results out uncondtionally.
formatter.printResults(results);
return results;
})
.then(results => {
// Report on the results.
// The done function takes a bool whereby a falsey statement causes the task to fail.
return results.every(result => result.errors.length === 0);
})
.then(done); // eslint-disable-line promise/no-callback-in-promise
};
grunt.registerTask('gherkinlint', 'Run gherkinlint against the current directory', handler);
grunt.config.set('gherkinlint', {
options: {
files: getGherkinLintTargets(),
}
});
grunt.config.merge({
watch: {
gherkinlint: {
files: [grunt.moodleEnv.inComponent ? 'tests/behat/*.feature' : '**/tests/behat/*.feature'],
tasks: ['gherkinlint'],
},
},
});
// Add the 'gherkinlint' task as a startup task.
grunt.moodleEnv.startupTasks.push('gherkinlint');
return handler;
};
-100
View File
@@ -1,100 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Generate the PHPCS configuration.
*
* @param {Object} thirdPartyPaths
*/
const phpcsIgnore = (thirdPartyPaths) => {
const {toXML} = require('jstoxml');
const config = {
_name: 'ruleset',
_attrs: {
name: "MoodleCore",
},
_content: [
{
rule: {
_attrs: {
ref: './phpcs.xml.dist',
},
},
},
],
};
thirdPartyPaths.forEach(library => {
config._content.push({
'exclude-pattern': library,
});
});
grunt.file.write('phpcs.xml', toXML(config, {
header: true,
indent: ' ',
}) + "\n");
};
/**
* Generate ignore files (utilising thirdpartylibs.xml data)
*/
const handler = function() {
const path = require('path');
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
// An array of paths to third party directories.
const thirdPartyPaths = ComponentList.getThirdPartyPaths();
// Generate .eslintignore.
const eslintIgnores = [
'# Generated by "grunt ignorefiles"',
// Do not ignore the .grunt directory.
'!/.grunt',
// Ignore all yui/src meta directories and build directories.
'*/**/yui/src/*/meta/',
'*/**/build/',
].concat(thirdPartyPaths);
grunt.file.write('.eslintignore', eslintIgnores.join('\n') + '\n');
// Generate .stylelintignore.
const stylelintIgnores = [
'# Generated by "grunt ignorefiles"',
'**/yui/build/*',
'theme/boost/style/moodle.css',
'theme/classic/style/moodle.css',
'jsdoc/styles/*.css',
'admin/tool/componentlibrary/hugo/dist/css/docs.css',
].concat(thirdPartyPaths);
grunt.file.write('.stylelintignore', stylelintIgnores.join('\n') + '\n');
phpcsIgnore(thirdPartyPaths);
};
grunt.registerTask('ignorefiles', 'Generate ignore files for linters', handler);
return handler;
};
-227
View File
@@ -1,227 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Function to generate the destination for the uglify task
* (e.g. build/file.min.js). This function will be passed to
* the rename property of files array when building dynamically:
* http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
*
* @param {String} destPath the current destination
* @param {String} srcPath the matched src path
* @return {String} The rewritten destination path.
*/
const babelRename = function(destPath, srcPath) {
destPath = srcPath.replace(`amd/src`, `amd/build`);
destPath = destPath.replace(/\.js$/, '.min.js');
return destPath;
};
module.exports = grunt => {
// Load the Ignorefiles tasks.
require('./ignorefiles')(grunt);
// Load the Shifter tasks.
require('./shifter')(grunt);
// Load ESLint.
require('./eslint')(grunt);
// Load jsconfig.
require('./jsconfig')(grunt);
// Load JSDoc.
require('./jsdoc')(grunt);
const path = require('path');
// Register JS tasks.
grunt.registerTask('yui', ['eslint:yui', 'shifter']);
grunt.registerTask('amd', ['ignorefiles', 'eslint:amd', 'rollup']);
grunt.registerTask('js', ['amd', 'yui']);
// Register NPM tasks.
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-rollup');
const babelTransform = require('@babel/core').transform;
const babel = (options = {}) => {
return {
name: 'babel',
transform: (code, id) => {
grunt.log.debug(`Transforming ${id}`);
options.filename = id;
const transformed = babelTransform(code, options);
return {
code: transformed.code,
map: transformed.map
};
}
};
};
// Note: We have to use a rate limit plugin here because rollup runs all tasks asynchronously and in parallel.
// When we kick off a full run, if we kick off a rollup of every file this will fork-bomb the machine.
// To work around this we use a concurrent Promise queue based on the number of available processors.
const rateLimit = () => {
const queue = [];
let queueRunner;
const startQueue = () => {
if (queueRunner) {
return;
}
queueRunner = setTimeout(() => {
const limit = Math.max(1, require('os').cpus().length / 2);
grunt.log.debug(`Starting rollup with queue size of ${limit}`);
runQueue(limit);
}, 100);
};
// The queue runner will run the next `size` items in the queue.
const runQueue = (size = 1) => {
queue.splice(0, size).forEach(resolve => {
resolve();
});
};
return {
name: 'ratelimit',
// The options hook is run in parallel.
// We can return an unresolved Promise which is queued for later resolution.
options: async() => {
return new Promise(resolve => {
queue.push(resolve);
startQueue();
});
},
// When an item in the queue completes, start the next item in the queue.
buildEnd: () => {
runQueue();
},
};
};
const terser = require('rollup-plugin-terser').terser;
grunt.config.merge({
rollup: {
options: {
format: 'esm',
dir: 'output',
sourcemap: true,
treeshake: false,
context: 'window',
plugins: [
rateLimit(),
babel({
sourceMaps: true,
comments: false,
compact: false,
plugins: [
'transform-es2015-modules-amd-lazy',
'system-import-transformer',
// This plugin modifies the Babel transpiling for "export default"
// so that if it's used then only the exported value is returned
// by the generated AMD module.
//
// It also adds the Moodle plugin name to the AMD module definition
// so that it can be imported as expected in other modules.
path.resolve('.grunt/babel-plugin-add-module-to-define.js'),
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-syntax-import-meta',
['@babel/plugin-proposal-class-properties', {'loose': false}],
'@babel/plugin-proposal-json-strings'
],
presets: [
['@babel/preset-env', {
targets: {
browsers: [
">0.3%",
"last 2 versions",
"not ie >= 0",
"not op_mini all",
"not Opera > 0",
"not dead"
]
},
modules: false,
useBuiltIns: false
}]
]
}),
terser({
// Do not mangle variables.
// Makes debugging easier.
mangle: false,
}),
],
},
dist: {
files: [{
expand: true,
src: grunt.moodleEnv.files ? grunt.moodleEnv.files : grunt.moodleEnv.amdSrc,
rename: babelRename
}],
},
},
});
grunt.config.merge({
watch: {
amd: {
files: grunt.moodleEnv.inComponent
? ['amd/src/*.js', 'amd/src/**/*.js']
: ['**/amd/src/**/*.js'],
tasks: ['amd']
},
},
});
// Add the 'js' task as a startup task.
grunt.moodleEnv.startupTasks.push('js');
// On watch, we dynamically modify config to build only affected files. This
// method is slightly complicated to deal with multiple changed files at once (copied
// from the grunt-contrib-watch readme).
let changedFiles = Object.create(null);
const onChange = grunt.util._.debounce(function() {
const files = Object.keys(changedFiles);
grunt.config('rollup.dist.files', [{expand: true, src: files, rename: babelRename}]);
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', function(action, filepath) {
changedFiles[filepath] = action;
onChange();
});
return {
babelRename,
};
};
-53
View File
@@ -1,53 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2022 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const configuration = {
compilerOptions: {
baseUrl: ".",
paths: {
},
target: "es2015",
allowSyntheticDefaultImports: false,
},
exclude: [
"node_modules",
],
include: [],
};
module.exports = (grunt) => {
const handler = () => {
const jsconfigData = Object.assign({}, configuration);
const path = require('path');
const {fetchComponentData} = require(path.join(process.cwd(), '.grunt', 'components.js'));
const componentData = fetchComponentData().components;
for (const [thisPath, component] of Object.entries(componentData)) {
jsconfigData.compilerOptions.paths[`${component}/*`] = [`${thisPath}/amd/src/*`];
jsconfigData.include.push(`${thisPath}/amd/src/**/*`);
}
grunt.file.write('jsconfig.json', JSON.stringify(jsconfigData, null, " ") + "\n");
};
grunt.registerTask('jsconfig', 'Generate a jsconfig configuration compatible with the LSP', handler);
};
-36
View File
@@ -1,36 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
// Project configuration.
grunt.config.merge({
jsdoc: {
dist: {
options: {
configure: ".grunt/jsdoc/jsdoc.conf.js",
},
},
},
});
grunt.loadNpmTasks('grunt-jsdoc');
};
-40
View File
@@ -1,40 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
grunt.loadNpmTasks('grunt-sass');
grunt.config.merge({
sass: {
dist: {
files: {
"theme/boost/style/moodle.css": "theme/boost/scss/preset/default.scss",
"theme/classic/style/moodle.css": "theme/classic/scss/classicgrunt.scss"
}
},
options: {
implementation: require('sass'),
includePaths: ["theme/boost/scss/", "theme/classic/scss/"]
}
},
});
};
-155
View File
@@ -1,155 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/* eslint-env node */
module.exports = grunt => {
/**
* Shifter task. Is configured with a path to a specific file or a directory,
* in the case of a specific file it will work out the right module to be built.
*
* Note that this task runs the invidiaul shifter jobs async (becase it spawns
* so be careful to to call done().
*/
const handler = function() {
const done = this.async();
const options = grunt.config('shifter.options');
const async = require('async');
const path = require('path');
// Run the shifter processes one at a time to avoid confusing output.
async.eachSeries(options.paths, function(src, filedone) {
var args = [];
args.push(path.normalize(process.cwd() + '/node_modules/shifter/bin/shifter'));
// Always ignore the node_modules directory.
args.push('--excludes', 'node_modules');
// Determine the most appropriate options to run with based upon the current location.
if (grunt.file.isMatch('**/yui/**/*.js', src)) {
// When passed a JS file, build our containing module (this happen with
// watch).
grunt.log.debug('Shifter passed a specific JS file');
src = path.dirname(path.dirname(src));
options.recursive = false;
} else if (grunt.file.isMatch('**/yui/src', src)) {
// When in a src directory --walk all modules.
grunt.log.debug('In a src directory');
args.push('--walk');
options.recursive = false;
} else if (grunt.file.isMatch('**/yui/src/*', src)) {
// When in module, only build our module.
grunt.log.debug('In a module directory');
options.recursive = false;
} else if (grunt.file.isMatch('**/yui/src/*/js', src)) {
// When in module src, only build our module.
grunt.log.debug('In a source directory');
src = path.dirname(src);
options.recursive = false;
}
if (grunt.option('watch')) {
grunt.fail.fatal('The --watch option has been removed, please use `grunt watch` instead');
}
// Add the stderr option if appropriate
if (grunt.option('verbose')) {
args.push('--lint-stderr');
}
if (grunt.option('no-color')) {
args.push('--color=false');
}
var execShifter = function() {
grunt.log.ok("Running shifter on " + src);
grunt.util.spawn({
cmd: "node",
args: args,
opts: {cwd: src, stdio: 'inherit', env: process.env}
}, function(error, result, code) {
if (code) {
grunt.fail.fatal('Shifter failed with code: ' + code);
} else {
grunt.log.ok('Shifter build complete.');
filedone();
}
});
};
// Actually run shifter.
if (!options.recursive) {
execShifter();
} else {
// Check that there are yui modules otherwise shifter ends with exit code 1.
if (grunt.file.expand({cwd: src}, '**/yui/src/**/*.js').length > 0) {
args.push('--recursive');
execShifter();
} else {
grunt.log.ok('No YUI modules to build.');
filedone();
}
}
}, done);
};
// Register the shifter task.
grunt.registerTask('shifter', 'Run Shifter against the current directory', handler);
// Configure it.
grunt.config.set('shifter', {
options: {
recursive: true,
// Shifter takes a relative path.
paths: grunt.moodleEnv.files ? grunt.moodleEnv.files : [grunt.moodleEnv.runDir]
}
});
grunt.config.merge({
watch: {
yui: {
files: grunt.moodleEnv.inComponent
? ['yui/src/*.json', 'yui/src/**/*.js']
: ['**/yui/src/**/*.js'],
tasks: ['yui']
},
},
});
// On watch, we dynamically modify config to build only affected files. This
// method is slightly complicated to deal with multiple changed files at once (copied
// from the grunt-contrib-watch readme).
let changedFiles = Object.create(null);
const onChange = grunt.util._.debounce(function() {
const files = Object.keys(changedFiles);
grunt.config('shifter.options.paths', files);
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', (action, filepath) => {
changedFiles[filepath] = action;
onChange();
});
return handler;
};
-46
View File
@@ -1,46 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Generate ignore files (utilising thirdpartylibs.xml data)
*/
const handler = function() {
const path = require('path');
// Are we in a YUI directory?
if (path.basename(path.resolve(grunt.moodleEnv.cwd, '../../')) == 'yui') {
grunt.task.run('yui');
// Are we in an AMD directory?
} else if (grunt.moodleEnv.inAMD) {
grunt.task.run('amd');
} else {
// Run all of the requested startup tasks.
grunt.moodleEnv.startupTasks.forEach(taskName => grunt.task.run(taskName));
}
};
// Register the startup task.
grunt.registerTask('startup', 'Run the correct tasks for the current directory', handler);
return handler;
};
-35
View File
@@ -1,35 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
// Load the ignorefiles tasks.
require('./ignorefiles')(grunt);
// Load the Style Lint tasks.
require('./stylelint')(grunt);
// Load the SASS tasks.
require('./sass')(grunt);
// Add the 'css' task as a startup task.
grunt.moodleEnv.startupTasks.push('css');
};
-183
View File
@@ -1,183 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
const getCssConfigForFiles = files => {
return {
stylelint: {
css: {
// Use a fully-qualified path.
src: files,
options: {
configOverrides: {
rules: {
// These rules have to be disabled in .stylelintrc for scss compat.
"at-rule-no-unknown": true,
}
}
}
},
},
};
};
const getScssConfigForFiles = files => {
return {
stylelint: {
scss: {
options: {syntax: 'scss'},
src: files,
},
},
};
};
/**
* Register any stylelint tasks.
*
* @param {Object} grunt
* @param {Array} files
* @param {String} fullRunDir
*/
const registerStyleLintTasks = () => {
const glob = require('glob');
// The stylelinters do not handle the case where a configuration was provided but no files were included.
// Keep track of whether any files were found.
let hasCss = false;
let hasScss = false;
// The stylelint processors do not take a path argument. They always check all provided values.
// As a result we must check through each glob and determine if any files match the current directory.
const scssFiles = [];
const cssFiles = [];
const requestedFiles = grunt.moodleEnv.files;
if (requestedFiles) {
// Grunt was called with a files argument.
// Check whether each of the requested files matches either the CSS or SCSS source file list.
requestedFiles.forEach(changedFilePath => {
let matchesGlob;
// Check whether this watched path matches any watched SCSS file.
matchesGlob = grunt.moodleEnv.scssSrc.some(watchedPathGlob => {
return glob.sync(watchedPathGlob).indexOf(changedFilePath) !== -1;
});
if (matchesGlob) {
scssFiles.push(changedFilePath);
hasScss = true;
}
// Check whether this watched path matches any watched CSS file.
matchesGlob = grunt.moodleEnv.cssSrc.some(watchedPathGlob => {
return glob.sync(watchedPathGlob).indexOf(changedFilePath) !== -1;
});
if (matchesGlob) {
cssFiles.push(changedFilePath);
hasCss = true;
}
});
} else {
// Grunt was called without a list of files.
// The start directory (runDir) may be a child dir of the project.
// Check each scssSrc file to see if it's in the start directory.
// This means that we can lint just mod/*/styles.css if started in the mod directory.
grunt.moodleEnv.scssSrc.forEach(path => {
if (path.startsWith(grunt.moodleEnv.runDir)) {
scssFiles.push(path);
hasScss = true;
}
});
grunt.moodleEnv.cssSrc.forEach(path => {
if (path.startsWith(grunt.moodleEnv.runDir)) {
cssFiles.push(path);
hasCss = true;
}
});
}
// Register the tasks.
const scssTasks = ['sass'];
if (hasScss) {
grunt.config.merge(getScssConfigForFiles(scssFiles));
scssTasks.unshift('stylelint:scss');
}
scssTasks.unshift('ignorefiles');
const cssTasks = ['ignorefiles'];
if (hasCss) {
grunt.config.merge(getCssConfigForFiles(cssFiles));
cssTasks.push('stylelint:css');
}
// The tasks must be registered, even if empty to ensure a consistent command list.
// They jsut won't run anything.
grunt.registerTask('scss', scssTasks);
grunt.registerTask('rawcss', cssTasks);
};
// Register CSS tasks.
grunt.loadNpmTasks('grunt-stylelint');
// Register the style lint tasks.
registerStyleLintTasks();
grunt.registerTask('css', ['scss', 'rawcss']);
const getCoreThemeMatches = () => {
const scssMatch = 'scss/**/*.scss';
if (grunt.moodleEnv.inTheme) {
return [scssMatch];
}
if (grunt.moodleEnv.runDir.startsWith('theme')) {
return [`*/${scssMatch}`];
}
return [`theme/*/${scssMatch}`];
};
// Add the watch configuration for rawcss, and scss.
grunt.config.merge({
watch: {
rawcss: {
files: [
'**/*.css',
],
excludes: [
'**/moodle.css',
'**/editor.css',
'jsdoc/styles/*.css',
],
tasks: ['rawcss']
},
scss: {
files: getCoreThemeMatches(),
tasks: ['scss']
},
},
});
};
-42
View File
@@ -1,42 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2023 Sara Arjona <sara@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Generate upgradable third-party libraries (utilising thirdpartylibs.xml data)
*/
grunt.registerTask('upgradablelibs', 'Generate upgradable third-party libraries', async function() {
const done = this.async();
const path = require('path');
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
// An array of third party libraries that have a newer version in their repositories.
const thirdPartyLibs = await ComponentList.getThirdPartyLibsUpgradable({progress: true});
for (let library of thirdPartyLibs) {
grunt.log.ok(JSON.stringify(Object.assign({}, library), null, 4));
}
done();
});
};
-272
View File
@@ -1,272 +0,0 @@
/**
* This is a wrapper task to handle the grunt watch command. It attempts to use
* Watchman to monitor for file changes, if it's installed, because it's much faster.
*
* If Watchman isn't installed then it falls back to the grunt-contrib-watch file
* watcher for backwards compatibility.
*/
/* eslint-env node */
module.exports = grunt => {
/**
* This is a wrapper task to handle the grunt watch command. It attempts to use
* Watchman to monitor for file changes, if it's installed, because it's much faster.
*
* If Watchman isn't installed then it falls back to the grunt-contrib-watch file
* watcher for backwards compatibility.
*/
const watchHandler = function() {
const async = require('async');
const watchTaskDone = this.async();
let watchInitialised = false;
let watchTaskQueue = {};
let processingQueue = false;
const watchman = require('fb-watchman');
const watchmanClient = new watchman.Client();
// Grab the tasks and files that have been queued up and execute them.
var processWatchTaskQueue = function() {
if (!Object.keys(watchTaskQueue).length || processingQueue) {
// If there is nothing in the queue or we're already processing then wait.
return;
}
processingQueue = true;
// Grab all tasks currently in the queue.
var queueToProcess = watchTaskQueue;
// Reset the queue.
watchTaskQueue = {};
async.forEachSeries(
Object.keys(queueToProcess),
function(task, next) {
var files = queueToProcess[task];
var filesOption = '--files=' + files.join(',');
grunt.log.ok('Running task ' + task + ' for files ' + filesOption);
// Spawn the task in a child process so that it doesn't kill this one
// if it failed.
grunt.util.spawn(
{
// Spawn with the grunt bin.
grunt: true,
// Run from current working dir and inherit stdio from process.
opts: {
cwd: grunt.moodleEnv.fullRunDir,
stdio: 'inherit'
},
args: [task, filesOption]
},
function(err, res, code) {
if (code !== 0) {
// The grunt task failed.
grunt.log.error(err);
}
// Move on to the next task.
next();
}
);
},
function() {
// No longer processing.
processingQueue = false;
// Once all of the tasks are done then recurse just in case more tasks
// were queued while we were processing.
processWatchTaskQueue();
}
);
};
const originalWatchConfig = grunt.config.get(['watch']);
const watchConfig = Object.keys(originalWatchConfig).reduce(function(carry, key) {
if (key == 'options') {
return carry;
}
const value = originalWatchConfig[key];
const taskNames = value.tasks;
const files = value.files;
let excludes = [];
if (value.excludes) {
excludes = value.excludes;
}
taskNames.forEach(function(taskName) {
carry[taskName] = {
files,
excludes,
};
});
return carry;
}, {});
watchmanClient.on('error', function(error) {
// We have to add an error handler here and parse the error string because the
// example way from the docs to check if Watchman is installed doesn't actually work!!
// See: https://github.com/facebook/watchman/issues/509
if (error.message.match('Watchman was not found')) {
// If watchman isn't installed then we should fallback to the other watch task.
grunt.log.ok('It is recommended that you install Watchman for better performance using the "watch" command.');
// Fallback to the old grunt-contrib-watch task.
grunt.renameTask('watch-grunt', 'watch');
grunt.task.run(['watch']);
// This task is finished.
watchTaskDone(0);
} else {
grunt.log.error(error);
// Fatal error.
watchTaskDone(1);
}
});
watchmanClient.on('subscription', function(resp) {
if (resp.subscription !== 'grunt-watch') {
return;
}
resp.files.forEach(function(file) {
grunt.log.ok('File changed: ' + file.name);
var fullPath = grunt.moodleEnv.fullRunDir + '/' + file.name;
Object.keys(watchConfig).forEach(function(task) {
const fileGlobs = watchConfig[task].files;
var match = fileGlobs.some(function(fileGlob) {
return grunt.file.isMatch(`**/${fileGlob}`, fullPath);
});
if (match) {
// If we are watching a subdirectory then the file.name will be relative
// to that directory. However the grunt tasks expect the file paths to be
// relative to the Gruntfile.js location so let's normalise them before
// adding them to the queue.
var relativePath = fullPath.replace(grunt.moodleEnv.gruntFilePath + '/', '');
if (task in watchTaskQueue) {
if (!watchTaskQueue[task].includes(relativePath)) {
watchTaskQueue[task] = watchTaskQueue[task].concat(relativePath);
}
} else {
watchTaskQueue[task] = [relativePath];
}
}
});
});
processWatchTaskQueue();
});
process.on('SIGINT', function() {
// Let the user know that they may need to manually stop the Watchman daemon if they
// no longer want it running.
if (watchInitialised) {
grunt.log.ok('The Watchman daemon may still be running and may need to be stopped manually.');
}
process.exit();
});
// Initiate the watch on the current directory.
watchmanClient.command(['watch-project', grunt.moodleEnv.fullRunDir], function(watchError, watchResponse) {
if (watchError) {
grunt.log.error('Error initiating watch:', watchError);
watchTaskDone(1);
return;
}
if ('warning' in watchResponse) {
grunt.log.error('warning: ', watchResponse.warning);
}
var watch = watchResponse.watch;
var relativePath = watchResponse.relative_path;
watchInitialised = true;
watchmanClient.command(['clock', watch], function(clockError, clockResponse) {
if (clockError) {
grunt.log.error('Failed to query clock:', clockError);
watchTaskDone(1);
return;
}
// Generate the expression query used by watchman.
// Documentation is limited, but see https://facebook.github.io/watchman/docs/expr/allof.html for examples.
// We generate an expression to match any value in the files list of all of our tasks, but excluding
// all value in the excludes list of that task.
//
// [anyof, [
// [allof, [
// [anyof, [
// ['match', validPath, 'wholename'],
// ['match', validPath, 'wholename'],
// ],
// [not,
// [anyof, [
// ['match', invalidPath, 'wholename'],
// ['match', invalidPath, 'wholename'],
// ],
// ],
// ],
var matchWholeName = fileGlob => ['match', fileGlob, 'wholename'];
var matches = Object.keys(watchConfig).map(function(task) {
const matchAll = [];
matchAll.push(['anyof'].concat(watchConfig[task].files.map(matchWholeName)));
if (watchConfig[task].excludes.length) {
matchAll.push(['not', ['anyof'].concat(watchConfig[task].excludes.map(matchWholeName))]);
}
return ['allof'].concat(matchAll);
});
matches = ['anyof'].concat(matches);
var sub = {
expression: matches,
// Which fields we're interested in.
fields: ["name", "size", "type"],
// Add our time constraint.
since: clockResponse.clock
};
if (relativePath) {
/* eslint-disable camelcase */
sub.relative_root = relativePath;
}
watchmanClient.command(['subscribe', watch, 'grunt-watch', sub], function(subscribeError) {
if (subscribeError) {
// Probably an error in the subscription criteria.
grunt.log.error('failed to subscribe: ', subscribeError);
watchTaskDone(1);
return;
}
grunt.log.ok('Listening for changes to files in ' + grunt.moodleEnv.fullRunDir);
});
});
});
};
// Rename the grunt-contrib-watch "watch" task because we're going to wrap it.
grunt.renameTask('watch', 'watch-grunt');
// Register the new watch handler.
grunt.registerTask('watch', 'Run tasks on file changes', watchHandler);
grunt.config.merge({
watch: {
options: {
nospawn: true // We need not to spawn so config can be changed dynamically.
},
},
});
return watchHandler;
};
-2
View File
@@ -1,2 +0,0 @@
**/amd/**
/*.js
-58
View File
@@ -1,58 +0,0 @@
// NOTE: We use eslint now. This file is used only by shifter. We keep the configuration
// here because shifter uses jshint after modules have been concating. Eslint can't
// currently do this.
{
"asi": false,
"bitwise": true,
"boss": false,
"browser": true,
"curly": true,
"debug": false,
"eqeqeq": false,
"eqnull": false,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"forin": false,
"funcscope": false,
"globalstrict": false,
"immed": true,
"indent": 4,
"iterator": false,
"lastsemic": false,
"latedef": true,
"laxbreak": true,
"laxcomma": false,
"loopfunc": false,
"maxerr": 500,
"maxlen": 132,
"multistr": false,
"newcap": true,
"noarg": true,
"noempty": true,
"nomen": false,
"onecase": false,
"onevar": false,
"passfail": false,
"plusplus": false,
"predef": [
"M",
"define",
"require"
],
"proto": false,
"regexdash": false,
"regexp": false,
"scripturl": false,
"shadow": false,
"smarttabs": false,
"strict": false,
"sub": false,
"supernew": false,
"trailing": true,
"undef": true,
"unused": true,
"white": false,
"yui": true
}
-1
View File
@@ -1 +0,0 @@
lts/gallium
-5
View File
@@ -1,5 +0,0 @@
{
"coverage": false,
"lint": "config",
"clean": true
}
-95
View File
@@ -1,95 +0,0 @@
{
"plugins": [
"stylelint-csstree-validator"
],
"rules": {
"csstree/validator": true,
"at-rule-empty-line-before": [ "always",
{"except": [ "blockless-after-blockless"], ignore: ["after-comment", "inside-block"]}
],
"at-rule-name-case": "lower",
"at-rule-name-space-after": "always-single-line",
"at-rule-no-unknown": null, # Enabled for non-scss in grunt.
"at-rule-semicolon-newline-after": "always",
"at-rule-semicolon-space-before": "never",
"block-closing-brace-newline-after": "always",
"block-closing-brace-newline-before": "always",
"block-closing-brace-space-before": "always-single-line",
"block-no-empty": true,
"block-opening-brace-newline-after": "always",
"block-opening-brace-space-after": "always-single-line",
"block-opening-brace-space-before": "always",
"color-hex-case": ["lower", { "severity": "warning" }],
"color-hex-length": ["short", { "severity": "warning" }],
"color-no-invalid-hex": true,
"declaration-bang-space-after": "never",
"declaration-bang-space-before": "always",
"declaration-block-no-duplicate-properties": true,
"declaration-block-no-shorthand-property-overrides": true,
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-block-semicolon-space-before": "never",
"declaration-block-single-line-max-declarations": 1,
"declaration-block-trailing-semicolon": "always",
"declaration-colon-newline-after": "always-multi-line",
"declaration-colon-space-after": "always-single-line",
"declaration-colon-space-before": "never",
"declaration-no-important": true,
"font-family-no-duplicate-names": true,
"function-calc-no-unspaced-operator": true,
"function-comma-newline-after": "always-multi-line",
"function-comma-space-after": "always-single-line",
"function-comma-space-before": "never",
"function-linear-gradient-no-nonstandard-direction": true,
"function-max-empty-lines": 0,
"function-name-case": "lower",
"function-parentheses-newline-inside": "always-multi-line",
"function-parentheses-space-inside": "never-single-line",
"function-url-scheme-blacklist": ["data"],
"function-whitespace-after": "always",
"indentation": 4,
"keyframe-declaration-no-important": true,
"length-zero-no-unit": [true, { "severity": "warning" }],
"max-empty-lines": 2,
"max-line-length": [132, { "severity": "warning" }],
"media-feature-colon-space-after": "always",
"media-feature-colon-space-before": "never",
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "always",
"media-query-list-comma-newline-after": "always-multi-line",
"media-query-list-comma-space-after": "always-single-line",
"media-query-list-comma-space-before": "never",
"no-empty-source": true,
"no-eol-whitespace": true,
"no-extra-semicolons": [true, { "severity": "warning" }],
"no-invalid-double-slash-comments": true,
"no-unknown-animations": true,
"property-case": "lower",
"property-no-unknown": true,
"selector-attribute-brackets-space-inside": "never",
"selector-attribute-operator-space-after": "never",
"selector-attribute-operator-space-before": "never",
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always",
"selector-list-comma-newline-after": "always",
"selector-list-comma-space-before": "never",
"selector-max-empty-lines": 0,
"selector-pseudo-class-case": "lower",
"selector-pseudo-class-no-unknown": true,
"selector-pseudo-class-parentheses-space-inside": "never",
"selector-pseudo-element-case": "lower",
"selector-pseudo-element-no-unknown": true,
"selector-type-case": "lower",
"selector-type-no-unknown": true,
"string-no-newline": true,
"time-min-milliseconds": 100,
"unit-blacklist": ["pt"],
"unit-case": "lower",
"unit-no-unknown": true,
"value-keyword-case": ["lower", {"ignoreKeywords": ["/(@|$)/"]}],
"value-list-comma-newline-after": "always-multi-line",
"value-list-comma-space-after": "always-single-line",
"value-list-comma-space-before": "never",
}
}
-56
View File
@@ -1,56 +0,0 @@
CONTRIBUTING TO MOODLE
======================
Moodle is made by people like you. We are members of a big worldwide community
of developers, designers, teachers, testers, translators and other users. We
work in universities, schools, companies and other places. You are very welcome
to join us and contribute to the project.
See <https://moodledev.io/general/community/contribute> for the many ways you
can help, not only with coding.
Moodle is open to community contributions to core, though all code must go
through peer-review, automated behaviour testing, continuous integration and
human post-integration checks.
Pull requests
-------------
Please do not open pull requests via Github. The repository there is just a
mirror of the official repository at <https://git.moodle.org>. Issues are
reported and patches provided via <https://tracker.moodle.org>. See below for
more information.
Moodle core bug fixes and new features
--------------------------------------
During the years of intensive development, a mature process of including
submitted patches has evolved.
* Every bug fix or new feature must have a tracker issue.
* You publish the branch implementing the fix or new feature in your public
clone of the moodle.git repository (typically on Github).
* Your patch is peer-reviewed, discussed, integrated, tested and then released
as a part of moodle.git.
* New features are developed on the master branch. Bug fixes are also
backported to currently supported maintenance (stable) branches.
For further details, see <https://moodledev.io/general/development/process>.
Moodle plugins
--------------
Moodle has a framework for additional plugins to extend its functionality. We
have a Moodle plugins directory <https://moodle.org/plugins/> where you can
register and maintain your plugin. Plugins hosted in the plugins directory can
be easily installed and updated via the Moodle administration interface.
* You are expected to have a public source code repository with your plugin
code.
* After registering your plugin in the plugins directory it is reviewed before
being published.
* You are expected to continuously release updated versions of the plugin via
the plugins directory. We do not pull from your code repository; you must do
it explicitly.
For further details, see <https://moodledev.io/general/community/plugincontribution>.
-267
View File
@@ -1,267 +0,0 @@
// 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/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* Grunt configuration for Moodle.
*
* @copyright 2014 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Setup the Grunt Moodle environment.
*
* @param {Grunt} grunt
* @returns {Object}
*/
const setupMoodleEnvironment = grunt => {
const fs = require('fs');
const path = require('path');
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
const getAmdConfiguration = () => {
// If the cwd is the amd directory in the current component then it will be empty.
// If the cwd is a child of the component's AMD directory, the relative directory will not start with ..
let inAMD = !path.relative(`${componentDirectory}/amd`, cwd).startsWith('..');
// Globbing pattern for matching all AMD JS source files.
let amdSrc = [];
if (inComponent) {
amdSrc.push(
componentDirectory + "/amd/src/*.js",
componentDirectory + "/amd/src/**/*.js"
);
} else {
amdSrc = ComponentList.getAmdSrcGlobList();
}
return {
inAMD,
amdSrc,
};
};
const getYuiConfiguration = () => {
let yuiSrc = [];
if (inComponent) {
yuiSrc.push(componentDirectory + "/yui/src/**/*.js");
} else {
yuiSrc = ComponentList.getYuiSrcGlobList(gruntFilePath + '/');
}
return {
yuiSrc,
};
};
const getStyleConfiguration = () => {
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
// Build the cssSrc and scssSrc.
// Valid paths are:
// [component]/styles.css; and either
// [theme/[themename]]/scss/**/*.scss; or
// [theme/[themename]]/style/*.css.
//
// If a theme has scss, then it is assumed that the style directory contains generated content.
let cssSrc = [];
let scssSrc = [];
const checkComponentDirectory = componentDirectory => {
const isTheme = componentDirectory.startsWith('theme/');
if (isTheme) {
const scssDirectory = `${componentDirectory}/scss`;
if (fs.existsSync(scssDirectory)) {
// This theme has an SCSS directory.
// Include all scss files within it recursively, but do not check for css files.
scssSrc.push(`${scssDirectory}/*.scss`);
scssSrc.push(`${scssDirectory}/**/*.scss`);
} else {
// This theme has no SCSS directory.
// Only hte CSS files in the top-level directory are checked.
cssSrc.push(`${componentDirectory}/style/*.css`);
}
} else {
// This is not a theme.
// All other plugin types are restricted to a single styles.css in their top level.
cssSrc.push(`${componentDirectory}/styles.css`);
}
};
if (inComponent) {
checkComponentDirectory(componentDirectory);
} else {
ComponentList.getComponentPaths(`${gruntFilePath}/`).forEach(componentPath => {
checkComponentDirectory(componentPath);
});
}
return {
cssSrc,
scssSrc,
};
};
/**
* Calculate the cwd, taking into consideration the `root` option (for Windows).
*
* @param {Object} grunt
* @returns {String} The current directory as best we can determine
*/
const getCwd = grunt => {
let cwd = fs.realpathSync(process.env.PWD || process.cwd());
// Windows users can't run grunt in a subdirectory, so allow them to set
// the root by passing --root=path/to/dir.
if (grunt.option('root')) {
const root = grunt.option('root');
if (grunt.file.exists(__dirname, root)) {
cwd = fs.realpathSync(path.join(__dirname, root));
grunt.log.ok('Setting root to ' + cwd);
} else {
grunt.fail.fatal('Setting root to ' + root + ' failed - path does not exist');
}
}
return cwd;
};
// Detect directories:
// * gruntFilePath The real path on disk to this Gruntfile.js
// * cwd The current working directory, which can be overridden by the `root` option
// * relativeCwd The cwd, relative to the Gruntfile.js
// * componentDirectory The root directory of the component if the cwd is in a valid component
// * inComponent Whether the cwd is in a valid component
// * runDir The componentDirectory or cwd if not in a component, relative to Gruntfile.js
// * fullRunDir The full path to the runDir
const gruntFilePath = fs.realpathSync(process.cwd());
const cwd = getCwd(grunt);
const relativeCwd = path.relative(gruntFilePath, cwd);
const componentDirectory = ComponentList.getOwningComponentDirectory(relativeCwd);
const inComponent = !!componentDirectory;
const inTheme = !!componentDirectory && componentDirectory.startsWith('theme/');
const runDir = inComponent ? componentDirectory : relativeCwd;
const fullRunDir = fs.realpathSync(gruntFilePath + path.sep + runDir);
const {inAMD, amdSrc} = getAmdConfiguration();
const {yuiSrc} = getYuiConfiguration();
const {cssSrc, scssSrc} = getStyleConfiguration();
let files = null;
if (grunt.option('files')) {
// Accept a comma separated list of files to process.
files = grunt.option('files').split(',');
}
grunt.log.debug('============================================================================');
grunt.log.debug(`= Node version: ${process.versions.node}`);
grunt.log.debug(`= grunt version: ${grunt.package.version}`);
grunt.log.debug(`= process.cwd: '` + process.cwd() + `'`);
grunt.log.debug(`= process.env.PWD: '${process.env.PWD}'`);
grunt.log.debug(`= path.sep '${path.sep}'`);
grunt.log.debug('============================================================================');
grunt.log.debug(`= gruntFilePath: '${gruntFilePath}'`);
grunt.log.debug(`= relativeCwd: '${relativeCwd}'`);
grunt.log.debug(`= componentDirectory: '${componentDirectory}'`);
grunt.log.debug(`= inComponent: '${inComponent}'`);
grunt.log.debug(`= runDir: '${runDir}'`);
grunt.log.debug(`= fullRunDir: '${fullRunDir}'`);
grunt.log.debug('============================================================================');
if (inComponent) {
grunt.log.ok(`Running tasks for component directory ${componentDirectory}`);
}
return {
amdSrc,
componentDirectory,
cwd,
cssSrc,
files,
fullRunDir,
gruntFilePath,
inAMD,
inComponent,
inTheme,
relativeCwd,
runDir,
scssSrc,
yuiSrc,
};
};
/**
* Verify tha tthe current NodeJS version matches the required version in package.json.
*
* @param {Grunt} grunt
*/
const verifyNodeVersion = grunt => {
const semver = require('semver');
// Verify the node version is new enough.
var expected = semver.validRange(grunt.file.readJSON('package.json').engines.node);
var actual = semver.valid(process.version);
if (!semver.satisfies(actual, expected)) {
grunt.fail.fatal('Node version not satisfied. Require ' + expected + ', version installed: ' + actual);
}
};
/**
* Grunt configuration.
*
* @param {Grunt} grunt
*/
module.exports = function(grunt) {
// Verify that the Node version meets our requirements.
verifyNodeVersion(grunt);
// Setup the Moodle environemnt within the Grunt object.
grunt.moodleEnv = setupMoodleEnvironment(grunt);
/**
* Add the named task.
*
* @param {string} name
* @param {Grunt} grunt
*/
const addTask = (name, grunt) => {
const path = require('path');
const taskPath = path.resolve(`./.grunt/tasks/${name}.js`);
grunt.log.debug(`Including tasks for ${name} from ${taskPath}`);
require(path.resolve(`./.grunt/tasks/${name}.js`))(grunt);
};
// Startup tasks.
grunt.moodleEnv.startupTasks = [];
// Add Moodle task configuration.
addTask('gherkinlint', grunt);
addTask('ignorefiles', grunt);
addTask('javascript', grunt);
addTask('style', grunt);
addTask('componentlibrary', grunt);
addTask('watch', grunt);
addTask('startup', grunt);
addTask('upgradablelibs', grunt);
// Register the default task.
grunt.registerTask('default', ['startup']);
};
-20
View File
@@ -1,20 +0,0 @@
MOODLE INSTALLATION
===================
Here is a short summary of the installation process (which can take just a few
minutes):
1. Move the Moodle files into your web directory.
2. Create a single database for Moodle to store all its tables in (or choose an
existing database).
3. Visit your Moodle site with a browser. You should be taken to the
install.php script, which will lead you through creating a config.php file
and then setting up Moodle, creating an admin account etc.
4. Set up a cron task to call the file admin/cron.php every minute.
For more information, see <https://docs.moodle.org/en/Installing_Moodle>.
Good luck and have fun!
-7
View File
@@ -1,7 +0,0 @@
*** PLEASE DO NOT OPEN PULL REQUESTS VIA GITHUB ***
The moodle.git repository at Github is just a mirror of the official repository. We do not accept pull requests at Github.
See CONTRIBUTING.txt guidelines for how to contribute patches for Moodle. Thank you.
--
+22 -21
View File
@@ -1,28 +1,29 @@
.-..-.
_____ | || |
/____/-.---_ .---. .---. .-.| || | .---.
| | _ _ |/ _ \/ _ \/ _ || |/ __ \
* | | | | | || |_| || |_| || |_| || || |___/
|_| |_| |_|\_____/\_____/\_____||_|\_____)
QUICK INSTALL
=============
Moodle - the world's open source learning platform
For the impatient, here is a basic outline of the
installation process, which normally takes me only
a few minutes:
Moodle <https://moodle.org> is a learning platform designed to provide
educators, administrators and learners with a single robust, secure and
integrated system to create personalised learning environments.
1) Move the Moodle files into your web directory.
You can download Moodle <https://download.moodle.org> and run it on your own
web server, ask one of our Moodle Partners <https://moodle.com/partners/> to
assist you, or have a MoodleCloud site <https://moodle.com/cloud/> set up for
you.
2) Create a single database for Moodle to store all
it's tables in (or choose an existing database).
Moodle is widely used around the world by universities, schools, companies and
all manner of organisations and individuals.
3) Visit your Moodle site with a browser, you should
be taken to the install.php script, which will lead
you through creating a config.php file and then
setting up Moodle, creating an admin account etc.
Moodle is provided freely as open source software, under the GNU General Public
License <https://moodledev.io/general/license>.
4) Set up a cron task to call the file admin/cron.php
every five minutes or so.
Moodle is written in PHP and JavaScript and uses an SQL database for storing
the data.
See <https://docs.moodle.org> for details of Moodle's many features.
For more information, see the INSTALL DOCUMENTATION:
http://docs.moodle.org/en/Installing_Moodle
Good luck and have fun!
Martin Dougiamas, Lead Developer
+28 -60
View File
@@ -1,66 +1,34 @@
MOODLE TRADEMARKS POLICY
========================
The Moodle Trademark
--------------------
The brand and word "Moodle" has trade mark protection in many countries around
the world. Various Moodle™ trade marks are owned by either Moodle Pty Ltd or
one of its associated entities. The law obligates trade mark owners to police
their trade marks and prevent the use of confusingly similar names by
third parties.
We have created a more concise and thorough set of Trademark Guidelines
(https://moodle.com/wp-content/uploads/2023/02/Moodle-Trademark-Guidelines-2023-4.pdf)
to help you understand how to comply with Moodle's trade mark requirements.
The Trademark Guidelines will also assist our Moodle Certified Partners and the
community to understand some of the principles that inform Moodle's stance
whenever potential infringement has been detected by us or our community.
We need to be clear about use of the word "Moodle" and how we restrict its use
when promoting commercial Moodle™ branded services. The proper use of
trade marks reliably assures consumers about the quality of the associated
products or services and where they have been derived from. Because the
Moodle LMS is made available under the open source GNU General Public License'
that permits you to modify the copyrighted software, the distribution of such
modified software in combination with Moodle trade marks can potentially
mislead others in the community. To be clear, the GNU GPL does not include an
implied right or licence to use Moodle's trade marks.
We do all this to protect the very business model that allows us to continue
developing various Moodle software solutions for you.
Allowed uses of "Moodle"
------------------------
Moodle Trademark License
------------------------
The following uses don't require any permission at all:
The name Moodle™ is a registered trademark of the Moodle Trust.
* Referring to the software or the Moodle project as the "Moodle™ software"
or the "Moodle™ project"
* Describing your own implementation of the Moodle™ software platform
(including within corporate settings).
* Describing a Moodle-based community hub.
* Describing certain software you've made that integrates with Moodle™
branded software (e.g. a Moodle™ integration feature on another system).
A key part of the business model that allows us to produce and
distribute Moodle as completely Free open source software is that
we restrict the commercial use of the Moodle trademark to those
who have contracted to support Moodle development (Moodle Partners).
Restricted uses of "Moodle"
---------------------------
If you are intending to use the name (and/or logo) to advertise
generic Moodle™ services (eg Moodle Hosting, Moodle Support,
Moodle Certification, Moodle Training, Moodle Consulting,
Moodle Customisation, Moodle Courseware Development, Moodle
Theme design, Moodle Integrations, Moodle Installations, etc)
or as the name of a software package, then you must seek
direct permission in writing from the Moodle Trust via the
moodle.com helpdesk, in accordance with normal trademark
restrictions.
The following uses are generally prohibited without explicit and direct
permission being granted to you by Moodle Pty Ltd. We do this to protect the
Moodle™ project from software and sites which could confuse people. If in
doubt, reach out for clarification at <trademarks@moodle.com>
There are no restrictions on how you use the name in other
contexts (for example, if you use Moodle just to provide
courses then you can use the name freely to refer to it.)
* You can't use the word "Moodle" or any Moodle logos for commercial purposes
without prior written permission from Moodle HQ.
* You can't use "Moodle" in the name of your software (including Mobile apps).
* You can't use "Moodle" in your company name.
* You can't use "Moodle" in your domain name.
* You can't use "Moodle" in advertising-related keywords (such as Adsense).
* You can't use "Moodle" to describe services around Moodle
(such as hosting, training, support, consulting, course creation services,
theme development, customisation, installation, integration, analytics
and certification) that cause consumers to be confused that you are
associated with Moodle HQ if you are not.
This applies even if you do not charge for the services.
Note that usually only Moodle Partners have this permission.
If you aren't sure of a particular case, please ask us via
http://moodle.com/helpdesk: we'll be happy to either provide
you with official permission in writing or help you fix
your wording.
Martin Dougiamas
Executive Director
Moodle Trust
http://moodle.com
-3
View File
@@ -1,3 +0,0 @@
define("core_admin/block_management_table",["exports","./plugin_management_table","core_table/dynamic","core/ajax","core/pending","core/notification"],(function(_exports,_plugin_management_table,_dynamic,_ajax,_pending,_notification){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_plugin_management_table=_interopRequireDefault(_plugin_management_table),_pending=_interopRequireDefault(_pending);class _default extends _plugin_management_table.default{constructor(){super(),this.addClickHandler(this.handleBlockProtectToggle)}setBlockProtectState(plugin,state){return(0,_ajax.call)([{methodname:"core_admin_set_block_protection",args:{plugin:plugin,state:state}}])[0]}async handleBlockProtectToggle(tableRoot,e){const stateToggle=e.target.closest('[data-action="toggleprotectstate"]');if(stateToggle){e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:processAction");await this.setBlockProtectState(stateToggle.dataset.plugin,"1"===stateToggle.dataset.targetState?1:0);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]);updatedRoot.querySelector('[data-action="toggleprotectstate"][data-plugin="'.concat(stateToggle.dataset.plugin,'"]')).focus(),pendingPromise.resolve()}}}return _exports.default=_default,_exports.default}));
//# sourceMappingURL=block_management_table.min.js.map
@@ -1 +0,0 @@
{"version":3,"file":"block_management_table.min.js","sources":["../src/block_management_table.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\nimport PluginManagementTable from './plugin_management_table';\nimport {refreshTableContent} from 'core_table/dynamic';\nimport {call as fetchMany} from 'core/ajax';\nimport Pending from 'core/pending';\nimport {fetchNotifications} from 'core/notification';\n\nexport default class extends PluginManagementTable {\n constructor() {\n super();\n this.addClickHandler(this.handleBlockProtectToggle);\n }\n\n /**\n * Set the block protection state.\n *\n * @param {string} plugin\n * @param {number} state\n * @returns {Promise}\n */\n setBlockProtectState(plugin, state) {\n return fetchMany([{\n methodname: 'core_admin_set_block_protection',\n args: {\n plugin,\n state,\n },\n }])[0];\n }\n\n /**\n * Handle toggling of block protection.\n *\n * @param {HTMLElement} tableRoot\n * @param {Event} e\n */\n async handleBlockProtectToggle(tableRoot, e) {\n const stateToggle = e.target.closest('[data-action=\"toggleprotectstate\"]');\n if (stateToggle) {\n e.preventDefault();\n const pendingPromise = new Pending('core_table/dynamic:processAction');\n\n await this.setBlockProtectState(\n stateToggle.dataset.plugin,\n stateToggle.dataset.targetState === '1' ? 1 : 0\n );\n\n const [updatedRoot] = await Promise.all([\n refreshTableContent(tableRoot),\n fetchNotifications(),\n ]);\n\n // Refocus on the link that as pressed in the first place.\n updatedRoot.querySelector(`[data-action=\"toggleprotectstate\"][data-plugin=\"${stateToggle.dataset.plugin}\"]`).focus();\n pendingPromise.resolve();\n }\n }\n}\n"],"names":["PluginManagementTable","constructor","addClickHandler","this","handleBlockProtectToggle","setBlockProtectState","plugin","state","methodname","args","tableRoot","e","stateToggle","target","closest","preventDefault","pendingPromise","Pending","dataset","targetState","updatedRoot","Promise","all","querySelector","focus","resolve"],"mappings":"uhBAqB6BA,iCACzBC,2BAESC,gBAAgBC,KAAKC,0BAU9BC,qBAAqBC,OAAQC,cAClB,cAAU,CAAC,CACdC,WAAY,kCACZC,KAAM,CACFH,OAAAA,OACAC,MAAAA,UAEJ,kCASuBG,UAAWC,SAChCC,YAAcD,EAAEE,OAAOC,QAAQ,yCACjCF,YAAa,CACbD,EAAEI,uBACIC,eAAiB,IAAIC,iBAAQ,0CAE7Bd,KAAKE,qBACPO,YAAYM,QAAQZ,OACgB,MAApCM,YAAYM,QAAQC,YAAsB,EAAI,SAG3CC,mBAAqBC,QAAQC,IAAI,EACpC,gCAAoBZ,YACpB,wCAIJU,YAAYG,wEAAiEX,YAAYM,QAAQZ,cAAYkB,QAC7GR,eAAeS"}
-3
View File
@@ -1,3 +0,0 @@
define("core_admin/plugin_management_table",["exports","core_table/dynamic","core_table/local/dynamic/selectors","core/ajax","core/pending","core/notification"],(function(_exports,_dynamic,Selectors,_ajax,_pending,_notification){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Selectors),_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};let watching=!1;return _exports.default=class{constructor(){!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(this,"clickHandlers",[]),this.addClickHandler(this.handleStateToggle),this.addClickHandler(this.handleMoveUpDown),this.registerEventListeners()}static init(){watching||(watching=!0,new this)}addClickHandler(handler){this.clickHandlers.push(handler.bind(this))}registerEventListeners(){document.addEventListener("click",function(e){const tableRoot=this.getTableRoot(e);tableRoot&&this.clickHandlers.forEach((handler=>handler(tableRoot,e)))}.bind(this))}getTableRoot(e){const tableRoot=e.target.closest(Selectors.main.region);return tableRoot||!1}setPluginState(methodname,plugin,state){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,state:state}}])[0]}setPluginOrder(methodname,plugin,direction){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,direction:direction}}])[0]}async handleStateToggle(tableRoot,e){const stateToggle=e.target.closest('[data-action="togglestate"][data-toggle-method]');if(stateToggle){e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:togglestate");await this.setPluginState(stateToggle.dataset.toggleMethod,stateToggle.dataset.plugin,"1"===stateToggle.dataset.state?0:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]);updatedRoot.querySelector('[data-action="togglestate"][data-plugin="'.concat(stateToggle.dataset.plugin,'"]')).focus(),pendingPromise.resolve()}}async handleMoveUpDown(tableRoot,e){const actionLink=e.target.closest('[data-action="move"][data-method][data-direction]');if(!actionLink)return;e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:processAction");await this.setPluginOrder(actionLink.dataset.method,actionLink.dataset.plugin,"up"===actionLink.dataset.direction?-1:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]),exactMatch=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"][data-direction="').concat(actionLink.dataset.direction,'"]'));var _updatedRoot$querySel;exactMatch?exactMatch.focus():null===(_updatedRoot$querySel=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"]')))||void 0===_updatedRoot$querySel||_updatedRoot$querySel.focus();pendingPromise.resolve()}},_exports.default}));
//# sourceMappingURL=plugin_management_table.min.js.map
File diff suppressed because one or more lines are too long
-72
View File
@@ -1,72 +0,0 @@
// 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/>.
import PluginManagementTable from './plugin_management_table';
import {refreshTableContent} from 'core_table/dynamic';
import {call as fetchMany} from 'core/ajax';
import Pending from 'core/pending';
import {fetchNotifications} from 'core/notification';
export default class extends PluginManagementTable {
constructor() {
super();
this.addClickHandler(this.handleBlockProtectToggle);
}
/**
* Set the block protection state.
*
* @param {string} plugin
* @param {number} state
* @returns {Promise}
*/
setBlockProtectState(plugin, state) {
return fetchMany([{
methodname: 'core_admin_set_block_protection',
args: {
plugin,
state,
},
}])[0];
}
/**
* Handle toggling of block protection.
*
* @param {HTMLElement} tableRoot
* @param {Event} e
*/
async handleBlockProtectToggle(tableRoot, e) {
const stateToggle = e.target.closest('[data-action="toggleprotectstate"]');
if (stateToggle) {
e.preventDefault();
const pendingPromise = new Pending('core_table/dynamic:processAction');
await this.setBlockProtectState(
stateToggle.dataset.plugin,
stateToggle.dataset.targetState === '1' ? 1 : 0
);
const [updatedRoot] = await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
// Refocus on the link that as pressed in the first place.
updatedRoot.querySelector(`[data-action="toggleprotectstate"][data-plugin="${stateToggle.dataset.plugin}"]`).focus();
pendingPromise.resolve();
}
}
}
-179
View File
@@ -1,179 +0,0 @@
// 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/>.
import {refreshTableContent} from 'core_table/dynamic';
import * as Selectors from 'core_table/local/dynamic/selectors';
import {call as fetchMany} from 'core/ajax';
import Pending from 'core/pending';
import {fetchNotifications} from 'core/notification';
let watching = false;
export default class {
/**
* @property {function[]} clickHandlers a list of handlers to call on click.
*/
clickHandlers = [];
constructor() {
this.addClickHandler(this.handleStateToggle);
this.addClickHandler(this.handleMoveUpDown);
this.registerEventListeners();
}
/**
* Initialise an instance of the class.
*
* This is just a way of making it easier to initialise an instance of the class from PHP.
*/
static init() {
if (watching) {
return;
}
watching = true;
new this();
}
/**
* Add a click handler to the list of handlers.
*
* @param {Function} handler A handler to call on a click event
*/
addClickHandler(handler) {
this.clickHandlers.push(handler.bind(this));
}
/**
* Register the event listeners for this instance.
*/
registerEventListeners() {
document.addEventListener('click', function(e) {
const tableRoot = this.getTableRoot(e);
if (!tableRoot) {
return;
}
this.clickHandlers.forEach((handler) => handler(tableRoot, e));
}.bind(this));
}
/**
* Get the table root from an event.
*
* @param {Event} e
* @returns {HTMLElement|bool}
*/
getTableRoot(e) {
const tableRoot = e.target.closest(Selectors.main.region);
if (!tableRoot) {
return false;
}
return tableRoot;
}
/**
* Set the plugin state (enabled or disabled)
*
* @param {string} methodname The web service to call
* @param {string} plugin The name of the plugin to set the state for
* @param {number} state The state to set
* @returns {Promise}
*/
setPluginState(methodname, plugin, state) {
return fetchMany([{
methodname,
args: {
plugin,
state,
},
}])[0];
}
setPluginOrder(methodname, plugin, direction) {
return fetchMany([{
methodname,
args: {
plugin,
direction,
},
}])[0];
}
/**
* Handle state toggling.
*
* @param {HTMLElement} tableRoot
* @param {Event} e
*/
async handleStateToggle(tableRoot, e) {
const stateToggle = e.target.closest('[data-action="togglestate"][data-toggle-method]');
if (stateToggle) {
e.preventDefault();
const pendingPromise = new Pending('core_table/dynamic:togglestate');
await this.setPluginState(
stateToggle.dataset.toggleMethod,
stateToggle.dataset.plugin,
stateToggle.dataset.state === '1' ? 0 : 1
);
const [updatedRoot] = await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
// Refocus on the link that as pressed in the first place.
updatedRoot.querySelector(`[data-action="togglestate"][data-plugin="${stateToggle.dataset.plugin}"]`).focus();
pendingPromise.resolve();
}
}
async handleMoveUpDown(tableRoot, e) {
const actionLink = e.target.closest('[data-action="move"][data-method][data-direction]');
if (!actionLink) {
return;
}
e.preventDefault();
const pendingPromise = new Pending('core_table/dynamic:processAction');
await this.setPluginOrder(
actionLink.dataset.method,
actionLink.dataset.plugin,
actionLink.dataset.direction === 'up' ? -1 : 1,
);
const [updatedRoot] = await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
// Refocus on the link that as pressed in the first place.
const exactMatch = updatedRoot.querySelector(
`[data-action="move"][data-plugin="${actionLink.dataset.plugin}"][data-direction="${actionLink.dataset.direction}"]`
);
if (exactMatch) {
exactMatch.focus();
} else {
// The move link is not present anymore, so we need to focus on the other one.
updatedRoot.querySelector(`[data-action="move"][data-plugin="${actionLink.dataset.plugin}"]`)?.focus();
}
pendingPromise.resolve();
}
}
-113
View File
@@ -1,113 +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/>.
/**
* Allows admin to configure antiviruses.
*
* @package core_antivirus
* @copyright 2015 Ruslan Kabalin, Lancaster University.
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
$action = required_param('action', PARAM_ALPHANUMEXT);
$antivirus = required_param('antivirus', PARAM_PLUGIN);
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$PAGE->set_url('/admin/antiviruses.php', array('action' => $action, 'antivirus' => $antivirus));
$PAGE->set_context(context_system::instance());
require_admin();
$returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageantiviruses";
// Get currently installed and enabled antivirus plugins.
$availableantiviruses = \core\antivirus\manager::get_available();
if (!empty($antivirus) and empty($availableantiviruses[$antivirus])) {
redirect ($returnurl);
}
$activeantiviruses = explode(',', $CFG->antiviruses);
foreach ($activeantiviruses as $key => $active) {
if (empty($availableantiviruses[$active])) {
unset($activeantiviruses[$key]);
}
}
if (!confirm_sesskey()) {
redirect($returnurl);
}
$needsupdate = false;
switch ($action) {
case 'disable':
// Remove from enabled list.
$class = \core_plugin_manager::resolve_plugininfo_class('antivirus');
$class::enable_plugin($antivirus, false);
break;
case 'enable':
// Add to enabled list.
if (!in_array($antivirus, $activeantiviruses)) {
$class = \core_plugin_manager::resolve_plugininfo_class('antivirus');
$class::enable_plugin($antivirus, true);
}
break;
case 'down':
$key = array_search($antivirus, $activeantiviruses);
// Check auth plugin is valid.
if ($key !== false) {
// Move down the list.
if ($key < (count($activeantiviruses) - 1)) {
$fsave = $activeantiviruses[$key];
$activeantiviruses[$key] = $activeantiviruses[$key + 1];
$activeantiviruses[$key + 1] = $fsave;
$needsupdate = true;
}
}
break;
case 'up':
$key = array_search($antivirus, $activeantiviruses);
// Check auth is valid.
if ($key !== false) {
// Move up the list.
if ($key >= 1) {
$fsave = $activeantiviruses[$key];
$activeantiviruses[$key] = $activeantiviruses[$key - 1];
$activeantiviruses[$key - 1] = $fsave;
$needsupdate = true;
}
}
break;
default:
break;
}
if ($needsupdate) {
$new = implode(',', $activeantiviruses);
add_to_config_log('antiviruses', $CFG->antiviruses, $new, 'core');
set_config('antiviruses', $new);
core_plugin_manager::reset_caches();
}
redirect ($returnurl);
+28 -17
View File
@@ -11,13 +11,14 @@ require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
require_admin();
require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
$returnurl = new moodle_url('/admin/settings.php', array('section'=>'manageauths'));
$PAGE->set_url($returnurl);
$action = optional_param('action', '', PARAM_ALPHANUMEXT);
$action = optional_param('action', '', PARAM_ACTION);
$auth = optional_param('auth', '', PARAM_PLUGIN);
get_enabled_auth_plugins(true); // fix the list of enabled auths
@@ -28,7 +29,7 @@ if (empty($CFG->auth)) {
}
if (!empty($auth) and !exists_auth_plugin($auth)) {
throw new \moodle_exception('pluginnotinstalled', 'auth', $returnurl, $auth);
print_error('pluginnotinstalled', 'auth', $returnurl, $auth);
}
////////////////////////////////////////////////////////////////////////////////
@@ -40,31 +41,41 @@ if (!confirm_sesskey()) {
switch ($action) {
case 'disable':
// Remove from enabled list.
$class = \core_plugin_manager::resolve_plugininfo_class('auth');
$class::enable_plugin($auth, false);
// remove from enabled list
$key = array_search($auth, $authsenabled);
if ($key !== false) {
unset($authsenabled[$key]);
set_config('auth', implode(',', $authsenabled));
}
if ($auth == $CFG->registerauth) {
set_config('registerauth', '');
}
session_gc(); // remove stale sessions
break;
case 'enable':
// Add to enabled list.
$class = \core_plugin_manager::resolve_plugininfo_class('auth');
$class::enable_plugin($auth, true);
// add to enabled list
if (!in_array($auth, $authsenabled)) {
$authsenabled[] = $auth;
$authsenabled = array_unique($authsenabled);
set_config('auth', implode(',', $authsenabled));
}
session_gc(); // remove stale sessions
break;
case 'down':
$key = array_search($auth, $authsenabled);
// check auth plugin is valid
if ($key === false) {
throw new \moodle_exception('pluginnotenabled', 'auth', $returnurl, $auth);
print_error('pluginnotenabled', 'auth', $returnurl, $auth);
}
// move down the list
if ($key < (count($authsenabled) - 1)) {
$fsave = $authsenabled[$key];
$authsenabled[$key] = $authsenabled[$key + 1];
$authsenabled[$key + 1] = $fsave;
$value = implode(',', $authsenabled);
add_to_config_log('auth', $CFG->auth, $value, 'core');
set_config('auth', $value);
set_config('auth', implode(',', $authsenabled));
}
break;
@@ -72,16 +83,14 @@ switch ($action) {
$key = array_search($auth, $authsenabled);
// check auth is valid
if ($key === false) {
throw new \moodle_exception('pluginnotenabled', 'auth', $returnurl, $auth);
print_error('pluginnotenabled', 'auth', $returnurl, $auth);
}
// move up the list
if ($key >= 1) {
$fsave = $authsenabled[$key];
$authsenabled[$key] = $authsenabled[$key - 1];
$authsenabled[$key - 1] = $fsave;
$value = implode(',', $authsenabled);
add_to_config_log('auth', $CFG->auth, $value, 'core');
set_config('auth', $value);
set_config('auth', implode(',', $authsenabled));
}
break;
@@ -90,3 +99,5 @@ switch ($action) {
}
redirect($returnurl);
+179
View File
@@ -0,0 +1,179 @@
<?php
/**
* Edit configuration for an individual auth plugin
*/
require_once '../config.php';
require_once $CFG->libdir.'/adminlib.php';
$auth = required_param('auth', PARAM_PLUGIN);
$PAGE->set_pagetype('admin-auth-' . $auth);
admin_externalpage_setup('authsetting'.$auth);
$authplugin = get_auth_plugin($auth);
$err = array();
$returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageauths";
// save configuration changes
if ($frm = data_submitted() and confirm_sesskey()) {
$authplugin->validate_form($frm, $err);
if (count($err) == 0) {
// save plugin config
if ($authplugin->process_config($frm)) {
// save field lock configuration
foreach ($frm as $name => $value) {
if (preg_match('/^lockconfig_(.+?)$/', $name, $matches)) {
$plugin = "auth/$auth";
$name = $matches[1];
set_config($name, $value, $plugin);
}
}
redirect($returnurl);
exit;
}
} else {
foreach ($err as $key => $value) {
$focus = "form.$key";
}
}
} else {
$frmlegacystyle = get_config('auth/'.$auth);
$frmnewstyle = get_config('auth_'.$auth);
$frm = (object)array_merge((array)$frmlegacystyle, (array)$frmnewstyle);
}
$user_fields = $authplugin->userfields;
//$user_fields = array("firstname", "lastname", "email", "phone1", "phone2", "institution", "department", "address", "city", "country", "description", "idnumber", "lang");
/// Get the auth title (from core or own auth lang files)
$authtitle = $authplugin->get_title();
/// Get the auth descriptions (from core or own auth lang files)
$authdescription = $authplugin->get_description();
// output configuration form
echo $OUTPUT->header();
// choose an authentication method
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";
// auth plugin description
echo $OUTPUT->box_start();
echo $OUTPUT->heading($authtitle);
echo $OUTPUT->box_start('informationbox');
echo $authdescription;
echo $OUTPUT->box_end();
echo "<hr />\n";
$authplugin->config_form($frm, $err, $user_fields);
echo $OUTPUT->box_end();
echo '<p style="text-align: center"><input type="submit" value="' . get_string("savechanges") . "\" /></p>\n";
echo "</div>\n";
echo "</form>\n";
echo $OUTPUT->footer();
exit;
/// Functions /////////////////////////////////////////////////////////////////
// Good enough for most auth plugins
// 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) {
global $OUTPUT;
echo '<tr><td colspan="3">';
if ($retrieveopts) {
echo $OUTPUT->heading(get_string('auth_data_mapping', 'auth'));
} else {
echo $OUTPUT->heading(get_string('auth_fieldlocks', 'auth'));
}
echo '</td></tr>';
$lockoptions = array ('unlocked' => get_string('unlocked', 'auth'),
'unlockedifempty' => get_string('unlockedifempty', 'auth'),
'locked' => get_string('locked', 'auth'));
$updatelocaloptions = array('oncreate' => get_string('update_oncreate', 'auth'),
'onlogin' => get_string('update_onlogin', 'auth'));
$updateextoptions = array('0' => get_string('update_never', 'auth'),
'1' => get_string('update_onupdate', 'auth'));
$pluginconfig = get_config("auth/$auth");
// helptext is on a field with rowspan
if (empty($helptext)) {
$helptext = '&nbsp;';
}
foreach ($user_fields as $field) {
// Define some vars we'll work with
if (!isset($pluginconfig->{"field_map_$field"})) {
$pluginconfig->{"field_map_$field"} = '';
}
if (!isset($pluginconfig->{"field_updatelocal_$field"})) {
$pluginconfig->{"field_updatelocal_$field"} = '';
}
if (!isset($pluginconfig->{"field_updateremote_$field"})) {
$pluginconfig->{"field_updateremote_$field"} = '';
}
if (!isset($pluginconfig->{"field_lock_$field"})) {
$pluginconfig->{"field_lock_$field"} = '';
}
// define the fieldname we display to the user
$fieldname = $field;
if ($fieldname === 'lang') {
$fieldname = get_string('language');
} elseif (preg_match('/^(.+?)(\d+)$/', $fieldname, $matches)) {
$fieldname = get_string($matches[1]) . ' ' . $matches[2];
} elseif ($fieldname == 'url') {
$fieldname = get_string('webpage');
} else {
$fieldname = get_string($fieldname);
}
if ($retrieveopts) {
$varname = 'field_map_' . $field;
echo '<tr valign="top"><td align="right">';
echo '<label for="lockconfig_'.$varname.'">'.$fieldname.'</label>';
echo '</td><td>';
echo "<input id=\"lockconfig_{$varname}\" name=\"lockconfig_{$varname}\" type=\"text\" size=\"30\" value=\"{$pluginconfig->$varname}\" />";
echo '<div style="text-align: right">';
echo '<label for="menulockconfig_field_updatelocal_'.$field.'">'.get_string('auth_updatelocal', 'auth') . '</label>&nbsp;';
echo html_writer::select($updatelocaloptions, "lockconfig_field_updatelocal_{$field}", $pluginconfig->{"field_updatelocal_$field"}, false);
echo '<br />';
if ($updateopts) {
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);
echo '</div>';
} else {
echo '<tr valign="top"><td align="right">';
echo '<label for="menulockconfig_field_lock_'.$field.'">'.$fieldname.'</label>';
echo '</td><td>';
echo html_writer::select($lockoptions, "lockconfig_field_lock_{$field}", $pluginconfig->{"field_lock_$field"}, false);
}
echo '</td>';
if (!empty($helptext)) {
echo '<td rowspan="' . count($user_fields) . '">' . $helptext . '</td>';
$helptext = '';
}
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();
+244 -79
View File
@@ -1,94 +1,259 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Allows the admin to configure blocks (hide/show, uninstall and configure)
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// Allows the admin to configure blocks (hide/show, delete and configure)
require_once('../config.php');
require_once("{$CFG->libdir}/adminlib.php");
require_once("{$CFG->libdir}/blocklib.php");
require_once("{$CFG->libdir}/tablelib.php");
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
admin_externalpage_setup('manageblocks');
admin_externalpage_setup('manageblocks');
$plugin = optional_param('plugin', '', PARAM_PLUGIN);
$action = optional_param('action', '', PARAM_ALPHA);
$unprotect = optional_param('unprotect', 0, PARAM_PLUGIN);
$protect = optional_param('protect', 0, PARAM_PLUGIN);
$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);
$strmanageblocks = get_string('manageblocks');
/// Print headings
// If data submitted, then process and store.
if (!empty($plugin) && !empty($action) && confirm_sesskey()) {
$manager = \core_plugin_manager::resolve_plugininfo_class('block');
$pluginname = get_string('pluginname', "block_{$plugin}");
$strmanageblocks = get_string('manageblocks');
$strdelete = get_string('delete');
$strversion = get_string('version');
$strhide = get_string('hide');
$strshow = get_string('show');
$strsettings = get_string('settings');
$strcourses = get_string('blockinstances', 'admin');
$strname = get_string('name');
$strshowblockcourse = get_string('showblockcourse');
$strprotecthdr = get_string('blockprotect', 'admin'). $OUTPUT->help_icon('blockprotect','admin');
$strprotect = get_string('blockprotect', 'admin');
$strunprotect = get_string('blockunprotect', 'admin');
if ($action === 'disable' && $manager::enable_plugin($plugin, 0)) {
\core\notification::add(
get_string('plugin_disabled', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
// Settings not required - only pages.
admin_get_root(true, false);
} else if ($action === 'enable' && $manager::enable_plugin($plugin, 1)) {
\core\notification::add(
get_string('plugin_enabled', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
/// If data submitted, then process and store.
// Settings not required - only pages.
admin_get_root(true, false);
if (!empty($hide) && confirm_sesskey()) {
if (!$block = $DB->get_record('block', array('id'=>$hide))) {
print_error('blockdoesnotexist', 'error');
}
$DB->set_field('block', 'visible', '0', array('id'=>$block->id)); // Hide block
admin_get_root(true, false); // settings not required - only pages
}
// Redirect back to the page with out any params.
redirect(new moodle_url('/admin/blocks.php'));
}
if (!empty($show) && confirm_sesskey() ) {
if (!$block = $DB->get_record('block', array('id'=>$show))) {
print_error('blockdoesnotexist', 'error');
}
$DB->set_field('block', 'visible', '1', array('id'=>$block->id)); // Show block
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($protect) && confirm_sesskey()) {
block_manager::protect_block($protect);
$pluginname = get_string('pluginname', "block_{$protect}");
\core\notification::add(
get_string('blockprotected', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
// Settings not required - only pages.
admin_get_root(true, false);
}
if (!isset($CFG->undeletableblocktypes) || (!is_array($CFG->undeletableblocktypes) && !is_string($CFG->undeletableblocktypes))) {
$undeletableblocktypes = array('navigation', 'settings');
} else if (is_string($CFG->undeletableblocktypes)) {
$undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
} else {
$undeletableblocktypes = $CFG->undeletableblocktypes;
}
if (!empty($unprotect) && confirm_sesskey()) {
block_manager::unprotect_block($unprotect);
$pluginname = get_string('pluginname', "block_{$unprotect}");
\core\notification::add(
get_string('blockunprotected', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
// Settings not required - only pages.
admin_get_root(true, false);
}
if (!empty($protect) && confirm_sesskey()) {
if (!$block = $DB->get_record('block', array('id'=>$protect))) {
print_error('blockdoesnotexist', 'error');
}
if (!in_array($block->name, $undeletableblocktypes)) {
$undeletableblocktypes[] = $block->name;
set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
}
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($unprotect) && confirm_sesskey()) {
if (!$block = $DB->get_record('block', array('id'=>$unprotect))) {
print_error('blockdoesnotexist', 'error');
}
if (in_array($block->name, $undeletableblocktypes)) {
$undeletableblocktypes = array_diff($undeletableblocktypes, array($block->name));
set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
}
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);
/// Main display starts here
/// Get and sort the existing blocks
if (!$blocks = $DB->get_records('block', array(), 'name ASC')) {
print_error('noblocks', 'error'); // Should never happen
}
$incompatible = array();
/// Print the table of all blocks
$table = new flexible_table('admin-blocks-compatible');
$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', 'compatibleblockstable blockstable generaltable');
$table->setup();
$tablerows = array();
foreach ($blocks as $blockid=>$block) {
$blockname = $block->name;
if (!file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
$blockobject = false;
$strblockname = '<span class="notifyproblem">'.$blockname.' ('.get_string('missingfromdisk').')</span>';
$plugin = new stdClass();
$plugin->version = $block->version;
} else {
$plugin = new stdClass();
$plugin->version = '???';
if (file_exists("$CFG->dirroot/blocks/$blockname/version.php")) {
include("$CFG->dirroot/blocks/$blockname/version.php");
}
if (!$blockobject = block_instance($block->name)) {
$incompatible[] = $block;
continue;
}
$strblockname = get_string('pluginname', 'block_'.$blockname);
}
$delete = '<a href="blocks.php?delete='.$blockid.'&amp;sesskey='.sesskey().'">'.$strdelete.'</a>';
$settings = ''; // By default, no configuration
if ($blockobject and $blockobject->has_config()) {
$blocksettings = admin_get_root()->locate('blocksetting' . $block->name);
if ($blocksettings instanceof admin_externalpage) {
$settings = '<a href="' . $blocksettings->url . '">' . get_string('settings') . '</a>';
} else if ($blocksettings instanceof admin_settingpage) {
$settings = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/settings.php?section=blocksetting'.$block->name.'">'.$strsettings.'</a>';
} else {
$settings = '<a href="block.php?block='.$blockid.'">'.$strsettings.'</a>';
}
}
// MDL-11167, blocks can be placed on mymoodle, or the blogs page
// and it should not show up on course search page
$totalcount = $DB->count_records('block_instances', array('blockname'=>$blockname));
$count = $DB->count_records('block_instances', array('blockname'=>$blockname, 'pagetypepattern'=>'course-view-*'));
if ($count>0) {
$blocklist = "<a href=\"{$CFG->wwwroot}/course/search.php?blocklist=$blockid&amp;sesskey=".sesskey()."\" ";
$blocklist .= "title=\"$strshowblockcourse\" >$totalcount</a>";
}
else {
$blocklist = "$totalcount";
}
$class = ''; // Nothing fancy, by default
if (!$blockobject) {
// ignore
$visible = '';
} else if ($blocks[$blockid]->visible) {
$visible = '<a href="blocks.php?hide='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strhide.'">'.
'<img src="'.$OUTPUT->pix_url('i/hide') . '" class="icon" alt="'.$strhide.'" /></a>';
} else {
$visible = '<a href="blocks.php?show='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strshow.'">'.
'<img src="'.$OUTPUT->pix_url('i/show') . '" class="icon" alt="'.$strshow.'" /></a>';
$class = ' class="dimmed_text"'; // Leading space required!
}
if ($block->version == $plugin->version) {
$version = $block->version;
} else {
$version = "$block->version ($plugin->version)";
}
if (!$blockobject) {
// ignore
$undeletable = '';
} else if (in_array($blockname, $undeletableblocktypes)) {
$undeletable = '<a href="blocks.php?unprotect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strunprotect.'">'.
'<img src="'.$OUTPUT->pix_url('t/unlock') . '" class="icon" alt="'.$strunprotect.'" /></a>';
} else {
$undeletable = '<a href="blocks.php?protect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strprotect.'">'.
'<img src="'.$OUTPUT->pix_url('t/unlock_gray') . '" class="icon" alt="'.$strprotect.'" /></a>';
}
$row = array(
'<span'.$class.'>'.$strblockname.'</span>',
$blocklist,
'<span'.$class.'>'.$version.'</span>',
$visible,
$undeletable,
$delete,
$settings
);
$tablerows[] = array(strip_tags($strblockname), $row); // first element will be used for sorting
}
collatorlib::asort($tablerows);
foreach ($tablerows as $row) {
$table->add_data($row[1]);
}
$table->print_html();
if (!empty($incompatible)) {
echo $OUTPUT->heading(get_string('incompatibleblocks', 'blockstable', 'admin'));
$table = new flexible_table('admin-blocks-incompatible');
$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');
$table->setup();
foreach ($incompatible as $block) {
$table->add_data(array(
$block->name,
'<a href="blocks.php?delete='.$block->id.'&amp;sesskey='.sesskey().'">'.$strdelete.'</a>',
));
}
$table->print_html();
}
echo $OUTPUT->footer();
echo $OUTPUT->header();
echo $OUTPUT->heading($strmanageblocks);
echo $OUTPUT->notification(get_string('noteunneededblocks', 'admin'), 'info', false);
// Print the table of all blocks.
$table = new \core_admin\table\block_management_table();
$table->out();
echo $OUTPUT->footer();
-163
View File
@@ -1,163 +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 is used to display a categories sub categories, external pages, and settings.
*
* @since Moodle 2.3
* @package admin
* @copyright 2011 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
$category = required_param('category', PARAM_SAFEDIR);
$return = optional_param('return','', PARAM_ALPHA);
$adminediting = optional_param('adminedit', -1, PARAM_BOOL);
require_login(0, false);
$PAGE->set_context(context_system::instance());
$PAGE->set_url('/admin/category.php', array('category' => $category));
$PAGE->set_pagetype('admin-setting-' . $category);
$PAGE->set_pagelayout('admin');
$PAGE->navigation->clear_cache();
$adminroot = admin_get_root(); // need all settings
$settingspage = $adminroot->locate($category, true);
if (empty($settingspage) or !($settingspage instanceof admin_category)) {
throw new \moodle_exception('categoryerror', 'error', "$CFG->wwwroot/$CFG->admin/");
}
if (!($settingspage->check_access())) {
throw new \moodle_exception('accessdenied', 'admin');
}
$hassiteconfig = has_capability('moodle/site:config', $PAGE->context);
if ($hassiteconfig) {
$PAGE->add_header_action($OUTPUT->render_from_template('core_admin/header_search_input', [
'action' => new moodle_url('/admin/search.php'),
]));
}
$statusmsg = '';
$errormsg = '';
if ($data = data_submitted() and confirm_sesskey()) {
$count = admin_write_settings($data);
if (empty($adminroot->errors)) {
// No errors. Did we change any setting? If so, then indicate success.
if ($count) {
$statusmsg = get_string('changessaved');
} else {
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
}
}
} else {
$errormsg = get_string('errorwithsettings', 'admin');
$firsterror = reset($adminroot->errors);
}
$settingspage = $adminroot->locate($category, true);
}
if ($PAGE->user_allowed_editing() && $adminediting != -1) {
$USER->editing = $adminediting;
}
$buttons = null;
if ($PAGE->user_allowed_editing() && !$PAGE->theme->haseditswitch) {
$url = clone($PAGE->url);
if ($PAGE->user_is_editing()) {
$caption = get_string('blockseditoff');
$url->param('adminedit', 'off');
} else {
$caption = get_string('blocksediton');
$url->param('adminedit', 'on');
}
$buttons = $OUTPUT->single_button($url, $caption, 'get');
}
$savebutton = false;
$outputhtml = '';
foreach ($settingspage->children as $childpage) {
if ($childpage->is_hidden() || !$childpage->check_access()) {
continue;
}
if ($childpage instanceof admin_externalpage) {
$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);
}
}
if ($savebutton) {
$outputhtml .= html_writer::start_tag('div', array('class' => 'form-buttons'));
$outputhtml .= html_writer::empty_tag('input', array('class' => 'btn btn-primary form-submit', 'type' => 'submit', 'value' => get_string('savechanges','admin')));
$outputhtml .= html_writer::end_tag('div');
}
$PAGE->set_title(implode(moodle_page::TITLE_SEPARATOR, $settingspage->visiblepath));
$PAGE->set_heading($SITE->fullname);
if ($buttons) {
$PAGE->set_button($buttons);
}
echo $OUTPUT->header();
if ($errormsg !== '') {
echo $OUTPUT->notification($errormsg);
} else if ($statusmsg !== '') {
echo $OUTPUT->notification($statusmsg, 'notifysuccess');
}
echo $OUTPUT->heading(get_string('admincategory', 'admin', $settingspage->visiblename), 2);
echo html_writer::start_tag('form', array('action' => '', 'method' => 'post', 'id' => 'adminsettings'));
echo html_writer::start_tag('div');
echo html_writer::input_hidden_params(new moodle_url($PAGE->url, array('sesskey' => sesskey(), 'return' => $return)));
echo html_writer::end_tag('div');
echo html_writer::start_tag('fieldset');
echo html_writer::tag('div', '<!-- -->', array('class' => 'clearer'));
echo $outputhtml;
echo html_writer::end_tag('fieldset');
echo html_writer::end_tag('form');
// Add the form change checker.
$PAGE->requires->js_call_amd('core_form/changechecker', 'watchFormById', ['adminsettings']);
echo $OUTPUT->footer();
@@ -1,127 +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/>.
namespace core_admin\admin;
use admin_setting;
use core_plugin_manager;
use core_text;
/**
* Admin setting plugin manager.
*
* @package core_admin
* @subpackage admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_plugin_manager extends admin_setting {
/** @var core_plugin_manager The plugin manager instance */
protected core_plugin_manager $pluginmanager;
/** @var string The plugintype that this manager covers */
protected string $plugintype;
/** @var string The class of the management table to use */
protected string $tableclass;
public function __construct(
string $plugintype,
string $tableclass,
string $name,
string $visiblename,
string $description = '',
string $defaultsetting = '',
) {
$this->nosave = true;
$this->pluginmanager = core_plugin_manager::instance();
$this->plugintype = $plugintype;
$this->tableclass = $tableclass;
parent::__construct($name, $visiblename, $description, $defaultsetting);
}
/**
* Always returns true, does nothing
*
* @return true
*/
public function get_setting(): bool {
return true;
}
/**
* Always returns true, does nothing
*
* @return true
*/
public function get_defaultsetting(): bool {
return true;
}
/**
* Always returns '', does not write anything
*
* @return string Always returns ''
*/
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
public function write_setting($data): string {
// Do not write any setting.
return '';
}
/**
* Checks if $query is one of the available editors
*
* @param string $query The string to search for
* @return bool Returns true if found, false if not
*/
public function is_related($query) {
if (parent::is_related($query)) {
return true;
}
$plugins = $this->pluginmanager->get_installed_plugins($this->plugintype);
foreach (array_keys($plugins) as $plugin) {
$plugin = "{$this->plugintype}_{$plugin}";
if (str_contains($plugin, $query)) {
return true;
}
$pluginname = get_string('pluginname', $plugin);
if (strpos(core_text::strtolower($pluginname), $query) !== false) {
return true;
}
}
return false;
}
/**
* Builds the XHTML to display the control
*
* @param string $data Unused
* @param string $query
* @return string
*/
public function output_html($data, $query = ''): string {
$table = new $this->tableclass();
if (!($table instanceof \core_admin\table\plugin_management_table)) {
throw new \coding_exception("{$this->tableclass} must be an instance of \\core_admin\\table\\plugin_management_table");
}
return highlight($query, $table->get_content());
}
}
-97
View File
@@ -1,97 +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/>.
namespace core_admin\external;
use block_manager;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_single_structure;
use core_external\external_value;
/**
* Web Service to control the state of a plugin.
*
* @package core_admin
* @category external
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class set_block_protection extends external_api {
/**
* Returns description of method parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'plugin' => new external_value(PARAM_PLUGIN, 'The name of the plugin', VALUE_REQUIRED),
'state' => new external_value(PARAM_INT, 'The target state', VALUE_REQUIRED),
]);
}
/**
* Set the block protection state.
*
* @param string $plugin The name of the plugin
* @param int $state The target state
* @return null
*/
public static function execute(
string $plugin,
int $state,
): array {
[
'plugin' => $plugin,
'state' => $state,
] = self::validate_parameters(self::execute_parameters(), [
'plugin' => $plugin,
'state' => $state,
]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
[, $pluginname] = explode('_', \core_component::normalize_componentname($plugin), 2);
$displayname = get_string('pluginname', $plugin);
if ($state) {
block_manager::protect_block($pluginname);
\core\notification::add(
get_string('blockprotected', 'core_admin', $displayname),
\core\notification::SUCCESS
);
} else {
block_manager::unprotect_block($pluginname);
\core\notification::add(
get_string('blockunprotected', 'core_admin', $displayname),
\core\notification::SUCCESS
);
}
return [];
}
/**
* Describe the return structure of the external service.
*
* @return external_single_structure
*/
public static function execute_returns(): external_single_structure {
return new external_single_structure([]);
}
}
-84
View File
@@ -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/>.
namespace core_admin\external;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_single_structure;
use core_external\external_value;
/**
* Web Service to control the order of a plugin.
*
* @package core_admin
* @category external
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class set_plugin_order extends external_api {
/**
* Returns description of method parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'plugin' => new external_value(PARAM_PLUGIN, 'The name of the plugin', VALUE_REQUIRED),
'direction' => new external_value(PARAM_INT, 'The direction to move', VALUE_REQUIRED),
]);
}
/**
* Set the plugin state.
*
* @param string $plugin The name of the plugin
* @param int $direction The direction to move the plugin
* @return array
*/
public static function execute(
string $plugin,
int $direction,
): array {
[
'plugin' => $plugin,
'direction' => $direction,
] = self::validate_parameters(self::execute_parameters(), [
'plugin' => $plugin,
'direction' => $direction,
]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
[$plugintype, $pluginname] = explode('_', \core_component::normalize_componentname($plugin), 2);
$manager = \core_plugin_manager::resolve_plugininfo_class($plugintype);
$manager::change_plugin_order($pluginname, $direction);
return [];
}
/**
* Describe the return structure of the external service.
*
* @return external_single_structure
*/
public static function execute_returns(): external_single_structure {
return new external_single_structure([]);
}
}
-98
View File
@@ -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/>.
namespace core_admin\external;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_single_structure;
use core_external\external_value;
/**
* Web Service to control the state of a plugin.
*
* @package core_admin
* @category external
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class set_plugin_state extends external_api {
/**
* Returns description of method parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'plugin' => new external_value(PARAM_PLUGIN, 'The name of the plugin', VALUE_REQUIRED),
'state' => new external_value(PARAM_INT, 'The target state', VALUE_REQUIRED),
]);
}
/**
* Set the plugin state.
*
* @param string $plugin The name of the plugin
* @param int $state The target state
* @return null
*/
public static function execute(
string $plugin,
int $state,
): array {
[
'plugin' => $plugin,
'state' => $state,
] = self::validate_parameters(self::execute_parameters(), [
'plugin' => $plugin,
'state' => $state,
]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
[$plugintype, $pluginname] = explode('_', \core_component::normalize_componentname($plugin), 2);
$manager = \core_plugin_manager::resolve_plugininfo_class($plugintype);
$displayname = get_string('pluginname', $plugin);
if ($manager::enable_plugin($pluginname, $state)) {
if (!empty($state)) {
\core\notification::add(
get_string('plugin_enabled', 'core_admin', $displayname),
\core\notification::SUCCESS
);
} else {
\core\notification::add(
get_string('plugin_disabled', 'core_admin', $displayname),
\core\notification::SUCCESS
);
}
}
return [];
}
/**
* Describe the return structure of the external service.
*
* @return external_single_structure
*/
public static function execute_returns(): external_single_structure {
return new external_single_structure([]);
}
}
-76
View File
@@ -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/>.
/**
* Form for selective purging of caches.
*
* @package core
* @copyright 2018 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\form;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir.'/formslib.php');
/**
* Form for selecting which caches to purge on admin/purgecaches.php
*
* @package core
* @copyright 2018 The Open University
* @author Mark Johnson <mark.johnson@open.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class purge_caches extends \moodleform {
/**
* Define a "Purge all caches" button, and a fieldset with checkboxes for selectively purging separate caches.
*/
public function definition() {
$mform = $this->_form;
$mform->addElement('hidden', 'returnurl', $this->_customdata['returnurl']);
$mform->setType('returnurl', PARAM_LOCALURL);
$mform->addElement('submit', 'all', get_string('purgecaches', 'admin'));
$mform->addElement('header', 'purgecacheheader', get_string('purgeselectedcaches', 'admin'));
$checkboxes = [
$mform->createElement('advcheckbox', 'theme', '', get_string('purgethemecache', 'admin')),
$mform->createElement('advcheckbox', 'lang', '', get_string('purgelangcache', 'admin')),
$mform->createElement('advcheckbox', 'js', '', get_string('purgejscache', 'admin')),
$mform->createElement('advcheckbox', 'template', '', get_string('purgetemplates', 'admin')),
$mform->createElement('advcheckbox', 'filter', '', get_string('purgefiltercache', 'admin')),
$mform->createElement('advcheckbox', 'muc', '', get_string('purgemuc', 'admin')),
$mform->createElement('advcheckbox', 'other', '', get_string('purgeothercaches', 'admin'))
];
$mform->addGroup($checkboxes, 'purgeselectedoptions');
$mform->addElement('submit', 'purgeselectedcaches', get_string('purgeselectedcaches', 'admin'));
}
/**
* If the "Purge selected caches" button was pressed, ensure at least one cache was selected.
*
* @param array $data
* @param array $files
* @return array Error messages
*/
public function validation($data, $files) {
$errors = [];
if (isset($data['purgeselectedcaches']) && empty(array_filter($data['purgeselectedoptions']))) {
$errors['purgeselectedoptions'] = get_string('purgecachesnoneselected', 'admin');
}
return $errors;
}
}
@@ -1,92 +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/>.
/**
* Testing outgoing mail configuration form
*
* @package core
* @copyright 2019 Victor Deniz <victor@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\form;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir.'/formslib.php');
/**
* Test mail form
*
* @package core
* @copyright 2019 Victor Deniz <victor@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class testoutgoingmailconf_form extends \moodleform {
/**
* Add elements to form
*/
public function definition() {
$mform = $this->_form;
// Recipient.
$options = ['maxlength' => '100', 'size' => '25', 'autocomplete' => 'email'];
$mform->addElement('text', 'recipient', get_string('testoutgoingmailconf_toemail', 'admin'), $options);
$mform->setType('recipient', PARAM_EMAIL);
$mform->addRule('recipient', get_string('required'), 'required');
// From user.
$options = ['maxlength' => '100', 'size' => '25'];
$mform->addElement('text', 'from', get_string('testoutgoingmailconf_fromemail', 'admin'), $options);
$mform->setType('from', PARAM_TEXT);
$mform->addHelpButton('from', 'testoutgoingmailconf_fromemail', 'admin');
// Additional subject text.
$options = ['size' => '25'];
$mform->addElement('text', 'additionalsubject', get_string('testoutgoingmailconf_subjectadditional', 'admin'), $options);
$mform->setType('additionalsubject', PARAM_TEXT);
$buttonarray = array();
$buttonarray[] = $mform->createElement('submit', 'send', get_string('testoutgoingmailconf_sendtest', 'admin'));
$buttonarray[] = $mform->createElement('cancel');
$mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
$mform->closeHeaderBefore('buttonar');
}
/**
* Validate Form field, should be a valid email format or a username that matches with a Moodle user.
*
* @param array $data
* @param array $files
* @return array
* @throws \dml_exception|\coding_exception
*/
public function validation($data, $files): array {
$errors = parent::validation($data, $files);
if (isset($data['from']) && $data['from']) {
$userfrom = \core_user::get_user_by_username($data['from']);
if (!$userfrom && !validate_email($data['from'])) {
$errors['from'] = get_string('testoutgoingmailconf_fromemail_invalid', 'admin');
}
}
return $errors;
}
}
@@ -1,71 +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/>.
/**
* External admin page class that allows a callback to be provided to determine whether page can be accessed
*
* @package core_admin
* @copyright 2019 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\externalpage;
use admin_externalpage;
defined('MOODLE_INTERNAL') || die();
require_once("{$CFG->libdir}/adminlib.php");
/**
* Admin externalpage class
*
* @package core_admin
* @copyright 2019 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class accesscallback extends admin_externalpage {
/** @var callable $accesscheckcallback */
protected $accesscheckcallback;
/**
* Class constructor
*
* @param string $name
* @param string $visiblename
* @param string $url
* @param callable $accesscheckcallback The callback method that will be executed to check whether user has access to
* this page. The setting instance ($this) is passed as an argument to the callback. Should return boolean value
* @param bool $hidden
*/
public function __construct(string $name, string $visiblename, string $url, callable $accesscheckcallback,
bool $hidden = false) {
$this->accesscheckcallback = $accesscheckcallback;
parent::__construct($name, $visiblename, $url, [], $hidden);
}
/**
* Determines if the current user has access to this external page based on access callback
*
* @return bool
*/
public function check_access() {
return ($this->accesscheckcallback)($this);
}
}
@@ -1,206 +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/>.
/**
* Auto complete admin setting.
*
* @package core_admin
* @copyright 2020 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/adminlib.php');
/**
* Auto complete setting class.
*
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2020 The Open University
*/
class autocomplete extends \admin_setting_configmultiselect {
/** @var boolean Should we allow typing new entries to the field? */
protected $tags = false;
/** @var string Name of an AMD module to send/process ajax requests. */
protected $ajax = '';
/** @var string Placeholder text for an empty list. */
protected $placeholder = '';
/** @var bool Whether the search has to be case-sensitive. */
protected $casesensitive = false;
/** @var bool Show suggestions by default - but this can be turned off. */
protected $showsuggestions = true;
/** @var string String that is shown when there are no selections. */
protected $noselectionstring = '';
/** @var string Delimiter to store values in database. */
protected $delimiter = ',';
/** @var string Should be multiple choices? */
protected $multiple = true;
/** @var string The link to manage choices. */
protected $manageurl = true;
/** @var string The text to display in manage link. */
protected $managetext = true;
/**
* Constructor
*
* @param string $name unique ascii name, either 'mysetting' for settings that in config, or 'myplugin/mysetting'
* for ones in config_plugins.
* @param string $visiblename localised
* @param string $description long localised info
* @param array $defaultsetting array of selected items
* @param array $choices options for autocomplete field
* @param array $attributes settings for autocomplete field
*/
public function __construct($name, $visiblename, $description, $defaultsetting, $choices, $attributes = null) {
if ($attributes === null) {
$attributes = [];
}
$this->placeholder = get_string('search');
$this->noselectionstring = get_string('noselection', 'form');
$defaultattributes = [
'tags',
'showsuggestions',
'placeholder',
'noselectionstring',
'ajax',
'casesensitive',
'delimiter',
'multiple',
'manageurl',
'managetext'
];
foreach ($defaultattributes as $attributename) {
if (isset($attributes[$attributename])) {
$this->$attributename = $attributes[$attributename];
}
}
parent::__construct($name, $visiblename, $description, $defaultsetting, $choices);
}
/**
* Returns the select setting(s)
*
* @return mixed null or array. Null if no settings else array of setting(s)
*/
public function get_setting() {
$result = $this->config_read($this->name);
if (is_null($result)) {
return null;
}
if ($result === '') {
return [];
}
return explode($this->delimiter, $result);
}
/**
* Saves setting(s) provided through $data
*
* @param array $data
*/
public function write_setting($data) {
if (!is_array($data)) {
return ''; // Ignore it.
}
if (!$this->load_choices() || empty($this->choices)) {
return '';
}
unset($data['xxxxx']);
$save = [];
foreach ($data as $value) {
if (!array_key_exists($value, $this->choices)) {
continue; // Ignore it.
}
$save[] = $value;
}
return ($this->config_write($this->name, implode($this->delimiter, $save)) ? '' : get_string('errorsetting', 'admin'));
}
/**
* Returns XHTML autocomplete field
*
* @param array $data Array of values to select by default
* @param string $query
* @return string XHTML autocomplete field
*/
public function output_html($data, $query = '') {
global $OUTPUT;
if (!$this->load_choices() or empty($this->choices)) {
return '';
}
$default = $this->get_defaultsetting();
if (empty($default)) {
$default = [];
}
if (is_null($data)) {
$data = [];
}
$context = [
'id' => $this->get_id(),
'name' => $this->get_full_name()
];
$defaults = [];
$options = [];
$template = 'core_admin/local/settings/autocomplete';
foreach ($this->choices as $value => $name) {
if (in_array($value, $default)) {
$defaults[] = $name;
}
$options[] = [
'value' => $value,
'text' => $name,
'selected' => in_array($value, $data),
'disabled' => false
];
}
$context['options'] = $options;
$context['tags'] = $this->tags;
$context['placeholder'] = $this->placeholder;
$context['casesensitive'] = $this->casesensitive;
$context['multiple'] = $this->multiple;
$context['showsuggestions'] = $this->showsuggestions;
$context['manageurl'] = $this->manageurl;
$context['managetext'] = $this->managetext;
if (is_null($default)) {
$defaultinfo = null;
} if (!empty($defaults)) {
$defaultinfo = implode(', ', $defaults);
} else {
$defaultinfo = get_string('none');
}
$element = $OUTPUT->render_from_template($template, $context);
return format_admin_setting($this, $this->visiblename, $element, $this->description, true, '', $defaultinfo, $query);
}
}
-197
View File
@@ -1,197 +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/>.
/**
* File size admin setting.
*
* @package core_admin
* @copyright 2019 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/adminlib.php');
/**
* An admin setting to support entering and displaying of file sizes in Bytes, KB, MB or GB.
*
* @copyright 2019 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class filesize extends \admin_setting {
/** @var int The byte unit. Number of bytes in a byte */
const UNIT_B = 1;
/** @var int The kilobyte unit (number of bytes in a kilobyte) */
const UNIT_KB = 1024;
/** @var int The megabyte unit (number of bytes in a megabyte) */
const UNIT_MB = 1048576;
/** @var int The gigabyte unit (number of bytes in a gigabyte) */
const UNIT_GB = 1073741824;
/** @var int default size unit */
protected $defaultunit;
/**
* Constructor
*
* @param string $name unique ascii name, either 'mysetting' for settings that in config,
* or 'myplugin/mysetting' for ones in config_plugins.
* @param string $visiblename localised name
* @param string $description localised long description
* @param int|null $defaultvalue Value of the settings in bytes
* @param int|null $defaultunit GB, MB, etc. (in bytes)
*/
public function __construct(string $name, string $visiblename, string $description,
int $defaultvalue = null, int $defaultunit = null) {
$defaultsetting = self::parse_bytes($defaultvalue);
if ($defaultunit && array_key_exists($defaultunit, self::get_units())) {
$this->defaultunit = $defaultunit;
} else {
$this->defaultunit = self::UNIT_MB;
}
parent::__construct($name, $visiblename, $description, $defaultsetting);
}
/**
* Returns selectable units.
*
* @return array
*/
protected static function get_units(): array {
return [
self::UNIT_GB => get_string('sizegb'),
self::UNIT_MB => get_string('sizemb'),
self::UNIT_KB => get_string('sizekb'),
self::UNIT_B => get_string('sizeb'),
];
}
/**
* Converts bytes to some more user friendly string.
*
* @param int $bytes The number of bytes we want to convert from
* @return string
*/
protected static function get_size_text(int $bytes): string {
if (empty($bytes)) {
return get_string('none');
}
return display_size($bytes, 0);
}
/**
* Finds suitable units for given file size.
*
* @param int $bytes The number of bytes
* @return array Parsed file size in the format of ['v' => value, 'u' => unit]
*/
protected static function parse_bytes(int $bytes): array {
foreach (self::get_units() as $unit => $unused) {
if ($bytes % $unit === 0) {
return ['v' => (int)($bytes / $unit), 'u' => $unit];
}
}
return ['v' => (int)$bytes, 'u' => self::UNIT_B];
}
/**
* Get the selected file size as array.
*
* @return array|null An array containing 'v' => xx, 'u' => xx, or null if not set
*/
public function get_setting(): ?array {
$bytes = $this->config_read($this->name);
if (is_null($bytes)) {
return null;
}
$bytes = intval($bytes);
return self::parse_bytes($bytes);
}
/**
* Store the file size as bytes.
*
* @param array $data Must be form 'h' => xx, 'm' => xx
* @return string The error string if any
*/
public function write_setting($data): string {
if (!is_array($data)) {
return '';
}
if (!is_numeric($data['v']) || $data['v'] < 0) {
return get_string('errorsetting', 'admin');
}
// Calculate size in bytes, ensuring we don't overflow PHP_INT_MAX.
$bytes = $data['v'] * $data['u'];
$result = (is_int($bytes) && $this->config_write($this->name, $bytes));
return ($result ? '' : get_string('errorsetting', 'admin'));
}
/**
* Returns file size text+select fields.
*
* @param array $data The current setting value. Must be form 'v' => xx, 'u' => xx.
* @param string $query Admin search query to be highlighted.
* @return string File size text+select fields and wrapping div(s).
*/
public function output_html($data, $query = ''): string {
global $OUTPUT;
$default = $this->get_defaultsetting();
if (is_number($default)) {
$defaultinfo = self::get_size_text($default);
} else if (is_array($default)) {
$defaultinfo = self::get_size_text($default['v'] * $default['u']);
} else {
$defaultinfo = null;
}
$inputid = $this->get_id() . 'v';
$units = self::get_units();
$defaultunit = $this->defaultunit;
$context = (object) [
'id' => $this->get_id(),
'name' => $this->get_full_name(),
'value' => $data['v'],
'readonly' => $this->is_readonly(),
'options' => array_map(function($unit, $title) use ($data, $defaultunit) {
return [
'value' => $unit,
'name' => $title,
'selected' => ($data['v'] == 0 && $unit == $defaultunit) || $unit == $data['u']
];
}, array_keys($units), $units)
];
$element = $OUTPUT->render_from_template('core_admin/setting_configfilesize', $context);
return format_admin_setting($this, $this->visiblename, $element, $this->description, $inputid, '', $defaultinfo, $query);
}
}
@@ -1,37 +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/>.
/**
* A settings page which can be viewed with a link directly.
*
* @package core_admin
* @copyright 2021 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
use moodle_url;
interface linkable_settings_page {
/**
* Get the URL to view this settings page.
*
* @return moodle_url
*/
public function get_settings_page_url(): moodle_url;
}
@@ -1,74 +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/>.
/**
* Payment gateway admin setting.
*
* @package core_admin
* @copyright 2020 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
/**
* Generic class for managing plugins in a table that allows re-ordering and enable/disable of each plugin.
*/
class manage_payment_gateway_plugins extends \admin_setting_manage_plugins {
/**
* Get the admin settings section title (use get_string).
*
* @return string
*/
public function get_section_title() {
return get_string('type_paygw_plural', 'plugin');
}
/**
* Get the type of plugin to manage.
*
* @return string
*/
public function get_plugin_type() {
return 'paygw';
}
/**
* Get the name of the second column.
*
* @return string
*/
public function get_info_column_name() {
return get_string('supportedcurrencies', 'core_payment');
}
/**
* Get the type of plugin to manage.
*
* @param plugininfo The plugin info class.
* @return string
*/
public function get_info_column($plugininfo) {
$codes = $plugininfo->get_supported_currencies();
$currencies = [];
foreach ($codes as $c) {
$currencies[$c] = new \lang_string($c, 'core_currencies');
}
return implode(get_string('listsep', 'langconfig') . ' ', $currencies);
}
}
@@ -1,121 +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/>.
/**
* Admin setting to show current scheduled task's status.
*
* @package core
* @copyright 2021 Universitat Rovira i Virgili
* @author Jordi Pujol-Ahulló <jpahullo@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/moodlelib.php');
use admin_setting_description;
use core\task\manager;
use core\task\scheduled_task;
use html_writer;
use lang_string;
use moodle_url;
use stdClass;
/**
* This admin setting tells whether a given scheduled task is enabled, providing a link to its configuration page.
*
* The goal of this setting is to help contextualizing the configuration settings with related scheduled task status,
* providing the big picture of that part of the system.
*
* @package core
* @copyright 2021 Universitat Rovira i Virgili
* @author Jordi Pujol-Ahulló <jpahullo@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class setting_scheduled_task_status extends admin_setting_description {
/**
* @var string fully qualified class name of a scheduled task.
*/
private $classname;
/**
* @var string additional text to append to the description.
*/
private $extradescription;
/**
* setting_scheduled_task_status constructor.
* @param string $name unique setting name.
* @param string $scheduledtaskclassname full classpath class name of the scheduled task.
* @param string $extradescription extra detail to append to the scheduled task status to add context in the setting
* page.
*/
public function __construct(string $name, string $scheduledtaskclassname, string $extradescription = '') {
$visiblename = new lang_string('task_status', 'admin');
$this->classname = $scheduledtaskclassname;
$this->extradescription = $extradescription;
parent::__construct($name, $visiblename, '');
}
/**
* Calculates lazily the content of the description.
* @param mixed $data nothing expected in this case.
* @param string $query nothing expected in this case.
* @return string the HTML content to print for this setting.
*/
public function output_html($data, $query = ''): string {
if (empty($this->description)) {
$this->description = $this->get_task_description();
}
return parent::output_html($data, $query);
}
/**
* Returns the HTML to print as the description.
* @return string description to be printed.
*/
private function get_task_description(): string {
$task = manager::get_scheduled_task($this->classname);
if ($task->is_enabled()) {
$taskenabled = get_string('enabled', 'admin');
} else {
$taskenabled = get_string('disabled', 'admin');
}
$taskenabled = strtolower($taskenabled);
$gotourl = new moodle_url(
'/admin/tool/task/scheduledtasks.php',
[],
scheduled_task::get_html_id($this->classname)
);
if (!empty($this->extradescription)) {
$this->extradescription = '<br />' . $this->extradescription;
}
$taskdetail = new stdClass();
$taskdetail->class = $this->classname;
$taskdetail->name = $task->get_name();
$taskdetail->status = $taskenabled;
$taskdetail->gotourl = $gotourl->out(false);
$taskdetail->extradescription = $this->extradescription;
return html_writer::tag('p', get_string('task_status_desc', 'admin', $taskdetail));
}
}
-41
View File
@@ -1,41 +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/>.
/**
* Privacy Subsystem implementation for core_admin.
*
* @package core_admin
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for core_admin implementing null_provider.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
@@ -1,117 +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/>.
declare(strict_types=1);
namespace core_admin\reportbuilder\datasource;
use core_admin\reportbuilder\local\entities\task_log;
use core_reportbuilder\datasource;
use core_reportbuilder\local\entities\user;
use core_reportbuilder\local\filters\select;
/**
* Task logs datasource
*
* @package core_admin
* @copyright 2022 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class task_logs extends datasource {
/**
* Return user friendly name of the report source
*
* @return string
*/
public static function get_name(): string {
return get_string('tasklogs', 'core_admin');
}
/**
* Initialise report
*/
protected function initialise(): void {
$tasklogentity = new task_log();
$tasklogalias = $tasklogentity->get_table_alias('task_log');
$this->set_main_table('task_log', $tasklogalias);
$this->add_entity($tasklogentity);
// Join the user entity to represent the associated user.
$userentity = new user();
$useralias = $userentity->get_table_alias('user');
$this->add_entity($userentity->add_join("
LEFT JOIN {user} {$useralias}
ON {$useralias}.id = {$tasklogalias}.userid")
);
// Add report elements from each of the entities we added to the report.
$this->add_all_from_entities();
}
/**
* Return the columns that will be added to the report upon creation
*
* @return string[]
*/
public function get_default_columns(): array {
return [
'task_log:name',
'task_log:starttime',
'task_log:duration',
'task_log:result',
];
}
/**
* Return the filters that will be added to the report upon creation
*
* @return string[]
*/
public function get_default_filters(): array {
return [
'task_log:timestart',
'task_log:result',
];
}
/**
* Return the conditions that will be added to the report upon creation
*
* @return string[]
*/
public function get_default_conditions(): array {
return [
'task_log:type',
'task_log:timestart',
'task_log:result',
];
}
/**
* Return the condition values that will be set for the report upon creation
*
* @return array
*/
public function get_default_condition_values(): array {
return [
'task_log:type_operator' => select::EQUAL_TO,
'task_log:type_value' => \core\task\database_logger::TYPE_SCHEDULED,
];
}
}
@@ -1,427 +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/>.
namespace core_admin\reportbuilder\local\entities;
use core_reportbuilder\local\filters\date;
use core_reportbuilder\local\filters\duration;
use core_reportbuilder\local\filters\number;
use core_reportbuilder\local\filters\select;
use core_reportbuilder\local\filters\text;
use core_reportbuilder\local\filters\autocomplete;
use core_reportbuilder\local\helpers\format;
use lang_string;
use core_reportbuilder\local\entities\base;
use core_reportbuilder\local\report\column;
use core_reportbuilder\local\report\filter;
use stdClass;
use core_collator;
/**
* Task log entity class implementation
*
* @package core_admin
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class task_log extends base {
/** @var int Result success */
protected const SUCCESS = 0;
/** @var int Result failed */
protected const FAILED = 1;
/**
* Database tables that this entity uses and their default aliases
*
* @return array
*/
protected function get_default_table_aliases(): array {
return ['task_log' => 'tl'];
}
/**
* The default title for this entity in the list of columns/conditions/filters in the report builder
*
* @return lang_string
*/
protected function get_default_entity_title(): lang_string {
return new lang_string('entitytasklog', 'admin');
}
/**
* Initialise the entity
*
* @return base
*/
public function initialise(): base {
$columns = $this->get_all_columns();
foreach ($columns as $column) {
$this->add_column($column);
}
// All the filters defined by the entity can also be used as conditions.
$filters = $this->get_all_filters();
foreach ($filters as $filter) {
$this
->add_filter($filter)
->add_condition($filter);
}
return $this;
}
/**
* Returns list of all available columns
*
* @return column[]
*/
protected function get_all_columns(): array {
global $DB;
$tablealias = $this->get_table_alias('task_log');
// Name column.
$columns[] = (new column(
'name',
new lang_string('name'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("$tablealias.classname")
->set_is_sortable(true)
->add_callback(static function(string $classname): string {
$output = '';
if (class_exists($classname)) {
$task = new $classname;
if ($task instanceof \core\task\task_base) {
$output = $task->get_name();
}
}
$output .= \html_writer::tag('div', "\\{$classname}", [
'class' => 'small text-muted',
]);
return $output;
});
// Component column.
$columns[] = (new column(
'component',
new lang_string('plugin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$tablealias}.component")
->set_is_sortable(true);
// Type column.
$columns[] = (new column(
'type',
new lang_string('tasktype', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$tablealias}.type")
->set_is_sortable(true)
->add_callback(static function($value): string {
if (\core\task\database_logger::TYPE_SCHEDULED === (int) $value) {
return get_string('task_type:scheduled', 'admin');
}
return get_string('task_type:adhoc', 'admin');
});
// Start time column.
$columns[] = (new column(
'starttime',
new lang_string('task_starttime', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TIMESTAMP)
->add_field("{$tablealias}.timestart")
->set_is_sortable(true)
->add_callback([format::class, 'userdate'], get_string('strftimedatetimeshortaccurate', 'core_langconfig'));
// End time column.
$columns[] = (new column(
'endtime',
new lang_string('task_endtime', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TIMESTAMP)
->add_field("{$tablealias}.timeend")
->set_is_sortable(true)
->add_callback([format::class, 'userdate'], get_string('strftimedatetimeshortaccurate', 'core_langconfig'));
// Duration column.
$columns[] = (new column(
'duration',
new lang_string('task_duration', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_FLOAT)
->add_field("{$tablealias}.timeend - {$tablealias}.timestart", 'duration')
->set_is_sortable(true)
->add_callback(static function(float $value): string {
$duration = round($value, 2);
if (empty($duration)) {
// The format_time function returns 'now' when the difference is exactly 0.
// Note: format_time performs concatenation in exactly this fashion so we should do this for consistency.
return '0 ' . get_string('secs', 'moodle');
}
return format_time($duration);
});
// Hostname column.
$columns[] = (new column(
'hostname',
new lang_string('hostname', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("$tablealias.hostname")
->set_is_sortable(true);
// PID column.
$columns[] = (new column(
'pid',
new lang_string('pid', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_field("{$tablealias}.pid")
->set_is_sortable(true)
// Although this is an integer column, it doesn't make sense to perform numeric aggregation on it.
->set_disabled_aggregation(['avg', 'count', 'countdistinct', 'max', 'min', 'sum']);
// Database column.
$columns[] = (new column(
'database',
new lang_string('task_dbstats', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbreads, {$tablealias}.dbwrites")
->set_is_sortable(true, ["{$tablealias}.dbreads", "{$tablealias}.dbwrites"])
->add_callback(static function(int $value, stdClass $row): string {
$output = '';
$output .= \html_writer::div(get_string('task_stats:dbreads', 'admin', $row->dbreads));
$output .= \html_writer::div(get_string('task_stats:dbwrites', 'admin', $row->dbwrites));
return $output;
})
// Although this is an integer column, it doesn't make sense to perform numeric aggregation on it.
->set_disabled_aggregation(['avg', 'count', 'countdistinct', 'max', 'min', 'sum']);
// Database reads column.
$columns[] = (new column(
'dbreads',
new lang_string('task_dbreads', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbreads")
->set_is_sortable(true);
// Database writes column.
$columns[] = (new column(
'dbwrites',
new lang_string('task_dbwrites', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbwrites")
->set_is_sortable(true);
// Result column.
$columns[] = (new column(
'result',
new lang_string('task_result', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_BOOLEAN)
// For accurate aggregation, we need to return boolean success = true by xor'ing the field value.
->add_field($DB->sql_bitxor("{$tablealias}.result", 1), 'success')
->set_is_sortable(true)
->add_callback(static function(bool $success): string {
if (!$success) {
return get_string('task_result:failed', 'admin');
}
return get_string('success');
});
return $columns;
}
/**
* Return list of all available filters
*
* @return filter[]
*/
protected function get_all_filters(): array {
global $DB;
$tablealias = $this->get_table_alias('task_log');
// Name filter (Filter by classname).
$filters[] = (new filter(
autocomplete::class,
'name',
new lang_string('classname', 'tool_task'),
$this->get_entity_name(),
"{$tablealias}.classname"
))
->add_joins($this->get_joins())
->set_options_callback(static function(): array {
global $DB;
$classnames = $DB->get_fieldset_sql('SELECT DISTINCT classname FROM {task_log} ORDER BY classname ASC');
$options = [];
foreach ($classnames as $classname) {
if (class_exists($classname)) {
$task = new $classname;
$options[$classname] = $task->get_name();
}
}
core_collator::asort($options);
return $options;
});
// Component filter.
$filters[] = (new filter(
text::class,
'component',
new lang_string('plugin'),
$this->get_entity_name(),
"{$tablealias}.component"
))
->add_joins($this->get_joins());
// Type filter.
$filters[] = (new filter(
select::class,
'type',
new lang_string('tasktype', 'admin'),
$this->get_entity_name(),
"{$tablealias}.type"
))
->add_joins($this->get_joins())
->set_options([
\core\task\database_logger::TYPE_ADHOC => new lang_string('task_type:adhoc', 'admin'),
\core\task\database_logger::TYPE_SCHEDULED => new lang_string('task_type:scheduled', 'admin'),
]);
// Output filter (Filter by task output).
$filters[] = (new filter(
text::class,
'output',
new lang_string('task_logoutput', 'admin'),
$this->get_entity_name(),
$DB->sql_cast_to_char("{$tablealias}.output")
))
->add_joins($this->get_joins());
// Start time filter.
$filters[] = (new filter(
date::class,
'timestart',
new lang_string('task_starttime', 'admin'),
$this->get_entity_name(),
"{$tablealias}.timestart"
))
->add_joins($this->get_joins())
->set_limited_operators([
date::DATE_ANY,
date::DATE_RANGE,
date::DATE_PREVIOUS,
date::DATE_CURRENT,
]);
// End time.
$filters[] = (new filter(
date::class,
'timeend',
new lang_string('task_endtime', 'admin'),
$this->get_entity_name(),
"{$tablealias}.timeend"
))
->add_joins($this->get_joins())
->set_limited_operators([
date::DATE_ANY,
date::DATE_RANGE,
date::DATE_PREVIOUS,
date::DATE_CURRENT,
]);
// Duration filter.
$filters[] = (new filter(
duration::class,
'duration',
new lang_string('task_duration', 'admin'),
$this->get_entity_name(),
"{$tablealias}.timeend - {$tablealias}.timestart"
))
->add_joins($this->get_joins());
// Database reads.
$filters[] = (new filter(
number::class,
'dbreads',
new lang_string('task_dbreads', 'admin'),
$this->get_entity_name(),
"{$tablealias}.dbreads"
))
->add_joins($this->get_joins());
// Database writes.
$filters[] = (new filter(
number::class,
'dbwrites',
new lang_string('task_dbwrites', 'admin'),
$this->get_entity_name(),
"{$tablealias}.dbwrites"
))
->add_joins($this->get_joins());
// Result filter.
$filters[] = (new filter(
select::class,
'result',
new lang_string('task_result', 'admin'),
$this->get_entity_name(),
"{$tablealias}.result"
))
->add_joins($this->get_joins())
->set_options([
self::SUCCESS => get_string('success'),
self::FAILED => get_string('task_result:failed', 'admin'),
]);
return $filters;
}
}
@@ -1,159 +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/>.
namespace core_admin\reportbuilder\local\systemreports;
use context_system;
use core_admin\reportbuilder\local\entities\task_log;
use core_reportbuilder\local\entities\user;
use core_reportbuilder\local\report\action;
use lang_string;
use moodle_url;
use pix_icon;
use core_reportbuilder\system_report;
/**
* Task logs system report class implementation
*
* @package core_admin
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class task_logs extends system_report {
/**
* Initialise report, we need to set the main table, load our entities and set columns/filters
*/
protected function initialise(): void {
// Our main entity, it contains all of the column definitions that we need.
$entitymain = new task_log();
$entitymainalias = $entitymain->get_table_alias('task_log');
$this->set_main_table('task_log', $entitymainalias);
$this->add_entity($entitymain);
// Any columns required by actions should be defined here to ensure they're always available.
$this->add_base_fields("{$entitymainalias}.id");
// We can join the "user" entity to our "main" entity and use the fullname column from the user entity.
$entityuser = new user();
$entituseralias = $entityuser->get_table_alias('user');
$this->add_entity($entityuser->add_join(
"LEFT JOIN {user} {$entituseralias} ON {$entituseralias}.id = {$entitymainalias}.userid"
));
// Now we can call our helper methods to add the content we want to include in the report.
$this->add_columns();
$this->add_filters();
$this->add_actions();
// Set if report can be downloaded.
$this->set_downloadable(true, get_string('tasklogs', 'admin'));
}
/**
* Validates access to view this report
*
* @return bool
*/
protected function can_view(): bool {
return has_capability('moodle/site:config', context_system::instance());
}
/**
* Get the visible name of the report
*
* @return string
*/
public static function get_name(): string {
return get_string('entitytasklog', 'admin');
}
/**
* Adds the columns we want to display in the report
*
* They are all provided by the entities we previously added in the {@see initialise} method, referencing each by their
* unique identifier
*/
public function add_columns(): void {
$columns = [
'task_log:name',
'task_log:type',
'user:fullname',
'task_log:starttime',
'task_log:duration',
'task_log:hostname',
'task_log:pid',
'task_log:database',
'task_log:result',
];
$this->add_columns_from_entities($columns);
// It's possible to override the display name of a column, if you don't want to use the value provided by the entity.
if ($column = $this->get_column('user:fullname')) {
$column->set_title(new lang_string('user', 'admin'));
}
// It's possible to set a default initial sort direction for one column.
$this->set_initial_sort_column('task_log:starttime', SORT_DESC);
}
/**
* Adds the filters we want to display in the report
*
* They are all provided by the entities we previously added in the {@see initialise} method, referencing each by their
* unique identifier
*/
protected function add_filters(): void {
$filters = [
'task_log:name',
'task_log:type',
'task_log:output',
'task_log:result',
'task_log:timestart',
'task_log:duration',
];
$this->add_filters_from_entities($filters);
}
/**
* Add the system report actions. An extra column will be appended to each row, containing all actions added here
*
* Note the use of ":id" placeholder which will be substituted according to actual values in the row
*/
protected function add_actions(): void {
// Action to view individual task log on a popup window.
$this->add_action((new action(
new moodle_url('/admin/tasklogs.php', ['logid' => ':id']),
new pix_icon('e/search', ''),
[],
true,
new lang_string('view'),
)));
// Action to download individual task log.
$this->add_action((new action(
new moodle_url('/admin/tasklogs.php', ['logid' => ':id', 'download' => true]),
new pix_icon('t/download', ''),
[],
false,
new lang_string('download'),
)));
}
}
@@ -1,118 +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/>.
namespace core_admin\table;
use core_plugin_manager;
use dml_exception;
use html_writer;
use moodle_url;
use stdClass;
/**
* Activity Module admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class activity_management_table extends plugin_management_table {
public function setup() {
$this->set_attribute('id', 'modules');
$this->set_attribute('class', 'admintable generaltable');
parent::setup();
}
protected function get_table_id(): string {
return 'module-administration-table';
}
protected function get_plugintype(): string {
return 'mod';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/modules.php')
);
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/modules.php', $params);
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
return array_merge(
array_slice($columns, 0, 1, true),
['activities' => get_string('activities')],
array_slice($columns, 1, null, true),
);
}
protected function col_name(stdClass $row): string {
global $OUTPUT;
$status = $row->plugininfo->get_status();
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
return html_writer::span(
get_string('pluginmissingfromdisk', 'core', $row->plugininfo),
'notifyproblem'
);
}
return html_writer::span(
html_writer::img(
$OUTPUT->image_url('monologo', $row->plugininfo->name),
'',
[
'class' => 'icon',
],
) . get_string('modulename', $row->plugininfo->name)
);
}
/**
* Show the number of activities present, with a link to courses containing activity if relevant.
*
* @param mixed $row
* @return string
*/
protected function col_activities(stdClass $row): string {
global $DB, $OUTPUT;
try {
$count = $DB->count_records_select($row->plugininfo->name, "course <> 0");
} catch (dml_exception $e) {
$count = -1;
}
if ($count > 0) {
return $OUTPUT->action_link(
new moodle_url('/course/search.php', [
'modulelist' => $row->plugininfo->name,
]),
$count,
null,
['title' => get_string('showmodulecourse')]
);
} else if ($count < 0) {
return get_string('error');
} else {
return $count;
}
}
}
@@ -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/>.
namespace core_admin\table;
use html_writer;
use moodle_url;
use stdClass;
/**
* Tiny admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class block_management_table extends \core_admin\table\plugin_management_table {
/** @var plugininfo[] A list of blocks which cannot be deleted */
protected array $undeletableblocktypes;
/** @var stdClass[] A list of basic block data */
protected array $blockdata;
/** @var array<string,int> A list of course counts */
protected array $courseblocks;
public function __construct() {
global $DB;
parent::__construct();
$this->undeletableblocktypes = \block_manager::get_undeletable_block_types();
$sql = 'SELECT b.name,
b.id,
COUNT(DISTINCT binst.id) as totalcount
FROM {block} b
LEFT JOIN {block_instances} binst ON binst.blockname = b.name
GROUP BY b.id,
b.name
ORDER BY b.name ASC';
$this->blockdata = $DB->get_records_sql($sql);
$sql = "SELECT blockname
FROM {block_instances}
WHERE pagetypepattern = 'course-view-*'
GROUP BY blockname";
$this->courseblocks = $DB->get_records_sql($sql);
}
protected function get_plugintype(): string {
return 'block';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/blocks.php')
);
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/blocks.php', $params);
}
protected function get_table_js_module(): string {
return 'core_admin/block_management_table';
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
return array_merge(
array_slice($columns, 0, 1, true),
['instances' => get_string('blockinstances', 'admin')],
array_slice($columns, 1, 2, true),
['protect' => get_string('blockprotect', 'admin')],
array_slice($columns, 3, null, true),
);
}
protected function get_columns_with_help(): array {
return [
'protect' => new \help_icon('blockprotect', 'admin'),
];
}
/**
* Render the instances column
* @param stdClass $row
* @return string
*/
protected function col_instances(stdClass $row): string {
$blockdata = $this->blockdata[$row->plugininfo->name];
if (array_key_exists($blockdata->name, $this->courseblocks)) {
return html_writer::link(
new moodle_url('/course/search.php', [
'blocklist' => $blockdata->id,
]),
$blockdata->totalcount,
);
}
return $blockdata->totalcount;
}
/**
* Render the protect column.
*
* @param stdClass $row
* @return string
*/
protected function col_protect(stdClass $row): string {
global $OUTPUT;
$params = [
'sesskey' => sesskey(),
];
$protected = in_array($row->plugininfo->name, $this->undeletableblocktypes);
$pluginname = $row->plugininfo->displayname;
if ($protected) {
$params['unprotect'] = $row->plugininfo->name;
$icon = $OUTPUT->pix_icon('t/unlock', get_string('blockunprotectblock', 'admin', $pluginname));
} else {
$params['protect'] = $row->plugininfo->name;
$icon = $OUTPUT->pix_icon('t/lock', get_string('blockprotectblock', 'admin', $pluginname));
}
return html_writer::link(
$this->get_action_url($params),
$icon,
[
'data-action' => 'toggleprotectstate',
'data-plugin' => $row->plugin,
'data-target-state' => $protected ? 0 : 1,
],
);
return '';
}
}
@@ -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/>.
namespace core_admin\table;
use moodle_url;
/**
* Tiny admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class editor_management_table extends \core_admin\table\plugin_management_table {
protected function get_plugintype(): string {
return 'editor';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/settings.php', ['section' => 'manageeditors'])
);
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/editors.php', $params);
}
protected function order_plugins(array $plugins): array {
global $CFG;
// The Editor list is stored in an ordered string.
$activeeditors = explode(',', $CFG->texteditors);
$sortedplugins = [];
foreach ($activeeditors as $editor) {
if (isset($plugins[$editor])) {
$sortedplugins[$editor] = $plugins[$editor];
unset($plugins[$editor]);
}
}
$otherplugins = parent::order_plugins($plugins);
return array_merge(
$sortedplugins,
$otherplugins
);
}
}
@@ -1,71 +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/>.
namespace core_admin\table;
use moodle_url;
use stdClass;
/**
* Media plugin admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class media_management_table extends \core_admin\table\plugin_management_table {
/** @var array The list of used extensions */
protected array $usedextensions = [];
protected function get_plugintype(): string {
return 'media';
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/media.php', $params);
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
return array_merge(
array_slice($columns, 0, 1, true),
['supports' => get_string('supports', 'core_media')],
array_slice($columns, 1, null, true),
);
}
protected function col_name(stdClass $row): string {
global $OUTPUT, $PAGE;
$name = $row->plugininfo->name;
if ($PAGE->theme->resolve_image_location('icon', 'media_' . $name, false)) {
$icon = $OUTPUT->pix_icon('icon', '', "media_{$name}", ['class' => 'icon pluginicon']);
} else {
$icon = $OUTPUT->pix_icon('spacer', '', 'moodle', ['class' => 'icon pluginicon noicon']);
}
$help = '';
if (get_string_manager()->string_exists('pluginname_help', 'media_' . $name)) {
$help = '&nbsp;' . $OUTPUT->help_icon('pluginname', 'media_' . $name);
}
return $icon . $row->plugininfo->displayname . $help;
}
protected function col_supports(stdClass $row): string {
return $row->plugininfo->supports($this->usedextensions);
}
}
@@ -1,503 +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/>.
namespace core_admin\table;
use context_system;
use core_plugin_manager;
use core_table\dynamic as dynamic_table;
use flexible_table;
use html_writer;
use moodle_url;
use stdClass;
defined('MOODLE_INTERNAL') || die();
require_once("{$CFG->libdir}/tablelib.php");
/**
* Plugin Management table.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
abstract class plugin_management_table extends flexible_table implements dynamic_table {
/** @var \core\plugininfo\base[] The plugin list */
protected array $plugins = [];
/** @var int The number of enabled plugins of this type */
protected int $enabledplugincount = 0;
/** @var core_plugin_manager */
protected core_plugin_manager $pluginmanager;
/** @var string The plugininfo class for this plugintype */
protected string $plugininfoclass;
public function __construct() {
global $CFG;
parent::__construct($this->get_table_id());
require_once($CFG->libdir . '/adminlib.php');
// Fetch the plugininfo class.
$this->pluginmanager = core_plugin_manager::instance();
$this->plugininfoclass = $this->pluginmanager::resolve_plugininfo_class($this->get_plugintype());
$this->guess_base_url();
$this->plugins = $this->get_sorted_plugins();
$this->enabledplugincount = count(array_filter($this->plugins, function ($plugin) {
return $plugin->is_enabled();
}));
$this->setup_column_configuration();
$this->set_filterset(new plugin_management_table_filterset());
$this->setup();
}
/**
* Get the list of sorted plugins.
*
* @return \core\plugininfo\base[]
*/
protected function get_sorted_plugins(): array {
if ($this->plugininfoclass::plugintype_supports_ordering()) {
return $this->plugininfoclass::get_sorted_plugins();
} else {
$plugins = $this->pluginmanager->get_plugins_of_type($this->get_plugintype());
return self::sort_plugins($plugins);
}
}
/**
* Sort the plugins list.
*
* Note: This only applies to plugins which do not support ordering.
*
* @param \core\plugininfo\base[] $plugins
* @return \core\plugininfo\base[]
*/
protected function sort_plugins(array $plugins): array {
// The asort functions work by reference.
\core_collator::asort_objects_by_property($plugins, 'displayname');
return $plugins;
}
/**
* Set up the column configuration for this table.
*/
protected function setup_column_configuration(): void {
$columnlist = $this->get_column_list();
$this->define_columns(array_keys($columnlist));
$this->define_headers(array_values($columnlist));
$columnswithhelp = $this->get_columns_with_help();
$columnhelp = array_map(function (string $column) use ($columnswithhelp): ?\renderable {
if (array_key_exists($column, $columnswithhelp)) {
return $columnswithhelp[$column];
}
return null;
}, array_keys($columnlist));
$this->define_help_for_headers($columnhelp);
}
/**
* Set the standard order of the plugins.
*
* @param array $plugins
* @return array
*/
protected function order_plugins(array $plugins): array {
uasort($plugins, function ($a, $b) {
if ($a->is_enabled() && !$b->is_enabled()) {
return -1;
} else if (!$a->is_enabled() && $b->is_enabled()) {
return 1;
}
return strnatcasecmp($a->name, $b->name);
});
return $plugins;
}
/**
* Get the plugintype for this table.
*
* @return string
*/
abstract protected function get_plugintype(): string;
/**
* Get the action URL for this table.
*
* The action URL is used to perform all actions when JS is not available.
*
* @param array $params
* @return moodle_url
*/
abstract protected function get_action_url(array $params = []): moodle_url;
/**
* Provide a default implementation for guessing the base URL from the action URL.
*/
public function guess_base_url(): void {
$this->define_baseurl($this->get_action_url());
}
/**
* Get the web service method used to toggle state.
*
* @return null|string
*/
protected function get_toggle_service(): ?string {
return 'core_admin_set_plugin_state';
}
/**
* Get the web service method used to order plugins.
*
* @return null|string
*/
protected function get_sortorder_service(): ?string {
return 'core_admin_set_plugin_order';
}
/**
* Get the ID of the table.
*
* @return string
*/
protected function get_table_id(): string {
return 'plugin_management_table-' . $this->get_plugintype();
}
/**
* Get a list of the column titles
* @return string[]
*/
protected function get_column_list(): array {
$columns = [
'name' => get_string('name', 'core'),
'version' => get_string('version', 'core'),
];
if ($this->supports_disabling()) {
$columns['enabled'] = get_string('pluginenabled', 'core_plugin');
}
if ($this->supports_ordering()) {
$columns['order'] = get_string('order', 'core');
}
$columns['settings'] = get_string('settings', 'core');
$columns['uninstall'] = get_string('uninstallplugin', 'core_admin');
return $columns;
}
protected function get_columns_with_help(): array {
return [];
}
/**
* Get the context for this table.
*
* @return context_system
*/
public function get_context(): context_system {
return context_system::instance();
}
/**
* Get the table content.
*/
public function get_content(): string {
ob_start();
$this->out();
$content = ob_get_contents();
ob_end_clean();
return $content;
}
/**
* Print the table.
*/
public function out(): void {
$plugintype = $this->get_plugintype();
foreach ($this->plugins as $plugininfo) {
$plugin = "{$plugintype}_{$plugininfo->name}";
$rowdata = (object) [
'plugin' => $plugin,
'plugininfo' => $plugininfo,
'name' => $plugininfo->displayname,
'version' => $plugininfo->versiondb,
];
$this->add_data_keyed(
$this->format_row($rowdata),
$this->get_row_class($rowdata)
);
}
$this->finish_output(false);
}
/**
* This table is not downloadable.
* @param bool $downloadable
* @return bool
*/
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
public function is_downloadable($downloadable = null): bool {
return false;
}
/**
* Show the name column content.
*
* @param stdClass $row
* @return string
*/
protected function col_name(stdClass $row): string {
$status = $row->plugininfo->get_status();
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
return html_writer::span(
get_string('pluginmissingfromdisk', 'core', $row->plugininfo),
'notifyproblem'
);
}
if ($row->plugininfo->is_installed_and_upgraded()) {
return $row->plugininfo->displayname;
}
return html_writer::span(
$row->plugininfo->displayname,
'notifyproblem'
);
}
/**
* Show the enable/disable column content.
*
* @param stdClass $row
* @return string
*/
protected function col_enabled(stdClass $row): string {
global $OUTPUT;
$enabled = $row->plugininfo->is_enabled();
$params = [
'sesskey' => sesskey(),
'plugin' => $row->plugininfo->name,
'action' => $enabled ? 'disable' : 'enable',
];
if ($enabled) {
$icon = $OUTPUT->pix_icon('t/hide', get_string('disableplugin', 'core_admin', $row->plugininfo->displayname));
} else {
$icon = $OUTPUT->pix_icon('t/show', get_string('enableplugin', 'core_admin', $row->plugininfo->displayname));
}
return html_writer::link(
$this->get_action_url($params),
$icon,
[
'data-toggle-method' => $this->get_toggle_service(),
'data-action' => 'togglestate',
'data-plugin' => $row->plugin,
'data-state' => $enabled ? 1 : 0,
],
);
}
protected function col_order(stdClass $row): string {
global $OUTPUT;
if (!$this->supports_ordering()) {
return '';
}
if (!$row->plugininfo->is_enabled()) {
return '';
}
if ($this->enabledplugincount <= 1) {
// There is only one row.
return '';
}
$hasup = true;
$hasdown = true;
if (empty($this->currentrow)) {
// This is the top row.
$hasup = false;
}
if ($this->currentrow === ($this->enabledplugincount - 1)) {
// This is the last row.
$hasdown = false;
}
if ($this->supports_ordering()) {
$dataattributes = [
'data-method' => $this->get_sortorder_service(),
'data-action' => 'move',
'data-plugin' => $row->plugin,
];
} else {
$dataattributes = [];
}
if ($hasup) {
$upicon = html_writer::link(
$this->get_action_url([
'sesskey' => sesskey(),
'action' => 'up',
'plugin' => $row->plugininfo->name,
]),
$OUTPUT->pix_icon('t/up', get_string('moveup')),
array_merge($dataattributes, ['data-direction' => 'up']),
);
} else {
$upicon = $OUTPUT->spacer();
}
if ($hasdown) {
$downicon = html_writer::link(
$this->get_action_url([
'sesskey' => sesskey(),
'action' => 'down',
'plugin' => $row->plugininfo->name,
]),
$OUTPUT->pix_icon('t/down', get_string('movedown')),
array_merge($dataattributes, ['data-direction' => 'down']),
);
} else {
$downicon = $OUTPUT->spacer();
}
// For now just add the up/down icons.
return html_writer::span($upicon . $downicon);
}
/**
* Show the settings column content.
*
* @param stdClass $row
* @return string
*/
protected function col_settings(stdClass $row): string {
if ($settingsurl = $row->plugininfo->get_settings_url()) {
return html_writer::link($settingsurl, get_string('settings'));
}
return '';
}
/**
* Show the Uninstall column content.
*
* @param stdClass $row
* @return string
*/
protected function col_uninstall(stdClass $row): string {
$status = $row->plugininfo->get_status();
if ($status === core_plugin_manager::PLUGIN_STATUS_NEW) {
return get_string('status_new', 'core_plugin');
}
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
$uninstall = get_string('status_missing', 'core_plugin') . '<br/>';
} else {
$uninstall = '';
}
if ($uninstallurl = $this->pluginmanager->get_uninstall_url($row->plugin)) {
$uninstall .= html_writer::link($uninstallurl, get_string('uninstallplugin', 'core_admin'));
}
return $uninstall;
}
/**
* Get the JS module used to manage this table.
*
* This should be a class which extends 'core_admin/plugin_management_table'.
*
* @return string
*/
protected function get_table_js_module(): string {
return 'core_admin/plugin_management_table';
}
/**
* Add JS specific to this implementation.
*
* @return string
*/
protected function get_dynamic_table_html_end(): string {
global $PAGE;
$PAGE->requires->js_call_amd($this->get_table_js_module(), 'init');
return parent::get_dynamic_table_html_end();
}
/**
* Get any class to add to the row.
*
* @param mixed $row
* @return string
*/
protected function get_row_class($row): string {
$plugininfo = $row->plugininfo;
if ($plugininfo->get_status() === core_plugin_manager::PLUGIN_STATUS_MISSING) {
return '';
}
if (!$plugininfo->is_enabled()) {
return 'dimmed_text';
}
return '';
}
public static function get_filterset_class(): string {
return self::class . '_filterset';
}
/**
* Whether this plugin type supports the disabling of plugins.
*
* @return bool
*/
protected function supports_disabling(): bool {
return $this->plugininfoclass::plugintype_supports_disabling();
}
/**
* Whether this table should show ordering fields.
*
* @return bool
*/
protected function supports_ordering(): bool {
return $this->plugininfoclass::plugintype_supports_ordering();
}
}
@@ -1,27 +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/>.
namespace core_admin\table;
/**
* This file contains the dynamic interface.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class plugin_management_table_filterset extends \core_table\local\filter\filterset {
}
@@ -1,50 +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/>.
namespace core_admin\table;
use moodle_url;
/**
* Tiny admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_plugin_management_table extends \core_admin\table\plugin_management_table {
protected function get_plugintype(): string {
return 'tool';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/tools.php')
);
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
unset($columns['settings']);
return $columns;
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/tool.php', $params);
}
}
-174
View File
@@ -1,174 +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/>.
/**
* Task executor for adhoc tasks.
*
* @package core
* @subpackage cli
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @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");
list($options, $unrecognized) = cli_get_params(
[
'help' => false,
'showsql' => false,
'showdebugging' => false,
'execute' => false,
'keep-alive' => 0,
'ignorelimits' => false,
'force' => false,
'id' => null,
'classname' => null,
'taskslimit' => null,
'failed' => false,
], [
'h' => 'help',
'e' => 'execute',
'k' => 'keep-alive',
'i' => 'ignorelimits',
'f' => 'force',
'c' => 'classname',
'l' => 'taskslimit',
]
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$help = <<<EOT
Ad hoc cron tasks.
Options:
-h, --help Print out this help
--showsql Show sql queries before they are executed
--showdebugging Show developer level debugging information
-e, --execute Run all queued adhoc tasks
-k, --keep-alive=N Keep this script alive for N seconds and poll for new adhoc tasks
-i --ignorelimits Ignore task_adhoc_concurrency_limit and task_adhoc_max_runtime limits
-f, --force Run even if cron is disabled
--id Run (failed) task with id
-c, --classname Run tasks with a certain classname (FQN)
-l, --taskslimit=N Run at most N tasks
--failed Run only tasks that failed, ie those with a fail delay
Run all queued tasks:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --execute
Run all queued tasks of specific class:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --classname=\\\\core_course\\\\task\\\\course_delete_modules
Double backslash for the shell escape reasons.
Run a specific task:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --id=123456
Run a specific task with debugging:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --id=123456 --showsql --showdebugging
To profile a long running task:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --taskslimit=1 --classname='\\some\\class\\name' --ignorelimits
EOT;
if ($options['help']) {
echo $help;
exit(0);
}
if (CLI_MAINTENANCE) {
echo "CLI maintenance mode active, cron execution suspended.\n";
exit(1);
}
if (moodle_needs_upgrading()) {
echo "Moodle upgrade pending, cron execution suspended.\n";
exit(1);
}
if (!get_config('core', 'cron_enabled') && !$options['force']) {
mtrace('Cron is disabled. Use --force to override.');
exit(1);
}
// Common debugging options.
if ($options['showdebugging']) {
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql']) {
$DB->set_debug(true);
}
if (!empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if (!empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
}
// Process params.
core_php_time_limit::raise();
// Increase memory limit.
raise_memory_limit(MEMORY_EXTRA);
// Emulate normal session - we use admin account by default.
\core\cron::setup_user();
\core\local\cli\shutdown::script_supports_graceful_exit();
$humantimenow = date('r', time());
mtrace("Server Time: {$humantimenow}\n");
$classname = $options['classname'];
// Run a single adhoc task only, if requested.
if (!empty($options['id'])) {
$taskid = (int) $options['id'];
\core\cron::run_adhoc_task($taskid);
exit(0);
}
// Run all failed tasks.
if (!empty($options['failed'])) {
\core\cron::run_failed_adhoc_tasks($classname);
exit(0);
}
// Examine params and determine if we should run.
$execute = (bool) $options['execute'];
$keepalive = empty($options['keep-alive']) ? 0 : (int) $options['keep-alive'];
$taskslimit = empty($options['taskslimit']) ? null : (int) $options['taskslimit'];
$checklimits = empty($options['ignorelimits']);
if ($classname || $keepalive || $taskslimit) {
$execute = true;
}
// Output the help text if no criteria for running the adhoc tasks are given.
if (!$execute) {
echo $help;
exit(0);
}
\core\cron::run_adhoc_tasks(time(), $keepalive, $checklimits, null, $taskslimit, $classname);
-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);
+8 -6
View File
@@ -28,8 +28,9 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
require_once($CFG->libdir.'/cronlib.php');
// now get cli options
list($options, $unrecognized) = cli_get_params(array('help'=>false),
@@ -74,15 +75,16 @@ 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();
// Emulate normal session.
\core\cron::setup_user();
/// emulate normal session
cron_setup_user();
// Start output log.
/// Start output log
$timenow = time();
mtrace("Server Time: ".date('r',$timenow)."\n\n");
@@ -95,4 +97,4 @@ backup_cron_automated_helper::run_automated_backup(backup_cron_automated_helper:
mtrace("Automated cron backups completed correctly");
$difftime = microtime_diff($starttime, microtime());
mtrace("Execution took ".$difftime." seconds");
mtrace("Execution took ".$difftime." seconds");
-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(__DIR__.'/../../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);
-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/>.
/**
* Build and store theme CSS.
*
* @package core
* @subpackage cli
* @copyright 2017 Ryan Wyllie <ryan@moodle.com>
* @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");
require_once("$CFG->libdir/csslib.php");
require_once("$CFG->libdir/outputlib.php");
$longparams = [
'themes' => null,
'direction' => null,
'help' => false,
'verbose' => false
];
$shortmappings = [
't' => 'themes',
'd' => 'direction',
'h' => 'help',
'v' => 'verbose'
];
// Get CLI params.
list($options, $unrecognized) = cli_get_params($longparams, $shortmappings);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
echo
"Compile the CSS for one or more installed themes.
Existing CSS caches will replaced.
By default all themes will be recompiled unless otherwise specified.
Options:
-t, --themes A comma separated list of themes to be compiled
-d, --direction Only compile a single direction (either ltr or rtl)
-v, --verbose Print info comments to stdout
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/build_theme_css.php --themes=boost --direction=ltr
";
die;
}
if (empty($options['verbose'])) {
$trace = new null_progress_trace();
} else {
$trace = new text_progress_trace();
}
cli_heading('Build theme css');
// Determine which themes we need to build.
$themenames = [];
if (is_null($options['themes'])) {
$trace->output('No themes specified. Finding all installed themes.');
$themenames = array_keys(core_component::get_plugin_list('theme'));
} else {
if (is_string($options['themes'])) {
$themenames = explode(',', $options['themes']);
} else {
cli_error('--themes must be a comma separated list of theme names');
}
}
$trace->output('Checking that each theme is correctly installed...');
$themeconfigs = [];
foreach ($themenames as $themename) {
if (is_null(theme_get_config_file_path($themename))) {
cli_error("Unable to find theme config for {$themename}");
}
// Load the config for the theme.
$themeconfigs[] = theme_config::load($themename);
}
$directions = ['ltr', 'rtl'];
if (!is_null($options['direction'])) {
if (!in_array($options['direction'], $directions)) {
cli_error("--direction must be either ltr or rtl");
}
$directions = [$options['direction']];
}
$trace->output('Building CSS for themes: ' . implode(', ', $themenames));
theme_build_css_for_themes($themeconfigs, $directions);
exit(0);
-185
View File
@@ -1,185 +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/>.
/**
* CLI script allowing to get and set config values.
*
* This is technically just a thin wrapper for {@link get_config()} and
* {@link set_config()} functions.
*
* @package core
* @subpackage cli
* @copyright 2017 David Mudrák <david@moodle.com>
* @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');
$usage = "Displays the current value of the given site setting. Allows to set it to the given value, too.
Usage:
# php cfg.php [--component=<componentname>] [--json] [--shell-arg]
# php cfg.php --name=<configname> [--component=<componentname>] [--shell-arg] [--no-eol]
# php cfg.php --name=<configname> [--component=<componentname>] --set=<value>
# php cfg.php --name=<configname> [--component=<componentname>] --unset
# php cfg.php [--help|-h]
Options:
-h --help Print this help.
--component=<frankenstyle> Name of the component the variable is part of. Defaults to core.
--name=<configname> Name of the configuration variable to get/set. If missing, print all
configuration variables of the given component.
--set=<value> Set the given variable to this value.
--unset Unset the given variable.
--shell-arg Escape output values so that they can be directly used as shell script arguments.
--json Encode output list of values using JSON notation.
--no-eol Do not include the trailing new line character when printing the value.
The list of all variables of the given component can be printed as
tab-separated list (default) or JSON object (--json). Particular values are
printed as raw text values, optionally escaped so that they can be directly
used as shell script arguments (--shell-arg). Single values are displayed with
trailing new line by default, unless explicitly disabled (--no-eol).
In the read mode, the script exits with success status 0 if the requested value
is found. If the requested variable is not set, the script exits with status 3.
When listing all variables of the component, the exit status is always 0 even
if no variables for the given component are found. When setting/unsetting a
value, the exit status is 0. When attempting to set/unset a value that has
already been hard-set in config.php, the script exits with error status 4. In
case of unexpected error, the script exits with error status 1.
Examples:
# php cfg.php
Prints tab-separated list of all core configuration variables and their values.
# php cfg.php --json
Prints list of all core configuration variables and their values as a JSON object.
# php cfg.php --name=release
Prints the given configuration variable - e.g. \$CFG->release in this case.
# php cfg.php --component=tool_recyclebin
# Prints tab-separated list of the plugin's configuration variables.
# export DATAROOT=\$(php cfg.php --name=dataroot --shell-arg --no-eol)
Stores the given configuration variable in the shell variable, escaped
so that it can be safely used as a shell argument.
# php cfg.php --name=theme --set=classic
Sets the given configuration variable to the given value.
# php cfg.php --name=noemailever --unset
Unsets the previously configured variable.
";
list($options, $unrecognised) = cli_get_params([
'help' => false,
'component' => null,
'name' => null,
'set' => null,
'unset' => false,
'shell-arg' => false,
'json' => false,
'no-eol' => false,
], [
'h' => 'help'
]);
if ($unrecognised) {
$unrecognised = implode(PHP_EOL.' ', $unrecognised);
cli_error(get_string('cliunknowoption', 'core_admin', $unrecognised));
}
if ($options['help']) {
cli_writeln($usage);
exit(2);
}
if ($options['unset'] || $options['set'] !== null) {
// Unset the variable or set it to the given value.
if (empty($options['name'])) {
cli_error('Missing configuration variable name', 2);
}
// Check that the variable is not hard-set in the main config.php already.
$component = $options['component'];
if (!empty($component)) {
$componentsettings = $CFG->forced_plugin_settings[$component] ?? [];
$settinginconfig = array_key_exists($options['name'], $componentsettings);
} else {
$settinginconfig = array_key_exists($options['name'], $CFG->config_php_settings);
}
if ($settinginconfig) {
cli_error('The configuration variable is hard-set in the config.php, unable to change.', 4);
}
$new = $options['set'];
$old = get_config($options['component'], $options['name']);
if ($new !== $old) {
set_config($options['name'], $options['set'], $options['component']);
add_to_config_log($options['name'], $old, $new, $options['component']);
}
exit(0);
}
if ($options['name'] === null) {
// List all variables provided by the component (defaults to core).
$got = get_config($options['component']);
if ($options['json']) {
cli_writeln(json_encode($got));
} else {
foreach ($got as $name => $value) {
if ($options['shell-arg']) {
$value = escapeshellarg($value);
}
cli_writeln($name."\t".$value);
}
}
exit(0);
} else {
// Display the value of a single variable.
$got = get_config($options['component'], $options['name']);
if ($got === false) {
cli_error('No such configuration variable found.', 3);
}
if ($options['shell-arg']) {
$got = escapeshellarg($got);
}
if ($options['json']) {
$got = json_encode($got);
}
if ($options['no-eol']) {
cli_write($got);
} else {
cli_writeln($got);
}
exit(0);
}
-76
View File
@@ -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/>.
/**
* Validate that the current db structure matches the install.xml files.
*
* @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(__DIR__ . '/../../config.php');
require_once($CFG->libdir.'/clilib.php');
$help = "Validate database structure
Options:
-h, --help Print out this help.
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/check_database_schema.php
";
list($options, $unrecognized) = cli_get_params(
array(
'help' => false,
),
array(
'h' => 'help',
)
);
if ($options['help']) {
echo $help;
exit(0);
}
if (empty($CFG->version)) {
echo "Database is not yet installed.\n";
exit(2);
}
$dbmanager = $DB->get_manager();
$schema = $dbmanager->get_install_xml_schema();
if (!$errors = $dbmanager->check_database_schema($schema)) {
echo "Database structure is ok.\n";
exit(0);
}
foreach ($errors as $table => $items) {
cli_separator();
echo "$table\n";
foreach ($items as $item) {
echo " * $item\n";
}
}
cli_separator();
exit(1);
-171
View File
@@ -1,171 +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/>.
/**
* CLI tool for system checks
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood (brendan@catalyst-au.net)
* @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');
use core\check\result;
list($options, $unrecognized) = cli_get_params([
'help' => false,
'filter' => '',
'type' => 'status',
'verbose' => false,
], [
'h' => 'help',
'f' => 'filter',
'v' => 'verbose',
't' => 'type',
]);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$checks = \core\check\manager::get_checks($options['type']);
$types = join(', ', \core\check\manager::TYPES);
$help = "Run Moodle system checks
Options:
-h, --help Print out this help
-f, --filter Filter to a subset of checks
-t, --type Which set of checks? Defaults to 'status'
One of $types
-v, --verbose Show details of all checks, not just failed checks
Example:
sudo -u www-data php admin/cli/checks.php
sudo -u www-data php admin/cli/checks.php -v
sudo -u www-data php admin/cli/checks.php -v --filter=environment
";
if ($options['help']) {
echo $help;
die();
}
$filter = $options['filter'];
if ($filter) {
$checks = array_filter($checks, function($check, $key) use ($filter) {
$ref = $check->get_ref();
return (strpos($ref, $filter) !== false);
}, 1);
}
// These shell exit codes and labels align with the NRPE standard.
$exitcodes = [
result::NA => 0,
result::OK => 0,
result::INFO => 0,
result::UNKNOWN => 3,
result::WARNING => 1,
result::ERROR => 2,
result::CRITICAL => 2,
];
$exitlabel = [
result::NA => 'OK',
result::OK => 'OK',
result::INFO => 'OK',
result::UNKNOWN => 'UNKNOWN',
result::WARNING => 'WARNING',
result::ERROR => 'CRITICAL',
result::CRITICAL => 'CRITICAL',
];
$format = "% 10s| % -60s\n";
$spacer = "----------+--------------------------------------------------------------------\n";
$prefix = ' |';
$output = '';
$header = $exitlabel[result::OK] . ': ' . get_string('checksok', '', $options['type']) . "\n";
$exitcode = $exitcodes[result::OK];
foreach ($checks as $check) {
$ref = $check->get_ref();
$result = $check->get_result();
$status = $result->get_status();
$checkexitcode = $exitcodes[$status];
// Summary is treated as html.
$summary = $result->get_summary();
$summary = html_to_text($summary, 60, false);
if ($checkexitcode > $exitcode) {
$exitcode = $checkexitcode;
$header = $exitlabel[$status] . ': ' . $check->get_name() . " (" . $check->get_ref() . ")\n";
}
if (empty($messages[$status])) {
$messages[$status] = $result;
}
$len = strlen(get_string('status' . $status));
if ($options['verbose'] ||
$status == result::WARNING ||
$status == result::CRITICAL ||
$status == result::ERROR) {
$output .= sprintf(
$format,
$OUTPUT->check_result($result),
sprintf('%s (%s)', $check->get_name(), $ref)
);
$summary = str_replace("\n", "\n" . $prefix . ' ', $summary);
$output .= sprintf( $format, '', ' ' . $summary);
if ($options['verbose']) {
$actionlink = $check->get_action_link();
if ($actionlink) {
$output .= sprintf( $format, '', ' ' . $actionlink->url);
}
$output .= sprintf( $format, '', '');
}
}
}
// Print NRPE header.
print $header;
// Only show the table header if there is anything to show.
if ($output) {
print sprintf($format,
get_string('status'). ' ',
get_string('check')
) . $spacer;
print $output;
}
// NRPE shell exit code.
exit($exitcode);
+10 -135
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
@@ -29,32 +30,13 @@
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
require_once($CFG->libdir.'/cronlib.php');
// Now get cli option.
[$options, $unrecognized] = cli_get_params(
[
'help' => false,
'stop' => false,
'list' => false,
'force' => false,
'enable' => false,
'disable' => false,
'disable-wait' => false,
'keep-alive' => null,
],
[
'h' => 'help',
's' => 'stop',
'l' => 'list',
'f' => 'force',
'e' => 'enable',
'd' => 'disable',
'w' => 'disable-wait',
'k' => 'keep-alive',
]
);
// now get cli options
list($options, $unrecognized) = cli_get_params(array('help'=>false),
array('h'=>'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
@@ -63,19 +45,10 @@ if ($unrecognized) {
if ($options['help']) {
$help =
"Execute periodic cron actions.
"Execute periodic cron actions.
Options:
-h, --help Print out this help
-s, --stop Notify all other running cron processes to stop after the current task
-l, --list Show the list of currently running tasks and how long they have been running
-f, --force Execute task even if cron is disabled
-e, --enable Enable cron
-d, --disable Disable cron
-w, --disable-wait=600 Disable cron and wait until all tasks finished or fail after N seconds (optional param)
-k, --keep-alive=N Keep this script alive for N seconds and poll for new tasks
The default value can be set by administrators in:
Site administration > Server > Tasks > Task processing > Keep alive time
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/cron.php
@@ -85,102 +58,4 @@ Example:
die;
}
if ($options['stop']) {
// By clearing the caches this signals to other running processes
// to exit after finishing the current task.
\core\task\manager::clear_static_caches();
die;
}
if ($options['enable']) {
set_config('cron_enabled', 1);
mtrace('Cron has been enabled for the site.');
exit(0);
}
if ($options['disable']) {
set_config('cron_enabled', 0);
\core\task\manager::clear_static_caches();
mtrace('Cron has been disabled for the site.');
exit(0);
}
if ($options['list']) {
$tasks = \core\task\manager::get_running_tasks();
mtrace('The list of currently running tasks:');
$format = "%7s %-12s %-9s %-20s %-52s\n";
printf(
$format,
'PID',
'HOST',
'TYPE',
'TIME',
'CLASSNAME'
);
foreach ($tasks as $task) {
printf(
$format,
$task->pid,
substr($task->hostname, 0, 12),
$task->type,
format_time(time() - $task->timestarted),
substr($task->classname, 0, 52)
);
}
exit(0);
}
if ($wait = $options['disable-wait']) {
$started = time();
if (true === $wait) {
// Default waiting time.
$waitsec = 600;
} else {
$waitsec = $wait;
$wait = true;
}
set_config('cron_enabled', 0);
\core\task\manager::clear_static_caches();
mtrace('Cron has been disabled for the site.');
mtrace('Allocating ' . format_time($waitsec) . ' for the tasks to finish.');
$lastcount = 0;
while ($wait) {
$tasks = \core\task\manager::get_running_tasks();
if (count($tasks) == 0) {
mtrace('');
mtrace('All scheduled and adhoc tasks finished.');
exit(0);
}
if (time() - $started >= $waitsec) {
mtrace('');
mtrace('Wait time (' . format_time($waitsec) . ') elapsed, but ' . count($tasks) . ' task(s) still running.');
mtrace('Exiting with code 1.');
exit(1);
}
if (count($tasks) !== $lastcount) {
mtrace('');
mtrace(count($tasks) . " tasks currently running.", '');
$lastcount = count($tasks);
} else {
mtrace('.', '');
}
sleep(1);
}
}
if (!get_config('core', 'cron_enabled') && !$options['force']) {
mtrace('Cron is disabled. Use --force to override.');
exit(1);
}
\core\local\cli\shutdown::script_supports_graceful_exit();
$keepalive = $options['keep-alive'];
\core\cron::run_main_process($keepalive);
cron_run();
-65
View File
@@ -1,65 +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/>.
/**
* CLI script to reset dashboards.
*
* @package core
* @subpackage cli
* @copyright 2021 Brendan Heywood (brendan@catalyst-au.net)
* @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');
require_once($CFG->dirroot.'/my/lib.php');
list($options, $unrecognized) = cli_get_params([
'help' => false,
'execute' => false,
], [
'h' => 'help',
'e' => 'execute',
]);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
}
if (!$options['execute']) {
$help = <<<EOF
Resets Moodle dashboards for all users
Options:
-h, --help Print out this help
-e, --execute Actually run the reset
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/dashboard_reset.php -e
EOF;
echo $help;
exit(0);
}
$progressbar = new progress_bar();
$progressbar->create();
my_reset_page_for_all_users(MY_PAGE_PRIVATE, 'my-index', $progressbar);
-123
View File
@@ -1,123 +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/>.
/**
* CLI script to delete a course.
*
* @package core
* @subpackage cli
* @author Mikhail Golenkov <mikhailgolenkov@catalyst-au.net>
* @copyright 2022 Catalyst IT
* @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');
list($options, $unrecognized) = cli_get_params(
[
'courseid' => false,
'help' => false,
'showsql' => false,
'showdebugging' => false,
'disablerecyclebin' => false,
'non-interactive' => false,
], [
'c' => 'courseid',
'h' => 'help',
]
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] || empty($options['courseid'])) {
$help = <<<EOT
CLI script to delete a course.
Options:
-h, --help Print out this help
--showsql Show sql queries before they are executed
--showdebugging Show developer level debugging information
--disablerecyclebin Skip backing up the course
--non-interactive No interactive questions or confirmations
-c, --courseid Course id to be deleted
Example:
\$sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=123456
\$sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=123456 --showdebugging
\$sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=123456 --disablerecyclebin
EOT;
echo $help;
die;
}
$interactive = empty($options['non-interactive']);
if ($options['showdebugging']) {
mtrace('Enabling debugging...');
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql']) {
mtrace('Enabling SQL debugging...');
$DB->set_debug(true);
}
if (CLI_MAINTENANCE) {
cli_error('CLI maintenance mode active, CLI execution suspended');
}
if (moodle_needs_upgrading()) {
cli_error('Moodle upgrade pending, CLI execution suspended');
}
$course = $DB->get_record('course', array('id' => $options['courseid']));
if (empty($course)) {
cli_error('Course not found');
}
mtrace('Deleting course id ' . $course->id);
mtrace('Course name: ' . $course->fullname);
mtrace('Short name: ' . $course->shortname);
if ($interactive) {
mtrace('');
$input = cli_input('Are you sure you wish to delete this course? (y/N)', 'N', ['y', 'Y', 'n', 'N']);
if (strtolower($input) != 'y') {
exit(0);
}
}
if ($options['disablerecyclebin']) {
mtrace('Disabling recycle bin...');
$overrideconfig = ['tool_recyclebin' => ['coursebinenable' => false, 'categorybinenable' => false]];
$CFG->forced_plugin_settings = array_merge($CFG->forced_plugin_settings, $overrideconfig);
}
core_php_time_limit::raise();
delete_course($course);
mtrace('Updating course count in categories...');
fix_course_sortorder();
mtrace('Done!');
-209
View File
@@ -1,209 +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 you to view and change the emailstop flag of any user.
*
* @package core
* @subpackage cli
* @copyright 2023 Stephan Robotta (stephan.robotta@bfh.ch)
* @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');
// Define the input options.
$longparams = [
'email' => '',
'help' => false,
'id' => '',
'quiet' => false,
'stop' => '',
'username' => '',
];
$shortparams = [
'e' => 'email',
'h' => 'help',
'i' => 'id',
'q' => 'quiet',
's' => 'stop',
'u' => 'username',
];
// Define exit codes.
$exitsuccess = 0;
$exitunknownoption = 1;
$exitmissinguserarg = 2;
$exittoomanyuserarg = 3;
$exitnosearchargs = 4;
$exitnousersfound = 5;
$exitinvalidstopflag = 6;
$exiterrordb = 7;
// Now get cli options that are set by the caller.
list($options, $unrecognized) = cli_get_params($longparams, $shortparams);
$verbose = empty($options['quiet']);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
if ($verbose) {
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), $exitunknownoption);
}
exit($exitunknownoption);
}
if ($options['help']) {
$help =
"Set/unset or show status of emailstop flag for a user, identified by username or email.
There are no security checks here because anybody who is able to
execute this file may execute any PHP too.
Options:
-h, --help Print out this help
-e, --email=email Specify user by email, separate many users by comma
-i, --id=id Specify user by id, separate many users by comma
-q, --quiet No output to stdout
-s, --stop=0|1|off|on Set new value for emailstop flag
-u, --username=username Specify user by username, separate many users by comma
Example:
\$sudo -u www-data /usr/bin/php admin/cli/emailstop.php --email=student1@example.com --stop=1
\$sudo -u www-data /usr/bin/php admin/cli/emailstop.php --email=student1@example.com,student2@example.com
\$sudo -u www-data /usr/bin/php admin/cli/emailstop.php --u=student1,student2 -s=on
";
echo $help;
exit($exitsuccess);
}
$cntempty = 0;
$cntfilled = 0;
$searchargs = [];
// Try to find out which option is used to fetch the users from. Also do sanitize etc.
foreach (['email', 'username', 'id'] as $option) {
if (empty($options[$option])) {
$cntempty++;
} else {
$cntfilled++;
$argname = $option;
// The search args must be: split by the comma, trimmed, and empty elements filtered out.
$searchargs = array_flip(array_filter(
array_map(
function ($item) {
return trim($item);
},
explode(',', $options[$option])
),
function ($item) {
return $item !== '';
}
));
}
}
if ($cntempty === 3) {
if ($verbose) {
cli_error('One of username, email, or id must be set.', $exitmissinguserarg);
}
exit($exitmissinguserarg);
}
if ($cntfilled > 1) {
if ($verbose) {
cli_error('Only one of email, username, or id can be set to identify a user.', $exittoomanyuserarg);
}
exit($exittoomanyuserarg);
}
if (empty($searchargs)) {
if ($verbose) {
cli_error('No values are provided for users.', $exitnosearchargs);
}
exit($exitnosearchargs);
}
try {
$users = $DB->get_records_list('user', $argname, array_keys($searchargs));
} catch (Exception $e) {
if ($verbose) {
cli_error("Could not fetch data from db by {$argname}: '{$options[$argname]}'.", $exiterrordb);
}
exit($exiterrordb);
}
if (empty($users)) {
if ($verbose) {
cli_error("Can not find any user by {$argname}: '{$options[$argname]}'.", $exitnousersfound);
}
exit($exitnousersfound);
}
// No stop flag set, then just print the user and the current emailstop flag state.
if ($options['stop'] === '') {
foreach ($users as $user) {
if ($verbose) {
echo 'user=' . $user->{$argname} . ' - emailstop=' . (int)$user->emailstop . PHP_EOL;
unset($searchargs[$user->{$argname}]);
}
}
if ($verbose) {
foreach (array_keys($searchargs) as $arg) {
echo 'user=' . $arg . ' - not found' . PHP_EOL;
}
}
exit($exitsuccess);
}
// Allowed values for the stop flag enabled are 1 and on, for disabled are 0 and off.
$validvalues = ['0', '1', 'off', 'on'];
$stopflag = strtolower($options['stop']);
if (!in_array($stopflag, $validvalues)) {
if ($verbose) {
cli_error('Value for the emailstop flag must be one of: ' . implode(', ', $validvalues) . '.', $exitinvalidstopflag);
}
exit($exitinvalidstopflag);
}
foreach ($validvalues as $value) {
if ($value === $stopflag) {
$stopflag = ($value === '1' || $value === 'on') ? 1 : 0;
break;
}
}
// Update each user with the stop flag to be set if it is necessary.
foreach ($users as $user) {
$line = 'Update user ' . $user->{$argname} . ($argname !== 'id' ? ' (' . $user->id . ')' : '') . ' - ';
if ((int)$user->emailstop !== $stopflag) {
$DB->set_field('user', 'emailstop', $stopflag, ['id' => $user->id]);
$line .= 'ok';
} else {
$line .= 'already done';
}
if ($verbose) {
echo $line . PHP_EOL;
unset($searchargs[$user->{$argname}]);
}
}
if ($verbose) {
foreach (array_keys($searchargs) as $arg) {
echo 'user=' . $arg . ' - not found' . PHP_EOL;
}
}
exit($exitsuccess);
-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";
}
}
-92
View File
@@ -1,92 +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 Petr Skoda (http://skodak.org)
* @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');
// Now get cli options.
list($options, $unrecognized) = cli_get_params(array('help'=>false),
array('h'=>'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
$help =
"Fix incorrectly deleted users.
This scripts detects users that are marked as deleted instead
of calling delete_user().
Deleted users do not have original username, idnumber or email,
we must also delete all roles, enrolments, group memberships, etc.
Please note this script does not delete any public information
such as forum posts.
Options:
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/fix_deleted_users.php
";
echo $help;
die;
}
cli_heading('Looking for sloppy user deletes');
// Look for sloppy deleted users where somebody only flipped the deleted flag.
$sql = "SELECT *
FROM {user}
WHERE deleted = 1 AND email LIKE '%@%' AND username NOT LIKE '%@%'";
$rs = $DB->get_recordset_sql($sql);
foreach ($rs as $user) {
echo "Redeleting user $user->id: $user->username ($user->email)\n";
delete_user($user);
}
$rs->close();
cli_heading('Deleting all leftovers');
$DB->set_field('user', 'idnumber', '', array('deleted'=>1));
$DB->delete_records_select('role_assignments', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('cohort_members', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('groups_members', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_enrolments', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_preferences', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_info_data', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_lastaccess', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('external_tokens', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('external_services_users', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
exit(0);
-138
View File
@@ -1,138 +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/>.
/**
* Fix orphaned calendar events that were broken by MDL-67494.
*
* This script will look for all the calendar events which userids
* where broken by a wrong upgrade step, affecting to Moodle 3.9.5
* and up.
*
* It performs checks to both:
* a) Detect if the site was affected (ran the wrong upgrade step).
* b) Look for orphaned calendar events, categorising them as:
* - standard: site / category / course / group / user events
* - subscription: events created via subscriptions.
* - action: normal action events, created to show common important dates.
* - override: user and group override events, particular, that some activities support.
* - custom: other events, not being any of the above, common or particular.
* By specifying it (--fix) try to recover as many broken events (missing userid) as
* possible. Standard, subscription, action, override events in core are fully supported but
* override or custom events should be fixed by each plugin as far as there isn't any standard
* API (plugin-wise) to launch a rebuild of the calendar events.
*
* @package core
* @copyright 2021 onwards Simey Lameze <simey@moodle.com>
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir . "/clilib.php");
require_once($CFG->libdir . '/db/upgradelib.php');
// Supported options.
$long = ['fix' => false, 'help' => false];
$short = ['f' => 'fix', 'h' => 'help'];
// CLI options.
[$options, $unrecognized] = cli_get_params($long, $short);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
$help = <<<EOT
Fix orphaned calendar events.
This script detects calendar events that have had their
userid lost. By default it will perform various checks
and report them, showing the site status in an easy way.
Also, optionally (--fix), it wil try to recover as many
lost userids as possible from different sources. Note that
this script aims to process well-know events in core,
leaving custom events in 3rd part plugins mostly unmodified
because there isn't any consistent way to regenerate them.
For more details: https://tracker.moodle.org/browse/MDL-71156
Options:
-h, --help Print out this help.
-f, --fix Fix the orphaned calendar events in the DB.
If not specified only check and report problems to STDERR.
Usage:
- Only report: \$ sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_calendar_events.php
- Report and fix: \$ sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_calendar_events.php -f
EOT;
cli_writeln($help);
die;
}
// Check various usual pre-requisites.
if (empty($CFG->version)) {
cli_error('Database is not yet installed.');
}
$admin = get_admin();
if (!$admin) {
cli_error('Error: No admin account was found.');
}
if (moodle_needs_upgrading()) {
cli_error('Moodle upgrade pending, script execution suspended.');
}
// Do everything as admin by default.
\core\session\manager::set_user($admin);
// Report current site status.
cli_heading('Checking the site status');
$needsfix = upgrade_calendar_site_status();
// Report current calendar events status.
cli_heading('Checking the calendar events status');
$info = upgrade_calendar_events_status();
$hasbadevents = $info['total']->bad > 0 || $info['total']->bad != $info['other']->bad;
$needsfix = $needsfix || $hasbadevents;
// If, selected, fix as many calendar events as possible.
if ($options['fix']) {
// If the report has told us that the fix was not needed... ask for confirmation!
if (!$needsfix) {
cli_writeln("This site DOES NOT NEED to run the calendar events fix.");
$input = cli_input('Are you completely sure that you want to run the fix? (y/N)', 'N', ['y', 'Y', 'n', 'N']);
if (strtolower($input) != 'y') {
exit(0);
}
cli_writeln("");
}
cli_heading('Fixing as many as possible calendar events');
upgrade_calendar_events_fix_remaining($info);
// Report current (after fix) calendar events status.
cli_heading('Checking the calendar events status (after fix)');
upgrade_calendar_events_status();
} else if ($needsfix) {
// Fix option was not provided but problem events have been found. Notify the user and provide info how to fix these events.
cli_writeln("This site NEEDS to run the calendar events fix!");
cli_writeln("To fix the calendar events, re-run this script with the --fix option.");
}
@@ -1,103 +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 fixes orphaned question categories.
*
* Orphaned question categories have had their associated context deleted
* but the category itself remains in the database with an invalid context.
*
* @package core
* @subpackage cli
* @copyright 2013 Tyler Bannister (tyler.bannister@remote-learner.net)
* @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');
require_once($CFG->libdir.'/questionlib.php');
$long = array('fix' => false, 'help' => false);
$short = array('f' => 'fix', 'h' => 'help');
// Now get cli options.
list($options, $unrecognized) = cli_get_params($long, $short);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
$help =
"Fix orphaned question categories.
This scripts detects question categories that have had their
context deleted, thus severing them from their original purpose.
This script will find the orphaned categories and delete the unused
questions in each category found. Used questions will not be
deleted, instead they will be moved to a rescue question category.
Options:
-h, --help Print out this help
-f, --fix Fix the orphaned question categories in the DB.
If not specified only check and report problems to STDERR.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_question_categories.php
\$sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_question_categories.php -f
";
echo $help;
die;
}
cli_heading('Checking for orphaned categories');
$sql = 'SELECT qc.id, qc.contextid, qc.name
FROM {question_categories} qc
LEFT JOIN {context} c ON qc.contextid = c.id
WHERE c.id IS NULL';
$categories = $DB->get_recordset_sql($sql);
$i = 0;
foreach ($categories as $category) {
$i += 1;
echo "Found orphaned category: {$category->name}\n";
if (!empty($options['fix'])) {
echo "Cleaning...";
// One transaction per category.
$transaction = $DB->start_delegated_transaction();
question_category_delete_safe($category);
$transaction->allow_commit();
echo " Done!\n";
}
}
if (($i > 0) && !empty($options['fix'])) {
echo "Found and removed {$i} orphaned question categories\n";
} else if ($i > 0) {
echo "Found {$i} orphaned question categories. To fix, run:\n";
echo "\$sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_question_categories.php --fix\n";
} else {
echo "No orphaned question categories found.\n";
}
$categories->close();
-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/>.
/**
* Generates a secure key for the current server (presuming it does not already exist).
*
* @package core_admin
* @copyright 2020 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use \core\encryption;
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
// Get cli options.
[$options, $unrecognized] = cli_get_params(
['help' => false, 'method' => null],
['h' => 'help']);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
// TODO: MDL-71421 - Remove the openssl alternative once sodium becomes a requirement in Moodle 4.2.
if ($options['help']) {
echo "Generate secure key
This script manually creates a secure key within the secret data root folder (configured in
config.php as \$CFG->secretdataroot). You must run it using an account with access to write
to that folder.
In normal use Moodle automatically creates the key; this script is intended when setting up
a new Moodle system, for cases where the secure folder is not on shared storage and the key
may be manually installed on multiple servers.
Options:
-h, --help Print out this help
--method <method> Generate key for specified encryption method instead of default.
* sodium
* openssl-aes-256-ctr
Example:
php admin/cli/generate_key.php
";
exit;
}
$method = $options['method'];
if (encryption::key_exists($method)) {
echo 'Key already exists: ' . encryption::get_key_file($method) . "\n";
exit;
}
// Creates key with default permissions (no chmod).
echo "Generating key...\n";
encryption::create_key($method, false);
echo "\nKey created: " . encryption::get_key_file($method) . "\n\n";
echo "If the key folder is not shared storage, then key files should be copied to all servers.\n";
+187 -359
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,26 +58,19 @@ 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
--summary=STRING The summary to be displayed on the front page
--adminuser=USERNAME Username for the moodle admin account. Default is admin
--adminpass=PASSWORD Password for the moodle admin account,
required in non-interactive mode.
--adminemail=STRING Email address for the moodle admin account.
--sitepreset=STRING Admin site preset to be applied during the installation process.
--supportemail=STRING Email address for support and help.
--upgradekey=STRING The upgrade key to be set in the config.php, leave empty to not set it.
--non-interactive No interactive questions, installation fails if any
problem encountered.
--agree-license Indicates agreement with software license,
required in non-interactive mode.
--allow-unstable Install even if the version is not marked as stable yet,
required in non-interactive mode.
--skip-database Stop the installation before installing the database.
-h, --help Print out this help
Example:
@@ -92,7 +79,7 @@ Example:
// distro specific customisation
$distrolibfile = __DIR__.'/../../install/distrolib.php';
$distrolibfile = dirname(dirname(dirname(__FILE__))).'/install/distrolib.php';
$distro = null;
if (file_exists($distrolibfile)) {
require_once($distrolibfile);
@@ -102,7 +89,7 @@ if (file_exists($distrolibfile)) {
}
// Nothing to do if config.php exists
$configfile = __DIR__.'/../../config.php';
$configfile = dirname(dirname(dirname(__FILE__))).'/config.php';
if (file_exists($configfile)) {
require($configfile);
require_once($CFG->libdir.'/clilib.php');
@@ -126,11 +113,10 @@ $olddir = getcwd();
chdir(dirname($_SERVER['argv'][0]));
// Servers should define a default timezone in php.ini, but if they don't then make sure something is defined.
if (!function_exists('date_default_timezone_set') or !function_exists('date_default_timezone_get')) {
fwrite(STDERR, "Timezone functions are not available.\n");
exit(1);
// This is a quick hack. Ideally we should ask the admin for a value. See MDL-22625 for more on this.
if (function_exists('date_default_timezone_set') and function_exists('date_default_timezone_get')) {
@date_default_timezone_set(@date_default_timezone_get());
}
date_default_timezone_set(@date_default_timezone_get());
// make sure PHP errors are displayed - helps with diagnosing of problems
@error_reporting(E_ALL);
@@ -141,87 +127,53 @@ date_default_timezone_set(@date_default_timezone_get());
/** Used by library scripts to check they are being called by Moodle */
define('MOODLE_INTERNAL', true);
// Disables all caching.
define('CACHE_DISABLE_ALL', true);
define('PHPUNIT_TEST', false);
define('IGNORE_COMPONENT_CACHE', true);
// Check that PHP is of a sufficient version as soon as possible.
require_once(__DIR__.'/../../lib/phpminimumversionlib.php');
moodle_require_minimum_php_version();
// Check that PHP is of a sufficient version
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.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(__DIR__));
$CFG->dirroot = dirname(dirname(dirname(__FILE__)));
$CFG->libdir = "$CFG->dirroot/lib";
$CFG->wwwroot = "http://localhost";
$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(__DIR__)));
$parts = explode('/', str_replace('\\', '/', dirname(dirname(__FILE__))));
$CFG->admin = array_pop($parts);
//point pear include path to moodles lib/pear so that includes and requires will search there for files before anywhere else
//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');
require_once($CFG->libdir.'/deprecatedlib.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
require_once($CFG->dirroot.'/cache/lib.php');
// 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'),
'auroramysql' => moodle_database::get_driver_instance('auroramysql', '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
'mssql' => moodle_database::get_driver_instance('mssql', 'native'), // FreeTDS driver
);
foreach ($databases as $type=>$database) {
if ($database->driver_installed() !== true) {
@@ -241,28 +193,21 @@ list($options, $unrecognized) = cli_get_params(
'chmod' => isset($distro->directorypermissions) ? sprintf('%04o',$distro->directorypermissions) : '2777', // let distros set dir permissions
'lang' => $CFG->lang,
'wwwroot' => '',
'dataroot' => empty($distro->dataroot) ? str_replace('\\', '/', dirname(dirname(dirname(__DIR__))).'/moodledata'): $distro->dataroot, // initialised later after including libs or by distro
'dataroot' => empty($distro->dataroot) ? str_replace('\\', '/', dirname(dirname(dirname(dirname(__FILE__)))).'/moodledata'): $distro->dataroot, // initialised later after including libs or by distro
'dbtype' => empty($distro->dbtype) ? $defaultdb : $distro->dbtype, // let distro skip dbtype selection
'dbhost' => empty($distro->dbhost) ? 'localhost' : $distro->dbhost, // let distros set dbhost
'dbname' => 'moodle',
'dbuser' => empty($distro->dbuser) ? 'root' : $distro->dbuser, // let distros set dbuser
'dbpass' => '',
'dbport' => '',
'dbsocket' => '',
'dbsocket' => false,
'prefix' => 'mdl_',
'fullname' => '',
'shortname' => '',
'summary' => '',
'adminuser' => 'admin',
'adminpass' => '',
'adminemail' => '',
'sitepreset' => '',
'supportemail' => '',
'upgradekey' => '',
'non-interactive' => false,
'agree-license' => false,
'allow-unstable' => false,
'skip-database' => false,
'help' => false
),
array(
@@ -271,21 +216,13 @@ list($options, $unrecognized) = cli_get_params(
);
$interactive = empty($options['non-interactive']);
$skipdatabase = $options['skip-database'];
// set up language
$lang = clean_param($options['lang'], PARAM_SAFEDIR);
$languages = get_string_manager()->get_list_of_translations();
if (array_key_exists($lang, $languages)) {
if (file_exists($CFG->dirroot.'/install/lang/'.$lang)) {
$CFG->lang = $lang;
}
// Set up site admin preset.
$sitepreset = clean_param($options['sitepreset'], PARAM_RAW);
if (!empty($sitepreset)) {
$CFG->setsitepresetduringinstall = $sitepreset;
}
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
@@ -297,41 +234,38 @@ if ($options['help']) {
}
//Print header
cli_logo();
echo PHP_EOL;
echo get_string('cliinstallheader', 'install', $CFG->target_release)."\n";
//Fist select language
if ($interactive) {
cli_separator();
// Do not put the langs into columns because it is not compatible with RTL.
$languages = get_string_manager()->get_list_of_translations();
// format the langs nicely - 3 per line
$c = 0;
$langlist = '';
foreach ($languages as $key=>$lang) {
$c++;
$length = iconv_strlen($lang, 'UTF-8');
$padded = $lang.str_repeat(' ', 38-$length);
$langlist .= $padded;
if ($c % 3 == 0) {
$langlist .= "\n";
}
}
$default = $CFG->lang;
cli_heading(get_string('chooselanguagehead', 'install'));
if (array_key_exists($default, $languages)) {
echo $default.' - '.$languages[$default]."\n";
}
if ($default !== 'en') {
echo 'en - English (en)'."\n";
}
echo '? - '.get_string('availablelangs', 'install')."\n";
cli_heading(get_string('availablelangs', 'install'));
echo $langlist."\n";
$prompt = get_string('clitypevaluedefault', 'admin', $CFG->lang);
$error = '';
do {
echo $error;
$input = cli_input($prompt, $default);
$input = clean_param($input, PARAM_SAFEDIR);
if ($input === '?') {
echo implode("\n", $languages)."\n";
$error = "\n";
if (!file_exists($CFG->dirroot.'/install/lang/'.$input)) {
$error = get_string('cliincorrectvalueretry', 'admin')."\n";
} else {
$input = clean_param($input, PARAM_SAFEDIR);
if (!array_key_exists($input, $languages)) {
$error = get_string('cliincorrectvalueretry', 'admin')."\n";
} else {
$error = '';
}
$error = '';
}
} while ($error !== '');
$CFG->lang = $input;
@@ -365,8 +299,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);
@@ -403,6 +335,7 @@ if ($interactive) {
$CFG->wwwroot = $wwwroot;
$CFG->httpswwwroot = $CFG->wwwroot;
//We need dataroot before lang download
$CFG->dataroot = $options['dataroot'];
if ($interactive) {
@@ -452,10 +385,8 @@ if ($interactive) {
cli_error(get_string('pathserrcreatedataroot', 'install', $a));
}
}
$CFG->tempdir = $CFG->dataroot.'/temp';
$CFG->backuptempdir = $CFG->tempdir.'/backup';
$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') {
@@ -494,8 +425,7 @@ if (isset($maturity)) {
exit(1);
}
} else {
cli_problem(get_string('maturitycorewarning', 'admin', $maturitylevel));
cli_error(get_string('maturityallowunstable', 'admin'));
cli_error(get_string('maturitycorewarning', 'admin'));
}
}
}
@@ -525,105 +455,72 @@ if ($interactive) {
$database = $databases[$CFG->dbtype];
// We cannot do any validation until all DB connection data is provided.
$hintdatabase = '';
do {
echo $hintdatabase;
// Ask for db host.
if ($interactive) {
cli_separator();
cli_heading(get_string('databasehost', 'install'));
if ($options['dbhost'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbhost']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbhost = cli_input($prompt, $options['dbhost']);
// ask for db host
if ($interactive) {
cli_separator();
cli_heading(get_string('databasehost', 'install'));
if ($options['dbhost'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbhost']);
} else {
$CFG->dbhost = $options['dbhost'];
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbhost = cli_input($prompt, $options['dbhost']);
// Ask for db name.
if ($interactive) {
cli_separator();
cli_heading(get_string('databasename', 'install'));
if ($options['dbname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbname = cli_input($prompt, $options['dbname']);
} else {
$CFG->dbhost = $options['dbhost'];
}
// ask for db name
if ($interactive) {
cli_separator();
cli_heading(get_string('databasename', 'install'));
if ($options['dbname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbname']);
} else {
$CFG->dbname = $options['dbname'];
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbname = cli_input($prompt, $options['dbname']);
// Ask for db prefix.
if ($interactive) {
cli_separator();
cli_heading(get_string('dbprefix', 'install'));
//TODO: solve somehow the prefix trouble for oci.
if ($options['prefix'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['prefix']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->prefix = cli_input($prompt, $options['prefix']);
} else {
$CFG->dbname = $options['dbname'];
}
// ask for db prefix
if ($interactive) {
cli_separator();
cli_heading(get_string('dbprefix', 'install'));
//TODO: solve somehow the prefix trouble for oci
if ($options['prefix'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['prefix']);
} else {
$CFG->prefix = $options['prefix'];
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->prefix = cli_input($prompt, $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->prefix = $options['prefix'];
}
// ask for db user
if ($interactive) {
cli_separator();
cli_heading(get_string('databaseuser', 'install'));
if ($options['dbuser'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbuser']);
} else {
$CFG->dboptions['dbport'] = (int) $options['dbport'];
}
if ($CFG->dboptions['dbport'] <= 0) {
$CFG->dboptions['dbport'] = '';
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbuser = cli_input($prompt, $options['dbuser']);
// 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();
cli_heading(get_string('databaseuser', 'install'));
if ($options['dbuser'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbuser']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbuser = cli_input($prompt, $options['dbuser']);
} else {
$CFG->dbuser = $options['dbuser'];
}
// Ask for db password.
if ($interactive) {
cli_separator();
cli_heading(get_string('databasepass', 'install'));
} else {
$CFG->dbuser = $options['dbuser'];
}
// ask for db password
if ($interactive) {
cli_separator();
cli_heading(get_string('databasepass', 'install'));
do {
if ($options['dbpass'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbpass']);
} else {
@@ -631,171 +528,113 @@ do {
}
$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);
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, 'dbsocket'=>$options['dbsocket']), $distro);
}
$hintdatabase = 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'];
$hintdatabase = 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']));
if ($hintdatabase !== '') {
cli_error(get_string('dbconnectionerror', 'install'));
}
}
} while ($hintdatabase !== '');
// If --skip-database option is provided, we do not need to ask for site fullname, shortname, adminuser, adminpass, adminemail.
// These fields will be requested during the database install part.
if (!$skipdatabase) {
// Ask for fullname.
if ($interactive) {
cli_separator();
cli_heading(get_string('fullsitename', 'moodle'));
if ($options['fullname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['fullname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['fullname'] = cli_input($prompt, $options['fullname']);
} while (empty($options['fullname']));
} else {
if (empty($options['fullname'])) {
$a = (object)['option' => 'fullname', 'value' => $options['fullname']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for shortname.
if ($interactive) {
cli_separator();
cli_heading(get_string('shortsitename', 'moodle'));
if ($options['shortname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['shortname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['shortname'] = cli_input($prompt, $options['shortname']);
} while (empty($options['shortname']));
} else {
if (empty($options['shortname'])) {
$a = (object)['option' => 'shortname', 'value' => $options['shortname']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for admin user name.
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminusername', 'install'));
if (!empty($options['adminuser'])) {
$prompt = get_string('clitypevaluedefault', 'admin', $options['adminuser']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['adminuser'] = cli_input($prompt, $options['adminuser']);
} while (empty($options['adminuser']) or $options['adminuser'] === 'guest');
} else {
if ((empty($options['adminuser']) || $options['adminuser'] === 'guest')) {
$a = (object)['option' => 'adminuser', 'value' => $options['adminuser']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for admin user password.
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminpassword', 'install'));
$prompt = get_string('clitypevalue', 'admin');
do {
$options['adminpass'] = cli_input($prompt);
} while (empty($options['adminpass']) or $options['adminpass'] === 'admin');
} else {
if ((empty($options['adminpass']) or $options['adminpass'] === 'admin')) {
$a = (object)['option' => 'adminpass', 'value' => $options['adminpass']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for the admin email address.
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminemail', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['adminemail']);
$options['adminemail'] = cli_input($prompt, $options['adminemail']);
}
// Validate that the address provided was an e-mail address.
if (!empty($options['adminemail']) && !validate_email($options['adminemail'])) {
$a = (object)['option' => 'adminemail', 'value' => $options['adminemail']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
// Ask for the support email address.
if ($interactive) {
cli_separator();
cli_heading(get_string('clisupportemail', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['supportemail']);
$options['supportemail'] = cli_input($prompt, $options['supportemail']);
}
// Validate that the support email address provided is valid.
if (!empty($options['supportemail']) && !validate_email($options['supportemail'])) {
$a = (object)['option' => 'supportemail', 'value' => $options['supportemail']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
} else {
$CFG->dbpass = $options['dbpass'];
$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'));
}
}
// Ask for the upgrade key.
// ask for fullname
if ($interactive) {
cli_separator();
cli_heading(get_string('upgradekeyset', 'admin'));
if ($options['upgradekey'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['upgradekey']);
$options['upgradekey'] = cli_input($prompt, $options['upgradekey']);
cli_heading(get_string('fullsitename', 'moodle'));
if ($options['fullname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['fullname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
$options['upgradekey'] = cli_input($prompt);
}
do {
$options['fullname'] = cli_input($prompt, $options['fullname']);
} while (empty($options['fullname']));
} else {
if (empty($options['fullname'])) {
$a = (object)array('option'=>'fullname', 'value'=>$options['fullname']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Set the upgrade key if it was provided.
if ($options['upgradekey'] !== '') {
$CFG->upgradekey = $options['upgradekey'];
// ask for shortname
if ($interactive) {
cli_separator();
cli_heading(get_string('shortsitename', 'moodle'));
if ($options['shortname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['shortname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['shortname'] = cli_input($prompt, $options['shortname']);
} while (empty($options['shortname']));
} else {
if (empty($options['shortname'])) {
$a = (object)array('option'=>'shortname', 'value'=>$options['shortname']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// The user does not also need to pass agree-license when --skip-database is provided as the user will need to accept
// the license again in the database install part.
if (!$skipdatabase) {
if ($interactive) {
if (!$options['agree-license']) {
cli_separator();
cli_heading(get_string('copyrightnotice'));
echo "Moodle - Modular Object-Oriented Dynamic Learning Environment\n";
echo get_string('gpl3')."\n\n";
echo get_string('doyouagree')."\n";
$prompt = get_string('cliyesnoprompt', 'admin');
$input = cli_input($prompt, '', array(get_string('clianswerno', 'admin'), get_string('cliansweryes', 'admin')));
if ($input == get_string('clianswerno', 'admin')) {
exit(1);
}
}
// ask for admin user name
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminusername', 'install'));
if (!empty($options['adminuser'])) {
$prompt = get_string('clitypevaluedefault', 'admin', $options['adminuser']);
} else {
if (!$options['agree-license'] && !$skipdatabase) {
cli_error(get_string('climustagreelicense', 'install'));
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['adminuser'] = cli_input($prompt, $options['adminuser']);
} while (empty($options['adminuser']) or $options['adminuser'] === 'guest');
} else {
if (empty($options['adminuser']) or $options['adminuser'] === 'guest') {
$a = (object)array('option'=>'adminuser', 'value'=>$options['adminuser']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// ask for admin user password
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminpassword', 'install'));
$prompt = get_string('clitypevalue', 'admin');
do {
$options['adminpass'] = cli_input($prompt);
} while (empty($options['adminpass']) or $options['adminpass'] === 'admin');
} else {
if (empty($options['adminpass']) or $options['adminpass'] === 'admin') {
$a = (object)array('option'=>'adminpass', 'value'=>$options['adminpass']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
if ($interactive) {
if (!$options['agree-license']) {
cli_separator();
cli_heading(get_string('copyrightnotice'));
echo "Moodle - Modular Object-Oriented Dynamic Learning Environment\n";
echo get_string('gpl3')."\n\n";
echo get_string('doyouagree')."\n";
$prompt = get_string('cliyesnoprompt', 'admin');
$input = cli_input($prompt, '', array(get_string('clianswerno', 'admin'), get_string('cliansweryes', 'admin')));
if ($input == get_string('clianswerno', 'admin')) {
exit(1);
}
}
} else {
if (!$options['agree-license']) {
cli_error(get_string('climustagreelicense', 'install'));
}
}
// Finally we have all info needed for config.php
@@ -837,23 +676,12 @@ if (!$envstatus) {
}
// Test plugin dependencies.
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
require_once($CFG->libdir . '/pluginlib.php');
if (!plugin_manager::instance()->all_plugins_ok($version)) {
cli_error(get_string('pluginschecktodo', 'admin'));
}
if (!$skipdatabase) {
install_cli_database($options, $interactive);
// This needs to happen at the end to ensure it occurs after all caches
// have been purged for the last time.
// This will build a cached version of the current theme for the user
// to immediately start browsing the site.
require_once($CFG->libdir.'/upgradelib.php');
upgrade_themes();
} else {
echo get_string('cliskipdatabase', 'install')."\n";
}
install_cli_database($options, $interactive);
echo get_string('cliinstallfinished', 'install')."\n";
exit(0); // 0 means success
+16 -52
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.
@@ -52,24 +45,26 @@ Options:
--lang=CODE Installation and default site language. Default is en.
--adminuser=USERNAME Username for the moodle admin account. Default is admin.
--adminpass=PASSWORD Password for the moodle admin account.
--adminemail=STRING Email address for the moodle admin account.
--agree-license Indicates agreement with software license.
--fullname=STRING Name of the site
--shortname=STRING Name of the site
--summary=STRING The summary to be displayed on the front page
--supportemail=STRING Email address for support and help.
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/install_database.php --lang=cs --adminpass=soMePass123 --agree-license
";
// Check that PHP is of a sufficient version as soon as possible.
require_once(__DIR__.'/../../lib/phpminimumversionlib.php');
moodle_require_minimum_php_version();
// Check that PHP is of a sufficient version
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.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);
}
// Nothing to do if config.php does not exist
$configfile = __DIR__.'/../../config.php';
$configfile = dirname(dirname(dirname(__FILE__))).'/config.php';
if (!file_exists($configfile)) {
fwrite(STDERR, 'config.php does not exist, can not continue'); // do not localize
fwrite(STDERR, "\n");
@@ -84,6 +79,11 @@ require_once($CFG->libdir.'/installlib.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
// make sure no tables are installed yet
if ($DB->get_tables() ) {
cli_error(get_string('clitablesexist', 'install'));
}
$CFG->early_install_lang = true;
get_string_manager(true);
@@ -95,11 +95,8 @@ list($options, $unrecognized) = cli_get_params(
'lang' => 'en',
'adminuser' => 'admin',
'adminpass' => '',
'adminemail' => '',
'fullname' => '',
'shortname' => '',
'summary' => '',
'supportemail' => '',
'agree-license' => false,
'help' => false
),
@@ -108,22 +105,12 @@ list($options, $unrecognized) = cli_get_params(
)
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
// We show help text even if tables are installed.
if ($options['help']) {
echo $help;
die;
}
// Make sure no tables are installed yet.
if ($DB->get_tables() ) {
cli_error(get_string('clitablesexist', 'install'));
}
if (!$options['agree-license']) {
cli_error('You have to agree to the license. --help prints out the help'); // TODO: localize
}
@@ -132,21 +119,6 @@ if ($options['adminpass'] === true or $options['adminpass'] === '') {
cli_error('You have to specify admin password. --help prints out the help'); // TODO: localize
}
// Validate that the address provided was an e-mail address.
if (!empty($options['adminemail']) && !validate_email($options['adminemail'])) {
$a = (object) array('option' => 'adminemail', 'value' => $options['adminemail']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
// Validate that the supportemail provided was an e-mail address.
if (!empty($options['supportemail']) && !validate_email($options['supportemail'])) {
$a = (object) [
'option' => 'supportemail',
'value' => $options['supportemail']
];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
$options['lang'] = clean_param($options['lang'], PARAM_SAFEDIR);
if (!file_exists($CFG->dirroot.'/install/lang/'.$options['lang'])) {
$options['lang'] = 'en';
@@ -188,20 +160,12 @@ if (!$envstatus) {
}
// Test plugin dependencies.
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
require_once($CFG->libdir . '/pluginlib.php');
if (!plugin_manager::instance()->all_plugins_ok($version)) {
cli_error(get_string('pluginschecktodo', 'admin'));
}
install_cli_database($options, true);
// This needs to happen at the end to ensure it occurs after all caches
// have been purged for the last time.
// This will build a cached version of the current theme for the user
// to immediately start browsing the site.
require_once($CFG->libdir.'/upgradelib.php');
upgrade_themes();
echo get_string('cliinstallfinished', 'install')."\n";
exit(0); // 0 means success
-55
View File
@@ -1,55 +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/>.
/**
* CLI script to kill all user sessions without asking for confirmation.
*
* @package core
* @subpackage cli
* @copyright 2017 Alexander Bias <alexander.bias@uni-ulm.de>
* @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');
list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
}
if ($options['help']) {
$help =
"Kill all Moodle sessions
Options:
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/kill_all_sessions.php
";
echo $help;
exit(0);
}
\core\session\manager::kill_all_sessions();
exit(0);
+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";
}
+11 -128
View File
@@ -24,7 +24,7 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
if ($DB->get_dbfamily() !== 'mysql') {
@@ -53,7 +53,7 @@ Options:
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
\$ sudo -u www-data /usr/bin/php admin/cli/mysql_collation.php --collation=utf8_general_ci
";
if (!empty($options['collation'])) {
@@ -64,71 +64,6 @@ if (!empty($options['collation'])) {
cli_error("Error: collation '$collation' is not available on this server!");
}
$collationinfo = explode('_', $collation);
$charset = reset($collationinfo);
$engine = strtolower($DB->get_dbengine());
// Do checks for utf8mb4.
if (strpos($collation, 'utf8mb4') === 0) {
// Do we have the right engine?
if ($engine !== 'innodb' && $engine !== 'xtradb') {
cli_error("Error: '$collation' requires InnoDB or XtraDB set as the engine.");
}
// Are we using Barracuda?
if ($DB->get_row_format() != 'Barracuda') {
// Try setting it here.
try {
$DB->execute("SET GLOBAL innodb_file_format=Barracuda");
} catch (dml_exception $e) {
cli_error("Error: '$collation' requires the file format to be set to Barracuda.
An attempt was made to change the format, but it failed. Please try doing this manually.");
}
echo "GLOBAL SETTING: innodb_file_format changed to Barracuda\n";
}
// Is one file per table being used?
if (!$DB->is_file_per_table_enabled()) {
try {
$DB->execute("SET GLOBAL innodb_file_per_table=1");
} catch (dml_exception $e) {
cli_error("Error: '$collation' requires the setting 'innodb_file_per_table' be set to 'ON'.
An attempt was made to change the format, but it failed. Please try doing this manually.");
}
echo "GLOBAL SETTING: innodb_file_per_table changed to 1\n";
}
// Is large prefix set?
if (!$DB->is_large_prefix_enabled()) {
try {
$DB->execute("SET GLOBAL innodb_large_prefix=1");
} catch (dml_exception $e) {
cli_error("Error: '$collation' requires the setting 'innodb_large_prefix' be set to 'ON'.
An attempt was made to change the format, but it failed. Please try doing this manually.");
}
echo "GLOBAL SETTING: innodb_large_prefix changed to 1\n";
}
}
$sql = "SHOW VARIABLES LIKE 'collation_database'";
if (!$dbcollation = $DB->get_record_sql($sql)) {
cli_error("Error: Could not access collation information on the database.");
}
$sql = "SHOW VARIABLES LIKE 'character_set_database'";
if (!$dbcharset = $DB->get_record_sql($sql)) {
cli_error("Error: Could not access character set information on the database.");
}
if ($dbcollation->value !== $collation || $dbcharset->value !== $charset) {
// Try to convert the DB.
echo "Converting database to '$collation' for $CFG->wwwroot:\n";
$sql = "ALTER DATABASE `$CFG->dbname` DEFAULT CHARACTER SET $charset DEFAULT COLLATE = $collation";
try {
$DB->change_database_structure($sql);
} catch (exception $e) {
cli_error("Error: Tried to alter the database with no success. Please try manually changing the database
to the new collation and character set and then run this script again.");
}
echo "DATABASE CONVERTED\n";
}
echo "Converting tables and columns to '$collation' for $CFG->wwwroot:\n";
$prefix = $DB->get_prefix();
$prefix = str_replace('_', '\\_', $prefix);
@@ -145,25 +80,12 @@ if (!empty($options['collation'])) {
$skipped++;
} else {
try {
$DB->change_database_structure("ALTER TABLE `$table->name` CONVERT TO CHARACTER SET $charset COLLATE $collation");
echo "CONVERTED\n";
$converted++;
} catch (ddl_exception $e) {
$result = mysql_set_row_format($table->name, $charset, $collation, $engine);
if ($result) {
echo "CONVERTED\n";
$converted++;
} else {
// We don't know what the problem is. Stop the conversion.
cli_error("Error: Tried to convert $table->name, but there was a problem. Please check the details of this
table and try again.");
die();
}
}
$DB->change_database_structure("ALTER TABLE $table->name DEFAULT COLLATE = $collation");
echo "CONVERTED\n";
$converted++;
}
$sql = "SHOW FULL COLUMNS FROM `$table->name` WHERE collation IS NOT NULL";
$sql = "SHOW FULL COLUMNS FROM $table->name WHERE collation IS NOT NULL";
$rs2 = $DB->get_recordset_sql($sql);
foreach ($rs2 as $column) {
$column = (object)array_change_key_case((array)$column, CASE_LOWER);
@@ -174,36 +96,22 @@ if (!empty($options['collation'])) {
continue;
}
// Check for utf8mb4 collation.
$rowformat = $DB->get_row_format_sql($engine, $collation);
if ($column->type === 'tinytext' or $column->type === 'mediumtext' or $column->type === 'text' or $column->type === 'longtext') {
$notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
$default = (!is_null($column->default) and $column->default !== '') ? "DEFAULT '$column->default'" : '';
// primary, unique and inc are not supported for texts
$sql = "ALTER TABLE `$table->name`
MODIFY COLUMN $column->field $column->type
CHARACTER SET $charset
COLLATE $collation $notnull $default";
$sql = "ALTER TABLE $table->name MODIFY COLUMN $column->field $column->type COLLATE $collation $notnull $default";
$DB->change_database_structure($sql);
} else if (strpos($column->type, 'varchar') === 0) {
$notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
$default = !is_null($column->default) ? "DEFAULT '$column->default'" : '';
if ($rowformat != '') {
$sql = "ALTER TABLE `$table->name` $rowformat";
$DB->change_database_structure($sql);
}
$sql = "ALTER TABLE `$table->name`
MODIFY COLUMN $column->field $column->type
CHARACTER SET $charset
COLLATE $collation $notnull $default";
// primary, unique and inc are not supported for texts
$sql = "ALTER TABLE $table->name MODIFY COLUMN $column->field $column->type COLLATE $collation $notnull $default";
$DB->change_database_structure($sql);
} else {
echo "ERROR (unknown column type: $column->type)\n";
$errors++;
$error++;
continue;
}
echo "CONVERTED\n";
@@ -272,9 +180,7 @@ function mysql_get_collations() {
global $DB;
$collations = array();
$sql = "SHOW COLLATION
WHERE Collation LIKE 'utf8\_%' AND Charset = 'utf8'
OR Collation LIKE 'utf8mb4\_%' AND Charset = 'utf8mb4'";
$sql = "SHOW COLLATION WHERE Collation LIKE 'utf8\_%' AND Charset = 'utf8'";
$rs = $DB->get_recordset_sql($sql);
foreach ($rs as $collation) {
$collations[$collation->collation] = $collation->collation;
@@ -303,26 +209,3 @@ function mysql_get_column_collations($tablename) {
$rs->close();
return $collations;
}
function mysql_set_row_format($tablename, $charset, $collation, $engine) {
global $DB;
$sql = "SELECT row_format
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = DATABASE() AND table_name = ?";
$rs = $DB->get_record_sql($sql, array($tablename));
if ($rs) {
if ($rs->row_format == 'Compact' || $rs->row_format == 'Redundant') {
$rowformat = $DB->get_row_format_sql($engine, $collation);
// Try to convert to compressed format and then try updating the collation again.
$DB->change_database_structure("ALTER TABLE `$tablename` $rowformat");
$DB->change_database_structure("ALTER TABLE `$tablename` CONVERT TO CHARACTER SET $charset COLLATE $collation");
} else {
// Row format may not be the problem. Can not diagnose problem. Send fail reply.
return false;
}
} else {
return false;
}
return true;
}
-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(__DIR__.'/../../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_antelope_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_antelope_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_antelope_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;
}
+121
View File
@@ -0,0 +1,121 @@
<?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 engine conversion tool.
*
* @package core
* @subpackage cli
* @copyright 2009 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
if ($DB->get_dbfamily() !== 'mysql') {
cli_error('This function is designed for MySQL databases only!');
}
// now get cli options
list($options, $unrecognized) = cli_get_params(array('help'=>false, 'list'=>false, 'engine'=>false),
array('h'=>'help', 'l'=>'list'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$help =
"MySQL engine conversions script.
It is recommended to stop the web server before the conversion.
Do not use MyISAM if possible, because it is not ACID compliant
and does not support transactions.
Options:
--engine=ENGINE Convert MySQL tables to different engine
-l, --list Show table information
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/mysql_engine.php --engine=InnoDB
";
if (!empty($options['engine'])) {
$engine = clean_param($options['engine'], PARAM_ALPHA);
echo "Converting tables to '$engine' for $CFG->wwwroot:\n";
$prefix = $DB->get_prefix();
$prefix = str_replace('_', '\\_', $prefix);
$sql = "SHOW TABLE STATUS WHERE Name LIKE BINARY '$prefix%'";
$rs = $DB->get_recordset_sql($sql);
$converted = 0;
$skipped = 0;
foreach ($rs as $table) {
if ($table->engine === $engine) {
echo str_pad($table->name, 40). " - NO CONVERSION NEEDED\n";
$skipped++;
continue;
}
echo str_pad($table->name, 40). " - ";
try {
$DB->change_database_structure("ALTER TABLE {$table->name} ENGINE = $engine");
} catch (moodle_exception $e) {
echo $e->getMessage()."\n";
$skipped++;
continue;
}
echo "DONE\n";
$converted++;
}
$rs->close();
echo "Converted: $converted, skipped: $skipped\n";
exit(0); // success
} else if (!empty($options['list'])) {
echo "List of tables for $CFG->wwwroot:\n";
$prefix = $DB->get_prefix();
$prefix = str_replace('_', '\\_', $prefix);
$sql = "SHOW TABLE STATUS WHERE Name LIKE BINARY '$prefix%'";
$rs = $DB->get_recordset_sql($sql);
$counts = array();
foreach ($rs as $table) {
if (isset($counts[$table->engine])) {
$counts[$table->engine]++;
} else {
$counts[$table->engine] = 1;
}
echo str_pad($table->engine, 10);
echo $table->name . "\n";
}
$rs->close();
echo "\n";
echo "Table engines summary for $CFG->wwwroot:\n";
foreach ($counts as $engine => $count) {
echo "$engine: $count\n";
}
exit(0); // success
} else {
echo $help;
die;
}
+8 -31
View File
@@ -15,8 +15,6 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI script to purge caches without asking for confirmation.
*
* @package core
* @subpackage cli
* @copyright 2011 David Mudrak <david@moodle.com>
@@ -25,19 +23,10 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php');
$longoptions = [
'help' => false,
'muc' => false,
'theme' => false,
'lang' => false,
'js' => false,
'filter' => false,
'other' => false
];
list($options, $unrecognized) = cli_get_params($longoptions, ['h' => 'help']);
list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
@@ -45,32 +34,20 @@ if ($unrecognized) {
}
if ($options['help']) {
// The indentation of this string is "wrong" but this is to avoid a extra whitespace in console output.
$help = <<<EOF
Invalidates Moodle internal caches
Specific caches can be defined (alone or in combination) using arguments. If none are specified,
all caches will be purged.
$help =
"Invalidates all Moodle internal caches
Options:
-h, --help Print out this help
--muc Purge all MUC caches (includes lang cache)
--theme Purge theme cache
--lang Purge language string cache
--js Purge JavaScript cache
--filter Purge text filter cache
--other Purge all file caches and other miscellaneous caches (may include MUC
if using cachestore_file).
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/purge_caches.php
EOF;
\$sudo -u www-data /usr/bin/php admin/cli/purge_caches.php
";
echo $help;
exit(0);
}
purge_caches(array_filter($options));
purge_all_caches();
exit(0);
exit(0);
+13 -40
View File
@@ -26,26 +26,13 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
// Define the input options.
$longparams = array(
'help' => false,
'username' => '',
'password' => '',
'ignore-password-policy' => false
);
$shortparams = array(
'h' => 'help',
'u' => 'username',
'p' => 'password',
'i' => 'ignore-password-policy'
);
// now get cli options
list($options, $unrecognized) = cli_get_params($longparams, $shortparams);
list($options, $unrecognized) = cli_get_params(array('help'=>false),
array('h'=>'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
@@ -60,43 +47,29 @@ There are no security checks here because anybody who is able to
execute this file may execute any PHP too.
Options:
-h, --help Print out this help
-u, --username=username Specify username to change
-p, --password=newpassword Specify new password
--ignore-password-policy Ignore password policy when setting password
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/reset_password.php
\$sudo -u www-data /usr/bin/php admin/cli/reset_password.php --username=rosaura --password=jiu3jiu --ignore-password-policy
";
"; //TODO: localize - to be translated later when everything is finished
echo $help;
die;
}
if ($options['username'] == '' ) {
cli_heading('Password reset');
$prompt = "Enter username (manual authentication only)";
$username = cli_input($prompt);
} else {
$username = $options['username'];
}
cli_heading('Password reset'); // TODO: localize
$prompt = "enter username (manual authentication only)"; // TODO: localize
$username = cli_input($prompt);
if (!$user = $DB->get_record('user', array('auth'=>'manual', 'username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) {
cli_error("Can not find user '$username'");
}
if ($options['password'] == '' ) {
$prompt = "Enter new password";
$password = cli_input($prompt);
} else {
$password = $options['password'];
}
$prompt = "Enter new password"; // TODO: localize
$password = cli_input($prompt);
$errmsg = '';//prevent eclipse warning
if (!$options['ignore-password-policy'] ) {
if (!check_password_policy($password, $errmsg, $user)) {
cli_error(html_to_text($errmsg, 0));
}
if (!check_password_policy($password, $errmsg)) {
cli_error($errmsg);
}
$hashedpassword = hash_internal_user_password($password);
@@ -105,4 +78,4 @@ $DB->set_field('user', 'password', $hashedpassword, array('id'=>$user->id));
echo "Password changed\n";
exit(0); // 0 means success.
exit(0); // 0 means success
-109
View File
@@ -1,109 +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 restore a course from CLI.
*
* @package core
* @subpackage cli
* @copyright 2020 Catalyst IT
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', 1);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
require_once($CFG->dirroot . "/backup/util/includes/restore_includes.php");
list($options, $unrecognized) = cli_get_params([
'file' => '',
'categoryid' => '',
'showdebugging' => false,
'help' => false,
], [
'f' => 'file',
'c' => 'categoryid',
's' => 'showdebugging',
'h' => 'help',
]);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] || !($options['file']) || !($options['categoryid'])) {
$help = <<<EOL
Restore backup into provided category.
Options:
-f, --file=STRING Path to the backup file.
-c, --categoryid=INT ID of the category to restore too.
-s, --showdebugging Show developer level debugging information
-h, --help Print out this help.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/restore_backup.php --file=/path/to/backup/file.mbz --categoryid=1\n
EOL;
echo $help;
exit(0);
}
if ($options['showdebugging']) {
set_debugging(DEBUG_DEVELOPER, true);
}
if (!$admin = get_admin()) {
throw new \moodle_exception('noadmins');
}
if (!file_exists($options['file'])) {
throw new \moodle_exception('filenotfound');
}
if (!$category = $DB->get_record('course_categories', ['id' => $options['categoryid']], 'id')) {
throw new \moodle_exception('invalidcategoryid');
}
$backupdir = "restore_" . uniqid();
$path = $CFG->tempdir . DIRECTORY_SEPARATOR . "backup" . DIRECTORY_SEPARATOR . $backupdir;
cli_heading(get_string('extractingbackupfileto', 'backup', $path));
$fp = get_file_packer('application/vnd.moodle.backup');
$fp->extract_to_pathname($options['file'], $path);
cli_heading(get_string('preprocessingbackupfile'));
try {
list($fullname, $shortname) = restore_dbops::calculate_course_names(0, get_string('restoringcourse', 'backup'),
get_string('restoringcourseshortname', 'backup'));
$courseid = restore_dbops::create_new_course($fullname, $shortname, $category->id);
$rc = new restore_controller($backupdir, $courseid, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $admin->id, backup::TARGET_NEW_COURSE);
$rc->execute_precheck();
$rc->execute_plan();
$rc->destroy();
} catch (Exception $e) {
cli_heading(get_string('cleaningtempdata'));
fulldelete($path);
throw new \moodle_exception('generalexceptionmessage', 'error', '', $e->getMessage());
}
cli_heading(get_string('restoredcourseid', 'backup', $courseid));
exit(0);
-167
View File
@@ -1,167 +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/>.
/**
* CLI task execution.
*
* @package core
* @subpackage cli
* @copyright 2014 Petr Skoda
* @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");
list($options, $unrecognized) = cli_get_params(
[
'help' => false,
'list' => false,
'execute' => false,
'showsql' => false,
'showdebugging' => false,
'force' => false,
], [
'h' => 'help',
'f' => 'force',
]
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] or (!$options['list'] and !$options['execute'])) {
$help =
"Scheduled cron tasks.
Options:
--execute=\\some\\task Execute scheduled task manually
--list List all scheduled tasks
--showsql Show sql queries before they are executed
--showdebugging Show developer level debugging information
-h, --help Print out this help
-f, --force Execute task even if cron is disabled
Example:
\$sudo -u www-data /usr/bin/php admin/cli/scheduled_task.php --execute=\\core\\task\\session_cleanup_task
";
echo $help;
die;
}
if ($options['showdebugging'] || !empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql'] || !empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if ($options['list']) {
cli_heading("List of scheduled tasks ($CFG->wwwroot)");
$shorttime = get_string('strftimedatetimeshort');
$tasks = \core\task\manager::get_all_scheduled_tasks();
echo str_pad(get_string('scheduledtasks', 'tool_task'), 50, ' ') . ' ' . str_pad(get_string('runpattern', 'tool_task'), 17, ' ')
. ' ' . str_pad(get_string('lastruntime', 'tool_task'), 40, ' ') . get_string('nextruntime', 'tool_task') . "\n";
foreach ($tasks as $task) {
$class = '\\' . get_class($task);
$schedule = $task->get_minute() . ' '
. $task->get_hour() . ' '
. $task->get_day() . ' '
. $task->get_day_of_week() . ' '
. $task->get_month() . ' '
. $task->get_day_of_week();
$nextrun = $task->get_next_run_time();
$lastrun = $task->get_last_run_time();
$plugininfo = core_plugin_manager::instance()->get_plugin_info($task->get_component());
$plugindisabled = $plugininfo && $plugininfo->is_enabled() === false && !$task->get_run_if_component_disabled();
if ($plugindisabled) {
$nextrun = get_string('plugindisabled', 'tool_task');
} else if ($task->get_disabled()) {
$nextrun = get_string('taskdisabled', 'tool_task');
} else if ($nextrun > time()) {
$nextrun = userdate($nextrun);
} else {
$nextrun = get_string('asap', 'tool_task');
}
if ($lastrun) {
$lastrun = userdate($lastrun);
} else {
$lastrun = get_string('never');
}
echo str_pad($class, 50, ' ') . ' ' . str_pad($schedule, 17, ' ') .
' ' . str_pad($lastrun, 40, ' ') . ' ' . $nextrun . "\n";
}
exit(0);
}
if ($execute = $options['execute']) {
if (!$task = \core\task\manager::get_scheduled_task($execute)) {
mtrace("Task '$execute' not found");
exit(1);
}
if (moodle_needs_upgrading()) {
mtrace("Moodle upgrade pending, cannot execute tasks.");
exit(1);
}
if (!get_config('core', 'cron_enabled') && !$options['force']) {
mtrace('Cron is disabled. Use --force to override.');
exit(1);
}
\core\task\manager::scheduled_task_starting($task);
// Increase memory limit.
raise_memory_limit(MEMORY_EXTRA);
// Emulate normal session - we use admin account by default.
\core\cron::setup_user();
// Execute the task.
\core\local\cli\shutdown::script_supports_graceful_exit();
$cronlockfactory = \core\lock\lock_config::get_lock_factory('cron');
if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) {
mtrace('Cannot obtain cron lock');
exit(129);
}
if (!$lock = $cronlockfactory->get_lock('\\' . get_class($task), 10)) {
$cronlock->release();
mtrace('Cannot obtain task lock');
exit(130);
}
$task->set_lock($lock);
if (!$task->is_blocking()) {
$cronlock->release();
} else {
$task->set_cron_lock($cronlock);
}
\core\cron::run_inner_scheduled_task($task);
}

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