Compare commits

..

761 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7) b15cd07d4b Moodle release 2.1.2 2011-10-09 00:49:42 +02:00
Eloy Lafuente (stronk7) ecbd8716f6 weekly release 2.1.1+ 2011-10-07 00:11:22 +02:00
Eloy Lafuente (stronk7) 7820e5047d fix permissions 2011-10-07 00:06:23 +02:00
Eloy Lafuente (stronk7) c4101db016 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-10-07 00:05:07 +02:00
AMOS bot d1582f14d5 Automatically generated installer lang files 2011-10-06 00:55:37 +00:00
Aparup Banerjee e153abc018 Merge branch 'wip-MDL-28615-m21-squashed' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-10-05 14:52:45 +08:00
Eloy Lafuente (stronk7) f1ae261bc9 Merge branch 'MDL-28469_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-05 01:14:47 +02:00
Eloy Lafuente (stronk7) 19fcc09ac7 Merge branch 'wip-MDL-25697-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-10-05 01:10:24 +02:00
Sam Hemelryk 82bd683018 MDL-28615 forum: Fixed up a couple of minor regressions 2011-10-05 11:09:28 +13:00
Eloy Lafuente (stronk7) 19c8fd9e8b Merge branch 'MDL-29644_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-04 23:40:23 +02:00
Tim Hunt 0bfc2dde8f MDL-29644 qtype multianswer, hints lost doing Moodle XML export.
This commit also includes a lot of useful tidying up of some of the unit
test helper code. I turned out that I could not use all the helper code
in my new tests, but despite that it will be useful in the future, so I
am committing it here.
2011-10-04 22:28:35 +01:00
Eloy Lafuente (stronk7) 807f806ed7 Merge branch 'MDL-27857-assignment-portfolio_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-10-04 12:46:24 +02:00
Eloy Lafuente (stronk7) 85dd2a674a Merge branch 'MDL-29548_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-04 12:37:45 +02:00
Tim Hunt fa8843c424 MDL-29548 allow message plugins to control message
defaults.

At the moment, each message_provider can specify defaults for
each message output, to say whether that message output should be
used for this type of message:
http://docs.moodle.org/dev/Messaging_2.0#Adding_new_message_type.

If the message provider does not set a default, this change allows
the message output to set the default.
2011-10-04 11:24:43 +01:00
Eloy Lafuente (stronk7) fdca6e8321 Merge branch 'MDL-19575-m21' of git://github.com/ankitagarwal/moodle into MOODLE_21_STABLE 2011-10-04 12:12:33 +02:00
Tim Hunt ae3056cb00 MDL-29520 question engine: work-around bad MySQL delete performance.
This is a temporary fix, until the new API from MDL-29589 is available.

(amended to fix comments)
2011-10-04 12:05:04 +02:00
Tim Hunt 74969d8866 MDL-29571 questions: improve class=accesshide screen-reader hints.
This changes the hint that comes before the question text. There are
unit tests to verify the new behaviour.

(amended to fix comments)
2011-10-04 11:53:07 +02:00
Tim Hunt 5e69fe4971 MDL-29571 qtype description refactor unit test code a bit. 2011-10-04 11:52:20 +02:00
Sam Hemelryk 133173e213 Merge branch 'MDL-29621_21_wip' of git://github.com/grabs/moodle into MOODLE_21_STABLE 2011-10-04 17:56:39 +13:00
Sam Hemelryk 747d6b5aac MDL-28615 forum: Fixed missing context regression 2011-10-04 16:37:04 +13:00
Sam Hemelryk 91a7a788aa Merge branch 'MDL-28725_wiki_section2_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-10-04 16:21:33 +13:00
Eloy Lafuente (stronk7) c3a4009a56 Merge branch 'MDL-29511_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-04 01:11:48 +02:00
Eloy Lafuente (stronk7) f0837f65d8 Merge branch 'MDL-29216_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-03 22:55:56 +02:00
Eloy Lafuente (stronk7) a70eda6cc8 Merge branch 'MDL-29341_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-03 22:50:30 +02:00
Eloy Lafuente (stronk7) c5c9be022d Merge branch 'MDL-29570_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-10-03 21:42:55 +02:00
Andreas Grabs 96909b1597 MDL-29621 - XHTML not welformed when creating Feedback questions 2011-10-03 18:44:55 +02:00
Tim Hunt 8f40d27954 MDL-28469 quiz settings pages should be pagelayout admin. 2011-10-03 16:38:59 +01:00
David Mudrak 59c8be2362 MDL-27857 Export to portfolio support in the assignment module improved
Portfolio API code in the assignment module expected that the current
user is the author of the submission. Therefore the "Export to
portfolio" button did not work when the submission was viewed by a
teacher (eg at the page with the list of all submissions in the Advanced
upload assignment).

This patch introduces a new callback argument 'submissionid' that holds
explicit ID of the submission the export deals with. With it available,
we do not need to expect the current user is the author of the
submission.

The patch also cleans some strings used for portfolio callback
exceptions.
2011-10-03 10:13:11 +02:00
David Mudrak f289c698a9 MDL-27857 Typo in the phpDocs fixed 2011-10-03 10:13:11 +02:00
David Mudrak daf4471a40 MDL-27857 Assignment does not use form tag to render portfolio export control widget
When this code was used as a part of the grading screen, the default
PORTFOLIO_ADD_FULL_FORM widget led to nested form elements. This patch replaces
the form widget with a plain text link that can be embedded safely.
2011-10-03 10:13:10 +02:00
Aparup Banerjee b056fee5ba MDL-26486 Lesson : fixed whitespace 2011-10-03 16:01:36 +08:00
Aparup Banerjee c6e321ccaf Merge branch 'MDL-26486_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-10-03 16:01:00 +08:00
Andrew Davis (andyjdavis) f6705d681a MDL-27640 rating: altered the return url provided by mod_data to ratings 2011-10-03 15:25:00 +08:00
Aparup Banerjee 30ed26a576 Merge branch 'wip-MDL-27867-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-10-03 14:29:46 +08:00
Aparup Banerjee 1e6c738c6c MDL-29541 Administration : fixed whitespace 2011-10-03 14:04:08 +08:00
Aparup Banerjee 4cb89f4df4 Merge branch 'wip-mdl-29244-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-10-03 13:54:09 +08:00
Rajesh Taneja 1f2d15dc62 MDL-29244 Users: Fixed filter for selecting users who never logged in and course roles dropdown show all revelent roles 2011-10-03 13:46:39 +08:00
Sam Hemelryk 7d9cb204be Merge branch 'MDL-29296_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-10-03 17:08:51 +13:00
Sam Hemelryk e6f5ebe25b Merge branch 'MDL-29605-M21' of git://github.com/lazydaisy/moodle into MOODLE_21_STABLE 2011-10-03 16:43:09 +13:00
Sam Hemelryk 6eeb293e04 Merge branch 'wip-mdl-29539-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-10-03 15:09:53 +13:00
Sam Hemelryk 124414cc5e MDL-28566 theme_base: removed MDL comment 2011-10-03 15:01:06 +13:00
Sam Hemelryk 69a62c2646 Merge branch 'MDL-28566-M21' of git://github.com/lazydaisy/moodle into MOODLE_21_STABLE 2011-10-03 14:37:54 +13:00
Sam Hemelryk add033dafe Merge branch 'MDL-29323-M21' of git://github.com/lazydaisy/moodle into MOODLE_21_STABLE 2011-10-03 14:30:12 +13:00
Sam Hemelryk 90e44b5068 Merge branch 'wip-MDL-25454-MOODLE_21_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_21_STABLE 2011-10-03 14:24:18 +13:00
Sam Hemelryk bf49e4404c Merge branch 'MDL-29558_2_1' of git://github.com/jamiepratt/moodle into MOODLE_21_STABLE 2011-10-03 14:04:47 +13:00
AMOS bot e4346a63ba Automatically generated installer lang files 2011-10-03 00:55:29 +00:00
Eloy Lafuente (stronk7) e438ff9942 MDL-29552 themes - show the name of the picked theme when working with device detection enabled 2011-10-03 13:30:09 +13:00
Sam Hemelryk ddf0d0dcd7 Merge branch 'MDL-29567_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-10-03 13:23:24 +13:00
Sam Hemelryk d85d6ccd3e Merge branch 'MDL-29566_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-10-03 12:49:54 +13:00
Sam Hemelryk bd90c5891f Merge branch 'MDL-29618_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-10-03 12:28:05 +13:00
Dan Poltawski e58c72d050 MDL-27295 Course Category View - Only display count when more than 0 courses 2011-10-03 11:52:09 +13:00
Eloy Lafuente (stronk7) 77be201a0f MDL-29618 backup - back to handling enrolments properly. Regession of MDL-26841, my fault, grrr 2011-10-03 00:47:28 +02:00
Sam Hemelryk 73a48291b3 MDL-28615 forum: Revised enrol_sharing_course to use the new enrol_get_shared_courses and fixed permission checking in forum_user_can_see_post 2011-10-03 11:23:56 +13:00
Mary Evans cb7699c3a9 MDL-29605-modify Afterburner menu to allow auto format 2011-10-01 23:20:29 +01:00
Tim Hunt 22ba72591c MDL-29216 multianswer qtype needs intereactive elements on the form. 2011-10-01 00:09:27 +01:00
Tim Hunt 41be2f3587 MDL-29341 qtype numerical/calc: display of mc units badly laid out. 2011-09-30 23:42:27 +01:00
Kordan 7bbad2e268 MDL-29403 fix for M21 2011-09-30 11:15:52 +02:00
Jamie Pratt fc15f0837a MDL-29558 question preview: limit variants drop-down to the first 100
In situations when question has many variants.
2011-09-30 09:43:26 +07:00
Mary Evans 9d0cc2cb4c MDL-29323-FIX invalid border style 2011-09-30 03:16:32 +01:00
AMOS bot f058ea24c9 Automatically generated installer lang files 2011-09-30 00:55:21 +00:00
Tim Hunt b99d21aaa9 MDL-29511 cannot review previous steps of a question attempt since MDL-28679. 2011-09-29 21:53:41 +01:00
Tim Hunt 778854eef5 MDL-29511 Fix problems on the quiz review questions page found while investigating this bug. 2011-09-29 21:53:40 +01:00
Marina Glancy 5c6377900a MDL-25454: using the faster way to check if record exists in db 2011-09-29 17:06:37 +08:00
Andrew Davis (andyjdavis) a00b84e864 MDL-28725 wiki: added urlencode around the section variable when it is being used to construct URLs 2011-09-29 16:49:52 +08:00
Andrew Davis (andyjdavis) 667ffef155 MDL-28725 wiki: added missing string
AMOS BEGIN
 CPY [invalidsection,core_admin],[invalidsection,mod_wiki]
AMOS END
2011-09-29 16:49:43 +08:00
Tim Hunt 8258ddff3b MDL-29570 Quiz editing page displays the wrong time in the status line sometimes. 2011-09-29 09:06:41 +01:00
Rossiani Wijaya 03fb10da20 MDL-26486 lesson mod: fixed grade report error on matching and shortanswers questions. 2011-09-29 13:05:50 +08:00
Ankit Kumar Agarwal 342f224f03 MDL-19575 Global Search Adding capability checks to the search and stat pages 2011-09-29 09:09:54 +05:30
Marina Glancy 0623443356 MDL-25454 before skipping course backup make sure that there are no change entries in it's log during the last month. Store the nextstarttime even for courses that were not backed up 2011-09-29 10:02:08 +08:00
Rajesh Taneja 4a313905bc MDL-29539 HTML Editor: Fixed XHTML formatting for editor 2011-09-29 09:36:22 +08:00
Sam Hemelryk 9c36051feb MDL-28615 mod_forum: Fixed the users page that shows all of the users posts 2011-09-29 14:21:15 +13:00
Sam Hemelryk fa447a513e MDL-25697 theme_base: Improved the alignment of the activity editing icons on the course frontpage 2011-09-29 14:15:24 +13:00
AMOS bot 037afad8c3 Automatically generated installer lang files 2011-09-29 00:55:41 +00:00
Eloy Lafuente (stronk7) 72a32ea968 MDL-29567 postgresql - handle negative defaults in numerical cols properly 2011-09-29 01:22:31 +02:00
Eloy Lafuente (stronk7) 21973a92a4 MDL-29567 unit tests - add some tests to cover negative defaults in numerical cols 2011-09-29 01:22:21 +02:00
Eloy Lafuente (stronk7) af9a00d398 MDL-29566 mysql - length / decimal specs in float columns are optional 2011-09-29 00:33:18 +02:00
Eloy Lafuente (stronk7) 3264974513 MDL-29566 unit tests - add some tests to cover get_columns() with number/float columns 2011-09-29 00:33:15 +02:00
Sam Hemelryk 214784a4af MDL-27867 course: Course and category theme selectors no longer show theme's that should be hidden from the selector 2011-09-29 10:47:52 +13:00
Mary Evans b15ab7630c MDL-28566 - Fix for participants user details 2011-09-28 15:45:20 +01:00
Eloy Lafuente (stronk7) 3973662145 weekly release 2.1.1+ 2011-09-28 11:08:00 +02:00
Eloy Lafuente (stronk7) f7bb84df23 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-09-28 11:04:28 +02:00
AMOS bot fc316236f5 Automatically generated installer lang files 2011-09-28 00:55:21 +00:00
Aparup Banerjee e9be98eed2 Merge branch 'MDL-29230_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-09-27 15:00:49 +08:00
Aparup Banerjee ca92a99a2e Merge branch 'MDL-25241_forum_search_ratings_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-09-27 11:35:44 +08:00
Sam Hemelryk d021250bf0 Merge branch 'm21_MDL-29519' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-09-27 14:09:50 +13:00
Eloy Lafuente (stronk7) 2b4dcfdcbd Merge branch 'MDL-28686-21' of git://github.com/bostelm/moodle into MOODLE_21_STABLE 2011-09-27 00:54:49 +02:00
Sam Hemelryk fe245b725b Merge branch 'MDL-28424_21' of git://github.com/timhunt/moodle.git with changes 2011-09-27 11:26:37 +13:00
Eloy Lafuente (stronk7) 3dba01a40f Merge branch 'w38_MDL-29535_m21_filters' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-09-26 23:57:30 +02:00
Petr Skoda 5cac28fb2b MDL-29535 fix support for custom filter settings in contrib filters 2011-09-26 23:49:58 +02:00
Eloy Lafuente (stronk7) dc110687c8 Merge branch 'MDL-29462_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 22:42:09 +02:00
Eloy Lafuente (stronk7) 0518140c31 Merge branch 'MDL-28202_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 22:28:47 +02:00
Eloy Lafuente (stronk7) 4d7a9cd8f5 Merge branch 'MDL-29427_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 22:01:35 +02:00
Eloy Lafuente (stronk7) ba1afa0d95 Merge branch 'MDL-29528_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 21:44:49 +02:00
Tim Hunt f8431a1933 MDL-29528 qtype multichoice and caclulated combined feedback format overwritten during upgrade. 2011-09-26 13:39:11 +01:00
Aparup Banerjee 3cef27bf9f Merge branch 'MDL-29270-question-grade_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-09-26 17:04:28 +08:00
Rossiani Wijaya 9551f03606 MDL-29296 lesson mod: fixed regression for continue button on last lesson page. 2011-09-26 16:40:39 +08:00
Aparup Banerjee 8daff43635 Merge branch 'wip-MDL-29487-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-09-26 16:01:11 +08:00
Aparup Banerjee e90206aaa4 Merge branch 'MDL-29464_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 14:49:21 +08:00
Aparup Banerjee b967bf6005 Merge branch 'MDL-29333_rating_ajax_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-09-26 14:07:25 +08:00
Sam Hemelryk ded9134e03 Merge branch 'MDL-29428_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 14:04:15 +13:00
AMOS bot 9d7b02bec0 Merge branch 'MOODLE_21_STABLE' into install_21_STABLE 2011-09-26 00:55:32 +00:00
Sam Hemelryk d496829c61 Merge branch 'MDL-29484_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 13:55:27 +13:00
Sam Hemelryk 9c43f8f7e1 Merge branch 'MDL-29493_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-26 13:48:11 +13:00
Dan Marsden 7af777217d MDL-29519 move plagiarism cron to after event queue 2011-09-26 13:16:28 +13:00
Sam Hemelryk 585bd02479 Merge branch 'MDL-29336-numerrors-mapping-21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-09-26 12:36:46 +13:00
Sam Hemelryk d7749a10a6 Merge branch 'MDL-29478_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-09-26 10:53:10 +13:00
Sam Hemelryk 65072bfdc2 Merge branch 'MDL-29139_m21' of git://github.com/nebgor/moodle into MOODLE_21_STABLE 2011-09-26 10:45:40 +13:00
Sam Hemelryk 9f05075c61 Merge branch 'MDL-29190_21_wip' of git://github.com/grabs/moodle into MOODLE_21_STABLE 2011-09-26 10:39:26 +13:00
Jean-Michel Vedrine ef4cf39174 MDL-29270 Fixed question bank backup converter (field rename) 2011-09-25 23:30:40 +02:00
Eloy Lafuente (stronk7) 7294a0649b weekly release 2.1.1+ (emergency) 2011-09-25 17:26:40 +02:00
Eloy Lafuente (stronk7) 9c49600397 MDL-29512 Revert "MDL-25937 Froms Library: Added server side validation for filepicker and filemanager"
This reverts commit b19539bf44.
2011-09-25 17:14:47 +02:00
Eloy Lafuente (stronk7) 0a5afc0583 MDL-29512 Revert "MDL-25937 Forms Library: Added Javascript validation for filepicker and filemanager. Also fixed disbledif rule check for both"
This reverts commit 1f552b4c48.
2011-09-25 17:14:33 +02:00
AMOS bot 2de4e3872c Automatically generated installer lang files 2011-09-25 00:55:21 +00:00
AMOS bot d73581da42 Automatically generated installer lang files 2011-09-24 00:55:24 +00:00
Andreas Grabs dbd388acef MDL-29190 - XHTML not well formed in show_nonrespondents.php 2011-09-23 18:54:18 +02:00
Tim Hunt 51fd4dd261 MDL-29493 questions should be createable with defaultmark a float. 2011-09-23 12:52:39 +01:00
Tim Hunt dddcaf6b6b MDL-29484 qformat xml tests failing. 2011-09-23 12:09:31 +01:00
Sam Hemelryk 8710d49bec MDL-29487 enrol: Fixed typo in enrol_sharing_course 2011-09-23 18:18:10 +12:00
Rossiani Wijaya a672bd8ad5 MDL-29230 lesson_module: fixed question's answer to have 0 value. 2011-09-23 14:10:12 +08:00
Eloy Lafuente (stronk7) 4d1e35d8c0 MDL-29478 unittest - fix rating tests so they can be executed with accesslib caches cleaned 2011-09-23 01:48:09 +02:00
Eloy Lafuente (stronk7) 7bfc279ffb MDL-29478 unittest - explicity include blog/lib.php. Was causing "random" errors 2011-09-23 01:37:58 +02:00
Eloy Lafuente (stronk7) cb59f50fb8 MDL-29478 blog - fixed some recent regressions introduced by MDL-29186 2011-09-23 00:06:10 +02:00
Tim Hunt 5d81093e3c MDL-29427 quiz nav: information items should should have a state tooltip 2011-09-22 18:13:11 +01:00
Tim Hunt a9384ab0d0 MDL-29428 quiz navigation panel should use 'This page' (accessibility improvement) 2011-09-22 17:56:35 +01:00
Kyle Temkin 18d81bdb3c MDL-28202 qtype_calculated fix edge case in the rounding code. 2011-09-22 12:14:44 +01:00
Andrew Davis (andyjdavis) 4b5c0b461c MDL-25241 forum: reimplemented the display of ratings on the forum search page 2011-09-22 15:30:05 +08:00
Aparup Banerjee 0047a8f47d MDL-29139 Forms Library : fixed missing require_once 2011-09-22 14:56:40 +08:00
David Mudrak a39eb49fc2 MDL-29336 Saving grade mapping table in the Workshop
The Workshop module using the "Number of errors" grading strategy did
not save all items in the grade mapping table. If some assessment form
fields have weight > 1, the number of possible errors is greater that
the number of the assessment form fields. The previous code deleted all
mappings where the number of errors was greater than the number of
fields.

In this patch, the maximum number of possible errors is calculated as a
sum of weights of all fields. Only mappings over this maximum are
deleted now.
2011-09-22 05:17:44 +02:00
Andrew Davis (andyjdavis) cfb909d013 MDL-29333 rating: prevent the ratings JS from being intialized multiple times 2011-09-22 10:23:26 +08:00
Andrew Davis (andyjdavis) 81fa243ea4 MDL-29333 rating: refactored the ratings ajax 2011-09-22 10:23:15 +08:00
AMOS bot 747d4d3e25 Automatically generated installer lang files 2011-09-22 00:55:33 +00:00
Tim Hunt 74ca90e5fb MDL-29464 quiz add random question popup does not update sumgrades. 2011-09-21 16:43:05 +01:00
Tim Hunt 4e92a71fb3 MDL-29462 html_to_text('0') gives '', not '0'. 2011-09-21 16:42:33 +01:00
Tim Hunt e6674da8ff MDL-28424 Reviewing a quiz in 'secure mode' gives a fatal error.
The problem was when output was being started in relation to when the fake block was added.

Took the opportunity to clean up the quiz renderer API a bit.
2011-09-21 16:41:36 +01:00
Eloy Lafuente (stronk7) 136fa79e34 weekly release 2.1.1+ 2011-09-21 17:11:46 +02:00
Eloy Lafuente (stronk7) 06a22aecb7 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-09-21 17:04:43 +02:00
AMOS bot f7cf17a853 Automatically generated installer lang files 2011-09-21 00:55:20 +00:00
Eloy Lafuente (stronk7) e63827ad98 Merge branch 'MDL-26567_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-21 00:11:14 +02:00
Tim Hunt 84de2336fb MDL-26567 no grade category option on the quiz settings form.
Also, refine the standard_grading_coursemodule_elements method to add a
help string.

AMOS BEGIN
 CPY [gradecategory,grades],[gradecategoryonmodform,grades]
AMOS END
2011-09-20 12:15:07 +01:00
Eloy Lafuente (stronk7) 7f0d91d546 Merge branch 'wip-mdl-29079-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-09-20 09:51:18 +02:00
Aparup Banerjee 14312ebc6a Merge branch 'MDL-26890-m21' of git://github.com/ankitagarwal/moodle into MOODLE_21_STABLE 2011-09-20 13:17:00 +08:00
Ankit Kumar Agarwal 292faa4f7d Forums check on filesize if the file is added to the forum from private area 2011-09-20 10:05:36 +05:30
Rajesh Taneja e93bb0ca52 MDL-29079 Administration: Added space on both sides of locked checkbox and for rtl language space will be applied accordingly 2011-09-20 11:50:46 +08:00
Aparup Banerjee a886ad10ea Merge branch 'wip-mdl-28726-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-09-20 10:20:38 +08:00
Sam Hemelryk c4b234ec54 Merge branch 'MDL-26841_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-09-20 12:13:48 +12:00
Sam Hemelryk 6831c9ff36 Merge branch 'MDL-29392_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-20 11:58:23 +12:00
Colin Chambers 6a49c01825 MDL-29394 form editor - Use hidden field when only 1 format option is available #947 2011-09-20 00:36:35 +02:00
Eloy Lafuente (stronk7) 0ff54e134f Merge branch 'wip-mdl-29079-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-09-20 00:17:42 +02:00
Eloy Lafuente (stronk7) 5af8bbf854 Merge branch 'MDL-28679_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-20 00:04:17 +02:00
Eloy Lafuente (stronk7) 75ebacb1ec Merge branch 'MDL-29126_export_separator_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-09-19 23:37:49 +02:00
M Kassaei 1859247e0c MDL-29392 grade/report/index.php should use $CFG->grade_profilereport 2011-09-19 11:32:18 +01:00
Eloy Lafuente (stronk7) f199117f05 MDL-26841 backup - prevent any enrolments info to be handled in IMPORT/HUB operations 2011-09-19 11:24:24 +02:00
Aparup Banerjee bc24c20388 Merge branch 's13_MDL-29036_ws_upload_21' of git://github.com/dongsheng/moodle into MOODLE_21_STABLE 2011-09-19 16:13:31 +08:00
Dongsheng Cai 4e970a5335 MDL-29036 WEBSERVICE : webservice upload script should respect maxbytes and userquota settings 2011-09-19 15:29:13 +08:00
Sam Hemelryk 955f15a71f Merge branch 'MDL-29366_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-19 19:20:17 +12:00
Sam Hemelryk 5585910ea7 Merge branch 'MDL-28329_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-19 18:36:55 +12:00
Rajesh Taneja 1b17be9050 MDL-29079 Administration: Added space between checkboxes on general backup setting page 2011-09-19 13:35:56 +08:00
Sam Hemelryk 26c28d0821 Merge branch 'wip-mdl-25937-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-09-19 17:00:40 +12:00
Aparup Banerjee 8104e0f2df Merge branch 's13_MDL-28509_youtube_21' of github.com:dongsheng/moodle into MOODLE_21_STABLE 2011-09-19 12:15:00 +08:00
Dongsheng Cai 4ded0afd16 MDL-28509 repository : fixed youtube repository search keyword 2011-09-19 11:57:14 +08:00
Mark Johnson 2e348a6643 MDL-28509 repository_youtube Enable selection of sort order 2011-09-19 11:57:01 +08:00
Petr Skoda 84cae7bef8 MDL-29406 fix greedy config settings cleanup 2011-09-19 13:33:08 +12:00
Sam Hemelryk 3d2029f3d4 Merge branch 'MDL-29360_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-09-19 11:57:58 +12:00
KNDeepa 9acc5736a8 MDL-28329 local_qeupgradehelper make cron work. 2011-09-16 18:44:06 +01:00
Tim Hunt 08d1ba7106 MDL-28679 question response history displays states incorrectly. 2011-09-16 16:05:59 +01:00
Tim Hunt e9197a3711 MDL-29366 qtype_essay import/export as Moodle XML loses files from graderinfo 2011-09-16 12:00:40 +01:00
Tim Hunt 4394f91b26 MDL-29360 quiz comment.php has broken JS for the Cancel button.
This swtichest it to more modern YUI3 approach.
2011-09-16 12:00:03 +01:00
Tim Hunt 25aa44ea97 MDL-28259 Individual answers Feedback not shown in Cloze questions 2011-09-16 11:59:02 +01:00
Rajesh Taneja f9d4ab44e0 MDL-28726 wiki-2.0: Fixed XSS in wiki comments 2011-09-16 11:10:27 +08:00
Rajesh Taneja 1f552b4c48 MDL-25937 Forms Library: Added Javascript validation for filepicker and filemanager. Also fixed disbledif rule check for both 2011-09-16 09:18:23 +08:00
Rajesh Taneja b19539bf44 MDL-25937 Froms Library: Added server side validation for filepicker and filemanager 2011-09-16 09:18:23 +08:00
Eloy Lafuente (stronk7) ce0cb2451b weekly release 2.1.1+ 2011-09-16 01:38:33 +02:00
Eloy Lafuente (stronk7) 929c1e4a8b Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-09-16 01:34:34 +02:00
Eloy Lafuente (stronk7) 7923d63b16 MDL-29093 auth - help string now specifies MNet exception. Thanks Helen! 2011-09-14 11:37:31 +02:00
Eloy Lafuente (stronk7) efb0aacf37 MDL-29093 auth - help string changed to VBFET suggestion
(very best favourite english translator, aka. Helen :-P)
2011-09-14 10:12:17 +02:00
Sam Hemelryk 9e312ed269 MDL-29188 course_formats Fixed up formatting of section name within navigation 2011-09-14 11:41:36 +12:00
Sam Hemelryk 6aa9352f66 MDL-29093 - Authentication improved new setting name and strings 2011-09-14 00:30:26 +02:00
Iñaki Arenaza 2023ca1f0f MDL-29093 - Authentication for authentication only, not for user creation
There are cases when a moodle installation needs to only deal
user authentication and not user creation (this is especially
interesting when using external authentication sources such as LDAP,
CAS, etc.)

Add an option to prevent automatic user creation if the administrator
does't want users to be automatically created.

Signed-off-by: Iñaki Arenaza <iarenaza@mondragon.edu>
2011-09-14 00:30:17 +02:00
Petr Skoda 6f1156a6c2 MDL-29295 do not use strtok in dml and ddl layers
This prevents clobbering of internal pointer when code calling DML
uses strtok too. Unit test added to prevent future uses.
2011-09-14 00:21:33 +02:00
Aparup Banerjee a7cb1e62f4 MDL-26257 Authentication : whitespace/style fixes 2011-09-13 19:15:48 +08:00
Aparup Banerjee edb8077e7b Merge branch 'MDL-26257-21' of git://github.com/bostelm/moodle into MOODLE_21_STABLE 2011-09-13 19:11:49 +08:00
Aparup Banerjee d8f2500f46 Merge branch MDL-29186-m21 of git://github.com/samhemelryk/moodle
- resolved conflicts, minor whitespace and fixed quote.
    - note: textlib_get_instance() is already deprecated
2011-09-13 16:19:47 +08:00
Aparup Banerjee 6519a7769d Merge branch MDL-29187-m21 of git://github.com/samhemelryk/moodle
- resolved conflict.
2011-09-13 13:54:43 +08:00
Aparup Banerjee 995b4d16cd Merge branch 'wip-MDL-29188-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-09-13 13:33:56 +08:00
Aparup Banerjee 717c3395be Merge branch 'wip-MDL-29189-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-09-13 11:45:51 +08:00
Sam Hemelryk 6bc526319e Merged branch '28595_m22_installcontinue' of git://github.com/skodak/moodle with changes 2011-09-13 15:35:27 +12:00
Sam Hemelryk b3c64930ff MDL-29189 course Minor fixups after code review 2011-09-13 11:19:17 +12:00
Andrew Davis (andyjdavis) a6f388c664 MDL-22232 messaging: added the ability to temporarily disable notifications to a particular user 2011-09-12 20:24:08 +12:00
Sam Hemelryk 90d14d089c Merge branch 'MDL-29211_M21' of git://github.com/kordan/moodle into MOODLE_21_STABLE 2011-09-12 19:49:26 +12:00
kordan 9d8dbe645c MDL-29211 fox for MOODLE_21_STABLE 2011-09-12 09:40:08 +02:00
Sun Zhigang 937e0a23d9 MDL-29112 trigger event mod_deleted after deleting mod through AJAX 2011-09-12 17:36:10 +12:00
Aparup Banerjee 910671644c MDL-28724 wiki : Fixed bugs in wiki forms 2011-09-12 17:27:56 +12:00
Petr Skoda 9e6ef6ccc2 MDL-29131 fix multiple groups issues on the recent activity report 2011-09-12 17:08:58 +12:00
Sam Hemelryk 4a277f4f4e Merge branch 'w36_MDL-29306_m21_dbenrolroles' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-09-12 15:30:33 +12:00
Sam Hemelryk 786a905607 Merge branch 'w36_MDL-29292_m21_featuretypo' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-09-12 15:17:25 +12:00
Sam Hemelryk 20ff7e3279 Merge branch 'MDL-27635_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-09-12 14:39:22 +12:00
Sam Hemelryk 2513a2b24f Merge branch 'w36_MDL-29312_m21_cookieless' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-09-12 14:25:02 +12:00
Rossiani Wijaya 4966b0ee71 MDL-27635 hub component: fixed default value for 'secret' field in 'registration_hubs' table 2011-09-12 10:21:45 +08:00
Sam Hemelryk 18fc309097 Merge branch 'MDL-28488_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-09-12 13:20:47 +12:00
kordan 3bfe7ce57a MDL-29056 theme-formal_white fix for the report pagelayout that was preventing horizontal scroll 2011-09-12 13:03:02 +12:00
Eloy Lafuente (stronk7) 366c19fabd MDL-28488 backup - conditionaly apply defaults based on mode
Some modes of backup cannot be preloaded with general backup
settings because they may conflict with the definitions required/set
by the mode (for example, import backups are, by definition, without
users always, so we cannot apply one default in the opposite direction).

So, after the patch, current general_backup setting will be only applied
to general backups, import/hub modes won't be using any default and
automated backup defaults should be loaded here (TODO)
2011-09-11 21:57:00 +02:00
Eloy Lafuente (stronk7) 56a1642c5b MDL-28488 backup - '[backup|restore]:configure cap does not control import mode anymore 2011-09-11 21:56:45 +02:00
Eloy Lafuente (stronk7) 9d74bab3bc MDL-28488 backup - fixup some strings and delete legacy ones 2011-09-11 21:56:31 +02:00
Eloy Lafuente (stronk7) 993261dcff MDL-28488 backup - make backup and import capabilities independent
Before this change, in order to perform one course import it was
necessary to have both the backupcourse and the backuptargetimport
capabilities. After agreement now each one will control its own
backup mode. Same applies for restore.
2011-09-11 21:56:13 +02:00
Eloy Lafuente (stronk7) 4b5233f9c4 MDL-28488 backup - activity duplication requires 2 capabilities in ctx 2011-09-11 21:55:43 +02:00
Petr Skoda 0cf269c1fc MDL-29292 fix feature typo
Credit goes to Raminder Singh.
2011-09-11 12:49:16 +02:00
Petr Skoda e1e082a809 MDL-29312 prevent cookieless mode for security reasons 2011-09-11 10:07:27 +02:00
AMOS bot 8cd0f221b6 Automatically generated installer lang files 2011-09-11 00:55:40 +00:00
Petr Skoda 94a720f287 MDL-28595 explain the need to install into new db if something fails during the initial install 2011-09-11 00:08:23 +02:00
Petr Skoda f6090a3531 MDL-28595 do not print continue link if install fails 2011-09-11 00:08:20 +02:00
Petr Skoda 3dfac46e97 MDL-29306 support multiple roles in ext enrol db 2011-09-10 23:34:06 +02:00
AMOS bot 3119ba9a2a Automatically generated installer lang files 2011-09-10 00:55:20 +00:00
AMOS bot 74743b5e48 Automatically generated installer lang files 2011-09-09 00:55:20 +00:00
Henning Bostelmann 033a066e4f MDL-26257 Shibboleth auth: run logout handler only if logged in via Shibboleth 2011-09-08 11:53:44 +01:00
AMOS bot 8ede1d5121 Automatically generated installer lang files 2011-09-08 00:55:31 +00:00
Sam Hemelryk 0347dd4d70 MDL-29186 multilang Reviewed the uses of course fullname and ensured things were being formatted consistently 2011-09-08 09:39:00 +12:00
Sam Hemelryk 5da6f4eeb6 MDL-29187 multilang Reviewed the uses of category name and ensured things are being formatted correctly 2011-09-08 09:36:55 +12:00
Sam Hemelryk 34c46428f1 MDL-29189 mutlilang Reviewed the uses of course shortname and ensured things are being formatted consistently 2011-09-08 09:30:10 +12:00
Sam Hemelryk 9ec4220c84 MDL-29188 multilang Reviewed the uses of section name and ensured things were being formatted consistently 2011-09-08 09:27:55 +12:00
Eloy Lafuente (stronk7) 22e8ad6134 weekly release 2.1.1+ 2011-09-07 17:55:05 +02:00
Eloy Lafuente (stronk7) 0780ba7ca7 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-09-07 17:49:21 +02:00
Eloy Lafuente (stronk7) 06b66d530b Merge branch 'wip-MDL-28043-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-09-06 13:56:08 +02:00
Eloy Lafuente (stronk7) 57d30b5276 Merge branch 'wip-mdl-28987-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-09-06 01:59:49 +02:00
Sam Hemelryk a640301b81 MDL-28043 user Fixed context hack in pluginfile for user pics leading to init of page, theme and output for redirect 2011-09-06 11:29:44 +12:00
Eloy Lafuente (stronk7) 593b4518ad Merge branch 'wip-mdl-23520-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-09-06 01:27:51 +02:00
Eloy Lafuente (stronk7) abaff947c6 Merge branch 'wip-MDL-29006-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-09-06 00:38:38 +02:00
Eloy Lafuente (stronk7) ae115cf229 Merge branch 'w35_MDL-29145_m21_imscpregression' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-09-05 21:52:08 +02:00
Eloy Lafuente (stronk7) 152ee16812 MDL-29072 Import course - whitespace fixes 2011-09-05 10:42:55 +02:00
Petr Skoda ed2448a342 MDL-29145 fix regression caused by MDL-27448 2011-09-05 09:47:09 +02:00
Rajesh Taneja 48f6a80092 MDL-28987 Forms Library: Removed onBlur validation. Now the validation will occur on form submit only 2011-09-05 14:26:19 +08:00
Iñaki Arenaza 85f5ab3145 MDL-27689 Vague README-LDAP file in auth/ldap
README-LDAP referes to a file that was renamed (to auth.php) in Moodle
1.8 and no longer exists. Make clear what file we are referring to.
2011-09-05 13:31:41 +08:00
Aparup Banerjee 26cfc10584 Merge branch 'wip-MDL-26811-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-09-05 13:18:52 +08:00
Aparup Banerjee 5f856fdfe9 Merge branch 'MDL-29198_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-09-05 12:52:15 +08:00
Rajesh Taneja 0d7dcbf1ae MDL-28987 Forms Library: Added tinyMCE onblur event callback for required tinymce fields 2011-09-05 12:21:55 +08:00
Rajesh Taneja 6786f79ab4 MDL-28987 Forms Library: Added tinyMCE save for tinymce editor validation 2011-09-05 12:21:49 +08:00
Adam Olley a010bfe63d MDL-28987: Affix [text] to editor element in JS validation and add blur event 2011-09-05 12:21:43 +08:00
Sam Hemelryk 3cabe2de8c Merge branch 'MDL-29018_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-09-05 16:08:07 +12:00
Sam Hemelryk 7ecabfdce4 Merge branch 'MDL-28689_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-09-05 16:03:08 +12:00
Rossiani Wijaya c8fa99de72 MDL-29018 lesson module statistics: fixed statistics diplay for whole the class 2011-09-05 11:16:33 +08:00
Henning Bostelmann 02aac22ff8 MDL-29072 Import course: Use correct capability for course selection 2011-09-05 13:41:34 +12:00
Sam Hemelryk 05956888d7 Merge branch 'MDL-27975_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-09-05 13:37:33 +12:00
Sam Hemelryk caff2aa640 Merge branch 's13_MDL-29170_risklevel_21' of git://github.com/dongsheng/moodle into MOODLE_21_STABLE 2011-09-05 11:13:17 +12:00
AMOS bot 5031249d84 Automatically generated installer lang files 2011-09-03 00:55:20 +00:00
Eloy Lafuente (stronk7) 3c7a83744e MDL-28080 DML unit tests - cover tweak_param_names() and the new 30 chars limit exception 2011-09-01 19:59:13 +02:00
Eloy Lafuente (stronk7) 436135f52a MDL-28080 oracle - avoid tweak_param_names() tweaking too much :-P
Sometimes the (oracle only) tweak_param_names() method was causing
placeholders having > 28 chars length to exceed the 30 chars limit
imposed by Oracle. With this commit the tweak is performed by
replacement for such long placeholders and, at the same time, the
tweak has been commented out from insert/update because it is not
necessary there (placeholders are safe column name always)
2011-09-01 19:59:13 +02:00
Tim Hunt 41f17b384f MDL-28080 coding_exception for over-long placeholder names. 2011-09-01 19:59:12 +02:00
Rossiani Wijaya 47b9f44c6f MDL-27975 community block: fixed string typo 2011-09-01 17:10:29 +08:00
Eloy Lafuente (stronk7) 7a8a938077 MDL-29198 DB - make delete_records transactional safe when needed 2011-09-01 11:08:09 +02:00
Rossiani Wijaya e3a6a3878e MDL-28689 chat module: add input.png file. This is a simple fix by copying the file from bubbles themes. Proper fix should be done in the future 2011-09-01 16:27:13 +08:00
Andrew Davis (andyjdavis) 35dd29564b MDL-29126 gradebook: made text export with tabs as separator work 2011-09-01 15:32:27 +08:00
Dongsheng Cai 5c71cfca6a WEBSERVICE MDL-29170 reduce createmobiletoken capability risk level 2011-09-01 11:03:47 +08:00
AMOS bot e5df0e3e17 Automatically generated installer lang files 2011-09-01 00:55:25 +00:00
Rajesh Taneja 6b94a62ff8 MDL-23520 mod-wiki-2.0: Added delete page and version feature as it was in 1.9 2011-08-31 13:54:16 +08:00
Sam Hemelryk e9a574454c MDL-29006 block_html Added formatted to title printed on editing form when a hard freeze is in effect 2011-08-31 11:46:44 +12:00
Eloy Lafuente (stronk7) ddf322586e weekly release 2.1.1+ 2011-08-31 01:33:29 +02:00
Sam Hemelryk ed9041c9ce MDL-26811 upgrade Fixed up default handling causing exception on upgrade of used site in MSSQL 2011-08-31 11:33:29 +12:00
Eloy Lafuente (stronk7) 3853dc585c Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-08-31 01:29:39 +02:00
Aparup Banerjee 132c116509 MDL-29005 blocks : clarified comment 2011-08-30 11:20:38 +08:00
Aparup Banerjee 97dd4ec539 Merge branch 'MDL-29005_MOODLE_21_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_21_STABLE 2011-08-30 11:19:57 +08:00
Eloy Lafuente (stronk7) 5266e929da MDL-28489 site news forum - support multilang filter 2011-08-30 11:06:57 +12:00
Eloy Lafuente (stronk7) 9c89f307f8 Merge branch 'MDL-29141_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 13:01:57 +02:00
Eloy Lafuente (stronk7) 4524a47a0a Merge branch 'wip-MDL-24202-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-08-29 10:30:59 +02:00
Aparup Banerjee 7816f5acb0 Merge branch 'MDL-29144_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 12:01:41 +08:00
Sam Hemelryk ce4285c883 Merge branch 'MDL-28564_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 13:59:26 +12:00
Sam Hemelryk 208b9e2a50 MDL-24202 navigation Fixed bug caused by navigation overriding a CFG setting 2011-08-29 13:45:36 +12:00
Eloy Lafuente (stronk7) 5a8f177c73 Merge branch 'MDL-28943_manage_message_name_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-08-29 03:26:41 +02:00
Eloy Lafuente (stronk7) fa3dff1318 Merge branch 'MDL-26302_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 03:23:28 +02:00
Sam Hemelryk a4ad64950b Merge branch 'MDL-26819_21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-08-29 13:05:22 +12:00
Sam Hemelryk 6870b5dcbb Merge branch 'dev_MDL-27289_boxnet_21' of git://github.com/dongsheng/moodle into MOODLE_21_STABLE 2011-08-29 12:54:40 +12:00
Eloy Lafuente (stronk7) 6e582f1632 Merge branch 'MDL-29064_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 02:52:55 +02:00
Eloy Lafuente (stronk7) 3bdb9bfd54 Merge branch 'MOODLE_21_STABLE' of git.moodle.org:/git/integration into MOODLE_21_STABLE 2011-08-29 02:41:27 +02:00
Eloy Lafuente (stronk7) 1dd41f0eb1 Merge branch 'MDL-29062_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 02:40:08 +02:00
Sam Hemelryk 78b19caf0a Merge branch 'MDL-29135-mnet-login_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-08-29 12:24:57 +12:00
Eloy Lafuente (stronk7) 4984e712e6 Merge branch 'MDL-29111_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-29 02:02:55 +02:00
David Mudrak 174245497e MDL-29148 MNet - improved handling of a verification function return code 2011-08-29 01:48:41 +02:00
Eloy Lafuente (stronk7) 119b895133 Merge branch 'wip_MDL-16168_2.1_CAS_crash_if_no_LDAP' of https://github.com/iarenaza/moodle into MOODLE_21_STABLE 2011-08-29 01:33:03 +02:00
Eloy Lafuente (stronk7) 04dc7f877b Merge branch 'MDL-25872-21' of git://github.com/bostelm/moodle into MOODLE_21_STABLE 2011-08-29 01:22:42 +02:00
Iñaki Arenaza 5e7d9e3e36 MDL-28402 LDAP configuration values being stored in lower case, causing misconfiguration
It looks like array_change_key_case() does not work recursively, so we
were not actually lowercasing the expiration attribute key. As the
configuration setting is always lowercase they didn't match.
2011-08-29 01:08:42 +02:00
Eloy Lafuente (stronk7) c24ccde07f MDL-26819 quiz statistics - use cross-db GROUP BY expression 2011-08-28 22:16:11 +02:00
Iñaki Arenaza b38bcc3a1d MDL-16168 auth/cas CAS crashes if no LDAP is set up
Fix was pending for Moodle 2.1. Credit goes to Ivan Dackiewicz.
2011-08-28 15:32:32 +02:00
David Mudrak 9b81b37eb9 MDL-27107 auth_mnet - consider all incoming roaming users as confirmed
The 'confirmed' field can't be optional. If the identity provider did
not export it, the new remote user would be created with 'confirmed' set
to default zero and as such could be a subject of scheduled deletion.
2011-08-28 02:36:38 +02:00
David Mudrak 2f2cf818c2 MDL-29135 Reworded login prompt with SSO over MNet enabled 2011-08-27 18:24:55 +02:00
AMOS bot ed32596d3a Automatically generated installer lang files 2011-08-27 00:55:41 +00:00
M Kassaei 9651053bb4 MDL-29144 quiz navigation: Screen-readers speak question state twice 2011-08-26 19:10:54 +01:00
Tim Hunt 15e6246359 MDL-29111 quiz was passing 0 to ->review_url when it should have been null. 2011-08-26 18:16:57 +01:00
Henning Bostelmann b1a24c1eb0 MDL-25872 View assignment submissions: show only students, not teachers
Fixing incorrect capability reference mod/assignment:view to ...:submit
2011-08-26 17:34:35 +01:00
Tim Hunt 362d5c1ed1 MDL-29141 question bank show question text checkbox does not match state. 2011-08-26 17:01:52 +01:00
Henning Bostelmann d5ae2ed112 MDL-28686 QE2 upgrade: recognize manually graded, deleted questions 2011-08-26 14:37:49 +01:00
Eloy Lafuente (stronk7) e4527c5497 weekly release 2.1.1+ 2011-08-26 15:09:00 +02:00
Eloy Lafuente (stronk7) 200cb06bfc Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-08-26 14:56:52 +02:00
Eloy Lafuente (stronk7) 97e4e3953a MDL-28684 QE2 upgrade: fix undefined $a regression. Thanks Henning! 2011-08-25 15:54:41 +02:00
Eloy Lafuente (stronk7) ee4dee99e8 Merge branch 'MDL-27823_bulk_messaging_2_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-08-25 10:46:11 +02:00
AMOS bot 7adfd55ec2 Automatically generated installer lang files 2011-08-25 00:55:21 +00:00
Eloy Lafuente (stronk7) efc2de0e97 Merge branch 'MDL-28650-MOODLE-21-STABLE' of https://github.com/mouneyrac/moodle into MOODLE_21_STABLE 2011-08-25 01:15:49 +02:00
Eloy Lafuente (stronk7) ddec658859 Merge branch 'MDL-28684_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-24 17:12:18 +02:00
Tim Hunt e9f707d38a MDL-28684 fix failing unit test - which means fix the acutal code.
Sorry for the noise.
2011-08-24 16:02:40 +01:00
Eloy Lafuente (stronk7) 7faa5b4e9c Merge branch 'MDL-28976_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-24 12:57:51 +02:00
Jerome Mouneyrac 2eb3bb390f MDL-29005 display enrollable courses total and downloadable courses total instead of courses/sites total 2011-08-24 14:49:54 +08:00
Aparup Banerjee 2134aa6129 Revert "MDL-28509 repository_youtube Enable selection of sort order"
This reverts commit 0638e55b14.
2011-08-24 14:43:05 +08:00
Eloy Lafuente (stronk7) adc0d74ac9 Merge branch 'w33_MDL-29022_m21_idnumber' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-24 03:51:51 +02:00
Aaron Barnes b5013dc868 MDL-28248 completion: Incorrect SQL for finding enrol start date 2011-08-24 12:07:18 +12:00
Eloy Lafuente (stronk7) b61fd419e8 Merge branch 'MDL-28979_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-24 01:56:06 +02:00
Tim Hunt 8c412f122c MDL-28942 qtype multichoice, multi-response. Avoid computing the wrong random guess score.
It is effectively impossible to compute the right random guess score, so we should not compute anything, rather than computing a number that we know is wrong.

This patch also fixes a multianswer unit test error that was shown up by this fix.
2011-08-24 01:53:26 +02:00
Eloy Lafuente (stronk7) 7a4a1f14ca Merge branch 'MDL-28975_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-24 01:45:23 +02:00
Sun Zhigang fad5ec9b5a MDL-29019 enrol - fix a typo 2011-08-24 01:31:29 +02:00
Petr Skoda 93e8c6c422 MDL-19380 fix redirect when virus found in JS-less mode 2011-08-24 01:21:08 +02:00
Petr Skoda 16dc846eb1 MDL-19380 reimplement antivir scanning in repositories 2011-08-24 01:21:00 +02:00
Petr Skoda c7c1a8cf14 MDL-29000 multiple password reset issues
* stop abusing get_complete_user_data()
* fix case-sensitiveness in password reset for PG
* do not allow reset of disabled accounts
* propose a solution for non-unique emails
2011-08-24 01:08:10 +02:00
Petr Skoda b13eda7e8d MDL-28981 fix forum_user_can_post() call params 2011-08-24 00:53:29 +02:00
Tony Levi a3ad8fd883 MDL-27228: Fix label 'eye' does not match show/hide setting 2011-08-23 23:36:29 +02:00
Eloy Lafuente (stronk7) 4ffedd8b0e Merge branch 'w33_MDL-28708_m21_f304' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-23 23:32:36 +02:00
Eloy Lafuente (stronk7) 71cf843ad2 Merge branch 'w33_MDL-28709_m21_h304' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-23 23:23:15 +02:00
Eloy Lafuente (stronk7) fd7bdf278c Merge branch 'w33_MDL-29011_m21_nomanualenrol' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-23 23:13:28 +02:00
Eloy Lafuente (stronk7) 80fc30b7bd MDL-28684 QE2 upgrade: whitespace fix 2011-08-23 22:53:26 +02:00
Eloy Lafuente (stronk7) 251037cefd Merge branch 'MDL-28684b-21' of git://github.com/bostelm/moodle into MOODLE_21_STABLE 2011-08-23 22:53:11 +02:00
Eloy Lafuente (stronk7) 3d95259d7e Merge branch 'MDL-28444-21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-23 22:48:06 +02:00
Aparup Banerjee 1b502dff19 Merge branch 'w33_MDL-28982_m21_sqlfullname' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-24 02:59:56 +08:00
Aparup Banerjee e9f8af2a1b Merge branch 'MDL-28687_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-24 02:28:21 +08:00
Eloy Lafuente (stronk7) 35dd038144 MDL-28962 enrol imsenterprise - whitespace fix 2011-08-23 18:43:37 +02:00
Eloy Lafuente (stronk7) f403941133 Merge branch 'm21_MDL-28962' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-23 18:43:21 +02:00
Eloy Lafuente (stronk7) a1eeb0185a Merge branch 'MDL-28957_21' of git://github.com/colchambers/moodle into MOODLE_21_STABLE 2011-08-23 18:01:16 +02:00
Eloy Lafuente (stronk7) dc70aa7378 Merge branch 'MDL-28397-21' of https://github.com/totara/moodle into MOODLE_21_STABLE 2011-08-23 17:31:12 +02:00
Sam Hemelryk bb37aab093 MDL-25636 block_html Fixed up missing format config if block restored from early 2.0 backup 2011-08-23 18:41:48 +08:00
Eloy Lafuente (stronk7) 72bd83e0f1 Merge branch 'w33_MDL-28381_m21_cliphpver' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-23 11:03:42 +02:00
Eloy Lafuente (stronk7) 1b69c111cc Merge branch 'MDL-28996_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-23 10:42:52 +02:00
Petr Skoda 23eccfcd77 MDL-28935 use weekdays as calendar table headings 2011-08-23 10:05:14 +02:00
Jason Ilicic 68cfdb72f9 MDL-28935 Add days of week to monthly calendar view 2011-08-23 10:05:04 +02:00
Tim Hunt 0570e81ecb MDL-29062 qtype multianswer refers to old name for the question_delete_questions function. 2011-08-23 08:54:15 +01:00
Tim Hunt 5ce736caa8 MDL-29064 qtype multianswer, question text should be a required field. 2011-08-23 08:41:00 +01:00
Aparup Banerjee 8145290d43 Merge branch 'MDL-28509_21_STABLE' of git://github.com/marxjohnson/moodle into MOODLE_21_STABLE 2011-08-23 14:55:11 +08:00
Eloy Lafuente (stronk7) d94b4b327d Merge branch 'm21_MDL-28999' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-23 02:49:59 +02:00
Petr Skoda c896d5c54d MDL-29016 allow distributions to set dataroot permissions 2011-08-23 02:43:10 +02:00
Eloy Lafuente (stronk7) 5cfb119475 Merge branch 'MDL-28990-MOODLE_21_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_21_STABLE 2011-08-23 02:37:01 +02:00
Eloy Lafuente (stronk7) 092c6089c9 Merge branch 'w33_MDL-29031_m21_oldblock' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-23 02:05:08 +02:00
Eloy Lafuente (stronk7) 8fb3542126 Merge branch 'MDL-28226_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-23 01:42:25 +02:00
Adam Olley 4b0fbfcbd9 MDL-28481: Send headers before any possible output 2011-08-23 01:37:16 +02:00
Eloy Lafuente (stronk7) b1ea3fb2c6 Merge branch 'w33_MDL-28936_m21_msgstrlen' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-23 01:20:24 +02:00
Eloy Lafuente (stronk7) 94aa0fbe8c Merge branch 'MDL-28241_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-23 01:17:17 +02:00
Tom Cubanski 6be8a680e2 MDL-26302 quiz editing: top move button on the order and paging tab does not work.
It is strange that processes the submission already handles the submitted data from this change to the HTML.
2011-08-22 23:56:51 +01:00
Tim Hunt 6310adb3f4 MDL-28564 question type importing, improve Jamie's fix. 2011-08-22 23:32:48 +01:00
Jamie Pratt 80fa621c50 MDL-28564 "implement support for extra answer fields in question export and
import" implemented support for extra answer fields in questiontype base
export and import functions.
2011-08-22 23:32:47 +01:00
Tim Hunt 60854b669a MDL-28241 editing multianswer questions broken since the fix for MDL-24594. 2011-08-22 22:36:37 +01:00
Aparup Banerjee 8db14e344b Merge branch 'wip-mdl-28580-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-08-23 01:49:51 +08:00
Andrew Davis (andyjdavis) a47827691a MDL-27823 messaging: preventing html tags from being output to the UI 2011-08-22 15:28:30 +08:00
Aaron Barnes 3b9bf6a949 MDL-28397 completion: Activity completion criteria not showing grading
requirement

Credit goes to Evan Irving-Pease for the patch
2011-08-22 14:57:13 +12:00
Petr Skoda 5eb8c77850 MDL-29011 do not require manual enrol cap on the enrolled users page 2011-08-21 18:18:35 +02:00
Petr Skoda 51606ad2d8 MDL-29031 remove blocks cleanup todo 2011-08-21 17:45:52 +02:00
Petr Skoda 812e3294be MDL-27248 remove forgotten unique sortorder index from the course table 2011-08-21 17:33:19 +02:00
Petr Skoda 181b0dc545 MDL-28982 fix DML use 2011-08-21 15:39:34 +02:00
Petr Skoda 6b3d645e9b MDL-28381 always verify PHP version in CLI scripts
The problem is that people may use different php binary for web and CLI.
2011-08-21 12:22:14 +02:00
Tim Hunt 3d233b9dab MDL-28444 unit test to verify the fix. 2011-08-20 13:18:05 +01:00
Henning Bostelmann 5c364504a6 MDL-28444 synchronized datasets: fix typo in get_variants_selection_seed() 2011-08-20 11:45:41 +01:00
Petr Skoda 0864c8a59d MDL-29022 do not require idnumber in ext courses - backport from MDL-29020 2011-08-20 11:34:58 +02:00
AMOS bot c498bf796b Automatically generated installer lang files 2011-08-20 00:55:28 +00:00
Petr Skoda a32da065ae MDL-28936 fix invalid >200 comparison and utf-8 incompatibility
Credit for discovery goes to Jason Ilicic.
2011-08-19 18:44:33 +02:00
Tony Levi 68d9daa187 MDL-28708: Send 304 Not Modified response when browser If-Modified-Since header is after file mtime 2011-08-19 17:27:20 +02:00
Petr Skoda 4bdcd23e19 MDL-28709 adding HTTP_IF_MODIFIED_SINCE and minor style tweaks 2011-08-19 16:50:16 +02:00
Tony Levi 716f93efdb MDL-28709: Performance: Send cache/contenttype headers with 304 responses 2011-08-19 16:50:16 +02:00
Henning Bostelmann ec5f40b1a9 MDL-28684 QE2 upgrade: recognize empty answer in multichoice questions 2011-08-19 10:33:55 +01:00
Rajesh Taneja 01f9bc7948 MDL-28580 Administration: Added sanity check to grab wrong usage of upgrade_main_savepoint 2011-08-19 07:41:13 +00:00
Jerome Mouneyrac fc218ba9e2 MDL-28990 add web service mobile overview 2011-08-19 11:47:17 +08:00
Dan Marsden f3e0eac04f MDL-28999 SCORM add missing yui2 require 2011-08-19 10:21:11 +12:00
Tim Hunt da45306da5 MDL-28996 Quiz view page list of attempts table is sometimes missing a cell. 2011-08-18 19:27:19 +01:00
Tim Hunt 96bab3e01d MDL-28979 qtype match: correct answer formatted badly. 2011-08-18 13:51:18 +01:00
Tim Hunt cb5a7bba89 MDL-28976 quiz was passing 0 to ->attempt_url when it should have been null.
There was also one other incorrect call that is fixed in this commit.
2011-08-18 13:50:51 +01:00
Tim Hunt 0a20ddbe7d MDL-28975 question engine, JavaScript error in IE. 2011-08-18 13:50:24 +01:00
Tim Hunt 3575052f81 MDL-28687 questions avoid fatal errors when reviewing attempts at deleted questions. 2011-08-18 13:49:33 +01:00
Tim Hunt 6d9ae2adf0 MDL-28226 quiz locallib. Fix PHPdoc comment and code to make the API clearer. 2011-08-18 13:44:01 +01:00
Jerome Mouneyrac f76dc0ff65 MDL-28650 add a page in the administration to the full web service API (API documentation). 2011-08-18 12:08:38 +08:00
Dan Marsden 1b64c78d36 MDL-28962 enrol imsenterprise - incorrect conversion of new dml syntax - thanks to Patrick Gagnon for report and fix. 2011-08-18 13:40:17 +12:00
Eloy Lafuente (stronk7) 24654d977b weekly release 2.1.1+ 2011-08-18 02:42:40 +02:00
Eloy Lafuente (stronk7) cd91adc715 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-08-18 02:38:43 +02:00
Colin Chambers e5ba71b479 #MDL-28957 outputrequirementslib reduced excessive js console logging 2011-08-17 14:58:15 +01:00
Eloy Lafuente (stronk7) ad307c7121 Merge branch 'MDL-28349_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-17 15:40:00 +02:00
Dongsheng Cai 1c64c52951 MDL-27289, upgrade box.net repository plugin to use new box.net authentication process 2011-08-17 11:45:32 +08:00
Eloy Lafuente (stronk7) 74475bd5d5 Merge branch 'wip-mdl-27219-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-08-17 02:59:38 +02:00
Eloy Lafuente (stronk7) c30dadce6f Merge branch 'MDL-28737_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-17 02:51:57 +02:00
Eloy Lafuente (stronk7) f45cf8cb2c Revert "MDL-25757 SCORM fix issue with duplicate cmi values being saved"
This reverts commit 2c7cc519d8.
2011-08-17 02:28:49 +02:00
Eloy Lafuente (stronk7) 4239318be9 Merge branch 'MDL-21934_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-17 01:29:20 +02:00
Eloy Lafuente (stronk7) 33868528bb Merge branch 'MDL-27752_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-08-17 01:02:21 +02:00
Eloy Lafuente (stronk7) e3af6a00ba Merge branch 'MDL-28643-m21' of git://github.com/sammarshallou/moodle into MOODLE_21_STABLE 2011-08-17 00:45:25 +02:00
Eloy Lafuente (stronk7) 95caac3cc8 Merge branch 'm21_MDL-28649' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-17 00:33:07 +02:00
Eloy Lafuente (stronk7) c89c390759 Merge branch 'MDL-28652_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-17 00:29:23 +02:00
Eloy Lafuente (stronk7) 25bde46869 Merge branch 'MDL-28653_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-17 00:25:46 +02:00
Tim Hunt 269c653560 MDL-28654 fix path for TinyMCE in lib/thirdpartylibs.xml. 2011-08-17 00:10:09 +02:00
Eloy Lafuente (stronk7) 88b340161b Merge branch 'MDL-28655-21' of git://github.com/bostelm/moodle into MOODLE_21_STABLE 2011-08-17 00:07:44 +02:00
Eloy Lafuente (stronk7) 5b18861bf0 Merge branch 'm21_MDL-28721' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-16 23:44:12 +02:00
Eloy Lafuente (stronk7) 84e093e143 Merge branch 'wip-MDL-26754-MOODLE_21_STABLE' of github.com:marinaglancy/moodle into MOODLE_21_STABLE 2011-08-16 13:11:16 +02:00
Eloy Lafuente (stronk7) 02b36f79d2 Merge branch 'MDL-28365_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-16 13:03:59 +02:00
Eloy Lafuente (stronk7) a6f18c98f4 Merge branch 'MDL-23872_m21' of git://github.com/nebgor/moodle into MOODLE_21_STABLE 2011-08-16 11:51:53 +02:00
Rajesh Taneja 273ac54baa MDL-27219 chat: Beep will not display user fullname if user is not in chat 2011-08-16 16:35:33 +08:00
Andrew Davis (andyjdavis) 549af292b6 MDL-28943 messaging: made messaging admin page use a string instead of the plugin name 2011-08-16 14:33:57 +08:00
Eloy Lafuente (stronk7) 28f9b39287 Merge branch 'MDL-28931_m21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-08-16 03:06:07 +02:00
Eloy Lafuente (stronk7) e42213ab72 Merge branch 'wip-mdl-27728-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-08-16 02:14:49 +02:00
Eloy Lafuente (stronk7) 68d998c6cf Merge branch 'MDL-27030_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-16 02:07:37 +02:00
Eloy Lafuente (stronk7) bf22dc969c MDL-27896 filters/editor - fix whitespace 2011-08-16 02:01:20 +02:00
Eloy Lafuente (stronk7) 0031600453 Merge branch 'wip-mdl-27896-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-08-16 02:00:36 +02:00
Eloy Lafuente (stronk7) 3bcd0781f1 Merge branch 'm21_MDL-25757' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-16 00:39:18 +02:00
Petr Skoda 26e3dce466 Merge branch 'MDL-27845_rating_aggregation_21' into MOODLE_21_STABLE 2011-08-15 20:41:12 +02:00
Tim Hunt 5e54da0a69 MDL-21934 Removing all questions from the quiz should not delet overall feedback.
Overall feedback was being wiped because the quiz max grade was being set to zero when sumgrades was set to 0. The correct logic is to only set maxgrade to 0 if there are questions in the quiz and sumgrades is 0.
2011-08-15 19:10:47 +01:00
Eloy Lafuente (stronk7) a4f85cc579 Merge branch 'm21_MDL-28603' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-15 20:02:33 +02:00
Dan Poltawski bf1b681560 MDL-28605 repsitory/local - Prevent server running out of memory
Removing useless code..
2011-08-15 19:58:27 +02:00
Eloy Lafuente (stronk7) 2ce0d40694 Merge branch 'MDL-28939_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-15 19:34:59 +02:00
Tim Hunt 7f10fbbf5f MDL-28349 error when GIFT-importing essay questions. 2011-08-15 16:18:03 +01:00
Tim Hunt e67a234c98 MDL-28365 Move question lang string to the right file
All the references to this sring were already referring to it in the new
place.

AMOS BEGIN
 MOV [cannotread,mod_quiz],[cannotread,question]
AMOS END
2011-08-15 15:20:15 +01:00
Tim Hunt 80e3f00091 MDL-28939 Bad lang string reference in grade/import/csv. 2011-08-15 15:12:19 +01:00
Tim Hunt d3fd75d21d MDL-28639 question import should set timemodified and modified by.
Thanks to Jean-Michel Vedrine for the fix.
2011-08-15 14:56:45 +01:00
Tim Hunt 8ad92a30f1 MDL-28438 Aiken question import broken since MDL-24594. 2011-08-15 14:47:16 +01:00
Eloy Lafuente (stronk7) bee0152fda MDL-28931 timezone - update to 2011h (2200 rules) 2011-08-14 18:06:10 +02:00
Dan Marsden 2c7cc519d8 MDL-25757 SCORM fix issue with duplicate cmi values being saved 2011-08-13 13:24:22 +12:00
Tim Hunt 643e2728df MDL-28737 advcheckboxes toggle state every submit if checkbox_controller present. 2011-08-12 19:13:20 +01:00
Rajesh Taneja 3a7de25755 MDL-27896 course - Rectified wrong use of itemid for preparing draft file area 2011-08-12 16:49:29 +08:00
Rajesh Taneja 56d57a9a4e MDL-27896 editor - parent context will be respected by editor in case context is not created. 2011-08-12 16:49:05 +08:00
Rajesh Taneja 1449e4faa2 MDL-27896 editor - added sanity check to pick wrong context passed to editor creation 2011-08-12 16:48:47 +08:00
Rajesh Taneja b51aac313f MDL-27896 context - Fixed editor context to observe filter status 2011-08-12 16:48:22 +08:00
Dan Marsden ee124f531b MDL-28603 SCORM fix regression with ADL scorm 1.2 tests 2011-08-12 17:24:48 +12:00
Rajesh Taneja 63ff326835 MDL-27728 Moodleforms: Added validation for element before checking element values 2011-08-12 10:54:33 +08:00
AMOS bot 5ce30862f2 Automatically generated installer lang files 2011-08-12 00:55:30 +00:00
Dan Marsden dbc61bc225 MDL-28649 SCORM start new attempt if set when skipview used. 2011-08-12 12:53:53 +12:00
Dan Marsden f08cc8276c MDL-28721 SCORM respect hidenav setting 2011-08-12 11:07:28 +12:00
Eloy Lafuente (stronk7) 3a5778ec5a weekly release 2.1.1+ 2011-08-12 00:19:27 +02:00
Eloy Lafuente (stronk7) d0aeb0abfa Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-08-12 00:13:16 +02:00
Marina Glancy f364d3f91d MDL-26754: Removed unnecessary include 2011-08-11 13:40:24 +08:00
AMOS bot 07b5fbb9ca Automatically generated installer lang files 2011-08-11 00:55:47 +00:00
Eloy Lafuente (stronk7) 7637e2e5e4 Merge branch 'MDL-27491-m21' of git://github.com/sammarshallou/moodle into MOODLE_21_STABLE 2011-08-10 23:04:13 +02:00
Eloy Lafuente (stronk7) d980c1d746 Merge branch 'm21_MDL-28295' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-10 22:58:04 +02:00
Daren Chandisingh 339c198ade MDL-23872 Forms Library : Updated MoodleQuickForm to honour setConstant(), prevents injection. 2011-08-10 15:22:07 +08:00
Sam Hemelryk 4f4cbbad8f Merge branch 'MDL-20501_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-08-10 14:10:12 +08:00
Dan Marsden 6a211fb52d MDL-28295 SCORM change mangement of pop-up windows, load full SCORM API in existing window - this fixes an issue with IE 7 and httpreq communication 2011-08-10 14:33:39 +12:00
Eloy Lafuente (stronk7) 9271414522 Merge branch 'MDL-27631_21' of git://github.com/mkassaei/moodle into MOODLE_21_STABLE 2011-08-10 03:06:52 +02:00
AMOS bot f715589ee5 Automatically generated installer lang files 2011-08-10 00:55:22 +00:00
Eloy Lafuente (stronk7) 6c506c9a07 Merge branch 'MDL-27550-workshop-feedback_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-08-10 02:49:03 +02:00
Eloy Lafuente (stronk7) a28b6620d6 Merge branch 'w31_MDL-27597_m21_catlike' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-10 02:37:07 +02:00
Dan Poltawski c0d30fbb75 MDL-23967 admin/cron.php - warn about use on CLI
Admins now need to use the explicit CLI script
2011-08-10 02:06:12 +02:00
Dan Poltawski 3b97dedfbd MDL-28059 weblib - don't strip mailto: anchors 2011-08-10 01:59:16 +02:00
Eloy Lafuente (stronk7) d04b3d580e Merge branch 'wip-MDL-28407-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-08-10 01:11:51 +02:00
Eloy Lafuente (stronk7) 0f61d7f97c Merge branch 'w31_MDL-28533_m21_columnperf' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-09 19:33:09 +02:00
sam marshall 37f5c92302 MDL-28643 Fix debugging message when deleting activity with grade completion 2011-08-09 12:47:26 +01:00
Tim Hunt dc4bff71a2 MDL-28653 question output. Add a class to the main div based on question state.
This makes it possible themes do cool things. For example change more of the display depending on whether the answer was correct or not.
2011-08-09 11:32:18 +01:00
Eloy Lafuente (stronk7) fd6a17ecfb Merge branch 'MDL-28565_m21' of git://github.com/nebgor/moodle into MOODLE_21_STABLE 2011-08-09 10:15:48 +02:00
Henning Bostelmann fe34282df6 MDL-28655 qtype_calculated question engine upgrade: fix return value 2011-08-09 09:15:33 +01:00
Eloy Lafuente (stronk7) 6b4422a086 Merge branch 'MDL-28604_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-09 09:42:59 +02:00
AMOS bot 9dba637233 Automatically generated installer lang files 2011-08-09 00:55:22 +00:00
Tony Levi 5c5cb085c0 MDL-27030: Fix quiz overview report showing incorrect grades on regraded attempts
Conflicts:

	mod/quiz/report/overview/report.php
2011-08-08 23:46:19 +01:00
Petr Skoda 1c106106fd Merge branch 'MDL-28620_21' of git://github.com/jbrisland/moodle into MOODLE_21_STABLE 2011-08-08 15:35:05 +02:00
Tim Hunt 65be66e4d4 MDL-28652 qtype calculated, bad display of placeholder names on the editing form. 2011-08-08 13:14:20 +01:00
Aparup Banerjee 006776fc71 MDL-28565 General - updated lang files License link to docs.moodle.org/dev/License 2011-08-08 17:14:06 +08:00
Aparup Banerjee 6f80b9b3e9 MDL-28565 General - updated License and Credits links
to docs.moodle.org/dev/License and docs.moodle.org/dev/Credits
2011-08-08 17:13:36 +08:00
Sagie Maoz 56f2ab3335 MDL-26721 automated backups - Fix typo
Causing the 'role assignment' backup inclusion to be tied to the users

Signed-off-by: Dan Poltawski <dan.poltawski@luns.net.uk>
2011-08-08 15:39:12 +08:00
Sam Hemelryk 5553dcba67 Merge branch 'mdl-28517_2.1' of git://github.com/colchambers/moodle into MOODLE_21_STABLE 2011-08-08 14:22:41 +08:00
Sam Hemelryk 806e82b7fc Merge branch 'MDL-28569' of git://git.luns.net.uk/moodle into MOODLE_21_STABLE 2011-08-08 14:09:53 +08:00
Sam Hemelryk 172007a066 Merged branch 'MDL-28575_MOODLE_21_STABLE' of git://github.com/kordan/moodle.git with conflict resolution 2011-08-08 13:59:08 +08:00
Sam Hemelryk 9a2e30d8bc Merge branch 'MDL-28587_MOODLE_21_STABLE' of git://github.com/kordan/moodle into MOODLE_21_STABLE 2011-08-08 13:44:52 +08:00
Rossiani Wijaya 272d804840 MDL-27752 Calendar export: fixed typo in url parameter 2011-08-08 12:16:59 +08:00
Sam Hemelryk 40b4296d07 Merge branch 'MDL-28406_block_duplicate_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-08-08 11:18:54 +08:00
Sam Hemelryk f24eca0c6b Merge branch 'MDL-28602_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-08 11:08:08 +08:00
Sam Hemelryk 9d660d5f0e Merge branch 'MDL-28593_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-08 11:04:38 +08:00
Sam Hemelryk cf7daeae7e Merge branch 'MDL-28612_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-08 11:02:11 +08:00
Sam Hemelryk 62bdb79c26 Merge branch 'MDL-28618_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-08 10:57:31 +08:00
Sam Hemelryk 6f7c43c7de Merge branch 'w31_MDL-27586_m21_browser' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-08 10:47:33 +08:00
Sam Hemelryk cf8cc1bab1 Merge branch 'w31_MDL-27685_m21_pglike' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-08 10:25:47 +08:00
Sam Hemelryk 6b9c6cc54e Merge branch 'w31_MDL-28382_m21_iis' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-08 10:20:57 +08:00
Sam Hemelryk 31b4fdabbf Merge branch 'w31_MDL-28450_m21_defgroup' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-08 10:09:46 +08:00
Sam Hemelryk a9fbf9fb87 Merge branch 'w31_MDL-28468_m21_cohortassign' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-08 10:06:21 +08:00
Sam Hemelryk 2e81c307d0 Merge branch 'w31_MDL-28473_m21_blocksupgrade' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-08-08 10:03:07 +08:00
Petr Skoda c2edea7cbd MDL-28382 work around or detect REQUEST_URI IIS bug 2011-08-07 14:45:53 +02:00
Petr Skoda f6589dd72d MDL-27685 fix pg LIKE escape trouble 2011-08-07 13:22:36 +02:00
Petr Skoda 29a27d3ca4 MDL-28450 prefer member group for default 2011-08-07 13:07:54 +02:00
Petr Skoda e24225351c MDL-28634 fix forgotten references to Moodle 2.0 and old PHP version requirements 2011-08-06 22:57:47 +02:00
Petr Skoda 520f687cde MDL-27586 fix file_browser access control 2011-08-06 16:24:04 +02:00
Petr Skoda e25df8c464 MDL-28473 fix $instanceids troubles in blocks upgrade
Credit goes to Mateusz Wójcik.
2011-08-05 22:09:49 +02:00
Petr Skoda a5410db4e3 MDL-28468 fix cohort assign check 2011-08-05 21:47:41 +02:00
Petr Skoda d84336c27d verify where_clause() only in debug mode 2011-08-05 21:34:09 +02:00
Petr Skoda cbe6399300 MDL-27597 fix invalid results of get_categories when shallow is false 2011-08-05 20:14:59 +02:00
Tim Hunt c5fe3d7490 MDL-28618 question combined feedback: inconsistency in file areas.
The (partially|in)?correct feedback fields acutally store their files in a file area with component 'question'. Some code, however, was written as if they were stored in the qtype_whatever area.
2011-08-05 17:38:22 +01:00
James Brisland c04c6e6b8a MDL-28620 - Removed admin/generator.php include as it causes issues if this script is included from any other script that is running in the command line 2011-08-05 16:11:44 +01:00
M Kassaei 6f90ec4703 MDL-27631 question bank Show question text in the question list when top level category is used 2011-08-05 15:00:29 +01:00
Tim Hunt e3b8930087 MDL-28593 Missing include breaks editing quiz grade item. 2011-08-05 08:53:16 +01:00
Andrew Davis (andyjdavis) 70ade8e8d7 MDL-28406 blocks: added JS to prevent the addition of duplicate blocks 2011-08-05 11:33:42 +08:00
Andrew Davis (andyjdavis) b312305ccc MDL-27845 rating: altered the get_ratings() query to avoid possible future duplicate key problems 2011-08-05 11:19:11 +08:00
Sam Hemelryk 1ad4fb6f12 MDL-28407 Fixed up calendar preferences form handling 2011-08-05 09:34:43 +08:00
AMOS bot 056a53e81f Automatically generated installer lang files 2011-08-05 00:55:17 +00:00
Tim Hunt 788e2b30a5 MDL-28612 Quiz statistics report does not always show the 'Actual response' column when it should 2011-08-04 18:15:34 +01:00
Colin Chambers 005900fd2a MDL-28517 question editing fixed duplicate id in hint header field 2011-08-04 14:54:11 +01:00
Tim Hunt f97a14ba27 MDL-28602 Quiz review reports the wrong duration. 2011-08-04 14:20:02 +01:00
Tim Hunt 3e1d47f2cc MDL-28604 Question bank display forgets sort order 2011-08-04 13:55:38 +01:00
Marina Glancy ad66263bc1 MDL-26754 Display blocks in 'manage blocks' alphabetically sorted 2011-08-04 14:12:08 +08:00
AMOS bot 64d8fed91c Automatically generated installer lang files 2011-08-04 00:55:33 +00:00
Petr Skoda 80eb52c415 weekly release 2.1.1+ 2011-08-03 18:04:44 +02:00
Petr Skoda c0852d9a0c Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-08-03 18:02:52 +02:00
kordan 5dd9ee192e MDL-28587 fix for MOODLE_21_STABLE 2011-08-03 15:25:08 +02:00
sam marshall e1bb4741f1 MDL-27491 Add 'complete on view' support to wiki, survey 2011-08-03 11:22:10 +01:00
Sam Hemelryk 4a45ddbae2 Revert "MDL-28284 don't load filepicker module for every page"
This reverts commit 279a874108.
2011-08-03 18:20:30 +08:00
kordan aa34ca4309 MDL-28575 fix for MOODLE_21_STABLE 2011-08-02 23:41:45 +02:00
David Mudrak 11351de2d3 MDL-27550 workshop: fixed XHTML strictness of H3 and A combo
H3 is block level element while A is in-line element in XHTML.
Credit goes to Sam Hemelryk for spotting this during the peer-review.
2011-08-02 23:32:46 +02:00
David Mudrak 08282ec16c MDL-27550 workshop: rendering links to the submission and the assessment page
This usability improvement helps to provide feedback quickly during the
grading evaluation phase.
2011-08-02 23:32:25 +02:00
David Mudrak 8981b64a41 MDL-27550 workshop: students do not see peer-assessment that are not graded yet 2011-08-02 23:32:25 +02:00
David Mudrak c6b8bbfa9b MDL-27550 workshop: display the feedback for the submission reviewer when the workshop is closed 2011-08-02 23:32:24 +02:00
David Mudrak 275a6f59d7 MDL-27550 workshop: assessments are now displayed via proper rendering subsystem
AMOS BEGIN
 MOV [assessmentbyknown,mod_workshop],[assessmentbyfullname,mod_workshop]
AMOS END
2011-08-02 23:32:24 +02:00
David Mudrak 308e4280e3 MDL-27550 workshop: display the feedback for the submission author when the workshop is closed
The method user_picture::fields() was not available when these SQL
statements were originally written. Now instead of hard-coding the list
of returned fields, the user_picture is asked for the list.

Together with this change, methods workshop::get_submission_by_id()
and workshop::get_submission_by_author() now return the information
about the user who provided the feedback and overwrote the grade.
2011-08-02 23:32:24 +02:00
Petr Skoda 5d08b03e5b Merge branch 'wip-mdl-27658-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-08-02 15:12:54 +02:00
Petr Skoda e4e3b12325 Merge branch 'MDL-28338_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-02 15:08:48 +02:00
Dan Marsden 97247fdadd MDL-28410 Choice - allow single answer choice to be created 2011-08-02 15:05:01 +02:00
Petr Skoda fb563a9949 Merge branch 'MDL-28507_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-02 14:51:30 +02:00
Dan Marsden f166ab0bec MDL-28535 SCORM remove old IE 6 related warning about zlib 2011-08-02 14:40:41 +02:00
Tim Hunt bae927bebd MDL-28507 fix bad lang string uses, and remove two obsolete strings. 2011-08-02 13:38:39 +01:00
Dan Poltawski 7f62477a87 MDL-28569 blocks/rss_client - RSS feed autodiscovery fails with ampersands
Simpliepie is quoting urls and we need the url to be unescaped
2011-08-02 13:19:01 +01:00
Sam Hemelryk 5a5e7bb3b1 Merge branch 'MDL-28490_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-02 17:56:14 +08:00
Sam Hemelryk 6f2723ae83 Merge branch 'MDL-28508_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-02 17:47:42 +08:00
Sam Hemelryk 365ed23695 Merge branch 'MDL-28051_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-08-02 17:14:33 +08:00
Andrew Robert Nicols c0c2b3dc1a MDL-28515 Add cli install options for fullname and shortname 2011-08-02 17:07:44 +08:00
Sam Hemelryk 26dcfcb542 Merge branch 'MDL-28340_advanced_search_other_users_21' of git://github.com/andyjdavis/moodle into MOODLE_21_STABLE 2011-08-02 16:59:36 +08:00
Sam Hemelryk 34eee090a7 Merge branch 'wip-mdl-28504-m21' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-08-02 16:51:57 +08:00
Sam Hemelryk 9a1f42da6d Merge branch 'wip-MDL-19907-MOODLE_21_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_21_STABLE 2011-08-02 16:46:07 +08:00
Sam Hemelryk 5be31c5bf2 MDL-27122 admin Improved block protection help string 2011-08-02 16:32:13 +08:00
Sam Hemelryk 3e2569f70d Merge branch 'wip-MDL-27122-MOODLE_21_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_21_STABLE 2011-08-02 16:27:49 +08:00
Sam Hemelryk fa0f970835 Merge branch 'wip-MDL-27754-MOODLE_21_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_21_STABLE 2011-08-02 14:09:30 +08:00
Sam Hemelryk f89a34fb77 Merge branch 's11_MDL-28284_filepicker_module_21' of git://github.com/dongsheng/moodle into MOODLE_21_STABLE 2011-08-02 13:42:12 +08:00
Sam Hemelryk 09e7c66714 Merge branch 'MDL-28510_21_STABLE' of git://github.com/marxjohnson/moodle into MOODLE_21_STABLE 2011-08-02 13:37:17 +08:00
unknown c4eea3e21a Merge branch 'm21_MDL-27876' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-08-02 13:26:25 +08:00
Piers Harding 189bdcf125 MDL-27876 SCORM auto-adjust the stage height 2011-08-02 17:13:37 +12:00
Sam Hemelryk b587abd989 Merge branch 'MDL-28487-typo_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-08-02 12:23:14 +08:00
Sam Hemelryk 9cacdc07d7 Merged branch 'm21_MDL-28548' of git://github.com/danmarsden/moodle.git with comment changes 2011-08-02 11:46:11 +08:00
AMOS bot e054707e9a Automatically generated installer lang files 2011-08-02 00:55:21 +00:00
Marina Glancy 9cd9d86640 MDL-27754 fixed typo in language string 2011-08-02 08:52:10 +08:00
Marina Glancy 919fcc6f12 MDL-27122 Allow admin to change CFG->undeletableblocktypes on 'Manage blocks' settings page. Instances of protected block types will be undeletable only from site context 2011-08-02 08:52:03 +08:00
Marina Glancy f9694db2cb MDL-19907 rewrote validation for required fields in forms, including support for editor field. Added parameter to use strict (no spaces) required fields validation 2011-08-02 08:51:40 +08:00
Rossiani Wijaya 2154de3b3c MDL-20501 survey module: fix text alignment for right to left language. Change undefined string to 2011-08-01 17:40:04 +08:00
Sam Hemelryk 0c566ce339 Moodle 2.1.1 release 2011-08-01 16:57:23 +08:00
Rajesh Taneja 5bda1372a1 MDL-27658 javascript: Typo fixed for toUpperCase 2011-08-01 12:53:51 +08:00
Rajesh Taneja 877f061325 MDL-28504 filter: Typo in css fixed 2011-08-01 10:22:57 +08:00
Dan Marsden 263f258ae2 MDL-28548 allow backup to contain info from multiple plagiarism plugins. 2011-08-01 10:28:59 +12:00
Sam Hemelryk 06b04e5c62 weekly release 2.1+ (emergency) 2011-07-29 12:21:57 +08:00
Andrew Davis (andyjdavis) d0752d358e MDL-28340 messaging: fixed a display issue when you search for and tried to view a conversation between two other users 2011-07-29 11:50:51 +08:00
Sam Hemelryk c7f69afe4a Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-07-29 10:13:43 +08:00
Sam Hemelryk 2fa0daefca MDL-28503 comment-caps Slight improvement to allow frontpage and guest users to view comments by default 2011-07-29 09:44:10 +08:00
AMOS bot 89c13e32a0 Automatically generated installer lang files 2011-07-29 00:55:17 +00:00
Wale Olujide 235a394e04 MDL-28051 Question numbers on the question edit page shoud be the same as during the quiz attempt. 2011-07-28 18:03:55 +01:00
Mark Johnson a10ec7f66a MDL-28510 repository_youtube Use smaller thumbnails in search results 2011-07-28 13:46:04 +01:00
Mark Johnson 0638e55b14 MDL-28509 repository_youtube Enable selection of sort order 2011-07-28 13:15:25 +01:00
Tim Hunt a637417d78 MDL-28508 bad string trunction in Aiken format. 2011-07-28 11:52:27 +01:00
Sam Hemelryk 9da3c2efad MDL-28503 Removed the ability for plugins to override comment capabilities and the defaults associated with it 2011-07-28 13:40:06 +08:00
AMOS bot 16e382f8c5 Automatically generated installer lang files 2011-07-28 00:55:17 +00:00
Tim Hunt e12ec6169a MDL-28490 Better class names in the statistics report to help themes. 2011-07-27 19:26:32 +01:00
Tim Hunt 01528075a2 MDL-28338 fix stupid '\n's in the quiz renderer 2011-07-27 19:25:49 +01:00
David Mudrak 3cddd60db7 MDL-28487 Fixed typo in media filter help string 2011-07-27 14:44:17 +02:00
AMOS bot 216113139f Automatically generated installer lang files 2011-07-27 00:55:30 +00:00
Petr Skoda f664cb7c29 weekly release 2.1+ 2011-07-26 11:10:56 +02:00
Petr Skoda 4ac669f1e8 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-07-26 11:09:49 +02:00
AMOS bot 99b0cba0ec Automatically generated installer lang files 2011-07-26 00:55:24 +00:00
Tim Hunt 526d69522d MDL-28218 allow testclient.php to find the necessary form for services defined in plugins. 2011-07-25 20:05:01 +02:00
Petr Skoda a24681a87a Merge branch 'MDL-28437_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-07-25 19:54:07 +02:00
Petr Skoda e1ad3c38bc Merge branch 'MDL-28369_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-07-25 19:52:26 +02:00
Petr Skoda 7ff71aca59 Merge branch 'MDL-28377_21' of git://github.com/timhunt/moodle into MOODLE_21_STABLE 2011-07-25 19:50:18 +02:00
Petr Skoda e205686397 Merge branch 'wip-MDL-28421-MOODLE_21_STABLE' of https://github.com/Beedell/moodle into MOODLE_21_STABLE 2011-07-25 17:03:18 +02:00
Petr Skoda ba295bba29 Merge branch 'wip-MDL-28191-m21' into MOODLE_21_STABLE 2011-07-25 16:46:42 +02:00
Petr Skoda 25f9dae427 Merge branch 'MDL-28453_MOODLE_21_STABLE' into MOODLE_21_STABLE 2011-07-25 16:25:40 +02:00
Tim Hunt d8f77afbb8 MDL-28369 Question hints not being restored. 2011-07-25 10:06:27 +01:00
John Beedell aa4292ad22 MDL-28421 admin config improve class
admin_setting_configmultiselect_modules to include a default
2011-07-25 09:56:55 +01:00
Aparup Banerjee 2d4c4b65d4 MDL-28453 backup - made temporary restoration courses hidden by default. 2011-07-25 16:44:50 +08:00
Tim Hunt ce9423eaa7 MDL-28377 Call to mod_quiz_renderer is screwed up. 2011-07-25 09:16:11 +01:00
Tim Hunt 26a4f319a8 MDL-28437 Question bank pages should all use General type: admin. 2011-07-25 08:52:22 +01:00
Sam Hemelryk 93c5c05423 Merge branch 'MDL-28107_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-07-25 15:14:27 +08:00
Andrew Davis (andyjdavis) 2f74865eef MDL-27845 rating: split the get_ratings() query into two to reduce query complexity 2011-07-25 14:21:17 +08:00
Andrew Davis (andyjdavis) fc391624f0 MDL-27845 rating: updated rating unit tests 2011-07-25 14:18:38 +08:00
Eloy Lafuente (stronk7) a5224e1f83 rating/lib.php unit tests 1st cut 2011-07-25 14:18:29 +08:00
Sam Hemelryk 30bfe73981 Merge branch 'MDL-28228' of git://git.luns.net.uk/moodle into MOODLE_21_STABLE 2011-07-25 13:04:19 +08:00
Sam Hemelryk b835eebad9 Merge branch 'MDL-28232' of git://git.luns.net.uk/moodle into MOODLE_21_STABLE 2011-07-25 12:57:01 +08:00
Michael Aherne 3152ccf0a4 MDL-27538 Added deprecation details to functions now in $DB 2011-07-25 11:31:39 +08:00
Sam Hemelryk 38a6a195a4 Merge branch 'w29_MDL-22584_m21_monsterpaths' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 11:18:37 +08:00
Sam Hemelryk 18c2fcf8f1 Merge branch 'w29_MDL-27464_m21_continue' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 11:03:52 +08:00
Sam Hemelryk dbb6d73c8c Merge branch 'w29_MDL-27653_m21_usercasting' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:59:21 +08:00
Sam Hemelryk ae5375722e Merge branch 'w29_MDL-27796_m21_httphost' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:55:04 +08:00
Sam Hemelryk 274d9cf950 Merge branch 'w29_MDL-27994_m21_creatorcaps' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:45:42 +08:00
Sam Hemelryk 7b205e100b Merge branch 'w29_MDL-28145_m21_renderer' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:39:47 +08:00
Sam Hemelryk 39a84a780b Merge branch 'w29_MDL-28182_m21_userdel' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:36:55 +08:00
Sam Hemelryk c782b4bb58 Merge branch 'w29_MDL-28337_m21_urlparams' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:30:00 +08:00
Sam Hemelryk b1591c6568 Merge branch 'w29_MDL-28384_m21_nullurl' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 10:14:47 +08:00
Sam Hemelryk 6e48852633 Merge branch 'w29_MDL-28432_m21_cohortconfig' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 09:52:49 +08:00
Sam Hemelryk 88b014092d Merge branch 'w29_MDL-28440_m21_jssemicol' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-25 09:45:42 +08:00
Mary Evans 7d8b8d1abe fix for MDL-27768 removed reference to gradient-sb image 2011-07-25 09:40:12 +08:00
Petr Skoda 13d0cc41eb MDL-27653 fix incorrect int | object detection 2011-07-24 15:05:16 +02:00
Petr Skoda f76942869c MDL-27994 course creator role is for creating courses only!
The course creator role is designed to be used to create courses, nothing else - that is create new course, create new course from backup + view hidden courses and categories.
2011-07-24 14:19:21 +02:00
Petr Skoda 50ecbad305 MDL-28384 convert empty log urls to ''
The problem is that the log table does not allow nulls, credit goes to Troy Williams.
2011-07-24 14:08:27 +02:00
Petr Skoda 1e075c08a0 MDL-27464 continuation link sometimes links off-site
This code was manually merged from MOODLE_19_STABLE, credit goes to Matt Meisberger.
2011-07-23 13:34:43 +02:00
Petr Skoda 4cbc500d1f MDL-28440 add missing semicolon causing JS issues
Credit goes to Mark Nielsen.
2011-07-23 11:49:39 +02:00
Petr Skoda 4e6464937c MDL-22584 deal with oversized dir and file names during upgrade 2011-07-23 11:40:21 +02:00
Petr Skoda cb52b340d3 MDL-28145 fix renderer typo in comments 2011-07-22 23:43:30 +02:00
Petr Skoda f1073b930b MDL-27796 ignore missing HTTP_HOST header 2011-07-22 23:18:13 +02:00
Petr Skoda 4133a3cd5b MDL-28182 always use full user object when deleting users 2011-07-22 22:48:16 +02:00
Petr Skoda bdbb48efe9 MDL-28337 add parameters explanation in URL resource configuration 2011-07-22 22:18:29 +02:00
Petr Skoda 965c9b97ab MDL-28432 use enrol/cohort and enrol/manual capabilities correctly in cohort enrol UI and fix input validation in ajax 2011-07-22 10:14:29 +02:00
Sam Hemelryk 22cf3b24a5 MDL-28191 Continue button after selecting a theme now redirects back to the theme selector 2011-07-22 14:58:06 +08:00
Rossiani Wijaya d19983fac1 MDL-28107 course enrolment icon: Fixed logged in user enrolment icons 2011-07-22 13:22:26 +08:00
AMOS bot 283ccdc71f Automatically generated installer lang files 2011-07-22 00:55:19 +00:00
Dongsheng Cai 279a874108 MDL-28284 don't load filepicker module for every page 2011-07-21 17:27:51 +08:00
AMOS bot e0d9ebc1f2 Automatically generated installer lang files 2011-07-20 00:55:26 +00:00
Petr Skoda aede1fe6a7 weekly release 2.1+ 2011-07-19 15:23:42 +02:00
Petr Skoda f21656d5d0 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-07-19 15:16:46 +02:00
Petr Skoda feccdaa0ff MDL-27696 initialise arrays
Credit goes to David Mudrak.
2011-07-19 15:04:38 +02:00
Petr Skoda fc7224bac7 MDL-27696 do not use placeholders in GROUP BY because pg does no like that 2011-07-19 10:54:04 +02:00
Petr Skoda 27b4936fcf MDL-27889 use new recaptcha google urls in lang packs 2011-07-19 10:26:30 +02:00
AMOS bot cdf9c89416 Automatically generated installer lang files 2011-07-19 00:55:36 +00:00
Dan Poltawski bf953fe670 MDL-28228 pagelib - incorrect DEBUG constant used 2011-07-19 00:02:56 +01:00
Dan Poltawski 677ee6dee7 MDL-28232 - Course log text export is missing a new line 2011-07-18 23:46:08 +01:00
Petr Skoda 8fa38242d0 Merge branch 'wip-MDL-28040-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:34:09 +02:00
Petr Skoda aa3097da63 Merge branch 'wip-MDL-28184-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:28:54 +02:00
Petr Skoda 719368f8cf Merge branch 'wip-MDL-28205-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:25:31 +02:00
Petr Skoda dd70519ab4 Merge branch 'wip-MDL-28137-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:22:57 +02:00
Petr Skoda 38a1040957 Merge branch 'wip-MDL-27771-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:20:01 +02:00
Petr Skoda ea3317e782 Merge branch 'wip-MDL-27696-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:17:55 +02:00
Petr Skoda f871cc1b8a Merge branch 'wip-MDL-27305-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 15:14:42 +02:00
Petr Skoda 29d4f2eeb3 Merge branch 'wip-MDL-25870-m21' of git://github.com/samhemelryk/moodle into MOODLE_21_STABLE 2011-07-18 14:57:59 +02:00
Sam Hemelryk a699cbcdbc Merge branch 'wip-MDL-27756-MOODLE_21_STABLE' of github.com:marinaglancy/moodle into MOODLE_21_STABLE 2011-07-18 22:18:52 +10:00
Sam Hemelryk 8910a2d15a Merge branch 'MDL-27555_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-07-18 21:51:11 +10:00
Sam Hemelryk 0d9cdacf89 Merge branch 'wip-mdl-27837-MOODLE_21_STABLE' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-07-18 21:08:41 +10:00
Sam Hemelryk 982ea16909 Merge branch 'w28_MDL-23344_m21_loginfocus2' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-18 20:26:19 +10:00
Sam Hemelryk 39b10270a1 Merge branch 'w28_MDL-27804_m21_csvauth' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-18 20:19:20 +10:00
Sam Hemelryk 4e579f6067 Merge branch 'w28_MDL-28253_m21_managerupgrade' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-18 20:10:01 +10:00
Sam Hemelryk f6c2b4fc13 Merge branch 'w28_MDL-28313_m21_enroldb' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-18 20:04:01 +10:00
Sam Hemelryk 056c04c9b4 Merge branch 'w28_MDL-28348_m21_meta' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-18 19:39:28 +10:00
Sam Hemelryk 03368c0b2e Merge branch 'w28_MDL-28350_m21_wsra' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-18 19:28:27 +10:00
Petr Skoda 4bc43436b9 Merge branch 'wip-MDL-25125-MOODLE_21_STABLE' of github.com:marinaglancy/moodle into MOODLE_21_STABLE 2011-07-18 09:34:18 +02:00
Sam Hemelryk 5dd5e31616 Merge branch 'w28_MDL-28363_m21_dimmed' of git://github.com/skodak/moodle into MOODLE_21_STABLE 2011-07-19 00:45:35 +10:00
Sam Hemelryk bd202c1531 Merge branch 'MDL-28298-workshop-constant_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-07-19 00:39:36 +10:00
Sam Hemelryk 9190787dff Merge branch 'MDL-28325-enrol-help_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-07-19 00:34:58 +10:00
Sam Hemelryk 3753033ef6 MDL-26482 minor whitespace fix 2011-07-19 00:28:15 +10:00
Sam Hemelryk 0a02548c23 Merge branch 'm21_MDL-26482' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-07-19 00:27:04 +10:00
Petr Skoda 8399f5a230 MDL-28348 fix spelling and some whitespace issues 2011-07-17 20:40:48 +02:00
Petr Skoda ffbde27300 MDL-28348 fix fatal error caused by unenrolling of incorrect enrol instance 2011-07-17 20:40:47 +02:00
Petr Skoda dd6142b7d2 MDL-28348 prevent circular references in meta handler for enrolments 2011-07-17 20:40:47 +02:00
Petr Skoda d5cb69e9ba MDL-28348 fix meta sync when unassigning roles 2011-07-17 20:40:47 +02:00
Petr Skoda 285e578ed7 MDL-28363 make dimmed selectors more specific to prevent overriding from other themes 2011-07-16 21:04:53 +02:00
AMOS bot e7250e5bd0 Automatically generated installer lang files 2011-07-16 00:55:20 +00:00
Petr Skoda f2b1a6c2ad MDL-28350 prevent bogus role assignment via externallib 2011-07-15 12:24:10 +02:00
Petr Skoda 52bdbe7617 MDL-27804 allow changing of only auth in csv user uploads 2011-07-15 11:08:19 +02:00
David Mudrak bf225ac4c8 MDL-28325 Enrolment: added help to the duration, start date and end date setting
The patch also fixes one typo in enrol_manual detected while working on
this.
2011-07-15 08:53:43 +02:00
AMOS bot 697c3ab6b6 Automatically generated installer lang files 2011-07-15 00:55:18 +00:00
Petr Skoda 0954c43f81 MDL-28313 fix incorrect enrol database settings upgrade 2011-07-14 22:34:03 +02:00
Petr Skoda 536ac72d51 MDL-23344 new option to autofocus username or password on the login form
Nearly everybody else does this login page autofocus. Once we switch to HMTL 5 we should use the new autofocus input option. I believe the admin setting should be enabled by default but it would not be possible to get it through the reviews.
2011-07-14 15:59:21 +02:00
Petr Skoda 1024510a4a MDL-28253 use unique name for new manager role 2011-07-14 13:37:31 +02:00
Marina Glancy 659d31bf25 MDL-27756 Improving move_course() performance 2011-07-14 11:02:43 +08:00
Rajesh Taneja 3012b215f6 MDL-27837 enrol - Fixed checkboxes for multiple self enrolment 2011-07-14 10:04:33 +08:00
Marina Glancy 7a97eccc48 MDL-25125 fix YUI bug with overriding styles 2011-07-14 10:00:52 +08:00
AMOS bot b8dd2bb73c Automatically generated installer lang files 2011-07-14 00:55:18 +00:00
Dan Marsden 2987d698b4 MDL-26482 SCORM add option to disable TOC completely - thanks to Clark Burns for some help! 2011-07-14 11:07:41 +12:00
Dan Marsden 082325c271 MDL-28300 SCORM Fix check for SCORM 2004 thanks to Silvia Bastos for report/patch 2011-07-14 11:02:05 +12:00
Sam Hemelryk 93d82f4601 weekly release 2.1+ 2011-07-13 20:23:04 +08:00
Sam Hemelryk 3a9e75e464 Merge branch 'install_21_STABLE' of git://github.com/amosbot/moodle into MOODLE_21_STABLE 2011-07-13 20:08:56 +08:00
Sam Hemelryk accc55da27 Revert "MDL-23344 fix login form focus"
This reverts commit 2d28584695.
2011-07-13 20:03:56 +08:00
David Mudrak d1c368e050 MDL-28298 workshop: do not use a constant without explicit inclusion of the library
Instead of including whole formslib just to get the constant defined, I
decided to hard-code the value and put the reference to the comment so
that eventual grep would spot it. Of course that is is not nice at all
but it's lesser of two evils imho.
2011-07-13 10:28:04 +02:00
Rossiani Wijaya 35ef97232c MDL-27555 assignment module: remove 'submitted' option from optional setting for offline assignment type. 2011-07-13 15:32:21 +08:00
Sam Hemelryk f3e47fc8d2 MDL-28184 navigation: Tidied up handling of coursenode when adding course essentials 2011-07-13 14:59:31 +08:00
Sam Hemelryk 4479a18d52 MDL-27771 filter-text: Fixed typo contninue 2011-07-13 14:53:12 +08:00
Chris Follin 7869e36193 MDL-27305 forum: Added missing item to forum_get_view_actions 2011-07-13 14:23:08 +08:00
Sam Hemelryk aa132e3f9b MDL-25870 enrol-manual: Fixed pagination of AJAX search results for users when changing search 2011-07-13 14:02:53 +08:00
Sam Hemelryk 34ee79470f MDL-28137 unit tests: Fixed up problem with block manager tests when running unit tests after turning editing on 2011-07-13 13:45:15 +08:00
Sam Hemelryk 9b1ffd0159 MDL-28205 RSS: Fixed up notice and set better pagelayout type on manage feeds page 2011-07-13 10:32:15 +08:00
Sam Hemelryk 9741999e77 MDL-27696 datalib Fixed up misused params in get_logs_usercourse 2011-07-13 10:29:56 +08:00
Sam Hemelryk 3274dc1461 MDL-28040 navigation: Fixed up error with navigation when dealing with categories that have a lower sort order than the parent. 2011-07-13 10:00:16 +08:00
Eloy Lafuente (stronk7) fe97a3dc7a Merge branch 'MDL-28221-resource-conversion_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-07-12 19:05:04 +02:00
Eloy Lafuente (stronk7) 6f09ed8643 Merge branch 'm21_MDL-28017' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-07-12 16:30:33 +02:00
Eloy Lafuente (stronk7) e0dfb65718 MDL-28210 messaging: all includes but config.php must use $CFG-based abosolute paths 2011-07-12 12:21:16 +02:00
Andrew Davis (andyjdavis) 9cf58aba08 MDL-28210 messaging: Fixed requires problems in /message/discussion.php 2011-07-12 12:21:07 +02:00
Petr Skoda c43a4beda8 MDL-28273 waring that removing user from cohorts may unenrol from courses 2011-07-12 16:27:18 +08:00
AMOS bot 64149328dd Automatically generated installer lang files 2011-07-12 00:55:23 +00:00
Dan Marsden 15bec9a365 MDL-28017 SCORM add unset_config for old config var 2011-07-12 09:48:28 +12:00
David Mudrak 665120d4e6 MDL-28221 Legacy resource URL pointing to the course itself are migrated as File module
This patch replays the logic of resource_20_migrate() function. If a
file is referred via URL to the course files of the course being
backed up, then such a resource is converted to the File module
(mod/resource) rather than URL module.
2011-07-11 22:37:34 +02:00
Petr Skoda 74275cf6e5 MDL-22404 add cohort ID to user filters
We are using only ID because there might be hundreds of cohorts in the system at different contexts. There is no special access control because filtering is supposed to be used by admins only.
2011-07-11 20:24:11 +02:00
Eloy Lafuente (stronk7) 1187c38d6d Merge branch 'm21_MDL-26942' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-07-11 19:48:10 +02:00
Eloy Lafuente (stronk7) a19c77bd24 Merge branch 'MDL-27755_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-07-11 19:43:53 +02:00
Eloy Lafuente (stronk7) b8cde34b06 Merge branch 'MDL-27741_m21' of git://github.com/rwijaya/moodle into MOODLE_21_STABLE 2011-07-11 19:36:01 +02:00
Petr Skoda 2d28584695 MDL-23344 fix login form focus 2011-07-11 17:23:28 +02:00
Dan Poltawski c261b351cf MDL-23580 course overview - remove debugging junk 2011-07-11 16:47:28 +02:00
Tim Hunt 934c878eaa MDL-26165 quiz submit are-you-sure is potentially confusing. 2011-07-11 16:33:10 +02:00
Tim Hunt b11d374122 MDL-27483 make quiz repagination more robust. 2011-07-11 16:26:36 +02:00
Rossiani Wijaya 337284688d MDL-27931 admin bulk user upload: convert city as required field. Credit goes to Charles Fulton for supplying the patch. 2011-07-11 15:57:45 +02:00
Ruslan Kabalin 661dd2cf61 MDL-28186 messaging: Fix "Enable messagning setting" infuence on the menus
"Enable messaging system" (Site administration > Advanced features) is
supposed to control messaging between site users only, thus it should not
remove user messging preferences menu item. However, it may remove instant
messging preferences from providers list for the user.

Signed-off-by: Ruslan Kabalin <ruslan.kabalin@luns.net.uk>
2011-07-11 15:24:15 +02:00
David Mudrak b0e79df977 MDL-28221 resource: improved file not found handling
When the referenced file is not found, do not rely on the record in
resource_old as the resource can be actually restored from a 1.9 backup.
2011-07-11 12:12:38 +02:00
David Mudrak 6ca0ba0104 MDL-28221 resource: fixed a typo in variable names 2011-07-11 12:04:18 +02:00
Rossiani Wijaya 153694ed0a MDL-27741 forum subscribe link: Removed 'no' string in social course format to display a subscribe link if user is not enrolled 2011-07-11 17:04:05 +08:00
Sam Hemelryk 1541d1a36b Merge branch 'wip-mdl-27954-MOODLE_21_STABLE' of git://github.com/rajeshtaneja/moodle into MOODLE_21_STABLE 2011-07-11 16:02:18 +08:00
Tim Hunt c159d8e872 MDL-28195 confirm_action should allow the button labels to be customised 2011-07-11 15:03:39 +08:00
Sam Hemelryk a8361fc214 Merge branch 'wip-MDL-27429-m21' of git://github.com/Beedell/moodle into MOODLE_21_STABLE 2011-07-11 13:56:39 +08:00
Jamie Pratt 96c7aa3fe5 MDL-28268 Missing ORDER BY when using extra answer table.
From OU bug #921 "Order of answer fields in Variable numeric keeps changing" Cannot
reproduce this bug on my system but hopefully this will fix the problem. I added
an ORDER BY clause to the sql for fetching answers with extra answer fields.
2011-07-11 13:26:39 +08:00
Tim Hunt a3b71db63b MDL-28192 local_qeupgradehelper fix typo. 2011-07-11 13:18:37 +08:00
Dan Marsden 66c36644d3 MDL-28017 SCORM - remove admin setting incorrectly added as it was never used. 2011-07-11 15:44:50 +12:00
Sam Hemelryk 903c12c74b Merge branch 'm21_MDL-27947' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-07-11 11:31:48 +08:00
Sam Hemelryk 73d78d8de4 Merge branch 'MDL-27890_m21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-07-11 11:25:56 +08:00
Sam Hemelryk bbdd6f2dc1 Merge branch 'glossary_multilang_m21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-07-11 11:15:17 +08:00
Sam Hemelryk f738eb06e7 Merge branch 'mod_url_decode_m21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-07-11 11:04:18 +08:00
Sam Hemelryk 6f30a86bc7 Merge branch 'backup_groups_m21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-07-11 10:57:15 +08:00
Rajesh Taneja 4db5d94af5 MDL-27954 mod_database - fixed search navigation link 2011-07-11 10:28:47 +08:00
Eloy Lafuente (stronk7) 5299507674 MDL-28048 glossary - fix double ampersand & missing string 2011-07-11 01:40:27 +02:00
Eloy Lafuente (stronk7) d5a8ec5ccd MDL-28048 glossary - add multilang support to categories 2011-07-11 01:03:58 +02:00
Eloy Lafuente (stronk7) 4daa20bb5b MDL-28156 restore - fix some notices restoring empty courses 2011-07-10 13:12:49 +02:00
Eloy Lafuente (stronk7) 3a32daedb5 MDL-28156 restore - support restoring files without grade items 2011-07-10 00:53:29 +02:00
Eloy Lafuente (stronk7) 130fcbd649 MDL-27438 backup - on course backups add course gropus and groupings 2011-07-09 19:28:50 +02:00
Eloy Lafuente (stronk7) 96ab22afc8 MDL-27018 restore - decode links missing url->externalurl support 2011-07-09 13:35:51 +02:00
AMOS bot b88f5de7ec Automatically generated installer lang files 2011-07-09 00:55:20 +00:00
Dan Marsden 0ae4c47c76 MDL-27947 - fix TOC display on skipview - use correct org in TOC title 2011-07-09 11:48:22 +12:00
Dan Marsden 60201a66e0 SCORM MDL-26942 - merge scorm_get_toc into a single global function 2011-07-09 11:12:18 +12:00
John Beedell 5a062fcd8f MDL-27429 Adding tabindex and on keypress to the blocks show/hide icon. 2011-07-08 12:31:49 +01:00
AMOS bot 4481d845e1 Automatically generated installer lang files 2011-07-08 12:34:51 +02:00
Rossiani Wijaya fefd37d864 MDL-27755 course search: Add course id and shortname to search fields 2011-07-08 17:24:26 +08:00
Eloy Lafuente (stronk7) a938306457 weekly release 2.1+ 2011-07-08 11:22:28 +02:00
Eloy Lafuente (stronk7) 8718d91313 fix permissions 2011-07-08 11:12:55 +02:00
Eloy Lafuente (stronk7) 24813d35f7 Merge branch 'MDL-28015-workshop-sql_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-07-08 01:18:44 +02:00
Eloy Lafuente (stronk7) 8437ce030d Merge branch 'MDL-28168-custommenu_21_STABLE' of git://github.com/mudrd8mz/moodle into MOODLE_21_STABLE 2011-07-08 00:58:08 +02:00
Tim Hunt 583e6a6992 MDL-27890 tinymce - enable 30 as min height within moodle 2011-07-07 19:59:35 +02:00
Eloy Lafuente (stronk7) f738546c8f MDL-NOBUG tinymce - updated instructions to cover local modifications and other minor changes 2011-07-07 18:21:15 +02:00
Eloy Lafuente (stronk7) 0e24cfb800 MDL-27890 tinymce - allow it to be smaller 2011-07-07 17:36:59 +02:00
David Mudrak cabce0e259 MDL-28015 workshop - fixed unique list of columns in ORDER BY clause
MSSQL requires that the columns in the ORDER BY clause list must be
unique. The patch populates the list of fields by combining an array of
explicit sort definition with an array of implicit (default) sort
definition.
2011-07-07 15:16:29 +02:00
Sun Zhigang fbe00fbec7 MDL-27833 Backup - Fix can't search courses with non-latin characters during importing
PARAM_ALPHANUMEXT filter out all non-latin characters, including
Chinese, Japanese and etc. Use PARAM_NOTAGS instead.
2011-07-07 10:39:24 +02:00
Aparup Banerjee 2fa78e85e9 MDL-28169 Installation Added 2.1 upgrade (idiot proof) lines to upgrade scripts. 2011-07-07 10:24:38 +02:00
Petr Skoda dd402d1fa3 MDL-28163 custom site frontpage support 2011-07-07 10:15:34 +02:00
Eloy Lafuente (stronk7) 14cf05a2cf Merge branch 'm21_MDL-28110' of git://github.com/danmarsden/moodle into MOODLE_21_STABLE 2011-07-07 03:01:30 +02:00
Eloy Lafuente (stronk7) acfa08a69f MDL-27989 whitespace fix 2011-07-07 02:22:54 +02:00
Eloy Lafuente (stronk7) e986a24a9d Merge branch 'MDL-27989_MOODLE_21_STABLE' of git://github.com/kordan/moodle into MOODLE_21_STABLE 2011-07-07 02:22:22 +02:00
Dan Poltawski 7a0374f6e7 MDL-26285 block_rss_client - do not disable with enablerssfeeds
This setting was used in 1.9 and below to control feed generation only, not
for RSS consumption.
2011-07-07 02:11:44 +02:00
Petr Skoda 78087ddfa5 MDL-27375 add missing lowercasing of external column names
Credit goes to Gail Preuninger.
2011-07-07 01:40:35 +02:00
Petr Skoda bde4f81335 MDL-28117 include repo lib when hacking file_picker renderer 2011-07-07 01:34:12 +02:00
Dan Poltawski 334b4f6301 MDL-27329 course report - correct use of wrong fullname
We are refering to users in this column of the course report not
course full name.
2011-07-07 00:25:11 +02:00
Dan Poltawski e4318be030 MDL-28100 - page resource was not using context for text filtering 2011-07-07 00:12:46 +02:00
Dan Poltawski 4c26ea1713 MDL-27279 lang/en/xmldb - Fix Typo in confirmcheckforeignkeys 2011-07-07 00:01:45 +02:00
Tim Hunt 40ff08d84f MDL-28222 quiz reports missing context in call to quiz_report_feedback_for_grade. 2011-07-06 20:29:20 +02:00
Tim Hunt 9a1da08340 MDL-27040 get_users_by_capability generates u.id IN () when no uesrs have accessallgroups 2011-07-06 19:26:30 +02:00
Tim Hunt eeb78f323a MDL-28166 fix some more instances of my favourite becuase typo. 2011-07-06 19:21:02 +02:00
Tim Hunt 54bf1cf7dc MDL-28166 send quiz event notifications asynchronously.
This avoids the problem that you cannot send messages in transactions.

It also means that the quiz submission will not be prevented, and the
message will still be sent eventually, if any part of the messaging
system is giving intermittent errors when the student wants to submit
their quiz.
2011-07-06 19:20:50 +02:00
Sun Zhigang 376d87ca03 MDL-27934 Upload Assignment - Remove useless code 2011-07-06 13:26:21 +08:00
Dan Poltawski fbb580c38a MDL-27855 navigation - only display participants link with permissions 2011-07-06 13:20:46 +08:00
Dan Poltawski 35a39e35e2 MDL-27168 completionstatus block - Use localized strings 2011-07-06 12:04:16 +08:00
Dan Poltawski 84a05572c9 MDL-26626 course competion block - fix hardcoded string 2011-07-06 11:21:35 +08:00
Dan Poltawski c01d7b4d79 MDL-26611 Roles Language - remove reference to 'legacy role type' 2011-07-06 11:10:08 +08:00
Sam Hemelryk baa97ed623 Merge branch 'MDL-28135_MOODLE_21_STABLE' of git://github.com/nebgor/moodle into MOODLE_21_STABLE 2011-07-06 11:02:55 +08:00
Petr Skoda 05f4555422 MDL-28147 do not double cache theme css/js 2011-07-06 03:15:03 +02:00
Tim Hunt a5dd15e921 MDL-28160 question preview window uses wrong pagelayout in activity contexts 2011-07-06 03:08:41 +02:00
Petr Skoda 05299908b4 MDL-28161 precreate htmlpurifier dir when resetting caches
Includes sloppy whitespace fix.
2011-07-06 02:55:00 +02:00
Petr Skoda 9a49e6004b MDL-28167 fix missing new
And sloppy whitespace.
2011-07-06 02:09:54 +02:00
Sam Hemelryk a3fd215cb8 MDL-28172 forum: Fixed up overzealous check for portfolio enabled. 2011-07-06 02:02:02 +02:00
Tim Hunt 6ff0bacee1 MDL-28179 make failed event hander error message much more useful. 2011-07-06 01:49:02 +02:00
Andrew Robert Nicols 757ca142ca MDL-28193 Add $external arg to get_driver_instance
Signed-off-by: Andrew Robert Nicols <andrew.nicols@luns.net.uk>
2011-07-06 01:40:35 +02:00
Eloy Lafuente (stronk7) 98e86d8b27 MDL-28196 quiz calls get_in_or_equal (fixing missing $DB) 2011-07-05 22:00:51 +02:00
Tim Hunt 69b88de0df MDL-28196 quiz calls get_in_or_equal (not DB->get_in_or_equal) in two places
Also, another minor error in one method call.
2011-07-05 21:56:37 +02:00
Tim Hunt 17b8d59a0a MDL-27821 backup_exception should not throw away debug info. 2011-07-05 19:43:54 +02:00
Eloy Lafuente (stronk7) d396a03bac Merge branch 'MDL-28185_m21' of git://github.com/stronk7/moodle into MOODLE_21_STABLE 2011-07-05 17:59:57 +02:00
Tim Hunt f404343487 MDL-26618 Moving sticky blocks on other pages does not work in Oracle.
This was due to some missing $DB->sql_empty() in a query affecting the
block_positions table.
2011-07-05 17:47:37 +02:00
Eloy Lafuente (stronk7) f8632149ad MDL-28185 upgrade - fix oracle problem upgrading blocks 2011-07-05 15:38:09 +02:00
David Mudrak a056d4fa9e MDL-28168 Multi-language support for custom_menu reimplemented
This is a reimplementation of the multi-language support for the
custom_menu class. The menu items now accept the forth optional
parameter with the explicit list of languages the item is valid for. If
no languages are listed, the item is valid for any language. The caller
of the custom_menu constructor must provide the user's current language
or null if the multi-language should not be supported (all items are
valid for any language then, regardless the definition).

See the attached unit tests for the examples of usage.
2011-07-05 12:22:26 +02:00
Kordan 3c9cd14006 addition to previous fix for MDL-27989 in MOODLE_21_STABLE 2011-07-05 11:30:50 +02:00
Tim Hunt d5670c612b MDL-25357 Allow maximum number of sections to be set by the admin. Also allow 0 sections at an choice.
Also fix one bad <br/> in another lang string.
2011-07-05 16:59:57 +08:00
David Mudrak 88d9d9fba5 MDL-28168 Improved custom_menu constructor
This improves custom_menu constructor by dropping support for useless
$text parameter and replacing it with the menu definition. This makes
custom_menu instance independent on the place where the menu is defined
($CFG->custommenuitems) and can be unit-tested. Also, multiple instances
of custom_menu can be instantiated now which can be interesting in the
future.
2011-07-05 10:26:01 +02:00
Kordan cc3e8c536c MDL-27989 fix for MOODLE_21_STABLE 2011-07-05 10:21:13 +02:00
Aparup Banerjee a43b8cf330 MDL-28135 general Updated broken and typo docs links 2011-07-05 15:17:23 +08:00
Aparup Banerjee 028fba6878 MDL-28135 general Updated the Copyright notice to point to docs.moodle.org/dev/Releases instead of en/Release 2011-07-05 15:17:15 +08:00
Aparup Banerjee 8f32d623c5 MDL-28135 general Updated doc links related to Release notes to docs.moodle.org/dev/Releases now 2011-07-05 15:17:06 +08:00
Aparup Banerjee 63e8936bb1 MDL-28135 general Updating all hardcoded "docs.moodle.org/en/Development:" type doc links to "docs.moodle.org/dev/" 2011-07-05 15:16:55 +08:00
David Mudrak 5b806d1524 MDL-28168 Revert "MDL-27073 Support multi-language content in custom menu"
This reverts commit 87e0230d0a.
2011-07-05 09:08:49 +02:00
Iñaki Arenaza 7679e8d256 MDL-24666 sync_users.php can throw db exception on sites upgraded from 1.x
From 2.0 on we lowercase all the settings related to LDAP attributes
to cope with differences in LDAP servers when returning attribute
names as array indices (some lowercase them, some leave them as
specified in the query, some normalize them, etc.).

But we only lowercase them when saving the settings page. So on sites
that have been migrated from 1.x, it may happen that we still have
mixed-case attribute names. And this is fatal for the user_attribute
setting, as we might not detect it in the returned array from LDAP and
it will be empty (and the db layer throws and exception).

So we just make sure the attribute name is lowercased (and trimmed,
in case it's got some white space around it).

Signed-off-by: Iñaki Arenaza <iarenaza@mondragon.edu>
2011-07-04 21:46:44 +02:00
Dan Marsden e1a1827b59 SCORM MDL-28110 fix string name 2011-07-03 12:54:41 +12:00
Dan Marsden 9f098ef0ec SCORM MDL-28110 set default for forcejavascript to yes - add string explaining what it does. 2011-07-03 12:54:31 +12:00
33489 changed files with 1480931 additions and 4807887 deletions
-249
View File
@@ -1,249 +0,0 @@
{
'plugins': [
'@babel',
'promise',
'jsdoc'
],
'extends': [
'eslint:recommended',
'plugin:promise/recommended'
],
'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
},
// Warn about unused eslint-disable statements.
'reportUnusedDisableDirectives': true,
'rules': {
// See http://eslint.org/docs/rules/ for all rules and explanations of all
// rules.
// === Possible Errors ===
'comma-dangle': 'off',
'no-console': 'error',
'no-empty': 'warn',
'no-extra-parens': 'off',
'no-prototype-builtins': 'off',
'no-unreachable': 'warn',
// === 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-div-regex': 'error',
'no-empty-function': 'warn',
'no-eq-null': 'error',
'no-eval': 'error',
'no-extend-native': 'error',
'no-extra-bind': 'warn',
'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-escape': 'error',
'no-proto': 'error',
'no-redeclare': 'warn',
'no-restricted-globals': ['error', { 'name': 'Notification' }],
'no-return-assign': 'error',
'no-script-url': 'error',
'no-self-compare': 'error',
'no-sequences': 'warn',
'no-throw-literal': 'warn',
'no-unmodified-loop-condition': 'error',
'no-unused-expressions': 'error',
'no-useless-call': 'warn',
'no-useless-escape': 'warn',
'wrap-iife': ['error', 'any'],
// === Variables ===
'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-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-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',
'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 (override plugin:promise/recommended) ===
'promise/always-return': 'warn',
'promise/no-return-wrap': 'warn',
'promise/param-names': 'warn',
'promise/catch-or-return': ['warn', {terminationMethod: ['catch', 'fail', 'always'], allowFinally: true}],
'promise/no-native': 'warn',
'promise/avoid-new': 'warn',
// === Deprecations ===
"no-restricted-properties": ['warn', {
'object': 'M',
'property': 'str',
'message': 'Use "core/str" module 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-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',
'@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]
-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.md guidelines for how to contribute patches for Moodle. Thank you.
--
-6
View File
@@ -1,6 +0,0 @@
> [!IMPORTANT]
> PLEASE DO NOT PUBLISH SECURITY FINDINGS PUBLICLY.
If you discover a potential security issue, please report it via our [Security Submission Form](https://moodle.org/security/report).
For more information about our security processes and responsible disclosure policy, see the [Security Procedures documentation](https://moodledev.io/general/development/process/security).
-1
View File
@@ -1 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1231.24 314.44" preserveAspectRatio="xMinYMid meet"><defs><style>.cls-1{fill:#f48020;}.cls-2,.cls-3{fill:#383738;stroke:#4a4a4c;}.cls-2{stroke-width:2.37px;}.cls-3{stroke-width:2.38px;}.cls-4{fill:#585858;}</style></defs><title>Moodle_Logo_UseonBlack_RGB</title><path class="cls-1" d="M1086.3,235.34a53.42,53.42,0,0,0,16.71,29q13.26,12.27,29.48,12.27,11.29,0,24.56-5.89,16.23-6.88,16.22-16.22l58-.49q-12.29,29-41.76,45.2-27.52,15.23-60.43,15.24-42.25,0-70-26.29t-27.75-68.54q0-43.73,27.75-69.51t72-25.8q48.15,0,75.17,31.94,25.07,29.47,25.06,79.1Zm89.91-33.91q-3.43-17.69-14.73-29-12.8-12.28-29.49-12.29-17.21,0-28.74,11.79t-15.47,29.48Z"/><path class="cls-1" d="M965.45,308.54V0h55V308.54Z"/><path class="cls-1" d="M892.69,308.54V290.36q-7.38,9.83-25.06,15.72a92.31,92.31,0,0,1-30,5.41q-39.31,0-63.13-27T750.7,217.65q0-39.3,23.34-65.84t62.15-26.53q43.71,0,56.5,23.58V0h53.55V308.54Zm0-102.68q0-14.75-14-28.26t-28.74-13.51q-21.12,0-33.41,17.2-10.8,15.24-10.8,37.33,0,21.63,10.8,36.85,12.29,17.71,33.41,17.69,12.78,0,27.76-12t15-24.81Z"/><path class="cls-1" d="M647,313.45q-41.77,0-69-26.53t-27.27-68.3q0-41.73,27.27-68.28t69-26.53q41.75,0,69.27,26.53t27.52,68.28q0,41.79-27.52,68.3T647,313.45ZM647,168q-19.89,0-30.58,15.07t-10.68,35.79q0,20.73,9.94,35.05,11.43,16.31,31.32,16.28t31.32-16.28q10.44-14.31,10.44-35.05t-9.94-35Q667.42,168,647,168Z"/><path class="cls-1" d="M448.07,313.45q-41.76,0-69-26.53t-27.27-68.3q0-41.73,27.27-68.28t69-26.53q41.74,0,69.28,26.53t27.5,68.28q0,41.79-27.5,68.3T448.07,313.45Zm0-145.43q-19.89,0-30.59,15.07t-10.69,35.79q0,20.73,9.94,35.05,11.43,16.31,31.34,16.28t31.32-16.28q10.42-14.31,10.44-35.05t-9.94-35Q468.45,168,448.07,168Z"/><path class="cls-1" d="M288.89,309.11V201q0-33.9-28-33.9t-28,33.9V309.11h-55V201q0-33.9-27.52-33.9-28,0-28,33.9V309.11h-55V194.65q0-35.37,24.56-53.54,21.61-16.22,58.46-16.22,37.35,0,55,19.16,15.23-19.16,55.51-19.16,36.86,0,58.45,16.22,24.57,18.16,24.57,53.54V309.11Z"/><path class="cls-2" d="M.76,145.76"/><path class="cls-3" d="M1.73,145.32"/><path class="cls-4" d="M173.86,116.85l55.08-40.1-.7-2.44C135,83.92,80.42,96.44,0,144.13l.73,2.38,21-.67c15.17.52,30.85,1.26,46,1.32-1,24.09.83,32.65.83,32.65,51.92,17.58,101.22,1.53,127.14-43.9A248.72,248.72,0,0,0,173.86,116.85Z"/><path class="cls-4" d="M113.78,110c-.3-1.08-2.23-1.48-4.28-.9a4.73,4.73,0,0,0-3.14,2.19c-18.53,5-49.16,13.72-70.73,21l-1.33.45c-16.68,5.61-24.73,8.49-25.22,12.55-2.29,18.44-.87,42.18-.86,42.48l.19,6.4c-9.74,27.56.06,49.6,8.38,69.77.06-24.92,1.07-45.22-6-71-.2-3.82-1.49-30.36.61-47.34.34-2.75,11.65-6.56,23.63-10.59l1.33-.44c22-7.42,53.57-16.39,71.9-21.29a6.75,6.75,0,0,0,2.29-.25C112.64,112.43,114.08,111.09,113.78,110Z"/></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

-31
View File
@@ -1,31 +0,0 @@
name: 'Close Pull Requests'
on:
pull_request_target:
types: opened
workflow_dispatch:
jobs:
close:
# Avoid forks to run this job
if: github.repository_owner == 'moodle'
name: Close Pull Requests
runs-on: ubuntu-latest
steps:
- uses: dessant/repo-lockdown@v4
with:
process-only: prs
close-pr: true
skip-closed-pr-comment: true
pr-comment: >
**Please, don't open pull requests via GitHub.**
This repository (moodle.git) at GitHub is just a mirror of the official Moodle repository.
For how to contribute patches for Moodle see
[CONTRIBUTING.md](https://github.com/moodle/moodle/blob/main/CONTRIBUTING.md).
Closing this pull request.
-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');
-143
View File
@@ -1,143 +0,0 @@
name: One by One Testing
# Run all the individual unit tests one by one, with
# fully independent PHPUnit executions. Useful to
# detect issues with some tests that are using stuff
# that has been made available by others, but is not
# available when running individually.
#
# Note that we aren't using PHPUnit's own isolation
# here but completely separated runs, one for each
# test.
#
# The workflow will fail reporting all the tests
# that have failed (and will pass if no failure is
# detected, of course).
#
# It's only executed via workflow dispatch (automated
# or manual), not by push/tag. And acceptd configuration
# of phpunit, specially useful to run it with PHPUnit's
# own isolation or any other option.
on:
workflow_dispatch:
inputs:
phpunit_extra_options:
description: Additional options to apply to PHPUnit
required: false
default: ''
env:
chunks: 7
jobs:
collect:
name: Collect individual unit tests
runs-on: ubuntu-latest
outputs:
matrix: ${{steps.individual-tests.outputs.matrix }}
steps:
- name: Checking out code
uses: actions/checkout@v4
- name: Looking for all individual tests
id: individual-tests
run: |
count=0 # Number of individual tests found.
while read -r testfile; do # For each test file.
while read -r testname; do # For each unit test in a file.
count=$((count + 1))
# Sent it to the correct chunk file.
chunk=$(((($count % $chunks)) + 1))
echo "$testname $testfile" >> ./chunk_$chunk.txt
done < <(grep "function test_" "${testfile}" | sed -r "s/^.*function (test_[a-zA-Z0-9_]+).*/\1/")
done < <(find . -name "*_test.php")
# Generate the matrix to run tests.
echo "matrix=$(ls -1 chunk_*.txt | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
echo "$count individual tests collected in $chunks files"
- name: Upload individual tests files
uses: actions/upload-artifact@v4
with:
name: individual_tests
path: chunk_*.txt
retention-days: 1
test:
name: Run tests
needs: collect
runs-on: ubuntu-latest
services:
exttests:
image: moodlehq/moodle-exttests
ports:
- 8080:80
redis:
image: redis
ports:
- 6379:6379
strategy:
fail-fast: false
matrix:
file: ${{ fromJson(needs.collect.outputs.matrix) }}
steps:
- name: Setting up DB pgsql
uses: m4nu56/postgresql-action@v1
with:
postgresql version: 13
postgresql db: test
postgresql user: test
postgresql password: test
- name: Setting up PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.3
ini-values: max_input_vars=5000
coverage: none
- name: Checking out code
uses: actions/checkout@v4
- name: Download individual test files
uses: actions/download-artifact@v4
with:
name: individual_tests # Make all the chunk files available for the next steps.
- name: Setting up PHPUnit
env:
dbtype: pgsql
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV
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: Run PHPUnit test (one by one)
env:
dbtype: pgsql
run: |
status=0
count=0
while read -r line; do # For each line in the chunk file
count=$((count + 1))
filter="${line% *}"
file="${line#* }"
# Run the individual unit test and report problems if needed to.
if ! php vendor/bin/phpunit \
--fail-on-empty-test-suite \
--fail-on-warning \
--fail-on-risky \
--filter "$filter" ${{ inputs.phpunit_extra_options }} \
"$file" >/dev/null 2>&1; then
if [ $status -eq 0 ]; then
echo "Problems found, list of PHPUnit commands failing:"
fi
echo "vendor/bin/phpunit --filter '${filter}' ${{ inputs.phpunit_extra_options }} $file"
status=$((status + 1))
fi
done < ${{ matrix.file }}
echo "Finished: $count individual tests executed, $status tests failed"
exit $status
-127
View File
@@ -1,127 +0,0 @@
name: Core
on:
push:
branches-ignore:
- main
- MOODLE_[0-9]+_STABLE
tags-ignore:
- v[0-9]+.[0-9]+.[0-9]+*
workflow_dispatch:
inputs:
phpunit_extra_options:
description: Additional options to apply to PHPUnit
required: false
default: ''
env:
php: 8.3
jobs:
Grunt:
runs-on: ubuntu-22.04
steps:
- name: Checking out code
uses: actions/checkout@v4
- name: Configuring node & npm
uses: actions/setup-node@v4
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.1
extensions:
db: mysqli
# PostgreSQL builds always run with the highest PHP supported version.
- os: ubuntu-22.04
php: 8.3
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@v4
- 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 ${{ inputs.phpunit_extra_options }}
- name: Git status
run: git status
-23
View File
@@ -1,23 +0,0 @@
name: Web Installer Testing
on:
workflow_dispatch:
jobs:
InstallationTest:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
php: [8.1, 8.3]
steps:
- name: Construct repository URL
run: echo "REPOSITORY_URL=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}" >> $GITHUB_ENV
shell: bash
- uses: moodlehq/moodle-webinstaller-test@main
with:
repository: ${{ env.REPOSITORY_URL }}
branch: ${{ github.ref_name }}
php: ${{ matrix.php }}
-149
View File
@@ -1,149 +0,0 @@
name: Windows Testing
on:
workflow_dispatch:
inputs:
phpunit_extra_options:
description: Additional options to apply to PHPUnit
required: false
default: ''
env:
php: 8.3
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@v4
- name: Configuring node & npm
uses: actions/setup-node@v4
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.3
# 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.1
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@v4
# 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 ${{ inputs.phpunit_extra_options }}
+3 -37
View File
@@ -9,26 +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.*
!/.phpstorm.meta.php/
/.phpstorm.meta.php/*
!/.phpstorm.meta.php/di.php
/nbproject/
CVS
.DS_Store
@@ -36,26 +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
UPGRADING-CURRENT.md
-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);
}
}
}
};
};
-419
View File
@@ -1,419 +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 = [];
componentData.components = {};
componentData.standardComponents = {};
// Fetch the component definiitions from the distributed JSON file.
const components = JSON.parse(fs.readFileSync(`${gruntFilePath}/lib/components.json`));
const pluginData = JSON.parse(fs.readFileSync(`${gruntFilePath}/lib/plugins.json`));
componentData.pluginTypes = components.plugintypes;
const standardPlugins = Object.entries(pluginData.standard).map(
([pluginType, pluginNames]) => {
return pluginNames.map(pluginName => `${pluginType}_${pluginName}`);
}
).reduce((acc, val) => acc.concat(val), []);
// 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 includes 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);
});
});
}
});
});
// Create a list of the standard subsystem and plugins.
componentData.standardComponents = Object.fromEntries(
Object.entries(componentData.components).filter(([, name]) => {
if (name === 'core' || name.startsWith('core_')) {
return true;
}
return standardPlugins.indexOf(name) !== -1;
})
);
componentData.componentMapping = Object.fromEntries(
Object.entries(componentData.components).map(([path, name]) => [name, path])
);
}
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,
},
};
-138
View File
@@ -1,138 +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 * as Components from '../../components.js';
const componentData = Components.fetchComponentData();
/**
* The standard components shipped with core Moodle.
*
* @type {Object}
*/
export const standardComponents = componentData.standardComponents;
/**
* All components of the current Moodle instance.
*
* @type {Object}
*/
export const allComponents = componentData.components;
/**
* Get all components of the current Moodle instance.
*
* @returns {Array}
*/
export const getAllComponents = () => {
let components = new Map(Object.entries(componentData.pluginTypes).map(([value, path]) => ([path,{
path,
value,
name: `${value} (plugin type)`,
}])));
Object
.entries(componentData.components)
.filter(([path, value]) => Object.values(componentData.standardComponents).includes(value))
.forEach(([path, value]) => {
const entry = {
path,
value,
name: value,
};
if (Object.values(componentData.subsystems).includes(value)) {
if (components.has(path)) {
entry.name = `${value} (subsystem / plugintype)`;
} else {
entry.name = `${value} (subsystem)`;
}
}
components.set(path, entry);
});
return Array.from(components.values());
};
/**
* Whether the specified component is a standard component shipped with core Moodle.
*
* @param {string} componentName
* @returns {boolean}
*/
export const isStandardComponent = (componentName) => {
if (Object.values(componentData.standardComponents).includes(componentName)) {
return true;
}
if (Object.keys(componentData.pluginTypes).includes(componentName)) {
return true;
}
return false;
};
export const rewritePlugintypeAsSubsystem = (componentName) => {
if (Object.keys(componentData.pluginTypes).includes(componentName)) {
const pluginTypePath = componentData.pluginTypes[componentName];
if (Object.keys(componentData.subsystems).includes(pluginTypePath)) {
return true;
}
}
return false;
};
/**
* Whether the specified component is a community component.
*
* @param {string} componentName
* @returns {boolean}
*/
export const isCommunityComponent = (componentName) => {
if (isStandardComponent(componentName)) {
return false;
}
return Object.values(componentData.components).indexOf(componentName) !== -1;
};
/**
* Sort method for components.
*
* This method sorts components putting `core` first, followed by core subsystems, then everything else.
*
* @param {String} a
* @param {String} b
* @returns {Number}
*/
export const sortComponents = (a, b) => {
// Always put 'core' first.
if (a === 'core') {
return -1;
} else if (b === 'core') {
return 1;
}
// Put core subsystems next.
if (a.startsWith('core_') && !b.startsWith('core_')) {
return -1;
} else if (b.startsWith('core_') && !a.startsWith('core_')) {
return 1;
}
// Sort alphabetically for everything else.
return a.localeCompare(b);
};
-85
View File
@@ -1,85 +0,0 @@
#!/usr/bin/env node
// 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 inquirer from 'inquirer';
import chalk from 'chalk';
import { createNote } from './note.mjs';
import { getInitialValues } from './helpers.mjs';
import * as Prompts from './prompts.mjs';
import logger from './logger.mjs';
export default async (options) => {
// Processs the initial values.
const initialValues = getInitialValues(options);
// Fetch information.
const messages = [];
const { issueNumber } = await inquirer.prompt([
Prompts.getIssuePrompt(),
], initialValues);
let selection = {};
let notePath;
do {
selection = {};
selection = await inquirer.prompt([
Prompts.getComponentsPrompt(),
Prompts.getTypePrompt(),
Prompts.getMessagePromptInput(),
], initialValues);
if (selection.message === '') {
selection = Object.assign(
selection,
await inquirer.prompt([
Prompts.getMessagePromptEditor(),
]),
);
}
logger.info(`
Creating upgrade note with the following options:
- Issue: ${chalk.bold(issueNumber)}
- Component: ${chalk.bold(selection.components)}
- Type: ${chalk.bold(selection.type)}
- Message:
${chalk.bold(selection.message)}
`);
messages.push({
components: [selection.components],
type: selection.type,
message: selection.message,
});
// Save the note so far.
if (notePath) {
await createNote(issueNumber, messages, notePath);
logger.info(`Updated note at: ${chalk.underline(chalk.bold(notePath))}`);
} else {
notePath = await createNote(issueNumber, messages);
logger.info(`Note created at: ${chalk.underline(chalk.bold(notePath))}`);
}
selection = Object.assign(
selection,
await inquirer.prompt([
Prompts.getAddAnotherPrompt(),
], initialValues),
);
} while (selection.addAnother);
};
-357
View File
@@ -1,357 +0,0 @@
#!/usr/bin/env node
// 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 chalk from 'chalk';
import { getAllComponents } from './components.mjs';
import { getCombinedNotesByComponent, deleteAllNotes } from './note.mjs';
import { getNoteName } from './noteTypes.mjs';
import { writeFile, readFile, unlink } from 'fs/promises';
import { join as joinPath } from 'path';
import logger from './logger.mjs';
import { getCurrentVersion } from './helpers.mjs';
/**
* Helper to fetch the current notes from a file.
*
* @param {string} file
* @returns {Promise<string>}
*/
const getCurrentNotes = async (file) => {
try {
return await readFile(file, 'utf8');
} catch (error) {
return null;
}
}
/**
* Update the UPGRADING.md file.
*
* @param {string} upgradeNotes
* @param {Object} options
* @param {boolean} options.deleteNotes
* @returns {Promise<void>}
*/
const updateUpgradeNotes = async (upgradeNotes, options) => {
const fileName = 'UPGRADING.md';
// Write the notes to a file.
logger.info(`Writing notes to ${chalk.underline(chalk.bold(fileName))}`);
// Prepend to the existing file.
const existingContent = await getCurrentNotes(fileName);
if (existingContent) {
await writeFile(fileName, getUpdatedNotes(existingContent, upgradeNotes));
} else {
// This should not normally happen.
await writeFile(fileName, upgradeNotes);
}
if (options.deleteNotes) {
logger.warn(`>>> Deleting all notes <<<`)
// Delete the notes.
deleteAllNotes();
}
};
/**
* Create the current summary notes.
*
* @param {string} upgradeNotes
* @returns {Promise<void>}
*/
const createCurrentSummary = async (upgradeNotes) => {
const fileName = 'UPGRADING-CURRENT.md';
const notes = `# Moodle upgrade notes\n\n${upgradeNotes}`;
await writeFile(fileName, notes);
logger.info(`Running upgrade notes written to ${chalk.underline(chalk.bold(fileName))}`);
};
/**
* Get the indexes of the lines that contain the version headings.
*
* @param {array<string>} lines
* @returns {array<object>}
*/
const getVersionLineIndexes = (lines) => {
const h2Indexes = [];
lines.forEach((line, index) => {
const matches = line.match(/^##\s(?<version>.*)$/);
if (matches) {
h2Indexes.push({
index,
line,
version: matches.groups.version,
});
}
});
return h2Indexes;
};
/**
* Find the index of the Unreleased heading.
*
* @param {array<object>} versionHeadings
* @returns {number}
*/
const findUnreleasedHeadingIndex = (versionHeadings) => versionHeadings.findIndex((heading) => {
if (heading.version === 'Unreleased') {
// Used if version cannot be guessed.
return true;
}
if (heading.version.endsWith('+')) {
// Weekly release for a stable branch.
return true;
}
if (heading.version.match(/beta|rc\d/)) {
// Beta and RC rolls are treated as weeklies.
return true;
}
if (heading.version.endsWith('dev')) {
// Development version.
return true;
}
return false;
});
/**
* Get the before and after content, to facilitate replacing any existing Unreleased notes.
*
* @param {array<string>} lines
* @returns {Object} {beforeContent: string, afterContent: string}
*/
const getBeforeAndAfterContent = (lines) => {
const existingLines = lines.split('\n');
const versionHeadings = getVersionLineIndexes(existingLines);
if (versionHeadings.length > 0) {
const unreleasedHeadingIndex = findUnreleasedHeadingIndex(versionHeadings);
if (unreleasedHeadingIndex !== -1) {
const beforeContent = existingLines.slice(0, versionHeadings[unreleasedHeadingIndex].index).join('\n');
if (versionHeadings.length > unreleasedHeadingIndex + 1) {
const afterContent = existingLines.slice(versionHeadings[unreleasedHeadingIndex + 1].index).join('\n');
return {
beforeContent,
afterContent,
};
}
return {
beforeContent,
afterContent: '',
};
}
return {
beforeContent: existingLines.slice(0, versionHeadings[0].index).join('\n'),
afterContent: existingLines.slice(versionHeadings[0].index).join('\n'),
};
}
return {
beforeContent: existingLines.join('\n'),
afterContent: '',
}
};
/**
* Get the notes for the component.
*
* @param {string} types
* @param {Number} headingLevel
* @returns {string}
*/
const getNotesForComponent = (types, headingLevel) => {
let upgradeNotes = '';
Object.entries(types).forEach(([type, notes]) => {
upgradeNotes += '#'.repeat(headingLevel);
upgradeNotes += ` ${getNoteName(type)}\n\n`;
notes.forEach(({ message, issueNumber }) => {
// Split the message into lines, removing empty lines.
const messageLines = message
.split('\n')
// Remove empty lines between tables, and list entries, but not after lists.
.filter((line, index, lines) => {
if (line.trim().length === 0) {
// This line is empty.
// If it's the first line in the file, remove it.
if (index === 0) {
return false;
}
// This is the last line in the file, remove it.
if (index === lines.length - 1) {
return false;
}
// If the previous line relates to a table, remove this line.
if (lines[index - 1].match(/^\s*\|/)) {
return false;
}
// If the next line is also empty, do not remove this line.
if (lines[index + 1].trim().length === 0) {
return true;
}
// Do not remove the line if the previous line was a list item.
if (lines[index - 1].match(/^\s*[-*]\s/)) {
return true;
}
if (lines[index - 1].match(/^\s*\d+\.\s/)) {
return true;
}
// Preserve all other empty lines by default.
return true;
}
// Keep any line which has content.
return true;
});
const firstLine = messageLines.shift().trim();
upgradeNotes += `- ${firstLine}\n`;
messageLines
.forEach((line) => {
upgradeNotes += ` ${line}`.trimEnd() + `\n`;
});
upgradeNotes += `\n For more information see [${issueNumber}](https://tracker.moodle.org/browse/${issueNumber})\n`;
});
upgradeNotes += '\n';
});
return upgradeNotes;
};
/**
* Get the updated notes mixed with existing content.
*
* @param {string} existingContent
* @param {string} upgradeNotes
*/
const getUpdatedNotes = (existingContent, upgradeNotes) => {
const { beforeContent, afterContent } = getBeforeAndAfterContent(existingContent);
const newContent = `${beforeContent}\n${upgradeNotes}\n${afterContent}`
.split('\n')
.filter((line, index, lines) => {
if (line === '' && lines[index - 1] === '') {
// Remove multiple consecutive empty lines.
return false;
}
return true;
})
.join('\n');
return newContent;
};
/**
* Update the notes for each component.
*/
const updateComponentNotes = (
notes,
version,
notesFileName = 'UPGRADING.md',
removeEmpty = false,
) => {
return getAllComponents().map(async (component) => {
logger.verbose(`Updating notes for ${component.name} into ${component.path}`);
const fileName = joinPath(component.path, notesFileName);
const existingContent = await getCurrentNotes(fileName);
if (!existingContent) {
if (!notes[component.value]) {
// No existing notes, and no new notes to add.
return;
}
} else {
if (!notes[component.value]) {
// There is existing content, but nothing to add.
if (removeEmpty) {
logger.verbose(`Removing empty notes file ${fileName}`);
await unlink(fileName);
}
return;
}
}
const componentNotes = notes[component.value];
let upgradeNotes = `## ${version}\n\n`;
upgradeNotes += getNotesForComponent(componentNotes, 3);
if (existingContent) {
await writeFile(fileName, getUpdatedNotes(existingContent, upgradeNotes));
} else {
await writeFile(
fileName,
`# ${component.name} Upgrade notes\n\n${upgradeNotes}`,
);
}
});
}
/**
* Generate the upgrade notes for a new release.
*
* @param {string|undefined} version
* @param {Object} options
* @param {boolean} options.generateUpgradeNotes
* @param {boolean} options.deleteNotes
* @returns {Promise<void>}
*/
export default async (version, options = {}) => {
const notes = await getCombinedNotesByComponent();
if (Object.keys(notes).length === 0) {
logger.warn('No notes to generate');
return;
}
if (!version) {
version = await getCurrentVersion();
}
// Generate the upgrade notes for this release.
// We have
// - a title with the release name
// - the change types
// - which contain the components
// - which document each change
let upgradeNotes = `## ${version}\n\n`;
Object.entries(notes).forEach(([component, types]) => {
upgradeNotes += `### ${component}\n\n`;
upgradeNotes += getNotesForComponent(types, 4);
});
await Promise.all([
createCurrentSummary(upgradeNotes),
...updateComponentNotes(notes, version, 'UPGRADING-CURRENT.md', true),
]);
if (options.generateUpgradeNotes) {
await Promise.all(updateComponentNotes(notes, version));
await updateUpgradeNotes(upgradeNotes, options);
}
};
-230
View File
@@ -1,230 +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 chalk from 'chalk';
import { isStandardComponent, isCommunityComponent, rewritePlugintypeAsSubsystem } from './components.mjs';
import { isValidNoteName } from './noteTypes.mjs';
import logger from './logger.mjs';
import { readFile } from 'fs/promises';
/**
* Validate an issue number input
*
* @param {string} input
* @returns {string|boolean}
*/
export const validateIssueNumber = (input) => {
if (!input) {
return 'You must provide a tracker issue number';
}
if (input.match(/^[a-zA-Z]*-\d+$/)) {
return true;
}
if (input.match(/^\d+$/)) {
return true;
}
return 'The issue number was not recognised as a valid issue number';
};
/**
* Format an issue number input.
*
* @param {string} input
* @returns {string}
*/
export const formatIssueNumber = (input) => {
if (input.match(/^[a-zA-Z]*-\d+$/)) {
return input;
}
if (input.match(/^\d+$/)) {
return `MDL-${input}`;
}
return input;
};
/**
* Validate a component.
*
* @param {string} input
* @returns {string|boolean}
*/
export const validateComponent = (input) => {
if (isStandardComponent(input)) {
return true;
}
if (isCommunityComponent(input)) {
return 'Currently only core plugins are supported.';
}
return 'The component was not recognised as a standard component';
};
export const formatComponent = (input) => {
if (rewritePlugintypeAsSubsystem(input)) {
return `core_${input}`;
}
return input;
}
/**
* Get the initial values from the options.
*
* @param {object} options
* @returns {object}
*/
export const getInitialValues = (options) => {
const initialValues = {};
const type = getInitialTypeValue(options);
if (type) {
initialValues.type = type;
}
const issueNumber = getInitialIssueValue(options);
if (issueNumber) {
initialValues.issueNumber = issueNumber;
}
const component = getInitialComponentValue(options);
if (component) {
initialValues.components = component;
}
const message = getInitialMessageValue(options);
if (message) {
initialValues.message = message
initialValues.addAnother = false;
}
return initialValues;
};
/**
* Get the initial type value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialTypeValue = (options) => {
if (!options.type) {
return;
}
options.type = options.type.trim().toLowerCase();
if (isValidNoteName(options.type)) {
return options.type;
}
logger.warn(`Note type "${chalk.underline(chalk.red(options.type))}" is not valid.`);
};
/**
* Get the initial issue number value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialIssueValue = (options) => {
if (!options.issue) {
return;
}
options.issue = options.issue.trim().toUpperCase();
const issueNumberValidated = validateIssueNumber(options.issue);
if (issueNumberValidated === true) {
const issueNumber = formatIssueNumber(options.issue);
if (issueNumber !== options.issue) {
logger.warn(
`Issue number "${chalk.underline(chalk.red(options.issue))}" was updated to ` +
`"${chalk.underline(chalk.green(issueNumber))}"`
);
}
return issueNumber;
} else {
logger.warn(`Issue number "${chalk.underline(chalk.red(options.issue))}" is not valid: ${issueNumberValidated}`);
}
};
/**
* Get the initial component value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialComponentValue = (options) => {
if (!options.component) {
return;
}
options.component = options.component.trim().toLowerCase();
const componentValidated = validateComponent(options.component);
if (componentValidated === true) {
const component = formatComponent(options.component);
if (component !== options.component) {
logger.warn(
`Component "${chalk.underline(chalk.red(options.component))}" was updated to ` +
`"${chalk.underline(chalk.green(component))}"`
);
}
return component;
} else {
logger.warn(`Component "${chalk.underline(chalk.red(options.component))}" is not valid: ${componentValidated}`);
}
};
/**
* Get the initial message value.
*
* @param {Object} options
* @returns {string|undefined}
*/
const getInitialMessageValue = (options) => {
if (!options.message) {
return;
}
return options.message.trim();
};
/**
* Get the current version from the project /version.php file.
*
* @returns {Promise<string>}
*/
export const getCurrentVersion = async () => {
const versionRegex = new RegExp(/^ *\$release *= *['\"](?<release>[^ \+]+\+?) *\(Build:.*/m);
try {
const versionFile = await readFile('version.php', 'utf8');
const match = versionFile.match(versionRegex);
if (match) {
return match.groups.release;
}
} catch(error) {
logger.error('Unable to read the version file');
}
return "Unreleased";
}
-30
View File
@@ -1,30 +0,0 @@
#!/usr/bin/env node
// 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 winston from 'winston';
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
),
transports: [
new winston.transports.Console(),
],
});
export default logger;
-194
View File
@@ -1,194 +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 yaml from 'js-yaml';
import path from 'path';
import { writeFile, mkdir, readdir, readFile, unlink } from 'fs/promises';
import { isValidNoteName, sortNoteTypes } from './noteTypes.mjs';
import { sortComponents } from './components.mjs';
const unreleasedPath = path.resolve('.upgradenotes');
/**
* Get the filename for the note.
*
* @param {string} issueNumnber The issue number
* @returns {string}
*/
const getFilename = (issueNumber) => {
const dateTimeFormat = new Intl.DateTimeFormat(undefined, {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 2,
timeZone: 'UTC',
});
const date = Object.fromEntries(
dateTimeFormat.formatToParts(new Date())
.filter((p) => p.type !== 'literal')
.map((p) => ([p.type, p.value]))
);
const dateString = [
date.year,
date.month,
date.day,
date.hour,
date.minute,
date.second,
date.fractionalSecond,
].join('');
return `${issueNumber}-${dateString}.yml`;
};
/**
* Create a new note.
*
* @param {string} issueNumber
* @param {[type: string]: {message: string}} messages
* @returns {string} The path to the note on disk
*/
export const createNote = async (
issueNumber,
messages,
notePath,
) => {
const note = {
issueNumber,
notes: {},
};
messages.forEach(({components, type, message}) => {
note.notes[components] = note.notes[components] || [];
note.notes[components].push({message, type});
});
if (!notePath) {
notePath = path.resolve(unreleasedPath, getFilename(issueNumber));
}
const noteContent = yaml.dump(note);
await mkdir(unreleasedPath, {recursive: true});
await writeFile(notePath, noteContent);
return notePath;
};
/**
* Get all unreleased notes.
*
* @returns {Promise<{issueNumber: string, components: string[], types: {[type: string]: {message: string}[]}}[]>
*/
export const getAllNotes = async () => {
const files = await readdir(unreleasedPath);
const notes = files
.filter((file) => file.endsWith('.yml'))
.map(async (file) => {
const filePath = path.resolve(unreleasedPath, file);
const fileContent = await readFile(filePath, 'utf8');
return {
...yaml.load(fileContent),
filePath,
};
});
return Promise.all(notes);
};
/**
* Get the list of notes, grouped by note type, then component.
*
* @returns {Promise<{[type: string]: {[components: string]: {message: string, issueNumber: string}[]}}>}
*/
export const getCombinedNotes = async () => {
const notes = await getAllNotes();
const combinedNotes = {};
notes.forEach((note) => {
Object.entries(note.notes).forEach(([components, data]) => {
data.forEach((entry) => {
if (!isValidNoteName(entry.type)) {
throw new Error(`Invalid note type: "${entry.type}" in file ${note.filePath}`);
}
combinedNotes[entry.type] = combinedNotes[entry.type] || {};
combinedNotes[entry.type][components] = combinedNotes[entry.type][components] || [];
combinedNotes[entry.type][components].push({message: entry.message, issueNumber: note.issueNumber});
});
});
});
return combinedNotes;
};
/**
* Get the list of notes, grouped by component, then by note type.
*
* @returns {Promise<{[component: string]: {[type: string]: {message: string, issueNumber: string}[]}}>}
*/
export const getCombinedNotesByComponent = async () => {
const notes = await getAllNotes();
const combinedNotes = {};
notes.forEach((note) => {
Object.entries(note.notes).forEach(([component, data]) => {
combinedNotes[component] = combinedNotes[component] || {};
data.forEach((entry) => {
if (!isValidNoteName(entry.type)) {
throw new Error(`Invalid note type: "${entry.type}" in file ${note.filePath}`);
}
combinedNotes[component][entry.type] = combinedNotes[component][entry.type] || [];
combinedNotes[component][entry.type].push({
component,
message: entry.message,
issueNumber: note.issueNumber,
type: entry.type,
});
});
});
});
// Sort notes by note type.
Object.entries(combinedNotes).forEach(([component, types]) => {
combinedNotes[component] = Object.fromEntries(
Object.entries(types).sort(([a], [b]) => sortNoteTypes(a, b))
);
});
// Sort components.
return Object.fromEntries(
Object.entries(combinedNotes).sort(([a], [b]) => sortComponents(a, b))
);
};
/**
* Delete all unreleased notes.
*
* @returns {Promise<void>}
*/
export const deleteAllNotes = async () => {
const files = await readdir(unreleasedPath);
return Promise.all(
files
.filter((item, index) => files.indexOf(item) === index)
.filter((file) => file.endsWith('.yml'))
.map((file) => unlink(`${unreleasedPath}/${file}`))
);
};
-80
View File
@@ -1,80 +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/>.
/**
* The note types.
*
* Matches the suggested order in https://keepachangelog.com/en/1.1.0/.
* @type {Object<string, string>}
*/
const noteTypes = {
'improved': 'Added',
'changed': 'Changed',
'deprecated': 'Deprecated',
'removed': 'Removed',
'fixed': 'Fixed',
};
/**
* The preferred order of note types.
*
* @type {string[]}
*/
const preferredOrder = Object.keys(noteTypes);
/**
* Comparison method to sort note types.
*
* @param {String} a
* @param {String} b
* @returns {Number}
*/
export const sortNoteTypes = (a, b) => {
const aIndex = preferredOrder.indexOf(a);
const bIndex = preferredOrder.indexOf(b);
if (aIndex === -1) {
return 1;
}
if (bIndex === -1) {
return -1;
}
return aIndex - bIndex;
};
/**
* Get the note names.
*
* @returns {string[]}
*/
export const getNoteNames = () => Object.keys(noteTypes);
/**
* Get the human-readable note name.
*
* @param {string} type
* @returns {string}
*/
export const getNoteName = (type) => noteTypes[type];
/**
* Whether the note name is valid.
*
* @param {string} type
* @returns {boolean}
*/
export const isValidNoteName = (type) => noteTypes[type] !== undefined;
-153
View File
@@ -1,153 +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 inquirer from 'inquirer';
import SearchList from 'inquirer-search-list';
import { getNoteNames } from './noteTypes.mjs';
import { getAllComponents } from './components.mjs';
import {
formatComponent,
formatIssueNumber,
validateComponent,
validateIssueNumber,
} from './helpers.mjs';
/**
* A Search List which accepts an initial value.
*/
class SearchListWithInitialValue extends SearchList {
constructor(options, ...args) {
super(options, ...args);
if (options.default) {
const pointer = this.filterList.findIndex((item) => {
return item.value === options.default;
});
if (pointer > -1) {
this.pointer = pointer;
}
}
}
}
inquirer.registerPrompt('search-list', SearchListWithInitialValue);
/**
* Get the issue type prompt.
*
* @param {string} defaultData The initially selected value
* @returns {Object}
*/
export const getTypePrompt = (defaultData) => ({
default: defaultData,
type: 'search-list',
message: 'Type of change',
name: 'type',
choices: getNoteNames(),
validate: (selection) => {
if (selection.length < 1) {
return 'You must select at least one type of change';
}
return true;
},
});
/**
* Get the component prompt.
*
* @param {string} [defaultValue='core'] The initally selected value.
* @returns
*/
export const getComponentsPrompt = (defaultValue) => {
if (!defaultValue ) {
defaultValue = 'core';
}
return {
choices: getAllComponents(),
default: defaultValue,
type: 'search-list',
message: 'Component',
name: 'components',
validate: validateComponent,
filter: formatComponent,
};
};
/**
* Get the issue number prompt as an inline input.
*
* @param {string} defaultData
* @returns {object}
*/
export const getIssuePrompt = (defaultData) => ({
default: defaultData,
type: 'input',
message: 'Tracker issue number',
name: 'issueNumber',
validate: validateIssueNumber,
filter: formatIssueNumber,
});
/**
* Get a message prompt.
*
* @param {string} defaultData
* @returns
*/
export const getMessagePromptEditor = (defaultData) => ({
default: defaultData,
type: process.stdin.isTTY ? 'editor' : 'input',
postfix: '.md',
message: 'Message',
name: 'message',
waitUserInput: false,
validate: (input) => {
if (!input) {
return 'You must provide a message';
}
return true;
},
// Remove any trailing whitespace.
filter: (input) => input.split('\n').map((line) => line.trimEnd()).join('\n'),
});
/**
* Get a message prompt.
*
* @param {string} defaultData
* @returns
*/
export const getMessagePromptInput = (defaultData) => ({
default: defaultData,
type: 'input',
message: 'Message (leave empty to use editor)',
name: 'message',
filter: (input) => input.trim(),
});
/**
* Get a prompt to ask the user if they wish to add another entry.
*
* @returns {Object}
*/
export const getAddAnotherPrompt = () => ({
type: 'confirm',
message: 'Do you want to add another note?',
default: false,
name: 'addAnother',
});
-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;
};
-215
View File
@@ -1,215 +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 minification 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-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 => {
grunt.log.debug(`Item resolved. Kicking off next one.`);
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(options) => {
return new Promise(resolve => {
queue.push(resolve);
startQueue();
return options;
});
},
// When an item in the queue completes, start the next item in the queue.
generateBundle: (options, bundle) => {
grunt.log.debug(`Finished output phase for ${Object.keys(bundle).join(', ')}`);
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')
],
presets: [
['@babel/preset-env', {
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);
};
-52
View File
@@ -1,52 +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 path = require('path');
grunt.registerTask('jsdoc', 'Generate JavaScript documentation using jsdoc', function() {
const done = this.async();
const configuration = path.resolve('.grunt/jsdoc/jsdoc.conf.js');
grunt.util.spawn({
cmd: 'jsdoc',
args: [
'--configure',
configuration,
]
}, function(error, result, code) {
if (result.stdout) {
grunt.log.write(result.stdout);
}
if (result.stderr) {
grunt.log.error(result.stderr);
}
if (error) {
grunt.fail.fatal(`JSDoc failed with error code ${code}`);
} else {
grunt.log.write('JSDoc completed successfully'.green);
}
done();
});
});
};
-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');
};
-187
View File
@@ -1,187 +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: {
quietDeprecationWarnings: true,
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: {
quietDeprecationWarnings: true,
customSyntax: 'postcss-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;
};
-103
View File
@@ -1,103 +0,0 @@
#!/usr/bin/env node
// 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 { Argument, Option, program } from 'commander';
import chalk from 'chalk';
import { getNoteNames } from './notes/src/noteTypes.mjs';
import createAction from './notes/src/create.mjs';
import generateAction from './notes/src/generate.mjs';
import logger from './notes/src/logger.mjs';
console.log(`
${chalk.bold(chalk.underline(chalk.green('Moodle Upgrade Notes Generator')))}
This tool is used to generate the upgrade notes for changes you make in Moodle.
Please remember that the intended audience of these changes is
${chalk.italic('plugin developers')} who need to know how to update their plugins
for a new Moodle version.
Upgrade notes should not be used to document changes for site administrators, or
for internal API changes which are not expected to be used outside of the
relevant component.
`)
program.configureHelp({
helpWidth: 100,
});
program.on('option:verbose', () => {
logger.level = 'verbose';
});
program.addOption(
new Option(
'-v, --verbose',
'Output more information during the generation process',
)
.default(false)
);
// Define the command line options.
program
.command('create')
.summary('Generate a new upgrade note')
.addOption(
new Option('-t, --type <type>', `The type of change to document. Valid types are: ${getNoteNames().join(', ')}`)
)
.addOption(new Option('-i, --issue <issue>', 'The tracker issue number'))
.addOption(new Option('-c, --component <component>', 'The component to write a note for'))
.addOption(new Option(
'-m, --message <message>',
'The message to use for the upgrade note',
))
.action((options) => createAction(options));
program
.command('summary')
.summary('Generate a local copy of the upgrade notes summary')
.addArgument(
new Argument('[version]', 'The Moodle version to create the summary notes for')
)
.action((version) => generateAction(version));
program
.command('release')
.summary('Generate the markdown copies of the upgrade notes for a Moodle release')
.addArgument(
new Argument('[version]', 'The Moodle version to create the release notes for')
)
.addOption(
new Option(
'--generate-upgrade-notes',
'Generate the UPGRADING.md notes for the release. ' +
'Note: This option is intended for use by the release manager when generating the upgrade notes.',
)
.default(true)
)
.addOption(
new Option(
'-d, --delete-notes',
'Delete the notes after generating the UPGRADING.md notes for the release. ' +
'Note: This option is intended for use by the release manager when generating the upgrade notes.' +
'This option has no effect unless --generate-upgrade-notes is also set.'
)
.default(false)
)
.action((version, options) => generateAction(version, options));
program.parse();
-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/iron
-40
View File
@@ -1,40 +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/>.
/**
* Helper file for PhpStorm, and other IDEs, to provide better code completion.
*
* @package core
* @copyright 2024 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace PHPSTORM_META;
// Assume that anything returned by \core\di::get('...') is an instance of the first argument.
override(\core\di::get(0), map([
'' => '@',
]));
// Assume that anything returned by \Psr\Container\ContainerInterface::get('...') is an instance of the first argument.
override(\Psr\Container\ContainerInterface::get(0), map([
'' => '@',
]));
// Assume that anything returned by \DI\Container::get('...') is an instance of the first argument.
override(\DI\Container::get(0), map([
'' => '@',
]));
-5
View File
@@ -1,5 +0,0 @@
{
"coverage": false,
"lint": "config",
"clean": true
}
-107
View File
@@ -1,107 +0,0 @@
{
"customSyntax": "postcss-scss",
"plugins": [
"stylelint-csstree-validator"
],
"rules": {
"csstree/validator": {
"syntaxExtensions": [
"sass"
]
},
"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-disallowed-list": ["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-disallowed-list": ["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",
},
"overrides": [
{
"files": ["**/yui/**/*.css"],
"rules": {
}
}
]
}
@@ -1,7 +0,0 @@
issueNumber: MDL-43938
notes:
core_badges:
- message: >-
The `badges/newbadge.php` page has been deprecated and merged with
`badges/edit.php`. Please, use `badges/edit.php` instead.
type: deprecated
@@ -1,6 +0,0 @@
issueNumber: MDL-48940
notes:
core:
- message: >
The previously deprecated function `search_generate_text_SQL` has been removed and can no longer be used.
type: removed
@@ -1,8 +0,0 @@
issueNumber: MDL-52046
notes:
core_reportbuilder:
- message: >-
The return type of the `set_checkbox_toggleall` callback, defined by
system reports, can now be null. Use if the checkbox should not be shown
for the row.
type: improved
@@ -1,11 +0,0 @@
issueNumber: MDL-54105
notes:
mod_assign:
- message: |
Added 2 new settings:
- `mod_assign/defaultgradetype`
- The value of this setting dictates which of the `GRADE_TYPE_X` constants is the default option when creating new instances of the assignment.
- The default value is `GRADE_TYPE_VALUE` (Point)
- `mod_assign/defaultgradescale`
- The value of this setting dictates which of the existing scales is the default option when creating new instances of the assignment.
type: improved
@@ -1,8 +0,0 @@
issueNumber: MDL-64148
notes:
core:
- message: >-
The following method has been deprecated and should no longer be used:
`reset_password_and_mail`. Please consider using `setnew_password_and_mail` as
a replacement.
type: deprecated
@@ -1,6 +0,0 @@
issueNumber: MDL-64148
notes:
core:
- message: >-
A new method, `\core_user::get_name_placeholders()`, has been added to return an array of user name fields.
type: improved
@@ -1,19 +0,0 @@
issueNumber: MDL-66151
notes:
core_role:
- message: |
All session management has been moved to the `\core\session\manager` class.
This removes the dependancy to use the `sessions` table.
Session management plugins (like Redis) should now inherit
the base `\core\session\handler` class, which implements
`SessionHandlerInterface`, and override methods as required.
The following methods in `\core\session\manager` have been deprecated:
| Old method name | New method name |
| --- | --- |
| `kill_all_sessions` | `destroy_all` |
| `kill_session` | `destroy` |
| `kill_sessions_for_auth_plugin` | `destroy_by_auth_plugin` |
| `kill_user_sessions` | `destroy_user_sessions` |
type: improved
@@ -1,11 +0,0 @@
issueNumber: MDL-66903
notes:
core:
- message: |
The following classes have been renamed and now support autoloading.
Existing classes are currently unaffected.
| Old class name | New class name |
| --- | --- |
| `\core_component` | `\core\component` |
type: improved
@@ -1,20 +0,0 @@
issueNumber: MDL-66903
notes:
core:
- message: >
Added the ability for unit tests to autoload classes in the
`\[component]\tests\`
namespace from the `[path/to/component]/tests/classes` directory.
type: improved
- message: >
Added a helper to load fixtures from a components `tests/fixtures/`
folder:
```php
advanced_testcase::load_fixture(string $component, string $fixture): void;
```
type: improved
@@ -1,8 +0,0 @@
issueNumber: MDL-67554
notes:
tool_oauth2:
- message: >
The `\core\oautuh2\client::get_additional_login_parameters()` method now supports adding the
language code to the authentication request so that the OAuth2 login
page matches the language in Moodle.
type: improved
@@ -1,11 +0,0 @@
issueNumber: MDL-69684
notes:
core:
- message: >-
Redis session cache has been improved to make a single call where two
were used before.
type: improved
- message: >-
The minimum Redis server version is now 2.6.12.
The minimum PHP Redis extension version is now 2.2.4.
type: changed
@@ -1,5 +0,0 @@
issueNumber: MDL-70854
notes:
core:
- message: Added stored progress bars
type: improved
@@ -1,7 +0,0 @@
issueNumber: MDL-70983
notes:
core_badges:
- message: Final removal of `BADGE_BACKPACKAPIURL` and `BADGE_BACKPACKWEBURL` constants.
type: removed
- message: The `OPEN_BADGES_V1` constant is deprecated and should not be used anymore.
type: deprecated
@@ -1,13 +0,0 @@
issueNumber: MDL-71326
notes:
core:
- message: >+
- The following methods have been finally deprecated and removed:
- `\plagiarism_plugin::get_configs()`
- `\plagiarism_plugin::get_file_results()`
- `\plagiarism_plugin::update_status()`, please use `{plugin name}_before_standard_top_of_body_html` instead.
- Final deprecation and removal of `\plagiarism_get_file_results()`. Please use `\plagiarism_get_links()` instead.
- Final deprecation and removal of `\plagiarism_update_status()`. Please use `\{plugin name}_before_standard_top_of_body_html()` instead.
type: deprecated
@@ -1,6 +0,0 @@
issueNumber: MDL-71748
notes:
core:
- message: >
The previously deprecated function `\core_text::reset_caches()` has been removed and can no longer be used.
type: removed
@@ -1,7 +0,0 @@
issueNumber: MDL-71823
notes:
core_user:
- message: >-
New `\core_user\hook\extend_user_menu` hook added to allow third party
plugins to extend the user menu navigation.
type: improved
@@ -1,6 +0,0 @@
issueNumber: MDL-72353
notes:
core_report:
- message: >-
The previously deprecated `\core\report_helper::save_selected_report()` method has been removed and can no longer be used.
type: removed
@@ -1,11 +0,0 @@
issueNumber: MDL-72397
notes:
qbank_managecategories:
- message: >
Category lists are now generated by templates.
The following classes have been deprecated:
- `\qbank_managecategories\question_category_list`
- `\qbank_managecategories\question_category_list_item`
type: deprecated
@@ -1,28 +0,0 @@
issueNumber: MDL-72397
notes:
qbank_managecategories:
- message: >
The `\qbank_managecategories\question_category_object` class has been deprecated.
Methods previously part of this class have been moved to either
- `\qbank_managecategories\question_categories`,
for the parts used within this plugin for display a list of categories; or
`\core_question\category_manager`,
for the parts used for generate CRUD operations on question categories, including outside of this plugin.
This change will allow `\qbank_managecategories\question_category_object` to be deprecated, and avoids
other parts of the system wishing to manipulate question categories from
having to violate cross-component communication rules.
type: changed
- message: |
The following methods of `\qbank_managecategories\helper`have been deprecated and moved to
`\core_question\category_manager`:
| Method | Replacement |
| --- | --- |
| `question_is_only_child_of_top_category_in_context` | `\core_question\category_manager::is_only_child_of_top_category_in_context` |
| `question_is_top_category` | `\core_question\category_manager::is_top_category` |
| `question_can_delete_cat` | `\core_question\category_manager::can_delete_cat` |
type: deprecated
@@ -1,18 +0,0 @@
issueNumber: MDL-72397
notes:
qbank_managecategories:
- message: >
`\qbank_managecategories\question_category_object` is now completely
deprecated. Its methods have either been migrated to
`\qbank_managecategories\question_categories`,
`\core_question\category_manager`, or are no longer used at all.
type: deprecated
core:
- message: >
`\moodle_list` and `\list_item` were only used by
`qbank_managecategories`, and these usages have been removed, so
these classes, and the `lib/listlib.php` file have now been deprecated.
This method was the only usage of the `QUESTION_PAGE_LENGTH`
constant, which was defined in `question_category_object.php`,
and so is also now deprecated.
type: deprecated
@@ -1,7 +0,0 @@
issueNumber: MDL-72424
notes:
mod_feedback:
- message: >-
The `\feedback_check_is_switchrole()` function has been deprecated as it
didn't work.
type: deprecated
@@ -1,11 +0,0 @@
issueNumber: MDL-72620
notes:
repository_onedrive:
- message: >
The following previously deprecated methods have been removed and can no
longer be used:
- `\repository_onedrive::can_import_skydrive_files()`
- `\repository_onedrive::import_skydrive_files()`
type: removed
@@ -1,11 +0,0 @@
issueNumber: MDL-72786
notes:
report_eventlist:
- message: >-
The following deprecated methods in `report_eventlist_list_generator` have
been removed:
- `\report_eventlist_list_generator::get_core_events_list()`
- `\report_eventlist_list_generator::get_non_core_event_list()`
type: deprecated
@@ -1,7 +0,0 @@
issueNumber: MDL-73165
notes:
core:
- message: >
The following previously deprecated methods have been removed and can no longer be used:
- `\renderer_base::should_display_main_logo()`
type: removed
@@ -1,5 +0,0 @@
issueNumber: MDL-73284
notes:
core_message:
- message: Final deprecation of the `MESSAGE_DEFAULT_LOGGEDOFF`, and `MESSAGE_DEFAULT_LOGGEDIN` constants.
type: removed
@@ -1,7 +0,0 @@
issueNumber: MDL-73976
notes:
core_course:
- message: >-
The previously deprecated `\print_course_request_buttons()` method has been
removed and can no longer be used.
type: removed
@@ -1,8 +0,0 @@
issueNumber: MDL-74050
notes:
mod_assign:
- message: >
A new web service called `mod_assign_remove_submission` has been created
to remove the submission for a specific user ID and assignment activity
ID.
type: improved
@@ -1,7 +0,0 @@
issueNumber: MDL-74251
notes:
theme:
- message: >-
Removed all references to `iconhelp`, `icon-pre`, `icon-post`, `iconlarge`, and
`iconsort` CSS classes.
type: removed
@@ -1,5 +0,0 @@
issueNumber: MDL-74484
notes:
core:
- message: Final deprecation of `\print_error()`. Please use the `\moodle_exception` class instead.
type: removed
@@ -1,9 +0,0 @@
issueNumber: MDL-74581
notes:
core_grades:
- message: >
The following previously deprecated Behat step helper methods have been
removed and can no longer be used:
- `\behat_grade::select_in_gradebook_navigation_selector()`
- `\behat_grade::select_in_gradebook_tabs()`
type: removed
@@ -1,18 +0,0 @@
issueNumber: MDL-74583
notes:
core_reportbuilder:
- message: >-
Support for the following entity classes, renamed since 4.1, have now
been removed completely:
- `\core_admin\local\entities\task_log`
- `\core_cohort\local\entities\cohort`
- `\core_cohort\local\entities\cohort_member`
- `\core_course\local\entities\course_category`
- `\report_configlog\local\entities\config_change`
type: removed
@@ -1,5 +0,0 @@
issueNumber: MDL-74843
notes:
core:
- message: 'Final deprecation of `\core\task\manager::ensure_adhoc_task_qos()`.'
type: removed
@@ -1,7 +0,0 @@
issueNumber: MDL-74939
notes:
core:
- message: >-
Support for the deprecated block and activity namespaces `<component>\local\views\secondary`,
which supported the overriding of secondary navigation, has now been entirely removed.
type: removed
@@ -1,6 +0,0 @@
issueNumber: MDL-75022
notes:
core_backup:
- message: >-
The `\core_backup\copy\copy` class has been deprecated and removed. Please use `\copy_helper` instead.
type: removed
@@ -1,11 +0,0 @@
issueNumber: MDL-75025
notes:
core_backup:
- message: |
The following methods in the `\base_controller` class have been removed:
| Method | Replacement |
| --- | --- |
| `\base_controller::set_copy()` | Use a restore controller for storing copy information instead. |
| `\base_controller::get_copy()` | `\restore_controller::get_copy()` |
type: removed
@@ -1,6 +0,0 @@
issueNumber: MDL-75850
notes:
core_files:
- message: |
A new hook, `\core_files\hook\after_file_created`, has been created to allow the inspection of files after they have been saved in the filesystem.
type: improved
@@ -1,7 +0,0 @@
issueNumber: MDL-76392
notes:
core_reportbuilder:
- message: >-
System reports now support native entity column aggregation via each
columns `set_aggregation()` method
type: improved
@@ -1,8 +0,0 @@
issueNumber: MDL-76690
notes:
core_reportbuilder:
- message: >
The following previously deprecated local helper methods have been removed and can no longer be used:
- `\core_reportbuilder\local\helpers\audience::get_all_audiences_menu_types()`
- `\core_reportbuilder\local\helpers\report::get_available_columns()`
type: removed
@@ -1,5 +0,0 @@
issueNumber: MDL-77167
notes:
core:
- message: Remove deprecation layer for YUI JS Events. The deprecation layer was introduced with MDL-70990 and MDL-72291.
type: removed
@@ -1,8 +0,0 @@
issueNumber: MDL-78030
notes:
core_user:
- message: >-
The `\core_user\table\participants_search::get_total_participants_count()` is no longer
used since the total count can be obtained from
`\core_user\table\participants_search::get_participants()`.
type: deprecated
@@ -1,21 +0,0 @@
issueNumber: MDL-78030
notes:
core:
- message: |
Two new functions have been introduced in the `\moodle_database` class:
- `\moodle_database::get_counted_records_sql()`
- `\moodle_database::get_counted_recordset_sql()`
These methods are compatible with all databases.
They will check the current running database engine and apply the `COUNT` window function if it is supported,
otherwise, they will use the usual `COUNT` function.
The `COUNT` window function optimization is applied to the following databases:
- PostgreSQL
- MariaDB
- Oracle
Note: MySQL and SQL Server do not use this optimization due to insignificant performance differences before and
after the improvement.
type: improved
@@ -1,10 +0,0 @@
issueNumber: MDL-78293
notes:
core_user:
- message: >
The visibility of the following methods have been increased to public:
- `\core_user\form\private_files::check_access_for_dynamic_submission()`
- `\core_user\form\private_files::get_options()`
type: changed
@@ -1,7 +0,0 @@
issueNumber: MDL-78662
notes:
core_question:
- message: >
A new utility function `\question_utils::format_question_fragment()` has been created so
that question content can filter based on filters.
type: improved
@@ -1,8 +0,0 @@
issueNumber: MDL-78773
notes:
core_report:
- message: >
The `\core\report_helper::print_report_selector()` method accepts a new `$additional``
argument for adding content to the tertiary navigation to align with the
report selector.
type: changed
@@ -1,5 +0,0 @@
issueNumber: MDL-78776
notes:
tool:
- message: The Convert to InnoDB plugin (`tool_innodb`) has been completely removed.
type: removed
@@ -1,7 +0,0 @@
issueNumber: MDL-79011
notes:
core:
- message: >-
The `after_config()` callback has been converted to a hook,
`\core\hook\after_config`.
type: improved
@@ -1,10 +0,0 @@
issueNumber: MDL-79546
notes:
mod_quiz:
- message: >+
The following methods of the `quiz_overview_report` class now take a new optional `$slots` parameter used to only regrade some slots in each attempt (default all):
- `\quiz_overview_report::regrade_attempts()`
- `\quiz_overview_report::regrade_batch_of_attempts()`
type: improved
@@ -1,7 +0,0 @@
issueNumber: MDL-79628
notes:
core:
- message: >-
The `\navigation_cache` class now uses the Moodle Universal Cache (MUC) to store the navigation cache data instead of storing
it in the global `$SESSION` variable.
type: fixed
@@ -1,6 +0,0 @@
issueNumber: MDL-79628
notes:
core:
- message: >-
The `$timeout` property of the `\navigation_cache` class has been deprecated.
type: deprecated
@@ -1,9 +0,0 @@
issueNumber: MDL-80017
notes:
core_grades:
- message: >
The grade `itemname` property contained in the return structure of
the following external methods is now PARAM_RAW:
- `core_grades_get_gradeitems`
- `gradereport_user_get_grade_items`
type: changed
-11
View File
@@ -1,11 +0,0 @@
issueNumber: MDL-80275
notes:
core:
- message: >
The class autoloader has been moved to an earlier point in the Moodle
bootstrap.
Autoloaded classes are now available to scripts using the
`ABORT_AFTER_CONFIG` constant.
type: changed
@@ -1,18 +0,0 @@
issueNumber: MDL-80741
notes:
mod_assign:
- message: >
The default option "Never" for the `attemptreopenmethod` setting, which
disallowed multiple attempts at the assignment, has been removed. This
option was unnecessary because limiting attempts to 1 through the
`maxattempts` setting achieves the same behavior.
type: removed
- message: >
The constant `ASSIGN_ATTEMPT_REOPEN_METHOD_NONE` has been deprecated,
and a new default value for `attemptreopenmethod` has been set to
"Automatically until pass".
type: deprecated
- message: >
A new default value for `attemptreopenmethod` has been set to
"Automatically until pass".
type: improved
@@ -1,20 +0,0 @@
issueNumber: MDL-80744
notes:
core_grades:
- message: >-
The behat step definition
`\behat_grade::i_confirm_in_search_within_the_gradebook_widget_exists()` has
been deprecated. Please use
`\behat_general::i_confirm_in_search_combobox_exists()` instead.
type: deprecated
- message: >-
The behat step definition
`\behat_grade::i_confirm_in_search_within_the_gradebook_widget_does_not_exist()`
has been deprecated. Please use
`\behat_general::i_confirm_in_search_combobox_does_not_exist()` instead.
type: deprecated
- message: >-
The behat step definition `\behat_grade::i_click_on_in_search_widget()` has
been deprecated. Please use `\behat_general::i_click_on_in_search_combobox()`
instead.
type: deprecated

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