Compare commits

..

1855 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7) 2713f92d62 Moodle release 2.3.4 2013-01-11 22:21:52 +01:00
Eloy Lafuente (stronk7) dbee98b2e6 weekly release 2.3.3+ 2013-01-11 12:33:07 +01:00
Eloy Lafuente (stronk7) 039cd4a52a Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2013-01-11 12:16:51 +01:00
Eloy Lafuente (stronk7) 0eda863c21 MDL-37420 rework pg schema (partial backport take2) 2013-01-11 11:36:48 +01:00
Eloy Lafuente (stronk7) fa02465c54 MDL-37420 rework pg schema (partial backport of 92b00c3) 2013-01-11 10:34:19 +01:00
Eloy Lafuente (stronk7) 72cb5eda5c Merge branch 'MDL-37467-blogs_23' of git://github.com/mudrd8mz/moodle into MOODLE_23_STABLE 2013-01-10 18:13:27 +01:00
David Mudrák 40440a5847 MDL-37467 Do not provide blog posts via RSS when blogging is disabled 2013-01-10 17:04:23 +01:00
Eloy Lafuente (stronk7) b15e5d7252 Merge branch 'MDL-36741_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2013-01-10 11:14:07 +01:00
Mark Nelson 6f003159a2 MDL-36741 mod_forum: fixed the function forum_rss_newstuff that was using count_records_sql incorrectly as well as generating RSS content when no data exists 2013-01-10 18:00:16 +08:00
Andrew Robert Nicols 6b16846e83 MDL-36600 Add missing sesskey check when previewing the message 2013-01-10 10:20:36 +08:00
Dan Poltawski 8b9929247e Revert "MDL-xxxx show appropriate instance status on user enrolments page"
This was incorrectly integrated

This reverts commit 0431cc0e16.
2013-01-10 09:40:19 +08:00
Dan Poltawski fdd6de9177 Merge branch 'wip-MDL-36367-s23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2013-01-09 09:50:54 +08:00
Eloy Lafuente (stronk7) cd7802517f Merge branch 'w51_MDL-37420_m23_pgschema' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-09 01:33:20 +01:00
Andrew Robert Nicols 0cc875b7d0 MDL-36600 user: improve course messaging checks 2013-01-09 09:22:37 +13:00
Eloy Lafuente (stronk7) a2eaf8896d Merge branch 'w51_MDL-37152_m23_smtp' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-08 18:02:51 +01:00
Petr Škoda 090c684838 MDL-37420 add support for more PostgreSQL schemas 2013-01-08 17:46:54 +01:00
Dan Poltawski 7c333e0c6c Merge branch 'MDL-32639-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2013-01-08 14:46:34 +08:00
Petr Škoda 0431cc0e16 MDL-xxxx show appropriate instance status on user enrolments page 2013-01-08 14:22:59 +08:00
Jason Fowler a201a0ff4e MDL-36620 - Blog, RSS - Preventing Guests from viewing the RSS of site level blogs
Conflicts:
	blog/rsslib.php
2013-01-08 14:07:53 +08:00
Dan Poltawski 27b92b4a71 Merge branch 'w51_MDL-37191_m23_plugindelete' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-08 11:17:05 +08:00
Dan Poltawski 3de2dc19e1 Merge branch 'MDL-31641_drag_drop_help_23' of git://github.com/davosmith/moodle into MOODLE_23_STABLE 2013-01-08 10:54:24 +08:00
Charles Fulton 3ee53f7e7f MDL-35130 shibboleth: remove hard-coded string 2013-01-08 10:51:25 +08:00
Dan Poltawski b943d77cd2 Merge branch 'MDL-36456-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2013-01-08 10:31:10 +08:00
Dan Poltawski c7ad6f4504 Merge branch 'w51_MDL-37301_m23_coursecatinfoas' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-08 10:27:12 +08:00
Dan Poltawski 053f6ebc42 Merge branch 'w51_MDL-37254_m23_courseinfoas' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-08 10:24:21 +08:00
Sam Hemelryk b7af1eee2d Merge branch 'wip-mdl-36958-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2013-01-08 14:06:36 +13:00
David Mudrák 53499f8d35 MDL-36977 Be more picky when it comes to migrating files in moodle1 backups 2013-01-08 08:54:29 +08:00
David Mudrák 02a6f3b04f MDL-36977 Add more unit tests for moodle1 backup conversion 2013-01-08 08:54:29 +08:00
Eloy Lafuente (stronk7) 5050a19ff7 Merge branch 'MDL-35794_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2013-01-07 22:38:48 +01:00
Eloy Lafuente (stronk7) 0858993db8 Merge branch 'MDL-35792_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2013-01-07 22:36:29 +01:00
Davo Smith db529c2346 MDL-31641 filemanager - display help message when drag and drop upload is not supported 2013-01-07 08:16:35 +00:00
Didier Raboud 7db20e0073 MDL-37157: Normalize short answers before comparison
This ensures that ambiguous Unicode representations can be compared sanely.
Also add some tests to ensure it keeps working.

Thanks to Tim Hunt for the syntax check.
2013-01-07 14:00:26 +08:00
Dan Poltawski 1f1dc87fc1 Merge branch 'w51_MDL-37128_m23_rssrestore' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-07 13:57:10 +08:00
Dan Poltawski d068c79e48 Merge branch 'w51_MDL-36893_m23_mnetestrict' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-07 13:53:29 +08:00
Dan Poltawski b0c49cea12 Merge branch 'MDL-27884-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2013-01-07 13:30:43 +08:00
Damyon Wiese 7e57119342 MDL-37244 Assignment: Submission comments plugin does not implement comments callbacks.
This allows anyone to view or modify anyone elses submission comments.
2013-01-07 10:49:20 +08:00
Ankit Agarwal 77a7ed6535 MDL-33340 completion: Incorrect logic in hidden field check
Credit to Jody Steele
2013-01-07 10:37:38 +08:00
Simon Coggins 1e8335fb82 MDL-35991 - use PARAM_LOCALURL for local urls 2013-01-07 10:10:32 +08:00
Dan Poltawski 523dafe824 Merge branch 'MDL-36667-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2013-01-07 09:45:15 +08:00
Sam Hemelryk fc77cb3d85 Merge branch 'MDL-37161-moodle23' of https://github.com/StudiUM/moodle into MOODLE_23_STABLE 2013-01-07 14:14:28 +13:00
Sam Hemelryk 178a5b4102 Merge branch 'w51_MDL-36212_m23_entities' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-07 13:44:36 +13:00
Sam Hemelryk 52817fdbbc Merge branch 'MDL-37068_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2013-01-07 13:39:52 +13:00
Sam Hemelryk 757376d7dd Merge branch 'w51_MDL-37281_m23_othersnav' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2013-01-07 13:33:45 +13:00
Sam Hemelryk a68bc19fa6 Merge branch 'MDL-36855-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2013-01-07 12:04:51 +13:00
Charles Fulton c1fcc89f71 MDL-4781 forum: show discussion link when user has ability to view discussion
Conflicts:
	mod/forum/lib.php
2013-01-07 11:17:58 +13:00
Davo Smith 318b859ac8 MDL-35887 course dndupload - correct default used for completion tracking when resources created by drag and drop 2013-01-07 11:07:45 +13:00
Sam Hemelryk d9402acd03 Merge branch 'MDL-16730-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2013-01-07 10:14:54 +13:00
Mark Nelson 70badb4824 MDL-37359 groups: fixing typo in the web service function create_groupings_parameters 2013-01-07 09:47:49 +13:00
Sam Hemelryk a3a84720d3 Merge branch 'MDL-29327_none_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2013-01-07 09:34:52 +13:00
Sam Hemelryk a589b0dc77 Merge branch 'MDL-36741_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2013-01-07 09:15:34 +13:00
Jean-Philippe Gaudreau d71792da4f MDL-37161 Backup: Database error caused by grade book settings when importing or restoring a course 2013-01-04 09:53:03 -05:00
Damyon Wiese 3f1b2800ae MDL-36712: Assignment - Do not always send feedback available emails when grade is created
The entry in the assign_grades table contains grades feedback and other settings such as locked.
Only send the student an email about new feedback if it is actually grades or feedback that
has been added. This is done by using another state for the mailed flag (2) which means "unset".

Conflicts:

	mod/assign/feedback/file/importziplib.php
	mod/assign/feedback/file/locallib.php
	mod/assign/feedback/offline/locallib.php
	mod/assign/locallib.php
2013-01-04 15:02:50 +08:00
Andrew Davis d674a0e16f MDL-29327 core_grade: removing some code that is messing up the categories and items screen when no grade categories are used 2013-01-04 08:58:25 +08:00
Ankit Agarwal 7f7e18c3a2 MDL-36855 scorm: update to api get_scorm_question_count()
get_scorm_question_count() should return 0 not 1 when no attempt is made in a scorm by any student
2013-01-03 14:42:18 +08:00
Ankit Agarwal 2e505a05d1 MDL-27884 Implement proper username validation during csv import 2013-01-02 14:10:16 +08:00
Ankit Agarwal f439b4242c MDL-27884 blocks: Correcting config title string
AMOS BEGIN
 CPY [configtitle,block_html],[configtitle,block_tags]
AMOS END

Conflicts:

	blocks/tags/edit_form.php
	blocks/tags/lang/en/block_tags.php
2013-01-02 10:54:51 +08:00
AMOS bot c2f393b2b5 Automatically generated installer lang files 2013-01-01 00:43:01 +00:00
Eloy Lafuente (stronk7) 10ad21dc9a weekly release 2.3.3+ 2012-12-30 01:05:13 +01:00
Petr Škoda 00f9bca84a MDL-36893 fix mnet E_STRICT issue 2012-12-27 14:33:37 +01:00
Petr Škoda 575d91977e MDL-37128 fix E_STRICT rss restore issue 2012-12-27 13:41:20 +01:00
Petr Škoda a340e04df7 MDL-37301 fix missing AS in select
This was breaking pg 8.3. Credit goes to Thomas Robb, thanks.
2012-12-26 22:27:34 +01:00
Dan Poltawski 48d53d9fd6 Merge branch 'MDL-35569-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_STABLE 2012-12-24 11:43:41 +08:00
Dan Poltawski cd665c200d Merge branch 'w51_MDL-37233_m23_skype' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-24 11:34:55 +08:00
Dan Poltawski 1cb195dabc Merge branch 'wip-MDL-37290-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-12-24 10:55:37 +08:00
Dan Poltawski ca0cbfd4db Merge branch 'w51_MDL-37283_m23_spell' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-24 10:35:47 +08:00
Sam Hemelryk 76dee48562 MDL-37290 course: fixed up navbar when editing categories 2012-12-24 13:06:25 +13:00
Sam Hemelryk 185eff01fa Merge branch 'wip-MDL-35833-stable23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-24 11:43:37 +13:00
Sam Hemelryk fec305739d Merge branch 'MDL-36966-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-24 11:16:07 +13:00
Sam Hemelryk 2c292b48da Merge branch 'wip-MDL-35653-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-12-24 09:40:36 +13:00
Petr Škoda a3243760c2 MDL-37283 import tinymce spellchecker 2.0.6.1 2012-12-22 16:48:13 +01:00
Tim Hunt 18651b0bfa MDL-37068 qformat_learnwise: fix UTF8 and other issues. 2012-12-22 15:15:20 +00:00
Thanh Le e349d18435 MDL-35794 quiz: config for whether Outcomes are advanced settings 2012-12-22 15:15:13 +00:00
Thanh Le 5b8d9521ee MDL-35792 question preview: way to update options without restarting.
It is useful, and possible, to update the display options without
restarting the question. You now only have to restart if you are
changing the maximum mark or the behaviour.
2012-12-22 15:15:06 +00:00
Petr Škoda 8d5769593d MDL-37281 fix other users current navigation node 2012-12-22 14:59:40 +01:00
Petr Škoda 92fc5a670d MDL-37152 remove bogus $mail->IsSMTP() breaking non-smtp mailing
Credit goes to Aurelijus Bruzas, thanks.
2012-12-22 14:48:47 +01:00
Petr Škoda c92a386ba4 MDL-37254 add missing AS keyword 2012-12-22 14:13:19 +01:00
Petr Škoda 7ea870a33e MDL-37233 do not show skype status icon on https sites
Funny that the same company that implemented the IE security warnings is unable to set up SSL on the Skype status server…
2012-12-21 17:28:05 +01:00
Petr Škoda 8cc55f3058 MDL-37191 do not timeout when uninstalling plugins 2012-12-21 16:00:59 +01:00
Petr Škoda ea0f9a277c MDL-36212 rework html entity conversions
This should resolve all html entity conversion problems in different PHP versions.
2012-12-20 22:49:20 +01:00
Eloy Lafuente (stronk7) 4a76321356 weekly release 2.3.3+ 2012-12-20 21:12:09 +01:00
Eloy Lafuente (stronk7) e84b8c3f5c Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-12-20 20:57:28 +01:00
Jason Fowler 0fa9c9ff12 MDL-35833 - Blocks - Adding alt and title attributes to the docked-block panel close button 2012-12-20 10:41:47 +08:00
Tim Hunt c0267dc549 MDL-32245 question bank: update URL after moving question between categories.
Also, improve the URL when you go to edit the questions in a category.
2012-12-20 12:12:37 +13:00
Andrew Robert Nicols 1365b07390 MDL-36934 Only set the autosubmit class on selects when required
The url_select class can optionally show a button (much like the non-JS
fallback). In this case, the autosubmit nature of the form shouldn't be
enforced and it should only submit on the button.
2012-12-19 12:27:17 +00:00
Adrian Greeve eb883f0fa4 MDL-35653 - mod/wiki: Force format now lets users edit wiki pages.
Thanks to Tõnis Tartes for part of this solution.

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

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

I also have included a check to see if the title is default and whether
the user has permission to view all groups. In these situations the
intermediate page is displayed.
2012-12-19 08:54:12 +08:00
Eloy Lafuente (stronk7) 9af7c81879 Merge branch 'w50_MDL-36245_m23_convert' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-18 23:43:06 +01:00
Andrew Robert Nicols 5eadb30e07 MDL-35569 AJAX Move auto-submitting selects to separate YUI module
sam note: Some changes removed from 2.4 version (deprecation warning, lib/upgrade.txt).
2012-12-18 13:56:26 +00:00
Matt Oquist d032ed7b0c MDL-36958 Forum: Replaced hard-coded numbers with proper defines 2012-12-18 17:24:34 +08:00
Dan Poltawski 2ea7723c53 Merge branch 'MDL-37014_webdav_folders_23' of git://github.com/davosmith/moodle into MOODLE_23_STABLE 2012-12-18 14:52:41 +08:00
Dan Poltawski 568349fee7 MDL-36259 - change case of table alias to match definition 2012-12-18 14:27:13 +08:00
Dan Poltawski 60b5ffebf5 Merge branch 'MDL-36259_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-18 14:26:10 +08:00
Dan Poltawski 8d8158ea9c Merge branch 'MDL-30899_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-12-18 09:11:31 +08:00
Raymond Wijaya 4c1d7cf9b6 MDL-36966 Assignment: Bug - Student submission appears graded by themselves.
Fix a bug when a student editing his submission after it has been graded, it changes the 'graded by' details to the student's name in the feeback summary
2012-12-18 08:47:14 +08:00
Dan Poltawski 2e791b966d Merge branch 'MDL-35740-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-18 08:45:48 +08:00
Eloy Lafuente (stronk7) af794e19f3 Merge branch 'MDL-36842_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-18 00:19:55 +01:00
Eloy Lafuente (stronk7) 877960cfdf Merge branch 'w50_MDL-37171_m23_outdatedexcel' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-18 00:14:04 +01:00
Adrian Fish 2ad0b3a12a MDL-37035 Pass user locale after course locale. 2012-12-18 10:32:29 +13:00
Sam Hemelryk 59fc0958d6 Merge branch 'w50_MDL-37111_m23_forumsinglefirst' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-18 10:24:32 +13:00
Sam Hemelryk b3f46160b4 Merge branch 'MDL-37176_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-12-18 10:12:11 +13:00
Sam Hemelryk 5c65ad28b4 Merge branch 'MDL-35530_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-12-18 10:07:03 +13:00
Sam Hemelryk 6c9a77ba0c Merge branch 'wip-MDL-35056-stable23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-18 09:56:58 +13:00
Sam Hemelryk 20da16bb77 Merge branch 'MDL-32245_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-18 09:51:30 +13:00
Sam Hemelryk f6a3850949 MDL-36812 grader_report: Fixed whitespace on integration 2012-12-18 09:48:06 +13:00
Nadav Kavalerchik e83a4dcdd8 MDL-36812 - Enabling grade_report_fixedstudents, shows the user's list on the left side of the page, in RTL mode (theme/standard) 2012-12-18 09:48:05 +13:00
Sam Hemelryk c20213441e Merge branch 'MDL-29733_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-12-18 09:42:06 +13:00
Tim Hunt f4564374d7 MDL-37098 quiz: event handler fails deleting group with no overrides
This was a regression from MDL-35717.
2012-12-17 17:01:05 +00:00
Dan Poltawski 2144749571 MDL-35717|NOBUG - fix trailing whitespace problems 2012-12-17 17:01:04 +00:00
Matt Petro 30ef79639c MDL-35717 quiz: fix overdue attempt processing 2012-12-17 17:00:52 +00:00
David Monllao 1a4bfac4db MDL-30899 moodle-enrol-notification Overridding default footer padding 2012-12-17 15:36:40 +08:00
David Monllao 49ca31880c MDL-30899 moodle-enrol-notification Adding close button title for accessibility 2012-12-17 15:36:33 +08:00
Dan Poltawski c3e3fd380d Merge branch 'w50_MDL-36493_m23_mysql' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-17 15:29:18 +08:00
Dan Poltawski 4dd80797b5 Merge branch 'MDL-37114_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-17 15:25:30 +08:00
Andrew Davidson 139d78a828 MDL-37034 - Added appropriate name to category settings navigation node 2012-12-17 15:22:07 +08:00
Dan Poltawski 5c7c78db26 Merge branch 'w50_MDL-36597_m23_courselang' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-17 13:53:33 +08:00
Dan Poltawski 8e81a8eb2c Merge branch 'MDL-29334_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-12-17 13:48:25 +08:00
Dan Poltawski 160d3c6b8a Merge branch 'wip-mdl-36736-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-12-17 12:09:46 +08:00
Dan Poltawski 0869ef50f0 Merge branch 'wip-MDL-25928-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-12-17 12:05:19 +08:00
Dan Poltawski 12a3697281 Merge branch 'wip-MDL-35874-stable23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-17 11:53:08 +08:00
Dan Poltawski f28b5664eb Merge branch 'wip-MDL-35979-s23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-17 11:48:47 +08:00
Dan Poltawski bda079183e Merge branch 'MDL-37078-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_STABLE 2012-12-17 11:37:10 +08:00
Dan Poltawski 71c3eff427 Merge branch 'MDL-37165-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-17 11:30:35 +08:00
Sam Hemelryk 5f9106b7f2 MDL-25928 course: Fixed course info on the combo list to be a popup 2012-12-17 16:03:42 +13:00
Petr Škoda a530b69dd5 MDL-37171 fix multiple spreadsheet related PHP4isms 2012-12-15 12:41:02 +01:00
Petr Škoda 91438d7894 MDL-36245 add tests for the buggy utf-8 to utf-8 conversion 2012-12-15 11:51:21 +01:00
Petr Škoda f16a143872 MDL-36245 try to workaround buggy iconv() when converting text from utf-8 to utf-8 2012-12-15 11:51:21 +01:00
Petr Škoda 84b9192875 MDL-36493 improve timeout handling in mysql upgrade
Credit goes to Mark Nielsen, thanks.
2012-12-15 11:44:55 +01:00
Petr Škoda 4df8d1924d MDL-36493 improve performance of mysql unsigned/lob upgrade 2012-12-15 11:44:55 +01:00
Petr Škoda 372bfa208c MDL-37111 copy first post files in single type forum using intro options
This patch also removed the delete button from the first post in single
discussion type forum.

Edit button in the first post leads to the forum edit page now, this should
prevent other problems throwing first post and intro out of sync.
2012-12-15 11:24:56 +01:00
Petr Škoda fb5d7df075 MDL-36597 strip '_utf8' from all course.lang fields 2012-12-15 11:18:59 +01:00
Joseph Rezeau d057719e98 MDL-37114 quiz form validation: feedback boundaries.
The feedback boundaries must either be a number or a percentage.
We were not correctly validating the non-percentage case.
2012-12-15 10:07:58 +00:00
Thanh Le defbd5dd2c MDL-36259 course short names: ensure it displays when enabled in admin
Fixed 5 Moodle pages that does not display the course short name even if "Display extended course names" setting is on.  In fixing this, search.php also included related minor code to change to minimise DB calls to improve performance.
2012-12-15 10:07:40 +00:00
Tim Hunt c49b83bccc MDL-32245 question bank: fix coding style in categories.php 2012-12-15 10:07:09 +00:00
Thanh Le 99231022af MDL-32245 question bank: fix moving categories between contexts. 2012-12-15 10:07:08 +00:00
AMOS bot 188c725387 Automatically generated installer lang files 2012-12-15 00:42:08 +00:00
Eloy Lafuente (stronk7) cdfb784e52 MDL-37176 timezones: updated to 2012j 2012-12-14 20:08:45 +01:00
Eloy Lafuente (stronk7) 7d2c5cd0a0 weekly release 2.3.3+ 2012-12-14 13:30:25 +01:00
Eloy Lafuente (stronk7) 4e6157ca5f Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-12-14 13:20:49 +01:00
Frederic Massart 50cff3c0cb MDL-36456 repository: S3 handles errors in a nicer way 2012-12-14 17:57:02 +08:00
Damyon Wiese 63fd639d85 MDL-37165 Assignment: Oracle fix for count_submissions_with_status (and friends).
Oracle does not like the use of AS after a join.
2012-12-14 15:16:06 +08:00
Dan Poltawski 271bfb48b8 Merge branch 'MDL-36263-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-13 17:43:21 +08:00
Damyon Wiese 6a1bcbfdab MDL-36263 Assignment: Fix backport for counting submissions of unenrolled students 2012-12-13 17:41:17 +08:00
Eloy Lafuente (stronk7) 87e9ea1f67 Merge branch 'MDL-30700-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-13 10:32:38 +01:00
Jason Fowler e98a1a118e MDL-35874 - Blocks - Adding a label to the 'Add a block' block's select field 2012-12-13 15:10:18 +08:00
Jason Fowler d4f5439de2 MDL-35056 - Backup/Restore - Converting the 'Unmet Dependencies' Message to be a Developer Debug message to make moodle less confusing to the average user 2012-12-13 11:11:29 +08:00
Damyon Wiese 4d8125b1c7 MDL-30700 tablelib: Fixed get_sort_for_table to work with text sorting columns for oracle
This change stores the list of columns that require text sorting in the session,
so the static function "get_sort_for_table" can work without any additional parameters.
2012-12-13 09:59:04 +08:00
Dan Poltawski 137d63fe96 Merge branch 'MDL-36897_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-13 09:55:07 +08:00
sam marshall c520e08653 MDL-37078: Restore - section restore fails with multiple availability conditions 2012-12-12 12:19:59 +00:00
Davo Smith 4615b7b6ff MDL-37014 repository_webdav - strip the server URL from file & folder paths returned by webdav lib (if present) 2012-12-12 08:46:59 +00:00
Tim Hunt d8a7ef0e42 MDL-36897 quiz review: fixup previous commit. 2012-12-12 08:13:43 +00:00
Frederic Massart 03f8841d9b MDL-32639 files: Zipping a folder does not overwrite existing files 2012-12-12 14:41:08 +08:00
Frederic Massart aa4d973436 MDL-32639 files: Improved File Manager download and zip support
Conflicts:

	lib/filestorage/zip_packer.php
2012-12-12 14:41:04 +08:00
Mark Nelson f2f5a5fc0e MDL-29334 mod_data: if site-wide presets created in <= 1.9 exist convert them to 2.x 2012-12-12 13:07:03 +08:00
Dan Poltawski 9391d2f4cf Merge branch 'wip-MDL-33448-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-12-12 09:38:03 +08:00
Cathal O'Riordan 18a0b829a4 MDL-36644 Assignment: prepend the course upload limit to the options array
Ensure that the course upload limit is the first option in the list of available choices for the Maximum submission size select.
2012-12-12 08:57:21 +08:00
Dan Poltawski 8869233e26 Merge branch 'm23_MDL-35737' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-12-12 08:44:13 +08:00
AMOS bot bdefe732c5 Automatically generated installer lang files 2012-12-12 00:41:20 +00:00
Sam Hemelryk 3ad9a3fda3 Merge branch 'MDL-27619_23' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-12-12 11:09:32 +13:00
Eloy Lafuente (stronk7) 106c4841a7 Merge branch 'MDL-32880_23_3' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-12-11 22:50:08 +01:00
Sam Hemelryk 27f4a337a0 MDL-29805 redirect: added check REQUIRE_CORRECT_ACCESS is true 2012-12-12 09:47:00 +13:00
Sam Hemelryk 1b39edd662 Merge branch 'MDL-29805-23' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-12-12 09:45:03 +13:00
Sam Hemelryk 09fc0fde35 Merge branch 'MDL-35593-23' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-12-12 09:38:27 +13:00
Sam Hemelryk 6e89cdb35f Merge branch 'wip_23_mdl-37088_bad_operator_ldap_sync_user' of https://github.com/iarenaza/moodle into MOODLE_23_STABLE 2012-12-12 09:34:31 +13:00
Sam Hemelryk eb49335150 Merge branch 'MDL-36321_message_participants_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-12-12 09:28:58 +13:00
Eloy Lafuente (stronk7) ecdee4a925 Merge branch 'MDL-30700-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-11 19:58:19 +01:00
Dan Poltawski def1725853 Merge branch 'w49_MDL-36447_m23_gdtest' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-11 17:54:51 +08:00
Dan Poltawski 7350e439bf Merge branch 'MDL-36243_23' of git://github.com/jmvedrine/moodle into MOODLE_23_STABLE 2012-12-11 16:24:34 +08:00
Dan Poltawski eba170d8fc Merge branch 'wip-MDL-36108-stable23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-11 16:03:41 +08:00
Damyon Wiese c8aa33ea2c MDL-35740 Assignment: Show students the status of own submission on overview page.
This is a minimal patch just for backporting to 23.
2012-12-11 16:01:23 +08:00
Jason Fowler a5dbb601ce MDL-36108 - Blocks - Online User block's user image's alt attribute is now empty to prevent repetition of text for screen readers 2012-12-11 15:49:27 +08:00
Damyon Wiese 0887f75587 MDL-30700 Assignment 2.2: Added text_sorting function to tablelib
Allows oracle to sort by text (clob) columns (should be used sparingly).
2012-12-11 15:41:56 +08:00
Dan Poltawski f2190bac6c Merge branch 'MDL-36712-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-11 14:01:14 +08:00
Dan Poltawski 1ff0a314c9 Merge branch 'MDL-36591-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-11 13:57:11 +08:00
Dan Poltawski 556f228a9e Merge branch 'MDL-36897_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-11 13:54:23 +08:00
Dan Poltawski a2f2dbb5dc Merge branch 'w49_MDL-36685_m23_tablecells' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-11 13:44:01 +08:00
Dan Poltawski f55f2e48ca Merge branch 'MDL-34791-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-12-11 13:23:08 +08:00
Dan Poltawski 1c570f9096 Merge branch 'MDL-36808-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_STABLE 2012-12-11 12:19:46 +08:00
Petr Škoda 1d2b58b5dd MDL-36983 fix incorrect test method name
Credit goes to David Scotson, thanks.
2012-12-11 12:10:43 +08:00
Dan Poltawski a2577a7cc3 Merge branch 'w49_MDL-36892_m23_enrolreadme' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-11 12:07:22 +08:00
Dan Poltawski 957dfed5f2 Merge branch 'MDL-36845_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-11 11:58:54 +08:00
Aparup Banerjee 4e66b8908c Merge branch 'w49_MDL-36817_m23_composer' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-11 11:54:53 +08:00
Dan Poltawski f95ba651fc Merge branch 'MDL-36828_23' of https://github.com/aolley/moodle into MOODLE_23_STABLE 2012-12-11 11:44:40 +08:00
Dan Poltawski 10c8b7390c Merge branch 'wip-MDL-36110-s23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-11 11:33:22 +08:00
Dan Poltawski 5d1dff532e Merge branch 'wip-MDL-35884-s23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-12-11 11:17:43 +08:00
Jason Fowler 2874baa411 MDL-35884 - Course - Fixing bad whitespace/character return 2012-12-11 11:12:17 +08:00
Jason Fowler 4885064053 MDL-35884 - Course - Remove text from ALT attribute for activity chooser 2012-12-11 11:11:49 +08:00
Sam Hemelryk 39a36d7d7b Merge branch 'MDL-36650_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-11 16:11:08 +13:00
Dan Poltawski 3f358a021b Merge branch 'MDL-36025-negative-zero-MOODLE_23_STABLE' of git://github.com/mpetrowi/moodle into MOODLE_23_STABLE 2012-12-11 11:07:43 +08:00
Sam Hemelryk b54470f497 Merge branch 'w49_MDL-36731_m23_uploadestrict' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-11 16:04:13 +13:00
Sam Hemelryk 237ea8768c Merge branch 'MDL-36905_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-12-11 15:44:32 +13:00
Dan Poltawski b2fa6cfa93 Merge branch 'MDL-34052-23' of https://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-11 10:39:42 +08:00
Dan Poltawski 8f647f1d3a Merge branch 'w49_MDL-31424_m23_paypalcase' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-11 10:31:44 +08:00
Sam Hemelryk 2e6538382a Merge branch 'MDL-36942_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-11 15:04:17 +13:00
Sam Hemelryk b74804c8a8 Merge branch 'MDL-36954_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-11 14:59:50 +13:00
Dan Poltawski 14802ee558 Merge branch 'MDL-36773-23' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-12-11 09:56:47 +08:00
Petr Škoda 702ac0ce02 MDL-37061 always validate lang when setting session user
This should resolve problems with TinyMCE langs and some unknown MUCH caching issue.
2012-12-11 14:44:41 +13:00
Andrew Davis 72754427b6 MDL-36321 core_message: made the course participants list correctly show if course participants are contacts or not 2012-12-11 08:55:25 +08:00
Petr Škoda f6ca5cf303 MDL-29442 add missing utf-8 to entity html encoding and decoding 2012-12-11 10:23:12 +13:00
Sam Hemelryk 3c805e592c Merge branch 'MDL-36263-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-11 10:10:07 +13:00
Sam Hemelryk f1cf05cbbe Merge branch 'MDL-36601-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-12-11 09:41:49 +13:00
Sam Hemelryk 667dfa5e7c Merge branch 'MDL-36805-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-12-11 09:14:59 +13:00
Iñaki Arenaza c31d0566d7 MDL-37088 auth_ldap: bad operator in ldap sync_user() method 2012-12-10 16:48:14 +01:00
Andrew Robert Nicols 53e1e390f3 MDL-34791 AJAX Update a graded activity's title in the gradebook on rename 2012-12-10 14:15:27 +00:00
Andrew Robert Nicols 8fdecaa51a MDL-36805 Correct docs for workshop_grade_item_update in mod_workshop
The documentation suggested that the modname field should be present on the
$workshop parameter when this is not required. It is not used in any point
in the function and the $workshop variable is never passed to another
function which may use it.
2012-12-10 12:27:30 +00:00
Dan Poltawski 1423ab3709 Merge branch 'w49_MDL-36737_m23_glossstrict' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-10 19:37:41 +08:00
Vadim Dvorovenko 4dcae0d897 MDL-32639 files: Removing '0' start folder in archives created with filemanager
Signed-off-by: Vadim Dvorovenko <vadimon@mail.ru>
2012-12-10 18:10:58 +08:00
Dan Poltawski ae4e512f66 Merge branch 'MDL-36167-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-10 17:32:30 +08:00
Dan Poltawski b0473b9bf0 Merge branch 'MDL-36732_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-10 15:18:24 +08:00
Dan Poltawski 8bd7536090 Merge branch 'MDL-36742_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-10 14:41:48 +08:00
Dan Poltawski 870d2fff8e Merge branch 'MDL-36549_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-12-10 14:19:10 +08:00
Dan Poltawski 66586db224 Merge branch 'MDL-36835-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-10 14:02:24 +08:00
Dan Poltawski d4d6cce500 Merge branch 'MDL-36538_webdav_memory_23' of git://github.com/davosmith/moodle into MOODLE_23_STABLE 2012-12-10 13:13:11 +08:00
Dan Poltawski 6078f84d9f Merge branch 'w49_MDL-35456_m23_paypal' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-12-10 12:03:33 +08:00
Dan Poltawski 8ffe246d69 Merge branch 'MDL-35404_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-12-10 11:36:49 +08:00
Sam Hemelryk a9269beb9c Merge branch 'MDL-30961-23' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-12-10 14:59:31 +13:00
Dan Poltawski 1197b6163a Merge branch 'MDL-36680_hidden_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-12-10 09:57:10 +08:00
Sam Hemelryk e4a2de510c Merge branch 'MDL-34592_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-12-10 14:28:24 +13:00
Sam Hemelryk 15e9d4c64a Merge branch 'MDL-36608_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-12-10 14:24:10 +13:00
Sam Hemelryk b35e30e5bc Merge branch 'MDL-36978_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-12-10 14:21:08 +13:00
Mark Nielsen ccca91bd9e MDL-36579: Adding missing fields in mod/lti backup 2012-12-10 14:16:36 +13:00
Sam Hemelryk 1f0e0ab503 Merge branch 'MDL-36607_dndBlocks' of https://github.com/moodlerooms/moodle into MOODLE_23_STABLE 2012-12-10 14:12:24 +13:00
Mary Evans 564b28731c MDL-34592 theme_magazine: Fixes the report grader fixed column misalignment in magazine/style/core.css theme, plus fixes all CORE themes with minor adjustment to grade/report/grader/style.css 2012-12-10 00:06:03 +00:00
Sam Hemelryk 2353df33a7 Merge branch 'MDL-36433' of git://github.com/itamart/moodle into MOODLE_23_STABLE 2012-12-10 12:13:10 +13:00
Dan Poltawski 8d0a31e6cf MDL-36764 ddl/oracle: fix misleading comment 2012-12-10 11:55:08 +13:00
Sam Hemelryk f382da5bf9 Merge branch 'MDL-36778-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-12-10 11:51:20 +13:00
Sam Hemelryk 0d76053893 Merge branch 'MDL-36887-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-12-10 11:47:44 +13:00
Sam Hemelryk 46210e38e8 Merge branch 'MDL-36640-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-12-10 11:42:35 +13:00
Andrew Robert Nicols 0c7f592819 MDL-36918 Decode HTML entities on ajax update title 2012-12-10 11:15:07 +13:00
Sam Hemelryk 532577bb97 Merge branch 'message_nav_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-12-10 10:58:50 +13:00
Sam Hemelryk 5b2b3bdaf8 Merge branch 'MDL-36761_loop_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-12-10 10:54:00 +13:00
Sam Hemelryk b88caf890d Merge branch 'MDL-34591_23' of git://github.com/grabs/moodle into MOODLE_23_STABLE 2012-12-10 10:48:33 +13:00
Sam Hemelryk 45fd888c52 Merge branch 'wip-MDL-35221-MOODLE_23_STABLE' of git://github.com/kwiliarty/moodle into MOODLE_23_STABLE 2012-12-10 10:41:20 +13:00
Sam Hemelryk f384987ead Merge branch 'wip-MDL-36906-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-12-10 10:33:33 +13:00
Sam Hemelryk 4dd8a25f5d Merge branch 'wip-MDL-36915-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-12-10 10:27:07 +13:00
Sam Hemelryk 289f5e85e7 Merge branch 'wip-MDL-37026-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-12-10 10:23:35 +13:00
Sam Hemelryk cf0451133f Merge branch 'MDL-33125_23' of git://github.com/aolley/moodle into MOODLE_23_STABLE 2012-12-10 10:19:22 +13:00
Petr Škoda 0f4db4574c MDL-36447 skip file preview test if GD not available 2012-12-09 19:23:52 +01:00
Andreas Grabs a0212e54f5 MDL-34591 - paypal does not allow unenrol 2012-12-09 19:08:17 +01:00
Mary Evans bf5886726f MDL-36978 theme_standardold: fixes misplaced block region check in layout/frontpage.php which, with hindsight should have been fixed in MDL-23226. 2012-12-08 22:53:36 +00:00
Jean-Michel Vedrine f62c457ece MDL-36243 question->questiontext and question->generalfeedback should always be strings 2012-12-08 20:47:32 +01:00
Petr Škoda b03f7353d0 MDL-36737 fix random glossary E_STRICT issue 2012-12-08 14:45:31 +01:00
Petr Škoda 408ef58fed MDL-31424 compare PayPal emails case-insensitively
Credit goes to Chris Follin, thanks!
2012-12-08 13:17:53 +01:00
Petr Škoda df93e51dcf MDL-35456 use HTTP 1.1 for PayPal IPN 2012-12-08 11:59:41 +01:00
Eloy Lafuente (stronk7) 5fa7d72064 weekly release 2.3.3+ 2012-12-08 02:55:28 +01:00
Eloy Lafuente (stronk7) ac10ff2459 Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-12-08 02:49:16 +01:00
Petr Škoda 0c1115480e MDL-36936 require phpunit as composer --dev only 2012-12-07 18:21:56 +01:00
Petr Škoda 3b3b7e68ab MDL-36892 delete outdated enrol info 2012-12-07 17:17:21 +01:00
Davo Smith fdf3274ff2 MDL-36538 repository_webdav - save files directly to local filesystem, rather than buffering in memory 2012-12-07 09:25:23 +00:00
AMOS bot 0935f03d7d Automatically generated installer lang files 2012-12-07 00:40:52 +00:00
Sam Hemelryk 467c1ad18d MDL-33448 enrol_manual: Reduced JS get_string calls for the yui widget 2012-12-07 09:52:55 +13:00
Sam Hemelryk 5c5b2999cb MDL-33448 enrol_manual: Reordered things to improve JS performance when enrolling users 2012-12-07 09:52:55 +13:00
Petr Škoda dc5496f2ae MDL-36685 add missing TinyMCE string 2012-12-06 13:18:29 +01:00
Petr Škoda ee152c0104 MDL-36731 fix E_STRICt issue when creating new groups in user upload 2012-12-06 13:16:14 +01:00
Petr Škoda 835ed7014e MDL-36701 add composer to phpunit readme
Thanks Aparup for reminding me!
2012-12-06 13:08:55 +01:00
Petr Škoda 1dd64dae7b MDL-36701 support for PHPUnit installation via Composer packaging system
See http://getcomposer.org/doc/00-intro.md
2012-12-06 13:08:54 +01:00
Adrian Greeve c154ce5a7f MDL-37026 - lib: The function user_can_assign() returns true for admins. 2012-12-06 11:07:20 +08:00
David Mudrák 783fcd0951 MDL-37003 Fix repeated line in update notification email
There was a problem experienced after 2.4.0 release because the version
of the 2.4.0 release was the same as 2.5dev release. So the version
value matched twice in the loop and the line was repeated in the email.
2012-12-06 00:03:25 +01:00
David Mudrák 5800832af8 MDL-36943 Do not notify about already installed updates
Before this patch, the available_update_checker::cron_notifications()
method accessed the availableupdates property. But for plugins, that property
basically contains the most recent version available. So we were missing
the check against the actual version installed.

The fix was simple - obtain available updates via the available_updates()
method that performs the check.
2012-12-05 23:47:54 +01:00
Jason Fowler 56f9a51bc3 MDL-35979 - Commenting - Adding an empty alt attribute to the javascript generated delete icon for comments 2012-12-05 10:04:04 +08:00
Jason Fowler e0971d8b42 MDL-36110 - Blocks - Community finder icon alt attribute is now empty 2012-12-04 15:17:55 +08:00
Jerome Mouneyrac 22e9de0ffd MDL-29805 add REQUIRE_CORRECT_ACCESS define + return error code when AJAX_SCRIPT fails 2012-12-04 13:43:54 +08:00
Eloy Lafuente (stronk7) 99584654ce weekly release 2.3.3+ 2012-12-03 23:26:00 +01:00
Eloy Lafuente (stronk7) b5cef3b9f5 Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-12-03 23:24:56 +01:00
Jason Fowler 4769f19ccd MDL-31824 - Calendar - Fixing HTML classes fopr calendar month view - patch provided by Mark Ward 2012-12-03 15:30:20 +08:00
Dan Poltawski b17858f991 Merge branch 'MDL-36914-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-12-03 14:45:49 +08:00
Jerome Mouneyrac c7a0750b8c MDL-35593 core_webservice_get_site_info returns version number set to PARAM_TEXT and PARAM_FLOAT 2012-12-03 10:17:03 +08:00
AMOS bot b052fa8da1 Automatically generated installer lang files 2012-12-01 00:43:07 +00:00
Tim Hunt 557d890cbb MDL-36954 question bank: stop centring question name.
This was a regression caused by MDL-21625. These CSS changes
put the display back to how it was, while leaving the table
cell as a TD  for accessibility.
2012-11-30 16:33:54 +00:00
Tim Hunt a0a83bd0bf MDL-36942 xml question import: don't add spaces.
They are not necessary anyway, there is a \n character at the end of
each line.

Thanks to Richard Lobb for fining the problem and how to fix it.
2012-11-30 15:53:30 +00:00
Tim Hunt 50c88ad26c MDL-36897 quiz: redirect teachers from summary to review page.
There is already logic like this at the top of attempt.php. If the
teacher arrives at one of these pages for a student's attempt, for
example by clicking a link in the logs, then they should be redirected
to the review page to see the students attempt in its current state.
2012-11-30 15:53:12 +00:00
Tim Hunt 832b653627 MDL-36845 excel export: don't output invalid sheet names.
We should clean any proposed worksheet name, to remove the characters
that Excel does not allow.
2012-11-30 15:52:54 +00:00
Tim Hunt 66a56d2548 MDL-36742 question bank: get rid of flicker during page load.
Thanks to Frédéric Massart for working out the fix to this.
2012-11-30 15:52:34 +00:00
Tim Hunt 5d0f5f861d MDL-36732 Cloze qtype: review marks should not depend on feedback.
The various review options should be independent.
2012-11-30 15:52:14 +00:00
Tim Hunt 94215aa40d MDL-35404 question export: make it work with slasharguments off.
Thanks to Brian King for working out the problem and how to fix it. I am
just committing his patch.
2012-11-30 15:51:33 +00:00
Eloy Lafuente (stronk7) 2a0ec98d6e Satisfy version checker requirements
In stable branches, 8 first digits of the backup version
must be >= than the 8 first digits of the main version.
2012-11-30 13:35:48 +01:00
Eloy Lafuente (stronk7) c5e41c035e weekly release 2.3.3+ 2012-11-30 13:25:29 +01:00
Eloy Lafuente (stronk7) 0139100af5 Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-11-30 12:48:29 +01:00
Damyon Wiese 40c1230f1f MDL-36263 Assignment: Do not count submissions of unenrolled users 2012-11-30 15:36:11 +08:00
Jerome Mouneyrac d872b3dc16 MDL-30961 get_course_contents: returned activity name should not be check against PARAM_TEXT, it could be anything 2012-11-30 14:24:22 +08:00
Damyon Wiese 46c678ab33 MDL-36908 Assignment: Additional fixes for preventing empty submissions
Conflicts:

	mod/assign/assignmentplugin.php
	mod/assign/locallib.php
	mod/assign/renderer.php
2012-11-30 12:46:25 +08:00
Dan Poltawski 4d1383bcf4 MDL-36778 course - prevent undefined index warnings
When logged in as a guest the mform didn't set userid.
2012-11-30 12:28:56 +08:00
Dan Poltawski dceeeb29e0 MDL-36887 quiz: reorder upgrade.txt's 2012-11-30 11:44:33 +08:00
Andrew Davis b10a46738a MDL-36761 core_grade:shifted a call to count() out of a loop 2012-11-30 11:09:58 +08:00
Jerome Mouneyrac b64f16a6fb MDL-36773 timezone inconsistency => some number support decimal other don\'t - Original patch author: Nathan Mares 2012-11-30 10:13:25 +08:00
Adrian Greeve 691cd371f0 MDL-36915 - mod/data: A database with no entries no longer displays the export to portfolio button. 2012-11-30 10:09:48 +08:00
Damyon Wiese 4f6e4a5b75 MDL-36835 Assignment: Do not show javascript warning when toggling quickgrading 2012-11-30 10:05:40 +08:00
Dan Poltawski 96b96229f1 Revert "MDL-36838 moodle->mahara mnet SSO failure in FF17"
Firefox have now decided to reverse their UA change (since integration)
and this patch has some minor drawbacks.

This reverts commit 166d3b60d3.
2012-11-30 09:25:10 +08:00
Kevin Wiliarty d3da4d8c1a MDL-35221 mod_feedback: replace checkbox with advcheckbox for all requirable feedback question types 2012-11-29 12:30:20 -05:00
Andrew Robert Nicols be56898193 MDL-36601 Ensure that reports remember all days setting
All Days was set as the nothing value, but this nothing value was used.
Additionally, an insufficient comparison meant that the selecteddate then
became Today.
2012-11-29 09:57:09 +00:00
Damyon Wiese 16d31e2376 MDL-36914: Assignment upgrade. Clean up patch to include outcomes in the upgrade
Thanks to Nathan Mares for reporting this issue.
2012-11-29 16:11:04 +08:00
Nathan Mares fb9c26d092 MDL-36914: Re-associate all grade_item records when upgrading assignments to prevent data loss 2012-11-29 16:11:03 +08:00
Rossiani Wijaya e8dd799570 MDL-36905 accessibility for assignment grading: add label for grading actions and operations select options 2012-11-29 15:11:34 +08:00
Adrian Greeve 85094b8fa4 MDL-36906 - mod_data: Latitude and Logitude error fix.
Thanks to Marcus Boon for providing a patch for this issue.

mod/data/field/latlong/kml.php was missing a context variable.
This was causing an error when trying to download a kml file for
google earth. This variable has now been included.
2012-11-29 14:50:16 +08:00
Dan Marsden 1c951c4649 MDL-36858 SCORM: improve lang help for attempts grading to warn about failed status. 2012-11-29 12:53:51 +08:00
Sam Hemelryk a5af780bce MDL-36878 course: fixed issue with module metadata cache
Credit goes to Sam Chaffee.
2012-11-29 12:57:31 +13:00
Dan Poltawski 78601ea6fe Merge branch 'MDL-36838-FF17-MNETSSO-23' of git://github.com/peterbulmer/moodle into MOODLE_23_STABLE 2012-11-28 17:36:09 +08:00
Dan Poltawski a38a5cefb3 Merge branch 'MDL-35966-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-11-28 14:15:41 +08:00
Damyon Wiese 8abd89f17e MDL-36591 Assignment - rewrite image urls in online text summaries 2012-11-28 10:19:47 +08:00
Dan Poltawski ab690341b2 Merge branch 'MDL-36752-MOODLE_23_STABLE-2' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-11-28 09:41:30 +08:00
Andrew Davis 8d3b868068 MDL-36680 core_grade: fixed grade_report::blank_hidden_total() and added unit tests 2012-11-28 09:12:14 +08:00
Sam Hemelryk 0b7a458885 Merge branch 'MDL-36336_MOODLE_23_STABLE' of git://github.com/moodlerooms/moodle into MOODLE_23_STABLE 2012-11-28 11:47:53 +13:00
Sam Hemelryk 01afb8024f Merge branch 'wip-mdl-36238-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-11-28 11:41:35 +13:00
Sam Hemelryk 03af084b52 Merge branch 'wip-MDL-34530_MOODLE_23_STABLE' of git://github.com/jason-platts/moodle into MOODLE_23_STABLE 2012-11-28 11:24:56 +13:00
Sam Hemelryk 4254a7495c Merge branch 'MDL-36012-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-11-28 11:12:30 +13:00
Andrew Robert Nicols 1ca16a9b59 MDL-36752 Be more specific about tooltip selectors 2012-11-27 14:51:05 +00:00
sam marshall 8b6aeff8ea MDL-36808 Completion: Incorrect escaping for activity name in completion tickbox 2012-11-27 12:54:23 +00:00
Aparup Banerjee f6183fa162 Merge branch 'MDL-36865_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-27 16:26:08 +08:00
Damyon Wiese 2dd7131e1e MDL-35966 Assignment - Localisation issue - use userdate not strftime
This is causing a database error (reported on MySQL) when strftime returns
non-utf8 characters.  This occurs when sending assignment notifications.

This was reported and a solution provided by Chien Wen-Chang(簡文章).
2012-11-27 16:18:15 +08:00
Mark Nelson 47acfc3db9 MDL-36865 filepicker: ensuring the dnd arrow displays in the center of the filepicker for all supported browsers 2012-11-27 16:00:09 +08:00
David Monllao 429a5a5b33 MDL-30899 moodle-enrol-notification Adding focus to non modal windows 2012-11-27 14:57:07 +08:00
David Monllao a3fc03f616 MDL-30899 moodle-enrol-notification Adding H1 to notifications headers 2012-11-27 14:57:07 +08:00
David Monllao 99b8393174 MDL-30899 block_community Changing from overlay to panel references 2012-11-27 14:57:07 +08:00
David Monllao 2a88835d5a MDL-30899 modchooser Changing from overlay to panel references 2012-11-27 14:57:07 +08:00
David Monllao 64cd465f13 MDL-30899 moodle-enrol-notification Replacing Y.Overlay for Y.Panel
References to lightbox are still there to maintain the same
external API but are converted to a modal attribute internally,
same with closeButton, not it uses the Y.Panel close button
2012-11-27 14:57:06 +08:00
Aparup Banerjee 7cde2573d7 Merge branch 'MDL-36841_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-27 14:56:36 +08:00
Dan Poltawski c9368a425a Merge branch 'MDL-34695_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-11-27 14:23:44 +08:00
Dan Poltawski db7f46ad3a Merge branch 'MDL-36302-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-11-27 14:10:06 +08:00
Damyon Wiese 520b7df1a5 MDL-36302 course: Set correct URL on settings page for navigation. 2012-11-27 14:04:07 +08:00
Dan Poltawski 89ac5e8782 Merge branch 'MDL-36184-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-11-27 13:58:29 +08:00
Luke Tucker 42e0a59d5b MDL-34052 assignment - Disable submission and feedback plugins based on assign type when upgrading 2012-11-27 13:39:53 +08:00
Dan Poltawski 148c786f7c Merge branch 'MDL-36752-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-11-27 13:32:47 +08:00
Dan Poltawski 6ac0d92d5b Merge branch 'MDL-36806_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-27 13:26:46 +08:00
Mark Nelson 487ec8a912 MDL-36841 portfolio: ensure variables in parent function match those of childs to prevent strict standard error 2012-11-27 12:41:58 +08:00
Aparup Banerjee f441ec2564 Merge branch 'wip-mdl-36767-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-11-27 12:20:25 +08:00
Rajesh Taneja e006de414e MDL-36767 Administration: user_filter_yesno use different name for sql filter
user_filter_yesno extends user_filter_simpleselect, so if user bulk action filter has both
user_filter_simpleselect and user_filter_yesno, they use the same filter name but counter is
different as they are different classes. Hence using different filter name will avoid confilts
2012-11-27 11:55:57 +08:00
Aparup Banerjee 4505720f3e Merge branch 'MDL-36305-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-11-27 11:53:09 +08:00
Peter Bulmer 166d3b60d3 MDL-36838 moodle->mahara mnet SSO failure in FF17
In MDL-36838 Firefox 17 users are unable to sso from moodle to mahara.

Firefox 17 uses a different user agent (UA) string for Moodle sites than it
does for Mahara or other sites.
This patch relaxes the check which previously required that the UA string
being presented to the SP on landing matched the UA string presented to the IP
when jumping.
Likewise, checks associated with logout calls have been relaxed
2012-11-27 16:19:38 +13:00
Sam Hemelryk 13669ef4d8 Merge branch 'wip-MDL-36795-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-11-27 11:21:55 +13:00
Sam Hemelryk 77f3688b2f Merge branch 'MDL-35760_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-27 11:10:25 +13:00
Sam Hemelryk 4c14127cdb Merge branch 'MDL-36760_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-27 10:40:57 +13:00
Paul Nicholls 134ede3476 MDL-27619: Prevent teachers from turning course Outcomes into site-wide ones
Similar to the issue which allowed teachers to create site-wide scales by editing a course-specific scale (MDL-24682), teachers could also promote a course-specific scale to a site-wide (standard) by editing it.  As with MDL-24682, removing the course ID check (leaving just the capability check) prevents this unauthorised creation of site-wide (standard) outcomes.
2012-11-27 09:48:16 +13:00
Adrian Greeve d22b5faae8 MDL-36795 - lib / administration: maxsections now limits the default setting for numsections.
In the default course settings, setting the maximum number topics / weeks  to 0 would not
change the default number of sections on the same page as any other number would.
A more appropriate check has been put in place.

This also incorporates a fix for MDL-28584. The course edit screen now also checks to see
if maxsections is set or numeric. If it is not set or numeric then it defaults to 52.
2012-11-26 15:54:49 +08:00
Adam Olley 63945c8de2 MDL-36828: mod_scorm: Allow deletion of scorm modules if no scorm_scoes data exists 2012-11-26 15:33:16 +10:30
Adam Olley 69b0d17436 MDL-33125: core_backup: Prevent import/activity duplication from duplicating manual grade items 2012-11-26 12:28:00 +10:30
Sam Hemelryk 55f8a9c766 Merge branch 'MDL-36609_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-26 14:57:57 +13:00
Sam Hemelryk f9fa262aa9 Merge branch 'wip-MDL-36551-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-11-26 14:44:27 +13:00
Sam Hemelryk 8f718da437 Merge branch 'MDL-36763-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-11-26 11:42:13 +13:00
Sam Hemelryk 703b86eefb Merge branch 'MDL-35963-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE 2012-11-26 10:31:57 +13:00
AMOS bot 2afa81e6de Automatically generated installer lang files 2012-11-24 00:42:52 +00:00
Tim Hunt 36ab57f922 MDL-36806 question files: fix unnecessary require_login call.
quiz_question_pluginfile later does the correct check. Doing this
other check first means you get an error about changing $PAGE->context.
2012-11-23 15:56:46 +00:00
Tim Hunt 500c73ba1e MDL-36760 formslib: fix frozen elements with [] in name.
This was a regression caused by MDL-30845 or, to be precise, the related
issue MDL-32785.

Form elements with names like multipier[0] require special handling,
such as is present in HTML_QuickForm_element::_prepareValue. I have
added equivalent handling to MoodleQuickForm::exportValues. I am afraid
that I could not think of a way to do this reliably without duplicating
code.
2012-11-23 11:31:20 +00:00
Tim Hunt d4eec64dc6 MDL-36650 don't change question timecreated or timemodified on restore. 2012-11-23 10:50:26 +00:00
Mark Nelson 6e726489e7 MDL-36741 mod_forum: fixed SQL that was generated when either timed posts or groups were enabled 2012-11-23 17:03:10 +08:00
Dan Poltawski 5f1d8f2a8f weekly release 2.3.3+ 2012-11-23 15:20:23 +08:00
Dan Poltawski 0d80d00494 Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-11-23 15:12:29 +08:00
Dan Poltawski cc00f721d1 Merge branch 'MDL-36204-files-with-spaces_23' of git://github.com/mudrd8mz/moodle into MOODLE_23_STABLE 2012-11-23 11:20:04 +08:00
David Mudrák 045053f641 MDL-36204 Improve moodle1 conversion of embedded files
URL of files referenced in HTML fields via $@FILEPHP$@ are usually
encoded if they were linked using the HTML editor. So if they contain
spaces or plus signs in the name, their URL is encoded to use %20 and
%2B respectively.

Sometimes, for example when the HTML was edited manually in 1.9 without
the editor, non-encoded file names may be put into the HTML text. Such a
link used to work in 1.9 so we add an explicit support for it, too.

However, we do not support partially encoded URLs (e.g. only spaces are
encoded while plus signs are not). Such links are unmodified and will
rely on Legacy files support.
2012-11-23 03:51:55 +01:00
Paul Nicholls d09fffbefb MDL-32880: Add moodle1 backup converter for rss_client block.
Creates a shell rss_client.xml file, which contains no feeds.  This makes it behave the same as restoring a Moodle 1.9 backup into a different 1.9 site - the block is created, its title is as per the original course, but it has no feeds selected (and none are added to the site's feed list).
2012-11-23 09:01:59 +13:00
Paul Nicholls 6eb4a954a6 MDL-32880: Add moodle1 backup converter for html block.
This converter processes the HTML block's content, migrating any referenced files.
2012-11-23 09:01:47 +13:00
Paul Nicholls afaabdaf27 MDL-32880: moodle1 backup converter: add generic block handler
This handler will automatically be used for any block which does not provide its own handler, and should be subclassed by any block which needs to do anything extra (or different).

This commit incorporates contributions from Mike Churchward and API design suggestions from David Mudrak.
2012-11-23 09:01:35 +13:00
Andrew Robert Nicols 0e88b7d94f MDL-35819 Improve performance of help tooltip
Rather than using an event handler for each help link, we add the
'helpicon' class to them and delegate the display function.

In order for this to work, we modify the way that Y.io fetches the help to
use the intended target of the anchor rather than a value provided in the
add call. We also no longer modify this URL and instead add the ajaxurl
parameter to it using the Y.io data parameter.

This change is backwards compatible with people calling it without using
the help icon renderer.
2012-11-22 11:45:34 +00:00
Andrew Robert Nicols 355b4f9dfa MDL-36763 Remove onclick event when creating activity left indent link
The left indent onclick is now handled by a Y.delegate so there is no need
for a seperate event handler.
2012-11-22 10:56:20 +00:00
AMOS bot f4a048d771 Automatically generated installer lang files 2012-11-22 09:05:24 +00:00
Rajesh Taneja aae9605228 MDL-36736 course: Availability information should not be visible for hidden modules
If user is viewing hidden module, availability information should only be visible to
user when editing and module is visible. If editing and module is hidden, then hide
availablilty information as it's invalid.
When user is not editing and activity is hidden then don't add availability information.
2012-11-22 15:13:26 +08:00
Rajesh Taneja c1ac572d9c MDL-36736 course: Availability information will use hide class for hidding 2012-11-22 15:13:26 +08:00
Dan Poltawski 64ae757ee5 Merge branch 'wip-MDL-36668-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-11-22 10:33:15 +08:00
Petr Škoda 2b78a895fe MDL-36753 fix invalid sectionid in backup tests 2012-11-21 12:40:17 +01:00
Damyon Wiese dba42c3390 MDL-36712: Assignment grading with custom scale is affected by the current language 2012-11-21 15:35:44 +08:00
Dan Poltawski bbeafdbed1 Merge branch 'w47_MDL-36547_m23_sectiongen' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-11-21 15:34:22 +08:00
Dan Poltawski 105562e682 Merge branch 'MDL-30884_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-21 15:19:24 +08:00
Damyon Wiese 85b5e20cde MDL-35963: Assignment - do not accept empty submissions
Conflicts:

	mod/assign/locallib.php
2012-11-21 13:53:34 +08:00
Mark Nelson 03e403414e MDL-35760 filemanager: ensuring the dnd arrow displays in the center of the filemanager for all supported browsers 2012-11-21 12:03:54 +08:00
Damyon Wiese 80238a3cc2 MDL-36012: Assignment, Accessibility - Add user information to alt text for grade icon in grading table.
Conflicts:

	mod/assign/lang/en/assign.php
2012-11-21 12:03:45 +08:00
Dan Poltawski c41d292bce Merge branch 'MDL-35675-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-11-21 12:02:58 +08:00
Dan Poltawski 19d964e07a Merge branch 'MDL-36289-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-11-21 12:01:03 +08:00
Dan Poltawski 8fb4c6e7c3 Merge branch 'MDL-30377_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-21 11:53:21 +08:00
Dan Poltawski 97c7facfe0 Merge branch 'MDL-36170_m23' of https://github.com/jfilip/moodle into MOODLE_23_STABLE 2012-11-21 11:47:39 +08:00
Rossiani Wijaya 879766ade2 MDL-36549 Lesson module: fixed strict standards errors 2012-11-21 11:32:42 +08:00
Damyon Wiese fbd336f810 MDL-36184: Assignment quickgrading should only update lastmodified dates for modified submissions 2012-11-21 11:14:29 +08:00
Adrian Greeve 0c5bd8349d MDL-36551 - mod_data: Onsite presets now retain the advanced search template.
Presets that were saved to the site would lose the advanced search template when being used.
The previous check was put in place to see if the advanced search template existed or not (presets pre 1.9),
This checked external files properly but not onsite files.

Now checks are being done on both internal and external preset files.
2012-11-21 10:03:00 +08:00
Damyon Wiese 7cc7277064 MDL-36167: Assignment quickgrading fix when there is no grade (ensure feedback still saves)
This patch modifies the previous on by Luke Tucker so that the lastmodified hidden field
is always added to the quickgrading form even if there is no grade for the assignment. This
ensures that the lastmodified checks still work (to prevent teachers overwriting each
others feedback) and feedback is saved when there is no grade.

Conflicts:

	mod/assign/locallib.php
2012-11-21 09:33:14 +08:00
Luke Tucker 9e494233b0 MDL-36167: Update all users in assignment quickgrade form to ensure feedback is saved 2012-11-21 09:31:20 +08:00
Sam Hemelryk fa99332779 Merge branch 'MDL-25552_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-21 09:00:17 +13:00
Justin Filip 0c665d0063 MDL-36170 - mod/data - Don't display the blocks editing button within table HTML, use a standard API to create it. 2012-11-20 09:04:34 -05:00
Tim Hunt a9258e46ae MDL-30884 quiz: ARIA attribute for the coutdown timer. 2012-11-20 12:14:27 +00:00
Mark Nelson 13f8c06414 MDL-25552 mod_lesson: changing filepicker element to filemanager to allow the deletion of a file 2012-11-20 17:42:28 +08:00
Aparup Banerjee 8626068001 Merge branch 'wip-mdl-36707-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-11-20 16:28:00 +08:00
Dan Poltawski 3ec8f9f74a Merge branch 'MDL-33863_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-20 16:16:41 +08:00
Dan Poltawski 728b702f4e Merge branch 'MDL-36022-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-11-20 16:04:19 +08:00
Dan Poltawski a91c6103f3 Merge branch 'MDL-30731-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-11-20 15:31:38 +08:00
Dan Poltawski 0299d83bc0 Merge branch 'MDL-36646_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-20 15:12:00 +08:00
Dan Poltawski 254d78b75f Merge branch 'MDL-36571_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-20 15:01:38 +08:00
Frederic Massart ac247b4e84 MDL-30731 calendar: Fixed display of images in event descriptions 2012-11-20 14:59:23 +08:00
Dan Poltawski 21082f7aed Merge branch 'MDL-36548_23' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-11-20 14:45:04 +08:00
Dan Poltawski d7aec7342d Merge branch 'wip-MDL-36453-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-11-20 14:32:05 +08:00
Frederic Massart f54b485abc MDL-36305 theme: Forum reply button is not removed using MyMobile 2012-11-20 13:57:03 +08:00
Rajesh Taneja 84e47a8a3b MDL-36707 Course: set conditionalhidden class properly, so it doesn't overlap with dimmed class 2012-11-20 13:45:11 +08:00
Dan Poltawski d338726097 Merge branch 'MDL-36204_23' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-11-20 12:45:32 +08:00
Dan Poltawski 81d1026d1c Merge branch 'm23_MDL-36168' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-11-20 12:38:33 +08:00
Dan Poltawski aaf19f1ca3 Merge branch 'MDL-35158-23' of git://github.com/grabs/moodle into MOODLE_23_STABLE 2012-11-20 12:28:59 +08:00
Dan Poltawski 042a79870c Merge branch 'MDL-32865_23' of git://github.com/jmvedrine/moodle into MOODLE_23_STABLE 2012-11-20 12:05:46 +08:00
Dan Poltawski e81c1ad987 Merge branch 'MDL-30871-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-11-20 11:47:26 +08:00
Dan Poltawski 04821272ab Merge branch 'MDL-26439_message_search_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-11-20 11:20:51 +08:00
Eloy Lafuente (stronk7) c7dcaf1324 Merge branch 'MDL-36683_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-20 01:33:49 +01:00
Jean-Michel Vedrine e2ba9a1d70 MDL-33863 question restore: better hint identification.
This is very similar to what MDL-30018 did for question_answers.
2012-11-19 23:29:32 +00:00
Tim Hunt f88bd546eb MDL-36683 qtype match restore: better subq indentification.
This is very similar to what MDL-30018 did for question_answers.
2012-11-19 23:06:16 +00:00
Tim Hunt 4c1a35e34c MDL-36571 qtype multichoice: don't corrupt unicode characters.
It seems that \s includes non-breaking space, and the typical one-byte
representation of that is the same as some parts of multibyte unicode
characters. Therefore, you need to include the u modifer on the regular
expressions.

Also, remove any number of <br /> at the end of the answer.

Thanks to Joseph Rézeau and Jean-Michel Vedrine for working out what the
problem was, and how to fix it.
2012-11-19 18:20:38 +00:00
Dan Poltawski 358f8debde Merge branch 'MDL-36696-MOODLE_23_STABLE' of git://github.com/mrverrall/moodle into MOODLE_23_STABLE 2012-11-20 00:03:56 +08:00
Paul Verrall 4ca66b68f8 MDL-36696 - filepicker: remove superfluous comma
It causes problems with older versions of IE.
2012-11-19 15:48:23 +00:00
Mark Nelson 302808a37f MDL-36609 javascript: ensure HTML element exists before attempting to perform JS functionality 2012-11-19 15:43:12 +08:00
Dan Poltawski 21c255093d Merge branch 'MDL-36655-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-11-19 15:01:54 +08:00
Dan Poltawski 682661d87a Merge branch 'MDL-34204_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-19 10:33:31 +08:00
Adrian Greeve 92aa8fe491 MDL-36668 - mod/data: Removed duplicate data_content join in simple searches.
Thanks to Patrick Pollet (patrick.pollet@insa-lyon.fr) for his patch
2012-11-19 10:13:04 +08:00
Sam Hemelryk 99072482f6 Merge branch 'MDL-36589_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-11-19 14:55:22 +13:00
Jean-Michel Vedrine 58310f8845 MDL-32865 CLOZE Questions imported from another course end up with broken image links 2012-11-17 16:45:40 +01:00
Andreas Grabs 8199b8748e MDL-35158 - Random Glossary block returns an error when you delete the linked glossary 2012-11-17 12:03:58 +01:00
Petr Škoda 2ded89d564 MDL-36547 fix section handling in precreate_course_module() 2012-11-17 09:06:12 +01:00
Petr Škoda 996db2f7ac MDL-36547 add test for section number when generating modules 2012-11-17 09:06:11 +01:00
Andrew Robert Nicols a0dd5e65b9 MDL-36640 Logging: Correct testing of log->info.
log->info sometimes contains additional information which can be looked up
from other tables. This should only be attempted if the field is numeric,
but the CSV, XLS, and ODS outputs were not making this check.

There is an additional case for the print_mnet_log function which has not
been covered - this is because the mnet logging is currently broken beyond
the scope of this bug rendering this section untestable. These issues are
raised in MDL-36642.
2012-11-16 11:18:05 +00:00
Dan Poltawski 6548ce0915 weekly release 2.3.3+ 2012-11-16 15:36:21 +08:00
Dan Poltawski 099c7f61da Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-11-16 15:32:33 +08:00
Frederic Massart 0b674ddb42 MDL-26660 libraries: Improved XML validation before parsing 2012-11-16 12:14:04 +08:00
Damyon Wiese 62d70e07bc MDL-36655: Assignment - do not add empty group to grading form when there is only one student 2012-11-16 11:00:05 +08:00
AMOS bot 01944afa45 Automatically generated installer lang files 2012-11-15 21:29:40 +00:00
Tim Hunt 877b243fed MDL-36646 unit tests should not assume number of contexts. 2012-11-15 14:36:32 +00:00
Tim Hunt 1b36a754d0 MDL-34204 grader report: static call to non-static method. 2012-11-15 13:47:36 +00:00
Mary Evans a94316030f MDL-36608 theme_sky_high: Fixes missing background in sdmin pages by removing incorrect CSS in style/admin.css 2012-11-15 11:22:31 +00:00
Dan Poltawski 153f5eb3c7 MDL-36061 - remove master-only unit tests 2012-11-15 15:19:28 +08:00
Dan Poltawski 43c6aa915e Merge branch 'MDL-36331_redirect_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-11-15 14:40:56 +08:00
Dan Poltawski f73a131980 Merge branch 'MDL-36061_userid_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-11-15 14:32:59 +08:00
Andrew Davis 168a941104 MDL-36061 core_grade: added some unit tests related to refresh_grades() 2012-11-15 11:19:34 +08:00
Matt Switlik 76ab64b07e MDL-36061 gradebook: grade_item->refresh_grades doesn't propagate $userid 2012-11-15 11:19:20 +08:00
Andrew Davis 11694f391e MDL-36331 core_grade: fixed up 2 incorrect default return URLs 2012-11-15 10:48:50 +08:00
Dan Poltawski 05c7471b5c Merge branch 'wip-MDL-36576-m23' of git://github.com/amygroshek/moodle into MOODLE_23_STABLE 2012-11-15 08:57:02 +08:00
Adrian Greeve f6cdef58cb MDL-36453 - mod_data: Presets now load in a Windows environment.
Thanks to Michael de Raadt for this patch.
2012-11-15 08:56:15 +08:00
Mark Nielsen c85164da32 MDL-36607: Improve block drag and drop
* Adding support for subpage
* Adding support for regions that do not start with "side-"
2012-11-14 15:35:14 -08:00
Paul Nicholls bdc69570f5 MDL-36204: moodle1 backup converter: add unit test to cover this issue 2012-11-15 11:16:31 +13:00
Paul Nicholls 0dfc910131 MDL-36204: moodle1 backup converter: urldecode filenames from links
If filenames are not run through urldecode(), those that contain spaces (or other url-encoded characters) will not be handled, as they can't be found in the backup file.
2012-11-15 11:09:58 +13:00
Amy Groshek 02e5529bd5 MDL-36576 - change generalbox classname to generaltable to fix rounded corners on the table background color 2012-11-14 12:32:30 -06:00
Mark Nielsen c9af37c4ab MDL-36336: Prevent duplicate grade items on restore
During restore, lti_add_instance() was being called
and this could generate a grade item.  This would
produce a duplicate item because the restore
process would automatically generate the grade item.
2012-11-14 09:38:42 -08:00
Mark Nelson 73d13b1e43 MDL-30377 forum: do not allow users to view not yet started or expired discussions 2012-11-14 21:01:19 +08:00
Rossiani Wijaya effbfda526 MDL-36589 Lesson Module: set correct answer_jump to next page in question import. 2012-11-14 16:18:00 +08:00
Dan Poltawski f5c074b60a Merge branch 'w46_MDL-36283_m23_cohortmembers' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-11-14 11:26:05 +08:00
Dan Poltawski 89a55cd9e0 Merge branch 'MDL-35358_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-11-14 11:17:00 +08:00
Dan Poltawski 83ee1d4a43 Merge branch 'MDL-26660-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-11-14 10:33:54 +08:00
Dan Poltawski 40a639fa62 Merge branch 'MDL-34520-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-11-14 09:56:03 +08:00
Amy Groshek e0fa7911e2 MDL-36540 - Survey language pack typo 2012-11-14 09:45:51 +08:00
Aparup Banerjee b459897d8f MDL-24736 anotating tinymce changes to readme 2012-11-14 09:41:34 +08:00
Dan Poltawski b1a7fcf2b3 Merge branch 'wip-MDL-36413-MOODLE_23_STABLE' of https://github.com/nicolasconnault/moodle into MOODLE_23_STABLE 2012-11-14 09:18:33 +08:00
Aparup Banerjee 4093331bad Merge branch 'wip_23_mdl-25736_tinymce_spellchecker_frech_issues' of https://github.com/iarenaza/moodle into MOODLE_23_STABLE 2012-11-14 09:13:30 +08:00
Michael Aherne b622d36f13 MDL-34762 course Hide system archetypes from mod chooser 2012-11-14 09:06:33 +08:00
Paul Nicholls 04fa1da315 MDL-36548: Major performance boost to Detail (list) view in file picker
Pass the data (filelist) into the DataTable when initialising it, rather than rendering an empty DataTable and then pushing all of the data into it via addRows().

It's also slightly more efficient to just pass the node in, rather than fetching the node and passing its ID in, as DataTable.render() will just re-select the node if given the ID. [Spotted by Andrew Nicols]
2012-11-14 12:40:08 +13:00
Dan Poltawski 5ac25e0ccb MDL-30545 messaging - remove DISTINCT from union statement 2012-11-13 22:35:35 +08:00
Dan Poltawski 675ea3231c MDL-30545 - messagelib: use $DB->sql_concat() 2012-11-13 15:09:14 +08:00
Dan Poltawski 1f5205b344 MDL-30545 tests - use mod_assignment data generator
mod_assign doens't exist yet..!
2012-11-13 14:13:37 +08:00
Petr Škoda 95f6a022ca MDL-30545/ MDL-36199 reset plugin manager singletons 2012-11-13 14:08:28 +08:00
Dan Poltawski af698e64d2 Merge branch 'w46_MDL-36169_m23_enrolsort' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-11-13 13:40:28 +08:00
Dan Poltawski 3517201801 Merge branch 'MDL-30545_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-13 13:22:47 +08:00
Damyon Wiese dc99b426e9 MDL-36509: Assignment grading table rownum offset is wrong by one. 2012-11-13 09:59:11 +08:00
David Mudrák 03d9c19db9 MDL-35422 Fix the confusing submit button label 2012-11-12 10:36:41 +08:00
AMOS bot 073ba0c872 Automatically generated installer lang files 2012-11-12 00:35:49 +00:00
Petr Škoda de06ba901f MDL-36283 use accesscontext when assigning cohort members 2012-11-10 20:44:38 +01:00
Iñaki Arenaza 6cd89c8fd2 MDL-25736 TinyMce Spellchecker French issues
GoogleSpell checker already returns data un UTF8, so there's no need
to use utf8_encode (in fact, using it completely mangles the string).

All credit goes to David Quintal for finding the issue and proposing
the fix.
2012-11-10 20:02:03 +01:00
AMOS bot 9b213b3b5f Automatically generated installer lang files 2012-11-10 00:36:24 +00:00
Petr Škoda 3952908d5c MDL-36169 fix enrolled users sorting by alphanumerical column
Credit goes to Nicholas Koeppen, thanks!
2012-11-09 19:49:57 +01:00
Eloy Lafuente (stronk7) ff63a3ad58 Moodle release 2.3.3 2012-11-09 19:35:55 +01:00
Dan Poltawski ce44bf4441 weekly release 2.3.2+ 2012-11-09 17:58:34 +08:00
Dan Poltawski 53118fe1ea Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-11-09 17:53:20 +08:00
Aparup Banerjee 60c7fc96b2 Merge branch 'WIP-MDL-35512-M23' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-11-09 14:15:07 +08:00
Aparup Banerjee 3d9514b363 Merge branch 'MDL-35510_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-11-09 14:11:42 +08:00
Aparup Banerjee 79d86ffcdb Merge branch 'MDL-35571_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-11-09 10:27:32 +08:00
AMOS bot c4d19c8789 Automatically generated installer lang files 2012-11-09 00:38:56 +00:00
Dan Poltawski b99ee21bfc Merge branch 'MDL-35349_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-08 18:55:10 +08:00
Dan Poltawski bc7fdb4279 Merge branch 'w45_MDL-36196_m23_vercheck' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-11-08 15:13:18 +08:00
Dan Poltawski 282183647b Merge branch 'MDL-36051_23' of git://github.com/rlorenzo/moodle into MOODLE_23_STABLE 2012-11-08 15:10:06 +08:00
Aparup Banerjee edd4257a1a Merge branch 'MDL-27824_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-11-08 13:32:27 +08:00
Rossiani Wijaya a46405df3a MDL-27824 course categories: remove trailing whitespace 2012-11-08 12:32:01 +08:00
Rossiani Wijaya 9bc298d287 MDL-27824 course categories: change isset() to empty() 2012-11-08 12:31:03 +08:00
Rossiani Wijaya 74b266a332 MDL-27824 course categories: Added @todo comments to remove the temporary fix 2012-11-08 12:31:03 +08:00
Rossiani Wijaya eabdc81c40 MDL-27824 - course category: add check test for ->coursesperpage value. 2012-11-08 12:31:03 +08:00
Dan Poltawski 6211ff4c12 Merge branch 'MDL-36422-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-11-08 11:08:06 +08:00
Frederic Massart 8a73556f8d MDL-36422 question: Fixed malformed HTML in manual marking 2012-11-08 10:26:44 +08:00
Rex Lorenzo 3bcff38015 MDL-36051 - Quick Grading in Assignment module does not turn on in some circumstances
* Fixed bug with quick grading when file submission is turned off
2012-11-07 16:28:02 -08:00
Itamar Tzadok 322965e245 MDL-36433 Forms lib - Added dash escaping to validation script getter. 2012-11-07 19:15:25 -05:00
Mark Nelson d8e550e4ac MDL-33791 Portfolio: Fixed security issue with passing file paths. 2012-11-08 00:26:40 +01:00
Mary Evans 845cfc3389 MDL-36197 theme_fusion: Fix for "Your progress" overlaps completion tracking checkbox 2012-11-08 11:33:49 +13:00
Sam Hemelryk 62d543748d Merge branch 'MDL-36271_m23' of https://github.com/markn86/moodle into MOODLE_23_STABLE 2012-11-08 11:06:58 +13:00
Nadav Kavalerchik a5b62b8f31 MDL-35249 - Move Grading popmenu "userid" column after "scale" column (workaround)
Conflicts:

	mod/assign/gradingtable.php
2012-11-08 11:00:49 +13:00
Adrian Greeve 9b025da732 MDL-35558 mod_data: Show only own entries while there are required pending. 2012-11-07 19:50:15 +01:00
Petr Škoda da427d1e51 MDL-36196 hardcode the required PHP version in installer 2012-11-07 13:04:51 +01:00
Eloy Lafuente (stronk7) f87d5a71ef NOBUG: Trivial whitespace fix to quickly fix ongoing CI status. 2012-11-07 11:51:24 +01:00
Dan Poltawski 48fb811b4c Merge branch 'MDL-36092-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-11-07 16:56:19 +08:00
Nicolas Connault 3522c1dca4 MDL-36413 Added "this->" to exclude variable assignment
The this-> keyword was missing from the $exclude = array() statement.
2012-11-07 14:52:09 +08:00
Dan Poltawski e4224a5ae1 Merge branch 'MDL-36346_23' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-11-07 09:27:53 +08:00
Paul Nicholls c4851e8085 MDL-36346 - YUI2 SWF vulnerability, part 2 2012-11-07 14:09:20 +13:00
AMOS bot 04678efd11 Automatically generated installer lang files 2012-11-07 00:36:31 +00:00
Andrew Davis 84fad57f1c MDL-35762 core_grade: altered the code that determines whether an activity is visible on the user report 2012-11-06 16:42:00 +01:00
Andrew Robert Nicols 3a8714c3c6 MDL-36023 AJAX Fix reference to chooserdiaogue jumplink 2012-11-06 10:16:28 +00:00
Dan Poltawski cb2829dea3 Merge branch 'MDL-36346_23' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-11-06 16:20:14 +08:00
David Mudrák 77283f1812 MDL-36266 Improve update notification message subject 2012-11-06 11:59:48 +08:00
Paul Nicholls c43e6006e7 MDL-36346 - YUI2 SWF vulnerability 2012-11-06 14:55:48 +13:00
Dan Poltawski 2dab9d1943 Merge branch 'wip-MDL-36379-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-11-06 09:50:23 +08:00
Dan Poltawski 485ddbd611 Merge branch 'MDL-36347_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-11-06 09:42:11 +08:00
Dan Poltawski aafded3f42 Merge branch 'MDL-36023-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-11-06 09:36:08 +08:00
Sam Hemelryk e3ac126161 MDL-36379 user_view: fixed issue with page layout when editing was on 2012-11-06 14:01:30 +13:00
Petr Škoda 89fbf2e874 MDL-35381 limit teachers to do permissions checks of enrolled users only 2012-11-06 00:49:25 +01:00
Sam Hemelryk b733b0ac71 Merge branch 'MDL-31629-MOODLE_23_STABLE' of git://github.com/micaherne/moodle into MOODLE_23_STABLE 2012-11-06 10:08:31 +13:00
Frederic Massart 9e5fea4d2d MDL-35675 forms: Remove constrain to viewport for popup calendar 2012-11-05 16:43:22 +08:00
Didier Raboud 0e892b8b65 MDL-35675 forms: Popup calendar is not constrained any more 2012-11-05 16:43:22 +08:00
Dan Poltawski a7e956b403 MDL-34527 - fix trailing whitespace 2012-11-05 13:27:35 +08:00
Dan Poltawski 44999a9ed2 Merge branch 'wip-MDL-34527-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-11-05 13:25:18 +08:00
Dan Poltawski f7c197eddb Merge branch 'WIP-MDL-36069-M23' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-11-05 11:31:55 +08:00
Sam Hemelryk f9e009a744 MDL-21625 question: Fixed phpdocs 2012-11-05 16:29:38 +13:00
Sam Hemelryk 18f6238b88 Merge branch 'MDL-21625_b_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-11-05 16:27:30 +13:00
Dan Poltawski 906ad7d27a Merge branch 'MDL-33621_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-11-05 11:12:41 +08:00
Dan Poltawski df79fff95b Merge branch 'wip-mdl-35787-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-11-05 10:58:59 +08:00
Sam Hemelryk a82535f068 Merge branch 'MDL-36107b-23' of git://github.com/srynot4sale/moodle into MOODLE_23_STABLE 2012-11-05 15:07:00 +13:00
Tim Hunt 917cea604c MDL-36347 quiz: formchangechecker should not obstruct auto-submit.
When the quiz time limit runs out, the quiz should be submitted
automatically, withouth formchangechecker popping up a dialogue.
2012-11-03 22:34:53 +11:00
Matt Petro 2cae75aacc MDL-36025 qtype calculated: Fix handling of "-0" 2012-11-02 12:11:01 -04:00
Mark Nelson 4aaac325f2 MDL-35349 paypal: Fixing return page so that it now declares page context 2012-11-02 15:33:59 +08:00
Dan Poltawski 0d79d96566 Merge branch 'w42_MDL-35469_m23_geckover' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-11-02 12:07:16 +08:00
Sam Hemelryk 561bd396c1 MDL-34527 forum: Fixed up a couple of SQL queries causing issues in Oracle. 2012-11-02 10:49:43 +13:00
Nadav Kavalerchik c4b521116f MDL-36069 - Right align TEXTAREA "Format selector" listbox, when in RTL mode (theme/standard) 2012-11-01 20:18:04 +02:00
Nadav Kavalerchik 152dbe5d52 MDL-35512 - Two left pointing arrows appear after clicking "left indent activity/resource" arrow, when in RTL mode 2012-11-01 20:12:37 +02:00
Huy Hoang 71ff0a2f85 MDL-34695 Wiki Module: add prevention to create new record when userid is 0 2012-11-01 17:42:45 +08:00
Ankit Agarwal 95b877b9b1 MDL-34520 gradebook: Missing droplow setting in gradebook backup 2012-11-01 15:53:23 +08:00
Andrew Robert Nicols 37ceb6cbed MDL-36092 Course/AJAX Ensure that dropdown resource pickers are shown when JS is disabled 2012-11-01 07:51:33 +00:00
Mark Nelson 1139dff6ef MDL-36271 feedback: Fixed variable typo 2012-11-01 15:47:26 +08:00
Dan Poltawski d402e05ba7 weekly release 2.3.2+ 2012-11-01 14:16:33 +08:00
Dan Poltawski 87ea3f04df Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-11-01 14:13:50 +08:00
Rajesh Taneja 05d1f6cb9d MDL-36238 Blocks: Logs page close session write, so editing is set before 2012-11-01 12:17:33 +08:00
Jonathon Fowler ec07ff69f2 MDL-34695 wiki: ensure the correct individual subwiki is used/created for a user 2012-11-01 11:49:17 +08:00
Dan Poltawski 35ce18a8b1 Merge branch 'MDL-36315_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-11-01 10:03:19 +08:00
Andrew Davis b4a8ab2daa MDL-36162 core_message: removed the unnecessary and confusing course URL parameter as well as fixing the broken breadcrumb 2012-11-01 09:44:51 +08:00
Eloy Lafuente (stronk7) 391f8b395a MDL-36315 backup: reduce the DST tests failing-window
This reduces the period of time that some of the unit tests
for calculate_next_automated_backup() are failing right now
(from 1week to just some hours around the DST changes).

Note it's not the final solution because they will still fail
when New_York or Brussels DST changes are about to happen, but
to get this completely fixed we'll need to wait to switch from
current custom TZ/DST support to PHP built-in one.
2012-11-01 02:42:08 +01:00
Andrew Davis b32086390f MDL-26439 core_message: switched the message search over to displaying smallmessage instead of fullmessage which contains boilerplate we dont want 2012-11-01 08:47:50 +08:00
AMOS bot f1c3b5b3b3 Automatically generated installer lang files 2012-11-01 00:36:39 +00:00
Eloy Lafuente (stronk7) b5b882df60 MDL-36304 - Left align "marked out of" in RTL Q preview
Credit goes to Nadav Kavalerchik for fixing it @ MDL-36033
2012-10-31 19:33:39 +01:00
Andrew Robert Nicols 1438358686 MDL-36022 AJAX Remove shim on chooser dialogues 2012-10-31 16:39:36 +00:00
Adam Olley 93efeb5352 MDL-36130: mod_assign: migrate logs when migrating from mod_assignment 2012-10-31 14:52:47 +08:00
Dan Poltawski 881d1d8aed Merge branch 'MDL-28235-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-31 13:42:23 +08:00
Frederic Massart 9740e053f2 MDL-28235 form: Removed reference to unexisting close button in help popup 2012-10-31 13:00:12 +08:00
Frederic Massart b27daf9e73 MDL-28235 form: Removed close icon of help icon popups 2012-10-31 13:00:08 +08:00
Frederic Massart d0d6d5fc72 MDL-28235 form: Help button popup close accessibility improved
AMOS BEGIN
 CPY [close,editor],[close,form]
AMOS END
2012-10-31 13:00:08 +08:00
Dan Poltawski 5aa4e27404 Merge branch 'wip-mdl-29762-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-31 10:50:53 +08:00
Damyon Wiese 5f845b3e66 MDL-36289: Assignment - Prevent feedback files being copied to the next user when using "Save and next".
Conflicts:

	mod/assign/feedback/file/locallib.php
2012-10-31 10:37:42 +08:00
Aparup Banerjee 046c9872a6 Merge branch 'MDL-31708-moodle23' of git://github.com/StudiUM/moodle into MOODLE_23_STABLE 2012-10-31 10:05:26 +08:00
AMOS bot edf170c341 Automatically generated installer lang files 2012-10-31 00:36:35 +00:00
Sam Hemelryk ee8c1abcea Merge branch 'MDL-31934_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-10-31 10:15:29 +13:00
Mary Evans 3fd76b3de5 MDL-31934 mod/forum: Added CSS fix to mod/forum/styles.css for unread forumposts also reversed a previous commit in theme/base/core.css. 2012-10-30 11:43:09 +00:00
Dan Poltawski 6f7eeb3775 Merge branch 'wip-MDL-32326-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-10-30 13:40:33 +08:00
Sam Hemelryk 3b6796e0f4 Merge branch 'MDL-28235-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-30 17:36:45 +13:00
Dan Poltawski 59d01f93cd Merge branch 'wip-mdl-35489-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-30 12:11:52 +08:00
Michael de Raadt 254fef3a9c MDL-35358 Lesson Module: fixed teacher grade essays display when lesson is only available for group members only 2012-10-30 11:05:50 +08:00
Frederic Massart 440dec9c27 MDL-30871 enrol: Flat file does not fail when notifications are enabled 2012-10-30 11:03:44 +08:00
Sam Hemelryk aa7d8ef61f Merge branch 'MDL-35889-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-10-30 15:48:49 +13:00
Dan Poltawski c64d22325e Merge branch 'MDL-36015_23' of git://git.catalyst.net.nz/moodle-r2 into MOODLE_23_STABLE 2012-10-30 10:19:26 +08:00
Dan Poltawski 33abc6e173 Merge branch 'wip-mdl-35910-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-30 10:00:21 +08:00
Frederic Massart 1dfcc6eade MDL-26660 libraries: Do not try to parse non-valid XML 2012-10-30 09:23:40 +08:00
Andrew Davis b7b04c2dfe MDL-29733 grade: SQL and comment cleanup 2012-10-30 09:02:41 +08:00
Jonathan Champ c2539fc41d MDL-29733 grade: Query for Identifying Grade Grades to Precreate is SLOW 2012-10-30 09:02:06 +08:00
Andrew Robert Nicols 272dfda3cf MDL-35959 Correct footer for M.core.dialogue 2012-10-30 13:33:42 +13:00
Sam Hemelryk e61d57b5c1 Merge branch 'WIP-MDL-36070-M23' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE
Conflicts:
	mod/quiz/styles.css
2012-10-30 13:02:07 +13:00
Sam Hemelryk 1d6d520a5a Merge branch 'MDL-36076_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-30 12:59:12 +13:00
Michael Aherne 41db2a5afc MDL-36101 auth_shibboleth Show appropriate error message for suspended accounts 2012-10-30 12:55:26 +13:00
Sam Hemelryk 3b5513528e Merge branch 'MDL-36103_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-30 12:51:44 +13:00
Charles Fulton 33407de5b6 MDL-36105 grades: use consistent icon classs 2012-10-30 12:34:54 +13:00
Sam Hemelryk efd2f83e4a Merge branch 'wip-mdl-36131-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-30 12:24:19 +13:00
Sam Hemelryk b9697365a1 Merge branch 'MDL-36137_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-10-30 12:16:50 +13:00
Rossiani Wijaya 69a6b638a7 MDL-35530 Lesson Module: Add question text to facilitate grading 2012-10-29 17:03:15 +08:00
Dan Poltawski 6b0ada1e6e Merge branch 'm23_MDL-35215' of git://github.com/totara/moodle into MOODLE_23_STABLE 2012-10-29 15:33:53 +08:00
Dan Poltawski c2ef0e4982 Merge branch 'MDL-34363_m23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-10-29 15:21:48 +08:00
Dan Poltawski 35776aab75 Merge branch 'WIP-MDL-36033-M23' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-10-29 14:59:57 +08:00
Dan Poltawski 9416bcf43d Merge branch 'wip-MDL-36075_MOODLE_23_STABLE' of git://github.com/jason-platts/moodle into MOODLE_23_STABLE 2012-10-29 14:57:24 +08:00
Dan Poltawski 80311cabde Merge branch 'MDL-35880-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-10-29 14:35:28 +08:00
Dan Poltawski 418a22905c Merge branch 'MDL-34837-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-29 13:55:14 +08:00
Dan Poltawski ff203527e7 Merge branch 'MDL-35297_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-10-29 09:54:12 +08:00
AMOS bot c777ad2785 Automatically generated installer lang files 2012-10-28 00:34:02 +00:00
AMOS bot 502821bbcc Automatically generated installer lang files 2012-10-27 00:34:37 +00:00
Dan Marsden 64100280a0 MDL-35737 SCORM: when scorm_parse is called and external scorm manifest use always update the package. 2012-10-26 15:36:03 +13:00
Andrew Robert Nicols 238d0ca1cd MDL-35836 Rewrite doctonewwindow handling to use delegation instead of individual events 2012-10-26 09:10:45 +08:00
Andrew Robert Nicols 8516492cc4 MDL-36023 AJAX Move the instantiation of the dialogue to display time 2012-10-26 09:09:13 +08:00
Andrew Robert Nicols 1754dc2cb6 MDL-35836 Rewrite doctonewwindow handling to use delegation instead of individual events 2012-10-26 09:08:54 +08:00
Dan Marsden b7ed59c326 MDL-36168 SCORM: fix reset of course completion settings. 2012-10-25 17:15:38 +13:00
Andrew Davis (andyjdavis) 06661a5541 MDL-30545 messaging prefs: add Andy's extra unit tests. 2012-10-25 10:46:30 +08:00
Tim Hunt 20d10190d7 MDL-30545 messaging prefs: show all relevant message providers.
Some message providers have an associated capability. For example
the mod/quiz:emailconfirmsubmission capability. At the moment,
we only show the preferences for the capabilities that the user
has in the system context.

That does not work for the example capability above. Typically
the capability will be overridden in one quiz, to allow for
Students, and the user will have the Student role in the course
context. Therefore, this message type does not appear on the
preferences page.

This fix corrects the logic, so that all message types that are
to the current user are displayed.
2012-10-25 10:46:17 +08:00
AMOS bot 9b5de362cf Automatically generated installer lang files 2012-10-25 00:34:52 +00:00
Jason Platts b44d2b689a MDL-34530 Calendar: Can create an event for any group, but cannot view
it
2012-10-23 09:50:23 +01:00
Eloy Lafuente (stronk7) 8be3d5ab03 MDL-35297 book: replay some steps lost when book landed to core
This commit replays, conditionally, all the upgrade steps from
MOODLE_19_STABLE to MOODLE_23_STABLE in the mod_book activity. That
guarentees that any site using the mod_book before landing to core,
no matter if it was the latest or an outdated one will upgrade
perfectly to the expected current version.

As a general rule, everytime one contrib plugin lands to core, its
complete upgrade code must be kept, at least until the core version
that introduced it, is out completely from the upgrade requirement
conditions.

In this case, with the missing upgrade code being added to 2.4, it
will be safe to delete the upgrade steps once 2.5 (or upwards) become
a requirement. Never always.

Conflicts:
	mod/book/version.php
2012-10-21 17:58:10 +08:00
Mary Evans db16ec2753 MDL-31934 theme_base: Adds highlight color to unread forum posts. 2012-10-21 01:39:30 +01:00
AMOS bot 691b9c81cb Automatically generated installer lang files 2012-10-20 00:34:52 +00:00
AMOS bot 8434e7de85 Merge branch 'MOODLE_23_STABLE' into install_23_STABLE 2012-10-20 00:34:51 +00:00
Mary Evans cd2ae155de MDL-36137 theme_magazine: changed forum and description info from center to left aligned. 2012-10-19 23:49:16 +01:00
Mary Evans d5fd21b6ef MDL-35571 theme_magazine: RTL fixes - WIKI title headings, ajax frontpage category/course chooser, right align logo, left align course name, left align login & user info. 2012-10-19 22:29:47 +01:00
Eloy Lafuente (stronk7) 98197952cc weekly release 2.3.2+ (fix!) 2012-10-19 19:56:32 +08:00
Rajesh Taneja 8648334966 MDL-36131 AJAX: Conditional activities will behave same as in non-ajax mode 2012-10-19 17:15:43 +08:00
Tim Hunt 2878842742 MDL-36103 tablelib: links to user profiles are wrong in courses. 2012-10-19 16:50:58 +08:00
Nadav Kavalerchik 00c7657edf MDL-36033 - Left align Numeric value fields in Calculated and Numeric question, when in RTL mode 2012-10-19 10:24:46 +02:00
Nadav Kavalerchik 44da3c50fe MDL-36070 - Points label hides UP and Down ordering arrows and Delete Icon on Quiz edit page, in RTL mode (theme/standard) 2012-10-19 10:20:54 +02:00
Rajesh Taneja ea67a0679d MDL-35910 Assignment 2.2: Fixed included files in assignment zip.
If Marking button is enabled, assignment is open and is not finalized, then don't add file to zip
2012-10-19 16:09:52 +08:00
Rossiani Wijaya 75441ef5b2 MDL-21625 Question bank: fixing whitespace 2012-10-19 15:46:09 +08:00
Aaron Barnes 3a15a7519c MDL-36107 scorm: Fix non-static method call 2012-10-19 18:55:39 +13:00
Rossiani Wijaya d2d17341e8 MDL-21625 Question bank: Add accessibility to table layout for viewing question list 2012-10-19 13:32:11 +08:00
AMOS bot 09725180cf Automatically generated installer lang files 2012-10-19 00:35:15 +00:00
Mary Evans c8ee9dde60 MDL-35510 theme_mymobile: RTL fixes for course and category names in style/jmobile11_rtl.css 2012-10-18 15:49:41 +01:00
Gilles-Philippe Leblanc e2694e9dd6 MDL-31708 wiki: Wiki 2.0 non-group member can see edit option in navigation block 2012-10-18 08:51:51 -04:00
Aparup Banerjee b1c5155cbc weekly release 2.3.3+ 2012-10-18 19:43:28 +08:00
Aparup Banerjee 1025a9123f Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-10-18 19:21:29 +08:00
Rajesh Taneja 4e15f69cb1 MDL-35489 users: Check added before using form data 2012-10-18 17:23:41 +08:00
David Tang c034e59bee MDL-31629 auth_shibboleth Use correct language string location 2012-10-18 08:53:11 +01:00
AMOS bot dd5e3ac222 Automatically generated installer lang files 2012-10-18 00:34:55 +00:00
Tim Hunt db05d59534 MDL-36076 qtype multichoice: validation fails on '0' answer. 2012-10-17 13:55:52 +08:00
Aparup Banerjee dde33d64a2 Merge branch 'MDL-28965-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-10-17 10:40:03 +08:00
AMOS bot 6ab522802f Automatically generated installer lang files 2012-10-17 00:34:38 +00:00
Jason Platts 9081825ea3 MDL-36075 Forms: Date selector in forms errors in IE7 2012-10-16 12:09:51 +01:00
Sam Hemelryk 777354509d Merge branch 'MDL-35412-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-16 17:41:31 +08:00
Frederic Massart 456352585a MDL-35412 phpunit: date_format_string() is case insensitive 2012-10-16 17:21:37 +08:00
Frederic Massart 335636f55d MDL-35412 core: Moving get_string out of if statement 2012-10-16 17:21:36 +08:00
Frederic Massart 98268916ff MDL-35171 Forms: Date selector always gets UTF-8 strings 2012-10-16 17:21:36 +08:00
Dan Poltawski ac2b4fb66a Merge branch 'wip-mdl-30691-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-16 16:27:51 +08:00
Dan Poltawski e191c71d55 MDL-34228 - version.php - bump for new capability 2012-10-16 16:20:12 +08:00
Dan Poltawski 9d53135aaf Merge branch 'MDL-34228-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_STABLE 2012-10-16 16:19:33 +08:00
Dan Poltawski 48a8f1c7a0 Merge branch 'wip-mdl-27309-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-16 14:59:15 +08:00
Dan Poltawski 760cab0695 Merge branch 'wip-mdl-32218-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-16 14:35:37 +08:00
Ankit Agarwal 16ab3642e7 MDL-35880 user: Adding a heading to profile edit page 2012-10-16 14:18:44 +08:00
Sam Hemelryk 1ffbad6404 MDL-33857 fixed up whitespace 2012-10-16 13:32:46 +08:00
Sam Hemelryk 4740c0a64f Merge branch 'wip-MDL-33857-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-10-16 13:31:31 +08:00
Rajesh Taneja 672bea4cfe MDL-29762 Blocks: Modified checks to show image in html block 2012-10-16 11:38:54 +08:00
Sam Hemelryk c35fa27c89 Merge branch 'MDL-35198-MOODLE_23_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-10-16 11:23:02 +08:00
Dan Poltawski d50d615d7f Merge branch 'MDL-33815_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-10-16 11:09:06 +08:00
Adrian Greeve 0c09da65ce MDL-35265 - blog - Update code for removing orphaned blog association data.
Conflicts:
	version.php
2012-10-16 10:55:49 +08:00
Dan Poltawski 6244126d6d Merge branch 'wip-MDL-32184-s23' of http://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-10-16 10:46:49 +08:00
Sam Hemelryk 52d2556ee5 Merge branch 'MDL-35664-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-16 10:42:42 +08:00
Sam Hemelryk 86606ad75d Merge branch 'MDL-35892-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-16 10:31:51 +08:00
Dan Poltawski 25ba0f4839 MDL-21801 - mod_lesson: version bump
To reflect the new (ppt-less) state
2012-10-16 10:30:31 +08:00
Dan Poltawski a83497790f Merge branch 'MDL-21801_b_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-10-16 10:30:00 +08:00
Sam Hemelryk 5004ad85b7 Merge branch 'MDL-35726-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-10-16 10:16:19 +08:00
Adrian Greeve caa0e70577 MDL-25275 - mod/data - Added a check box to eliminate date searches if desired. 2012-10-16 10:09:24 +08:00
Mark Nielsen 6e763244ed MDL-34837 backup: Restore does not fail when some courses have the same name 2012-10-15 17:19:37 +08:00
Mark Nielsen 46ba9fded8 MDL-33621 rating: fixed view help error for global scale rating 2012-10-15 16:52:17 +08:00
Dan Poltawski 59d9b1b99d Merge branch 'w42_MDL-35854_m23_usergenerator' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-15 16:03:59 +08:00
Dan Poltawski 2558abe170 Merge branch 'w42_MDL-35917_m23_cohortdoc' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-15 15:59:15 +08:00
Aparup Banerjee 60e1dfd078 Merge branch 'MDL-31010-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-10-15 15:53:40 +08:00
Aparup Banerjee 226398e7d0 Merge branch 'MDL-35986' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-10-15 14:16:06 +08:00
Dan Poltawski 0f46bd4550 Merge branch 'wip-MDL-35661-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-10-15 13:31:22 +08:00
Ankit Agarwal 4981d12420 MDL-35889 blocks: Adding a legend to the fieldset 2012-10-15 11:24:13 +08:00
Frederic Massart 4f977aea5e MDL-35892 repository: prepare_listing recursively prepares the data 2012-10-15 09:46:00 +08:00
Frederic Massart 82525f5963 MDL-35664 filepicker: Filepicker knows about the current path and uses it 2012-10-15 09:45:59 +08:00
AMOS bot 887d6e175e Automatically generated installer lang files 2012-10-15 00:34:57 +00:00
Eloy Lafuente (stronk7) 6738413b33 weekly release 2.3.2+ 2012-10-15 00:20:33 +02:00
Eloy Lafuente (stronk7) 92e9c3d09f Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-10-15 00:07:39 +02:00
Eloy Lafuente (stronk7) 8d800a1b8e Revert "MDL-31968 Make NTLM REMOTE_USER format configurable by the admin"
This reverts commit af861e14dc.

Note that MDL-31968 will be in charge of backporting this to stables
if everything goes well under master (once MDL-31968 is tested and closed)
2012-10-14 23:22:08 +02:00
Petr Škoda b66c3031f6 MDL-35917 fix cohort phpdocs
Credit goes to Brian Kremer, thanks!
2012-10-13 17:55:59 +02:00
Petr Škoda a4848f6ef7 MDL-35469 test for the new Gecko user agent handling 2012-10-13 10:00:05 +02:00
Petr Škoda ad7d20c380 MDL-35469 fix Gecko based browser checks
The problem is that latest firefox versions stopped using dates because they lost the meaning over the time.
2012-10-13 10:00:05 +02:00
Petr Škoda 7358b1742f MDL-35854 fix username generator
This eliminates infinite loop and also fixes potentially invalid email derived from usernames created from unicode first/last name.
2012-10-13 09:56:48 +02:00
Mary Evans cc3f17d86d MDL-35986 theme_canvas: add custommenu and block-region to layout files general.php, frontpage.php and report.php to fix regression in theme/serenity since MDL-33110. 2012-10-12 22:57:39 +01:00
Damyon Wiese 0e8aa5027e MDL-35726: Use a different form identifier for each form when using "Save and next"
This prevents a bug where the next student feedback will default to the values that
were on the last submitted form. This is a similar case to having multiple instances
of the same form on the same page - each one needs a unique identifier to distinguish
between them. In this case I include the $rownum which changes as you go to each student
in the list.
2012-10-12 12:07:19 +08:00
Jonathan Harker 84b3cbab33 MDL-36015 lib/bennu: use static functions correctly. 2012-10-12 13:34:19 +13:00
Eloy Lafuente (stronk7) f2c33d0b69 Merge branch 'MDL-35858-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-12 02:18:03 +02:00
Rossiani Wijaya 696527c0fe MDL-21801 Lesson Module: Removing import power point functionality 2012-10-11 16:11:58 +08:00
Rossiani Wijaya 2c484717e1 MDL-33815 Online Users block: Add query condition to filter out deleted users and lastaccess date greater than now 2012-10-11 16:06:00 +08:00
Ankit Agarwal 0cb1a22cba MDL-28965 administration: Updating description string for the setting navshowallcourses 2012-10-11 14:25:45 +08:00
Ankit Agarwal 437637a11d MDL-31010 comments: setup_course should update if passed courseid is different from the cached one 2012-10-11 10:58:26 +08:00
Eloy Lafuente (stronk7) 5ba6db698d Merge branch 'MDL-35715-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-10-11 01:54:17 +02:00
Aparup Banerjee ca93b3af4e Merge branch 'MDL-35231_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-10-10 13:03:23 +08:00
Aparup Banerjee 1778232f45 Merge branch 'w41_MDL-35839_m23_enroldeletecleanup' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-10 10:32:02 +08:00
AMOS bot c5c735f00e Automatically generated installer lang files 2012-10-10 00:34:20 +00:00
Simon Coggins d01c6b269b MDL-35581 lib: Help popups misaligned for right-to-left languages 2012-10-10 08:56:29 +13:00
Eloy Lafuente (stronk7) 86b1d0eb5f MDL-35898 test reset: Tidyup comment 2012-10-09 11:59:46 +02:00
Eloy Lafuente (stronk7) 5553d3d60f Merge branch 'w41_MDL-35898_m23_coursereset' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-09 11:58:35 +02:00
Aparup Banerjee aedc642091 MDL-35587 fixed up whitespaces 2012-10-09 16:36:20 +08:00
Aparup Banerjee e72606c83f Merge branch 'MDL-35587_23' of git://github.com/rlorenzo/moodle into MOODLE_23_STABLE 2012-10-09 16:28:49 +08:00
Frederic Massart ad87b3a2cc MDL-35858 question: Fixed display of feedback in cloze questions 2012-10-09 16:13:33 +08:00
Petr Škoda e22cff45ab MDL-35898 include static course caches in test resets 2012-10-09 10:10:19 +02:00
Rajesh Taneja 18f9ad377f MDL-35787 Mnet: If student role is not defined then throw error 2012-10-09 15:35:04 +08:00
Rajesh Taneja add569ebe0 MDL-35787 Mnet: fixed php strict standards warnings 2012-10-09 15:35:03 +08:00
Aparup Banerjee 50cef6aa36 Merge branch 'wip-MDL-30754-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-10-09 14:32:31 +08:00
Aparup Banerjee 976a9da987 Merge branch 'WIP-MDL-35724-M23_quiz' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-10-09 14:11:32 +08:00
Aparup Banerjee 34983250b1 Merge branch 'MDL-35776_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-09 11:53:43 +08:00
Aparup Banerjee ae48ff8a17 Merge branch 'MDL-35837-M23' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-10-09 10:25:33 +08:00
Rajesh Taneja 8715a53d90 MDL-30691 Adminstration: Added css to break long word in filter table 2012-10-09 10:02:45 +08:00
AMOS bot 5364f9c7cd Automatically generated installer lang files 2012-10-09 00:34:42 +00:00
Eloy Lafuente (stronk7) f5ba035015 Merge branch 'wip-MDL-26348-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-10-09 01:38:22 +02:00
Eloy Lafuente (stronk7) 5cb3d27681 Merge branch 'MDL-35141-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_STABLE 2012-10-09 00:47:11 +02:00
Eloy Lafuente (stronk7) 57ca2e4375 Merge branch 'wip-mdl-35397-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-09 00:40:14 +02:00
Eloy Lafuente (stronk7) 2689298c8f Merge branch 'MDL-35395_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-09 00:26:49 +02:00
Iñaki Arenaza af861e14dc MDL-31968 Make NTLM REMOTE_USER format configurable by the admin
Signed-off-by: Iñaki Arenaza <iarenaza@mondragon.edu>
2012-10-09 00:17:35 +02:00
Eloy Lafuente (stronk7) 859d840627 Merge branch 'MDL-34794_M23' of git://github.com/raymondAntonio/moodle into MOODLE_23_STABLE 2012-10-09 00:08:26 +02:00
Eloy Lafuente (stronk7) 8b1cb823de Merge branch 'wip-mdl-35047-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-10-08 23:57:11 +02:00
Eloy Lafuente (stronk7) 3e0e4917d8 Merge branch 'w41_MDL-35382_m23_reordertest' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-08 23:54:51 +02:00
Eloy Lafuente (stronk7) 7516f96676 Merge branch 'MDL-35519_book_cancel_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-10-08 23:08:02 +02:00
Eloy Lafuente (stronk7) 2ed34366f6 Revert "MDL-34894 course ws unit tests: fix windows problem."
This reverts commit 40d651bbbb.

With MDL-35714, each test gets gc_collect_cycles() called, so
no need to call it "manually".
2012-10-08 22:54:33 +02:00
Eloy Lafuente (stronk7) 85b1e97857 Merge branch 'w41_MDL-35714_m23_testgc' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-08 22:52:12 +02:00
Nadav Kavalerchik aae3d3445e MDL-35724 - Move Question Marks block to the left (Question Bank page),in RTL mode 2012-10-08 11:35:59 +02:00
Nadav Kavalerchik 92bff8685c MDL-35724 - Right align "Question Type" label in Quiz Editing page, when in RTL mode 2012-10-08 11:35:58 +02:00
Aparup Banerjee c116bd70a0 Merge branch '23STABLE-wip-MDL-35694' of git://github.com/jennymgray/moodle into MOODLE_23_STABLE 2012-10-08 17:26:45 +08:00
Aparup Banerjee e4feb70b66 Merge branch 'WIP-MDL-35723-M23_quiz' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-10-08 17:16:12 +08:00
Aparup Banerjee 785bc3bca9 Merge branch 'w41_MDL-35739_m23_cliinstall' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-08 17:06:43 +08:00
Aparup Banerjee e7afca9468 Merge branch 'wip-MDL-34448-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-10-08 15:28:37 +08:00
Adrian Greeve 768a2ceafd MDL-34448 - mod/data - Fixing separate groups viewing all entries. 2012-10-08 14:50:27 +08:00
Marina Glancy 2741c017cb MDL-35661 local plugins do not have general settings URL 2012-10-08 11:34:10 +08:00
Sam Hemelryk cafabb5fd0 Merge branch 'MDL-35634-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-08 11:36:21 +13:00
Davo Smith cd2a0bf715 MDL-35288 drag and drop upload - adjust error message text when attempting to upload a folder 2012-10-08 11:19:48 +13:00
Sam Hemelryk fff33fd66d Merge branch 'MDL-35211_M23' of git://github.com/kordan/moodle into MOODLE_23_STABLE 2012-10-08 11:02:33 +13:00
Sam Hemelryk 30939d2a9a Merge branch 'MDL-35763-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-10-08 10:44:18 +13:00
Sam Hemelryk 8c2eca7d16 Merge branch 'MDL-33646-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-10-08 10:22:06 +13:00
Sam Hemelryk f605b97aa4 Merge branch 'MDL-35667_extra_credit_loop_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-10-08 10:15:37 +13:00
Sam Hemelryk b855945836 Merge branch 'MDL-35730_23' of https://github.com/aolley/moodle into MOODLE_23_STABLE 2012-10-08 10:06:12 +13:00
Sam Hemelryk f062a78344 MDL-32326 dock: Clarified use of CSS rotation 2012-10-08 09:45:27 +13:00
Didier Raboud 67728fe717 MDL-30754: Make sure to always display breadcrumbs when browsing categories. 2012-10-08 09:37:37 +13:00
Sam Hemelryk 77957668cc MDL-26348 tool_customlang: Fixed up SQL causing issues in Oracle 2012-10-08 09:22:24 +13:00
Petr Škoda e9c9610f8b MDL-35739 show langs on separate lines in CLI installer
This fixes column width issues and compatibility with RTL languages.
2012-10-07 21:04:57 +02:00
Petr Škoda 6f0f18a4d4 MDL-35839 fix invalid enrol instance delete cleanup 2012-10-06 19:26:37 +02:00
Nadav Kavalerchik 26d2edcc82 MDL-35245 - Missing scrollbar in Activity Chooser, when in RTL mode 2012-10-06 13:45:33 +02:00
Petr Skoda f31ee1292a MDL-35382 fix random course test failures 2012-10-06 13:28:27 +02:00
Petr Škoda 2104c9fdc3 MDL-35714 run gc before test reset 2012-10-06 10:04:32 +02:00
AMOS bot 7c6d4ed0a7 Automatically generated installer lang files 2012-10-06 00:34:00 +00:00
Mary Evans 33b59af020 MDL-35231 theme_serenity: fixed misalignment and styling of mod/assignment/action/edit by updating custommenu css in theme/serenity/style/core.css 2012-10-06 01:31:19 +01:00
Tim Hunt eccf42746c MDL-35395 formslib: a method to disable formchangechecker for a form. 2012-10-05 17:45:07 +01:00
Eloy Lafuente (stronk7) 562dbe408e weekly release 2.3.2+ 2012-10-05 13:38:50 +02:00
Eloy Lafuente (stronk7) 035997329a Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-10-05 13:33:02 +02:00
Eloy Lafuente (stronk7) 4abc5a1a2c Revert "MDL-34257 quiz 'secure' mode: PAGE initialisation order issues."
This reverts commit d205afe662.
2012-10-05 13:10:06 +02:00
Dan Poltawski db8e84ae1a Revert "MDL-33117 grade: added some smarts to the user report method inject_rowspans() to deal with activity conditional availability"
This reverts commit 60b6b6280b.
2012-10-05 16:20:52 +08:00
Jenny Gray 077fde5dc5 MDL-35694 logs: extend course log report downloads with action url 2012-10-05 09:05:18 +01:00
Jason Fowler 8cfc92afdd MDL-32184 - Course - Fixing incorrect redirect when toggling course edit while inside an activity -- Patch provided by Kanika Goyal 2012-10-05 15:27:51 +08:00
Ankit Agarwal 5747c6bccd MDL-33646 book: Adding a notice instead of error when there is no content in the book 2012-10-05 13:41:44 +08:00
sam marshall 5c3cb55b5d MDL-34228 Completion: Add capability that controls if a user is shown in reports 2012-10-04 10:51:29 +01:00
Rajesh Taneja d1085311c9 MDL-32218 Blocks: allowblockstodock is also checked for region dock status 2012-10-04 17:27:05 +08:00
Dan Poltawski 5e6f2cda64 Merge branch 'MDL-35767-MOODLE_23_STABLE' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-10-04 16:57:57 +08:00
Ruslan Kabalin e6b958d4db MDL-35767 Fix missing target event group check
Prevent interfering between items from different groups (and no groups)
2012-10-04 09:52:38 +01:00
Rajesh Taneja 90c6925bdb MDL-27309 Blocks: command node is taken from dockitem during restore 2012-10-04 15:26:22 +08:00
AMOS bot 0a1c7a188a Automatically generated installer lang files 2012-10-04 00:35:00 +00:00
Tim Hunt 13815377b5 MDL-35776 user ajax: fix sort order in chrome.
It seems that Chrome orders fields of objects in order of array key.
Therefore we must stop using user.id in the PHP arrays, and instead
ensure that we use sequential numbers.

This commit fixes the enrol UI.
2012-10-03 19:14:47 +01:00
Tim Hunt ea29e3141a MDL-35776 user ajax: fix sort order in chrome.
It seems that Chrome orders fields of objects in order of array key.
Therefore we must stop using user.id in the PHP arrays, and instead
ensure that we use sequential numbers.

This commit fixes the user selector.

Conflicts:
	user/selector/module.js
	user/selector/search.php
2012-10-03 19:14:41 +01:00
Frederic Massart 1c409bfe80 MDL-35634 course: Restored alt attribute on module icons 2012-10-03 17:04:16 +08:00
Andrew Davis 113f51d7c9 MDL-35519 mod_book: fixed the cancel import redirect URL 2012-10-03 12:48:36 +08:00
Damyon Wiese 36c7b8665f MDL-35763: Add ignoredirty class to drop down lists in assignment grading options form. 2012-10-03 11:57:25 +08:00
Dan Poltawski aaed6d7800 Merge branch 'MDL-35754-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-03 10:26:22 +08:00
Frederic Massart 1e5b1d6dad MDL-35754 libraries: openpopup() does not fail when window name is not set 2012-10-03 09:58:31 +08:00
Eloy Lafuente (stronk7) a8d7f5cf15 Merge branch 'MDL-35744_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-03 00:40:35 +02:00
Sam Hemelryk c67ed6adfe Merge branch 'MDL-33829_23' of https://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-10-03 10:07:16 +13:00
Sam Hemelryk 9289c14e0c Merge branch 'MDL-35654_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-10-03 09:53:11 +13:00
Nadav Kavalerchik 1c1455f29a MDL-35723 - Align to center the "Quiz Feedback" label,when in RTL mode 2012-10-02 21:49:10 +02:00
Eloy Lafuente (stronk7) 9228a5d347 Merge branch 'm23_MDL-35227' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-10-02 21:40:58 +02:00
Eloy Lafuente (stronk7) fc0f1c3cbc Merge branch 'm23_MDL-35557' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-10-02 20:28:13 +02:00
Tim Hunt db1052ce5c MDL-35744 quiz: fix review options for Never submitted attempts 2012-10-02 15:53:59 +01:00
Eloy Lafuente (stronk7) 0a7db801f3 Merge branch 'm23_MDL-35562' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-10-02 15:59:09 +02:00
Ruslan Kabalin 1a2b345232 MDL-35715 course dragdrop Fix the ability to drag back to the empty section 2012-10-02 14:55:48 +01:00
Frederic Massart 80f497ea40 MDL-28235 form: Removed close icon of help icon popups 2012-10-02 14:36:30 +08:00
Frederic Massart bbb553e077 MDL-28235 form: Help button popup close accessibility improved
AMOS BEGIN
 CPY [close,editor],[close,form]
AMOS END
2012-10-02 14:36:30 +08:00
Rajesh Taneja 08363c5c80 MDL-35047 tool_xmldb: Added missing strings for xmldb 2012-10-02 14:21:01 +08:00
Dan Poltawski 845cc02904 Merge branch 'MDL-34570-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-02 13:57:00 +08:00
Rajesh Taneja 5735b5a2ac MDL-35397 Administration: changed link for 'many other contributors'
Previously 'many other contributors' was pointing to http://docs.moodle.org/dev/Credits
now, it will point to http://moodle.org/dev.
2012-10-02 13:43:47 +08:00
Adam Olley 8c4fcc0e1a enrol_manual: Set context correctly in manual enrolment user selector 2012-10-02 14:59:58 +09:30
Dan Poltawski d9cada0a9d Merge branch 'MDL-35370_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-02 12:09:36 +08:00
Dan Poltawski d0154d2996 Merge branch 'MDL-35693_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-02 11:47:57 +08:00
Dan Poltawski 05ab3435c0 Merge branch 'MDL-35665' of git://github.com/raymondAntonio/moodle into MOODLE_23_STABLE 2012-10-02 11:45:32 +08:00
Dan Poltawski 09e49e5c6e Merge branch 'MDL-35698_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-02 11:40:23 +08:00
Dan Poltawski 8aaf7adccb Merge branch 'WIP-MDL-35708-M23_quiz' of git://github.com/nadavkav/moodle into MOODLE_23_STABLE 2012-10-02 11:36:56 +08:00
Dan Poltawski e1361139d9 Merge branch 'w40_MDL-35619_m23_otheravatars' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-10-02 10:41:58 +08:00
Dan Poltawski 373d3178e4 Merge branch 'MDL-35680_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-02 09:52:35 +08:00
Jody Steele bda487868e MDL-33933 mod_forum: fix incorrect capability check 2012-10-02 09:44:19 +08:00
Dan Poltawski 2cbbf5d829 Merge branch 'MDL-33117_grade_display_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-10-02 09:33:09 +08:00
Eloy Lafuente (stronk7) 54dd6ee750 MDL-35669 gravatar amend and complete gravatar tests. 2012-10-02 01:35:50 +02:00
Eloy Lafuente (stronk7) ba804c9ea9 MDL-35669 gravatar Fix secure image urls. 2012-10-02 01:35:40 +02:00
Sam Hemelryk 577777cf03 Merge branch 'm23_MDL-35472' of git://github.com/totara/moodle into MOODLE_23_STABLE 2012-10-02 11:10:24 +13:00
Sam Hemelryk 500ade05cb Merge branch 'MDL-34257_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-02 10:45:51 +13:00
Michael Aherne 30c9794aec MDL-35669 gravatar Provide default image URL to Gravatar 2012-10-01 23:44:31 +02:00
Sam Hemelryk 4891199f10 Merge branch 'MDL-30885_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-02 10:31:08 +13:00
Sam Hemelryk 50b252cdde Merge branch 'MDL-35547_23' of git://github.com/enovation/moodle into MOODLE_23_STABLE 2012-10-02 10:15:30 +13:00
Eloy Lafuente (stronk7) 50e8e4d00b Merge branch 'MDL-34931-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-10-01 13:37:12 +02:00
Eloy Lafuente (stronk7) aa63be7f5f Merge branch 'MDL-35637_m23' of git://github.com/markn86/moodle into MOODLE_23_STABLE 2012-10-01 13:19:22 +02:00
Eloy Lafuente (stronk7) 4df574f9e5 Merge branch 'wip-MDL-34234-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-10-01 13:10:06 +02:00
Jerome Mouneyrac b843f7aee2 MDL-34971 PHPunit test: user/externallib.php 2012-10-01 12:56:41 +02:00
Eloy Lafuente (stronk7) 198178ff2a Merge branch 'MDL-35644-MOODLE_23_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-10-01 12:46:26 +02:00
Eloy Lafuente (stronk7) 35e19e2acd Merge branch 'MDL-34894_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-10-01 11:08:14 +02:00
Petr Škoda 50675bf549 MDL-35619 fix invalid avatars on other users page 2012-10-01 09:51:12 +02:00
Andrew Davis 7ad8f46848 MDL-35667 core_grade: added a new test for grade_category::apply_limit_rules() 2012-10-01 12:59:49 +08:00
Andrew Davis 410d0dc243 MDL-31782 core_grade: fixed a potential infinite loop 2012-10-01 12:59:27 +08:00
Nadav Kavalerchik af277cc994 MDL-35708 - Right align user's information in quiz attempt review page , when in RTL mode (theme/standard & base) 2012-09-30 23:53:01 +02:00
Sam Hemelryk 194e79536e MDL-34234 course: Fixed notice causing issues in JS when upgrade settings for 2.3+ not run 2012-10-01 09:57:58 +13:00
Tomasz Muras d0bb10027b MDL-35547 Fetch more sub-categories with one SQL query. 2012-09-30 19:29:54 +02:00
Tomasz Muras 2ade1b52f9 MDL-35547 Detect loops in question categories. 2012-09-30 19:29:53 +02:00
Tomasz Muras 24d9d1811f MDL-35547 Detect question category pointing to itself as a parent. 2012-09-30 19:29:52 +02:00
Andrew Davis 88852071b5 MDL-33829 mod_glossary: added some smarts so glossary entries with an image in their description are classed as richhtml instead of plainhtml 2012-09-30 11:11:29 +08:00
Jason Fowler d695785710 MDL-33829 - Glossary - Adding Rich Portfolio Export support 2012-09-30 11:11:29 +08:00
Tim Hunt 2d04a1fe31 MDL-35698 quiz cron: group overrides not computed correctly
Thanks to Matt Petro for finding the bug in this monster SQL statement.
2012-09-29 09:37:20 +01:00
AMOS bot 6b7cd710cd Automatically generated installer lang files 2012-09-29 00:34:18 +00:00
Tim Hunt 0222cd9545 MDL-35693 question engine: set id when saving a new question_attempt 2012-09-28 15:29:57 +01:00
Raymond Wijaya 10839ace75 MDL-34794_M23: Add reset course feature in mod_assign (new assignment) 2012-09-28 16:25:55 +08:00
Raymond Wijaya b865c07b69 MDL-35665: Cherry-pick MDL-35389 : Fix an error when changing locked state of a assignment is changed 2012-09-28 12:30:30 +08:00
Andrew Davis 60b6b6280b MDL-33117 grade: added some smarts to the user report method inject_rowspans() to deal with activity conditional availability 2012-09-28 12:14:45 +08:00
Frederic Massart d3187c299a MDL-34570 Accessibility: Adding labels on text inputs and selects to questions 2012-09-28 11:39:32 +08:00
Rossiani Wijaya daa3c5ff1b MDL-34570 accessibility compliance for question: edit string label 2012-09-28 11:39:32 +08:00
Frederic Massart 7765e94f5e MDL-34931 core_grade: Fixed grades hidden when activity is hidden 2012-09-28 11:39:20 +08:00
Mary Evans 14a695f607 MDL-35654 theme_anomaly: Added custom menu renderer to aid RTL styling of menu 2012-09-28 02:57:54 +01:00
Dan Marsden 31fabbdbaa MDL-35562 enrol_database: enrolment_sync - don't halt sync on failed search for course. 2012-09-28 09:07:29 +12:00
Dan Marsden add494f1af MDL-35557 enrol/database: use distinct call when getting list of courses that should be added. 2012-09-28 09:05:52 +12:00
Dan Marsden 860c7e82bd MDL-35227 SCORM: set completion in correct location. 2012-09-28 09:03:54 +12:00
Tim Hunt 28c9348405 MDL-35680 user selector: more usable when queries are slow.
The problem is to do when you pause a bit, so a search starts, and then
type a bit more before the search finishes. It was behaving like this:

1. Type a bit, then pause.
2. First search request sent.
3. Type a bit more, then pause.
4. Second search request sent.
5. First search request completes.
6. You try to select one result.
7. Second search request comples, overwriting what you are selecting.

This fix works by cancelling the first request before sending the
second.
2012-09-27 19:10:41 +01:00
Tim Hunt 40d651bbbb MDL-34894 course ws unit tests: fix windows problem.
This fixes a weird windows-only failure, as explained in the tracker
issue.
2012-09-27 18:59:50 +01:00
Tim Hunt 022a3555d1 MDL-30885 quiz: use formchangechecker during quiz attempts.
To avoid the possiblity of dataloss if a student tries to navigate away
having changed some answers.
2012-09-27 14:15:37 +01:00
Tim Hunt f0f2014316 MDL-35620 question engine: should distinguish NULL and 0.
This only matters in an obscure edge case, but it is an edge case we hit
with one of the OU question types.

This load data code is processing the results of a LEFT JOIN, so is_null
is the correct logic.
2012-09-27 12:35:55 +01:00
Tim Hunt ad1a52e07c MDL-35370 cloze qtype: distinguish wrong & unanswered subqs
This affects the subquestions that appear as an embedded text input box.

There are three cases:
1. Input for subq left blank
2. Input for subq was wrong, and matched by a * wildcard.
3. Input for subq was wrong, and did not match any answer.

2. and 3. should look identical, apart from any feedback in case 2.

1. is different. The state should be displayed as "Not answered" even
though the mark for this part is still shown as 0.

There are some new unit tests for these cases.

Also, we slighly improve handling of , for decimal point in multianswer,
although there are still issues.

While working on this, I made some minor clean-ups in shortanswer and
numerical qtypes.
2012-09-27 12:35:35 +01:00
Tim Hunt d205afe662 MDL-34257 quiz 'secure' mode: PAGE initialisation order issues. 2012-09-27 12:34:51 +01:00
Dan Poltawski 9273bd1abb weekly release 2.3.2+ 2012-09-27 18:51:24 +08:00
Dan Poltawski 11d19d4cfb Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-09-27 18:47:34 +08:00
Jerome Mouneyrac 786b831653 MDL-35198 replace key_exists by array_key_exists 2012-09-27 15:34:48 +08:00
Mark Nelson 40755f9584 MDL-35637 group: Fix form submission error that occurs when GD version is not set. 2012-09-27 11:58:47 +08:00
Dan Poltawski 12f9c36df8 Revert "MDL-32184 - Course - Fixing incorrect redirect when toggling course edit while inside an activity -- Patch provided by Kanika Goyal"
This reverts commit a1db00dd1a.
2012-09-27 11:32:02 +08:00
AMOS bot 66652c60c0 Automatically generated installer lang files 2012-09-27 00:34:44 +00:00
Nadav Kavalerchik 20a1f8a9c5 MDL-35481 - Invert "search option" listbox "open" arrow, when in RTL mode (page: manual user course registration ) and Personal Blog page 2012-09-27 00:10:37 +02:00
Nadav Kavalerchik 2a8690dab5 MDL-35246 - Invert all action arrows in Question Bank categories management, when in RTL mode 2012-09-26 23:54:10 +02:00
Nadav Kavalerchik 68164ad218 MDL-35527 - Left justify CLOSE button on modal dialog boxes, when in RTL mode 2012-09-26 21:50:46 +02:00
Eloy Lafuente (stronk7) 249d073058 MDL-35578 - Also justify email2, used in signup 2012-09-26 19:49:26 +02:00
Nadav Kavalerchik 3147b59c8a MDL-35578 - Left justify LTR Form input fields (email, idnumber, url, phone...), when in RTL mode 2012-09-26 19:37:43 +02:00
Dan Poltawski 0a99c77ede Merge branch 'wip-MDL-35276-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-09-26 15:21:36 +08:00
Marina Glancy 25878bcd22 MDL-35276 fix redirect to course/section pages 2012-09-26 15:17:14 +08:00
Jerome Mouneyrac 3f676aa5bd MDL-35644 user_get_details: admin should be able to see description 2012-09-26 14:29:21 +08:00
Sam Hemelryk 41a5203c2a Merge branch 'wip-MDL-35276-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-09-26 15:13:33 +12:00
Marina Glancy 583c0cf67f MDL-35276 fix redirect to course/section pages 2012-09-26 10:58:03 +08:00
Jason Fowler f0f3338000 MDL-34476 - Blocks - Fixing context issue 2012-09-26 14:40:24 +12:00
Sam Hemelryk 678e90a080 Merge branch 'MDL-34573_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-09-26 10:10:23 +12:00
Sam Hemelryk 1172c2bd2f Merge branch 'wip-MDL-34476-stable23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-09-26 08:32:52 +12:00
Sam Hemelryk 792a3c4ea9 MDL-31976 course: Better alt for edit section icon 2012-09-26 08:24:06 +12:00
Sam Hemelryk 4c6962068a Merge branch 'MDL-31976-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-26 08:20:37 +12:00
Dan Poltawski 2d39f72b59 Merge branch 'MDL-34328-MOODLE_23_STABLE-2' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-09-25 16:37:32 +08:00
Dan Poltawski 790ad23dd6 Merge branch 'MDL-34778_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-09-25 13:43:34 +08:00
Dan Poltawski 00d62e135d Merge branch 'MDL-35252_M23' of git://github.com/raymondAntonio/moodle into MOODLE_23_STABLE 2012-09-25 13:14:45 +08:00
Dan Poltawski 700bbb5fb9 Merge branch 'MDL-34571_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-09-25 13:11:10 +08:00
Raymond Wijaya ff61f14c04 MDL-35252: Fix a bug that creates unneccessary rows in grade_grades table when unchecking 'overridden' check box in gradebook update 2012-09-25 12:19:07 +08:00
Dan Poltawski 125759ddf4 Merge branch 'MDL-35202-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-09-25 11:43:05 +08:00
Dan Poltawski df87119b5a Merge branch 'MDL-35321-MOODLE_23_STABLE' of git://github.com/micaherne/moodle into MOODLE_23_STABLE 2012-09-25 11:32:34 +08:00
Nadav Kavalerchik a2b837e5be MDL-35576 - Right padding is missing on Date field/element, when in RTL mode (minor fix) 2012-09-25 01:17:28 +02:00
Nadav Kavalerchik 2bb3259fc3 MDL-35537 - Right align registration text on login page, when in RTL mode 2012-09-25 00:36:37 +02:00
Sam Hemelryk 6b69bf463a MDL-34607 files: post integration version bump 2012-09-25 09:56:11 +12:00
Sam Hemelryk 8a7cc012fd Merge branch 'MDL-34607-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-25 09:52:00 +12:00
Sam Hemelryk fd0758da1b Merge branch 'MDL-35375-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-09-25 09:23:27 +12:00
Dan Poltawski 675c2b8543 Merge branch 'wip-MDL-32184-s23' of http://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-09-24 15:36:04 +08:00
Dan Poltawski 7e0deaf3fd Merge branch 'MDL-26940-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-24 15:32:31 +08:00
Frederic Massart fede879cf2 MDL-31499 Javascript: Handle invalid window names in openpopup 2012-09-24 15:24:30 +08:00
Jason Fowler a1db00dd1a MDL-32184 - Course - Fixing incorrect redirect when toggling course edit while inside an activity -- Patch provided by Kanika Goyal 2012-09-24 15:04:06 +08:00
Dan Poltawski bb6b275906 Merge branch 'wip-MDL-35542-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-09-24 14:37:49 +08:00
Damyon Wiese b666bddae2 MDL-35375: Ensure the assignment grading table is always sorted by at least one unique column
Conflicts:

	mod/assign/gradingtable.php
2012-09-24 12:38:24 +08:00
Sam Hemelryk e1a809b36f Merge branch 'MDL-35312-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-24 15:53:48 +12:00
Sam Hemelryk 1e112f8801 Merge branch 'MDL-35517_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-09-24 15:21:28 +12:00
Ruslan Kabalin 3e8d7ca16e MDL-35442 Add settings and uninstall link for local plugins 2012-09-24 11:19:50 +08:00
Dan Poltawski daccc92d9e Merge branch 'MDL-35242-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-24 11:08:18 +08:00
Sam Hemelryk 3c6510c106 Merge branch 'MDL-30889-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-24 15:05:44 +12:00
Sam Hemelryk 91cb7bdab5 Merge branch 'MDL-35398-m23' of git://github.com/netspotau/moodle-mod_assign into MOODLE_23_STABLE 2012-09-24 15:03:26 +12:00
Damyon Wiese 2b7024847d MDL-35427: Remove resetting of $_POST - use $mform->setConstant to force update to rownum instead.
Conflicts:

	mod/assign/locallib.php
2012-09-24 15:02:17 +12:00
Rex Lorenzo e36ab38642 MDL-35587 - Display grouping name for Drag and Dropped resources 2012-09-23 01:15:11 -07:00
Andrew Robert Nicols cffbc80ac7 MDL-34328 Correct usage of e.drop when catching missed drag/drop events 2012-09-21 15:25:29 +01:00
Paul Nicholls 3f6970bf92 MDL-34328: block dragdrop - disallow dragging from show/hide and dock icons
Tell the YUI drag/drop delegate that the show/hide and dock icons are not valid drag handles.  Otherwise, a drag can be initiated by showing or hiding a block (probably not from docking one, but better safe than sorry).  Not strictly related to MDL-34328, but likely to be encountered whilst testing - and closely related to another patch for MDL-34328.

Note that the "invalid" config option for the delegate takes a string - not an array - but can have multiple selectors separated by commas.
2012-09-21 15:25:29 +01:00
Paul Nicholls 65c8ccc02e MDL-34328: block dragdrop - performance rewrite
Use YUI's DragDrop delegates for block dragdrop - one per block region - rather than initialising a Drag object for each individual block.
2012-09-21 15:25:29 +01:00
Paul Nicholls a573a5157e MDL-34328: course section "toolboxes" - performance rewrite
Use YUI event delegation to handle events in course section "toolboxes" (visibility and highlight toggles) rather than attaching event handlers to each individual button we care about.  Also remove the (now unused) replace_button() function.
2012-09-21 15:25:29 +01:00
Paul Nicholls e4db46b4d9 MDL-34328: course resource "toolboxes" - performance rewrite
Use YUI event delegation to handle events in course resource "toolboxes" (sets of editing icons) rather than attaching event handlers to each individual button we care about.  Don't waste time setting the CSS cursor to what it already is, use .all() rather than replace_button() if we just need the node.

Section toolboxes could probably also be done this way to some extent, but the payoff may not be worth the effort - they're so minimal that they don't tend to cause issues.
2012-09-21 15:25:29 +01:00
Paul Nicholls 99cd723af5 MDL-34328: course dragdrop - performance rewrite
Use YUI's DragDrop delegates for course dragdrop, rather than initialising a Drag object for each individual section and each individual activity/resource.  Also, clone a single drag handle for activities/resources, rather than repeatedly creating a whole new one with the same parameters for each activity/resource.
2012-09-21 15:25:28 +01:00
Jason Fowler 94167a2dee MDL-34476 - Course Completeion, Blocks - Allowing teachers to access the Full Course Report from the Course Completion Block -- Initial patch provided by Nadav Kavalerchik 2012-09-21 15:21:18 +08:00
Ankit Agarwal 7cdb725081 MDL-30889 calendar: Adding focus and blur events to calendar renderer 2012-09-21 14:34:51 +08:00
Frederic Massart 05daea0f6d MDL-31976 Accessbility: Action icons on course page do not need title attributes 2012-09-21 11:30:51 +08:00
Frederic Massart 6b15d50a60 MDL-35312 Web Services: Fixed typo in capability of course update 2012-09-21 09:57:45 +08:00
Frederic Massart aa57854075 MDL-35242 Web Services: Removed translation causing error in add_to_log 2012-09-21 09:57:34 +08:00
Frederic Massart 7ae2136b3f MDL-34607 Folder: Remove any sort order during upgrade 2012-09-21 09:56:52 +08:00
Frederic Massart 7be6c09db5 MDL-34607 File API: Removed ordering by sortorder in area tree 2012-09-21 09:56:52 +08:00
AMOS bot 58f8b73f26 Automatically generated installer lang files 2012-09-21 00:34:52 +00:00
Michael Aherne 7ab5b064a6 MDL-35321 course sections Enable reset of grouping access 2012-09-20 16:22:29 +01:00
Eloy Lafuente (stronk7) 2974030611 MDL-35517 course: Handle non-existing $course->maxbytes on course creation. 2012-09-20 10:20:21 +02:00
Marina Glancy a7783bf260 MDL-35542 Fixed a bug when trying to directly link to a file from Dropbox 2012-09-20 15:50:28 +08:00
Marina Glancy 093825d81e MDL-35001 added unit test for function convert_to_array() 2012-09-20 15:50:12 +08:00
Marina Glancy 7116aca6af MDL-35001 removed cycle detection from convert_to_array because it causes error in data 2012-09-20 15:50:11 +08:00
Marina Glancy ed7e6a7356 MDL-33857 Increase performance of queries for Server files repository (small improvements) 2012-09-20 15:49:01 +08:00
Dan Poltawski c366bea3cf weekly release 2.3.2+ 2012-09-20 14:10:34 +08:00
Dan Poltawski 33672ace5f Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-09-20 14:05:52 +08:00
AMOS bot 5fc1b61a88 Automatically generated installer lang files 2012-09-20 00:34:31 +00:00
Eloy Lafuente (stronk7) 2ed38452aa MDL-33166 forum: fetch cmid to be used by capability checks. 2012-09-19 21:42:14 +02:00
Dan Poltawski ed78617491 Merge branch 'wip-mdl-30833-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-09-19 09:52:18 +08:00
AMOS bot 9b65e5841e Automatically generated installer lang files 2012-09-19 00:34:24 +00:00
Eloy Lafuente (stronk7) b04027c0cf MDL-33166 Forum: whitespace fix 2012-09-19 00:53:05 +02:00
Eloy Lafuente (stronk7) e6084683c8 Merge branch 'wip-mdl-33166-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-09-19 00:39:08 +02:00
Simon Coggins 119b5fdc8b MDL-35472: Prevent html tags appearing in page titles
Only a problem when formatstringstriptags is disabled
2012-09-19 09:07:33 +12:00
Eloy Lafuente (stronk7) b437a680d2 Merge branch 'MDL-33198-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-18 20:06:03 +02:00
Eloy Lafuente (stronk7) 631aedabb4 Merge branch 'w38_MDL-32572_m23_authdbduplicates' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-18 19:51:38 +02:00
Petr Škoda 88fbc9a7ef MDL-32572 fix notice when changing internal auth_db passwords 2012-09-18 13:18:18 +02:00
Petr Škoda 3f22e75663 MDL-32572 skip problematic users in auth_db sync 2012-09-18 12:41:07 +02:00
Rajesh Taneja 9ac00a5394 MDL-30833 Accessibility: Added aria-expanded attribute on navigation nodes 2012-09-18 17:29:00 +08:00
Petr Škoda 45a6d31c4f MDL-32572 always lookpup passwords only in records from current auth plugin
This bug should not be creating any problems thanks to our design of login process, but it should be fixed anyway.
2012-09-18 10:38:29 +02:00
Damyon Wiese ce86eb4d08 MDL-35202: Allow for language files that contain non-ascii for actions in assignment 2012-09-18 15:27:58 +08:00
Dan Poltawski 85aa469960 Merge branch 'MDL-30909-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-18 15:08:00 +08:00
Frederic Massart 6d3249780b MDL-30909 Accessibility: Improved access to reply form in forums 2012-09-18 14:57:20 +08:00
Damyon Wiese 97b53d6c05 MDL-35398: Quick grading feedback is now pushed to the gradebook 2012-09-18 14:54:01 +08:00
Dan Poltawski bb67dc33e1 Merge branch 'wip-mdl-30831-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-09-18 14:51:33 +08:00
Ankit Agarwal ec5c45c4ed MDL-33198 book: Adding h tags to book title to increase accessibility 2012-09-18 09:46:21 +08:00
Ankit Agarwal 58ee763bfb MDL-33198 book: Adding h tags to book titles to increase accessibility while printing a book 2012-09-18 09:46:21 +08:00
Dan Poltawski 05165a7f60 Merge branch 'm23_MDL-34644' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-09-18 09:27:19 +08:00
Eloy Lafuente (stronk7) 0671db29ce Merge branch 'MDL-32688-m23' of git://github.com/itamart/moodle into MOODLE_23_STABLE 2012-09-18 01:53:50 +02:00
Eloy Lafuente (stronk7) c59d51b67d Merge branch 'MDL-35419_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-18 01:28:46 +02:00
Eloy Lafuente (stronk7) b050380df1 Merge branch 'MDL-32230-23' of https://github.com/mackensen/moodle into MOODLE_23_STABLE 2012-09-18 01:20:45 +02:00
Eloy Lafuente (stronk7) 0f5c4b8397 Merge branch 'MDL-34841_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-18 01:15:31 +02:00
Eloy Lafuente (stronk7) a0a02f4e0d Merge branch 'w38_MDL-35129_m23_dbmigration' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-18 01:12:34 +02:00
David Mudrák 1530136c20 MDL-35344 Ignore available updates info with invalid format
Previously when the server response validation had failed, the property
available_update_checker::recentresponse was left as NULL. This caused
problems in available_update_checker::compare_responses() that expects
proper arrays passed.

This patch makes invalid data being ignored by setting the property to
an empty array as if no data have been fetched yet. A debugging message
is thrown so the admins will be able to diagnose eventual problems in
the future.
2012-09-17 18:04:17 +02:00
Dan Poltawski 07a145dcfc Merge branch 'MDL-33982-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-17 16:03:35 +08:00
Dan Poltawski 947d7759bb Merge branch 'MDL-35376_23' of git://github.com/rlorenzo/moodle into MOODLE_23_STABLE 2012-09-17 12:47:53 +08:00
Dan Poltawski 4edc94cbf3 Merge branch 'MDL-30847_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-17 12:40:02 +08:00
Rossiani Wijaya 83fbe988f0 MDL-34571 accessibility compliance for report: Add label to select and input text form 2012-09-17 12:15:05 +08:00
Rossiani Wijaya 7a054265dc MDL-34778 enrol: add a space 2012-09-17 12:14:22 +08:00
Rossiani Wijaya b7f0b0b12b MDL-34778 accessibility compliance for enrol: add label tag for input text 2012-09-17 12:14:20 +08:00
Dan Poltawski 614ac18b11 Merge branch 'MDL-34975-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-17 11:59:51 +08:00
Dan Poltawski 8673ce8201 Merge branch 'MDL-35374_23' of git://github.com/rlorenzo/moodle into MOODLE_23_STABLE 2012-09-17 11:47:35 +08:00
Dan Poltawski 7056f36f3c Merge branch 'w38_MDL-35454_m23_bogusmaxsize' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-17 11:44:45 +08:00
Dan Poltawski bde7deec36 Merge branch 'MDL-35163-MOODLE_23_STABLE' of git://github.com/micaherne/moodle into MOODLE_23_STABLE 2012-09-17 10:51:40 +08:00
Rajesh Taneja 29a33233fc MDL-30831 Accessibility: Added aria role and attributes to dock block 2012-09-17 10:13:18 +08:00
Rex Lorenzo fd7255ace0 MDL-33166 Forum: Adding capability mod/forum:allowforcesubscribe
Conflicts:

	mod/forum/version.php
2012-09-17 10:07:28 +08:00
Frederic Massart 8e977618f8 MDL-34975 Accessibility: Collapsible areas captions can be clicked to expand/collapse 2012-09-17 09:45:36 +08:00
Frederic Massart befd59097b MDL-33982 TinyMCE: Media preview supports external URLs 2012-09-17 09:44:44 +08:00
David Monllao e4c9460c0b MDL-30847 core Adding ARIA attribute to help windows 2012-09-17 09:27:11 +08:00
Petr Škoda 28ac357f86 MDL-35454 ignore invalid $custombytes in get_max_upload_sizes()
This fixes installation and phpunit init regression.
2012-09-17 00:08:36 +02:00
Eric Merrill 1077bf7086 MDL-35411 assign Include plugin (submission/feedback) info, even when there is no user data.
assign_plugin_config data was only included in backups/imports if user data was included in
the backup. This patch moves it out with the standard structure of the assign backup.
2012-09-16 17:57:26 -04:00
Petr Škoda fe5a985c0e MDL-35129 implement new export_table_recordset()
This is necessary because MySQL get_recordset_sql() stores the data in memory, unfortunately the alternative resultset iteration blocks concurrent access - that is why we need new method for export.
2012-09-15 12:03:24 +02:00
Petr Škoda 250b340003 MDL-35129 add missing recordset closing in db transfer 2012-09-14 23:54:56 +02:00
Itamar Tzadok e7f72fb5d6 MDL-32688 My Moodle - Fixed fatal error in guest access to My Moodle 2012-09-14 15:12:17 -04:00
Eloy Lafuente (stronk7) 32efb09e62 weekly release 2.3.2+ 2012-09-14 19:10:43 +02:00
Eloy Lafuente (stronk7) b5b8aac98a Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-09-14 19:03:20 +02:00
Michael Aherne 6b3177344d MDL-35163 quiz Make quiz report options available to attempts form 2012-09-14 10:17:17 +01:00
Eloy Lafuente (stronk7) b92083421c Revert "MDL-32125 mod_forum: updating subscription mode not reflected"
This reverts commit b4271570c6.
2012-09-14 10:38:17 +02:00
Eloy Lafuente (stronk7) 77393dec21 Revert "MDL-32125 mod_forum: updating subscription mode not reflected"
This reverts commit fa501712c7.
2012-09-14 10:38:12 +02:00
AMOS bot 9844498b0a Automatically generated installer lang files 2012-09-14 00:34:18 +00:00
Tim Hunt c21f901559 MDL-35419 question manual grading: valdiation must handle 0,5
Yet another , as decimal separator issue!

To fix this nicely, I refactored some code into question_utils.
2012-09-13 16:40:02 +01:00
Simon Coggins a698454089 MDL-34644 SCORM fix completion when only completion on view is selected. 2012-09-13 14:39:12 +12:00
AMOS bot b3557ac52d Automatically generated installer lang files 2012-09-13 00:34:33 +00:00
Kanika Goyal fa501712c7 MDL-32125 mod_forum: updating subscription mode not reflected 2012-09-13 11:27:48 +12:00
Kanika Goyal b4271570c6 MDL-32125 mod_forum: updating subscription mode not reflected 2012-09-13 11:27:47 +12:00
Sam Hemelryk 77ef5e06f9 Merge branch 'wip-mdl-30667-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-09-13 11:18:20 +12:00
Sam Hemelryk cdf30c74d8 Merge branch 'MDL-29872_c_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-09-13 11:12:47 +12:00
Tim Hunt 5df0a6b47e MDL-34841 error importing questions with long names.
The problem was with the non-UTF-8-safe way that a question name
was being constructed from the question text.

I have done a proper fix with methods in the base class to
carefully construct a question name that is reasonable, and
which will fit in the database column. Then I have changed all
importers to use the new methods.

I also remembered not to break the lesson in the process.
2012-09-12 17:38:40 +01:00
Eloy Lafuente (stronk7) bd390545b1 Merge branch 'MDL-34082_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-12 17:20:48 +02:00
Tim Hunt b06143c5c2 MDL-34082 course restrict modules: typo in MDL-19125 upgrade code. 2012-09-12 16:15:38 +01:00
David Monllao 7737d24b92 MDL-35264 mod_chat Bigger frame for text input 2012-09-12 14:54:16 +08:00
Sam Hemelryk 561cbb8967 Merge branch 'wip-MDL-34223-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-09-12 10:33:35 +12:00
Sam Hemelryk bdd6847fc2 Merge branch 'MDL-30829-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-12 10:27:54 +12:00
Rex Lorenzo 102d0bd05b MDL-35376 - Shortcut/alias not working for Private file repo 2012-09-11 14:24:02 -07:00
Rex Lorenzo 6b43759eff MDL-35374 - Cannot delete blocks off frontpage 2012-09-11 12:28:18 -07:00
Eloy Lafuente (stronk7) 6588886965 Merge branch 'MDL-34984_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-09-11 16:30:44 +02:00
Jason Fowler e0c567c3be MDL-29463 - Chat - Change socket_setopt to socket_set_options 2012-09-11 14:49:33 +08:00
Sam Hemelryk d5e317882d Merge branch 'MDL-35190-MOODLE_23_STABLE' of git://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-09-11 16:45:45 +12:00
Frederic Massart ceed31ad6b MDL-34765 Course: Fixed missing argument in course reordering 2012-09-11 16:41:37 +12:00
Sam Hemelryk 6ab9c3e2ad Merge branch 'MDL-34765-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-11 15:31:20 +12:00
Sam Hemelryk bbd89d7b10 Merge branch 'MDL-30018_23' of https://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-09-11 15:21:59 +12:00
Sam Hemelryk 08153276ac Merge branch 'MDL-10259_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-11 15:18:40 +12:00
Sam Hemelryk d27a76c3e3 Merge branch 'MDL-30857_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-11 15:10:48 +12:00
Sam Hemelryk 6d661aa2f1 Merge branch 'm23_MDL-34755' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-09-11 15:02:26 +12:00
Marina Glancy 1ab628b72e MDL-34223 increased performance in forum_get_file_info() for admins 2012-09-11 10:48:21 +08:00
Marina Glancy c84b70456a MDL-33857 Increase performance of queries for Server files repository
- file_info class now has new methods get_non_empty_children and count_non_empty_children; added default implementation;
- all core classes extending file_info have their implementation of those methods;
- class repository_local_file used for caching get_children() results is removed;
- class repository_local rewritten to use new methods from file_info;
- added caching of retrieved modules in file_browser::get_file_info_context_module() - this query is slow and executed multiple times on big servers
2012-09-11 10:48:13 +08:00
Eloy Lafuente (stronk7) 11a3dd0c0e Merge branch 'MDL-35134_23' of git://github.com/pauln/moodle into MOODLE_23_STABLE 2012-09-11 02:50:29 +02:00
Eloy Lafuente (stronk7) a59f0f25cd Merge branch 'm23_MDL-35156' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-09-11 02:48:22 +02:00
Eloy Lafuente (stronk7) 35eb1a0f0c Merge branch 'MDL-35171_m23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-09-11 02:44:56 +02:00
Eloy Lafuente (stronk7) 7189c6102f MDL-34338 mod_folder: delete unused $browser var. 2012-09-11 02:20:17 +02:00
Eloy Lafuente (stronk7) 2e4678332a Merge branch 'wip-MDL-34338-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-09-11 02:19:48 +02:00
Sam Hemelryk cb3a1e355b Merge branch 'm23_MDL-35255' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-09-11 12:10:55 +12:00
Raymond Wijaya cfe32be822 MDL-34660: Fix SQL error in assignments module with Oracle Database I by replacing 'offline' with 'nosubmissions' 2012-09-11 02:08:54 +02:00
Sam Hemelryk 654338074e Merge branch 'MDL-34916_M23' of git://github.com/kordan/moodle into MOODLE_23_STABLE 2012-09-11 12:06:14 +12:00
Eloy Lafuente (stronk7) c0eee4898a Merge branch 'm23_MDL-35123' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-09-11 02:03:10 +02:00
Eloy Lafuente (stronk7) 3a3120e206 Merge branch 'm23_MDL-35208' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-09-11 01:57:21 +02:00
Eloy Lafuente (stronk7) f34cb5797c Merge branch 'MDL-35257' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-09-11 01:53:35 +02:00
Eloy Lafuente (stronk7) 8146d3f12d Merge branch 'w37_MDL-35270_m23_oracohort' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-11 01:48:55 +02:00
Sam Hemelryk 74fae5244c Merge branch 'MDL-27786-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-11 11:15:25 +12:00
Sam Hemelryk 1595c976dd Merge branch 'MDL-33374-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-11 11:10:26 +12:00
Sam Hemelryk 5a05aa9633 Merge branch 'MDL-35007-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-11 11:07:25 +12:00
David Mudrák babf5f522e MDL-35272 Fix typo in qformat_blackboard_six.php
Credit goes to German Valero for spotting and reporting this.
2012-09-11 01:03:22 +02:00
Adrian Greeve 919105e5d1 MDL-32785 - lib - Ignorning hard frozen fields when submitting data. 2012-09-11 10:48:07 +12:00
Charles Fulton cc17d246e4 MDL-32230 block_rss_client: remove extra cleaning step 2012-09-10 12:31:39 -07:00
Eloy Lafuente (stronk7) ab88177b5e Merge branch 'w37_MDL-35289_m23_tinymcelangs' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-10 19:53:24 +02:00
Eloy Lafuente (stronk7) f58585807c Merge branch 'MDL-35343_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-10 16:41:56 +02:00
Tim Hunt 817fcbb549 MDL-35343 JavaScript visible in multichoice choice feedback.
Also, Match correct answer, and calculated multi and multianswer
feedback.
2012-09-10 13:08:14 +01:00
Frederic Massart 5371fa1928 MDL-30829 Accessibility: Docking a block disables the accessible anchors 2012-09-10 17:22:17 +08:00
Aparup Banerjee 6c990952c9 Merge branch 'MDL-34944-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-10 17:15:31 +08:00
Aparup Banerjee 1b1c35541a Merge branch 'MDL-35223-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-10 17:00:47 +08:00
David Monllao 360769aa0f MDL-30857 block_community Removing comments hardcoded height 2012-09-10 15:00:46 +08:00
Aparup Banerjee 49d9947914 Merge branch 'MDL-35264_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-10 14:39:01 +08:00
Aparup Banerjee 4ad7bc830e Merge branch 'MDL-27398_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-10 14:30:57 +08:00
David Monllao 799de15145 MDL-27398 mod_chat Removing PAGE references 2012-09-10 14:10:26 +08:00
David Monllao f4dfb810c8 MDL-27398 mod_chat Adding file basic doc 2012-09-10 14:10:26 +08:00
David Monllao c8cac02c99 MDL-27398 mod_chat Removing deprecated calls and moving dependencies
Credit to Jorge Villalon
2012-09-10 14:10:18 +08:00
David Monllao 879c31c1ba MDL-27398 mod_chat Adding CLI_SCRIPT to chat daemon
Credit to Jorge Villalon
2012-09-10 14:09:57 +08:00
Aparup Banerjee 9111b11b7b Merge branch 'MDL-34068_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-10 13:42:36 +08:00
Eloy Lafuente (stronk7) 8722439751 MDL-30018 restore: better answer matching. Credit goes to Tyler Bannister, thanks!
On backup, contents are cleaned to be safe utf8. That was leading to
some matching problems on restore against not cleaned DB contents (for
already existing questions). This commit adds one fallback method to
perform the match against cleaned DB contents.
2012-09-09 20:30:02 +02:00
Eloy Lafuente (stronk7) 7413ce9896 Moodle 2.3.2 release 2012-09-09 16:23:09 +02:00
Petr Škoda bafffec181 MDL-35270 fix ambiguously defined column
Credit goes to Sara Arjona, thanks.
2012-09-08 10:49:49 +02:00
AMOS bot f84f35dda1 Merge branch 'MOODLE_23_STABLE' into install_23_STABLE 2012-09-08 00:34:44 +00:00
Petr Škoda 9cd1f8ffe6 MDL-35289 add missing charmap usage info string 2012-09-07 10:30:24 +02:00
Rossiani Wijaya cd029574b6 MDL-29872 Dropbox repository: add message handler to filepicker header and add message to logout from dropbox.
When user clicked on logout button from dropbox repository, it will also logging them out from dropbox site through a popup window
2012-09-07 15:44:08 +08:00
Rossiani Wijaya 14d15f125e MDL-34573 - add label for search tag input text 2012-09-07 15:43:44 +08:00
Rossiani Wijaya 2afda054e8 MDL-34573 Tag: update label for suggested tag 2012-09-07 15:43:44 +08:00
Rossiani Wijaya 5c0c094f3c MDL-34573 accessibility compliance for tag: Add forform input text and select tag 2012-09-07 15:43:43 +08:00
Rossiani Wijaya 689a3bcd17 MDL-34984 admin setting: fixed labeling and shortname display for admin setting 2012-09-07 15:43:09 +08:00
Frederic Massart d37de5e0df MDL-34765 Course: Re-sorting courses uses natural order 2012-09-07 14:13:50 +08:00
David Monllao a08d03a2c0 MDL-34068 mod_chat Sending text/html headers when sending the messages frame output for the first time 2012-09-07 12:11:11 +08:00
David Monllao a2d928b143 MDL-35264 mod_chat Changing the input frame of chat daemon method to a embedded page layout 2012-09-07 12:08:15 +08:00
David Monllao 2904faa0eb MDL-10259 core Adding a search courses box if there are too many courses 2012-09-07 11:29:44 +08:00
Dan Poltawski bd916ad1ee MDL-35257 lib: if $CFG->logguests is disabled, avoid some log actions
This is for performance, else there can be great contention on the guest
user record as we've seen on moodle.org.
2012-09-07 10:24:50 +08:00
Ankit Agarwal e81507f6b6 MDL-27786 calendar: Changing the eventname string for accessibility 2012-09-07 10:22:02 +08:00
Ankit Agarwal 800abd6faf MDL-33374 profile: Use correct text for buttons when creating a new user 2012-09-07 10:19:34 +08:00
Ankit Agarwal bb7f95f830 MDL-34944 book: Implementing reset framework for book 2012-09-07 10:17:13 +08:00
Ankit Agarwal 41b997b1ff MDL-35007 book: Adding rule to parse links to book chapters from 1.9 backups
Conflicts:

	mod/book/version.php
2012-09-07 10:13:09 +08:00
Ankit Agarwal 6d89ac64ab MDL-35223 book: use chapter names in page titles 2012-09-07 10:09:52 +08:00
Marina Glancy f4671476ff MDL-34338: renderer for mod_folder should not use file_info 2012-09-07 09:36:19 +08:00
Eloy Lafuente (stronk7) 71e12dc963 weekly release 2.3.1+ 2012-09-07 02:38:46 +02:00
AMOS bot ba1d10c500 Automatically generated installer lang files 2012-09-07 00:35:10 +00:00
Eloy Lafuente (stronk7) 662fe4b7d6 Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-09-07 02:18:16 +02:00
Eloy Lafuente (stronk7) ce077202d0 Merge branch 'MDL-34945-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-06 20:12:09 +02:00
Eloy Lafuente (stronk7) d98c8fcb8e Merge branch 'MDL-34985_m23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-09-06 20:07:45 +02:00
Eloy Lafuente (stronk7) 9d2926a4e9 MDL-6424 - blocks - Add missing global vars. 2012-09-06 19:45:00 +02:00
Adrian Greeve 155fd3f64b MDL-6424 - blocks - Adding a warning screen when the user clicks the delete link.
Conflicts:
	lib/blocklib.php
2012-09-06 19:44:40 +02:00
Dan Marsden fa3a1652bf MDL-35123 SCORM: cleaner version of get_last_attempt and get_last_completed_attempt, fixes support for MS Sql driver 2012-09-06 18:45:43 +12:00
Jerome Mouneyrac a66863c357 MDL-35190 random failures in course externallib test 2012-09-06 11:30:43 +08:00
Eloy Lafuente (stronk7) e02955dd79 Merge branch 'MDL-35034-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-06 01:18:40 +02:00
Eloy Lafuente (stronk7) 3f4e07ef3c MDL-29662 quiz overrides: use proper course value (was php notice). 2012-09-05 18:02:16 +02:00
Eloy Lafuente (stronk7) 9569ba7ed8 Merge branch 'w36_MDL-35077_m23_stats' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-05 13:13:31 +02:00
Petr Škoda e4e29fd35e MDL-35077 do not show link to system stats report if stats disabled 2012-09-05 10:02:07 +02:00
Aparup Banerjee 69a52e7c4f Merge branch 'MDL-35089_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-09-05 15:08:38 +08:00
Aparup Banerjee a334d8f967 MDL-26504 blog: fixed SQL to add explicit casting
Conflicts:

	lib/db/upgrade.php
	version.php
2012-09-05 10:31:06 +08:00
Dan Marsden 4d48a65159 MDL-35255 mod_assign plagiarism api shift update_status call to after header has been printed. 2012-09-05 12:45:52 +12:00
Eloy Lafuente (stronk7) 3ac8fa663a Merge branch 'MDL-34997-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-05 00:52:43 +02:00
Aparup Banerjee 4ec133b8e6 Merge branch 'wip-mdl-34537-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-09-04 17:32:51 +08:00
Frederic Massart 7c4fc5b50b MDL-34945 Repository: Creating an instance requires the user to have the permission to view it 2012-09-04 16:17:25 +08:00
Kordan e765d3c396 MDL-34916 theme_formal_white: added support for relative path of logos 2012-09-04 09:49:51 +02:00
Kordan 2f9ac3fe1e MDL-35211 theme_formal_white: updated descriptions involved in MDL-34916 2012-09-04 09:11:01 +02:00
Andrew Davis c62ccd747c MDL-26504 blog: added upgrade code to remove orphan external blog posts
Conflicts:
	lib/db/upgrade.php
	version.php
2012-09-04 13:56:27 +08:00
Andrew Davis fb1b0bc05e MDL-26504 blog: made it delete external blog posts when the external blog is deleted 2012-09-04 13:53:48 +08:00
Sam Hemelryk df4e81835a Merge branch 'MDL-30022_message_duplicate_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-09-04 16:50:23 +12:00
Tim Lock d8a640728c MDL-35092: Add proxy support to enrol/paypal IPN 2012-09-04 10:56:41 +08:00
Simon Coggins b91833db8a MDL-34755 SCORM: pop-up not loading in IE7/IE8 compat mode 2012-09-04 13:12:34 +12:00
Eloy Lafuente (stronk7) 31ae0e5984 Merge branch 'wip-mdl-34606-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-09-04 02:09:25 +02:00
Eloy Lafuente (stronk7) 3dafe46b2b Merge branch 'MDL-34633-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-04 01:54:04 +02:00
Eloy Lafuente (stronk7) 5f015b62d4 Merge branch 'MDL-29662_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-04 01:14:18 +02:00
Eloy Lafuente (stronk7) 2b567e3687 Merge branch 'MDL-27818_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-04 01:07:51 +02:00
Dan Marsden 70c2ec0ba2 MDL-35208 mod_choice: respect order of options when running backup 2012-09-04 11:02:15 +12:00
Eloy Lafuente (stronk7) 8a716e2362 Merge branch 'MDL-33306_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-04 00:30:59 +02:00
Eloy Lafuente (stronk7) 20182f8670 Merge branch 'MDL-33812-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-04 00:20:17 +02:00
Eloy Lafuente (stronk7) 99e6bd4799 Merge branch 'MDL-34725-strict-standards_23' of git://github.com/mudrd8mz/moodle into MOODLE_23_STABLE 2012-09-04 00:06:23 +02:00
Eloy Lafuente (stronk7) 0af2fd2e05 Merge branch 'w36_MDL-34097_m23_environment' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-04 00:00:38 +02:00
Eloy Lafuente (stronk7) 2cdf1a4650 Merge branch 'MDL-28346-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-09-03 20:02:13 +02:00
Eloy Lafuente (stronk7) 0cae56b42e Merge branch 'w36_MDL-35077_m23_stats' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-03 17:54:03 +02:00
Eloy Lafuente (stronk7) b9d24254bd Merge branch 'MDL-35133_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-09-03 17:47:50 +02:00
Eloy Lafuente (stronk7) a31d7a0ed3 Merge branch 'w36_MDL-35168_m23_yuipath' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-03 17:16:17 +02:00
Eloy Lafuente (stronk7) e815aa8e04 Merge branch 'w36_MDL-35145_m23_guestdelete' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-03 16:18:15 +02:00
Aparup Banerjee e78698c606 Merge branch 'MDL-35151_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-09-03 19:23:52 +08:00
Aparup Banerjee a2bdb0b02c Merge branch 'MDL-35180_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-09-03 17:38:07 +08:00
Aparup Banerjee 90c499dbca Merge branch 'w36_MDL-35080_m23_weirdtables' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-09-03 17:12:32 +08:00
Rajesh Taneja 2f2242efa2 MDl-30667 Course: Maxbytes list will show current value, if it's lower then maxbytes 2012-09-03 14:44:23 +08:00
Frederic Massart 82bf5b10b9 MDL-34633 Repository: Flickr supports small images 2012-09-03 14:19:47 +08:00
Frederic Massart 668ba1e922 MDL-35101 Repository: Public Flickr fails when the picture has no license 2012-09-03 14:18:16 +08:00
Jean-Philippe Gaudreau 3d5df93b80 MDL-34997 - Allow shortened url youtu.be and y2u.be for Youtube filter 2012-09-03 14:12:03 +08:00
Frederic Massart 3bae0b5916 MDL-28346 Backup: Backup does not fail when a file is missing 2012-09-03 14:11:37 +08:00
Frederic Massart 16ee63b4b8 MDL-28346 Backup: Restore does not fail when a file is missing 2012-09-03 14:11:37 +08:00
Frederic Massart 397afd71c3 MDL-28346 Backup: Added new status 'warning' for backup result 2012-09-03 14:11:37 +08:00
Frederic Massart c128731d19 MDL-35034 Repository: Google Docs does not fail when download is restricted 2012-09-03 14:11:12 +08:00
Frederic Massart 640f8eed6d MDL-33812 Backup: Added some upgrade information about the changes 2012-09-03 14:10:59 +08:00
Frederic Massart 2fd679c5e1 MDL-33812 Backup: Revert MDL-33521 2012-09-03 14:10:59 +08:00
Frederic Massart 905185dca4 MDL-33812 Backup: Respect of backup_auto_keep 2012-09-03 14:10:58 +08:00
Dan Marsden 43b135e598 MDL-35156 remove references to non-existant options 2012-09-03 12:42:26 +12:00
Sam Hemelryk 8169e2f46b Merge branch 'MDL-35109-available-updates_23' of git://github.com/mudrd8mz/moodle into MOODLE_23_STABLE 2012-09-03 12:28:18 +12:00
Sam Hemelryk 3d1cbc0df3 Merge branch 'MDL-31496_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-09-03 12:20:25 +12:00
Sam Hemelryk b739e2d71a MDL-26822 user: Minor improvements post integration 2012-09-03 11:41:24 +12:00
Sam Hemelryk bcbfd02574 Merge branch 'MDL-26882-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-09-03 11:26:07 +12:00
Sam Hemelryk f38508168f Merge branch 'wip-MDL-34318-MOODLE_23_STABLE' of git://github.com/abgreeve/moodle into MOODLE_23_STABLE 2012-09-03 10:12:37 +12:00
Sam Hemelryk 9f66e64390 Merge branch 'MDL-30020c-23' of git://github.com/srynot4sale/moodle into MOODLE_23_STABLE 2012-09-03 09:52:20 +12:00
Mary Evans 47045e82b0 MDL-35180 theme_afterburner: fixes IE9 compatibility view bug 2012-09-02 16:00:29 +01:00
Petr Škoda e235de5ef5 MDL-34097 keep current requirements for Moodle 2.4 2012-09-02 11:53:45 +02:00
AMOS bot a49ea30654 Automatically generated installer lang files 2012-09-02 00:32:45 +00:00
Mary Evans f4f8cf9a2d MDL-35151 theme_anomaly: removed CSS selectors (.forumpost .content p) from style/general.php thus allowing YUI CSS to style paragraphs as normal. 2012-09-01 23:25:40 +01:00
Petr Škoda 9817f08400 MDL-35080 skip views and weird tables in mysql structure upgrades 2012-09-01 16:23:44 +02:00
Eric Merrill e0b818cde0 MDL-35171 formslib Updating date config array to fix problems with month jumping.
Based on https://bugs.php.net/bug.php?id=49115, if you request a month, but do not
specify a date, it will use your current date, which may be beyon a date in the month
requested, causing the return of the next month. This patch specifies the date (1st).
2012-09-01 10:14:51 -04:00
Petr Škoda 45f9c2db5f MDL-35145 add basic unit tests for delete_user() 2012-09-01 14:15:36 +02:00
Petr Škoda 3fe8ae9bb9 MDL-35145 add extra delete_user() parameter validation
We do not want to delete local admins and guest account, we need to validate the supplied parameter is valid $user record and refetch it from database.
2012-09-01 14:15:28 +02:00
Petr Škoda 58520c062d MDL-35168 fix yui combo path disclosure 2012-09-01 12:39:59 +02:00
Petr Škoda 0a898cbc46 MDL-35077 fix stats report navigation links 2012-08-31 14:17:45 +02:00
Eloy Lafuente (stronk7) 98157832bf weekly release 2.3.1+ 2012-08-31 11:35:54 +02:00
Eloy Lafuente (stronk7) 6e6f74da2f Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-08-31 11:27:25 +02:00
Eloy Lafuente (stronk7) 4c6b8659f9 MDL-35147 lesson qformat import: Dirty hack to support array questiontext structures. 2012-08-31 02:59:49 +02:00
Tim Hunt 5d22b22274 MDL-27818 question bank: multilang category names don't work. 2012-08-30 22:45:51 +01:00
Tim Hunt fd126f94aa MDL-35133 accesslib: context_module::get_context_name should format_string
Otherwise activites with multilang names are displayed badly.
2012-08-30 22:44:20 +01:00
Eloy Lafuente (stronk7) f1f174e2bf Merge branch 'MDL-35147_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-30 20:12:31 +02:00
Eloy Lafuente (stronk7) a1db53480c Merge branch 'MDL-31244_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-30 18:32:04 +02:00
Tim Hunt 5fe6d41245 MDL-35147 lesson: fix regression from MDL-25492.
I really wish someone would fix lesson to use the question bank.
2012-08-30 13:12:00 +01:00
sam marshall d6d63941d7 MDL-35141 Filelib: No icon for epub filetype 2012-08-30 12:20:44 +01:00
Ankit Agarwal 4d7a664ee7 MDL-26882 profile: Applying cap check (site:viewuseridentity) to email field in user profile 2012-08-30 15:36:26 +08:00
Ankit Agarwal 74c0b55029 MDL-26882 profile: Apllying the cap check site:viewuseridentity to user profile 2012-08-30 15:36:20 +08:00
David Monllao 21415acd5a MDL-35119 tool_assignmentupgrade Changing onsubmit form for onclick button 2012-08-30 15:01:17 +08:00
Adrian Greeve edd2686c8b MDL-32108 - navigation - After logging in the user is directed to mysite instead of site home.
Thanks to lurii Kucherov for this patch.
2012-08-30 11:58:14 +08:00
Aparup Banerjee bc67dfdb9a Merge branch 'MDL-35010_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-08-30 10:43:38 +08:00
Paul Nicholls 130dd42130 MDL-35134: course/format/weeks: remove trailing comma in object definition
IE doesn't like trailing commas in object (or array) definitions, and will cease processing JavaScript when it hits one.
2012-08-30 11:25:35 +12:00
Tim Hunt c8f9a0b63a MDL-29662 quiz overrides: update dates during course reset.
Also, fix duplicate SQL clause in similar code in lib,
and fix error when saving overrides.
2012-08-29 18:43:00 +01:00
Tim Hunt 3b5245cd6b MDL-33306 qtype multichoice: fix display of right answer.
Also, fix  higlighing of last edited question in the qeustion bank, when
it co-incides with a grey row.
2012-08-29 17:46:59 +01:00
David Mudrák 160133ce24 MDL-34725 Make the signatures of process_legacy_element() method consistent
The patch fixes the missing parameter type declaration in all subclasses
of the moodle1_workshopform_handler class.
2012-08-29 15:33:22 +02:00
Eloy Lafuente (stronk7) a51eaaac45 Merge branch 'wip-mdl-30121-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-08-29 12:15:14 +02:00
Eloy Lafuente (stronk7) 3afd86559e Merge branch 'wip-MDL-34290-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-08-29 12:11:22 +02:00
Aparup Banerjee accaf1d277 Merge branch 'wip-mdl-31623-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-08-29 16:57:09 +08:00
Aparup Banerjee fd3e329d94 Merge branch 'MDL-31959_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-29 15:33:43 +08:00
Aparup Banerjee 913dd6d630 Merge branch 'MDL-34952_23' of git://github.com/grabs/moodle into MOODLE_23_STABLE 2012-08-29 13:27:05 +08:00
Marina Glancy 074455a6f5 MDL-34290 repository_filesystem: do not store files in moodle filepool unless images 2012-08-29 13:12:07 +08:00
Dan Poltawski 7fa4cd1617 MDL-34290 using moodleform cast to int in dropbox repository settings 2012-08-29 13:12:07 +08:00
Marina Glancy 0707372b03 MDL-34290 Added timeout to googledocs request to download a file 2012-08-29 13:12:06 +08:00
Marina Glancy 3dce698981 MDL-34290, MDL-33416 prepare to deprecate fields files.referencelastsync and referencelifetime 2012-08-29 13:12:06 +08:00
Marina Glancy 29ea4e9c56 MDL-34290 Auto synchronise newly created references when possible 2012-08-29 13:12:06 +08:00
Marina Glancy a7f53f09f3 MDL-34665 Dropbox displays thumbnails and return info about file size and date last modified 2012-08-29 13:12:05 +08:00
Marina Glancy f8dea58be9 MDL-34290 remove class cache_file as not used
in fact we have moodle filepool that can work perfectly for caching files, no need to create new class and storage
2012-08-29 13:12:05 +08:00
Marina Glancy 56e41718da MDL-34290 repository_dropbox reference handling
- When Dropbox file is inserted by reference, the shared link is created and stored
- Added a function to fix old references (containing access_key/secret) with the proper ones
- Added support for external links in Dropbox (FILE_EXTERNAL), using the shared link API
- Make sure that repository::get_link() receives reference and not source (other repositories than Dropbox have those fields identical)
- Function get_file_by_reference respects request timeouts, downloads only images (for thumbnail generation),
- Function get_file respects request timeout
- do not use cache_file class (content is cached in moodle filepool if needed)
- added parameter for maximum size of files to cache
- added 'Manage' link for Filepicker
- added user name to
- added user name (if different from current) to 'Original' field
- added/corrected phpdocs
2012-08-29 13:12:04 +08:00
Marina Glancy 1d168fbd5f MDL-34290 oauthlib_helper support for POST request 2012-08-29 13:12:04 +08:00
Marina Glancy a6b0ac5362 MDL-34290 Allow to have several requests to the same instance of oauth_helper 2012-08-29 13:12:04 +08:00
Marina Glancy 120300fb99 MDL-34290 repository_equella: do not download files when not needed
repository_equella::get_file_by_reference respects request timeouts, downloads only images (for thumbnail generation),
does not use cache_file class (content is cached in moodle filepool if needed);
also repository_equella has counter of unsuccessfull connect attempts and do not perform any more if 3 failed
(within one request)
2012-08-29 13:12:03 +08:00
Marina Glancy a5fe04b62b MDL-34290 repository_boxnet, boxlib use request timeouts
boxlib receives additional argument as request timeout
repository_boxnet::get_file_by_reference respects request timeouts and downloads file into moodle only if it is image
also some improvements to repository_boxnet source display functions;
also do not cache result of request in retrieving of listing, user is unable to see the new files he added to box.
2012-08-29 13:12:03 +08:00
Marina Glancy 9001c7242e MDL-34290 repository API: add repository function to import referenced file
it must be independed from sync_external_file because sync often does not actually download contents, it is used just to retrieve
the size of the file. Besides the timeouts for get_file and sync requests are very different.

Also add option to send_stored_file() to ignore reference and send cached contents
2012-08-29 13:12:03 +08:00
Marina Glancy 22fa5d9a7c MDL-34290 repository_filesystem add original info function and reduce ref lifetime 2012-08-29 13:12:02 +08:00
Marina Glancy e53394ba0b MDL-34290 repository API: add timeout to get_file and throw exception
- get_file should have a request timeout and throw an exception with the details (i.e. timeout reached) if download can
not be completed
- corrected phpdocs
2012-08-29 13:12:02 +08:00
Marina Glancy 56e7d14f26 MDL-34290 repository API: do not confuse source and reference
make sure that repository function get_file_source_info receives as argument the source of the file,
and get_file receives a reference;
reference is a value of DB field files_reference.reference and result of get_file_reference(source).
Fix dropbox as the only repository that have different values in those fields;
also added information about user in dropbox reference and original
2012-08-29 13:12:01 +08:00
Marina Glancy c9fa5b1c05 MDL-34290 repository API: allow get_file_by_reference return only filesize
we want to allow repositories to perform quick synchronisation, without downloading the file. In this case they return
only filesize, without the contenthash
2012-08-29 13:12:01 +08:00
Marina Glancy 3af509d6d4 MDL-34290 class oauth_helper, added API to pass options to curl (such as timeout) 2012-08-29 13:12:01 +08:00
Marina Glancy 26aaa7e835 MDL-34290 update all references after the source is changed
- When several records in {files} have the same record in {files_reference} and the synchronisation is performed, we need to update
all records in {files} so all files know if source is changed and that sync was performed;
- also when local moodle file content is changed we immediately update all files referencing to it (therefore sync of references
to the local files is unnecessary);
2012-08-29 13:12:00 +08:00
Marina Glancy 2e0b5fef48 MDL-34290 curl class: add functions to return error code and to download one file 2012-08-29 13:12:00 +08:00
Eloy Lafuente (stronk7) f3d5fb4dec Merge branch 'MDL-29598_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-08-28 23:23:50 +02:00
David Mudrák 903d13c0c2 MDL-35109 Fix available_update_checker::cron_has_fresh_fetch()
For the purpose of cron based fetching, recently fetched data are valid
for 24 hours.
2012-08-28 22:56:18 +02:00
David Mudrák b0e5b3b63b MDL-35109 Improve unittests for cron based fetching of available updates
The expected behaviour is as follows:

* If the recently fetched data is older than 48 hours, it is considered
  as outdated and the new fetch is executed
* else, if the recently fetched data is younger than 24 hours, it is
  considered as fresh enough and no fetch is executed
* else, if the current time is after 01:00 AM plus a certain offset
  (which is randomly generated for each site), the fetch is
  executed.
2012-08-28 22:52:31 +02:00
Eloy Lafuente (stronk7) 5e143a271c Merge branch 'MDL-34250_23' of github.com:stronk7/moodle into MOODLE_23_STABLE 2012-08-28 20:44:49 +02:00
Eloy Lafuente (stronk7) ffbe597ef1 MDL-34250 navigation: Always look for correct parent context.
Conflicts:
	lib/navigationlib.php
2012-08-28 20:41:21 +02:00
Eloy Lafuente (stronk7) 56c5e1db1b MDL-25492 bb6 import: bump version after big changes. 2012-08-28 20:15:18 +02:00
Eloy Lafuente (stronk7) ed29fa1274 Merge branch 'MDL-25492_23' of git://github.com/jmvedrine/moodle into MOODLE_23_STABLE 2012-08-28 20:08:19 +02:00
Eloy Lafuente (stronk7) faf4ba4774 Merge branch 'MDL-34192_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-08-28 14:44:30 +02:00
Eloy Lafuente (stronk7) d8e6e58ec5 MDL-34192 mod_assign: prevent ambiguous column use for Oracle.
Credit goes to Raymond Antonio from NetSpot.
2012-08-28 14:18:54 +02:00
Aparup Banerjee 4eb3f12797 Merge branch 'MDL-31837_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-28 17:04:19 +08:00
Aparup Banerjee 6ec3ae6f14 Merge branch 'MDL-32464_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-28 16:54:31 +08:00
Adrian Greeve 339057063c MDL-34318 - blog - Removal of blog associations from the database on delete.
Thanks to Erik Lundberg for this patch.
2012-08-28 15:54:01 +08:00
Eloy Lafuente (stronk7) b884cf2a74 MDL-35089 conditionals: detected one place missing sectioncache
Thanks to MDL-34936 and unit tests this was discovered like 2 new
places calling to get_fast_modinfo() without the sectioncache
column contents. Potential performance problem, leading to
reseting and recalculation of caches all the time.
2012-08-28 01:41:41 +02:00
Aaron Barnes f0c1bcf5a2 MDL-30020 blocks/completion: Some criteria do not display complete
Also includes a spruce up of the code
2012-08-28 11:40:37 +12:00
Eloy Lafuente (stronk7) 3860f948af Merge branch 'MDL-34406_fullname_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-08-27 20:03:52 +02:00
Eloy Lafuente (stronk7) 9507653269 Merge branch 'MDL-34430_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 18:51:01 +02:00
Eloy Lafuente (stronk7) 79a6a832d7 Merge branch 'MDL-34993_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 18:35:54 +02:00
Eloy Lafuente (stronk7) eec3a5d48d Merge branch 'm23_MDL-34994' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-08-27 18:20:44 +02:00
Eloy Lafuente (stronk7) e9c306f10e Merge branch 'MDL-35026_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 17:54:20 +02:00
Eloy Lafuente (stronk7) b14d76c59f Merge branch 'MDL-35003_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 17:51:24 +02:00
Eloy Lafuente (stronk7) 8f93d94ab2 Merge branch 'MDL-35023_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 16:33:39 +02:00
Eloy Lafuente (stronk7) b6cd7017c0 Merge branch 'MDL-35038_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 16:25:30 +02:00
Eloy Lafuente (stronk7) f9033600cc Merge branch 'MDL-35048_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-08-27 16:20:37 +02:00
Eloy Lafuente (stronk7) 473285edde Merge branch 'MDL-35055_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-27 16:16:46 +02:00
Aparup Banerjee 48ee721e2f Merge branch 'MDL-31633-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-08-27 17:26:41 +08:00
Rajesh Taneja acff486664 MDl-34606 Administration: id for clear button is set properly, and disabled on page load 2012-08-27 15:15:29 +08:00
Aparup Banerjee 42122854fc Merge branch 'MDL-34936-MOODLE_23_STABLE-1' of git://github.com/andrewnicols/moodle into MOODLE_23_STABLE 2012-08-27 14:20:30 +08:00
Rajesh Taneja 339c954913 MDL-34537 Enrolments: Assign alternative odd and even class to manual enrol popup 2012-08-27 14:16:06 +08:00
Aparup Banerjee 7c3fa05126 Merge branch 'MDL-34996_23' of git://github.com/grabs/moodle into MOODLE_23_STABLE 2012-08-27 13:46:50 +08:00
AMOS bot 3342bb835c Automatically generated installer lang files 2012-08-27 00:32:46 +00:00
Aaron Barnes aac67f6384 MDL-32386 completion: Fix incorrect method parameters 2012-08-27 11:19:26 +12:00
Mary Evans b710f91ed9 MDL-35048 theme_formal_white: removed p {margin:0} from style/formal_white.css which was causing a regression in some areas of theme 2012-08-26 20:49:27 +01:00
Andreas Grabs 441fa9c71d MDL-34996 - Improve help text for Feedback dependancies 2012-08-24 23:07:17 +02:00
Andreas Grabs fdc57a14bd MDL-34952 - change get_info() to public access 2012-08-24 21:55:07 +02:00
Tim Hunt a129b76cc3 MDL-32464 qformat multianswer: fix missing include.
Also, add a sample file that can be used for testing, and add a unit
test to verify this is working.
2012-08-24 16:56:52 +01:00
Andrew Robert Nicols 409eab3510 MDL-34936 Warn if the sectioncache property is missing in a get_fast_modinfo call 2012-08-24 15:40:13 +01:00
Tim Hunt 4d0a7e2b1f MDL-35055 question import: slight error with the Match grades option.
Even in the 'Error if grade not listed case', it was applying a small
tolerance. In the case of a fuzzy match, it was returning the inexact
grade from the import file, rather than the precise grade that Moodle
was expecting.

That causes problems when the editing form is displayed, because the
value from the database does not match any of the available options, so
the grade is changed to 0%.
2012-08-24 15:37:38 +01:00
Jean-Michel Vedrine cc0188c21c MDL-25492 Blackboard V6+ question import is broken. 2012-08-24 13:52:05 +02:00
Ankit Agarwal 9fc95b6558 MDL-31633 grades: Fixing incorrect redirect when trying to edit grade letters from admin settings 2012-08-24 14:59:18 +08:00
Tim Lock e24b125a3a MDL-31623 Course: Course reset bypass modules, which are removed 2012-08-24 10:59:46 +08:00
Rajesh Taneja bdbdd72cdb MDL-30121 Assignment 2.2: Draft submission files will not be included in zip, if activity is open 2012-08-24 10:54:19 +08:00
David Monllao b7da14f1c6 MDL-29598 backup Avoid possible future duplicate grade letters
More info in restore_activity_grades_structure_step->process_grade_letter() comments
2012-08-24 08:55:37 +08:00
Justin Filip 44ec173ea8 MDL-29598 backup Check whether a grade_letters record exists before trying to insert a new record 2012-08-24 08:55:37 +08:00
Tim Hunt 6009d1a32e MDL-35038 quiz reports: clarify the API changes docs.
Also re-organise the file to put the most recent changes at the top.
2012-08-23 19:15:34 +01:00
M Kassaei 99aaad063e MDL-35038 quiz reports: document the API changes in 2.3. 2012-08-23 19:15:33 +01:00
Tim Hunt 765e7564cc MDL-35026 qtype multianswer: misnamed string.
AMOS BEGIN
 MOV [questionnadded,qtype_multianswer],[questionsadded,qtype_multianswer]
AMOS END
2012-08-23 19:15:15 +01:00
Tim Hunt 07eca71195 MDL-35023 qtype calculated: fix strict syntax problem. 2012-08-23 19:14:55 +01:00
Tim Hunt 872e445a48 MDL-35003 questions: remove stray full stop after correct answer.
In a few situations, this full stop makes things a bit more grammatical,
but there are many other situations where it causes problems. So, on
balance we will remove it.
2012-08-23 19:14:38 +01:00
Tim Hunt 7f8d657531 MDL-34993 questions: convert numeric fields to float on load.
NUMBER(X,Y) typically come back from the DB as strings. If you don't
convert them to float, then when you display them, it appears as
1.0000000, which is not normally what you want.

Also, increase the size of the field on the edit form, so if you
question does have default mark 0.1234567, you can see that!
2012-08-23 19:14:19 +01:00
Tim Hunt ff43c30f0a MDL-31837 numerical tolerance: better handling of very small tolerances.
The changes between Moodle 1.9 and 2.1 made the marking of very small
answers like 10^-20 almost impossible. This change fixes it.

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

1. Copy and paste of unified diffs.

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

This fix detects these two cases, and just stops the algebra filter from
replacing them.
2012-08-23 18:58:57 +01:00
Eloy Lafuente (stronk7) bac15e5782 weekly release 2.3.1+ 2012-08-23 19:25:40 +02:00
Eloy Lafuente (stronk7) 3330b54c2c Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-08-23 19:18:40 +02:00
Andrew Davis 78c2fa5cab MDL-30022 message: made the messaging history display code able to deal with multiple messages with the same timecreated value 2012-08-23 11:56:05 +08:00
AMOS bot 23bb88d28d Automatically generated installer lang files 2012-08-23 00:34:21 +00:00
Eloy Lafuente (stronk7) 4b7b1aae4d MDL-31957 Course reset: Add missing global 2012-08-23 02:12:39 +02:00
Tim Hunt 49e77191cc MDL-34430 qtype essay: upgrade from MDL-31393 needs a progress bar. 2012-08-22 22:15:36 +01:00
Jean-Michel Vedrine 9832fde1c0 MDL-34738 fix for the problem found during testing : dat files not accepted on some servers 2012-08-22 16:38:08 +02:00
Eloy Lafuente (stronk7) 364666f371 Merge branch 'MDL-34444' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-22 11:14:38 +02:00
Dan Poltawski e1269d87d4 MDL-34444 - actually display the title, just don't link it..
Don't worry, i'm going on holiday, so i'll be away from this git repo
for a while to prevent any more mess.
2012-08-22 17:10:38 +08:00
Eloy Lafuente (stronk7) a701525345 Merge branch 'MDL-34444' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-22 10:49:30 +02:00
Dan Poltawski ccce6a7e33 MDL-34444 course - don't show to 'unavaibile' sections title
Instead we just show the availability info in the index page,
this makes the navigation etc much simpler.
2012-08-22 16:40:43 +08:00
Dan Poltawski 29beeefc70 Revert "MDL-34444 course: show section availability info"
Turns out this change was just wrong, we shouldn't be allowing linking
to unaavilable sections. Just show the availability information on the
'index page'

This reverts commit 87a31bb5d8.
2012-08-22 16:37:36 +08:00
Eloy Lafuente (stronk7) 996e735693 MDL-35010 availability: fix sometimes missing fieldset 2012-08-22 09:47:44 +02:00
Eloy Lafuente (stronk7) 6c475847fb Merge branch 'MDL-34444' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-22 08:40:02 +02:00
Dan Poltawski 363b35f221 Merge branch 'w34_MDL-34864_m23_enrolcat' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-22 14:28:03 +08:00
Petr Škoda f813d99296 MDL-34864 fix role names regression 2012-08-22 08:08:24 +02:00
Dan Poltawski e03a03a4a9 Merge branch 'MDL-35000_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-22 10:32:01 +08:00
Dan Poltawski a4241511ed MDL-34870 enrol_cohort - don't need to do useless work 2012-08-22 10:03:10 +08:00
Dan Poltawski fb4e6948d0 Merge branch 'MDL-34870_23' of git://github.com/aolley/moodle into MOODLE_23_STABLE 2012-08-22 09:52:58 +08:00
Dan Poltawski 70dc5add7d Merge branch 'MDL-34733_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-22 09:16:18 +08:00
Eloy Lafuente (stronk7) f16751f856 Merge branch 'wip-mdl-32759-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-08-22 02:34:04 +02:00
Eloy Lafuente (stronk7) 69be24a776 Merge branch 'MDL-34702_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-22 02:11:07 +02:00
Eloy Lafuente (stronk7) b74390e38b Merge branch 'MDL-34795-23' of git://github.com/srynot4sale/moodle into MOODLE_23_STABLE 2012-08-22 02:05:17 +02:00
Eloy Lafuente (stronk7) e464af4462 Merge branch 'w34_MDL-34864_m23_enrolcat' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-22 01:58:35 +02:00
Eloy Lafuente (stronk7) ea438c8d7b Merge branch 'w34_MDL-34776_m23_notinsql' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-22 01:56:06 +02:00
Eloy Lafuente (stronk7) bae745aa57 MDL-34866 whitespace fix 2012-08-22 01:50:53 +02:00
Eloy Lafuente (stronk7) 0547143fad Merge branch 'MDL-34866_23' of git://github.com/rlorenzo/moodle into MOODLE_23_STABLE 2012-08-22 01:50:19 +02:00
Dan Marsden 2b062ed6a6 MDL-34994 mod_choice: fix restore of user responses - use correct optionid 2012-08-22 09:04:35 +12:00
Eloy Lafuente (stronk7) 864ca7d700 Merge branch 'w34_MDL-34893_m23_phpunitparams' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-21 21:18:44 +02:00
Tim Hunt fa0ed51c0a MDL-35000 quiz: Complete activity report broken by bad require.
Fix the stupid error that caused this. Also, make all the other
require_once calls in the file consistent.
2012-08-21 18:03:14 +01:00
Tim Hunt d7b7aff004 MDL-34733 quiz 'secure' mode: finish review link broken in previews
Here, we use a nasty hack to fix the problem on stable branches without
an API change.
2012-08-21 12:05:52 +01:00
Juho Viitasalo 1923720566 Changed two notification to output correctly 2012-08-21 15:36:34 +08:00
Dan Poltawski 5a566ceac7 Merge branch 'MDL-34691_assign_overdue_by_23' of https://github.com/SWiT/moodle into MOODLE_23_STABLE 2012-08-21 14:37:10 +08:00
Dan Poltawski 82157094e5 Merge branch 'MDL-32705_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-21 12:37:54 +08:00
Dan Poltawski 115ad6cc9e Merge branch 'MDL-34569_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-21 12:35:14 +08:00
Eric Merrill 35870a76db MDL-34363 gradebook Adding check to prevent incorrect override when a blank feedback is submitted. 2012-08-21 00:26:55 -04:00
Dan Poltawski f6376dcbae Merge branch 'w34_MDL-34901_m23_useraccess' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-21 12:02:25 +08:00
Dan Poltawski ed22220593 Merge branch 'MDL-34742-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-21 11:59:30 +08:00
Dan Poltawski 8172f3b2d3 MDL-34808 qformat_examview - increment version 2012-08-21 11:05:58 +08:00
Dan Poltawski b02734b77d Merge branch 'MDL-34808_23' of git://github.com/jmvedrine/moodle into MOODLE_23_STABLE 2012-08-21 11:00:49 +08:00
Raymond Wijaya 8c74ab8623 MDL-34887: Add hyperlinks to names in the Assignment's grading table 2012-08-21 10:58:09 +08:00
David Monllao b16b42e9e2 MDL-31496 mod_data Replacing inline styles for CSS classes in templates and browse view 2012-08-21 10:49:03 +08:00
David Monllao d1e338c98b MDL-31496 mod_data Replacing inline styles for CSS classes in text inputs 2012-08-21 10:49:03 +08:00
David Monllao 108dd3376c MDL-31496 mod_data Replacing inline styles for CSS classes in search containers 2012-08-21 10:49:03 +08:00
David Monllao a415852d2b MDL-31496 mod_data Replacing inline styles for CSS classes in textarea elements 2012-08-21 10:49:03 +08:00
Dan Poltawski b747690361 MDL-34738 qformat_blackboard - increment version number 2012-08-21 09:55:50 +08:00
Dan Poltawski d73f22d94e Merge branch 'MDL-34738_23' of git://github.com/jmvedrine/moodle into MOODLE_23_STABLE 2012-08-21 09:42:12 +08:00
Eloy Lafuente (stronk7) 181884b480 Merge branch 'MDL-34941-MOODLE_23_STABLE' of https://github.com/mouneyrac/moodle into MOODLE_23_STABLE 2012-08-21 02:43:10 +02:00
Eloy Lafuente (stronk7) 9b7738c8fb Merge branch 'w34_MDL-34912_m23_description' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-21 02:39:58 +02:00
Eloy Lafuente (stronk7) a130109013 Merge branch 'MDL-34889_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-21 02:25:28 +02:00
Eloy Lafuente (stronk7) ac97fc2122 Merge branch 'MDL-34810_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-21 01:36:36 +02:00
Eloy Lafuente (stronk7) 9da82e9ba3 Merge branch 'MDL-29847_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-21 01:28:50 +02:00
Eloy Lafuente (stronk7) 0c6800e771 Merge branch 'MDL-31957-m23' of git://github.com/sammarshallou/moodle into MOODLE_23_STABLE 2012-08-21 01:23:05 +02:00
Eric Merrill 2d0a11ee94 MDL-34985 gradebook Fixing issue where default parent in Full View Add Category could be inconsistent.
Turns out the correct default was already computed, but was not being applied to the setting.
2012-08-20 17:13:10 -04:00
Eloy Lafuente (stronk7) 3dd2dce1cb Merge branch 'w34_MDL-34959_m23_gmapsv3' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-20 20:30:27 +02:00
Eloy Lafuente (stronk7) 1c5f24e089 Merge branch 'w34_MDL-34868_m23_gmapsv2' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-20 20:18:03 +02:00
Eloy Lafuente (stronk7) 331d346e8f Merge branch 'MDL-34756-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-20 16:35:20 +02:00
Eloy Lafuente (stronk7) 8ee474b89e Merge branch 'MDL-28531-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-20 16:28:21 +02:00
Jason Ilicic 3f7df55d1c MDL-34529: Fixed ordering of course sections when performing import/restore by adding the sort parameter. 2012-08-20 14:00:26 +02:00
Nathan Mares c6d7689621 MDL-34372: Fix query in backup_cron_helper so it works on Postgres 8.3
Amended by stronk7@moodle.org to use uppercase SQL keywords.
2012-08-20 13:28:37 +02:00
Jean-Michel Vedrine 2e941f3356 MDL-34808 load sample xml file from fixtures in tests 2012-08-20 10:47:31 +02:00
Dan Poltawski bab65024ad Merge branch 'MDL-33362-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-08-20 16:01:21 +08:00
Dan Poltawski dcf82e6079 Merge branch 'MDL-34779-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-08-20 15:59:00 +08:00
Jean-Michel Vedrine f3ad0ed27d MDL-34738 load sample dat file in tests 2012-08-20 09:52:53 +02:00
Michael de Raadt b8cc020064 MDL-34779 settings: Updating lang string corrposnding to the fullnamedisplay setting 2012-08-20 15:44:42 +08:00
Dan Poltawski fc08030d8e Merge branch 'w34_MDL-34873_m23_tagstrict' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-20 15:21:26 +08:00
Dan Poltawski 21fcca106d Merge branch 'MDL-34957_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-08-20 14:23:28 +08:00
Dan Poltawski 7bb562cdf0 Merge branch 'MDL-34937_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-20 14:19:30 +08:00
Raymond Wijaya ae21b71925 MDL-34377: Fix: assignments overview page shows a unset due date as Epoch and counts draft submissions 2012-08-20 14:11:59 +08:00
Ankit Agarwal 9ff0c0bb84 MDL-33362 book: Parse links to book modules from 1.9 backups 2012-08-20 12:59:19 +08:00
Dan Poltawski 0ec0602415 Merge branch 'MDL-34535-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-08-20 12:06:56 +08:00
Dan Poltawski e013292e25 Merge branch 'wip-MDL-31810-stable23' of git://github.com/phalacee/moodle into MOODLE_23_STABLE 2012-08-20 12:01:32 +08:00
Dan Poltawski f6aabcf0ed Merge branch 'wip-mdl-31734-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-08-20 11:57:21 +08:00
Dan Poltawski 67f0e8fe87 Merge branch 'MDL-30405-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-20 11:39:59 +08:00
Dan Poltawski 854bec4500 Merge branch 'MDL-30370_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-08-20 11:22:26 +08:00
Frederic Massart 70746c433c MDL-34756 Unit Tests: Move backup helper tests 2012-08-20 10:26:16 +08:00
Andrew Davis 39e39bd437 MDL-34406 message: removed an unnecessary string creation 2012-08-20 10:13:53 +08:00
Petr Škoda db6842cca3 MDL-34893 use standard options in Hint_ResultPrinter
This is a very nasty hack!
2012-08-19 22:10:37 +02:00
Petr Škoda 7e84ef4fea MDL-34959 add Google Maps API V3 support 2012-08-19 19:53:06 +02:00
Petr Škoda 778947cd65 MDL-34868 update deprecated Google maps API V2 key info 2012-08-19 18:21:37 +02:00
Jean-Michel Vedrine 1ff3389a54 MDL-34808 qformat examview Add phpunit tests to examview import format 2012-08-19 16:35:21 +02:00
Petr Škoda cf1cb68662 MDL-34901 fix user login times handling 2012-08-19 15:33:59 +02:00
Petr Škoda 123f7f534e MDL-34873 fix multiple E_STRICT tag related problems 2012-08-19 11:19:48 +02:00
Mary Evans c74b1ee8d9 MDL-34957 theme_base: made small change to custommenu CSS in style/core.css to fix vertical arrow overlap in menu item 2012-08-19 01:45:34 +01:00
AMOS bot 9fe39511e2 Automatically generated installer lang files 2012-08-19 00:31:36 +00:00
Petr Škoda 245197ee2d MDL-34864 bump up enrol category sync version 2012-08-18 11:48:05 +02:00
Petr Škoda 3c50224079 MDL-34864 add enrol_category unit tests for sync 2012-08-18 11:47:58 +02:00
Petr Škoda 259aecb26b MDL-34864 improve enrol_category phpdocs 2012-08-18 11:47:47 +02:00
Petr Škoda a2043a3168 MDL-34864 add verbose option to CLI enrol_category sync 2012-08-18 11:39:42 +02:00
Petr Škoda 3d7f23c5e9 MDL-34864 improve enrol_category sync performance 2012-08-18 11:39:42 +02:00
Jean-Michel Vedrine 8a8dd7d8c8 MDL-34738 qformat blackboard: blackboard format is broken 2012-08-18 10:55:26 +02:00
Petr Škoda e3a5ed9dd7 MDL-34776 improve multiple "NOT IN" enrolment and role related queries 2012-08-18 09:57:02 +02:00
Petr Škoda 71a03114e0 MDL-34912 fix invalid descriptionformat default handling 2012-08-18 09:53:03 +02:00
Tim Hunt 3e6b27698d MDL-29847 question preview: garbage collect old preview data.
This adds cron code which looks for question previews that have not been
touched for more than 24 hours, and deletes them.

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

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

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

Sadly, to make this work on MySQL, we require a horrible hack in the
already hacky delete_usage_records_for_mysql function.
2012-08-17 10:53:13 +01:00
sam marshall 40f6697f2e MDL-31957 Course reset: Does not erase activity completion data 2012-08-17 10:39:38 +01:00
Jerome Mouneyrac 7a4f9ba8e0 MDL-34941 correct timestamp range: startdate of external fct create_course PHPunit test 2012-08-17 16:15:56 +08:00
Frederic Massart d190fcd9d9 MDL-28531 Unit Tests: Fixed tests to work with core update 2012-08-17 14:45:03 +08:00
Frederic Massart 68576ef61d MDL-28531 Backup: Automated backups run when they are scheduled 2012-08-17 14:45:03 +08:00
Frederic Massart bc2289cd52 MDL-34648 Chat: No more errors when sentence begin with 'To' 2012-08-17 14:44:53 +08:00
Matt Meisberger 054bcf69f6 MDL-34742 - adding ability to move blocks into empty column 2012-08-17 14:44:23 +08:00
Rajesh Taneja a645f67aa5 MDL-31734 Course: removed unused sectiontitle string 2012-08-17 14:33:40 +08:00
Rajesh Taneja bf821575ec MDL-26492 Lesson: lesson_get_user_grades will return grade of all users if userid=0 2012-08-17 14:30:39 +08:00
Rossiani Wijaya 01dbe1fdad MDL-34569 - add label for search wiki input text 2012-08-17 11:33:40 +08:00
Rossiani Wijaya 93dbb62f45 MDL-34569 accessibility compliance for wiki module: Add label for input text and select tag 2012-08-17 11:14:03 +08:00
AMOS bot 16254fffc8 Automatically generated installer lang files 2012-08-17 00:31:50 +00:00
Tim Hunt 20d4ab97c0 MDL-34937 quiz responses reports: attempt grade not shown. 2012-08-16 21:35:44 +01:00
Tim Hunt d1755c12a0 MDL-34702 quiz DB: questiondecimalpoints has wrong default.
Thanks to the folks at UCL for tracking down this problem. It has only
hidden for 2+ years!
2012-08-16 17:35:16 +01:00
Tim Hunt 6247d0a82c MDL-34889 phpunit: progress output in util.php --drop.
It is slow for me, and it is nice to know that something is going on.
2012-08-16 17:00:25 +01:00
Tim Hunt 423030e7dc MDL-34810 question bank: user prefs for some display options
The options that are remembered persistently are
* Also show questions from sub-categories
* Also show old questions
* Show question text in the question list
* Number of questions per page
2012-08-16 16:59:59 +01:00
Eloy Lafuente (stronk7) 7033316dad weekly release 2.3.1+ 2012-08-16 17:26:25 +02:00
Eloy Lafuente (stronk7) 90231b24df Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-08-16 17:22:01 +02:00
Eric Merrill 5c57df4c9d MDL-34376 mod_assign Fixing flaw in previous commit with not defining . 2012-08-16 10:07:31 -04:00
sam marshall 1d075eadd9 MDL-34446 Fix bugs in previous commit 2012-08-16 14:48:15 +08:00
Rossiani Wijaya dc5d4f435a MDL-34563 - change string firstname to lastname and add accesshide class 2012-08-16 14:18:04 +08:00
Rossiani Wijaya 8309268b42 MDL-34563 - removed double labeling and add label for input text 2012-08-16 14:17:50 +08:00
Aparup Banerjee 19ab59bcc0 Merge branch 'MDL-34565_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-16 11:51:35 +08:00
Jason Fowler 44d24d1297 MDL-31810 - Fixing unclosed DIV tags throughout Moodle 2012-08-16 10:43:29 +08:00
Tim Hunt c4f0004a0a MDL-32705 backup ui: add select all/none JavaScript on schema screens 2012-08-15 18:10:45 +01:00
Dan Poltawski cfebb1a538 Merge branch 'MDL-34905_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-15 17:54:02 +08:00
Tim Hunt 2a077c0d1b MDL-34905 quiz: missing global $DB;
This code normally only runs when JS is disabled, which is why this was
not noticed before.
2012-08-15 10:32:56 +01:00
David Monllao 25e77f4f73 MDL-30370 mod_forum - Removing duplicate seleted field in the DB query
Credit to Iñigo Zendegi
2012-08-15 17:02:43 +08:00
Rossiani Wijaya 829f5e876a MDL-34565 - remove duplicate labeling 2012-08-15 16:24:14 +08:00
Damyon Wiese 9bdc95b702 MDL-34583: Assignment upgrade loses comments from onlinetext and offline assignment types. 2012-08-15 03:36:51 +02:00
Eloy Lafuente (stronk7) 4ee439dbc2 Merge branch 'MDL-34862_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-15 03:32:44 +02:00
Eloy Lafuente (stronk7) 91986f84c2 Merge branch 'MDL-34539' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-15 03:23:57 +02:00
Eloy Lafuente (stronk7) e154c1b6da Merge branch 'MDL-34885_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-15 03:16:39 +02:00
AMOS bot 9bf629bb64 Automatically generated installer lang files 2012-08-15 00:31:33 +00:00
Eloy Lafuente (stronk7) 833e135533 Merge branch 'MDL-25347_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-08-15 02:04:10 +02:00
Sam Hemelryk 36e6961fa4 Merge branch 'MDL-33640_23' of git://github.com/MaxThrax/moodle into MOODLE_23_STABLE 2012-08-15 11:48:27 +12:00
Sam Hemelryk a9c8c1c951 Merge branch 'MDL-33531_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-08-15 11:22:08 +12:00
Dan Poltawski 02d8fb146d MDL-29192 - clarify email_to_user call 2012-08-15 01:17:32 +02:00
Eloy Lafuente (stronk7) 6c20303ee1 Merge branch 'w33_MDL-34782_m23_mysqlunsigned' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-14 23:10:24 +02:00
Eloy Lafuente (stronk7) 12445b37fc Merge branch 'MDL-34829' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-14 22:55:56 +02:00
Eloy Lafuente (stronk7) 428b30ce5e Merge branch 'MDL-34783-MOODLE_23_STABLE-1' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-08-14 22:45:34 +02:00
Rex Lorenzo 90c510cf9d MDL-34866 - Make "course display" default a site configurable option
* Moved COURSE_DISPLAY_SINGLEPAGE and COURSE_DISPLAY_MULTIPAGE constants from courselib to moodlelib.php
* Using course display constants in course default admin setting page
2012-08-14 12:12:47 -07:00
Tim Hunt ba338db5b5 MDL-34885 phpunit: better cygwin detection.
For some reason, on my computer, $_SERVER['SHELL'] was not set, so I
changed the test to also consider $_SERVER['TERM']. This now works for
me.
2012-08-14 14:12:06 +01:00
Aparup Banerjee 38ace2266f Merge branch 'wip-MDL-34748-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-08-14 15:30:03 +08:00
Ankit Agarwal 8e017950e9 MDL-34535 message: userto should use is_number instead of is_init 2012-08-14 14:42:11 +08:00
Aparup Banerjee 69e0f5049f Merge branch 'MDL-34563_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-14 14:34:43 +08:00
Rossiani Wijaya 1f65a01980 MDL-34563 - change plural strings and removed colon for accesshide label 2012-08-14 13:58:23 +08:00
Aparup Banerjee 37fbfb0dda Merge branch 'MDL-34565_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-14 13:53:34 +08:00
Dan Poltawski b92d962c3f Merge branch 'MDL-34728_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-14 13:33:08 +08:00
Dan Poltawski 9a77ed006f Merge branch 'MDL-34793_m23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-08-14 13:25:38 +08:00
Eric Merrill 2a5378d2c6 MDL-34793 mod_assign Fix rendering error that causes student view to break in some cases.
When feedback is switched on for a assignment, and the teacher enters a grade through the gradebook, the student
view would become broken, throwing a coding error. Added check that $status->grade is not empty before passing
to assign_feedback_XXX::is_empty(), as that function expects an object.
2012-08-14 00:40:55 -04:00
Adam Olley 6353a60ed3 MDL-34870: Prevent cohort enrol sync when updating course record 2012-08-14 13:58:41 +09:30
Dan Poltawski e85500a8bf Merge branch 'MDL-34807_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-14 12:08:04 +08:00
Rajesh Taneja d54294de34 MDL-32759 Assignment: Grades will not be scaled for new assignment module, and added warning message for user 2012-08-14 11:40:18 +08:00
Rajesh Taneja b5cbe52bfc MDL-32759 Assignment 2.2: Changing grade for existing assignments will show warning that grades will not be scaled 2012-08-14 11:40:18 +08:00
Dan Poltawski 894446f7fd MDL-34539 course - allow negative section numbers
This gives course format authors more flexibility.

Thanks to Itamar Tzadok for the suggestion.
2012-08-14 11:34:19 +08:00
Rex Lorenzo 5b918d0101 MDL-34866 - Make "course display" default a site configurable option 2012-08-13 16:26:01 -07:00
Aaron Barnes 25e107e5a2 MDL-34795 completion: Add course_completed event 2012-08-14 10:16:40 +12:00
Tim Hunt 94dd25e03b MDL-34862 question preview: improve preview ownership check.
Users should only be able to access their own quetion preview. In the
past, for reasons I can no longer remember, this was enforced
using the session. It is much better to set the question_usage to belong
to the user's context.
2012-08-13 17:44:17 +01:00
Tim Hunt 0a571db22b MDL-34807 question bank: navigation loses place.
The symptom is that where we are now is not shown in the settings
navigation. However, the underlying cause is that question/edit.php is
doing some crazy thing of its own to build $PAGE->url, rather than using
the one returned by question_edit_setup.

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

The existing form JS was so well encapsulated that this was impossible.
This change pokes a hole in the encapsulation, and provides an API
    M.form.updateFormState(formid);
that other bits of JS code can call when necessary.
2012-08-13 11:19:01 +01:00
Rossiani Wijaya ee53ceb3eb MDL-34563 accessibility compliance for data module: Add forform input text and select tag 2012-08-13 15:13:54 +08:00
Rossiani Wijaya 33222ed24a MDL-34565: change to plural strings 2012-08-13 15:12:00 +08:00
Rossiani Wijaya 37102468f7 MDL-34565 accessibility compliance for forum module: Add forform input text and select tag 2012-08-13 15:12:00 +08:00
Marina Glancy ff21775823 MDL-34748 repository_filesystem: Sort files by title by default 2012-08-13 11:57:55 +08:00
sam marshall c5cf1bc090 MDL-34446 Completion report: Add sideways text support to more browsers 2012-08-13 10:44:28 +08:00
Dan Poltawski 78a4cef1e7 Merge branch 'MDL-34376_m23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-08-13 10:33:16 +08:00
Dan Poltawski abef93f5c9 Merge branch 'MDL-34835_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-08-13 10:20:27 +08:00
Dan Poltawski a572657497 Merge branch 'MDL-34543_m23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-08-13 10:03:47 +08:00
AMOS bot d077d1a024 Automatically generated installer lang files 2012-08-11 00:31:30 +00:00
Mary Evans d8ceb62387 MDL-34835 theme_fusion: fixed displaced navbar by extending #region-header.inside bottom margin by 70px in style/pagelayout.css 2012-08-10 20:31:57 +01:00
Petr Škoda bd3306f5cd MDL-34782 detect code abusing integer limits in mysql database
It is allowed to store only ranges specified in install.xml, for integers it means number of digits specified in size.
2012-08-10 10:20:27 +02:00
Dan Poltawski ef38e70c41 MDL-34829 course - allow directly linked sections to work.
Even if not in single section mode.
2012-08-10 14:19:45 +08:00
David Monllao 15343304d2 MDL-25347 blog Checking association capability at course and module levels instead of system level 2012-08-10 08:48:57 +08:00
David Monllao 3de32f8558 MDL-33531 backup Added format_string to course shortname 2012-08-10 08:40:18 +08:00
David Monllao 4af5c4ebf5 MDL-33531 backup Avoiding possible Notice 2012-08-10 08:40:18 +08:00
Lorenzo Nicora 203e8d4032 MDL-33531 Fixed the regexp to find old backup files, considering backup_shortname backup option 2012-08-10 08:40:18 +08:00
AMOS bot e9a743d385 Automatically generated installer lang files 2012-08-10 00:31:47 +00:00
Eloy Lafuente (stronk7) e6aac11d94 weekly release 2.3.1+ 2012-08-09 20:51:56 +02:00
Eloy Lafuente (stronk7) 8ff9b91e9f Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-08-09 20:46:02 +02:00
Tim Hunt 4c0d64860a MDL-34590 javascript-static: nuclear option in openpopup
I think we have finally tamed Chrome on all platforms. (Crosses fingers.)
2012-08-09 17:17:36 +02:00
AMOS bot 081889f26b Automatically generated installer lang files 2012-08-09 00:31:36 +00:00
Paul Nicholls 55c91c8760 MDL-33640 - change $templatesinitialized to an array; improve naming and automate use of template
* $templatesinitialized is now an array, so that subsequent calls to initialise_filepicker which request different repositories will include those (and only those) templates which it requires but have not yet been included
* The get_template method has also been renamed to get_upload_template (and the template to "uploadform_" followed by the repository type), since it only applies to upload forms
* If a plugin provides a get_upload_template method, the template it returns will now automatically be used instead of the standard uploadform template when generating an upload form
2012-08-09 09:43:53 +12:00
Eric Merrill 383639a5ef MDL-34376 mod_assign Omit assigns with no due date from print_overview.
Modify assign_print_overview to omit assigns that have no due date set, in line with behaviour
in 2.2 and other tools.
2012-08-08 10:05:19 -04:00
Andrew Robert Nicols 55a2b03ef1 MDL-34783 Retrieve the sectioncache parameter for enrolled courses in the course_overview block
The sectioncache field is used by course_modinfo and without it, the
modinfo cache is repeatedly reset.
2012-08-08 10:54:24 +01:00
Dan Poltawski f37cd67ded Merge branch 'MDL-34575_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-08 12:33:40 +08:00
Paul Nicholls c258605a8d MDL-33640 - Add ability to use custom filepicker templates
Allow repository plugins to register a template by defining a get_template() method, coupled with the ability to request the template be used by create_upload_form() instead of the standard 'uploadform' template.  The template is automatically registered using the plugin's name, and core templates will override any which clash; this also means that a theme can override these templates in a custom renderer if it wants to.
2012-08-08 15:54:42 +12:00
Rossiani Wijaya 25f8e4f241 MDL-34575: fixed string typo and string duplication for label 2012-08-08 11:37:40 +08:00
Dan Marsden 8dc49e14c4 MDL-34656 prevent login form from being shown inside iframe - also prevent wantsurl from being set to loadsco.php which isn't a valid page for initial load. 2012-08-08 02:00:23 +02:00
Eloy Lafuente (stronk7) 7abe8c31a6 Merge branch 'MDL-34704_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-08 01:53:22 +02:00
Eloy Lafuente (stronk7) 02d6791d05 Merge branch 'wip-mdl-30792-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-08-08 01:00:54 +02:00
Charles Fulton ed10bfb2b0 MDL-32023 wiki: remove hard-coded edit string 2012-08-08 00:29:07 +02:00
Charles Fulton c86262ed73 MDL-29129 wiki: fix a hardcoded string 2012-08-07 23:59:17 +02:00
Eric Merrill 4c60068485 MDL-34543 mod_assign Fixing problem where previous feedback does not populate when you re-enter the grading view. add_plugin_grade_elements() was expecting grade object, but was being given grade string. 2012-08-07 10:21:28 -04:00
Tim Hunt 57f9291b23 MDL-34727 restore UI: use checkboxes for userdata.
It was using select menus for the convenience of the code, but the
inconvenience of users.

The way this fix is done is a bit hacky, but it works, makes users'
lives much better, but it would be good if someone would dehackify
this in the future.
2012-08-07 11:38:41 +01:00
Aparup Banerjee e203643539 Merge branch 'm23_MDL-33942' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-08-07 15:58:25 +08:00
Aparup Banerjee 5b74170932 Merge branch 'MDL-34566_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-07 15:07:51 +08:00
Aparup Banerjee 16daaa05b6 Merge branch 'MDL-34564_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-07 14:57:54 +08:00
Aparup Banerjee b21388d6db Merge branch 'MDL-34560_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-07 14:45:46 +08:00
Aparup Banerjee 16a8d4d4ba Merge branch 'MDL-34559_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-07 14:37:05 +08:00
Aparup Banerjee e83629096b Revert "Merge branch 'MDL-28531-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE"
This reverts commit 162510801f, reversing
changes made to 5af69f5282.
2012-08-07 14:27:55 +08:00
Aparup Banerjee 162510801f Merge branch 'MDL-28531-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-07 13:58:15 +08:00
Rossiani Wijaya 74b83c18fb MDL-34559: removing accesshide class 2012-08-07 13:36:43 +08:00
Aparup Banerjee 5af69f5282 Merge branch 'MDL-34715-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-07 10:42:11 +08:00
Dan Poltawski ec28569e5c Merge branch 'MDL-34562_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-07 10:16:50 +08:00
Dan Poltawski 1089612634 Merge branch 'MDL-34567_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-07 10:03:18 +08:00
Aparup Banerjee 04e428f9ae Merge branch 'MDL-22663-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-07 10:00:49 +08:00
Aparup Banerjee b418329b7d Merge branch 'MDL-33022' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-07 09:23:48 +08:00
Dan Poltawski 6f74e5b2f6 Merge branch 'wip-MDL-34669-MOODLE_23_STABLE' of git://github.com/marinaglancy/moodle into MOODLE_23_STABLE 2012-08-07 08:48:38 +08:00
Dan Poltawski ebc5b65ab3 MDL-34600 upgrade.php - fix trailing whitespace 2012-08-07 08:43:07 +08:00
Petr Škoda b97532dd8e MDL-34600 fix question table to match install.xml
The oldquestiontextformat was used during previous upgrade and is not necessary any more.
Next time we should add these temporary upgrade columns to install.xml files.
2012-08-07 08:43:06 +08:00
AMOS bot d8ff3aae9f Automatically generated installer lang files 2012-08-07 00:31:55 +00:00
Tomasz Muras 9881439068 MDL-31753 Get correct course ID for Community finder search link. 2012-08-07 02:13:44 +02:00
Eloy Lafuente (stronk7) 9064a9af71 Merge branch 'w32_MDL-34601_m23_wikischema' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-06 21:16:50 +02:00
Kirill Astashov 5f2f276f82 MDL-34669: Fix editor filepicker context bt trying to use page context 2012-08-06 16:58:44 +08:00
Aparup Banerjee 1e778228a8 Merge branch 'MDL-31599-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-06 16:43:55 +08:00
Aparup Banerjee b42abe0ffc Merge branch 'MDL-34716' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-08-06 16:38:04 +08:00
Rossiani Wijaya 2ab9801b19 MDL-34562 accessibility compliance for chat module: Add <label> for input text and select tag 2012-08-06 16:26:28 +08:00
Dan Poltawski f70df26e40 Merge branch 'MDL-34561_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-06 15:49:12 +08:00
Rossiani Wijaya ac1bbfa1cd MDL-34561 accessibility compliance for assignment module: add accesshide class 2012-08-06 15:07:52 +08:00
Dan Poltawski 6faa04b522 Merge branch 'MDL-34707_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-06 14:42:13 +08:00
Charles Fulton cf162f9332 MDL-34629 wiki: convert default format value during restore 2012-08-06 14:19:45 +08:00
Dan Poltawski e0a555a3a3 Merge branch 'MDL-34561_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-06 14:08:54 +08:00
Dan Poltawski 0e5acac2d8 Merge branch 'MDL-25983_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-08-06 13:52:55 +08:00
Dan Poltawski efff50c096 Merge branch 'MDL-34259-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-06 12:21:41 +08:00
Dan Poltawski e1bc047bdb Merge branch 'MDL-34574_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-06 12:12:29 +08:00
Dan Poltawski ea22072a62 MDL-34575 lang/notes: reorder string to be alphabetical 2012-08-06 12:09:07 +08:00
Dan Poltawski 824dfb24bd Merge branch 'MDL-34575_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-06 12:06:40 +08:00
Dan Poltawski 00cb41c2ba Merge branch 'MDL-34558_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-06 11:54:09 +08:00
Dan Poltawski 61e520aefc Merge branch 'MDL-34557_accessibility_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-08-06 11:49:51 +08:00
Dan Poltawski f7cecf982f Merge branch 'MDL-34705_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-06 11:31:38 +08:00
Dan Poltawski a767fce382 Merge branch 'w32_MDL-34635_m23_selfwelcommultilang' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-06 11:29:30 +08:00
Dan Poltawski cfe10a4698 Merge branch 'MDL-28207-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-08-06 10:40:40 +08:00
Dan Poltawski 01672d5de5 Merge branch 'MDL-34590_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-08-06 10:11:24 +08:00
Dan Poltawski 65e06b77a8 Merge branch 'MDL-34405_m23' of git://github.com/kordan/moodle into MOODLE_23_STABLE 2012-08-06 10:06:24 +08:00
Dan Poltawski 7c4bfa5ec7 Merge branch 'w32_MDL-34585_m23_blogfiles' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-08-06 09:45:56 +08:00
Dan Poltawski d939a4dec8 MDL-28486 - tests: fix broken youtube tests 2012-08-06 09:27:55 +08:00
Sam Hemelryk f52c5f8b6a Merge branch 'MDL-34708_m23' of git://github.com/nebgor/moodle into MOODLE_23_STABLE 2012-08-06 12:05:08 +12:00
Sam Hemelryk a34c42bd5e Merge branch 'MDL-28486-MOODLE_23_STABLE-1' of git://git.luns.net.uk/moodle into MOODLE_23_STABLE 2012-08-06 11:58:45 +12:00
Sam Hemelryk 98aa996a00 Merge branch 'MDL-34658-23' of git://github.com/grabs/moodle into MOODLE_23_STABLE 2012-08-06 11:44:24 +12:00
Andreas Grabs 5f152b5c90 MDL-34670 - undefined variable in feedback templates 2012-08-06 11:36:56 +12:00
Sam Hemelryk 3d84e69328 Merge branch 'MDL-34645_23' of git://github.com/aolley/moodle into MOODLE_23_STABLE 2012-08-06 11:04:57 +12:00
Sam Hemelryk 9d705d4901 Merge branch 'MDL-34647_23' of git://github.com/aolley/moodle into MOODLE_23_STABLE 2012-08-06 10:58:44 +12:00
Aparup Banerjee 2018163468 MDL-34708 Forms library : Fixed incorrect calendar day displayed across timezones. Credit to Matthew Davidson and team at rose-hulman.edu. 2012-08-05 23:32:17 +08:00
Rossiani Wijaya 142b18a835 MDL-34560 accessibility compliance for message: Add label for input text and select tag 2012-08-04 17:03:39 +08:00
AMOS bot abdc9e17fa Automatically generated installer lang files 2012-08-04 00:31:59 +00:00
Tim Hunt e071bc1aa4 MDL-34704 couse, accesslib: improve $CFG->courselistshortnames
1. get_context_name should respect the $CFG->courselistshortnames
setting.

2. When $CFG->courselistshortnames is on, what to display should use a
language string, rather than string concatenation. This makes it
possible for people to configure the display. For example, they might
want 'My first course [M101]' instead of 'M101 My first course'.
2012-08-03 14:43:30 +01:00
Tim Hunt 2963abadf9 MDL-34590 javascript-static: full-screep popups for Chrome.
I have left in both:
1. the code to get the window size correct initially, becuase that seems
sensible; and
2. the subsequent resize (with the setTimeout that Chrome requires,
thanks Jeff Rader for finding that) becuase on Chrome, it gets the size
a bit too big initially, so this correction is necessary.
2012-08-03 13:21:44 +01:00
Andreas Grabs 4d8138c96a MDL-34658 - Saving failed because missing or false values 2012-08-03 12:01:21 +02:00
AMOS bot 7a0664fbb4 Automatically generated installer lang files 2012-08-03 11:45:29 +02:00
Dan Poltawski e1d2c7452b MDL-34716 outcomes: Fix admin tree location 2012-08-03 16:06:54 +08:00
Frederic Massart a602649f8f MDL-22663 Repository: WebDAV supports Digest authentication 2012-08-03 14:03:20 +08:00
Frederic Massart 85a9d23d91 MDL-22663 Repository: WebDAV supports SSL and chunked data 2012-08-03 13:55:07 +08:00
Frederic Massart 3f995bef7a MDL-22663 Repository: Fixed strict standards notices in WebDAV lib 2012-08-03 13:55:01 +08:00
Rossiani Wijaya 1445fd1337 MDL-34575 accessibility compliance for notes: Add form input text and select tag 2012-08-03 13:36:27 +08:00
Rossiani Wijaya 0f9992ca66 MDL-34574 accessibility compliance for mymobile theme: Add forform input text and select tag 2012-08-03 12:01:50 +08:00
Rossiani Wijaya 08e03a695a MDL-34566 accessibility compliance for glossary module: Add forform input text and select tag 2012-08-03 12:01:43 +08:00
Rossiani Wijaya 077e06f621 MDL-34567 accessibility compliance for lesson module: Add forform input text and select tag 2012-08-03 12:01:43 +08:00
Rossiani Wijaya d0d9c135e1 MDL-34564 accessibility compliance for feedback module: Add forform input text and select tag 2012-08-03 12:01:41 +08:00
Rossiani Wijaya 519adbc684 MDL-34561 accessibility compliance for assignment module: Add forform input text and select tag 2012-08-03 12:01:38 +08:00
Rossiani Wijaya aa15bd56d6 MDL-34559 accessibility compliance for grade: Add forform input text and select tag 2012-08-03 12:01:36 +08:00
Rossiani Wijaya f81c3a32f0 MDL-34558 accessibility compliance for filter: Add forform input text and select tag 2012-08-03 12:01:35 +08:00
Rossiani Wijaya daeee0afae MDL-34557 accessibility compliance for enrol: Add forform input text and select tag 2012-08-03 12:01:34 +08:00
Rajesh Taneja 6ecbacac00 MDL-30792 Files API: Cleaner approach to get maxbytes size in filepicker 2012-08-03 11:36:38 +08:00
Rajesh Taneja d3e1371030 MDL-30792 Files API: maxbytes will be set by get_max_upload_file_size if less then 0 or greater then max moodle limit 2012-08-03 11:36:32 +08:00
Frederic Massart e9ec895d92 MDL-28531 Backup: Automated backups run when they are scheduled 2012-08-03 09:30:27 +08:00
Frederic Massart 6ce946c561 MDL-34259 Lesson: True/false questions don't break on missing answer 2012-08-03 09:23:23 +08:00
Frederic Massart 84af4013c1 MDL-28207 Course: Showing/hiding/marking a section respect capabilities 2012-08-03 09:21:29 +08:00
Tim Hunt 7d45268bc6 MDL-34707 backup UI: only include the JS once. 2012-08-02 18:48:03 +01:00
Tim Hunt 46c770079d MDL-34705 role assignments list: should link to contexts.
This will make Admin's lives a bit easier.
2012-08-02 18:15:50 +01:00
Petr Škoda 3a933cdf10 MDL-34585 fix broken blog file access control 2012-08-02 09:58:50 +02:00
Petr Škoda 137bd7a8b5 MDL-34601 drop legacy wiki upgrade tables
Next time please keep db in sync with install.xml at all times.
2012-08-02 09:56:05 +02:00
Dan Marsden 605d6ffcf4 MDL-33942 Grading method: Marking Guide - check for $cm before using - may not exist if the course is being deleted. 2012-08-02 19:51:24 +12:00
Petr Škoda 56eda1f10a MDL-34635 support multilang in self enrol course welcome message
Includes also new help string for the custom multilang placeholders by Helen Foster.
2012-08-02 09:39:20 +02:00
David Monllao 4a5e1f9d4b MDL-25983 enrol_imsenterprise Importing the course summary when adding new courses 2012-08-02 15:34:42 +08:00
Dan Poltawski 02814bfc18 weekly release 2.3.1+ 2012-08-02 14:38:49 +08:00
Dan Poltawski 709efab527 MDL-31599 block_news - incorrect RSS feed for guest user
Was previously using the userid 0, rather than guest to use
authenticated RSS feed.

Thanks to Paul Verrall at LUNS for helping me debug this.
2012-08-02 11:11:29 +08:00
Dan Marsden c91dc553e5 MDL-33022 mod_form: set correct groupid when editing an existing post 2012-08-02 10:47:23 +08:00
Matt Switlik 8b9416de53 MDL-34691 assign: Time remaining "Assignment is overdue" was incorrectly being displayed when a student viewed a submitted assignment after the due date. 2012-08-01 17:07:02 -04:00
Petr Škoda b093fd5e5a MDL-34368 fix another validuntil condition 2012-08-01 15:06:55 +08:00
Dan Poltawski 4486aa99be MDL-34444 course: Dont display links to hidden sections
This is what happens when you dont use the navigation api
2012-08-01 10:31:46 +08:00
Dan Poltawski 87a31bb5d8 MDL-34444 course: show section availability info
When available, rather than a capability error.
2012-08-01 10:31:16 +08:00
Sam Hemelryk 90105eb95a Merge branch 'MDL-34534-MOODLE_23_STABLE' of https://github.com/micaherne/moodle into MOODLE_23_STABLE 2012-08-01 13:21:03 +12:00
Dan Poltawski 06d38548b1 MDL-34599 mod_quiz: optional $thispage & $nextpage
The previous change making the params required was a regression.
2012-08-01 09:06:54 +08:00
Charles Fulton b44ae5fb0a MDL-29909 wiki: do not show groups when no groups present 2012-08-01 12:40:02 +12:00
Dan Poltawski 633ed1edae Merge branch 'MDL-32791_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-31 17:46:20 +08:00
Dan Poltawski 07cf0887fd Merge branch 'MDL-34599_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-31 17:42:50 +08:00
Rossiani Wijaya 0fa95a3c97 MDL-34556 accessibility compliance for course: Add forform input text and select tag 2012-07-31 17:17:15 +08:00
Rossiani Wijaya 81ff28e7e6 MDL-34555 accessibility compliance for calendar: Add forform input text and select tag 2012-07-31 17:11:06 +08:00
Rossiani Wijaya 8291579200 MDL-34554 accessibility compliance for blocks: Add forform input text and select tag 2012-07-31 17:05:13 +08:00
Rossiani Wijaya 61e3665a15 MDL-34553 accessibility compliance for authentication: Add forform input text and select tag 2012-07-31 16:55:38 +08:00
Rossiani Wijaya 4233aac1e3 MDL-34552 accessibility compliance for admin: Add forform input text and select tag 2012-07-31 16:34:22 +08:00
Andrew Robert Nicols 548b7112a2 MDL-28486 Force use of SSL for all youtube and vimeo embeds
If a page is served over SSL (https), then any content loaded from non-SSL
sources (e.g. http://youtube.com/) will cause errors to show in the
browser. To prevent this, it's best to use the SSL equivelants where they
exist (e.g. https://youtube.com/).

Unfortunately, it isn't possible to accurately determine whether the
current page is loaded over an SSL connection or not in Moodle.

Since including content from an external SSL site on a non-SSL moodle page
does not lead to browser warnings, but non-SSL external content on an SSL
moodle page does, we always use SSL where available.

Note: This does not lead to any additional processing requirements for the
moodle site.
2012-07-31 09:27:00 +01:00
Aparup Banerjee 971937e7d0 MDL-34650 added MDLs to todo comment and deprecation comment.
(also triggering an amos script here for the other MDL-34650 commit)

AMOS BEGIN
  CPY [minute,form],[minute,core]
  CPY [month,form],[month,core]
  CPY [options,editor],[options,core]
  CPY [selectacourse,backup],[selectacourse,core]
AMOS END
2012-07-31 15:40:07 +08:00
Aparup Banerjee 28557dc456 MDL-34650 typo correction 2012-07-31 13:23:55 +08:00
Aparup Banerjee 4a5780ffde Merge branch 'MDL-34650_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-31 13:20:24 +08:00
Sam Hemelryk acb533009f Merge branch 'MDL-34528_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-07-31 16:49:31 +12:00
Sam Hemelryk 3c3cf6daac Merge branch 'MDL-32499_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-07-31 16:29:51 +12:00
Sam Hemelryk fe2ff1e8a0 Merge branch 'MDL-32931_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-07-31 16:18:50 +12:00
Sam Hemelryk dddd0d7a38 Merge branch 'MDL-32827-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-07-31 16:15:59 +12:00
Rossiani Wijaya 2a336b5ef1 MDL-34650 - accessibility compliance: Add <label> for form input text and select tag 2012-07-31 12:09:18 +08:00
Dan Poltawski 1de0c00eb6 Merge branch 'MDL-25953-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-31 12:01:56 +08:00
Ankit Agarwal 669f274735 MDL-32827 calendar: update eventtype of broken event in bulk instead of doing it one by one 2012-07-31 11:24:15 +08:00
Dan Poltawski 3fb4392ee0 Merge branch 'MDL-34624_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-07-31 11:10:36 +08:00
Dan Poltawski 8bf442dc73 Merge branch 'MDL-34532_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-31 10:43:10 +08:00
Dan Poltawski 472b9a46ab Merge branch 'MDL-34255_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-31 10:31:49 +08:00
Jerome Mouneyrac 1b158ee8c9 MDL-33869 user_get_user_details: add support for 'Show user identity' fields set by administrator 2012-07-31 10:26:22 +08:00
Crafton Williams 2a3a22a46d MDL-33869 user_get_user_details: allow return of idnumber 2012-07-31 10:25:21 +08:00
Dan Poltawski 89babfaefa Merge branch 'm23_MDL-34440' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-07-31 10:07:05 +08:00
Adam Olley 5aba3d6df9 MDL-34647: admintool: uploaduser enrolments now obey enrolperiod directive 2012-07-31 11:36:57 +09:30
Adam Olley 10813a0c78 MDL-34645: enrol_manual: enrolment init to pass default duration setting 2012-07-31 11:10:41 +09:30
Dan Poltawski c04ddf28f8 Merge branch 'MDL-34483_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-31 09:12:23 +08:00
Sam Hemelryk d4533f6215 Merge branch 'MDL-34494_m23' of git://github.com/kordan/moodle into MOODLE_23_STABLE 2012-07-31 12:43:32 +12:00
Sam Hemelryk eec3d1869d Merge branch 'MDL-28568_noncontact_warning_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-07-31 12:00:42 +12:00
Tim Hunt 0b7dfe12ed MDL-34483 qformat_examview: Commit example file.
Supplied by Rick Jerz.
2012-07-30 11:57:29 +01:00
Fred Woolard 7ae8f60489 MDL-34440 Site registration failing with mysqli 2012-07-30 20:06:22 +12:00
Dan Poltawski 46895999f0 Merge branch 'mdl34368' of https://bitbucket.org/ngmares/moodle into MOODLE_23_STABLE 2012-07-30 15:49:12 +08:00
Dan Poltawski b700c34f14 Merge branch 'MDL-34507-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-30 14:04:54 +08:00
Dan Poltawski 1ab970d492 Merge branch 'MDL-34589_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-30 13:55:50 +08:00
Nadav Kavalerchik db8e600a23 MDL-34513 - RTL Theme fixes for Moodle 2 (theme/mymobile)
+ Right align frontpage course list
+ right align activity and resource titles
+ Two Columns on/off slider fix
+ Right align content in Blocks
+ Fix checkbox question types in quiz
+ Right align titles of fields in Forms
+ minor ui tweaks
2012-07-30 13:52:58 +08:00
Dan Poltawski c5b133f790 Merge branch 'MDL-33537_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-07-30 13:46:33 +08:00
Dan Poltawski acbbf4157d Merge branch 'w31_MDL-34538_m23_validatefloats' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-30 12:35:10 +08:00
Dan Poltawski af433c5b52 Merge branch 'MDL-31509_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-30 12:15:49 +08:00
Andrew Robert Nicols ca4548c1c2 MDL-34433 Check for existence of e and e.target in set_form_changed
This is required for cases when code directly calls set_form_changed as
happens with the filepicker.
2012-07-30 12:09:50 +08:00
Dan Poltawski 7c52ee5027 Merge branch 'wip-mdl-34239-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-07-30 12:05:25 +08:00
Dan Poltawski 6fe575509e Merge branch 'MDL-34519_23_course_reset_patch' of git://github.com/rlorenzo/moodle into MOODLE_23_STABLE 2012-07-30 11:57:41 +08:00
Mary Evans f785edd9e2 MDL-34528 theme_canvas: Removed redundent exclude stylesheet configurations from CANVAS theme 2012-07-29 21:42:04 +01:00
kordan dacc63f1ae MDL-34494 theme_formal_white: replaced old style core_renderer::MAIN_CONTENT_TOKEN with $OUTPUT->main_content() 2012-07-29 16:40:29 +02:00
kordan 899fe64867 MDL-34405 theme_formal_white: added background for quiz overview 2012-07-29 15:59:54 +02:00
Mary Evans 0e3c86746f MDL-34624 theme_base: added background-color to style/admin.css for role edit default 2012-07-29 14:54:00 +01:00
Tim Hunt d1d989ce13 MDL-31509 quiz outcomes: let people associate quizzes with outcomes.
The quiz does not really support outcomes, but even so in 1.9 you could
select outcomes on the quiz edit form, and apparently this was useful to
some people, therefore we should re-enable it.
2012-07-27 18:09:49 +01:00
Petr Škoda 009933e28c MDL-34538 fix PARAM_FLOAT validation 2012-07-27 18:45:43 +02:00
Petr Škoda f2fd3f3138 MDL-34538 add float validation tests 2012-07-27 18:45:43 +02:00
Tim Hunt de53bada57 MDL-32791 quiz db: clean up garbage data that was causing problems.
Melinda Kraft reported having rows in their quiz_question_instances
table which caused various problems. These rows are meaningless, so I
have done a DB upgrade step to clean them up, which should deal with the
bad side-effets they were causing.
2012-07-27 16:45:04 +01:00
Jean-Michel Vedrine e3f79e9347 MDL-34483 qformat_examview: handle more questions.
These fixes come from testing with the example file supplied by Rick
Jerz.
2012-07-27 12:20:13 +01:00
Jean-Michel Vedrine 0940ba1f16 MDL-34483 qformat_examview: clean the code to make codechecker happy 2012-07-27 12:20:11 +01:00
Jean-Michel Vedrine 53f2f306dd MDL-34483 qformat_examview: changes required to make it basically work. 2012-07-27 12:20:10 +01:00
Tim Hunt a361ff5645 MDL-34599 quiz attempts: more robust if page number out of range.
Rather than throwing an exception, we should just show the first/last
page of the quiz if the page number is out-of-range.
2012-07-27 11:43:40 +01:00
Rajesh Taneja def687a6a2 MDL-34239 Blog: Editing blog associated with module will be keep it's association 2012-07-27 14:01:47 +08:00
Ankit Agarwal 41499f832b MDL-32827 calendar: Bumping the version 2012-07-27 11:50:37 +08:00
Ankit Agarwal 0bdf18a7c9 MDL-32827 calendar: Added logic to handle calendar events with empty eventtypes during restore 2012-07-27 11:49:20 +08:00
Ankit Agarwal fcda7dbb89 MDL-32827 calendar: Fixining calender entries with no eventtype 2012-07-27 11:47:50 +08:00
Frederic Massart df9b10e10a MDL-25953 Repository: Amazon S3 supports sub directories 2012-07-27 10:52:16 +08:00
Frederic Massart b3b35530f9 MDL-25953 Repository: Updated Amazon S3 library 2012-07-27 10:52:16 +08:00
Frederic Massart 9480023733 MDL-34507 Repository: Better support for 'any' accepted filetypes 2012-07-27 10:16:30 +08:00
David Monllao e8790310bb MDL-32931 mod_forum Polishing patch and taking into account courses without previous accesses 2012-07-27 09:23:18 +08:00
Tom Lanyon 3b6573536c MDL-32931 mod_forum Change forum overview to avoid use of (potentially large and slow ) log table. 2012-07-27 09:23:18 +08:00
David Monllao 2011579b26 MDL-32499 gradingform_rubric Avoid backup/restore of rubric fillings without an existing criteria 2012-07-27 09:22:02 +08:00
Tim Hunt 59b983a5d9 MDL-34589 quiz report graphs: PHP5.4 issue with unset($array[$float]).
Thanks to Matthew Davidson for diagnosing the problem.
2012-07-26 18:55:17 +01:00
Tim Hunt 40ae563bee MDL-34532 quiz reports: error when showing users without attempts.
We were not checking if attempt state was null before trying to convert it to a string.
2012-07-26 10:09:45 +01:00
Aparup Banerjee 6975216336 weekly release 2.3.1+ 2012-07-26 14:25:58 +08:00
Rossiani Wijaya ffdccab055 MDL-34255 group calendar events: fixed adding group calendar event for students 2012-07-26 14:23:39 +08:00
Aparup Banerjee 33405ffbd0 Merge branch 'install_23_STABLE' of git://git.moodle.cz/moodle-install into MOODLE_23_STABLE 2012-07-26 13:59:33 +08:00
AMOS bot 993a4b8f5c Automatically generated installer lang files 2012-07-26 00:31:43 +00:00
Michael Aherne a11b507f50 MDL-34534 Backport activity chooser default setting to 2.3 stable 2012-07-25 12:15:21 +01:00
Dan Poltawski 8d9dd85d97 Merge branch 'MDL-13629_droplow_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-07-25 12:29:47 +08:00
Dan Poltawski c54a83d8bd MDL-34441 dbtransfer - do not attempt migration if moodle is not installed. 2012-07-25 11:29:04 +08:00
Dan Poltawski c237be89fb MDL-34441 tool_dbtranfer - fix codechecker warnings
Since we were so close to perfection.
2012-07-25 10:51:21 +08:00
Dan Poltawski 55bf451676 Merge branch 'w30_MDL-34441_m23_dbtransfer' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-25 10:51:15 +08:00
Sam Hemelryk 5986099daa Merge branch 'w30_MDL-34475_m23_saveondefault' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-25 11:13:16 +12:00
Sam Hemelryk ea268875fb Merge branch 'MDL-27083-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-25 09:18:19 +12:00
Rex Lorenzo f1631871b8 MDL-34519 - Course reset not protected by proper capability 2012-07-24 12:03:52 -07:00
Aparup Banerjee 81fa4095f2 MDL-26969 assignment : clarified phpdoc and fixed whitespace. 2012-07-24 16:40:46 +08:00
Aparup Banerjee 34cdc31ec8 Merge branch 'MDL-26969_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-24 16:40:42 +08:00
Dan Poltawski 51609ef88a Merge branch 'MDL-34484_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-24 15:40:26 +08:00
Dan Poltawski 73a418e3c2 Merge branch 'w30_MDL-34129_m23_enrolinfo' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-24 13:41:45 +08:00
AMOS bot 2902afd555 Automatically generated installer lang files 2012-07-24 00:31:53 +00:00
Petr Škoda e2ecc7c6cc MDL-34475 add default value to xmldb_field hash calculation 2012-07-23 21:36:39 +02:00
Tim Hunt 53e2f1aad8 MDL-34484 unit tests: stop phpunit using testcase names as class names 2012-07-23 11:10:38 +01:00
Aparup Banerjee bb9b19a7fd MDL-34449 phpdoc typo correction 2012-07-23 16:40:30 +08:00
Aparup Banerjee 8e711c3af0 Merge branch 'w30_MDL-34449_m23_layoutmaddness' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-23 16:40:11 +08:00
Dan Poltawski 326bbf9ba6 Merge branch 'MDL-34379_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-23 14:14:08 +08:00
Dan Poltawski cf1479bb2f Merge branch 'MDL-34351_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-23 14:09:34 +08:00
Dan Poltawski b165e64edc Merge branch 'MDL-34251_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-23 14:02:07 +08:00
Dan Poltawski cb9fdb814d Merge branch 'MDL-34226_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-23 13:53:58 +08:00
Rajesh Taneja e4f2ea1a42 MDL-34148 Blog: Fixed variable name used for saving module name
Updated Erik's patch to match coding style
2012-07-23 13:45:54 +08:00
Erik Lundberg 5147d726b2 MDL-34148: Instead of using the module name from the filesystem, the blog menu now fetches the module name with get_string(). 2012-07-23 13:45:54 +08:00
Dan Poltawski 96647229fc Merge branch 'wip-MDL-34404-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-07-23 13:26:12 +08:00
Dan Poltawski 7ccdba8821 Merge branch 'w30_MDL-34396_m23_loginhttpsspell' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-23 12:20:05 +08:00
Frederic Massart 82a0137aa5 MDL-27083 Questions: Orphaned questions are adopted on upgrade
Conflicts:

	version.php
2012-07-23 11:58:56 +08:00
Rossiani Wijaya 60a1365d28 MDL-26969 Assignment module - upload: fixed get_submission() return value to nothing when param is set to false. 2012-07-23 11:27:28 +08:00
Aparup Banerjee 3e7788eebe Merge branch 'MDL-32665_chat_popup_23' of git://github.com/andyjdavis/moodle into MOODLE_23_STABLE 2012-07-23 10:21:44 +08:00
Dan Poltawski fd59a1780b Merge branch 'MDL-34451_23' of git://github.com/merrill-oakland/moodle into MOODLE_23_STABLE 2012-07-23 09:22:48 +08:00
Sam Hemelryk 4094913d53 Merge branch 'MDL-34412_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-07-23 12:42:12 +12:00
Sam Hemelryk f945ffb908 Merge branch 'MDL-34370_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-07-23 12:39:59 +12:00
Marina Glancy e7a3fe032f MDL-34428 Private files repository should have a 'manage' link 2012-07-23 12:37:57 +12:00
Sam Hemelryk 6fcebf2424 Merge branch 'MDL-33560-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-23 12:25:20 +12:00
Sam Hemelryk 9d1594b04b Merge branch 'MDL-31516_grade_comma_decsep_moodle23' of git://github.com/StudiUM/moodle into MOODLE_23_STABLE 2012-07-23 12:19:58 +12:00
Marina Glancy 9ff506d165 MDL-34221 disabledIf support for filemanager and filepicker elements 2012-07-23 12:08:49 +12:00
Davo Smith 252bd1871b MDL-34221 Filepicker - disableIf now prevents drag and drop upload 2012-07-23 12:08:49 +12:00
Davo Smith 548f536a00 MDL-33927 Filemanager - enforce the maxfiles limit on form submission 2012-07-23 12:01:24 +12:00
Sam Hemelryk 2372ccb774 Merge branch 'MDL-29563_23' of https://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-07-23 11:49:39 +12:00
Sam Hemelryk 4ad0926a30 Merge branch 'MDL-34427' of git://github.com/jasonilicic/moodle into MOODLE_23_STABLE 2012-07-23 11:40:07 +12:00
Sam Hemelryk f315e3e184 Merge branch 'm23_MDL-34374' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-07-23 11:38:09 +12:00
Sam Hemelryk 93c3b29893 Merge branch 'm23_MDL-34233' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE 2012-07-23 11:26:50 +12:00
Damyon Wiese c8ac7e7938 MDL-34313: Deleting assignfeedback plugins deletes config for assignsubmission_plugin instead. 2012-07-23 11:22:36 +12:00
Damyon Wiese 943036314f MDL-34272: Assignment module displays all assignments on my moodle instead of just open ones 2012-07-23 11:20:55 +12:00
Damyon Wiese 145a300b73 MDL-34256: Grading table shows users with no submissions with "requires grading" filter
Also hide the filters completely if there are no submission plugins enabled (offline assignment).
2012-07-23 11:09:46 +12:00
Damyon Wiese 392ee02d6c MDL-2283: Display number of assignment submissions that need grading in the grading summary 2012-07-23 10:55:27 +12:00
Sam Hemelryk 28ea78bf7a Merge branch 'MDL-34265-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-07-23 10:39:45 +12:00
Andrew Robert Nicols 7fac90712b MDL-34322 Don't display empty navigation nodes which have no link 2012-07-23 09:43:27 +12:00
Sam Hemelryk 5b37ed3dda MDL-34243 completion: Fixed up call to completion_criteria::factory that was passing object 2012-07-23 09:38:57 +12:00
Aaron Barnes a6fa8a7265 MDL-34243 completion: get_criteria() incorrectly passing object 2012-07-23 09:38:57 +12:00
Mary Evans b843a44e16 MDL-34370 theme_fusion: added CSS in style/core.css to enable weeks to be moved when editing 2012-07-22 21:38:40 +01:00
Petr Škoda 38e269ead9 MDL-34441 bump up version to trigger cache purging 2012-07-22 21:02:14 +02:00
Petr Škoda de25ddd331 MDL-34441 add CLI database migration script 2012-07-22 20:57:07 +02:00
Petr Škoda 7b293e0126 MDL-34441 add maintenance mode to db migration and improve lang strings 2012-07-22 20:57:06 +02:00
Petr Škoda 56db97bb5c MDL-34441 scroll to the bottom when db migration finished 2012-07-22 20:57:06 +02:00
Petr Škoda 05e4341165 MDL-34441 rewrite log display actions after db migration 2012-07-22 20:57:05 +02:00
Petr Škoda 0dd05d20b9 MDL-34441 improve error handling when migrating databases 2012-07-22 20:57:05 +02:00
Petr Škoda 9134f9aa9c MDL-34441 prevent mysqli::close() notice after failed mysql driver connect 2012-07-22 20:57:04 +02:00
Petr Škoda c8e5d9c9eb MDL-34441 show db transfer in experimental section
DB export and import is not ready yet, sorry.
2012-07-22 20:57:04 +02:00
Petr Škoda 937777f3fe MDL-34441 fix switched lang strings 2012-07-22 20:57:03 +02:00
Petr Škoda 6b986b7b6a MDL-34441 always use proper charset in htmlspecialchars() calls 2012-07-22 20:57:03 +02:00
Petr Škoda 4b195fe9e9 MDL-34441 cleanup dtl related phpdocs and minor style improvements 2012-07-22 20:57:02 +02:00
Eric Merrill a14ef47b44 MDL-34451 quiz Fixed problem where attempt page is updated for ALL attempts, not just current. 2012-07-22 12:23:11 -04:00
Petr Škoda 1c005cbf12 MDL-34449 lazy load theme layout otpions
This should allow us to switch page layout on admin pages and elsewhere before $OUTPUT->header() call.
2012-07-22 15:34:23 +02:00
Petr Škoda 7c87df674e MDL-34129 show course info on enrolment page 2012-07-21 21:34:07 +02:00
Luke Tucker ab706cc971 MDL-34396 Ensure TinyMCE editor spell checking works on pages with $PAGE->https_required() 2012-07-21 20:29:50 +02:00
Mary Evans 8545a5cc54 MDL-34412 theme_afterburner: defined #EEE as background-color in afterburner_styles.css for filemanager and filepicker input, select, button & textarea 2012-07-20 23:52:02 +01:00
David Monllao e0cf9e280a MDL-33537 gradingform_rubric Adding the definition when retrieving grading instances
Credit to Sam Chaffee
2012-07-20 14:56:00 +08:00
Jason Ilicic 1cb637e42a MDL-34427: Corrected language string when not allowed to enter the chat room. 2012-07-20 14:45:32 +09:30
Tim Hunt 2894157f15 MDL-34351 quiz cron: one broken overdue attempt should not kill cron
It seems that sometimes trying to process an overdue quiz attempt can
throw an exception. In that case, we need to catch it and report it
nicely, and then carry on processing the rest of the attempts, rather
than just killing the whole of cron processing.

Also, there may be garbage quiz attempts where the associated quiz or
course has been deleted. Skip those too.
2012-07-19 15:24:15 +01:00
Tim Hunt 013c74d058 MDL-34379 quiz reports: timetaken 'open' for never submitted attempts 2012-07-19 12:46:49 +01:00
Tim Hunt 2d7cbf5923 MDL-34251 question engine: possible infinite loop loading usages
In the case where either a question_attempt had not steps, or a
question_usage had not question_attempts, the load_from_records methods
could get stuck in an infinite loop.

This fix ensures that does not happen, with unit tests to verify it. At
the same time, I noticed an error in the existing tests, which this
patch fixes.
2012-07-19 12:46:24 +01:00
Tim Hunt 0288eb2151 MDL-34226 multianswer qtype: basic unit test.
This verifies the previous fix, and gets rid of a rather embarassing TODO.
2012-07-19 12:46:12 +01:00
Tim Hunt 0656c0a403 MDL-34226 multichoice qtype: correct is_complete_response for multianswer
The multianswer qtype uses the multi-choice one, and the way it does its
responses array breaks an assumption that multi-choice was making.
2012-07-19 12:46:11 +01:00
Andrew Davis 36e22a820c MDL-28568 message: added a warning message when the user is about to message someone who cant reply 2012-07-19 17:07:00 +08:00
Sam Hemelryk 62145412bb MDL-33448 javascript: Added caching for the YUI instance used for debug in get_string 2012-07-19 20:22:37 +12:00
Ankit Agarwal 8119fbd7bd MDL-34265 SCORM: Removing sorting from unsortable columns 2012-07-19 15:58:36 +08:00
Dan Marsden 001ff67298 MDL-34233 SCORM backup - change to using set_source_sql to preserve order of records in backup. 2012-07-19 19:40:02 +12:00
David Monllao da2104aa0e MDL-29563 course Throwing an exception instead of a message 2012-07-19 15:35:20 +08:00
David Monllao e2bf940699 MDL-29563 course Hide duplication button in activities without backup2 support - Credit to Mark Nielsen 2012-07-19 15:35:20 +08:00
Dan Poltawski 9592f5dea8 weekly release 2.3.1+ 2012-07-19 13:45:56 +08:00
Dan Poltawski 05551bceed Merge branch 'install_23_STABLE' of git://github.com/amosbot/moodle into MOODLE_23_STABLE 2012-07-19 13:42:05 +08:00
Dan Marsden fece4fd648 MDL-34374 SCORM prevent skipview being set to always when used inside a SCORM course format. 2012-07-19 09:05:07 +12:00
Andrew Davis dec465b3e9 MDL-32665 mod_chat: disabled popup notifications in the chat windows 2012-07-18 19:08:01 +08:00
Andrew Davis cfe170e430 MDL-13629 grade: added some unit tests to clarify the handling of droplow and improved apply_limit_rules() 2012-07-18 09:14:59 +08:00
Damyon Wiese 617c624732 MDL-32948: Improved help for "Require students click submit button" setting
Describes the effect of changing this setting after students have submitted.
2012-07-18 10:20:08 +12:00
Damyon Wiese 00cfd8bc94 MDL-34217: Swap short and long text for setting in assignment module 2012-07-18 10:13:20 +12:00
Andrew Robert Nicols 8a172fa7cf MDL-33874 Don't warn about focussed form fields with the ignoredirty class 2012-07-18 09:35:12 +12:00
Frederic Massart a64fbc87b6 MDL-33767 Course: General section displays its title when required 2012-07-17 22:28:13 +08:00
Frederic Massart 483d768bc0 MDL-33767 Course: The actions on default section redirect to the correct section 2012-07-17 22:28:01 +08:00
Jean-Philippe Gaudreau 35cf43cb42 MDL-31516 Fixing grade_edit_tree::format_number 2012-07-17 09:03:17 -04:00
Nathan Mares 371d354ab3 MDL-34368: Fix broken query in so tokens are correctly checked against the linked service 2012-07-17 19:11:57 +10:00
Frederic Massart 23371805ea MDL-33560 Enrol: Enrol password can be unmasked 2012-07-17 16:49:31 +08:00
Juan Leyva 3240c7100e MDL-34083 Fixing the param type also after deleting the invalid option 2012-07-17 13:12:39 +08:00
Juan Leyva 574cc949cd MDL-34083 Deleted user_files from backup options 2012-07-17 13:12:36 +08:00
Sam Hemelryk 07cb7e3d34 Merge branch 'MDL-33575_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-17 15:50:08 +12:00
Rossiani Wijaya b6e65b5312 MDL-33575 choice module: add label to checkbox element when privacy of results is set to publish full results 2012-07-17 10:17:43 +08:00
AMOS bot b27d56ea6f Automatically generated installer lang files 2012-07-17 00:31:47 +00:00
David Monllaó e52f82253e MDL-30876 filter_mediaplugin Wrapping the style sheets access with try & catch
Conflicts:

	lib/javascript-static.js
2012-07-17 12:21:07 +12:00
Dan Poltawski 00714e72ea Merge branch 'MDL-34187_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-16 15:57:31 +08:00
Aparup Banerjee 5f3d7b1949 MDL-26587 Question : fixed restoring shortanswer where answers are missing due to data error in mbz file. 2012-07-16 15:51:11 +08:00
Dan Poltawski 4923e18d75 Merge branch 'MDL-23219_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-16 14:32:54 +08:00
Dan Poltawski e0bc694514 Merge branch 'wip-mdl-30798-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-07-16 14:26:08 +08:00
Rajesh Taneja 021bea1240 MDL-30798 Blog: link param for entries about this course link is fixed 2012-07-16 14:11:47 +08:00
Dan Poltawski 24527f63bb Merge branch 'MDL-31622-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-16 11:34:21 +08:00
Dan Poltawski d835681e35 Merge branch 'MDL-34211' of git://github.com/appalachianstate/moodle into MOODLE_23_STABLE 2012-07-16 11:15:55 +08:00
Dan Poltawski 4da22142bc Merge branch 'w29_MDL-34271_m23_mysqlcollation' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-16 11:00:56 +08:00
Dan Poltawski 8242298e4b Merge branch 'MDL-34164_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-16 10:05:51 +08:00
Marina Glancy ae8e49e8de MDL-34213 fixed mistype causing wrong link in some browsers 2012-07-16 09:55:05 +08:00
Sam Hemelryk 5320640ccd Merge branch 'MDL-33624-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-07-16 13:50:56 +12:00
Dan Poltawski 28fc596d03 MDL-33624 lang - remove incosistent use of placeholder 2012-07-16 09:45:11 +08:00
Davo Smith f8e493faff MDL-34214 Course dndupload - removed unneeded classes from preview element 2012-07-16 12:05:54 +12:00
Sam Hemelryk ac98ad6189 Merge branch 'MDL-26145_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-07-16 11:57:35 +12:00
Sam Hemelryk 8f87d57c47 Merge branch 'MDL-28155_23' of git://github.com/dmonllao/moodle into MOODLE_23_STABLE 2012-07-16 11:50:23 +12:00
Sam Hemelryk 828a42c37d Merge branch 'MDL-32310-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-07-16 11:00:57 +12:00
Sam Hemelryk d479ce3bef Merge branch 'MDL-34153-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-07-16 10:44:01 +12:00
Sam Hemelryk f30998190f Merge branch 'MDL-34240-23' of git://github.com/danpoltawski/moodle into MOODLE_23_STABLE 2012-07-16 10:37:42 +12:00
Sam Hemelryk ff8ab720f0 Merge branch 'MDL-34072' of git://github.com/appalachianstate/moodle into MOODLE_23_STABLE 2012-07-16 10:10:54 +12:00
Damyon Wiese 66681a5192 MDL-34258: Plagiarism API now returns strings so mod_assign needs these updates 2012-07-16 09:58:06 +12:00
Charles Fulton 4b791f1d17 MDL-27563 shibboleth: set context on login page 2012-07-16 09:39:43 +12:00
Barbara Ramiro b831bcc2be MDL-33841 Min-height set to remove unnecessary scrollbar on tree and list view 2012-07-16 09:35:44 +12:00
Ashley Holman bf79f77357 MDL-34309: Fix broken postgres unix sockets in core_adodb_testcase::test_read_table 2012-07-16 09:33:01 +12:00
Andrew Robert Nicols e7bf0155f7 MDL-33874 Allow form fields to be ignored by the formchangechecker 2012-07-16 09:26:11 +12:00
Sam Hemelryk bac9070359 Merge branch 'MDL-33788b-23' of git://github.com/srynot4sale/moodle into MOODLE_23_STABLE 2012-07-16 09:18:46 +12:00
AMOS bot beae8b9888 Automatically generated installer lang files 2012-07-15 00:32:02 +00:00
Tim Hunt 04de7affb6 MDL-34164 quiz reports: only try to show graphs if GD is installed.
if (empty($CFG->gdversion)) { seems to be the common idiom for this.
I refactored the graph output into the renderer, to avoid having to
duplicate that test three times.
2012-07-14 09:21:00 +01:00
Tim Hunt e9879c02c6 MDL-34257 quiz 'secure' window: does not close automatically. 2012-07-13 18:03:51 +01:00
Tim Hunt 7bef3664b8 MDL-23219 check permissions: show relevant role-assignments.
Adding this list of role assignments should make it much easier for
admins to work out why, when the permissions shown in the check
permisisons page are now what they expect.

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

I also re-orderd some of the code in check.php to try to get all the DB
code before all the output code.
2012-07-13 15:21:17 +01:00
Dan Poltawski 881118184a MDL-34240 - google plugins: switch to PARAM_RAW_TRIMMED
This ensures the client credentials which are entered are trimmed
as users are finding problems with bad pastes.
2012-07-13 10:09:39 +08:00
Frederic Massart 7397acb145 MDL-31622 Forms: Date selector supports i18n 2012-07-13 08:57:29 +08:00
AMOS bot a3db6afa39 Automatically generated installer lang files 2012-07-13 00:32:23 +00:00
Fred Woolard fd626c4109 MDL-34072: Adjust SQL for Oracle. Remove subquery alias altogether. 2012-07-12 10:54:59 -04:00
Fred Woolard eab8660e8f MDL-34211 Use the $table_name argument to check against $metatables key values 2012-07-12 10:54:10 -04:00
Petr Škoda 3eb9ebb3c8 MDL-34271 add new cli tool for mysql collation conversions 2012-07-12 14:41:28 +02:00
Petr Škoda 41e8883ea8 MDL-34271 use the same collation when adding new tables or columns 2012-07-12 14:41:28 +02:00
Petr Škoda 7ec63b27d0 MDL-34271 cleanup mysql engine hack before adding similar collation hack 2012-07-12 14:41:27 +02:00
Dan Poltawski 3b52187e25 weekly release 2.3.1+ 2012-07-12 15:57:26 +08:00
Dan Poltawski f7d874c76f Merge branch 'install_23_STABLE' of git://github.com/amosbot/moodle into MOODLE_23_STABLE 2012-07-12 15:50:04 +08:00
Sam Hemelryk 9f7f501c0a Revert "MDL-33575 choice module: add label to checkbox element when privacy of results is set to publish full results"
This reverts commit f19cd42709.
2012-07-12 18:21:00 +12:00
Dan Poltawski 476f72e9bf MDL-34153 mod_forum: create RFC-2822 compliant message-ids 2012-07-12 14:16:52 +08:00
Paul Nicholls 074236eee7 MDL-32582 - filter/multimedia: MP3 Flow Player doesn't work in Chrome if empty stylesheets are present 2012-07-12 13:40:43 +08:00
AMOS bot 294c228272 Automatically generated installer lang files 2012-07-12 00:32:25 +00:00
David Monllao c465776d28 MDL-28155 mod_assignment Using the this object instead of a string 2012-07-11 15:13:34 +08:00
Dan Poltawski 4697c46706 Merge branch 'w28_MDL-34175_m23_admin' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-11 14:51:07 +08:00
Petr Škoda df7799d989 MDL-34175 one more hardcoded /admin/ in mnet 2012-07-11 08:48:04 +02:00
AMOS bot 89375aac4c Automatically generated installer lang files 2012-07-10 20:33:18 +02:00
Petr Skoda 229aabf7c6 MDL-33712 add support for unique moodle tags in tinymce 2012-07-10 15:56:11 +08:00
Marina Glancy d6571ad763 MDL-33950 Correctly initialise repository and check access in js and non-js filepicker 2012-07-10 14:57:46 +08:00
Marina Glancy 95991122ab MDL-33473,MDL-33950,MDL-33837 Allow non-js filepicker to pick files from moodle repositories
- MDL-33473 actually make non-js filepicker to work with local repositories
- MDL-33950 validate that file is accessible
- MDL-33837 when picking a server file marked as main, do not make it main in current filearea
2012-07-10 14:57:41 +08:00
Marina Glancy db81525850 MDL-33950 check if source file is accessible in repository_ajax.php
- repository::copy_to_area() does not check access any more, and repository_recent::copy_to_area() is unnecessary
- added repository::file_is_accessible() that checks access to the picked file (regardless of accessibility of the file it is referencing to)
2012-07-10 14:57:35 +08:00
Sun Zhigang 7073fa4c4a MDL-28155 mod_assignment - Fix an ugly hack
Show download all link for any assignment types which implement
the download_submissions() method
2012-07-10 13:00:13 +08:00
Dan Poltawski b2e5a60773 MDL-34159 - add comment lost from previous commit 2012-07-10 12:58:46 +08:00
Dan Poltawski 57c7815213 Merge branch 'w28_MDL-34159_m23_wherelist' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-10 12:56:07 +08:00
Petr Škoda 95896749a5 MDL-33617 add new index to improve perf of enrol related role_assignments
Conflicts:

	version.php
2012-07-10 15:49:38 +12:00
Petr Škoda c8b7088463 MDL-33887 delay string fetching in PAGE->requires->string_for_js() till page footer
This should resolve problems with language switching such as when forcing course language.
2012-07-10 15:08:26 +12:00
Michael Aherne c82d7fc832 MDL-34156 Remove subselect from slow query 2012-07-10 10:53:40 +08:00
Dan Poltawski 1f34fa79c2 Merge branch 'w28_MDL-34147_m23_cygwin' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-10 10:31:24 +08:00
Dan Poltawski 806129b06e Merge branch 'MDL-34171_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-10 09:25:22 +08:00
Petr Škoda eb88700a56 MDL-34155 use course visibility default when creator does not have moodle/course:visibility 2012-07-10 12:49:14 +12:00
Sam Hemelryk 3ca82ed605 Merge branch 'w28_MDL-34175_m23_admin' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-10 12:43:42 +12:00
Dan Marsden 6b8399df5e MDL-34198 SCORM remove unecessary get_records call 2012-07-10 08:34:42 +08:00
Marina Glancy 68ea10b079 MDL-33444 Upload repository can specify custom label for filepicker 2012-07-10 12:31:12 +12:00
Marina Glancy 2eb66f3500 MDL-34139 filemanager select-file dialogue should update file on Enter 2012-07-10 12:24:08 +12:00
Sam Hemelryk bd75b67885 Merge branch 'MDL-29470-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-10 12:09:26 +12:00
Sam Hemelryk 3936796042 Merge branch 'MDL-32297-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-10 12:05:33 +12:00
Davo Smith b43bb8da94 MDL-34107 Upload repository - do not add a dot to files without an extension 2012-07-10 11:47:48 +12:00
Dan Poltawski 898010f1aa MDL-34061 mod_resource: filter settings weren't coming from defaults 2012-07-10 11:40:33 +12:00
Charles Fulton d563d48694 MDL-27800 admin: make front page restore link consistent 2012-07-10 11:32:31 +12:00
Dan Poltawski 0dd189d59d Merge branch 'MDL-18301-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-09 14:27:15 +08:00
Dan Poltawski d6cf442059 Merge branch 'MDL-32057_23' of git://github.com/aolley/moodle into MOODLE_23_STABLE 2012-07-09 14:14:13 +08:00
Dan Poltawski 2bf17d606b Merge branch 'w28_MDL-34046_m23_stalefiles' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-09 13:50:16 +08:00
Dan Poltawski 1583e17c65 Merge branch 'MDL-33030_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-09 13:42:32 +08:00
Dan Poltawski d85083312c Merge branch 'wip-mdl-29969-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-07-09 13:39:18 +08:00
Dan Poltawski 1e838c4e30 Merge branch 'MDL-34077-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-09 13:37:34 +08:00
Gilles-Philippe Leblanc 65ab8112a3 MDL-33822 SCORM Interactions report - fix formatting of empty cells. 2012-07-09 17:24:29 +12:00
Dan Poltawski 9309b2dba8 MDL-17395 auth_email: clarify description 2012-07-09 17:19:41 +12:00
Barbara Ramiro b002b36ed3 MDL-33795 Increased file picker width and height 2012-07-09 17:14:12 +12:00
David Balch d36249d6d6 MDL-34143 Add file type information for .mdb .accdb (MS Access databases) 2012-07-09 13:05:40 +08:00
Aaron Barnes 48bdd52172 MDL-33788 completion: SQL optimisation 2012-07-09 15:36:52 +12:00
Dan Poltawski 41bb2c3a59 Merge branch 'wip-mdl-33943-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-07-09 11:35:02 +08:00
Ankit Agarwal 918f6d2c34 MDL-27831 calendar: Removing reduntand control icons in delete.php 2012-07-09 11:31:12 +08:00
Dan Poltawski 3a429ca204 Merge branch 'MDL-33885-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE 2012-07-09 10:31:52 +08:00
Ruslan Kabalin d212244375 MDL-33890 Make course blocks less theme dependant
This fix checks that the empty block region is actaually the standard one, so
it can be hidden. The blocks move operating area is not resticted to page
content any more.
2012-07-09 10:02:34 +08:00
Sam Hemelryk f19cd42709 MDL-33575 choice module: add label to checkbox element when privacy of results is set to publish full results 2012-07-09 10:56:28 +12:00
Sam Hemelryk 9bf1621fbc Merge branch 'MDL-30816_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-09 10:28:45 +12:00
Dan Poltawski aacf3222df MDL-33514 - rss: also exclude suspended users feeds
Thanks Petr!
2012-07-09 10:24:41 +12:00
Dan Poltawski 6b4c491cb4 MDL-33514 - rss: only retrieve RSS feeds for valid users 2012-07-09 10:24:40 +12:00
Tim Hunt 69a600a067 MDL-34171 qformat_gift: Fix edge case with special character escaping.
We need to escape \ on export, because it is un-escaped on import.
2012-07-06 10:48:20 +01:00
David Monllao 25afd64b0f MDL-26145 mod_chat Talk feature not working correctly 2012-07-06 16:16:00 +08:00
Petr Škoda fe6d428185 MDL-34046 improve mixed files upgrade error
Credit goes to Gordon Bateson.
2012-07-06 08:01:02 +02:00
Petr Škoda 880f8e7b84 MDL-34147 use cygwin style paths in phpunit hints 2012-07-06 07:59:04 +02:00
Petr Škoda 6128bf9d25 MDL-34159 improve where_clause_list performance 2012-07-06 07:57:20 +02:00
Petr Škoda 93f3eb63d1 MDL-34175 a few more renamed admin fixes 2012-07-06 07:56:00 +02:00
Petr Škoda 79406900b5 MDL-34175 automatically fix admin JS links 2012-07-06 07:56:00 +02:00
Frederic Massart 0408a48010 MDL-33885 Blog: Added maxlength rule to subject field 2012-07-06 13:16:34 +08:00
Frederic Massart 2dd2bd7ead MDL-18301 Gradebook: Added feature for components to control grade visibility 2012-07-06 09:53:54 +08:00
Sam Hemelryk f2867a8672 Moodle 2.3.1 release 2012-07-06 11:27:47 +12:00
Sam Hemelryk 62e9e694b7 weekly release 2.3+ 2012-07-06 10:04:54 +12:00
AMOS bot b24e6ed930 Automatically generated installer lang files 2012-07-06 09:53:08 +12:00
AMOS bot 50b1caaf86 Automatically generated installer lang files 2012-07-06 09:53:08 +12:00
AMOS bot 2ddf3ffcd2 Automatically generated installer lang files 2012-07-06 09:53:08 +12:00
Eloy Lafuente (stronk7) b73a7519c4 Revert "MDL-33303 Filepicker: resized to match HTML editor and made resizable"
This reverts commit e5c2bbd0f7.
2012-07-05 23:22:05 +02:00
David Balch 2425229c88 MDL-34063 XHTML files should use the HTML icon, not the markup icon 2012-07-05 18:34:55 +02:00
Eloy Lafuente (stronk7) 353580b0e3 Merge branch 'MDL-33453-reference' of git://github.com/mudrd8mz/moodle into MOODLE_23_STABLE 2012-07-05 17:07:22 +02:00
Eloy Lafuente (stronk7) 4539b33788 Revert "MDL-30912 - lib - A tidy up of the submit url jump functions for greater ease with accessability."
This reverts commit a1a00aeee7.
2012-07-05 16:10:37 +02:00
Marina Glancy 9b47ec7bb3 MDL-33746 make folder view look like filemanager tree view 2012-07-05 14:36:28 +02:00
Tim Hunt b9c20952a3 MDL-34065 questions: also fix two typos in comments.
Amended to change 2 accordin => according
2012-07-05 13:50:21 +02:00
Tim Hunt e819ff4263 MDL-34065 lib: improve two debugging messages.
If the string passed to get_string is empty, say that. Don't say that it
contains illegal characters.

When relying on the __call magic in plugin_renderer_base, when the
method cannot be found, include the right class name in the error
message.
2012-07-05 13:50:14 +02:00
Rossiani Wijaya a2af7fd407 MDL-30816 Choice module: add format_string() for choice name. 2012-07-05 12:20:20 +08:00
Rossiani Wijaya 34e0b4a71e MDL-30816 choice module: fixed accessibility for responses table and make it easier for screenreader to read it 2012-07-05 12:19:57 +08:00
Frederic Massart 8fb4b73f55 MDL-29470 Backup: fixed unexpected next automated backup date 2012-07-05 10:13:33 +08:00
Tim Hunt b20b1c32bf MDL-34145 postgres driver: fix get_tables perf on <= 9.0
The query of the information_schema view seems to be painfully slow on
older versions of postgres (2000ms instead of 20ms). Therefore, it is
worth detecting that case, and using a more postgres specific feedback.
This is particularly important for 2.3+ unit tests.

Thanks to Petr Skoda for his help with this.
2012-07-05 03:41:08 +02:00
Frederic Massart 684806305e MDL-29470 Backup: unit tests for next automated backup date 2012-07-05 09:37:21 +08:00
Sam Hemelryk 1e9130ae6e MDL-33770 webservices: Fixed error with core_group_create_groups when no enrolment key provided 2012-07-05 09:22:35 +12:00
Tim Hunt c57fa60f3d MDL-32062 question engine: fixup tests that this change broke.
The test data was wrong, and was triggering the work-around code that
MDL-32062 introduced. I fixed the test data.

Also, I fixed one of the tests, that had been broken.
2012-07-04 19:24:48 +08:00
Dan Poltawski 617d260dd7 MDL-34035 - fix typo in comment
Thanks Sam!
2012-07-04 10:39:48 +08:00
Tim Hunt b86a48c5b9 MDL-34035 help links: allow other types of URL for plugins.
For third-parth plugins, in can be helpful if the 'More help' links in
help pop-ups (the ones that come from $string['..._link'] string in the
language file) can go to other places.

This change support two other sorts of URL in addition to the standard
'course/editing' type of link that goes to MoodelDocs.

You can use absolute URLs, starting http:// or https:///

You can use a link starting %%WWWROOT%%, and that token is replaced by
$CFG->wwwroot to make the link.
2012-07-04 10:39:42 +08:00
Barbara Ramiro a2c2ab3e1a MDL-33542, MDL-33542 Select dialogue details aligned
And loading gif smaller
2012-07-04 10:25:09 +08:00
Eloy Lafuente (stronk7) bbe378a63e Merge branch 'w27_MDL-33876_m23_delenrol' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-04 04:16:05 +02:00
Marina Glancy 9d5ced06c1 MDL-34047 repository URL downloader must say that it returns only images 2012-07-04 09:51:51 +08:00
Sam Hemelryk 6019d2b2f3 Merge branch 'MDL-32614_23' of git://github.com/stronk7/moodle into MOODLE_23_STABLE 2012-07-04 13:15:03 +12:00
Eloy Lafuente (stronk7) ccef7fe8d0 MDL-32614 lti: on restore, clean any typeid to convert the tool to selfcontained.
This is known to be imperfect, awaiting for MDL-34161 to fix the whole thing. Also,
unrelated, there are some basiclti => lti replacements.
2012-07-04 02:15:02 +02:00
Chris Scribner f2b7928df7 MDL-32614: Removing code which disassociated LTI instances from their tool types upon restore. 2012-07-04 02:14:56 +02:00
Dan Poltawski 9f6f18d2c2 MDL-31692 mod_lti - ensure that various mforms are used properly
* typesettings.php and instructor_edit_tool_type.php are tided
   up properly to ensure proper use for form data
* An incorrect PARAM type is corrected for typename
2012-07-04 10:08:13 +12:00
Sam Hemelryk 848fc30a2d Merge branch 'MDL-32062_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-04 09:53:51 +12:00
sam marshall 8530aac4a8 MDL-33466: Group restriction should hide activity even with 'show availability' option
This is a modified version of fix by Luke Tucker at NetSpot - thanks.
2012-07-04 09:38:08 +12:00
Jonathan Harker 3bcca35591 MDL-27125 better manage file handles when downloading multiple files.
Based on Dongsheng Cai's branch: s11_MDL-27125_curl_file_handler_master
2012-07-04 09:33:12 +12:00
Kevin Wiliarty e3f4094ac8 MDL-33749 follow redirects for URL downloader 2012-07-04 08:34:55 +12:00
Sam Hemelryk 7df86db31d Merge branch 'wip-mdl-32787-m23' of git://github.com/rajeshtaneja/moodle into MOODLE_23_STABLE 2012-07-04 08:26:03 +12:00
Eloy Lafuente (stronk7) b41f914927 Merge branch 'wip-MDL-33303-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-07-03 16:18:41 +02:00
sam marshall a5f68fb2c2 MDL-33426 Completion: Multilang activity names wrong in alt/title 2012-07-03 16:08:57 +02:00
Rajesh Taneja 28f23328c5 MDL-32787 user: rule required for custom profile fields applies to all users editing own profile 2012-07-03 13:48:18 +08:00
Frederic Massart 3e1648723f MDL-33828 Portfolio: prevent notices while exporting to portfolios 2012-07-03 16:35:48 +12:00
sam marshall 60a72a03b2 MDL-33937 Paged course view: Allows view of sections that are not visible 2012-07-03 12:30:10 +08:00
Dan Poltawski 741543e9a7 Merge branch 'master_MDL-33938' of git://github.com/danmarsden/moodle into MOODLE_23_STABLE
Conflicts:
	mod/scorm/db/upgrade.php
2012-07-03 12:18:29 +08:00
Adrian Greeve a1a00aeee7 MDL-30912 - lib - A tidy up of the submit url jump functions for greater ease with accessability. 2012-07-03 12:12:19 +08:00
Frederic Massart 9152878ed3 MDL-30903 Accessibility: user profile page uses table headers 2012-07-03 11:51:19 +08:00
Dan Poltawski 81b2147092 Merge branch 'MDL-34008_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-03 11:47:23 +08:00
Dan Poltawski e570ee4b63 Merge branch 'w27_MDL-34036_m23_bulkrole' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-03 11:40:14 +08:00
Sam Hemelryk 0afd953daf Merge branch 'w27_MDL-34115_m23_arrayofarrayssort' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-03 15:15:18 +12:00
Dan Poltawski f224fd9498 Merge branch 'MDL-30883_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-03 11:01:44 +08:00
Jason Fowler 69b2bab32e MDL-33957 - Installation - Fixing field lengths so they are long enough for data entry, and don't distort page rendering 2012-07-03 14:58:55 +12:00
Dan Poltawski f95e28e0ff Merge branch 'w27_MDL-34123_m23_newpasslang' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-03 10:39:17 +08:00
Marina Glancy f5cd2c6ef1 MDL-33837 picking file from server files should not copy 'Main file' property 2012-07-03 10:24:43 +08:00
Sam Hemelryk 10ff22d6f6 Merge branch 'MDL-33987_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-07-03 14:11:40 +12:00
ISHIKAWA Takayuki d0d407f0bb MDL-33757 gradebook: Adding support to sort userlist by email address 2012-07-03 09:45:26 +08:00
Damyon Wiese 8ad459ed58 MDL-33499: Display final grade on the grading form with a link to the grader report
AMOS BEGIN
 CPY [currentgrade,mod_assignment],[currentgrade,mod_assign]
AMOS END
2012-07-03 02:28:49 +02:00
Eloy Lafuente (stronk7) cf5b51af0e Merge branch 'wip-MDL-33521-m23' of git://github.com/samhemelryk/moodle into MOODLE_23_STABLE 2012-07-03 01:59:22 +02:00
Adam Olley b653107b96 MDL-32057: Fix cohort enrolment css for ie7 2012-07-03 09:23:33 +09:30
Jerome Mouneyrac 18c264790a MDL-33770 Web service: create_groups should not require enrolmentkey 2012-07-03 11:49:30 +12:00
Frederic Massart 7523da44fc MDL-33814 Output renderers: table cell objects are only created when needed 2012-07-03 11:36:43 +12:00
Frederic Massart bd9ecafba9 MDL-33796 Glossary: removed unused missing string 2012-07-03 01:05:19 +02:00
Davo Smith 5200c254a1 MDL-34029 update mod/upgrade.txt to include course drag and drop upload 2012-07-03 10:55:48 +12:00
Dan Poltawski 3d43075cfd MDL-9214 - improve comment for custom login instructions 2012-07-03 10:47:21 +12:00
Dan Poltawski 5df543a60e MDL-32286 - fix ambigious english string 2012-07-03 10:42:57 +12:00
Dan Poltawski bed1c4a943 MDL-33990 - yui2: remove 2 uncessary requirements
We no longer use yui2 logger and connection in set_user_prefs
2012-07-03 10:37:10 +12:00
Sam Hemelryk 66ff4c0a06 MDL-34014 cssoptimiser: Fixed some aweful spelling 2012-07-03 10:34:13 +12:00
Dan Poltawski 9ea8065f1c MDL-34014 lang - fix CSS optimiser spelling errors 2012-07-03 10:32:45 +12:00
Dan Poltawski eadad29dc9 MDL-34022 lang - the html editor supports all browsers we support
So remove misleading 'some browers only'
2012-07-03 10:30:38 +12:00
Dan Poltawski e068b3dbe3 MDL-34033 lang - ammend configenableajax
Now better reflects its functionality.
2012-07-03 10:27:57 +12:00
Damyon Wiese 5809f6912b MDL-33848: Prevent file listings in the assignment module having an ugly border 2012-07-03 10:21:19 +12:00
Matthew G. Switlik 815aecf6c7 MDL-28151 resource: prevent cropping of large images 2012-07-03 10:14:04 +12:00
Tim Hunt 15d8babd1a MDL-23813 glossary filter: add missing YUI dependency
Fix found by Huy Hoang. I am just making a commit.
2012-07-02 23:52:48 +02:00
Aparup Banerjee a78e4e9147 MDL-23254 Authentication : used httpswwwroot as root url during authentication procedure where $PAGE->https_required() is specified. 2012-07-03 09:42:42 +12:00
Dan Poltawski d9edd25111 MDL-34081 dml: mssql driver was using case insensitve sql 2012-07-02 21:08:18 +02:00
Eloy Lafuente (stronk7) 1a76bbe2e4 MDL-34121 bump versions to efectively get the upgrade performed.
Conflicts:
	version.php
2012-07-02 18:18:22 +02:00
Eloy Lafuente (stronk7) af63cc85df Merge branch 'w27_MDL-34121_m23_killbackupmess' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-02 18:16:54 +02:00
Marina Glancy dff8438e50 MDL-33948 mod_forum correctly passes files options to file_save_draft_area_files() 2012-07-02 17:44:43 +08:00
Marina Glancy ec3fe6e123 MDL-33948 file_save_draft_area_files() validates if references are allowed and allows unlimited file size 2012-07-02 17:44:38 +08:00
Andrew Robert Nicols 770cee9696 MDL-33916 Add unit tests to ensure that is_enrolled returns correctly 2012-07-02 17:36:55 +08:00
Andrew Robert Nicols 1db89f5e6a MDL-33916 Ensure that capabilities are checked for cached user enrolments 2012-07-02 17:36:51 +08:00
Dan Poltawski 5c1b768aec MDL-31802 - navigation: add a comment about session reduction 2012-07-02 17:30:21 +08:00
Dan Poltawski f2b4305c8e Merge branch 'MDL-31802_23' of git://github.com/aolley/moodle into MOODLE_23_STABLE 2012-07-02 17:24:56 +08:00
Marina Glancy 502ecc4c9f MDL-34117 Correctly pass accepted_types to dnduploader 2012-07-02 17:10:02 +08:00
Dan Poltawski 34c10b84fb Merge branch 'w27_MDL-34120_m23_delpass' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-02 16:48:28 +08:00
Dan Poltawski f09dcd4b6d Merge branch 'w27_MDL-34125_m23_tablename' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-02 16:46:27 +08:00
Tim Hunt 2b1b2017a6 MDL-34109 quiz cron: timelimit are timeclose of 0 are special.
If the timelimit or timeclose of a quiz are 0, this means 'no
restriction', rather than '1970' or '0 seconds'. We need to handle these
special cases correctly in the code that looks for quiz attempts that
might be in the wrong state.
2012-07-02 16:44:35 +08:00
Tim Hunt 592443f4e1 MDL-34109 quiz cron: change whitespace before applying the fix.
This commit just changes the white-space, but does not change any of the
actual code. This is so that the commit I am about to make, which will
change the code, will be easier to understand.
2012-07-02 16:44:29 +08:00
Dan Poltawski dabab94b6e Merge branch 'w27_MDL-34045_m23_idnumber' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-02 16:34:17 +08:00
Dan Poltawski 039089f3aa Merge branch 'MDL-34025_m23' of https://github.com/markn86/moodle into MOODLE_23_STABLE 2012-07-02 16:28:12 +08:00
Rossiani Wijaya 41c548bb23 MDL-33030 Lesson module: fixed progress bar 2012-07-02 16:20:40 +08:00
Dan Poltawski 9cb942820c Merge branch 'MDL-33924_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-02 16:19:19 +08:00
Dan Marsden 0ba1ee1dd2 MDL-33914 SCORM show scrollbar on TOC if too long. 2012-07-02 16:14:23 +08:00
Dan Marsden 7debccbdee MDL-33835 Marking Guide - set currentfocus var to the first criteria comment to avoid JS errors. 2012-07-02 16:10:26 +08:00
Dan Poltawski 9a211c853d Merge branch 'MDL-33780_23' of git://github.com/timhunt/moodle into MOODLE_23_STABLE 2012-07-02 16:07:32 +08:00
Marina Glancy ed8cab855e MDL-33721 show loading icon after file has been selected in filepicker, prevent clicking select button twice 2012-07-02 16:00:21 +08:00
Dan Poltawski 6253f69246 Merge branch 'm23_MDL-33053_AICC_flattened_TOC' of git://github.com/scara/moodle into MOODLE_23_STABLE 2012-07-02 15:50:18 +08:00
Dan Poltawski 49ac5deff6 Merge branch 'MDL-32605-m23' of git://github.com/ankitagarwal/moodle into MOODLE_23_STABLE 2012-07-02 15:45:59 +08:00
Andrew Davis 6737eda426 MDL-25476 messages: switched some notification emails to come from the support contact instead of admin 2012-07-02 15:41:29 +08:00
Frederic Massart c7132d7c93 MDL-9073 Glossary: uncategorised entries are printable 2012-07-02 15:34:06 +08:00
Kanika Goyal d9b9bfd288 MDL-31203 mod_forum: advanced search posts must be newer older than date, reverts date 2012-07-02 15:24:10 +08:00
Rossiani Wijaya ec70cf6ef1 fixed the ->spacer <br> param 2012-07-02 15:20:43 +08:00
Mark Nielsen a6b0b36cdc fixed undefined variable 2012-07-02 15:20:37 +08:00
Rajesh Taneja a8380712bb MDL-33943 tool_replace: Hardcoded strings replaced with lang strings 2012-07-02 15:18:41 +08:00
Dan Poltawski 3e839bd513 Merge branch 'MDL-31987_assignment_m23' of git://github.com/rwijaya/moodle into MOODLE_23_STABLE 2012-07-02 15:12:47 +08:00
Dan Poltawski 8633142f53 Merge branch 'MDL-34019-pluginlib-notice' of git://github.com/mudrd8mz/moodle into MOODLE_23_STABLE 2012-07-02 15:02:37 +08:00
Tim Hunt 564b878840 MDL-34054 quiz reports: missing context.
quiz_report_should_show_grades needs to know the context, so pass it
through.
2012-07-02 14:57:29 +08:00
Dan Poltawski c3f59e043c MDL-33995 - unit tests: fix class name collision 2012-07-02 14:52:57 +08:00
Rossiani Wijaya 4b0e6f38fa MDL-31987 Assignment module: fixed upgrade version 2012-07-02 14:51:47 +08:00
Dan Poltawski fb978df0f0 MDL-31987 Assignment module: fix sql for postgres. 2012-07-02 14:49:29 +08:00
Rossiani Wijaya 45353da409 MDL-31987 Assignment module: Assignment count submissions correctly.
For advanced upload assignment, store file count of each submission
into assignment_submissions.numfiles

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

Also change a hardcoded 'submitted' to ASSIGNMENT_STATUS_SUBMITTED.

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

I made some modifation to fixed count_real_submissions() query (ref: MDL-32207) in /mod/assignment/type/upload/assignment.class.php file
2012-07-02 14:49:29 +08:00
Rajesh Taneja 419aed3539 MDL-29969 Administration: Default value for numsections is set to 1 for site frontpage 2012-07-02 14:33:37 +08:00
Jerome Mouneyrac 08641906e1 MDL-33995 Course external PHPunit test + externallib_testcase helper class 2012-07-02 14:13:44 +08:00
Jerome Mouneyrac 6b5ce20c16 MDL-33776 Web services: get_categories - subcategories should be checked against visible/theme keys 2012-07-02 14:13:38 +08:00
Dan Marsden 800fb7533e MDL-33978 SCORM activity completion - don't tiggere completion update state on creation of SCORM 2012-07-02 13:44:35 +08:00
Andrew Davis 789c8b8194 MDL-33686 Repositories: we were accessing a non-existent variable and thus never displaying the maximum number of attachments 2012-07-02 14:53:50 +12:00
Andreas Grabs e9aa190a37 MDL-33932_master - added array_unique() 2012-07-02 14:32:09 +12:00
Andreas Grabs 786ad3511c MDL-33627 - feedback block now show all feedbacks 2012-07-02 14:06:42 +12:00
Sam Hemelryk abfc9e2512 MDL-33521 css: Fixed invalid CSS in core CSS and plugin styles.css files 2012-07-02 11:34:53 +12:00
Frederic Massart e5c2bbd0f7 MDL-33303 Filepicker: resized to match HTML editor and made resizable 2012-07-02 11:34:27 +12:00
Eloy Lafuente (stronk7) 1494f20da3 weekly release 2.3+ 2012-07-02 00:54:05 +02:00
Eloy Lafuente (stronk7) 4fa4a727b4 Merge branch 'MDL-34119_M23' of git://github.com/lazydaisy/moodle into MOODLE_23_STABLE 2012-07-02 00:30:28 +02:00
Sam Hemelryk 4be710795a Merge branch 'MDL-34044-23' of git://github.com/srynot4sale/moodle into MOODLE_23_STABLE 2012-07-02 08:22:35 +12:00
Eloy Lafuente (stronk7) 9ea40f27a0 Merge branch 'w27_MDL-34130_m23_recordsettests' of git://github.com/skodak/moodle into MOODLE_23_STABLE 2012-07-01 22:01:22 +02:00
Petr Škoda 19ba134d3b MDL-34130 prevent some warning in PHPStorm 2012-07-01 21:50:56 +02:00
Petr Škoda d0812ba0e6 MDL-34130 test recordset data is static
We do not want recordset results to be affected by subsequent update or delete queries.
2012-07-01 21:40:37 +02:00
Petr Škoda a2b8856558 MDL-34130 add missing rs close
Thanks Eloy!
2012-07-01 21:40:36 +02:00
Petr Škoda a61e8c8ebe MDL-34130 test interaction of recordsets and transactions 2012-07-01 21:40:36 +02:00
Petr Škoda 1cf431a329 MDL-34130 test nested recordset iteration 2012-07-01 21:40:36 +02:00
Petr Škoda 9ee97228bd MDL-34130 fix data inserts in recordset tests 2012-07-01 21:40:36 +02:00
Petr Škoda 43fb824bd2 MDL-34125 fix regression when deleting activity modules
Credit goes to Gordon Bateson.
2012-07-01 10:05:22 +02:00
Eloy Lafuente (stronk7) 9d774c9445 Merge branch 'MDL-32249c-23' of github.com:srynot4sale/moodle into MOODLE_23_STABLE 2012-07-01 02:14:39 +02:00
Sun Zhigang 8b3d60557c MDL-31201 wiki: fix a hardcoded string 2012-06-30 22:01:08 +02:00
Petr Škoda 134affd943 MDL-34123 use user's lang when sending new emails 2012-06-30 20:46:30 +02:00
Petr Škoda 5df5bcba99 MDL-34036 fix course role user selector 2012-06-30 15:40:30 +02:00
Petr Škoda 93fd7cb10c MDL-34121 drop unused backup tables that were supposed to be dropped long ago
The backup/restore leftovers that referenced these will be dropped in 2.4
2012-06-30 14:00:52 +02:00
Mary Evans 3705a88629 MDL-34119_M23 theme_splash: Added colourswitcher.js and associated code in layout files and lib.php 2012-06-30 12:02:22 +01:00
Petr Škoda 5cb477c4a1 MDL-34120 do not try to create new passwords for incorrectly deleted users
There is still some code that ignores delete_user() and instead hacks the user table directly, skip the borked user records for now when sending new passwords.
2012-06-30 09:07:18 +02:00
Petr Škoda 4aabce216c MDL-33876 skip deleted users in enrol_database sync 2012-06-30 08:44:55 +02:00
Petr Škoda b273b20a7c MDL-34115 fix sorting in blocks admin UI
Comparison of arrays is not locale aware.
2012-06-30 08:34:02 +02:00
Petr Škoda f8e05deb35 MDL-34045 fix invalid idnumber field type in cohort form 2012-06-30 07:57:51 +02:00
Mary Evans 263e8c144c MDL-34119_M23 theme_splash: removed redundant js call in lib.php. Added lang option to config.php + amended lang output in layout files. Added some css to style langmenu + removed redundant loginicon in pagelayout.css 2012-06-30 00:50:34 +01:00
Frederic Massart 3e0b5f78a2 MDL-32297 Forms: Date Picker JS popup is not constraint to parent form 2012-06-29 14:18:59 +08:00
Aparup Banerjee b574c078a6 MDL-34096 Installation : Added 2.3 upgrade line to db upgrade scripts. 2012-06-29 11:37:01 +08:00
Frederic Massart 37817a0cd8 MDL-34077 Repositories: Flickr and Picasa can have custom names 2012-06-28 12:12:32 +08:00
Adam Olley a44c303d63 MDL-31802: Remove section summaries from navigation_cache 2012-06-28 11:03:49 +09:30
Tim Hunt e5ff0d3278 MDL-33924 quiz: incorrect foreign key definition.
Thanks to Jean-Michel Vedrine for spotting this.≈
2012-06-27 08:26:26 +01:00
Mark Nelson faca708484 MDL-34025 - quiz secure window: fix popup closing 2012-06-27 14:31:03 +08:00
Ankit Agarwal fc14c79fc9 MDL-32605 calendar: Fixing the missing parameter for get_string call 2012-06-27 13:34:39 +08:00
Aaron Barnes 2670a3a684 MDL-34044 completion: Fix regression caused by MDL-26626 2012-06-27 11:54:41 +12:00
David Mudrák d81d6ea2c3 MDL-33453 Make it clear what search_references() and search_references_count() are good for
Initially it was not clear enough that these two methods are supposed to
be used for looking for references to a stored_file only. So the docs
comments are improved and unittests added to illustrate the usage.

The patch also removes the unittest for get_references_by_storedfile()
as its usage is already covered in other test methods.
2012-06-26 16:28:30 +02:00
Tim Hunt b0cf55f145 MDL-34008 formslib: repeat_elements replace {no} for submits & buttons 2012-06-26 10:38:50 +01:00
Tim Hunt 5af6c9676e MDL-33780 question import: strip UTF8 BOM
Previously, if there was a byte-order mark at the start of the file, the
import would just break, which was silly. Much better to just strip it
off.
2012-06-26 10:34:19 +01:00
Tim Hunt 225e058685 MDL-30883 question flags: aria attributes for accessibility
Also, update code to use html_writer, and fix pointer style when not
editable.
2012-06-26 10:31:36 +01:00
Tim Hunt 3d348a3cc7 MDL-32062 question engine: fix re-grading attempts from 2.0
The code to upgrade attempts from before Moodle 2.0 to 2.1 created
attempt data that was not exactly the same as a new attempt created in
2.1+. This did not matter very much - revew and the quiz reports all
worked OK - but it broke on re-grade.

These changes detect the problem data in the re-grade code, an apply a
work-around so that the re-grade gives the correct result.
2012-06-26 10:11:37 +01:00
David Mudrák 896f9ae83b MDL-34019 Fix response item key name 2012-06-26 09:12:35 +02:00
Mary Evans 11824b0461 MDL-33987_M23 theme_anomaly: amended some css values to style dock better also removed exclude parent theme stylesheet as it refered to a none existant file in base theme. 2012-06-26 03:40:37 +01:00
Aaron Barnes 9b57d5bc38 MDL-32249 completion: Make grade criteria more consistent
Also, round course grades and remove hardcoded string.

Note: This patch also removes the ability to update the course grade
from the completion interface
2012-06-26 14:12:53 +12:00
28507 changed files with 1477456 additions and 4101044 deletions
-312
View File
@@ -1,312 +0,0 @@
{
'plugins': [
'babel',
'promise',
'jsdoc',
],
'env': {
'browser': true,
// Enable ES6+ features by default.
// See http://eslint.org/docs/user-guide/configuring#specifying-environments
// Note: The YUI override must exactly match this when disabling the ES6+ version because those features are not supported by Shifter.
'es2020': true,
'amd': true
},
'globals': {
'M': true,
'Y': true
},
'rules': {
// See http://eslint.org/docs/rules/ for all rules and explanations of all
// rules.
// === Possible Errors ===
'comma-dangle': 'off',
'no-compare-neg-zero': 'error',
'no-cond-assign': 'error',
'no-console': 'error',
'no-constant-condition': 'error',
'no-control-regex': 'error',
'no-debugger': 'error',
'no-dupe-args': 'error',
'no-dupe-keys': 'error',
'no-duplicate-case': 'error',
'no-empty': 'warn',
'no-empty-character-class': 'error',
'no-ex-assign': 'error',
'no-extra-boolean-cast': 'error',
'no-extra-parens': 'off',
'no-extra-semi': 'error',
'no-func-assign': 'error',
'no-inner-declarations': 'error',
'no-invalid-regexp': 'error',
'no-irregular-whitespace': 'error',
'no-obj-calls': 'error',
'no-prototype-builtins': 'off',
'no-regex-spaces': 'error',
'no-sparse-arrays': 'error',
'no-unexpected-multiline': 'error',
'no-unreachable': 'warn',
'no-unsafe-finally': 'error',
'no-unsafe-negation': 'error',
'use-isnan': 'error',
'valid-jsdoc': ['warn', { 'requireReturn': false, 'requireParamDescription': false, 'requireReturnDescription': false }],
'valid-typeof': 'error',
// === Best Practices ===
// (these mostly match our jshint config)
'array-callback-return': 'warn',
'block-scoped-var': 'warn',
'complexity': 'warn',
'consistent-return': 'warn',
'curly': 'error',
'dot-notation': 'warn',
'no-alert': 'warn',
'no-caller': 'error',
'no-case-declarations': 'error',
'no-div-regex': 'error',
'no-empty-pattern': 'error',
'no-empty-function': 'warn',
'no-eq-null': 'error',
'no-eval': 'error',
'no-extend-native': 'error',
'no-extra-bind': 'warn',
'no-fallthrough': 'error',
'no-floating-decimal': 'warn',
'no-global-assign': 'warn',
'no-implied-eval': 'error',
'no-invalid-this': 'error',
'no-iterator': 'error',
'no-labels': 'error',
'no-loop-func': 'error',
'no-multi-spaces': 'warn',
'no-multi-str': 'error',
'no-new-func': 'error',
'no-new-wrappers': 'error',
'no-octal': 'error',
'no-octal-escape': 'error',
'no-proto': 'error',
'no-redeclare': 'warn',
'no-restricted-globals': ['error', { 'name': 'Notification' }],
'no-return-assign': 'error',
'no-script-url': 'error',
'no-self-assign': 'error',
'no-self-compare': 'error',
'no-sequences': 'warn',
'no-throw-literal': 'warn',
'no-unmodified-loop-condition': 'error',
'no-unused-expressions': 'error',
'no-unused-labels': 'error',
'no-useless-call': 'warn',
'no-useless-escape': 'warn',
'no-with': 'error',
'wrap-iife': ['error', 'any'],
// === Variables ===
'no-delete-var': 'error',
'no-undef': 'error',
'no-undef-init': 'error',
'no-unused-vars': ['error', { 'caughtErrors': 'none' }],
// === Stylistic Issues ===
'array-bracket-spacing': 'warn',
'block-spacing': 'warn',
'brace-style': ['warn', '1tbs'],
'camelcase': 'warn',
'capitalized-comments': ['warn', 'always', { 'ignoreConsecutiveComments': true }],
'comma-spacing': ['warn', { 'before': false, 'after': true }],
'comma-style': ['warn', 'last'],
'computed-property-spacing': 'error',
'consistent-this': 'off',
'eol-last': 'off',
'func-call-spacing': ['warn', 'never'],
'func-names': 'off',
'func-style': 'off',
// indent currently not doing well with our wrapping style, so disabled.
'indent': ['off', 4, { 'SwitchCase': 1 }],
'key-spacing': ['warn', { 'beforeColon': false, 'afterColon': true, 'mode': minimum }],
'keyword-spacing': 'warn',
'linebreak-style': ['error', 'unix'],
'lines-around-comment': 'off',
'max-len': ['error', 132],
'max-lines': 'off',
'max-depth': 'warn',
'max-nested-callbacks': ['warn', 5],
'max-params': 'off',
'max-statements': 'off',
'max-statements-per-line': ['warn', { max: 2 }],
'new-cap': ['warn', { 'properties': false }],
'new-parens': 'warn',
'newline-after-var': 'off',
'newline-before-return': 'off',
'newline-per-chained-call': 'off',
'no-array-constructor': 'off',
'no-bitwise': 'error',
'no-continue': 'off',
'no-inline-comments': 'off',
'no-lonely-if': 'off',
'no-mixed-operators': 'off',
'no-mixed-spaces-and-tabs': 'error',
'no-multiple-empty-lines': 'warn',
'no-negated-condition': 'off',
'no-nested-ternary': 'warn',
'no-new-object': 'off',
'no-plusplus': 'off',
'no-tabs': 'error',
'no-ternary': 'off',
'no-trailing-spaces': 'error',
'no-underscore-dangle': 'off',
'no-unneeded-ternary': 'off',
'no-whitespace-before-property': 'warn',
'object-curly-newline': 'off',
'object-curly-spacing': 'warn',
'object-property-newline': 'off',
'one-var': 'off',
'one-var-declaration-per-line': ['warn', 'initializations'],
'operator-assignment': 'off',
'operator-linebreak': 'off',
'padded-blocks': 'off',
'quote-props': ['warn', 'as-needed', {'unnecessary': false, 'keywords': true, 'numbers': true}],
'quotes': 'off',
'require-jsdoc': 'warn',
'semi': 'error',
'semi-spacing': ['warn', {'before': false, 'after': true}],
'sort-vars': 'off',
'space-before-blocks': 'warn',
'space-before-function-paren': ['warn', 'never'],
'space-in-parens': 'warn',
'space-infix-ops': 'warn',
'space-unary-ops': 'warn',
'spaced-comment': 'warn',
'unicode-bom': 'error',
'wrap-regex': 'off',
// === Promises ===
'promise/always-return': 'warn',
'promise/no-return-wrap': 'warn',
'promise/param-names': 'warn',
'promise/catch-or-return': ['warn', {terminationMethod: ['catch', 'fail']}],
'promise/no-native': 'warn',
'promise/no-promise-in-callback': 'warn',
'promise/no-callback-in-promise': 'warn',
'promise/avoid-new': 'warn',
// === Deprecations ===
"no-restricted-properties": ['warn', {
'object': 'M',
'property': 'str',
'message': 'Use AMD module "core/str" or M.util.get_string()'
}],
},
overrides: [
{
files: ["**/yui/src/**/*.js"],
'env': {
// Disable ES6+ for YUI files.
'es2020': false,
},
// Disable some rules which we can't safely define for YUI rollups.
rules: {
'no-undef': 'off',
'no-unused-vars': 'off',
'no-unused-expressions': 'off',
// === JSDocs ===
"jsdoc/check-access": 'off',
"jsdoc/check-alignment": 'off',
"jsdoc/check-param-names": 'off',
"jsdoc/check-property-names": 'off',
"jsdoc/empty-tags": 'off',
"jsdoc/implements-on-classes": 'off',
"jsdoc/multiline-blocks": 'off',
"jsdoc/require-jsdoc": 'off',
"jsdoc/require-param": 'off',
"jsdoc/require-param-name": 'off',
"jsdoc/require-param-type": 'off',
"jsdoc/require-property": 'off',
"jsdoc/require-property-name": 'off',
"jsdoc/require-property-type": 'off',
}
},
{
files: ["**/amd/src/*.js", "**/amd/src/**/*.js", "Gruntfile.js", ".grunt/*.js", ".grunt/tasks/*.js", "jsdoc.conf.js"],
// We're using babel transpiling so use their parser
// for linting.
parser: '@babel/eslint-parser',
// Check AMD with some slightly stricter rules.
rules: {
'no-unused-vars': 'error',
'no-implicit-globals': 'error',
// Disable all of the rules that have babel versions.
'new-cap': 'off',
// Not using this rule for the time being because it isn't
// compatible with jQuery and ES6.
'no-invalid-this': 'off',
'object-curly-spacing': 'off',
'quotes': 'off',
'semi': 'off',
'no-unused-expressions': 'off',
// Enable all of the babel version of these rules.
'babel/new-cap': ['warn', { 'properties': false }],
// Not using this rule for the time being because it isn't
// compatible with jQuery and ES6.
'babel/no-invalid-this': 'off',
'babel/object-curly-spacing': 'warn',
// This is off in the original style int.
'babel/quotes': 'off',
'babel/semi': 'error',
'babel/no-unused-expressions': 'error',
// === Promises ===
// We have Promise now that we're using ES6.
'promise/no-native': 'off',
'promise/avoid-new': 'off',
// === JSDocs ===
"jsdoc/check-access": [
'error',
],
"jsdoc/check-alignment": 1, // Recommended.
"jsdoc/check-param-names": [
'error',
],
"jsdoc/check-property-names": [
'error',
],
"jsdoc/empty-tags": [
'error',
],
"jsdoc/implements-on-classes": [
'error',
],
"jsdoc/multiline-blocks": [
'error',
],
"jsdoc/require-jsdoc": [
'error',
],
"jsdoc/require-param": [
'error',
],
"jsdoc/require-param-name": [
'error',
],
"jsdoc/require-param-type": [
'error',
],
"jsdoc/require-property": [
'error',
],
"jsdoc/require-property-name": [
'error',
],
"jsdoc/require-property-type": [
'error',
],
},
parserOptions: {
'sourceType': 'module',
'requireConfigFile': false,
}
}
]
}
-24
View File
@@ -1,24 +0,0 @@
{
"indentation": ["on",{
"Feature": 0,
"Background": 2,
"Scenario": 2,
"Examples": 4,
"example": 6,
"Step": 4,
"given": 4,
"and": 4
}],
"no-dupe-feature-names": "on",
"no-dupe-scenario-names": "off",
"no-empty-file": "on",
"no-files-without-scenarios": "on",
"no-multiple-empty-lines": "on",
"no-partially-commented-tag-lines": "on",
"no-trailing-spaces": "on",
"no-unnamed-features": "on",
"no-unnamed-scenarios": "on",
"no-scenario-outlines-without-examples": "on",
"no-examples-in-scenarios": "on",
"new-line-at-eof": ["on", "yes"]
}
-3
View File
@@ -1,3 +0,0 @@
**/yui/build/** -diff
**/amd/build/** -diff
lib/dml/oci_native_moodle_package.sql text eol=lf
-2
View File
@@ -1,2 +0,0 @@
# Primary donations pages.
custom: ["https://moodle.com/donations/", moodle.org]
-71
View File
@@ -1,71 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Template configuraton file for github actions CI/CD.
*
* @package core
* @copyright 2020 onwards Eloy Lafuente (stronk7) {@link https://stronk7.com}
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// This cannot be used out from a github actions workflow, so just exit.
getenv('GITHUB_WORKFLOW') || die; // phpcs:ignore moodle.Files.MoodleInternal.MoodleInternalGlobalState
unset($CFG);
global $CFG;
$CFG = new stdClass();
$CFG->dbtype = getenv('dbtype');
$CFG->dblibrary = 'native';
$CFG->dbhost = '127.0.0.1';
$CFG->dbname = 'test';
$CFG->dbuser = 'test';
$CFG->dbpass = 'test';
$CFG->prefix = 'm_';
$CFG->dboptions = ['dbcollation' => 'utf8mb4_bin'];
$host = 'localhost';
$CFG->wwwroot = "http://{$host}";
$CFG->dataroot = realpath(dirname(__DIR__)) . '/moodledata';
$CFG->admin = 'admin';
$CFG->directorypermissions = 0777;
// Debug options - possible to be controlled by flag in future.
$CFG->debug = (E_ALL | E_STRICT); // DEBUG_DEVELOPER.
$CFG->debugdisplay = 1;
$CFG->debugstringids = 1; // Add strings=1 to url to get string ids.
$CFG->perfdebug = 15;
$CFG->debugpageinfo = 1;
$CFG->allowthemechangeonurl = 1;
$CFG->passwordpolicy = 0;
$CFG->cronclionly = 0;
$CFG->pathtophp = getenv('pathtophp');
$CFG->phpunit_dataroot = realpath(dirname(__DIR__)) . '/phpunitdata';
$CFG->phpunit_prefix = 't_';
define('TEST_EXTERNAL_FILES_HTTP_URL', 'http://localhost:8080');
define('TEST_EXTERNAL_FILES_HTTPS_URL', 'http://localhost:8080');
define('TEST_SESSION_REDIS_HOST', 'localhost');
define('TEST_CACHESTORE_REDIS_TESTSERVERS', 'localhost');
// TODO: add others (solr, mongodb, memcached, ldap...).
// Too much for now: define('PHPUNIT_LONGTEST', true); // Only leaves a few tests out and they are run later by CI.
require_once(__DIR__ . '/lib/setup.php');
-124
View File
@@ -1,124 +0,0 @@
name: Core
on:
push:
branches-ignore:
- master
- 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.2
jobs:
Grunt:
runs-on: ubuntu-22.04
steps:
- name: Checking out code
uses: actions/checkout@v3
- name: Configuring node & npm
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Installing node stuff
run: npm install
- name: Running grunt
run: npx grunt
- name: Looking for uncommitted changes
# Add all files to the git index and then run diff --cached to see all changes.
# This ensures that we get the status of all files, including new files.
# We ignore npm-shrinkwrap.json to make the tasks immune to npm changes.
run: |
git add .
git reset -- npm-shrinkwrap.json
git diff --cached --exit-code
PHPUnit:
runs-on: ${{ matrix.os }}
services:
exttests:
image: moodlehq/moodle-exttests
ports:
- 8080:80
redis:
image: redis
ports:
- 6379:6379
strategy:
fail-fast: false
matrix:
include:
# MySQL builds always run with the lowest PHP supported version.
- os: ubuntu-22.04
php: 8.0
extensions:
db: mysqli
# PostgreSQL builds always run with the highest PHP supported version.
- os: ubuntu-22.04
php: 8.2
db: pgsql
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: moodlehq/mysql-action@v1
with:
collation server: utf8mb4_bin
mysql version: 8.0
mysql database: test
mysql user: test
mysql password: test
use tmpfs: true
tmpfs size: '1024M'
extra conf: --skip-log-bin
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
uses: m4nu56/postgresql-action@v1
with:
postgresql version: 13
postgresql db: test
postgresql user: test
postgresql password: test
- name: Configuring git vars
uses: rlespinasse/github-slug-action@v4
- name: Setting up PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: max_input_vars=5000
coverage: none
- name: Checking out code from ${{ env.GITHUB_REF_SLUG }}
uses: actions/checkout@v3
- name: Setting up PHPUnit
env:
dbtype: ${{ matrix.db }}
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV # Inject installed pathtophp to env. The template config needs it.
cp .github/workflows/config-template.php config.php
mkdir ../moodledata
sudo locale-gen en_AU.UTF-8
php admin/tool/phpunit/cli/init.php --no-composer-self-update
- name: Running PHPUnit tests
env:
dbtype: ${{ matrix.db }}
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options ${{ inputs.phpunit_extra_options }}
-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.2
jobs:
Grunt:
runs-on: windows-latest
steps:
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checking out code
uses: actions/checkout@v3
- name: Configuring node & npm
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Installing node stuff
run: npm ci
- name: Running grunt
run: npx grunt
- name: Looking for uncommitted changes
# Add all files to the git index and then run diff --cached to see all changes.
# This ensures that we get the status of all files, including new files.
# We ignore npm-shrinkwrap.json to make the tasks immune to npm changes.
run: |
git add .
git reset -- npm-shrinkwrap.json
git diff --cached --exit-code
PHPUnit:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
php: 8.2
# Ideally we should use mysql/mariadb, but they are 4x slower without tweaks and configuration
# so let's run only postgres (1.5h vs 6h) only, If some day we want to improve the mysql runs,
# this is the place to enable them.
# db: mysqli
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium, zip
- os: windows-latest
php: 8.0
db: pgsql
extensions: exif, fileinfo, gd, intl, pgsql, mysql, redis, soap, sodium
steps:
- name: Setting up DB mysql
if: ${{ matrix.db == 'mysqli' }}
uses: shogo82148/actions-setup-mysql@v1
with:
mysql-version: 8.0
user: test
password: test
- name: Creating DB mysql
if: ${{ matrix.db == 'mysqli' }}
run: mysql --host 127.0.0.1 -utest -ptest -e 'CREATE DATABASE IF NOT EXISTS test COLLATE = utf8mb4_bin;';
- name: Setting up DB pgsql
if: ${{ matrix.db == 'pgsql' }}
run: |
# TODO: Remove these conf. modifications when php74 or php80 are lowest.
# Change to old md5 auth, because php73 does not support it.
# #password_encryption = scram-sha-256
(Get-Content "$env:PGDATA\postgresql.conf"). `
replace('#password_encryption = scram-sha-256', 'password_encryption = md5') | `
Set-Content "$env:PGDATA\postgresql.conf"
(Get-Content "$env:PGDATA\pg_hba.conf"). `
replace('scram-sha-256', 'md5') | `
Set-Content "$env:PGDATA\pg_hba.conf"
$pgService = Get-Service -Name postgresql*
Set-Service -InputObject $pgService -Status running -StartupType automatic
Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
& $env:PGBIN\psql --command="CREATE USER test PASSWORD 'test'" --command="\du"
- name: Creating DB pgsql
if: ${{ matrix.db == 'pgsql' }}
run: |
& $env:PGBIN\createdb --owner=test test
$env:PGPASSWORD = 'test'
& $env:PGBIN\psql --username=test --host=localhost --list test
- name: Configuring git vars
uses: rlespinasse/github-slug-action@v4
- name: Setting up PHP ${{ matrix.php }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: ${{ matrix.extensions }}
ini-values: max_input_vars=5000
coverage: none
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checking out code from ${{ env.GITHUB_REF_SLUG }}
uses: actions/checkout@v3
# Needs to be done after php is available, git configured and Moodle checkout has happened.
- name: Setting up moodle-exttests service
run: |
git clone https://github.com/moodlehq/moodle-exttests.git
nssm install php-built-in C:\tools\php\php.exe -S localhost:8080 -t D:\a\moodle\moodle\moodle-exttests
nssm start php-built-in
- name: Setting up redis service
run: |
choco install redis-64 --version 3.0.503 --no-progress
nssm install redis redis-server
nssm start redis
- name: Setting up PHPUnit
env:
dbtype: ${{ matrix.db }}
shell: bash
run: |
echo "pathtophp=$(which php)" >> $GITHUB_ENV # Inject installed pathtophp to env. The template config needs it.
cp .github/workflows/config-template.php config.php
mkdir ../moodledata
php admin/tool/phpunit/cli/init.php --no-composer-self-update
- name: Running PHPUnit tests
env:
dbtype: ${{ matrix.db }}
phpunit_options: ${{ secrets.phpunit_options }}
run: vendor/bin/phpunit $phpunit_options ${{ inputs.phpunit_extra_options }}
+5 -30
View File
@@ -9,23 +9,15 @@
#
# See gitignore(5) man page for more details
#
# Swap files (vim)
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Temporary files including undo
*~
#
/config.php
/lib/editor/tinymce/extra/tools/temp/
*~
*.swp
/tags
/TAGS
/cscope.*
/.patches/
/.idea/
.phpstorm.*
/nbproject/
CVS
.DS_Store
@@ -33,25 +25,8 @@ 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 support - only composer.json is to be in git, the rest is installed in each checkout.
composer.phar
composer.lock
/vendor/
/behat.yml
*/yui/build/*/*-coverage.js
/lib/yuilib/*/build/*/*-coverage.js
# lib/yuilib/version/module/module-coverage.js
/lib/yuilib/*/*/*-coverage.js
atlassian-ide-plugin.xml
/node_modules/
/.vscode/
moodle-plugin-ci.phar
.eslintignore
.stylelintignore
/jsdoc
/admin/tool/componentlibrary/docs
/admin/tool/componentlibrary/hugo/site/data/my-index.json
.hugo_build.lock
phpcs.xml
jsconfig.json
-169
View File
@@ -1,169 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This is a babel plugin to add the Moodle module names to the AMD modules
* as part of the transpiling process.
*
* In addition it will also add a return statement for the default export if the
* module is using default exports. This is a highly specific Moodle thing because
* we're transpiling to AMD and none of the existing Babel 7 plugins work correctly.
*
* This will fix the issue where an ES6 module using "export default Foo" will be
* transpiled into an AMD module that returns {default: Foo}; Instead it will now
* just simply return Foo.
*
* Note: This means all other named exports in that module are ignored and won't be
* exported.
*
* @copyright 2018 Ryan Wyllie <ryan@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
"use strict";
/* eslint-env node */
module.exports = ({template, types}) => {
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
/**
* Search the list of components that match the given file name
* and return the Moodle component for that file, if found.
*
* Throw an exception if no matching component is found.
*
* @throws {Error}
* @param {string} searchFileName The file name to look for.
* @return {string} Moodle component
*/
function getModuleNameFromFileName(searchFileName) {
searchFileName = fs.realpathSync(searchFileName);
const relativeFileName = searchFileName.replace(`${cwd}${path.sep}`, '').replace(/\\/g, '/');
const [componentPath, file] = relativeFileName.split('/amd/src/');
const fileName = file.replace('.js', '');
// Check subsystems first which require an exact match.
const componentName = ComponentList.getComponentFromPath(componentPath);
if (componentName) {
return `${componentName}/${fileName}`;
}
// This matches the previous PHP behaviour that would throw an exception
// if it couldn't parse an AMD file.
throw new Error(`Unable to find module name for ${searchFileName} (${componentPath}::${file}}`);
}
/**
* This is heavily inspired by the babel-plugin-add-module-exports plugin.
* See: https://github.com/59naga/babel-plugin-add-module-exports
*
* This is used when we detect a module using "export default Foo;" to make
* sure the transpiled code just returns Foo directly rather than an object
* with the default property (i.e. {default: Foo}).
*
* Note: This means that we can't support modules that combine named exports
* with a default export.
*
* @param {String} path
* @param {String} exportObjectName
*/
function addModuleExportsDefaults(path, exportObjectName) {
const rootPath = path.findParent(path => {
return path.key === 'body' || !path.parentPath;
});
// HACK: `path.node.body.push` instead of path.pushContainer(due doesn't work in Plugin.post).
// This is hardcoded to work specifically with AMD.
rootPath.node.body.push(template(`return ${exportObjectName}.default`)());
}
return {
pre() {
this.seenDefine = false;
this.addedReturnForDefaultExport = false;
},
visitor: {
// Plugin ordering is only respected if we visit the "Program" node.
// See: https://babeljs.io/docs/en/plugins.html#plugin-preset-ordering
//
// We require this to run after the other AMD module transformation so
// let's visit the "Program" node.
Program: {
exit(path) {
path.traverse({
CallExpression(path) {
// If we find a "define" function call.
if (!this.seenDefine && path.get('callee').isIdentifier({name: 'define'})) {
// We only want to modify the first instance of define that we find.
this.seenDefine = true;
// Get the Moodle component for the file being processed.
var moduleName = getModuleNameFromFileName(this.file.opts.filename);
// The function signature of `define()` is:
// define = function (name, deps, callback) {...}
// Ensure that if the moduel supplied its own name that it is replaced.
if (path.node.arguments.length > 0) {
// Ensure that there is only one name.
if (path.node.arguments[0].type === 'StringLiteral') {
// eslint-disable-next-line
console.log(`Replacing module name '${path.node.arguments[0].extra.rawValue}' with ${moduleName}`);
path.node.arguments.shift();
}
}
// Add the module name as the first argument to the define function.
path.node.arguments.unshift(types.stringLiteral(moduleName));
// Add a space after the define function in the built file so that previous versions
// of Moodle will not try to add the module name to the file when it's being served
// by PHP. This forces the regex in PHP to not match for this file.
path.node.callee.name = 'define ';
}
// Check for any Object.defineProperty('exports', 'default') calls.
if (!this.addedReturnForDefaultExport && path.get('callee').matchesPattern('Object.defineProperty')) {
const [identifier, prop] = path.get('arguments');
const objectName = identifier.get('name').node;
const propertyName = prop.get('value').node;
if ((objectName === 'exports' || objectName === '_exports') && propertyName === 'default') {
addModuleExportsDefaults(path, objectName);
this.addedReturnForDefaultExport = true;
}
}
},
AssignmentExpression(path) {
// Check for an exports.default assignments.
if (
!this.addedReturnForDefaultExport &&
(
path.get('left').matchesPattern('exports.default') ||
path.get('left').matchesPattern('_exports.default')
)
) {
const objectName = path.get('left.object.name').node;
addModuleExportsDefaults(path, objectName);
this.addedReturnForDefaultExport = true;
}
}
}, this);
}
}
}
};
};
-394
View File
@@ -1,394 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Helper functions for working with Moodle component names, directories, and sources.
*
* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
"use strict";
/* eslint-env node */
/** @var {Object} A list of subsystems in Moodle */
const componentData = {};
/**
* Load details of all moodle modules.
*
* @returns {object}
*/
const fetchComponentData = () => {
const fs = require('fs');
const path = require('path');
const glob = require('glob');
const gruntFilePath = process.cwd();
if (!Object.entries(componentData).length) {
componentData.subsystems = {};
componentData.pathList = [];
// Fetch the component definiitions from the distributed JSON file.
const components = JSON.parse(fs.readFileSync(`${gruntFilePath}/lib/components.json`));
// Build the list of moodle subsystems.
componentData.subsystems.lib = 'core';
componentData.pathList.push(process.cwd() + path.sep + 'lib');
for (const [component, thisPath] of Object.entries(components.subsystems)) {
if (thisPath) {
// Prefix "core_" to the front of the subsystems.
componentData.subsystems[thisPath] = `core_${component}`;
componentData.pathList.push(process.cwd() + path.sep + thisPath);
}
}
// The list of components incldues the list of subsystems.
componentData.components = componentData.subsystems;
// Go through each of the plugintypes.
Object.entries(components.plugintypes).forEach(([pluginType, pluginTypePath]) => {
// We don't allow any code in this place..?
glob.sync(`${pluginTypePath}/*/version.php`).forEach(versionPath => {
const componentPath = fs.realpathSync(path.dirname(versionPath));
const componentName = path.basename(componentPath);
const frankenstyleName = `${pluginType}_${componentName}`;
componentData.components[`${pluginTypePath}/${componentName}`] = frankenstyleName;
componentData.pathList.push(componentPath);
// Look for any subplugins.
const subPluginConfigurationFile = `${componentPath}/db/subplugins.json`;
if (fs.existsSync(subPluginConfigurationFile)) {
const subpluginList = JSON.parse(fs.readFileSync(fs.realpathSync(subPluginConfigurationFile)));
Object.entries(subpluginList.plugintypes).forEach(([subpluginType, subpluginTypePath]) => {
glob.sync(`${subpluginTypePath}/*/version.php`).forEach(versionPath => {
const componentPath = fs.realpathSync(path.dirname(versionPath));
const componentName = path.basename(componentPath);
const frankenstyleName = `${subpluginType}_${componentName}`;
componentData.components[`${subpluginTypePath}/${componentName}`] = frankenstyleName;
componentData.pathList.push(componentPath);
});
});
}
});
});
}
return componentData;
};
/**
* Get the list of component paths.
*
* @param {string} relativeTo
* @returns {array}
*/
const getComponentPaths = (relativeTo = '') => fetchComponentData().pathList.map(componentPath => {
return componentPath.replace(relativeTo, '');
});
/**
* Get the list of paths to build AMD sources.
*
* @returns {Array}
*/
const getAmdSrcGlobList = () => {
const globList = [];
fetchComponentData().pathList.forEach(componentPath => {
globList.push(`${componentPath}/amd/src/*.js`);
globList.push(`${componentPath}/amd/src/**/*.js`);
});
return globList;
};
/**
* Get the list of paths to build YUI sources.
*
* @param {String} relativeTo
* @returns {Array}
*/
const getYuiSrcGlobList = relativeTo => {
const globList = [];
fetchComponentData().pathList.forEach(componentPath => {
const relativeComponentPath = componentPath.replace(relativeTo, '');
globList.push(`${relativeComponentPath}/yui/src/**/*.js`);
});
return globList;
};
/**
* Get the list of paths to thirdpartylibs.xml.
*
* @param {String} relativeTo
* @returns {Array}
*/
const getThirdPartyLibsList = relativeTo => {
const fs = require('fs');
const path = require('path');
return fetchComponentData().pathList
.map(componentPath => path.relative(relativeTo, componentPath) + '/thirdpartylibs.xml')
.map(componentPath => componentPath.replace(/\\/g, '/'))
.filter(path => fs.existsSync(path))
.sort();
};
/**
* Get the list of thirdparty library paths.
*
* @returns {array}
*/
const getThirdPartyPaths = () => {
const DOMParser = require('@xmldom/xmldom').DOMParser;
const fs = require('fs');
const path = require('path');
const xpath = require('xpath');
const thirdpartyfiles = getThirdPartyLibsList(fs.realpathSync('./'));
const libs = ['node_modules/', 'vendor/'];
const addLibToList = lib => {
if (!lib.match('\\*') && fs.statSync(lib).isDirectory()) {
// Ensure trailing slash on dirs.
lib = lib.replace(/\/?$/, '/');
}
// Look for duplicate paths before adding to array.
if (libs.indexOf(lib) === -1) {
libs.push(lib);
}
};
thirdpartyfiles.forEach(function(file) {
const dirname = path.dirname(file);
const xmlContent = fs.readFileSync(file, 'utf8');
const doc = new DOMParser().parseFromString(xmlContent);
const nodes = xpath.select("/libraries/library/location/text()", doc);
nodes.forEach(function(node) {
let lib = path.posix.join(dirname, node.toString());
addLibToList(lib);
});
});
return libs;
};
/**
* Find the name of the component matching the specified path.
*
* @param {String} path
* @returns {String|null} Name of matching component.
*/
const getComponentFromPath = path => {
const componentList = fetchComponentData().components;
if (componentList.hasOwnProperty(path)) {
return componentList[path];
}
return null;
};
/**
* Check whether the supplied path, relative to the Gruntfile.js, is in a known component.
*
* @param {String} checkPath The path to check. This can be with either Windows, or Linux directory separators.
* @returns {String|null}
*/
const getOwningComponentDirectory = checkPath => {
const path = require('path');
// Fetch all components into a reverse sorted array.
// This ensures that components which are within the directory of another component match first.
const pathList = Object.keys(fetchComponentData().components).sort().reverse();
for (const componentPath of pathList) {
// If the componentPath is the directory being checked, it will be empty.
// If the componentPath is a parent of the directory being checked, the relative directory will not start with ..
if (!path.relative(componentPath, checkPath).startsWith('..')) {
return componentPath;
}
}
return null;
};
/**
* Get the latest tag in a remote GitHub repository.
*
* @param {string} url The remote repository.
* @returns {Array}
*/
const getRepositoryTags = async(url) => {
const gtr = require('git-tags-remote');
try {
const tags = await gtr.get(url);
if (tags !== undefined) {
return tags;
}
} catch (error) {
return [];
}
return [];
};
/**
* Get the list of thirdparty libraries that could be upgraded.
*
* @returns {Array}
*/
const getThirdPartyLibsUpgradable = async() => {
const libraries = getThirdPartyLibsData().filter((library) => !!library.repository);
const upgradableLibraries = [];
const versionCompare = (a, b) => {
if (a === b) {
return 0;
}
const aParts = a.split('.');
const bParts = b.split('.');
for (let i = 0; i < Math.min(aParts.length, bParts.length); i++) {
const aPart = parseInt(aParts[i], 10);
const bPart = parseInt(bParts[i], 10);
if (aPart > bPart) {
// 1.1.0 > 1.0.9
return 1;
} else if (aPart < bPart) {
// 1.0.9 < 1.1.0
return -1;
} else {
// Same version.
continue;
}
}
if (aParts.length > bParts.length) {
// 1.0.1 > 1.0
return 1;
}
// 1.0 < 1.0.1
return -1;
};
for (let library of libraries) {
upgradableLibraries.push(
getRepositoryTags(library.repository).then((tagMap) => {
library.version = library.version.replace(/^v/, '');
const currentVersion = library.version.replace(/moodle-/, '');
const currentMajorVersion = library.version.split('.')[0];
const tags = [...tagMap]
.map((tagData) => tagData[0])
.filter((tag) => !tag.match(/(alpha|beta|rc)/))
.map((tag) => tag.replace(/^v/, ''))
.sort((a, b) => versionCompare(b, a));
if (!tags.length) {
library.warning = "Unable to find any comparable tags.";
return library;
}
library.latestVersion = tags[0];
tags.some((tag) => {
if (!tag) {
return false;
}
// See if the version part matches.
const majorVersion = tag.split('.')[0];
if (majorVersion === currentMajorVersion) {
library.latestSameMajorVersion = tag;
return true;
}
return false;
});
if (versionCompare(currentVersion, library.latestVersion) > 0) {
// Moodle somehow has a newer version than the latest version.
library.warning = `Newer version found: ${currentVersion} > ${library.latestVersion} for ${library.name}`;
return library;
}
if (library.version !== library.latestVersion) {
// Delete version and add it again at the end of the array. That way, current and new will stay closer.
delete library.version;
library.version = currentVersion;
return library;
}
return null;
})
);
}
return (await Promise.all(upgradableLibraries)).filter((library) => !!library);
};
/**
* Get the list of thirdparty libraries.
*
* @returns {Array}
*/
const getThirdPartyLibsData = () => {
const DOMParser = require('@xmldom/xmldom').DOMParser;
const fs = require('fs');
const xpath = require('xpath');
const path = require('path');
const libraryList = [];
const libraryFields = [
'location',
'name',
'version',
'repository',
];
const thirdpartyfiles = getThirdPartyLibsList(fs.realpathSync('./'));
thirdpartyfiles.forEach(function(libraryPath) {
const xmlContent = fs.readFileSync(libraryPath, 'utf8');
const doc = new DOMParser().parseFromString(xmlContent);
const libraries = xpath.select("/libraries/library", doc);
for (const library of libraries) {
const libraryData = [];
for (const field of libraryFields) {
libraryData[field] = xpath.select(`${field}/text()`, library)?.toString();
}
libraryData.location = path.join(path.dirname(libraryPath), libraryData.location);
libraryList.push(libraryData);
}
});
return libraryList.sort((a, b) => a.location.localeCompare(b.location));
};
module.exports = {
fetchComponentData,
getAmdSrcGlobList,
getComponentFromPath,
getComponentPaths,
getOwningComponentDirectory,
getYuiSrcGlobList,
getThirdPartyLibsList,
getThirdPartyPaths,
getThirdPartyLibsUpgradable,
};
-19
View File
@@ -1,19 +0,0 @@
# Moodle JavaScript Documentation
```
.-..-.
_____ | || |
/____/-.---_ .---. .---. .-.| || | .---.
| | _ _ |/ _ \/ _ \/ _ || |/ __ \
* | | | | | || |_| || |_| || |_| || || |___/
|_| |_| |_|\_____/\_____/\_____||_|\_____)
Moodle - the world's open source learning platform
```
## About
This generated documentation includes API documentation for JavaScript written in the AMD and ES2015 module formats within Moodle.
## Related information
See [https://moodledev.io](https://moodledev.io) for other related Developer Documentation.
-131
View File
@@ -1,131 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Helper functions for working with Moodle component names, directories, and sources.
*
* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
"use strict";
/* eslint-env node */
// Do not include any plugins as stanard.
const plugins = [];
plugins.push('plugins/markdown');
/**
* Get the source configuration.
*
* @return {Object}
*/
const getSource = () => {
const glob = require('glob');
const path = require('path');
const ComponentList = require(path.resolve('.grunt/components.js'));
const thirdPartyPaths = ComponentList.getThirdPartyPaths();
const source = {
include: [],
includePattern: ".+\\.js$",
};
let includeList = [];
ComponentList.getAmdSrcGlobList().forEach(async pattern => {
includeList.push(...glob.sync(pattern));
});
const cwdLength = process.cwd().length + 1;
includeList.forEach(path => {
if (source.include.indexOf(path) !== -1) {
// Ensure no duplicates.
return;
}
const relPath = path.substring(cwdLength);
if (thirdPartyPaths.indexOf(relPath) !== -1) {
return;
}
source.include.push(path);
});
source.include.push('.grunt/jsdoc/README.md');
return source;
};
const tags = {
// Allow the use of unknown tags.
// We have a lot of legacy uses of these.
allowUnknownTags: true,
// We make use of jsdoc and closure dictionaries as standard.
dictionaries: [
'jsdoc',
'closure',
],
};
// Template configuraiton.
const templates = {
cleverLinks: false,
monospaceLinks: false,
};
module.exports = {
opts: {
destination: "./jsdoc/",
template: "node_modules/docdash",
},
plugins,
recurseDepth: 10,
source: getSource(),
sourceType: 'module',
tags,
templates,
docdash: {
collapse: true,
search: true,
sort: true,
sectionOrder: [
"Namespaces",
"Modules",
"Events",
"Classes",
"Externals",
"Mixins",
"Tutorials",
"Interfaces"
],
"menu": {
"Developer Docs": {
href: "https://moodledev.io",
target: "_blank",
"class": "menu-item",
id: "devdocs"
},
"MDN Docs": {
href: "https://developer.mozilla.org/en-US/docs/Web/JavaScript",
target: "_blank",
"class": "menu-item",
id: "mdndocs",
},
},
typedefs: true,
},
};
-142
View File
@@ -1,142 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* Component Library build tasks.
*
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Get a child path of the component library.
*
* @param {string} path
* @returns {string}
*/
const getCLPath = path => `admin/tool/componentlibrary/${path}`;
/**
* Get a spawn handler.
*
* This is a generic function to write the spawn output, and then to exit if required and mark the async task as
* complete.
*
* @param {Promise} done
* @returns {function}
*/
const getSpawnHandler = done => (error, result, code) => {
grunt.log.write(result);
if (error) {
grunt.log.error(result.stdout);
process.exit(code);
}
done();
};
/**
* Spawn a function against Node with the provided args.
*
* @param {array} args
* @returns {object}
*/
const spawnNodeCall = (args) => grunt.util.spawn({
cmd: 'node',
args,
}, getSpawnHandler(grunt.task.current.async()));
/**
* Build the docs using Hugo.
*
* @returns {Object} Reference to the spawned task
*/
const docsBuild = () => spawnNodeCall([
'node_modules/hugo-bin/cli.js',
'--config', getCLPath('config.yml'),
'--cleanDestinationDir',
]);
/**
* Build the docs index using the hugo-lunr-indexer.
*
* @returns {Object} Reference to the spawned task
*/
const indexBuild = () => spawnNodeCall([
'node_modules/hugo-lunr-indexer/bin/hli.js',
'-i', getCLPath('content/**'),
'-o', getCLPath('hugo/site/data/my-index.json'),
'-l', 'yaml',
'-d', '---',
]);
/**
* Build the hugo CSS.
*
* @returns {Object} Reference to the spawned task
*/
const cssBuild = () => spawnNodeCall([
'node_modules/sass/sass.js',
'--style', 'expanded',
'--source-map',
'--embed-sources',
'--precision', 6,
'--load-path', process.cwd(),
getCLPath('hugo/scss/docs.scss'),
getCLPath('hugo/dist/css/docs.css'),
]);
// Register the various component library tasks.
grunt.registerTask('componentlibrary:docsBuild', 'Build the component library', docsBuild);
grunt.registerTask('componentlibrary:cssBuild', 'Build the component library', cssBuild);
grunt.registerTask('componentlibrary:indexBuild', 'Build the component library', indexBuild);
grunt.registerTask('componentlibrary', 'Build the component library', [
'componentlibrary:docsBuild',
'componentlibrary:cssBuild',
'componentlibrary:indexBuild',
]);
grunt.config.merge({
watch: {
componentLibraryDocs: {
files: [
getCLPath('content/**/*.md'),
getCLPath('hugo'),
],
tasks: ['componentlibrary:docsBuild', 'componentlibrary:indexBuild'],
},
componentLibraryCSS: {
files: [
getCLPath('hugo/scss/**/*.scss'),
'hugo',
],
tasks: ['componentlibrary:cssBuild'],
},
},
});
// Add the 'componentlibrary' task as a startup task.
grunt.moodleEnv.startupTasks.push('componentlibrary');
return {
docsBuild,
cssBuild,
indexBuild,
};
};
-64
View File
@@ -1,64 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
const files = grunt.moodleEnv.files;
// Project configuration.
grunt.config.merge({
eslint: {
// Even though warnings dont stop the build we don't display warnings by default because
// at this moment we've got too many core warnings.
// To display warnings call: grunt eslint --show-lint-warnings
// To fail on warnings call: grunt eslint --max-lint-warnings=0
// Also --max-lint-warnings=-1 can be used to display warnings but not fail.
options: {
quiet: (!grunt.option('show-lint-warnings')) && (typeof grunt.option('max-lint-warnings') === 'undefined'),
maxWarnings: ((typeof grunt.option('max-lint-warnings') !== 'undefined') ? grunt.option('max-lint-warnings') : -1)
},
// Check AMD src files.
amd: {src: files ? files : grunt.moodleEnv.amdSrc},
// Check YUI module source files.
yui: {src: files ? files : grunt.moodleEnv.yuiSrc},
},
});
grunt.loadNpmTasks('grunt-eslint');
// On watch, we dynamically modify config to build only affected files. This
// method is slightly complicated to deal with multiple changed files at once (copied
// from the grunt-contrib-watch readme).
let changedFiles = Object.create(null);
const onChange = grunt.util._.debounce(function() {
const files = Object.keys(changedFiles);
grunt.config('eslint.amd.src', files);
grunt.config('eslint.yui.src', files);
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', (action, filepath) => {
changedFiles[filepath] = action;
onChange();
});
};
-92
View File
@@ -1,92 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Get the list of feature files to pass to the gherkin linter.
*
* @returns {Array}
*/
const getGherkinLintTargets = () => {
if (grunt.moodleEnv.files) {
// Specific files were requested. Only check these.
return grunt.moodleEnv.files;
}
if (grunt.moodleEnv.inComponent) {
return [`${grunt.moodleEnv.runDir}/tests/behat/*.feature`];
}
return ['**/tests/behat/*.feature'];
};
const handler = function() {
const done = this.async();
const options = grunt.config('gherkinlint.options');
// Grab the gherkin-lint linter and required scaffolding.
const linter = require('gherkin-lint/dist/linter.js');
const featureFinder = require('gherkin-lint/dist/feature-finder.js');
const configParser = require('gherkin-lint/dist/config-parser.js');
const formatter = require('gherkin-lint/dist/formatters/stylish.js');
// Run the linter.
return linter.lint(
featureFinder.getFeatureFiles(grunt.file.expand(options.files)),
configParser.getConfiguration(configParser.defaultConfigFileName)
)
.then(results => {
// Print the results out uncondtionally.
formatter.printResults(results);
return results;
})
.then(results => {
// Report on the results.
// The done function takes a bool whereby a falsey statement causes the task to fail.
return results.every(result => result.errors.length === 0);
})
.then(done); // eslint-disable-line promise/no-callback-in-promise
};
grunt.registerTask('gherkinlint', 'Run gherkinlint against the current directory', handler);
grunt.config.set('gherkinlint', {
options: {
files: getGherkinLintTargets(),
}
});
grunt.config.merge({
watch: {
gherkinlint: {
files: [grunt.moodleEnv.inComponent ? 'tests/behat/*.feature' : '**/tests/behat/*.feature'],
tasks: ['gherkinlint'],
},
},
});
// Add the 'gherkinlint' task as a startup task.
grunt.moodleEnv.startupTasks.push('gherkinlint');
return handler;
};
-100
View File
@@ -1,100 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Generate the PHPCS configuration.
*
* @param {Object} thirdPartyPaths
*/
const phpcsIgnore = (thirdPartyPaths) => {
const {toXML} = require('jstoxml');
const config = {
_name: 'ruleset',
_attrs: {
name: "MoodleCore",
},
_content: [
{
rule: {
_attrs: {
ref: './phpcs.xml.dist',
},
},
},
],
};
thirdPartyPaths.forEach(library => {
config._content.push({
'exclude-pattern': library,
});
});
grunt.file.write('phpcs.xml', toXML(config, {
header: true,
indent: ' ',
}) + "\n");
};
/**
* Generate ignore files (utilising thirdpartylibs.xml data)
*/
const handler = function() {
const path = require('path');
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
// An array of paths to third party directories.
const thirdPartyPaths = ComponentList.getThirdPartyPaths();
// Generate .eslintignore.
const eslintIgnores = [
'# Generated by "grunt ignorefiles"',
// Do not ignore the .grunt directory.
'!/.grunt',
// Ignore all yui/src meta directories and build directories.
'*/**/yui/src/*/meta/',
'*/**/build/',
].concat(thirdPartyPaths);
grunt.file.write('.eslintignore', eslintIgnores.join('\n') + '\n');
// Generate .stylelintignore.
const stylelintIgnores = [
'# Generated by "grunt ignorefiles"',
'**/yui/build/*',
'theme/boost/style/moodle.css',
'theme/classic/style/moodle.css',
'jsdoc/styles/*.css',
'admin/tool/componentlibrary/hugo/dist/css/docs.css',
].concat(thirdPartyPaths);
grunt.file.write('.stylelintignore', stylelintIgnores.join('\n') + '\n');
phpcsIgnore(thirdPartyPaths);
};
grunt.registerTask('ignorefiles', 'Generate ignore files for linters', handler);
return handler;
};
-227
View File
@@ -1,227 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Function to generate the destination for the uglify task
* (e.g. build/file.min.js). This function will be passed to
* the rename property of files array when building dynamically:
* http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
*
* @param {String} destPath the current destination
* @param {String} srcPath the matched src path
* @return {String} The rewritten destination path.
*/
const babelRename = function(destPath, srcPath) {
destPath = srcPath.replace(`amd/src`, `amd/build`);
destPath = destPath.replace(/\.js$/, '.min.js');
return destPath;
};
module.exports = grunt => {
// Load the Ignorefiles tasks.
require('./ignorefiles')(grunt);
// Load the Shifter tasks.
require('./shifter')(grunt);
// Load ESLint.
require('./eslint')(grunt);
// Load jsconfig.
require('./jsconfig')(grunt);
// Load JSDoc.
require('./jsdoc')(grunt);
const path = require('path');
// Register JS tasks.
grunt.registerTask('yui', ['eslint:yui', 'shifter']);
grunt.registerTask('amd', ['ignorefiles', 'eslint:amd', 'rollup']);
grunt.registerTask('js', ['amd', 'yui']);
// Register NPM tasks.
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-rollup');
const babelTransform = require('@babel/core').transform;
const babel = (options = {}) => {
return {
name: 'babel',
transform: (code, id) => {
grunt.log.debug(`Transforming ${id}`);
options.filename = id;
const transformed = babelTransform(code, options);
return {
code: transformed.code,
map: transformed.map
};
}
};
};
// Note: We have to use a rate limit plugin here because rollup runs all tasks asynchronously and in parallel.
// When we kick off a full run, if we kick off a rollup of every file this will fork-bomb the machine.
// To work around this we use a concurrent Promise queue based on the number of available processors.
const rateLimit = () => {
const queue = [];
let queueRunner;
const startQueue = () => {
if (queueRunner) {
return;
}
queueRunner = setTimeout(() => {
const limit = Math.max(1, require('os').cpus().length / 2);
grunt.log.debug(`Starting rollup with queue size of ${limit}`);
runQueue(limit);
}, 100);
};
// The queue runner will run the next `size` items in the queue.
const runQueue = (size = 1) => {
queue.splice(0, size).forEach(resolve => {
resolve();
});
};
return {
name: 'ratelimit',
// The options hook is run in parallel.
// We can return an unresolved Promise which is queued for later resolution.
options: async() => {
return new Promise(resolve => {
queue.push(resolve);
startQueue();
});
},
// When an item in the queue completes, start the next item in the queue.
buildEnd: () => {
runQueue();
},
};
};
const terser = require('rollup-plugin-terser').terser;
grunt.config.merge({
rollup: {
options: {
format: 'esm',
dir: 'output',
sourcemap: true,
treeshake: false,
context: 'window',
plugins: [
rateLimit(),
babel({
sourceMaps: true,
comments: false,
compact: false,
plugins: [
'transform-es2015-modules-amd-lazy',
'system-import-transformer',
// This plugin modifies the Babel transpiling for "export default"
// so that if it's used then only the exported value is returned
// by the generated AMD module.
//
// It also adds the Moodle plugin name to the AMD module definition
// so that it can be imported as expected in other modules.
path.resolve('.grunt/babel-plugin-add-module-to-define.js'),
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-syntax-import-meta',
['@babel/plugin-proposal-class-properties', {'loose': false}],
'@babel/plugin-proposal-json-strings'
],
presets: [
['@babel/preset-env', {
targets: {
browsers: [
">0.3%",
"last 2 versions",
"not ie >= 0",
"not op_mini all",
"not Opera > 0",
"not dead"
]
},
modules: false,
useBuiltIns: false
}]
]
}),
terser({
// Do not mangle variables.
// Makes debugging easier.
mangle: false,
}),
],
},
dist: {
files: [{
expand: true,
src: grunt.moodleEnv.files ? grunt.moodleEnv.files : grunt.moodleEnv.amdSrc,
rename: babelRename
}],
},
},
});
grunt.config.merge({
watch: {
amd: {
files: grunt.moodleEnv.inComponent
? ['amd/src/*.js', 'amd/src/**/*.js']
: ['**/amd/src/**/*.js'],
tasks: ['amd']
},
},
});
// Add the 'js' task as a startup task.
grunt.moodleEnv.startupTasks.push('js');
// On watch, we dynamically modify config to build only affected files. This
// method is slightly complicated to deal with multiple changed files at once (copied
// from the grunt-contrib-watch readme).
let changedFiles = Object.create(null);
const onChange = grunt.util._.debounce(function() {
const files = Object.keys(changedFiles);
grunt.config('rollup.dist.files', [{expand: true, src: files, rename: babelRename}]);
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', function(action, filepath) {
changedFiles[filepath] = action;
onChange();
});
return {
babelRename,
};
};
-53
View File
@@ -1,53 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2022 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const configuration = {
compilerOptions: {
baseUrl: ".",
paths: {
},
target: "es2015",
allowSyntheticDefaultImports: false,
},
exclude: [
"node_modules",
],
include: [],
};
module.exports = (grunt) => {
const handler = () => {
const jsconfigData = Object.assign({}, configuration);
const path = require('path');
const {fetchComponentData} = require(path.join(process.cwd(), '.grunt', 'components.js'));
const componentData = fetchComponentData().components;
for (const [thisPath, component] of Object.entries(componentData)) {
jsconfigData.compilerOptions.paths[`${component}/*`] = [`${thisPath}/amd/src/*`];
jsconfigData.include.push(`${thisPath}/amd/src/**/*`);
}
grunt.file.write('jsconfig.json', JSON.stringify(jsconfigData, null, " ") + "\n");
};
grunt.registerTask('jsconfig', 'Generate a jsconfig configuration compatible with the LSP', handler);
};
-36
View File
@@ -1,36 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
// Project configuration.
grunt.config.merge({
jsdoc: {
dist: {
options: {
configure: ".grunt/jsdoc/jsdoc.conf.js",
},
},
},
});
grunt.loadNpmTasks('grunt-jsdoc');
};
-40
View File
@@ -1,40 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
grunt.loadNpmTasks('grunt-sass');
grunt.config.merge({
sass: {
dist: {
files: {
"theme/boost/style/moodle.css": "theme/boost/scss/preset/default.scss",
"theme/classic/style/moodle.css": "theme/classic/scss/classicgrunt.scss"
}
},
options: {
implementation: require('sass'),
includePaths: ["theme/boost/scss/", "theme/classic/scss/"]
}
},
});
};
-155
View File
@@ -1,155 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/* eslint-env node */
module.exports = grunt => {
/**
* Shifter task. Is configured with a path to a specific file or a directory,
* in the case of a specific file it will work out the right module to be built.
*
* Note that this task runs the invidiaul shifter jobs async (becase it spawns
* so be careful to to call done().
*/
const handler = function() {
const done = this.async();
const options = grunt.config('shifter.options');
const async = require('async');
const path = require('path');
// Run the shifter processes one at a time to avoid confusing output.
async.eachSeries(options.paths, function(src, filedone) {
var args = [];
args.push(path.normalize(process.cwd() + '/node_modules/shifter/bin/shifter'));
// Always ignore the node_modules directory.
args.push('--excludes', 'node_modules');
// Determine the most appropriate options to run with based upon the current location.
if (grunt.file.isMatch('**/yui/**/*.js', src)) {
// When passed a JS file, build our containing module (this happen with
// watch).
grunt.log.debug('Shifter passed a specific JS file');
src = path.dirname(path.dirname(src));
options.recursive = false;
} else if (grunt.file.isMatch('**/yui/src', src)) {
// When in a src directory --walk all modules.
grunt.log.debug('In a src directory');
args.push('--walk');
options.recursive = false;
} else if (grunt.file.isMatch('**/yui/src/*', src)) {
// When in module, only build our module.
grunt.log.debug('In a module directory');
options.recursive = false;
} else if (grunt.file.isMatch('**/yui/src/*/js', src)) {
// When in module src, only build our module.
grunt.log.debug('In a source directory');
src = path.dirname(src);
options.recursive = false;
}
if (grunt.option('watch')) {
grunt.fail.fatal('The --watch option has been removed, please use `grunt watch` instead');
}
// Add the stderr option if appropriate
if (grunt.option('verbose')) {
args.push('--lint-stderr');
}
if (grunt.option('no-color')) {
args.push('--color=false');
}
var execShifter = function() {
grunt.log.ok("Running shifter on " + src);
grunt.util.spawn({
cmd: "node",
args: args,
opts: {cwd: src, stdio: 'inherit', env: process.env}
}, function(error, result, code) {
if (code) {
grunt.fail.fatal('Shifter failed with code: ' + code);
} else {
grunt.log.ok('Shifter build complete.');
filedone();
}
});
};
// Actually run shifter.
if (!options.recursive) {
execShifter();
} else {
// Check that there are yui modules otherwise shifter ends with exit code 1.
if (grunt.file.expand({cwd: src}, '**/yui/src/**/*.js').length > 0) {
args.push('--recursive');
execShifter();
} else {
grunt.log.ok('No YUI modules to build.');
filedone();
}
}
}, done);
};
// Register the shifter task.
grunt.registerTask('shifter', 'Run Shifter against the current directory', handler);
// Configure it.
grunt.config.set('shifter', {
options: {
recursive: true,
// Shifter takes a relative path.
paths: grunt.moodleEnv.files ? grunt.moodleEnv.files : [grunt.moodleEnv.runDir]
}
});
grunt.config.merge({
watch: {
yui: {
files: grunt.moodleEnv.inComponent
? ['yui/src/*.json', 'yui/src/**/*.js']
: ['**/yui/src/**/*.js'],
tasks: ['yui']
},
},
});
// On watch, we dynamically modify config to build only affected files. This
// method is slightly complicated to deal with multiple changed files at once (copied
// from the grunt-contrib-watch readme).
let changedFiles = Object.create(null);
const onChange = grunt.util._.debounce(function() {
const files = Object.keys(changedFiles);
grunt.config('shifter.options.paths', files);
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', (action, filepath) => {
changedFiles[filepath] = action;
onChange();
});
return handler;
};
-46
View File
@@ -1,46 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Generate ignore files (utilising thirdpartylibs.xml data)
*/
const handler = function() {
const path = require('path');
// Are we in a YUI directory?
if (path.basename(path.resolve(grunt.moodleEnv.cwd, '../../')) == 'yui') {
grunt.task.run('yui');
// Are we in an AMD directory?
} else if (grunt.moodleEnv.inAMD) {
grunt.task.run('amd');
} else {
// Run all of the requested startup tasks.
grunt.moodleEnv.startupTasks.forEach(taskName => grunt.task.run(taskName));
}
};
// Register the startup task.
grunt.registerTask('startup', 'Run the correct tasks for the current directory', handler);
return handler;
};
-35
View File
@@ -1,35 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
// Load the ignorefiles tasks.
require('./ignorefiles')(grunt);
// Load the Style Lint tasks.
require('./stylelint')(grunt);
// Load the SASS tasks.
require('./sass')(grunt);
// Add the 'css' task as a startup task.
grunt.moodleEnv.startupTasks.push('css');
};
-183
View File
@@ -1,183 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2021 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
const getCssConfigForFiles = files => {
return {
stylelint: {
css: {
// Use a fully-qualified path.
src: files,
options: {
configOverrides: {
rules: {
// These rules have to be disabled in .stylelintrc for scss compat.
"at-rule-no-unknown": true,
}
}
}
},
},
};
};
const getScssConfigForFiles = files => {
return {
stylelint: {
scss: {
options: {syntax: 'scss'},
src: files,
},
},
};
};
/**
* Register any stylelint tasks.
*
* @param {Object} grunt
* @param {Array} files
* @param {String} fullRunDir
*/
const registerStyleLintTasks = () => {
const glob = require('glob');
// The stylelinters do not handle the case where a configuration was provided but no files were included.
// Keep track of whether any files were found.
let hasCss = false;
let hasScss = false;
// The stylelint processors do not take a path argument. They always check all provided values.
// As a result we must check through each glob and determine if any files match the current directory.
const scssFiles = [];
const cssFiles = [];
const requestedFiles = grunt.moodleEnv.files;
if (requestedFiles) {
// Grunt was called with a files argument.
// Check whether each of the requested files matches either the CSS or SCSS source file list.
requestedFiles.forEach(changedFilePath => {
let matchesGlob;
// Check whether this watched path matches any watched SCSS file.
matchesGlob = grunt.moodleEnv.scssSrc.some(watchedPathGlob => {
return glob.sync(watchedPathGlob).indexOf(changedFilePath) !== -1;
});
if (matchesGlob) {
scssFiles.push(changedFilePath);
hasScss = true;
}
// Check whether this watched path matches any watched CSS file.
matchesGlob = grunt.moodleEnv.cssSrc.some(watchedPathGlob => {
return glob.sync(watchedPathGlob).indexOf(changedFilePath) !== -1;
});
if (matchesGlob) {
cssFiles.push(changedFilePath);
hasCss = true;
}
});
} else {
// Grunt was called without a list of files.
// The start directory (runDir) may be a child dir of the project.
// Check each scssSrc file to see if it's in the start directory.
// This means that we can lint just mod/*/styles.css if started in the mod directory.
grunt.moodleEnv.scssSrc.forEach(path => {
if (path.startsWith(grunt.moodleEnv.runDir)) {
scssFiles.push(path);
hasScss = true;
}
});
grunt.moodleEnv.cssSrc.forEach(path => {
if (path.startsWith(grunt.moodleEnv.runDir)) {
cssFiles.push(path);
hasCss = true;
}
});
}
// Register the tasks.
const scssTasks = ['sass'];
if (hasScss) {
grunt.config.merge(getScssConfigForFiles(scssFiles));
scssTasks.unshift('stylelint:scss');
}
scssTasks.unshift('ignorefiles');
const cssTasks = ['ignorefiles'];
if (hasCss) {
grunt.config.merge(getCssConfigForFiles(cssFiles));
cssTasks.push('stylelint:css');
}
// The tasks must be registered, even if empty to ensure a consistent command list.
// They jsut won't run anything.
grunt.registerTask('scss', scssTasks);
grunt.registerTask('rawcss', cssTasks);
};
// Register CSS tasks.
grunt.loadNpmTasks('grunt-stylelint');
// Register the style lint tasks.
registerStyleLintTasks();
grunt.registerTask('css', ['scss', 'rawcss']);
const getCoreThemeMatches = () => {
const scssMatch = 'scss/**/*.scss';
if (grunt.moodleEnv.inTheme) {
return [scssMatch];
}
if (grunt.moodleEnv.runDir.startsWith('theme')) {
return [`*/${scssMatch}`];
}
return [`theme/*/${scssMatch}`];
};
// Add the watch configuration for rawcss, and scss.
grunt.config.merge({
watch: {
rawcss: {
files: [
'**/*.css',
],
excludes: [
'**/moodle.css',
'**/editor.css',
'jsdoc/styles/*.css',
],
tasks: ['rawcss']
},
scss: {
files: getCoreThemeMatches(),
tasks: ['scss']
},
},
});
};
-42
View File
@@ -1,42 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* @copyright 2023 Sara Arjona <sara@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = grunt => {
/**
* Generate upgradable third-party libraries (utilising thirdpartylibs.xml data)
*/
grunt.registerTask('upgradablelibs', 'Generate upgradable third-party libraries', async function() {
const done = this.async();
const path = require('path');
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
// An array of third party libraries that have a newer version in their repositories.
const thirdPartyLibs = await ComponentList.getThirdPartyLibsUpgradable({progress: true});
for (let library of thirdPartyLibs) {
grunt.log.ok(JSON.stringify(Object.assign({}, library), null, 4));
}
done();
});
};
-272
View File
@@ -1,272 +0,0 @@
/**
* This is a wrapper task to handle the grunt watch command. It attempts to use
* Watchman to monitor for file changes, if it's installed, because it's much faster.
*
* If Watchman isn't installed then it falls back to the grunt-contrib-watch file
* watcher for backwards compatibility.
*/
/* eslint-env node */
module.exports = grunt => {
/**
* This is a wrapper task to handle the grunt watch command. It attempts to use
* Watchman to monitor for file changes, if it's installed, because it's much faster.
*
* If Watchman isn't installed then it falls back to the grunt-contrib-watch file
* watcher for backwards compatibility.
*/
const watchHandler = function() {
const async = require('async');
const watchTaskDone = this.async();
let watchInitialised = false;
let watchTaskQueue = {};
let processingQueue = false;
const watchman = require('fb-watchman');
const watchmanClient = new watchman.Client();
// Grab the tasks and files that have been queued up and execute them.
var processWatchTaskQueue = function() {
if (!Object.keys(watchTaskQueue).length || processingQueue) {
// If there is nothing in the queue or we're already processing then wait.
return;
}
processingQueue = true;
// Grab all tasks currently in the queue.
var queueToProcess = watchTaskQueue;
// Reset the queue.
watchTaskQueue = {};
async.forEachSeries(
Object.keys(queueToProcess),
function(task, next) {
var files = queueToProcess[task];
var filesOption = '--files=' + files.join(',');
grunt.log.ok('Running task ' + task + ' for files ' + filesOption);
// Spawn the task in a child process so that it doesn't kill this one
// if it failed.
grunt.util.spawn(
{
// Spawn with the grunt bin.
grunt: true,
// Run from current working dir and inherit stdio from process.
opts: {
cwd: grunt.moodleEnv.fullRunDir,
stdio: 'inherit'
},
args: [task, filesOption]
},
function(err, res, code) {
if (code !== 0) {
// The grunt task failed.
grunt.log.error(err);
}
// Move on to the next task.
next();
}
);
},
function() {
// No longer processing.
processingQueue = false;
// Once all of the tasks are done then recurse just in case more tasks
// were queued while we were processing.
processWatchTaskQueue();
}
);
};
const originalWatchConfig = grunt.config.get(['watch']);
const watchConfig = Object.keys(originalWatchConfig).reduce(function(carry, key) {
if (key == 'options') {
return carry;
}
const value = originalWatchConfig[key];
const taskNames = value.tasks;
const files = value.files;
let excludes = [];
if (value.excludes) {
excludes = value.excludes;
}
taskNames.forEach(function(taskName) {
carry[taskName] = {
files,
excludes,
};
});
return carry;
}, {});
watchmanClient.on('error', function(error) {
// We have to add an error handler here and parse the error string because the
// example way from the docs to check if Watchman is installed doesn't actually work!!
// See: https://github.com/facebook/watchman/issues/509
if (error.message.match('Watchman was not found')) {
// If watchman isn't installed then we should fallback to the other watch task.
grunt.log.ok('It is recommended that you install Watchman for better performance using the "watch" command.');
// Fallback to the old grunt-contrib-watch task.
grunt.renameTask('watch-grunt', 'watch');
grunt.task.run(['watch']);
// This task is finished.
watchTaskDone(0);
} else {
grunt.log.error(error);
// Fatal error.
watchTaskDone(1);
}
});
watchmanClient.on('subscription', function(resp) {
if (resp.subscription !== 'grunt-watch') {
return;
}
resp.files.forEach(function(file) {
grunt.log.ok('File changed: ' + file.name);
var fullPath = grunt.moodleEnv.fullRunDir + '/' + file.name;
Object.keys(watchConfig).forEach(function(task) {
const fileGlobs = watchConfig[task].files;
var match = fileGlobs.some(function(fileGlob) {
return grunt.file.isMatch(`**/${fileGlob}`, fullPath);
});
if (match) {
// If we are watching a subdirectory then the file.name will be relative
// to that directory. However the grunt tasks expect the file paths to be
// relative to the Gruntfile.js location so let's normalise them before
// adding them to the queue.
var relativePath = fullPath.replace(grunt.moodleEnv.gruntFilePath + '/', '');
if (task in watchTaskQueue) {
if (!watchTaskQueue[task].includes(relativePath)) {
watchTaskQueue[task] = watchTaskQueue[task].concat(relativePath);
}
} else {
watchTaskQueue[task] = [relativePath];
}
}
});
});
processWatchTaskQueue();
});
process.on('SIGINT', function() {
// Let the user know that they may need to manually stop the Watchman daemon if they
// no longer want it running.
if (watchInitialised) {
grunt.log.ok('The Watchman daemon may still be running and may need to be stopped manually.');
}
process.exit();
});
// Initiate the watch on the current directory.
watchmanClient.command(['watch-project', grunt.moodleEnv.fullRunDir], function(watchError, watchResponse) {
if (watchError) {
grunt.log.error('Error initiating watch:', watchError);
watchTaskDone(1);
return;
}
if ('warning' in watchResponse) {
grunt.log.error('warning: ', watchResponse.warning);
}
var watch = watchResponse.watch;
var relativePath = watchResponse.relative_path;
watchInitialised = true;
watchmanClient.command(['clock', watch], function(clockError, clockResponse) {
if (clockError) {
grunt.log.error('Failed to query clock:', clockError);
watchTaskDone(1);
return;
}
// Generate the expression query used by watchman.
// Documentation is limited, but see https://facebook.github.io/watchman/docs/expr/allof.html for examples.
// We generate an expression to match any value in the files list of all of our tasks, but excluding
// all value in the excludes list of that task.
//
// [anyof, [
// [allof, [
// [anyof, [
// ['match', validPath, 'wholename'],
// ['match', validPath, 'wholename'],
// ],
// [not,
// [anyof, [
// ['match', invalidPath, 'wholename'],
// ['match', invalidPath, 'wholename'],
// ],
// ],
// ],
var matchWholeName = fileGlob => ['match', fileGlob, 'wholename'];
var matches = Object.keys(watchConfig).map(function(task) {
const matchAll = [];
matchAll.push(['anyof'].concat(watchConfig[task].files.map(matchWholeName)));
if (watchConfig[task].excludes.length) {
matchAll.push(['not', ['anyof'].concat(watchConfig[task].excludes.map(matchWholeName))]);
}
return ['allof'].concat(matchAll);
});
matches = ['anyof'].concat(matches);
var sub = {
expression: matches,
// Which fields we're interested in.
fields: ["name", "size", "type"],
// Add our time constraint.
since: clockResponse.clock
};
if (relativePath) {
/* eslint-disable camelcase */
sub.relative_root = relativePath;
}
watchmanClient.command(['subscribe', watch, 'grunt-watch', sub], function(subscribeError) {
if (subscribeError) {
// Probably an error in the subscription criteria.
grunt.log.error('failed to subscribe: ', subscribeError);
watchTaskDone(1);
return;
}
grunt.log.ok('Listening for changes to files in ' + grunt.moodleEnv.fullRunDir);
});
});
});
};
// Rename the grunt-contrib-watch "watch" task because we're going to wrap it.
grunt.renameTask('watch', 'watch-grunt');
// Register the new watch handler.
grunt.registerTask('watch', 'Run tasks on file changes', watchHandler);
grunt.config.merge({
watch: {
options: {
nospawn: true // We need not to spawn so config can be changed dynamically.
},
},
});
return watchHandler;
};
-2
View File
@@ -1,2 +0,0 @@
**/amd/**
/*.js
-58
View File
@@ -1,58 +0,0 @@
// NOTE: We use eslint now. This file is used only by shifter. We keep the configuration
// here because shifter uses jshint after modules have been concating. Eslint can't
// currently do this.
{
"asi": false,
"bitwise": true,
"boss": false,
"browser": true,
"curly": true,
"debug": false,
"eqeqeq": false,
"eqnull": false,
"es5": false,
"esnext": false,
"evil": false,
"expr": false,
"forin": false,
"funcscope": false,
"globalstrict": false,
"immed": true,
"indent": 4,
"iterator": false,
"lastsemic": false,
"latedef": true,
"laxbreak": true,
"laxcomma": false,
"loopfunc": false,
"maxerr": 500,
"maxlen": 132,
"multistr": false,
"newcap": true,
"noarg": true,
"noempty": true,
"nomen": false,
"onecase": false,
"onevar": false,
"passfail": false,
"plusplus": false,
"predef": [
"M",
"define",
"require"
],
"proto": false,
"regexdash": false,
"regexp": false,
"scripturl": false,
"shadow": false,
"smarttabs": false,
"strict": false,
"sub": false,
"supernew": false,
"trailing": true,
"undef": true,
"unused": true,
"white": false,
"yui": true
}
-1
View File
@@ -1 +0,0 @@
lts/gallium
-5
View File
@@ -1,5 +0,0 @@
{
"coverage": false,
"lint": "config",
"clean": true
}
-95
View File
@@ -1,95 +0,0 @@
{
"plugins": [
"stylelint-csstree-validator"
],
"rules": {
"csstree/validator": true,
"at-rule-empty-line-before": [ "always",
{"except": [ "blockless-after-blockless"], ignore: ["after-comment", "inside-block"]}
],
"at-rule-name-case": "lower",
"at-rule-name-space-after": "always-single-line",
"at-rule-no-unknown": null, # Enabled for non-scss in grunt.
"at-rule-semicolon-newline-after": "always",
"at-rule-semicolon-space-before": "never",
"block-closing-brace-newline-after": "always",
"block-closing-brace-newline-before": "always",
"block-closing-brace-space-before": "always-single-line",
"block-no-empty": true,
"block-opening-brace-newline-after": "always",
"block-opening-brace-space-after": "always-single-line",
"block-opening-brace-space-before": "always",
"color-hex-case": ["lower", { "severity": "warning" }],
"color-hex-length": ["short", { "severity": "warning" }],
"color-no-invalid-hex": true,
"declaration-bang-space-after": "never",
"declaration-bang-space-before": "always",
"declaration-block-no-duplicate-properties": true,
"declaration-block-no-shorthand-property-overrides": true,
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-block-semicolon-space-before": "never",
"declaration-block-single-line-max-declarations": 1,
"declaration-block-trailing-semicolon": "always",
"declaration-colon-newline-after": "always-multi-line",
"declaration-colon-space-after": "always-single-line",
"declaration-colon-space-before": "never",
"declaration-no-important": true,
"font-family-no-duplicate-names": true,
"function-calc-no-unspaced-operator": true,
"function-comma-newline-after": "always-multi-line",
"function-comma-space-after": "always-single-line",
"function-comma-space-before": "never",
"function-linear-gradient-no-nonstandard-direction": true,
"function-max-empty-lines": 0,
"function-name-case": "lower",
"function-parentheses-newline-inside": "always-multi-line",
"function-parentheses-space-inside": "never-single-line",
"function-url-scheme-blacklist": ["data"],
"function-whitespace-after": "always",
"indentation": 4,
"keyframe-declaration-no-important": true,
"length-zero-no-unit": [true, { "severity": "warning" }],
"max-empty-lines": 2,
"max-line-length": [132, { "severity": "warning" }],
"media-feature-colon-space-after": "always",
"media-feature-colon-space-before": "never",
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "always",
"media-query-list-comma-newline-after": "always-multi-line",
"media-query-list-comma-space-after": "always-single-line",
"media-query-list-comma-space-before": "never",
"no-empty-source": true,
"no-eol-whitespace": true,
"no-extra-semicolons": [true, { "severity": "warning" }],
"no-invalid-double-slash-comments": true,
"no-unknown-animations": true,
"property-case": "lower",
"property-no-unknown": true,
"selector-attribute-brackets-space-inside": "never",
"selector-attribute-operator-space-after": "never",
"selector-attribute-operator-space-before": "never",
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always",
"selector-list-comma-newline-after": "always",
"selector-list-comma-space-before": "never",
"selector-max-empty-lines": 0,
"selector-pseudo-class-case": "lower",
"selector-pseudo-class-no-unknown": true,
"selector-pseudo-class-parentheses-space-inside": "never",
"selector-pseudo-element-case": "lower",
"selector-pseudo-element-no-unknown": true,
"selector-type-case": "lower",
"selector-type-no-unknown": true,
"string-no-newline": true,
"time-min-milliseconds": 100,
"unit-blacklist": ["pt"],
"unit-case": "lower",
"unit-no-unknown": true,
"value-keyword-case": ["lower", {"ignoreKeywords": ["/(@|$)/"]}],
"value-list-comma-newline-after": "always-multi-line",
"value-list-comma-space-after": "always-single-line",
"value-list-comma-space-before": "never",
}
}
-56
View File
@@ -1,56 +0,0 @@
CONTRIBUTING TO MOODLE
======================
Moodle is made by people like you. We are members of a big worldwide community
of developers, designers, teachers, testers, translators and other users. We
work in universities, schools, companies and other places. You are very welcome
to join us and contribute to the project.
See <https://moodledev.io/general/community/contribute> for the many ways you
can help, not only with coding.
Moodle is open to community contributions to core, though all code must go
through peer-review, automated behaviour testing, continuous integration and
human post-integration checks.
Pull requests
-------------
Please do not open pull requests via Github. The repository there is just a
mirror of the official repository at <https://git.moodle.org>. Issues are
reported and patches provided via <https://tracker.moodle.org>. See below for
more information.
Moodle core bug fixes and new features
--------------------------------------
During the years of intensive development, a mature process of including
submitted patches has evolved.
* Every bug fix or new feature must have a tracker issue.
* You publish the branch implementing the fix or new feature in your public
clone of the moodle.git repository (typically on Github).
* Your patch is peer-reviewed, discussed, integrated, tested and then released
as a part of moodle.git.
* New features are developed on the master branch. Bug fixes are also
backported to currently supported maintenance (stable) branches.
For further details, see <https://moodledev.io/general/development/process>.
Moodle plugins
--------------
Moodle has a framework for additional plugins to extend its functionality. We
have a Moodle plugins directory <https://moodle.org/plugins/> where you can
register and maintain your plugin. Plugins hosted in the plugins directory can
be easily installed and updated via the Moodle administration interface.
* You are expected to have a public source code repository with your plugin
code.
* After registering your plugin in the plugins directory it is reviewed before
being published.
* You are expected to continuously release updated versions of the plugin via
the plugins directory. We do not pull from your code repository; you must do
it explicitly.
For further details, see <https://moodledev.io/general/community/plugincontribution>.
-267
View File
@@ -1,267 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/* jshint node: true, browser: false */
/* eslint-env node */
/**
* Grunt configuration for Moodle.
*
* @copyright 2014 Andrew Nicols
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Setup the Grunt Moodle environment.
*
* @param {Grunt} grunt
* @returns {Object}
*/
const setupMoodleEnvironment = grunt => {
const fs = require('fs');
const path = require('path');
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
const getAmdConfiguration = () => {
// If the cwd is the amd directory in the current component then it will be empty.
// If the cwd is a child of the component's AMD directory, the relative directory will not start with ..
let inAMD = !path.relative(`${componentDirectory}/amd`, cwd).startsWith('..');
// Globbing pattern for matching all AMD JS source files.
let amdSrc = [];
if (inComponent) {
amdSrc.push(
componentDirectory + "/amd/src/*.js",
componentDirectory + "/amd/src/**/*.js"
);
} else {
amdSrc = ComponentList.getAmdSrcGlobList();
}
return {
inAMD,
amdSrc,
};
};
const getYuiConfiguration = () => {
let yuiSrc = [];
if (inComponent) {
yuiSrc.push(componentDirectory + "/yui/src/**/*.js");
} else {
yuiSrc = ComponentList.getYuiSrcGlobList(gruntFilePath + '/');
}
return {
yuiSrc,
};
};
const getStyleConfiguration = () => {
const ComponentList = require(path.join(process.cwd(), '.grunt', 'components.js'));
// Build the cssSrc and scssSrc.
// Valid paths are:
// [component]/styles.css; and either
// [theme/[themename]]/scss/**/*.scss; or
// [theme/[themename]]/style/*.css.
//
// If a theme has scss, then it is assumed that the style directory contains generated content.
let cssSrc = [];
let scssSrc = [];
const checkComponentDirectory = componentDirectory => {
const isTheme = componentDirectory.startsWith('theme/');
if (isTheme) {
const scssDirectory = `${componentDirectory}/scss`;
if (fs.existsSync(scssDirectory)) {
// This theme has an SCSS directory.
// Include all scss files within it recursively, but do not check for css files.
scssSrc.push(`${scssDirectory}/*.scss`);
scssSrc.push(`${scssDirectory}/**/*.scss`);
} else {
// This theme has no SCSS directory.
// Only hte CSS files in the top-level directory are checked.
cssSrc.push(`${componentDirectory}/style/*.css`);
}
} else {
// This is not a theme.
// All other plugin types are restricted to a single styles.css in their top level.
cssSrc.push(`${componentDirectory}/styles.css`);
}
};
if (inComponent) {
checkComponentDirectory(componentDirectory);
} else {
ComponentList.getComponentPaths(`${gruntFilePath}/`).forEach(componentPath => {
checkComponentDirectory(componentPath);
});
}
return {
cssSrc,
scssSrc,
};
};
/**
* Calculate the cwd, taking into consideration the `root` option (for Windows).
*
* @param {Object} grunt
* @returns {String} The current directory as best we can determine
*/
const getCwd = grunt => {
let cwd = fs.realpathSync(process.env.PWD || process.cwd());
// Windows users can't run grunt in a subdirectory, so allow them to set
// the root by passing --root=path/to/dir.
if (grunt.option('root')) {
const root = grunt.option('root');
if (grunt.file.exists(__dirname, root)) {
cwd = fs.realpathSync(path.join(__dirname, root));
grunt.log.ok('Setting root to ' + cwd);
} else {
grunt.fail.fatal('Setting root to ' + root + ' failed - path does not exist');
}
}
return cwd;
};
// Detect directories:
// * gruntFilePath The real path on disk to this Gruntfile.js
// * cwd The current working directory, which can be overridden by the `root` option
// * relativeCwd The cwd, relative to the Gruntfile.js
// * componentDirectory The root directory of the component if the cwd is in a valid component
// * inComponent Whether the cwd is in a valid component
// * runDir The componentDirectory or cwd if not in a component, relative to Gruntfile.js
// * fullRunDir The full path to the runDir
const gruntFilePath = fs.realpathSync(process.cwd());
const cwd = getCwd(grunt);
const relativeCwd = path.relative(gruntFilePath, cwd);
const componentDirectory = ComponentList.getOwningComponentDirectory(relativeCwd);
const inComponent = !!componentDirectory;
const inTheme = !!componentDirectory && componentDirectory.startsWith('theme/');
const runDir = inComponent ? componentDirectory : relativeCwd;
const fullRunDir = fs.realpathSync(gruntFilePath + path.sep + runDir);
const {inAMD, amdSrc} = getAmdConfiguration();
const {yuiSrc} = getYuiConfiguration();
const {cssSrc, scssSrc} = getStyleConfiguration();
let files = null;
if (grunt.option('files')) {
// Accept a comma separated list of files to process.
files = grunt.option('files').split(',');
}
grunt.log.debug('============================================================================');
grunt.log.debug(`= Node version: ${process.versions.node}`);
grunt.log.debug(`= grunt version: ${grunt.package.version}`);
grunt.log.debug(`= process.cwd: '` + process.cwd() + `'`);
grunt.log.debug(`= process.env.PWD: '${process.env.PWD}'`);
grunt.log.debug(`= path.sep '${path.sep}'`);
grunt.log.debug('============================================================================');
grunt.log.debug(`= gruntFilePath: '${gruntFilePath}'`);
grunt.log.debug(`= relativeCwd: '${relativeCwd}'`);
grunt.log.debug(`= componentDirectory: '${componentDirectory}'`);
grunt.log.debug(`= inComponent: '${inComponent}'`);
grunt.log.debug(`= runDir: '${runDir}'`);
grunt.log.debug(`= fullRunDir: '${fullRunDir}'`);
grunt.log.debug('============================================================================');
if (inComponent) {
grunt.log.ok(`Running tasks for component directory ${componentDirectory}`);
}
return {
amdSrc,
componentDirectory,
cwd,
cssSrc,
files,
fullRunDir,
gruntFilePath,
inAMD,
inComponent,
inTheme,
relativeCwd,
runDir,
scssSrc,
yuiSrc,
};
};
/**
* Verify tha tthe current NodeJS version matches the required version in package.json.
*
* @param {Grunt} grunt
*/
const verifyNodeVersion = grunt => {
const semver = require('semver');
// Verify the node version is new enough.
var expected = semver.validRange(grunt.file.readJSON('package.json').engines.node);
var actual = semver.valid(process.version);
if (!semver.satisfies(actual, expected)) {
grunt.fail.fatal('Node version not satisfied. Require ' + expected + ', version installed: ' + actual);
}
};
/**
* Grunt configuration.
*
* @param {Grunt} grunt
*/
module.exports = function(grunt) {
// Verify that the Node version meets our requirements.
verifyNodeVersion(grunt);
// Setup the Moodle environemnt within the Grunt object.
grunt.moodleEnv = setupMoodleEnvironment(grunt);
/**
* Add the named task.
*
* @param {string} name
* @param {Grunt} grunt
*/
const addTask = (name, grunt) => {
const path = require('path');
const taskPath = path.resolve(`./.grunt/tasks/${name}.js`);
grunt.log.debug(`Including tasks for ${name} from ${taskPath}`);
require(path.resolve(`./.grunt/tasks/${name}.js`))(grunt);
};
// Startup tasks.
grunt.moodleEnv.startupTasks = [];
// Add Moodle task configuration.
addTask('gherkinlint', grunt);
addTask('ignorefiles', grunt);
addTask('javascript', grunt);
addTask('style', grunt);
addTask('componentlibrary', grunt);
addTask('watch', grunt);
addTask('startup', grunt);
addTask('upgradablelibs', grunt);
// Register the default task.
grunt.registerTask('default', ['startup']);
};
-20
View File
@@ -1,20 +0,0 @@
MOODLE INSTALLATION
===================
Here is a short summary of the installation process (which can take just a few
minutes):
1. Move the Moodle files into your web directory.
2. Create a single database for Moodle to store all its tables in (or choose an
existing database).
3. Visit your Moodle site with a browser. You should be taken to the
install.php script, which will lead you through creating a config.php file
and then setting up Moodle, creating an admin account etc.
4. Set up a cron task to call the file admin/cron.php every minute.
For more information, see <https://docs.moodle.org/en/Installing_Moodle>.
Good luck and have fun!
-7
View File
@@ -1,7 +0,0 @@
*** PLEASE DO NOT OPEN PULL REQUESTS VIA GITHUB ***
The moodle.git repository at Github is just a mirror of the official repository. We do not accept pull requests at Github.
See CONTRIBUTING.txt guidelines for how to contribute patches for Moodle. Thank you.
--
+22 -21
View File
@@ -1,28 +1,29 @@
.-..-.
_____ | || |
/____/-.---_ .---. .---. .-.| || | .---.
| | _ _ |/ _ \/ _ \/ _ || |/ __ \
* | | | | | || |_| || |_| || |_| || || |___/
|_| |_| |_|\_____/\_____/\_____||_|\_____)
QUICK INSTALL
=============
Moodle - the world's open source learning platform
For the impatient, here is a basic outline of the
installation process, which normally takes me only
a few minutes:
Moodle <https://moodle.org> is a learning platform designed to provide
educators, administrators and learners with a single robust, secure and
integrated system to create personalised learning environments.
1) Move the Moodle files into your web directory.
You can download Moodle <https://download.moodle.org> and run it on your own
web server, ask one of our Moodle Partners <https://moodle.com/partners/> to
assist you, or have a MoodleCloud site <https://moodle.com/cloud/> set up for
you.
2) Create a single database for Moodle to store all
it's tables in (or choose an existing database).
Moodle is widely used around the world by universities, schools, companies and
all manner of organisations and individuals.
3) Visit your Moodle site with a browser, you should
be taken to the install.php script, which will lead
you through creating a config.php file and then
setting up Moodle, creating an admin account etc.
Moodle is provided freely as open source software, under the GNU General Public
License <https://moodledev.io/general/license>.
4) Set up a cron task to call the file admin/cron.php
every five minutes or so.
Moodle is written in PHP and JavaScript and uses an SQL database for storing
the data.
See <https://docs.moodle.org> for details of Moodle's many features.
For more information, see the INSTALL DOCUMENTATION:
http://docs.moodle.org/en/Installing_Moodle
Good luck and have fun!
Martin Dougiamas, Lead Developer
+28 -60
View File
@@ -1,66 +1,34 @@
MOODLE TRADEMARKS POLICY
========================
The Moodle Trademark
--------------------
The brand and word "Moodle" has trade mark protection in many countries around
the world. Various Moodle™ trade marks are owned by either Moodle Pty Ltd or
one of its associated entities. The law obligates trade mark owners to police
their trade marks and prevent the use of confusingly similar names by
third parties.
We have created a more concise and thorough set of Trademark Guidelines
(https://moodle.com/wp-content/uploads/2023/02/Moodle-Trademark-Guidelines-2023-4.pdf)
to help you understand how to comply with Moodle's trade mark requirements.
The Trademark Guidelines will also assist our Moodle Certified Partners and the
community to understand some of the principles that inform Moodle's stance
whenever potential infringement has been detected by us or our community.
We need to be clear about use of the word "Moodle" and how we restrict its use
when promoting commercial Moodle™ branded services. The proper use of
trade marks reliably assures consumers about the quality of the associated
products or services and where they have been derived from. Because the
Moodle LMS is made available under the open source GNU General Public License'
that permits you to modify the copyrighted software, the distribution of such
modified software in combination with Moodle trade marks can potentially
mislead others in the community. To be clear, the GNU GPL does not include an
implied right or licence to use Moodle's trade marks.
We do all this to protect the very business model that allows us to continue
developing various Moodle software solutions for you.
Allowed uses of "Moodle"
------------------------
Moodle Trademark License
------------------------
The following uses don't require any permission at all:
The name Moodle™ is a registered trademark of the Moodle Trust.
* Referring to the software or the Moodle project as the "Moodle™ software"
or the "Moodle™ project"
* Describing your own implementation of the Moodle™ software platform
(including within corporate settings).
* Describing a Moodle-based community hub.
* Describing certain software you've made that integrates with Moodle™
branded software (e.g. a Moodle™ integration feature on another system).
A key part of the business model that allows us to produce and
distribute Moodle as completely Free open source software is that
we restrict the commercial use of the Moodle trademark to those
who have contracted to support Moodle development (Moodle Partners).
Restricted uses of "Moodle"
---------------------------
If you are intending to use the name (and/or logo) to advertise
generic Moodle™ services (eg Moodle Hosting, Moodle Support,
Moodle Certification, Moodle Training, Moodle Consulting,
Moodle Customisation, Moodle Courseware Development, Moodle
Theme design, Moodle Integrations, Moodle Installations, etc)
or as the name of a software package, then you must seek
direct permission in writing from the Moodle Trust via the
moodle.com helpdesk, in accordance with normal trademark
restrictions.
The following uses are generally prohibited without explicit and direct
permission being granted to you by Moodle Pty Ltd. We do this to protect the
Moodle™ project from software and sites which could confuse people. If in
doubt, reach out for clarification at <trademarks@moodle.com>
There are no restrictions on how you use the name in other
contexts (for example, if you use Moodle just to provide
courses then you can use the name freely to refer to it.)
* You can't use the word "Moodle" or any Moodle logos for commercial purposes
without prior written permission from Moodle HQ.
* You can't use "Moodle" in the name of your software (including Mobile apps).
* You can't use "Moodle" in your company name.
* You can't use "Moodle" in your domain name.
* You can't use "Moodle" in advertising-related keywords (such as Adsense).
* You can't use "Moodle" to describe services around Moodle
(such as hosting, training, support, consulting, course creation services,
theme development, customisation, installation, integration, analytics
and certification) that cause consumers to be confused that you are
associated with Moodle HQ if you are not.
This applies even if you do not charge for the services.
Note that usually only Moodle Partners have this permission.
If you aren't sure of a particular case, please ask us via
http://moodle.com/helpdesk: we'll be happy to either provide
you with official permission in writing or help you fix
your wording.
Martin Dougiamas
Executive Director
Moodle Trust
http://moodle.com
-3
View File
@@ -1,3 +0,0 @@
define("core_admin/block_management_table",["exports","./plugin_management_table","core_table/dynamic","core/ajax","core/pending","core/notification"],(function(_exports,_plugin_management_table,_dynamic,_ajax,_pending,_notification){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_plugin_management_table=_interopRequireDefault(_plugin_management_table),_pending=_interopRequireDefault(_pending);class _default extends _plugin_management_table.default{constructor(){super(),this.addClickHandler(this.handleBlockProtectToggle)}setBlockProtectState(plugin,state){return(0,_ajax.call)([{methodname:"core_admin_set_block_protection",args:{plugin:plugin,state:state}}])[0]}async handleBlockProtectToggle(tableRoot,e){const stateToggle=e.target.closest('[data-action="toggleprotectstate"]');if(stateToggle){e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:processAction");await this.setBlockProtectState(stateToggle.dataset.plugin,"1"===stateToggle.dataset.targetState?1:0);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]);updatedRoot.querySelector('[data-action="toggleprotectstate"][data-plugin="'.concat(stateToggle.dataset.plugin,'"]')).focus(),pendingPromise.resolve()}}}return _exports.default=_default,_exports.default}));
//# sourceMappingURL=block_management_table.min.js.map
@@ -1 +0,0 @@
{"version":3,"file":"block_management_table.min.js","sources":["../src/block_management_table.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\nimport PluginManagementTable from './plugin_management_table';\nimport {refreshTableContent} from 'core_table/dynamic';\nimport {call as fetchMany} from 'core/ajax';\nimport Pending from 'core/pending';\nimport {fetchNotifications} from 'core/notification';\n\nexport default class extends PluginManagementTable {\n constructor() {\n super();\n this.addClickHandler(this.handleBlockProtectToggle);\n }\n\n /**\n * Set the block protection state.\n *\n * @param {string} plugin\n * @param {number} state\n * @returns {Promise}\n */\n setBlockProtectState(plugin, state) {\n return fetchMany([{\n methodname: 'core_admin_set_block_protection',\n args: {\n plugin,\n state,\n },\n }])[0];\n }\n\n /**\n * Handle toggling of block protection.\n *\n * @param {HTMLElement} tableRoot\n * @param {Event} e\n */\n async handleBlockProtectToggle(tableRoot, e) {\n const stateToggle = e.target.closest('[data-action=\"toggleprotectstate\"]');\n if (stateToggle) {\n e.preventDefault();\n const pendingPromise = new Pending('core_table/dynamic:processAction');\n\n await this.setBlockProtectState(\n stateToggle.dataset.plugin,\n stateToggle.dataset.targetState === '1' ? 1 : 0\n );\n\n const [updatedRoot] = await Promise.all([\n refreshTableContent(tableRoot),\n fetchNotifications(),\n ]);\n\n // Refocus on the link that as pressed in the first place.\n updatedRoot.querySelector(`[data-action=\"toggleprotectstate\"][data-plugin=\"${stateToggle.dataset.plugin}\"]`).focus();\n pendingPromise.resolve();\n }\n }\n}\n"],"names":["PluginManagementTable","constructor","addClickHandler","this","handleBlockProtectToggle","setBlockProtectState","plugin","state","methodname","args","tableRoot","e","stateToggle","target","closest","preventDefault","pendingPromise","Pending","dataset","targetState","updatedRoot","Promise","all","querySelector","focus","resolve"],"mappings":"uhBAqB6BA,iCACzBC,2BAESC,gBAAgBC,KAAKC,0BAU9BC,qBAAqBC,OAAQC,cAClB,cAAU,CAAC,CACdC,WAAY,kCACZC,KAAM,CACFH,OAAAA,OACAC,MAAAA,UAEJ,kCASuBG,UAAWC,SAChCC,YAAcD,EAAEE,OAAOC,QAAQ,yCACjCF,YAAa,CACbD,EAAEI,uBACIC,eAAiB,IAAIC,iBAAQ,0CAE7Bd,KAAKE,qBACPO,YAAYM,QAAQZ,OACgB,MAApCM,YAAYM,QAAQC,YAAsB,EAAI,SAG3CC,mBAAqBC,QAAQC,IAAI,EACpC,gCAAoBZ,YACpB,wCAIJU,YAAYG,wEAAiEX,YAAYM,QAAQZ,cAAYkB,QAC7GR,eAAeS"}
-3
View File
@@ -1,3 +0,0 @@
define("core_admin/plugin_management_table",["exports","core_table/dynamic","core_table/local/dynamic/selectors","core/ajax","core/pending","core/notification"],(function(_exports,_dynamic,Selectors,_ajax,_pending,_notification){var obj;function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Selectors=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Selectors),_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};let watching=!1;return _exports.default=class{constructor(){!function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value}(this,"clickHandlers",[]),this.addClickHandler(this.handleStateToggle),this.addClickHandler(this.handleMoveUpDown),this.registerEventListeners()}static init(){watching||(watching=!0,new this)}addClickHandler(handler){this.clickHandlers.push(handler.bind(this))}registerEventListeners(){document.addEventListener("click",function(e){const tableRoot=this.getTableRoot(e);tableRoot&&this.clickHandlers.forEach((handler=>handler(tableRoot,e)))}.bind(this))}getTableRoot(e){const tableRoot=e.target.closest(Selectors.main.region);return tableRoot||!1}setPluginState(methodname,plugin,state){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,state:state}}])[0]}setPluginOrder(methodname,plugin,direction){return(0,_ajax.call)([{methodname:methodname,args:{plugin:plugin,direction:direction}}])[0]}async handleStateToggle(tableRoot,e){const stateToggle=e.target.closest('[data-action="togglestate"][data-toggle-method]');if(stateToggle){e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:togglestate");await this.setPluginState(stateToggle.dataset.toggleMethod,stateToggle.dataset.plugin,"1"===stateToggle.dataset.state?0:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]);updatedRoot.querySelector('[data-action="togglestate"][data-plugin="'.concat(stateToggle.dataset.plugin,'"]')).focus(),pendingPromise.resolve()}}async handleMoveUpDown(tableRoot,e){const actionLink=e.target.closest('[data-action="move"][data-method][data-direction]');if(!actionLink)return;e.preventDefault();const pendingPromise=new _pending.default("core_table/dynamic:processAction");await this.setPluginOrder(actionLink.dataset.method,actionLink.dataset.plugin,"up"===actionLink.dataset.direction?-1:1);const[updatedRoot]=await Promise.all([(0,_dynamic.refreshTableContent)(tableRoot),(0,_notification.fetchNotifications)()]),exactMatch=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"][data-direction="').concat(actionLink.dataset.direction,'"]'));var _updatedRoot$querySel;exactMatch?exactMatch.focus():null===(_updatedRoot$querySel=updatedRoot.querySelector('[data-action="move"][data-plugin="'.concat(actionLink.dataset.plugin,'"]')))||void 0===_updatedRoot$querySel||_updatedRoot$querySel.focus();pendingPromise.resolve()}},_exports.default}));
//# sourceMappingURL=plugin_management_table.min.js.map
File diff suppressed because one or more lines are too long
-72
View File
@@ -1,72 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import PluginManagementTable from './plugin_management_table';
import {refreshTableContent} from 'core_table/dynamic';
import {call as fetchMany} from 'core/ajax';
import Pending from 'core/pending';
import {fetchNotifications} from 'core/notification';
export default class extends PluginManagementTable {
constructor() {
super();
this.addClickHandler(this.handleBlockProtectToggle);
}
/**
* Set the block protection state.
*
* @param {string} plugin
* @param {number} state
* @returns {Promise}
*/
setBlockProtectState(plugin, state) {
return fetchMany([{
methodname: 'core_admin_set_block_protection',
args: {
plugin,
state,
},
}])[0];
}
/**
* Handle toggling of block protection.
*
* @param {HTMLElement} tableRoot
* @param {Event} e
*/
async handleBlockProtectToggle(tableRoot, e) {
const stateToggle = e.target.closest('[data-action="toggleprotectstate"]');
if (stateToggle) {
e.preventDefault();
const pendingPromise = new Pending('core_table/dynamic:processAction');
await this.setBlockProtectState(
stateToggle.dataset.plugin,
stateToggle.dataset.targetState === '1' ? 1 : 0
);
const [updatedRoot] = await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
// Refocus on the link that as pressed in the first place.
updatedRoot.querySelector(`[data-action="toggleprotectstate"][data-plugin="${stateToggle.dataset.plugin}"]`).focus();
pendingPromise.resolve();
}
}
}
-179
View File
@@ -1,179 +0,0 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
import {refreshTableContent} from 'core_table/dynamic';
import * as Selectors from 'core_table/local/dynamic/selectors';
import {call as fetchMany} from 'core/ajax';
import Pending from 'core/pending';
import {fetchNotifications} from 'core/notification';
let watching = false;
export default class {
/**
* @property {function[]} clickHandlers a list of handlers to call on click.
*/
clickHandlers = [];
constructor() {
this.addClickHandler(this.handleStateToggle);
this.addClickHandler(this.handleMoveUpDown);
this.registerEventListeners();
}
/**
* Initialise an instance of the class.
*
* This is just a way of making it easier to initialise an instance of the class from PHP.
*/
static init() {
if (watching) {
return;
}
watching = true;
new this();
}
/**
* Add a click handler to the list of handlers.
*
* @param {Function} handler A handler to call on a click event
*/
addClickHandler(handler) {
this.clickHandlers.push(handler.bind(this));
}
/**
* Register the event listeners for this instance.
*/
registerEventListeners() {
document.addEventListener('click', function(e) {
const tableRoot = this.getTableRoot(e);
if (!tableRoot) {
return;
}
this.clickHandlers.forEach((handler) => handler(tableRoot, e));
}.bind(this));
}
/**
* Get the table root from an event.
*
* @param {Event} e
* @returns {HTMLElement|bool}
*/
getTableRoot(e) {
const tableRoot = e.target.closest(Selectors.main.region);
if (!tableRoot) {
return false;
}
return tableRoot;
}
/**
* Set the plugin state (enabled or disabled)
*
* @param {string} methodname The web service to call
* @param {string} plugin The name of the plugin to set the state for
* @param {number} state The state to set
* @returns {Promise}
*/
setPluginState(methodname, plugin, state) {
return fetchMany([{
methodname,
args: {
plugin,
state,
},
}])[0];
}
setPluginOrder(methodname, plugin, direction) {
return fetchMany([{
methodname,
args: {
plugin,
direction,
},
}])[0];
}
/**
* Handle state toggling.
*
* @param {HTMLElement} tableRoot
* @param {Event} e
*/
async handleStateToggle(tableRoot, e) {
const stateToggle = e.target.closest('[data-action="togglestate"][data-toggle-method]');
if (stateToggle) {
e.preventDefault();
const pendingPromise = new Pending('core_table/dynamic:togglestate');
await this.setPluginState(
stateToggle.dataset.toggleMethod,
stateToggle.dataset.plugin,
stateToggle.dataset.state === '1' ? 0 : 1
);
const [updatedRoot] = await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
// Refocus on the link that as pressed in the first place.
updatedRoot.querySelector(`[data-action="togglestate"][data-plugin="${stateToggle.dataset.plugin}"]`).focus();
pendingPromise.resolve();
}
}
async handleMoveUpDown(tableRoot, e) {
const actionLink = e.target.closest('[data-action="move"][data-method][data-direction]');
if (!actionLink) {
return;
}
e.preventDefault();
const pendingPromise = new Pending('core_table/dynamic:processAction');
await this.setPluginOrder(
actionLink.dataset.method,
actionLink.dataset.plugin,
actionLink.dataset.direction === 'up' ? -1 : 1,
);
const [updatedRoot] = await Promise.all([
refreshTableContent(tableRoot),
fetchNotifications(),
]);
// Refocus on the link that as pressed in the first place.
const exactMatch = updatedRoot.querySelector(
`[data-action="move"][data-plugin="${actionLink.dataset.plugin}"][data-direction="${actionLink.dataset.direction}"]`
);
if (exactMatch) {
exactMatch.focus();
} else {
// The move link is not present anymore, so we need to focus on the other one.
updatedRoot.querySelector(`[data-action="move"][data-plugin="${actionLink.dataset.plugin}"]`)?.focus();
}
pendingPromise.resolve();
}
}
-113
View File
@@ -1,113 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Allows admin to configure antiviruses.
*
* @package core_antivirus
* @copyright 2015 Ruslan Kabalin, Lancaster University.
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
$action = required_param('action', PARAM_ALPHANUMEXT);
$antivirus = required_param('antivirus', PARAM_PLUGIN);
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$PAGE->set_url('/admin/antiviruses.php', array('action' => $action, 'antivirus' => $antivirus));
$PAGE->set_context(context_system::instance());
require_admin();
$returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageantiviruses";
// Get currently installed and enabled antivirus plugins.
$availableantiviruses = \core\antivirus\manager::get_available();
if (!empty($antivirus) and empty($availableantiviruses[$antivirus])) {
redirect ($returnurl);
}
$activeantiviruses = explode(',', $CFG->antiviruses);
foreach ($activeantiviruses as $key => $active) {
if (empty($availableantiviruses[$active])) {
unset($activeantiviruses[$key]);
}
}
if (!confirm_sesskey()) {
redirect($returnurl);
}
$needsupdate = false;
switch ($action) {
case 'disable':
// Remove from enabled list.
$class = \core_plugin_manager::resolve_plugininfo_class('antivirus');
$class::enable_plugin($antivirus, false);
break;
case 'enable':
// Add to enabled list.
if (!in_array($antivirus, $activeantiviruses)) {
$class = \core_plugin_manager::resolve_plugininfo_class('antivirus');
$class::enable_plugin($antivirus, true);
}
break;
case 'down':
$key = array_search($antivirus, $activeantiviruses);
// Check auth plugin is valid.
if ($key !== false) {
// Move down the list.
if ($key < (count($activeantiviruses) - 1)) {
$fsave = $activeantiviruses[$key];
$activeantiviruses[$key] = $activeantiviruses[$key + 1];
$activeantiviruses[$key + 1] = $fsave;
$needsupdate = true;
}
}
break;
case 'up':
$key = array_search($antivirus, $activeantiviruses);
// Check auth is valid.
if ($key !== false) {
// Move up the list.
if ($key >= 1) {
$fsave = $activeantiviruses[$key];
$activeantiviruses[$key] = $activeantiviruses[$key - 1];
$activeantiviruses[$key - 1] = $fsave;
$needsupdate = true;
}
}
break;
default:
break;
}
if ($needsupdate) {
$new = implode(',', $activeantiviruses);
add_to_config_log('antiviruses', $CFG->antiviruses, $new, 'core');
set_config('antiviruses', $new);
core_plugin_manager::reset_caches();
}
redirect ($returnurl);
+28 -17
View File
@@ -11,13 +11,14 @@ require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
require_admin();
require_login();
require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM));
$returnurl = new moodle_url('/admin/settings.php', array('section'=>'manageauths'));
$PAGE->set_url($returnurl);
$action = optional_param('action', '', PARAM_ALPHANUMEXT);
$action = optional_param('action', '', PARAM_ACTION);
$auth = optional_param('auth', '', PARAM_PLUGIN);
get_enabled_auth_plugins(true); // fix the list of enabled auths
@@ -28,7 +29,7 @@ if (empty($CFG->auth)) {
}
if (!empty($auth) and !exists_auth_plugin($auth)) {
throw new \moodle_exception('pluginnotinstalled', 'auth', $returnurl, $auth);
print_error('pluginnotinstalled', 'auth', $returnurl, $auth);
}
////////////////////////////////////////////////////////////////////////////////
@@ -40,31 +41,41 @@ if (!confirm_sesskey()) {
switch ($action) {
case 'disable':
// Remove from enabled list.
$class = \core_plugin_manager::resolve_plugininfo_class('auth');
$class::enable_plugin($auth, false);
// remove from enabled list
$key = array_search($auth, $authsenabled);
if ($key !== false) {
unset($authsenabled[$key]);
set_config('auth', implode(',', $authsenabled));
}
if ($auth == $CFG->registerauth) {
set_config('registerauth', '');
}
session_gc(); // remove stale sessions
break;
case 'enable':
// Add to enabled list.
$class = \core_plugin_manager::resolve_plugininfo_class('auth');
$class::enable_plugin($auth, true);
// add to enabled list
if (!in_array($auth, $authsenabled)) {
$authsenabled[] = $auth;
$authsenabled = array_unique($authsenabled);
set_config('auth', implode(',', $authsenabled));
}
session_gc(); // remove stale sessions
break;
case 'down':
$key = array_search($auth, $authsenabled);
// check auth plugin is valid
if ($key === false) {
throw new \moodle_exception('pluginnotenabled', 'auth', $returnurl, $auth);
print_error('pluginnotenabled', 'auth', $returnurl, $auth);
}
// move down the list
if ($key < (count($authsenabled) - 1)) {
$fsave = $authsenabled[$key];
$authsenabled[$key] = $authsenabled[$key + 1];
$authsenabled[$key + 1] = $fsave;
$value = implode(',', $authsenabled);
add_to_config_log('auth', $CFG->auth, $value, 'core');
set_config('auth', $value);
set_config('auth', implode(',', $authsenabled));
}
break;
@@ -72,16 +83,14 @@ switch ($action) {
$key = array_search($auth, $authsenabled);
// check auth is valid
if ($key === false) {
throw new \moodle_exception('pluginnotenabled', 'auth', $returnurl, $auth);
print_error('pluginnotenabled', 'auth', $returnurl, $auth);
}
// move up the list
if ($key >= 1) {
$fsave = $authsenabled[$key];
$authsenabled[$key] = $authsenabled[$key - 1];
$authsenabled[$key - 1] = $fsave;
$value = implode(',', $authsenabled);
add_to_config_log('auth', $CFG->auth, $value, 'core');
set_config('auth', $value);
set_config('auth', implode(',', $authsenabled));
}
break;
@@ -90,3 +99,5 @@ switch ($action) {
}
redirect($returnurl);
+179
View File
@@ -0,0 +1,179 @@
<?php
/**
* Edit configuration for an individual auth plugin
*/
require_once '../config.php';
require_once $CFG->libdir.'/adminlib.php';
$auth = required_param('auth', PARAM_PLUGIN);
$PAGE->set_pagetype('admin-auth-' . $auth);
admin_externalpage_setup('authsetting'.$auth);
$authplugin = get_auth_plugin($auth);
$err = array();
$returnurl = "$CFG->wwwroot/$CFG->admin/settings.php?section=manageauths";
// save configuration changes
if ($frm = data_submitted() and confirm_sesskey()) {
$authplugin->validate_form($frm, $err);
if (count($err) == 0) {
// save plugin config
if ($authplugin->process_config($frm)) {
// save field lock configuration
foreach ($frm as $name => $value) {
if (preg_match('/^lockconfig_(.+?)$/', $name, $matches)) {
$plugin = "auth/$auth";
$name = $matches[1];
set_config($name, $value, $plugin);
}
}
redirect($returnurl);
exit;
}
} else {
foreach ($err as $key => $value) {
$focus = "form.$key";
}
}
} else {
$frmlegacystyle = get_config('auth/'.$auth);
$frmnewstyle = get_config('auth_'.$auth);
$frm = (object)array_merge((array)$frmlegacystyle, (array)$frmnewstyle);
}
$user_fields = $authplugin->userfields;
//$user_fields = array("firstname", "lastname", "email", "phone1", "phone2", "institution", "department", "address", "city", "country", "description", "idnumber", "lang");
/// Get the auth title (from core or own auth lang files)
$authtitle = $authplugin->get_title();
/// Get the auth descriptions (from core or own auth lang files)
$authdescription = $authplugin->get_description();
// output configuration form
echo $OUTPUT->header();
// choose an authentication method
echo "<form id=\"authmenu\" method=\"post\" action=\"auth_config.php\">\n";
echo "<div>\n";
echo "<input type=\"hidden\" name=\"sesskey\" value=\"".sesskey()."\" />\n";
echo "<input type=\"hidden\" name=\"auth\" value=\"".$auth."\" />\n";
// auth plugin description
echo $OUTPUT->box_start();
echo $OUTPUT->heading($authtitle);
echo $OUTPUT->box_start('informationbox');
echo $authdescription;
echo $OUTPUT->box_end();
echo "<hr />\n";
$authplugin->config_form($frm, $err, $user_fields);
echo $OUTPUT->box_end();
echo '<p style="text-align: center"><input type="submit" value="' . get_string("savechanges") . "\" /></p>\n";
echo "</div>\n";
echo "</form>\n";
echo $OUTPUT->footer();
exit;
/// Functions /////////////////////////////////////////////////////////////////
// Good enough for most auth plugins
// but some may want a custom one if they are offering
// other options
// Note: lockconfig_ fields have special handling.
function print_auth_lock_options ($auth, $user_fields, $helptext, $retrieveopts, $updateopts) {
global $OUTPUT;
echo '<tr><td colspan="3">';
if ($retrieveopts) {
echo $OUTPUT->heading(get_string('auth_data_mapping', 'auth'));
} else {
echo $OUTPUT->heading(get_string('auth_fieldlocks', 'auth'));
}
echo '</td></tr>';
$lockoptions = array ('unlocked' => get_string('unlocked', 'auth'),
'unlockedifempty' => get_string('unlockedifempty', 'auth'),
'locked' => get_string('locked', 'auth'));
$updatelocaloptions = array('oncreate' => get_string('update_oncreate', 'auth'),
'onlogin' => get_string('update_onlogin', 'auth'));
$updateextoptions = array('0' => get_string('update_never', 'auth'),
'1' => get_string('update_onupdate', 'auth'));
$pluginconfig = get_config("auth/$auth");
// helptext is on a field with rowspan
if (empty($helptext)) {
$helptext = '&nbsp;';
}
foreach ($user_fields as $field) {
// Define some vars we'll work with
if (!isset($pluginconfig->{"field_map_$field"})) {
$pluginconfig->{"field_map_$field"} = '';
}
if (!isset($pluginconfig->{"field_updatelocal_$field"})) {
$pluginconfig->{"field_updatelocal_$field"} = '';
}
if (!isset($pluginconfig->{"field_updateremote_$field"})) {
$pluginconfig->{"field_updateremote_$field"} = '';
}
if (!isset($pluginconfig->{"field_lock_$field"})) {
$pluginconfig->{"field_lock_$field"} = '';
}
// define the fieldname we display to the user
$fieldname = $field;
if ($fieldname === 'lang') {
$fieldname = get_string('language');
} elseif (preg_match('/^(.+?)(\d+)$/', $fieldname, $matches)) {
$fieldname = get_string($matches[1]) . ' ' . $matches[2];
} elseif ($fieldname == 'url') {
$fieldname = get_string('webpage');
} else {
$fieldname = get_string($fieldname);
}
if ($retrieveopts) {
$varname = 'field_map_' . $field;
echo '<tr valign="top"><td align="right">';
echo '<label for="lockconfig_'.$varname.'">'.$fieldname.'</label>';
echo '</td><td>';
echo "<input id=\"lockconfig_{$varname}\" name=\"lockconfig_{$varname}\" type=\"text\" size=\"30\" value=\"{$pluginconfig->$varname}\" />";
echo '<div style="text-align: right">';
echo '<label for="menulockconfig_field_updatelocal_'.$field.'">'.get_string('auth_updatelocal', 'auth') . '</label>&nbsp;';
echo html_writer::select($updatelocaloptions, "lockconfig_field_updatelocal_{$field}", $pluginconfig->{"field_updatelocal_$field"}, false);
echo '<br />';
if ($updateopts) {
echo '<label for="menulockconfig_field_updateremote_'.$field.'">'.get_string('auth_updateremote', 'auth') . '</label>&nbsp;';
echo html_writer::select($updateextoptions, "lockconfig_field_updateremote_{$field}", $pluginconfig->{"field_updateremote_$field"}, false);
echo '<br />';
}
echo '<label for="menulockconfig_field_lock_'.$field.'">'.get_string('auth_fieldlock', 'auth') . '</label>&nbsp;';
echo html_writer::select($lockoptions, "lockconfig_field_lock_{$field}", $pluginconfig->{"field_lock_$field"}, false);
echo '</div>';
} else {
echo '<tr valign="top"><td align="right">';
echo '<label for="menulockconfig_field_lock_'.$field.'">'.$fieldname.'</label>';
echo '</td><td>';
echo html_writer::select($lockoptions, "lockconfig_field_lock_{$field}", $pluginconfig->{"field_lock_$field"}, false);
}
echo '</td>';
if (!empty($helptext)) {
echo '<td rowspan="' . count($user_fields) . '">' . $helptext . '</td>';
$helptext = '';
}
echo '</tr>';
}
}
+76
View File
@@ -0,0 +1,76 @@
<?php
// block.php - allows admin to edit all local configuration variables for a block
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
$blockid = required_param('block', PARAM_INT);
if(!$blockrecord = blocks_get_record($blockid)) {
print_error('blockdoesnotexist', 'error');
}
admin_externalpage_setup('blocksetting'.$blockrecord->name);
$block = block_instance($blockrecord->name);
if($block === false) {
print_error('blockcannotinistantiate', 'error');
}
// Define the data we're going to silently include in the instance config form here,
// so we can strip them from the submitted data BEFORE handling it.
$hiddendata = array(
'block' => $blockid,
'sesskey' => sesskey()
);
/// If data submitted, then process and store.
if ($config = data_submitted()) {
if (!confirm_sesskey()) {
print_error('confirmsesskeybad', 'error');
}
if(!$block->has_config()) {
print_error('blockcannotconfig', 'error');
}
$remove = array_keys($hiddendata);
foreach($remove as $item) {
unset($config->$item);
}
$block->config_save($config);
redirect("$CFG->wwwroot/$CFG->admin/blocks.php", get_string("changessaved"), 1);
exit;
}
/// Otherwise print the form.
$strmanageblocks = get_string('manageblocks');
$strblockname = $block->get_title();
echo $OUTPUT->header();
echo $OUTPUT->heading($strblockname);
echo $OUTPUT->notification('This block still uses an old-style config_global.html file. ' .
'It must be updated by a developer to use a settings.php file.');
echo $OUTPUT->box(get_string('configwarning', 'admin'), 'generalbox boxwidthnormal boxaligncenter');
echo '<br />';
echo '<form method="post" action="block.php">';
echo '<p>';
foreach($hiddendata as $name => $val) {
echo '<input type="hidden" name="'. $name .'" value="'. $val .'" />';
}
echo '</p>';
echo $OUTPUT->box_start();
include($CFG->dirroot.'/blocks/'. $block->name() .'/config_global.html');
echo $OUTPUT->box_end();
echo '</form>';
echo $OUTPUT->footer();
+251 -79
View File
@@ -1,94 +1,266 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Allows the admin to configure blocks (hide/show, uninstall and configure)
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
// Allows the admin to configure blocks (hide/show, delete and configure)
require_once('../config.php');
require_once("{$CFG->libdir}/adminlib.php");
require_once("{$CFG->libdir}/blocklib.php");
require_once("{$CFG->libdir}/tablelib.php");
require_once('../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/tablelib.php');
admin_externalpage_setup('manageblocks');
admin_externalpage_setup('manageblocks');
$plugin = optional_param('plugin', '', PARAM_PLUGIN);
$action = optional_param('action', '', PARAM_ALPHA);
$unprotect = optional_param('unprotect', 0, PARAM_PLUGIN);
$protect = optional_param('protect', 0, PARAM_PLUGIN);
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$hide = optional_param('hide', 0, PARAM_INT);
$show = optional_param('show', 0, PARAM_INT);
$delete = optional_param('delete', 0, PARAM_INT);
$unprotect = optional_param('unprotect', 0, PARAM_INT);
$protect = optional_param('protect', 0, PARAM_INT);
$strmanageblocks = get_string('manageblocks');
/// Print headings
// If data submitted, then process and store.
if (!empty($plugin) && !empty($action) && confirm_sesskey()) {
$manager = \core_plugin_manager::resolve_plugininfo_class('block');
$pluginname = get_string('pluginname', "block_{$plugin}");
$strmanageblocks = get_string('manageblocks');
$strdelete = get_string('delete');
$strversion = get_string('version');
$strhide = get_string('hide');
$strshow = get_string('show');
$strsettings = get_string('settings');
$strcourses = get_string('blockinstances', 'admin');
$strname = get_string('name');
$strshowblockcourse = get_string('showblockcourse');
$strprotecthdr = get_string('blockprotect', 'admin'). $OUTPUT->help_icon('blockprotect','admin');
$strprotect = get_string('blockprotect', 'admin');
$strunprotect = get_string('blockunprotect', 'admin');
if ($action === 'disable' && $manager::enable_plugin($plugin, 0)) {
\core\notification::add(
get_string('plugin_disabled', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
// Settings not required - only pages.
admin_get_root(true, false);
} else if ($action === 'enable' && $manager::enable_plugin($plugin, 1)) {
\core\notification::add(
get_string('plugin_enabled', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
/// If data submitted, then process and store.
// Settings not required - only pages.
admin_get_root(true, false);
if (!empty($hide) && confirm_sesskey()) {
if (!$block = $DB->get_record('block', array('id'=>$hide))) {
print_error('blockdoesnotexist', 'error');
}
$DB->set_field('block', 'visible', '0', array('id'=>$block->id)); // Hide block
admin_get_root(true, false); // settings not required - only pages
}
// Redirect back to the page with out any params.
redirect(new moodle_url('/admin/blocks.php'));
}
if (!empty($show) && confirm_sesskey() ) {
if (!$block = $DB->get_record('block', array('id'=>$show))) {
print_error('blockdoesnotexist', 'error');
}
$DB->set_field('block', 'visible', '1', array('id'=>$block->id)); // Show block
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($protect) && confirm_sesskey()) {
block_manager::protect_block($protect);
$pluginname = get_string('pluginname', "block_{$protect}");
\core\notification::add(
get_string('blockprotected', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
// Settings not required - only pages.
admin_get_root(true, false);
}
if (!isset($CFG->undeletableblocktypes) || (!is_array($CFG->undeletableblocktypes) && !is_string($CFG->undeletableblocktypes))) {
$undeletableblocktypes = array('navigation', 'settings');
} else if (is_string($CFG->undeletableblocktypes)) {
$undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
} else {
$undeletableblocktypes = $CFG->undeletableblocktypes;
}
if (!empty($unprotect) && confirm_sesskey()) {
block_manager::unprotect_block($unprotect);
$pluginname = get_string('pluginname', "block_{$unprotect}");
\core\notification::add(
get_string('blockunprotected', 'core_admin', $pluginname),
\core\notification::SUCCESS
);
// Settings not required - only pages.
admin_get_root(true, false);
}
if (!empty($protect) && confirm_sesskey()) {
if (!$block = $DB->get_record('block', array('id'=>$protect))) {
print_error('blockdoesnotexist', 'error');
}
if (!in_array($block->name, $undeletableblocktypes)) {
$undeletableblocktypes[] = $block->name;
set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
}
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($unprotect) && confirm_sesskey()) {
if (!$block = $DB->get_record('block', array('id'=>$unprotect))) {
print_error('blockdoesnotexist', 'error');
}
if (in_array($block->name, $undeletableblocktypes)) {
$undeletableblocktypes = array_diff($undeletableblocktypes, array($block->name));
set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
}
admin_get_root(true, false); // settings not required - only pages
}
if (!empty($delete) && confirm_sesskey()) {
echo $OUTPUT->header();
echo $OUTPUT->heading($strmanageblocks);
if (!$block = blocks_get_record($delete)) {
print_error('blockdoesnotexist', 'error');
}
if (get_string_manager()->string_exists('pluginname', "block_$block->name")) {
$strblockname = get_string('pluginname', "block_$block->name");
} else {
$strblockname = $block->name;
}
if (!$confirm) {
echo $OUTPUT->confirm(get_string('blockdeleteconfirm', '', $strblockname), 'blocks.php?delete='.$block->id.'&confirm=1', 'blocks.php');
echo $OUTPUT->footer();
exit;
} else {
uninstall_plugin('block', $block->name);
$a = new stdClass();
$a->block = $strblockname;
$a->directory = $CFG->dirroot.'/blocks/'.$block->name;
notice(get_string('blockdeletefiles', '', $a), 'blocks.php');
}
}
echo $OUTPUT->header();
echo $OUTPUT->heading($strmanageblocks);
/// Main display starts here
/// Get and sort the existing blocks
if (!$blocks = $DB->get_records('block', array(), 'name ASC')) {
print_error('noblocks', 'error'); // Should never happen
}
$incompatible = array();
/// Print the table of all blocks
$table = new flexible_table('admin-blocks-compatible');
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'undeletable', 'delete', 'settings'));
$table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strprotecthdr, $strdelete, $strsettings));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
$table->set_attribute('class', 'compatibleblockstable blockstable generaltable');
$table->setup();
$tablerows = array();
// Sort blocks using current locale.
$blocknames = array();
foreach ($blocks as $blockid=>$block) {
$blockname = $block->name;
if (file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
$blocknames[$blockid] = get_string('pluginname', 'block_'.$blockname);
} else {
$blocknames[$blockid] = $blockname;
}
}
collatorlib::asort($blocknames);
foreach ($blocknames as $blockid=>$strblockname) {
$block = $blocks[$blockid];
$blockname = $block->name;
if (!file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
$blockobject = false;
$strblockname = '<span class="notifyproblem">'.$strblockname.' ('.get_string('missingfromdisk').')</span>';
$plugin = new stdClass();
$plugin->version = $block->version;
} else {
$plugin = new stdClass();
$plugin->version = '???';
if (file_exists("$CFG->dirroot/blocks/$blockname/version.php")) {
include("$CFG->dirroot/blocks/$blockname/version.php");
}
if (!$blockobject = block_instance($block->name)) {
$incompatible[] = $block;
continue;
}
}
$delete = '<a href="blocks.php?delete='.$blockid.'&amp;sesskey='.sesskey().'">'.$strdelete.'</a>';
$settings = ''; // By default, no configuration
if ($blockobject and $blockobject->has_config()) {
$blocksettings = admin_get_root()->locate('blocksetting' . $block->name);
if ($blocksettings instanceof admin_externalpage) {
$settings = '<a href="' . $blocksettings->url . '">' . get_string('settings') . '</a>';
} else if ($blocksettings instanceof admin_settingpage) {
$settings = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/settings.php?section=blocksetting'.$block->name.'">'.$strsettings.'</a>';
} else {
$settings = '<a href="block.php?block='.$blockid.'">'.$strsettings.'</a>';
}
}
// MDL-11167, blocks can be placed on mymoodle, or the blogs page
// and it should not show up on course search page
$totalcount = $DB->count_records('block_instances', array('blockname'=>$blockname));
$count = $DB->count_records('block_instances', array('blockname'=>$blockname, 'pagetypepattern'=>'course-view-*'));
if ($count>0) {
$blocklist = "<a href=\"{$CFG->wwwroot}/course/search.php?blocklist=$blockid&amp;sesskey=".sesskey()."\" ";
$blocklist .= "title=\"$strshowblockcourse\" >$totalcount</a>";
}
else {
$blocklist = "$totalcount";
}
$class = ''; // Nothing fancy, by default
if (!$blockobject) {
// ignore
$visible = '';
} else if ($blocks[$blockid]->visible) {
$visible = '<a href="blocks.php?hide='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strhide.'">'.
'<img src="'.$OUTPUT->pix_url('i/hide') . '" class="icon" alt="'.$strhide.'" /></a>';
} else {
$visible = '<a href="blocks.php?show='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strshow.'">'.
'<img src="'.$OUTPUT->pix_url('i/show') . '" class="icon" alt="'.$strshow.'" /></a>';
$class = ' class="dimmed_text"'; // Leading space required!
}
if ($block->version == $plugin->version) {
$version = $block->version;
} else {
$version = "$block->version ($plugin->version)";
}
if (!$blockobject) {
// ignore
$undeletable = '';
} else if (in_array($blockname, $undeletableblocktypes)) {
$undeletable = '<a href="blocks.php?unprotect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strunprotect.'">'.
'<img src="'.$OUTPUT->pix_url('t/unlock') . '" class="icon" alt="'.$strunprotect.'" /></a>';
} else {
$undeletable = '<a href="blocks.php?protect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strprotect.'">'.
'<img src="'.$OUTPUT->pix_url('t/unlock_gray') . '" class="icon" alt="'.$strprotect.'" /></a>';
}
$row = array(
'<span'.$class.'>'.$strblockname.'</span>',
$blocklist,
'<span'.$class.'>'.$version.'</span>',
$visible,
$undeletable,
$delete,
$settings
);
$table->add_data($row);
}
$table->print_html();
if (!empty($incompatible)) {
echo $OUTPUT->heading(get_string('incompatibleblocks', 'blockstable', 'admin'));
$table = new flexible_table('admin-blocks-incompatible');
$table->define_columns(array('block', 'delete'));
$table->define_headers(array($strname, $strdelete));
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
$table->set_attribute('class', 'incompatibleblockstable generaltable');
$table->setup();
foreach ($incompatible as $block) {
$table->add_data(array(
$block->name,
'<a href="blocks.php?delete='.$block->id.'&amp;sesskey='.sesskey().'">'.$strdelete.'</a>',
));
}
$table->print_html();
}
echo $OUTPUT->footer();
echo $OUTPUT->header();
echo $OUTPUT->heading($strmanageblocks);
echo $OUTPUT->notification(get_string('noteunneededblocks', 'admin'), 'info', false);
// Print the table of all blocks.
$table = new \core_admin\table\block_management_table();
$table->out();
echo $OUTPUT->footer();
+47 -50
View File
@@ -17,7 +17,7 @@
/**
* This file is used to display a categories sub categories, external pages, and settings.
*
* @since Moodle 2.3
* @since 2.3
* @package admin
* @copyright 2011 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
@@ -30,8 +30,9 @@ $category = required_param('category', PARAM_SAFEDIR);
$return = optional_param('return','', PARAM_ALPHA);
$adminediting = optional_param('adminedit', -1, PARAM_BOOL);
/// no guest autologin
require_login(0, false);
$PAGE->set_context(context_system::instance());
$PAGE->set_context(get_context_instance(CONTEXT_SYSTEM));
$PAGE->set_url('/admin/category.php', array('category' => $category));
$PAGE->set_pagetype('admin-setting-' . $category);
$PAGE->set_pagelayout('admin');
@@ -41,47 +42,40 @@ $adminroot = admin_get_root(); // need all settings
$settingspage = $adminroot->locate($category, true);
if (empty($settingspage) or !($settingspage instanceof admin_category)) {
throw new \moodle_exception('categoryerror', 'error', "$CFG->wwwroot/$CFG->admin/");
print_error('categoryerror', 'admin', "$CFG->wwwroot/$CFG->admin/");
}
if (!($settingspage->check_access())) {
throw new \moodle_exception('accessdenied', 'admin');
print_error('accessdenied', 'admin');
}
$hassiteconfig = has_capability('moodle/site:config', $PAGE->context);
if ($hassiteconfig) {
$PAGE->add_header_action($OUTPUT->render_from_template('core_admin/header_search_input', [
'action' => new moodle_url('/admin/search.php'),
]));
}
$statusmsg = '';
$errormsg = '';
if ($data = data_submitted() and confirm_sesskey()) {
$count = admin_write_settings($data);
if (admin_write_settings($data)) {
$statusmsg = get_string('changessaved');
}
if (empty($adminroot->errors)) {
// No errors. Did we change any setting? If so, then indicate success.
if ($count) {
$statusmsg = get_string('changessaved');
} else {
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
}
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
}
} else {
$errormsg = get_string('errorwithsettings', 'admin');
$firsterror = reset($adminroot->errors);
}
$adminroot = admin_get_root(true); //reload tree
$settingspage = $adminroot->locate($category, true);
}
if ($PAGE->user_allowed_editing() && $adminediting != -1) {
$USER->editing = $adminediting;
}
$buttons = null;
if ($PAGE->user_allowed_editing() && !$PAGE->theme->haseditswitch) {
if ($PAGE->user_allowed_editing()) {
$url = clone($PAGE->url);
if ($PAGE->user_is_editing()) {
$caption = get_string('blockseditoff');
@@ -96,46 +90,46 @@ if ($PAGE->user_allowed_editing() && !$PAGE->theme->haseditswitch) {
$savebutton = false;
$outputhtml = '';
foreach ($settingspage->children as $childpage) {
if ($childpage->is_hidden() || !$childpage->check_access()) {
if ($childpage->is_hidden()) {
continue;
}
if ($childpage instanceof admin_externalpage) {
$outputhtml .= $OUTPUT->heading(html_writer::link($childpage->url, $childpage->visiblename), 3);
} else if ($childpage instanceof admin_settingpage) {
$outputhtml .= $OUTPUT->heading(html_writer::link(new moodle_url('/'.$CFG->admin.'/settings.php', array('section' => $childpage->name)), $childpage->visiblename), 3);
// If its a settings page and has settings lets display them.
if (!empty($childpage->settings)) {
$outputhtml .= html_writer::start_tag('fieldset', array('class' => 'adminsettings'));
foreach ($childpage->settings as $setting) {
if (empty($setting->nosave)) {
$savebutton = true;
}
$fullname = $setting->get_full_name();
if (array_key_exists($fullname, $adminroot->errors)) {
$data = $adminroot->errors[$fullname]->data;
} else {
$data = $setting->get_setting();
}
$outputhtml .= html_writer::tag('div', '<!-- -->', array('class' => 'clearer'));
$outputhtml .= $setting->output_html($data);
}
$outputhtml .= html_writer::end_tag('fieldset');
}
} else if ($childpage instanceof admin_category) {
$outputhtml .= $OUTPUT->heading(html_writer::link(new moodle_url('/'.$CFG->admin.'/category.php', array('category' => $childpage->name)), get_string('admincategory', 'admin', $childpage->visiblename)), 3);
} else {
continue;
}
if (!empty($childpage->settings)) {
$outputhtml .= html_writer::start_tag('fieldset', array('class' => 'adminsettings'));
foreach ($childpage->settings as $setting) {
if (empty($setting->nosave)) {
$savebutton = true;
}
$fullname = $setting->get_full_name();
if (array_key_exists($fullname, $adminroot->errors)) {
$data = $adminroot->errors[$fullname]->data;
} else {
$data = $setting->get_setting();
}
$outputhtml .= html_writer::tag('div', '<!-- -->', array('class' => 'clearer'));
$outputhtml .= $setting->output_html($data);
}
$outputhtml .= html_writer::end_tag('fieldset');
}
}
if ($savebutton) {
$outputhtml .= html_writer::start_tag('div', array('class' => 'form-buttons'));
$outputhtml .= html_writer::empty_tag('input', array('class' => 'btn btn-primary form-submit', 'type' => 'submit', 'value' => get_string('savechanges','admin')));
$outputhtml .= html_writer::empty_tag('input', array('class' => 'form-submit', 'type' => 'submit', 'value' => get_string('savechanges','admin')));
$outputhtml .= html_writer::end_tag('div');
}
$PAGE->set_title(implode(moodle_page::TITLE_SEPARATOR, $settingspage->visiblepath));
$visiblepathtosection = array_reverse($settingspage->visiblepath);
$PAGE->set_title("$SITE->shortname: " . implode(": ",$visiblepathtosection));
$PAGE->set_heading($SITE->fullname);
if ($buttons) {
$PAGE->set_button($buttons);
}
$PAGE->set_button($buttons);
echo $OUTPUT->header();
@@ -145,7 +139,13 @@ if ($errormsg !== '') {
echo $OUTPUT->notification($statusmsg, 'notifysuccess');
}
echo $OUTPUT->heading(get_string('admincategory', 'admin', $settingspage->visiblename), 2);
$path = array_reverse($settingspage->visiblepath);
if (is_array($path)) {
$visiblename = join(' / ', $path);
} else {
$visiblename = $path;
}
echo $OUTPUT->heading(get_string('admincategory', 'admin', $visiblename), 2);
echo html_writer::start_tag('form', array('action' => '', 'method' => 'post', 'id' => 'adminsettings'));
echo html_writer::start_tag('div');
@@ -157,7 +157,4 @@ echo $outputhtml;
echo html_writer::end_tag('fieldset');
echo html_writer::end_tag('form');
// Add the form change checker.
$PAGE->requires->js_call_amd('core_form/changechecker', 'watchFormById', ['adminsettings']);
echo $OUTPUT->footer();
echo $OUTPUT->footer();
@@ -1,127 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\admin;
use admin_setting;
use core_plugin_manager;
use core_text;
/**
* Admin setting plugin manager.
*
* @package core_admin
* @subpackage admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_setting_plugin_manager extends admin_setting {
/** @var core_plugin_manager The plugin manager instance */
protected core_plugin_manager $pluginmanager;
/** @var string The plugintype that this manager covers */
protected string $plugintype;
/** @var string The class of the management table to use */
protected string $tableclass;
public function __construct(
string $plugintype,
string $tableclass,
string $name,
string $visiblename,
string $description = '',
string $defaultsetting = '',
) {
$this->nosave = true;
$this->pluginmanager = core_plugin_manager::instance();
$this->plugintype = $plugintype;
$this->tableclass = $tableclass;
parent::__construct($name, $visiblename, $description, $defaultsetting);
}
/**
* Always returns true, does nothing
*
* @return true
*/
public function get_setting(): bool {
return true;
}
/**
* Always returns true, does nothing
*
* @return true
*/
public function get_defaultsetting(): bool {
return true;
}
/**
* Always returns '', does not write anything
*
* @return string Always returns ''
*/
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
public function write_setting($data): string {
// Do not write any setting.
return '';
}
/**
* Checks if $query is one of the available editors
*
* @param string $query The string to search for
* @return bool Returns true if found, false if not
*/
public function is_related($query) {
if (parent::is_related($query)) {
return true;
}
$plugins = $this->pluginmanager->get_installed_plugins($this->plugintype);
foreach (array_keys($plugins) as $plugin) {
$plugin = "{$this->plugintype}_{$plugin}";
if (str_contains($plugin, $query)) {
return true;
}
$pluginname = get_string('pluginname', $plugin);
if (strpos(core_text::strtolower($pluginname), $query) !== false) {
return true;
}
}
return false;
}
/**
* Builds the XHTML to display the control
*
* @param string $data Unused
* @param string $query
* @return string
*/
public function output_html($data, $query = ''): string {
$table = new $this->tableclass();
if (!($table instanceof \core_admin\table\plugin_management_table)) {
throw new \coding_exception("{$this->tableclass} must be an instance of \\core_admin\\table\\plugin_management_table");
}
return highlight($query, $table->get_content());
}
}
-97
View File
@@ -1,97 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\external;
use block_manager;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_single_structure;
use core_external\external_value;
/**
* Web Service to control the state of a plugin.
*
* @package core_admin
* @category external
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class set_block_protection extends external_api {
/**
* Returns description of method parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'plugin' => new external_value(PARAM_PLUGIN, 'The name of the plugin', VALUE_REQUIRED),
'state' => new external_value(PARAM_INT, 'The target state', VALUE_REQUIRED),
]);
}
/**
* Set the block protection state.
*
* @param string $plugin The name of the plugin
* @param int $state The target state
* @return null
*/
public static function execute(
string $plugin,
int $state,
): array {
[
'plugin' => $plugin,
'state' => $state,
] = self::validate_parameters(self::execute_parameters(), [
'plugin' => $plugin,
'state' => $state,
]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
[, $pluginname] = explode('_', \core_component::normalize_componentname($plugin), 2);
$displayname = get_string('pluginname', $plugin);
if ($state) {
block_manager::protect_block($pluginname);
\core\notification::add(
get_string('blockprotected', 'core_admin', $displayname),
\core\notification::SUCCESS
);
} else {
block_manager::unprotect_block($pluginname);
\core\notification::add(
get_string('blockunprotected', 'core_admin', $displayname),
\core\notification::SUCCESS
);
}
return [];
}
/**
* Describe the return structure of the external service.
*
* @return external_single_structure
*/
public static function execute_returns(): external_single_structure {
return new external_single_structure([]);
}
}
-84
View File
@@ -1,84 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\external;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_single_structure;
use core_external\external_value;
/**
* Web Service to control the order of a plugin.
*
* @package core_admin
* @category external
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class set_plugin_order extends external_api {
/**
* Returns description of method parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'plugin' => new external_value(PARAM_PLUGIN, 'The name of the plugin', VALUE_REQUIRED),
'direction' => new external_value(PARAM_INT, 'The direction to move', VALUE_REQUIRED),
]);
}
/**
* Set the plugin state.
*
* @param string $plugin The name of the plugin
* @param int $direction The direction to move the plugin
* @return array
*/
public static function execute(
string $plugin,
int $direction,
): array {
[
'plugin' => $plugin,
'direction' => $direction,
] = self::validate_parameters(self::execute_parameters(), [
'plugin' => $plugin,
'direction' => $direction,
]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
[$plugintype, $pluginname] = explode('_', \core_component::normalize_componentname($plugin), 2);
$manager = \core_plugin_manager::resolve_plugininfo_class($plugintype);
$manager::change_plugin_order($pluginname, $direction);
return [];
}
/**
* Describe the return structure of the external service.
*
* @return external_single_structure
*/
public static function execute_returns(): external_single_structure {
return new external_single_structure([]);
}
}
-98
View File
@@ -1,98 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\external;
use core_external\external_api;
use core_external\external_function_parameters;
use core_external\external_single_structure;
use core_external\external_value;
/**
* Web Service to control the state of a plugin.
*
* @package core_admin
* @category external
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class set_plugin_state extends external_api {
/**
* Returns description of method parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'plugin' => new external_value(PARAM_PLUGIN, 'The name of the plugin', VALUE_REQUIRED),
'state' => new external_value(PARAM_INT, 'The target state', VALUE_REQUIRED),
]);
}
/**
* Set the plugin state.
*
* @param string $plugin The name of the plugin
* @param int $state The target state
* @return null
*/
public static function execute(
string $plugin,
int $state,
): array {
[
'plugin' => $plugin,
'state' => $state,
] = self::validate_parameters(self::execute_parameters(), [
'plugin' => $plugin,
'state' => $state,
]);
$context = \context_system::instance();
self::validate_context($context);
require_capability('moodle/site:config', $context);
[$plugintype, $pluginname] = explode('_', \core_component::normalize_componentname($plugin), 2);
$manager = \core_plugin_manager::resolve_plugininfo_class($plugintype);
$displayname = get_string('pluginname', $plugin);
if ($manager::enable_plugin($pluginname, $state)) {
if (!empty($state)) {
\core\notification::add(
get_string('plugin_enabled', 'core_admin', $displayname),
\core\notification::SUCCESS
);
} else {
\core\notification::add(
get_string('plugin_disabled', 'core_admin', $displayname),
\core\notification::SUCCESS
);
}
}
return [];
}
/**
* Describe the return structure of the external service.
*
* @return external_single_structure
*/
public static function execute_returns(): external_single_structure {
return new external_single_structure([]);
}
}
-76
View File
@@ -1,76 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Form for selective purging of caches.
*
* @package core
* @copyright 2018 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\form;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir.'/formslib.php');
/**
* Form for selecting which caches to purge on admin/purgecaches.php
*
* @package core
* @copyright 2018 The Open University
* @author Mark Johnson <mark.johnson@open.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class purge_caches extends \moodleform {
/**
* Define a "Purge all caches" button, and a fieldset with checkboxes for selectively purging separate caches.
*/
public function definition() {
$mform = $this->_form;
$mform->addElement('hidden', 'returnurl', $this->_customdata['returnurl']);
$mform->setType('returnurl', PARAM_LOCALURL);
$mform->addElement('submit', 'all', get_string('purgecaches', 'admin'));
$mform->addElement('header', 'purgecacheheader', get_string('purgeselectedcaches', 'admin'));
$checkboxes = [
$mform->createElement('advcheckbox', 'theme', '', get_string('purgethemecache', 'admin')),
$mform->createElement('advcheckbox', 'lang', '', get_string('purgelangcache', 'admin')),
$mform->createElement('advcheckbox', 'js', '', get_string('purgejscache', 'admin')),
$mform->createElement('advcheckbox', 'template', '', get_string('purgetemplates', 'admin')),
$mform->createElement('advcheckbox', 'filter', '', get_string('purgefiltercache', 'admin')),
$mform->createElement('advcheckbox', 'muc', '', get_string('purgemuc', 'admin')),
$mform->createElement('advcheckbox', 'other', '', get_string('purgeothercaches', 'admin'))
];
$mform->addGroup($checkboxes, 'purgeselectedoptions');
$mform->addElement('submit', 'purgeselectedcaches', get_string('purgeselectedcaches', 'admin'));
}
/**
* If the "Purge selected caches" button was pressed, ensure at least one cache was selected.
*
* @param array $data
* @param array $files
* @return array Error messages
*/
public function validation($data, $files) {
$errors = [];
if (isset($data['purgeselectedcaches']) && empty(array_filter($data['purgeselectedoptions']))) {
$errors['purgeselectedoptions'] = get_string('purgecachesnoneselected', 'admin');
}
return $errors;
}
}
@@ -1,92 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Testing outgoing mail configuration form
*
* @package core
* @copyright 2019 Victor Deniz <victor@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\form;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir.'/formslib.php');
/**
* Test mail form
*
* @package core
* @copyright 2019 Victor Deniz <victor@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class testoutgoingmailconf_form extends \moodleform {
/**
* Add elements to form
*/
public function definition() {
$mform = $this->_form;
// Recipient.
$options = ['maxlength' => '100', 'size' => '25', 'autocomplete' => 'email'];
$mform->addElement('text', 'recipient', get_string('testoutgoingmailconf_toemail', 'admin'), $options);
$mform->setType('recipient', PARAM_EMAIL);
$mform->addRule('recipient', get_string('required'), 'required');
// From user.
$options = ['maxlength' => '100', 'size' => '25'];
$mform->addElement('text', 'from', get_string('testoutgoingmailconf_fromemail', 'admin'), $options);
$mform->setType('from', PARAM_TEXT);
$mform->addHelpButton('from', 'testoutgoingmailconf_fromemail', 'admin');
// Additional subject text.
$options = ['size' => '25'];
$mform->addElement('text', 'additionalsubject', get_string('testoutgoingmailconf_subjectadditional', 'admin'), $options);
$mform->setType('additionalsubject', PARAM_TEXT);
$buttonarray = array();
$buttonarray[] = $mform->createElement('submit', 'send', get_string('testoutgoingmailconf_sendtest', 'admin'));
$buttonarray[] = $mform->createElement('cancel');
$mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
$mform->closeHeaderBefore('buttonar');
}
/**
* Validate Form field, should be a valid email format or a username that matches with a Moodle user.
*
* @param array $data
* @param array $files
* @return array
* @throws \dml_exception|\coding_exception
*/
public function validation($data, $files): array {
$errors = parent::validation($data, $files);
if (isset($data['from']) && $data['from']) {
$userfrom = \core_user::get_user_by_username($data['from']);
if (!$userfrom && !validate_email($data['from'])) {
$errors['from'] = get_string('testoutgoingmailconf_fromemail_invalid', 'admin');
}
}
return $errors;
}
}
@@ -1,71 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* External admin page class that allows a callback to be provided to determine whether page can be accessed
*
* @package core_admin
* @copyright 2019 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\externalpage;
use admin_externalpage;
defined('MOODLE_INTERNAL') || die();
require_once("{$CFG->libdir}/adminlib.php");
/**
* Admin externalpage class
*
* @package core_admin
* @copyright 2019 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class accesscallback extends admin_externalpage {
/** @var callable $accesscheckcallback */
protected $accesscheckcallback;
/**
* Class constructor
*
* @param string $name
* @param string $visiblename
* @param string $url
* @param callable $accesscheckcallback The callback method that will be executed to check whether user has access to
* this page. The setting instance ($this) is passed as an argument to the callback. Should return boolean value
* @param bool $hidden
*/
public function __construct(string $name, string $visiblename, string $url, callable $accesscheckcallback,
bool $hidden = false) {
$this->accesscheckcallback = $accesscheckcallback;
parent::__construct($name, $visiblename, $url, [], $hidden);
}
/**
* Determines if the current user has access to this external page based on access callback
*
* @return bool
*/
public function check_access() {
return ($this->accesscheckcallback)($this);
}
}
@@ -1,206 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Auto complete admin setting.
*
* @package core_admin
* @copyright 2020 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/adminlib.php');
/**
* Auto complete setting class.
*
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @copyright 2020 The Open University
*/
class autocomplete extends \admin_setting_configmultiselect {
/** @var boolean Should we allow typing new entries to the field? */
protected $tags = false;
/** @var string Name of an AMD module to send/process ajax requests. */
protected $ajax = '';
/** @var string Placeholder text for an empty list. */
protected $placeholder = '';
/** @var bool Whether the search has to be case-sensitive. */
protected $casesensitive = false;
/** @var bool Show suggestions by default - but this can be turned off. */
protected $showsuggestions = true;
/** @var string String that is shown when there are no selections. */
protected $noselectionstring = '';
/** @var string Delimiter to store values in database. */
protected $delimiter = ',';
/** @var string Should be multiple choices? */
protected $multiple = true;
/** @var string The link to manage choices. */
protected $manageurl = true;
/** @var string The text to display in manage link. */
protected $managetext = true;
/**
* Constructor
*
* @param string $name unique ascii name, either 'mysetting' for settings that in config, or 'myplugin/mysetting'
* for ones in config_plugins.
* @param string $visiblename localised
* @param string $description long localised info
* @param array $defaultsetting array of selected items
* @param array $choices options for autocomplete field
* @param array $attributes settings for autocomplete field
*/
public function __construct($name, $visiblename, $description, $defaultsetting, $choices, $attributes = null) {
if ($attributes === null) {
$attributes = [];
}
$this->placeholder = get_string('search');
$this->noselectionstring = get_string('noselection', 'form');
$defaultattributes = [
'tags',
'showsuggestions',
'placeholder',
'noselectionstring',
'ajax',
'casesensitive',
'delimiter',
'multiple',
'manageurl',
'managetext'
];
foreach ($defaultattributes as $attributename) {
if (isset($attributes[$attributename])) {
$this->$attributename = $attributes[$attributename];
}
}
parent::__construct($name, $visiblename, $description, $defaultsetting, $choices);
}
/**
* Returns the select setting(s)
*
* @return mixed null or array. Null if no settings else array of setting(s)
*/
public function get_setting() {
$result = $this->config_read($this->name);
if (is_null($result)) {
return null;
}
if ($result === '') {
return [];
}
return explode($this->delimiter, $result);
}
/**
* Saves setting(s) provided through $data
*
* @param array $data
*/
public function write_setting($data) {
if (!is_array($data)) {
return ''; // Ignore it.
}
if (!$this->load_choices() || empty($this->choices)) {
return '';
}
unset($data['xxxxx']);
$save = [];
foreach ($data as $value) {
if (!array_key_exists($value, $this->choices)) {
continue; // Ignore it.
}
$save[] = $value;
}
return ($this->config_write($this->name, implode($this->delimiter, $save)) ? '' : get_string('errorsetting', 'admin'));
}
/**
* Returns XHTML autocomplete field
*
* @param array $data Array of values to select by default
* @param string $query
* @return string XHTML autocomplete field
*/
public function output_html($data, $query = '') {
global $OUTPUT;
if (!$this->load_choices() or empty($this->choices)) {
return '';
}
$default = $this->get_defaultsetting();
if (empty($default)) {
$default = [];
}
if (is_null($data)) {
$data = [];
}
$context = [
'id' => $this->get_id(),
'name' => $this->get_full_name()
];
$defaults = [];
$options = [];
$template = 'core_admin/local/settings/autocomplete';
foreach ($this->choices as $value => $name) {
if (in_array($value, $default)) {
$defaults[] = $name;
}
$options[] = [
'value' => $value,
'text' => $name,
'selected' => in_array($value, $data),
'disabled' => false
];
}
$context['options'] = $options;
$context['tags'] = $this->tags;
$context['placeholder'] = $this->placeholder;
$context['casesensitive'] = $this->casesensitive;
$context['multiple'] = $this->multiple;
$context['showsuggestions'] = $this->showsuggestions;
$context['manageurl'] = $this->manageurl;
$context['managetext'] = $this->managetext;
if (is_null($default)) {
$defaultinfo = null;
} if (!empty($defaults)) {
$defaultinfo = implode(', ', $defaults);
} else {
$defaultinfo = get_string('none');
}
$element = $OUTPUT->render_from_template($template, $context);
return format_admin_setting($this, $this->visiblename, $element, $this->description, true, '', $defaultinfo, $query);
}
}
-197
View File
@@ -1,197 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* File size admin setting.
*
* @package core_admin
* @copyright 2019 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/adminlib.php');
/**
* An admin setting to support entering and displaying of file sizes in Bytes, KB, MB or GB.
*
* @copyright 2019 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class filesize extends \admin_setting {
/** @var int The byte unit. Number of bytes in a byte */
const UNIT_B = 1;
/** @var int The kilobyte unit (number of bytes in a kilobyte) */
const UNIT_KB = 1024;
/** @var int The megabyte unit (number of bytes in a megabyte) */
const UNIT_MB = 1048576;
/** @var int The gigabyte unit (number of bytes in a gigabyte) */
const UNIT_GB = 1073741824;
/** @var int default size unit */
protected $defaultunit;
/**
* Constructor
*
* @param string $name unique ascii name, either 'mysetting' for settings that in config,
* or 'myplugin/mysetting' for ones in config_plugins.
* @param string $visiblename localised name
* @param string $description localised long description
* @param int|null $defaultvalue Value of the settings in bytes
* @param int|null $defaultunit GB, MB, etc. (in bytes)
*/
public function __construct(string $name, string $visiblename, string $description,
int $defaultvalue = null, int $defaultunit = null) {
$defaultsetting = self::parse_bytes($defaultvalue);
if ($defaultunit && array_key_exists($defaultunit, self::get_units())) {
$this->defaultunit = $defaultunit;
} else {
$this->defaultunit = self::UNIT_MB;
}
parent::__construct($name, $visiblename, $description, $defaultsetting);
}
/**
* Returns selectable units.
*
* @return array
*/
protected static function get_units(): array {
return [
self::UNIT_GB => get_string('sizegb'),
self::UNIT_MB => get_string('sizemb'),
self::UNIT_KB => get_string('sizekb'),
self::UNIT_B => get_string('sizeb'),
];
}
/**
* Converts bytes to some more user friendly string.
*
* @param int $bytes The number of bytes we want to convert from
* @return string
*/
protected static function get_size_text(int $bytes): string {
if (empty($bytes)) {
return get_string('none');
}
return display_size($bytes, 0);
}
/**
* Finds suitable units for given file size.
*
* @param int $bytes The number of bytes
* @return array Parsed file size in the format of ['v' => value, 'u' => unit]
*/
protected static function parse_bytes(int $bytes): array {
foreach (self::get_units() as $unit => $unused) {
if ($bytes % $unit === 0) {
return ['v' => (int)($bytes / $unit), 'u' => $unit];
}
}
return ['v' => (int)$bytes, 'u' => self::UNIT_B];
}
/**
* Get the selected file size as array.
*
* @return array|null An array containing 'v' => xx, 'u' => xx, or null if not set
*/
public function get_setting(): ?array {
$bytes = $this->config_read($this->name);
if (is_null($bytes)) {
return null;
}
$bytes = intval($bytes);
return self::parse_bytes($bytes);
}
/**
* Store the file size as bytes.
*
* @param array $data Must be form 'h' => xx, 'm' => xx
* @return string The error string if any
*/
public function write_setting($data): string {
if (!is_array($data)) {
return '';
}
if (!is_numeric($data['v']) || $data['v'] < 0) {
return get_string('errorsetting', 'admin');
}
// Calculate size in bytes, ensuring we don't overflow PHP_INT_MAX.
$bytes = $data['v'] * $data['u'];
$result = (is_int($bytes) && $this->config_write($this->name, $bytes));
return ($result ? '' : get_string('errorsetting', 'admin'));
}
/**
* Returns file size text+select fields.
*
* @param array $data The current setting value. Must be form 'v' => xx, 'u' => xx.
* @param string $query Admin search query to be highlighted.
* @return string File size text+select fields and wrapping div(s).
*/
public function output_html($data, $query = ''): string {
global $OUTPUT;
$default = $this->get_defaultsetting();
if (is_number($default)) {
$defaultinfo = self::get_size_text($default);
} else if (is_array($default)) {
$defaultinfo = self::get_size_text($default['v'] * $default['u']);
} else {
$defaultinfo = null;
}
$inputid = $this->get_id() . 'v';
$units = self::get_units();
$defaultunit = $this->defaultunit;
$context = (object) [
'id' => $this->get_id(),
'name' => $this->get_full_name(),
'value' => $data['v'],
'readonly' => $this->is_readonly(),
'options' => array_map(function($unit, $title) use ($data, $defaultunit) {
return [
'value' => $unit,
'name' => $title,
'selected' => ($data['v'] == 0 && $unit == $defaultunit) || $unit == $data['u']
];
}, array_keys($units), $units)
];
$element = $OUTPUT->render_from_template('core_admin/setting_configfilesize', $context);
return format_admin_setting($this, $this->visiblename, $element, $this->description, $inputid, '', $defaultinfo, $query);
}
}
@@ -1,37 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* A settings page which can be viewed with a link directly.
*
* @package core_admin
* @copyright 2021 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
use moodle_url;
interface linkable_settings_page {
/**
* Get the URL to view this settings page.
*
* @return moodle_url
*/
public function get_settings_page_url(): moodle_url;
}
@@ -1,74 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Payment gateway admin setting.
*
* @package core_admin
* @copyright 2020 Shamim Rezaie <shamim@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
/**
* Generic class for managing plugins in a table that allows re-ordering and enable/disable of each plugin.
*/
class manage_payment_gateway_plugins extends \admin_setting_manage_plugins {
/**
* Get the admin settings section title (use get_string).
*
* @return string
*/
public function get_section_title() {
return get_string('type_paygw_plural', 'plugin');
}
/**
* Get the type of plugin to manage.
*
* @return string
*/
public function get_plugin_type() {
return 'paygw';
}
/**
* Get the name of the second column.
*
* @return string
*/
public function get_info_column_name() {
return get_string('supportedcurrencies', 'core_payment');
}
/**
* Get the type of plugin to manage.
*
* @param plugininfo The plugin info class.
* @return string
*/
public function get_info_column($plugininfo) {
$codes = $plugininfo->get_supported_currencies();
$currencies = [];
foreach ($codes as $c) {
$currencies[$c] = new \lang_string($c, 'core_currencies');
}
return implode(get_string('listsep', 'langconfig') . ' ', $currencies);
}
}
@@ -1,121 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Admin setting to show current scheduled task's status.
*
* @package core
* @copyright 2021 Universitat Rovira i Virgili
* @author Jordi Pujol-Ahulló <jpahullo@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\local\settings;
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/moodlelib.php');
use admin_setting_description;
use core\task\manager;
use core\task\scheduled_task;
use html_writer;
use lang_string;
use moodle_url;
use stdClass;
/**
* This admin setting tells whether a given scheduled task is enabled, providing a link to its configuration page.
*
* The goal of this setting is to help contextualizing the configuration settings with related scheduled task status,
* providing the big picture of that part of the system.
*
* @package core
* @copyright 2021 Universitat Rovira i Virgili
* @author Jordi Pujol-Ahulló <jpahullo@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class setting_scheduled_task_status extends admin_setting_description {
/**
* @var string fully qualified class name of a scheduled task.
*/
private $classname;
/**
* @var string additional text to append to the description.
*/
private $extradescription;
/**
* setting_scheduled_task_status constructor.
* @param string $name unique setting name.
* @param string $scheduledtaskclassname full classpath class name of the scheduled task.
* @param string $extradescription extra detail to append to the scheduled task status to add context in the setting
* page.
*/
public function __construct(string $name, string $scheduledtaskclassname, string $extradescription = '') {
$visiblename = new lang_string('task_status', 'admin');
$this->classname = $scheduledtaskclassname;
$this->extradescription = $extradescription;
parent::__construct($name, $visiblename, '');
}
/**
* Calculates lazily the content of the description.
* @param mixed $data nothing expected in this case.
* @param string $query nothing expected in this case.
* @return string the HTML content to print for this setting.
*/
public function output_html($data, $query = ''): string {
if (empty($this->description)) {
$this->description = $this->get_task_description();
}
return parent::output_html($data, $query);
}
/**
* Returns the HTML to print as the description.
* @return string description to be printed.
*/
private function get_task_description(): string {
$task = manager::get_scheduled_task($this->classname);
if ($task->is_enabled()) {
$taskenabled = get_string('enabled', 'admin');
} else {
$taskenabled = get_string('disabled', 'admin');
}
$taskenabled = strtolower($taskenabled);
$gotourl = new moodle_url(
'/admin/tool/task/scheduledtasks.php',
[],
scheduled_task::get_html_id($this->classname)
);
if (!empty($this->extradescription)) {
$this->extradescription = '<br />' . $this->extradescription;
}
$taskdetail = new stdClass();
$taskdetail->class = $this->classname;
$taskdetail->name = $task->get_name();
$taskdetail->status = $taskenabled;
$taskdetail->gotourl = $gotourl->out(false);
$taskdetail->extradescription = $this->extradescription;
return html_writer::tag('p', get_string('task_status_desc', 'admin', $taskdetail));
}
}
-41
View File
@@ -1,41 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for core_admin.
*
* @package core_admin
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for core_admin implementing null_provider.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
@@ -1,117 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
declare(strict_types=1);
namespace core_admin\reportbuilder\datasource;
use core_admin\reportbuilder\local\entities\task_log;
use core_reportbuilder\datasource;
use core_reportbuilder\local\entities\user;
use core_reportbuilder\local\filters\select;
/**
* Task logs datasource
*
* @package core_admin
* @copyright 2022 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class task_logs extends datasource {
/**
* Return user friendly name of the report source
*
* @return string
*/
public static function get_name(): string {
return get_string('tasklogs', 'core_admin');
}
/**
* Initialise report
*/
protected function initialise(): void {
$tasklogentity = new task_log();
$tasklogalias = $tasklogentity->get_table_alias('task_log');
$this->set_main_table('task_log', $tasklogalias);
$this->add_entity($tasklogentity);
// Join the user entity to represent the associated user.
$userentity = new user();
$useralias = $userentity->get_table_alias('user');
$this->add_entity($userentity->add_join("
LEFT JOIN {user} {$useralias}
ON {$useralias}.id = {$tasklogalias}.userid")
);
// Add report elements from each of the entities we added to the report.
$this->add_all_from_entities();
}
/**
* Return the columns that will be added to the report upon creation
*
* @return string[]
*/
public function get_default_columns(): array {
return [
'task_log:name',
'task_log:starttime',
'task_log:duration',
'task_log:result',
];
}
/**
* Return the filters that will be added to the report upon creation
*
* @return string[]
*/
public function get_default_filters(): array {
return [
'task_log:timestart',
'task_log:result',
];
}
/**
* Return the conditions that will be added to the report upon creation
*
* @return string[]
*/
public function get_default_conditions(): array {
return [
'task_log:type',
'task_log:timestart',
'task_log:result',
];
}
/**
* Return the condition values that will be set for the report upon creation
*
* @return array
*/
public function get_default_condition_values(): array {
return [
'task_log:type_operator' => select::EQUAL_TO,
'task_log:type_value' => \core\task\database_logger::TYPE_SCHEDULED,
];
}
}
@@ -1,427 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\reportbuilder\local\entities;
use core_reportbuilder\local\filters\date;
use core_reportbuilder\local\filters\duration;
use core_reportbuilder\local\filters\number;
use core_reportbuilder\local\filters\select;
use core_reportbuilder\local\filters\text;
use core_reportbuilder\local\filters\autocomplete;
use core_reportbuilder\local\helpers\format;
use lang_string;
use core_reportbuilder\local\entities\base;
use core_reportbuilder\local\report\column;
use core_reportbuilder\local\report\filter;
use stdClass;
use core_collator;
/**
* Task log entity class implementation
*
* @package core_admin
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class task_log extends base {
/** @var int Result success */
protected const SUCCESS = 0;
/** @var int Result failed */
protected const FAILED = 1;
/**
* Database tables that this entity uses and their default aliases
*
* @return array
*/
protected function get_default_table_aliases(): array {
return ['task_log' => 'tl'];
}
/**
* The default title for this entity in the list of columns/conditions/filters in the report builder
*
* @return lang_string
*/
protected function get_default_entity_title(): lang_string {
return new lang_string('entitytasklog', 'admin');
}
/**
* Initialise the entity
*
* @return base
*/
public function initialise(): base {
$columns = $this->get_all_columns();
foreach ($columns as $column) {
$this->add_column($column);
}
// All the filters defined by the entity can also be used as conditions.
$filters = $this->get_all_filters();
foreach ($filters as $filter) {
$this
->add_filter($filter)
->add_condition($filter);
}
return $this;
}
/**
* Returns list of all available columns
*
* @return column[]
*/
protected function get_all_columns(): array {
global $DB;
$tablealias = $this->get_table_alias('task_log');
// Name column.
$columns[] = (new column(
'name',
new lang_string('name'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("$tablealias.classname")
->set_is_sortable(true)
->add_callback(static function(string $classname): string {
$output = '';
if (class_exists($classname)) {
$task = new $classname;
if ($task instanceof \core\task\task_base) {
$output = $task->get_name();
}
}
$output .= \html_writer::tag('div', "\\{$classname}", [
'class' => 'small text-muted',
]);
return $output;
});
// Component column.
$columns[] = (new column(
'component',
new lang_string('plugin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$tablealias}.component")
->set_is_sortable(true);
// Type column.
$columns[] = (new column(
'type',
new lang_string('tasktype', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("{$tablealias}.type")
->set_is_sortable(true)
->add_callback(static function($value): string {
if (\core\task\database_logger::TYPE_SCHEDULED === (int) $value) {
return get_string('task_type:scheduled', 'admin');
}
return get_string('task_type:adhoc', 'admin');
});
// Start time column.
$columns[] = (new column(
'starttime',
new lang_string('task_starttime', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TIMESTAMP)
->add_field("{$tablealias}.timestart")
->set_is_sortable(true)
->add_callback([format::class, 'userdate'], get_string('strftimedatetimeshortaccurate', 'core_langconfig'));
// End time column.
$columns[] = (new column(
'endtime',
new lang_string('task_endtime', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TIMESTAMP)
->add_field("{$tablealias}.timeend")
->set_is_sortable(true)
->add_callback([format::class, 'userdate'], get_string('strftimedatetimeshortaccurate', 'core_langconfig'));
// Duration column.
$columns[] = (new column(
'duration',
new lang_string('task_duration', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_FLOAT)
->add_field("{$tablealias}.timeend - {$tablealias}.timestart", 'duration')
->set_is_sortable(true)
->add_callback(static function(float $value): string {
$duration = round($value, 2);
if (empty($duration)) {
// The format_time function returns 'now' when the difference is exactly 0.
// Note: format_time performs concatenation in exactly this fashion so we should do this for consistency.
return '0 ' . get_string('secs', 'moodle');
}
return format_time($duration);
});
// Hostname column.
$columns[] = (new column(
'hostname',
new lang_string('hostname', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_TEXT)
->add_field("$tablealias.hostname")
->set_is_sortable(true);
// PID column.
$columns[] = (new column(
'pid',
new lang_string('pid', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_field("{$tablealias}.pid")
->set_is_sortable(true)
// Although this is an integer column, it doesn't make sense to perform numeric aggregation on it.
->set_disabled_aggregation(['avg', 'count', 'countdistinct', 'max', 'min', 'sum']);
// Database column.
$columns[] = (new column(
'database',
new lang_string('task_dbstats', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbreads, {$tablealias}.dbwrites")
->set_is_sortable(true, ["{$tablealias}.dbreads", "{$tablealias}.dbwrites"])
->add_callback(static function(int $value, stdClass $row): string {
$output = '';
$output .= \html_writer::div(get_string('task_stats:dbreads', 'admin', $row->dbreads));
$output .= \html_writer::div(get_string('task_stats:dbwrites', 'admin', $row->dbwrites));
return $output;
})
// Although this is an integer column, it doesn't make sense to perform numeric aggregation on it.
->set_disabled_aggregation(['avg', 'count', 'countdistinct', 'max', 'min', 'sum']);
// Database reads column.
$columns[] = (new column(
'dbreads',
new lang_string('task_dbreads', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbreads")
->set_is_sortable(true);
// Database writes column.
$columns[] = (new column(
'dbwrites',
new lang_string('task_dbwrites', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_INTEGER)
->add_fields("{$tablealias}.dbwrites")
->set_is_sortable(true);
// Result column.
$columns[] = (new column(
'result',
new lang_string('task_result', 'admin'),
$this->get_entity_name()
))
->add_joins($this->get_joins())
->set_type(column::TYPE_BOOLEAN)
// For accurate aggregation, we need to return boolean success = true by xor'ing the field value.
->add_field($DB->sql_bitxor("{$tablealias}.result", 1), 'success')
->set_is_sortable(true)
->add_callback(static function(bool $success): string {
if (!$success) {
return get_string('task_result:failed', 'admin');
}
return get_string('success');
});
return $columns;
}
/**
* Return list of all available filters
*
* @return filter[]
*/
protected function get_all_filters(): array {
global $DB;
$tablealias = $this->get_table_alias('task_log');
// Name filter (Filter by classname).
$filters[] = (new filter(
autocomplete::class,
'name',
new lang_string('classname', 'tool_task'),
$this->get_entity_name(),
"{$tablealias}.classname"
))
->add_joins($this->get_joins())
->set_options_callback(static function(): array {
global $DB;
$classnames = $DB->get_fieldset_sql('SELECT DISTINCT classname FROM {task_log} ORDER BY classname ASC');
$options = [];
foreach ($classnames as $classname) {
if (class_exists($classname)) {
$task = new $classname;
$options[$classname] = $task->get_name();
}
}
core_collator::asort($options);
return $options;
});
// Component filter.
$filters[] = (new filter(
text::class,
'component',
new lang_string('plugin'),
$this->get_entity_name(),
"{$tablealias}.component"
))
->add_joins($this->get_joins());
// Type filter.
$filters[] = (new filter(
select::class,
'type',
new lang_string('tasktype', 'admin'),
$this->get_entity_name(),
"{$tablealias}.type"
))
->add_joins($this->get_joins())
->set_options([
\core\task\database_logger::TYPE_ADHOC => new lang_string('task_type:adhoc', 'admin'),
\core\task\database_logger::TYPE_SCHEDULED => new lang_string('task_type:scheduled', 'admin'),
]);
// Output filter (Filter by task output).
$filters[] = (new filter(
text::class,
'output',
new lang_string('task_logoutput', 'admin'),
$this->get_entity_name(),
$DB->sql_cast_to_char("{$tablealias}.output")
))
->add_joins($this->get_joins());
// Start time filter.
$filters[] = (new filter(
date::class,
'timestart',
new lang_string('task_starttime', 'admin'),
$this->get_entity_name(),
"{$tablealias}.timestart"
))
->add_joins($this->get_joins())
->set_limited_operators([
date::DATE_ANY,
date::DATE_RANGE,
date::DATE_PREVIOUS,
date::DATE_CURRENT,
]);
// End time.
$filters[] = (new filter(
date::class,
'timeend',
new lang_string('task_endtime', 'admin'),
$this->get_entity_name(),
"{$tablealias}.timeend"
))
->add_joins($this->get_joins())
->set_limited_operators([
date::DATE_ANY,
date::DATE_RANGE,
date::DATE_PREVIOUS,
date::DATE_CURRENT,
]);
// Duration filter.
$filters[] = (new filter(
duration::class,
'duration',
new lang_string('task_duration', 'admin'),
$this->get_entity_name(),
"{$tablealias}.timeend - {$tablealias}.timestart"
))
->add_joins($this->get_joins());
// Database reads.
$filters[] = (new filter(
number::class,
'dbreads',
new lang_string('task_dbreads', 'admin'),
$this->get_entity_name(),
"{$tablealias}.dbreads"
))
->add_joins($this->get_joins());
// Database writes.
$filters[] = (new filter(
number::class,
'dbwrites',
new lang_string('task_dbwrites', 'admin'),
$this->get_entity_name(),
"{$tablealias}.dbwrites"
))
->add_joins($this->get_joins());
// Result filter.
$filters[] = (new filter(
select::class,
'result',
new lang_string('task_result', 'admin'),
$this->get_entity_name(),
"{$tablealias}.result"
))
->add_joins($this->get_joins())
->set_options([
self::SUCCESS => get_string('success'),
self::FAILED => get_string('task_result:failed', 'admin'),
]);
return $filters;
}
}
@@ -1,159 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\reportbuilder\local\systemreports;
use context_system;
use core_admin\reportbuilder\local\entities\task_log;
use core_reportbuilder\local\entities\user;
use core_reportbuilder\local\report\action;
use lang_string;
use moodle_url;
use pix_icon;
use core_reportbuilder\system_report;
/**
* Task logs system report class implementation
*
* @package core_admin
* @copyright 2021 David Matamoros <davidmc@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class task_logs extends system_report {
/**
* Initialise report, we need to set the main table, load our entities and set columns/filters
*/
protected function initialise(): void {
// Our main entity, it contains all of the column definitions that we need.
$entitymain = new task_log();
$entitymainalias = $entitymain->get_table_alias('task_log');
$this->set_main_table('task_log', $entitymainalias);
$this->add_entity($entitymain);
// Any columns required by actions should be defined here to ensure they're always available.
$this->add_base_fields("{$entitymainalias}.id");
// We can join the "user" entity to our "main" entity and use the fullname column from the user entity.
$entityuser = new user();
$entituseralias = $entityuser->get_table_alias('user');
$this->add_entity($entityuser->add_join(
"LEFT JOIN {user} {$entituseralias} ON {$entituseralias}.id = {$entitymainalias}.userid"
));
// Now we can call our helper methods to add the content we want to include in the report.
$this->add_columns();
$this->add_filters();
$this->add_actions();
// Set if report can be downloaded.
$this->set_downloadable(true, get_string('tasklogs', 'admin'));
}
/**
* Validates access to view this report
*
* @return bool
*/
protected function can_view(): bool {
return has_capability('moodle/site:config', context_system::instance());
}
/**
* Get the visible name of the report
*
* @return string
*/
public static function get_name(): string {
return get_string('entitytasklog', 'admin');
}
/**
* Adds the columns we want to display in the report
*
* They are all provided by the entities we previously added in the {@see initialise} method, referencing each by their
* unique identifier
*/
public function add_columns(): void {
$columns = [
'task_log:name',
'task_log:type',
'user:fullname',
'task_log:starttime',
'task_log:duration',
'task_log:hostname',
'task_log:pid',
'task_log:database',
'task_log:result',
];
$this->add_columns_from_entities($columns);
// It's possible to override the display name of a column, if you don't want to use the value provided by the entity.
if ($column = $this->get_column('user:fullname')) {
$column->set_title(new lang_string('user', 'admin'));
}
// It's possible to set a default initial sort direction for one column.
$this->set_initial_sort_column('task_log:starttime', SORT_DESC);
}
/**
* Adds the filters we want to display in the report
*
* They are all provided by the entities we previously added in the {@see initialise} method, referencing each by their
* unique identifier
*/
protected function add_filters(): void {
$filters = [
'task_log:name',
'task_log:type',
'task_log:output',
'task_log:result',
'task_log:timestart',
'task_log:duration',
];
$this->add_filters_from_entities($filters);
}
/**
* Add the system report actions. An extra column will be appended to each row, containing all actions added here
*
* Note the use of ":id" placeholder which will be substituted according to actual values in the row
*/
protected function add_actions(): void {
// Action to view individual task log on a popup window.
$this->add_action((new action(
new moodle_url('/admin/tasklogs.php', ['logid' => ':id']),
new pix_icon('e/search', ''),
[],
true,
new lang_string('view'),
)));
// Action to download individual task log.
$this->add_action((new action(
new moodle_url('/admin/tasklogs.php', ['logid' => ':id', 'download' => true]),
new pix_icon('t/download', ''),
[],
false,
new lang_string('download'),
)));
}
}
@@ -1,118 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use core_plugin_manager;
use dml_exception;
use html_writer;
use moodle_url;
use stdClass;
/**
* Activity Module admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class activity_management_table extends plugin_management_table {
public function setup() {
$this->set_attribute('id', 'modules');
$this->set_attribute('class', 'admintable generaltable');
parent::setup();
}
protected function get_table_id(): string {
return 'module-administration-table';
}
protected function get_plugintype(): string {
return 'mod';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/modules.php')
);
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/modules.php', $params);
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
return array_merge(
array_slice($columns, 0, 1, true),
['activities' => get_string('activities')],
array_slice($columns, 1, null, true),
);
}
protected function col_name(stdClass $row): string {
global $OUTPUT;
$status = $row->plugininfo->get_status();
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
return html_writer::span(
get_string('pluginmissingfromdisk', 'core', $row->plugininfo),
'notifyproblem'
);
}
return html_writer::span(
html_writer::img(
$OUTPUT->image_url('monologo', $row->plugininfo->name),
'',
[
'class' => 'icon',
],
) . get_string('modulename', $row->plugininfo->name)
);
}
/**
* Show the number of activities present, with a link to courses containing activity if relevant.
*
* @param mixed $row
* @return string
*/
protected function col_activities(stdClass $row): string {
global $DB, $OUTPUT;
try {
$count = $DB->count_records_select($row->plugininfo->name, "course <> 0");
} catch (dml_exception $e) {
$count = -1;
}
if ($count > 0) {
return $OUTPUT->action_link(
new moodle_url('/course/search.php', [
'modulelist' => $row->plugininfo->name,
]),
$count,
null,
['title' => get_string('showmodulecourse')]
);
} else if ($count < 0) {
return get_string('error');
} else {
return $count;
}
}
}
@@ -1,153 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use html_writer;
use moodle_url;
use stdClass;
/**
* Tiny admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class block_management_table extends \core_admin\table\plugin_management_table {
/** @var plugininfo[] A list of blocks which cannot be deleted */
protected array $undeletableblocktypes;
/** @var stdClass[] A list of basic block data */
protected array $blockdata;
/** @var array<string,int> A list of course counts */
protected array $courseblocks;
public function __construct() {
global $DB;
parent::__construct();
$this->undeletableblocktypes = \block_manager::get_undeletable_block_types();
$sql = 'SELECT b.name,
b.id,
COUNT(DISTINCT binst.id) as totalcount
FROM {block} b
LEFT JOIN {block_instances} binst ON binst.blockname = b.name
GROUP BY b.id,
b.name
ORDER BY b.name ASC';
$this->blockdata = $DB->get_records_sql($sql);
$sql = "SELECT blockname
FROM {block_instances}
WHERE pagetypepattern = 'course-view-*'
GROUP BY blockname";
$this->courseblocks = $DB->get_records_sql($sql);
}
protected function get_plugintype(): string {
return 'block';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/blocks.php')
);
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/blocks.php', $params);
}
protected function get_table_js_module(): string {
return 'core_admin/block_management_table';
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
return array_merge(
array_slice($columns, 0, 1, true),
['instances' => get_string('blockinstances', 'admin')],
array_slice($columns, 1, 2, true),
['protect' => get_string('blockprotect', 'admin')],
array_slice($columns, 3, null, true),
);
}
protected function get_columns_with_help(): array {
return [
'protect' => new \help_icon('blockprotect', 'admin'),
];
}
/**
* Render the instances column
* @param stdClass $row
* @return string
*/
protected function col_instances(stdClass $row): string {
$blockdata = $this->blockdata[$row->plugininfo->name];
if (array_key_exists($blockdata->name, $this->courseblocks)) {
return html_writer::link(
new moodle_url('/course/search.php', [
'blocklist' => $blockdata->id,
]),
$blockdata->totalcount,
);
}
return $blockdata->totalcount;
}
/**
* Render the protect column.
*
* @param stdClass $row
* @return string
*/
protected function col_protect(stdClass $row): string {
global $OUTPUT;
$params = [
'sesskey' => sesskey(),
];
$protected = in_array($row->plugininfo->name, $this->undeletableblocktypes);
$pluginname = $row->plugininfo->displayname;
if ($protected) {
$params['unprotect'] = $row->plugininfo->name;
$icon = $OUTPUT->pix_icon('t/unlock', get_string('blockunprotectblock', 'admin', $pluginname));
} else {
$params['protect'] = $row->plugininfo->name;
$icon = $OUTPUT->pix_icon('t/lock', get_string('blockprotectblock', 'admin', $pluginname));
}
return html_writer::link(
$this->get_action_url($params),
$icon,
[
'data-action' => 'toggleprotectstate',
'data-plugin' => $row->plugin,
'data-target-state' => $protected ? 0 : 1,
],
);
return '';
}
}
@@ -1,63 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use moodle_url;
/**
* Tiny admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class editor_management_table extends \core_admin\table\plugin_management_table {
protected function get_plugintype(): string {
return 'editor';
}
public function guess_base_url(): void {
$this->define_baseurl(
new moodle_url('/admin/settings.php', ['section' => 'manageeditors'])
);
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/editors.php', $params);
}
protected function order_plugins(array $plugins): array {
global $CFG;
// The Editor list is stored in an ordered string.
$activeeditors = explode(',', $CFG->texteditors);
$sortedplugins = [];
foreach ($activeeditors as $editor) {
if (isset($plugins[$editor])) {
$sortedplugins[$editor] = $plugins[$editor];
unset($plugins[$editor]);
}
}
$otherplugins = parent::order_plugins($plugins);
return array_merge(
$sortedplugins,
$otherplugins
);
}
}
@@ -1,71 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use moodle_url;
use stdClass;
/**
* Media plugin admin settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class media_management_table extends \core_admin\table\plugin_management_table {
/** @var array The list of used extensions */
protected array $usedextensions = [];
protected function get_plugintype(): string {
return 'media';
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/media.php', $params);
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
return array_merge(
array_slice($columns, 0, 1, true),
['supports' => get_string('supports', 'core_media')],
array_slice($columns, 1, null, true),
);
}
protected function col_name(stdClass $row): string {
global $OUTPUT, $PAGE;
$name = $row->plugininfo->name;
if ($PAGE->theme->resolve_image_location('icon', 'media_' . $name, false)) {
$icon = $OUTPUT->pix_icon('icon', '', "media_{$name}", ['class' => 'icon pluginicon']);
} else {
$icon = $OUTPUT->pix_icon('spacer', '', 'moodle', ['class' => 'icon pluginicon noicon']);
}
$help = '';
if (get_string_manager()->string_exists('pluginname_help', 'media_' . $name)) {
$help = '&nbsp;' . $OUTPUT->help_icon('pluginname', 'media_' . $name);
}
return $icon . $row->plugininfo->displayname . $help;
}
protected function col_supports(stdClass $row): string {
return $row->plugininfo->supports($this->usedextensions);
}
}
@@ -1,503 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use context_system;
use core_plugin_manager;
use core_table\dynamic as dynamic_table;
use flexible_table;
use html_writer;
use moodle_url;
use stdClass;
defined('MOODLE_INTERNAL') || die();
require_once("{$CFG->libdir}/tablelib.php");
/**
* Plugin Management table.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
abstract class plugin_management_table extends flexible_table implements dynamic_table {
/** @var \core\plugininfo\base[] The plugin list */
protected array $plugins = [];
/** @var int The number of enabled plugins of this type */
protected int $enabledplugincount = 0;
/** @var core_plugin_manager */
protected core_plugin_manager $pluginmanager;
/** @var string The plugininfo class for this plugintype */
protected string $plugininfoclass;
public function __construct() {
global $CFG;
parent::__construct($this->get_table_id());
require_once($CFG->libdir . '/adminlib.php');
// Fetch the plugininfo class.
$this->pluginmanager = core_plugin_manager::instance();
$this->plugininfoclass = $this->pluginmanager::resolve_plugininfo_class($this->get_plugintype());
$this->guess_base_url();
$this->plugins = $this->get_sorted_plugins();
$this->enabledplugincount = count(array_filter($this->plugins, function ($plugin) {
return $plugin->is_enabled();
}));
$this->setup_column_configuration();
$this->set_filterset(new plugin_management_table_filterset());
$this->setup();
}
/**
* Get the list of sorted plugins.
*
* @return \core\plugininfo\base[]
*/
protected function get_sorted_plugins(): array {
if ($this->plugininfoclass::plugintype_supports_ordering()) {
return $this->plugininfoclass::get_sorted_plugins();
} else {
$plugins = $this->pluginmanager->get_plugins_of_type($this->get_plugintype());
return self::sort_plugins($plugins);
}
}
/**
* Sort the plugins list.
*
* Note: This only applies to plugins which do not support ordering.
*
* @param \core\plugininfo\base[] $plugins
* @return \core\plugininfo\base[]
*/
protected function sort_plugins(array $plugins): array {
// The asort functions work by reference.
\core_collator::asort_objects_by_property($plugins, 'displayname');
return $plugins;
}
/**
* Set up the column configuration for this table.
*/
protected function setup_column_configuration(): void {
$columnlist = $this->get_column_list();
$this->define_columns(array_keys($columnlist));
$this->define_headers(array_values($columnlist));
$columnswithhelp = $this->get_columns_with_help();
$columnhelp = array_map(function (string $column) use ($columnswithhelp): ?\renderable {
if (array_key_exists($column, $columnswithhelp)) {
return $columnswithhelp[$column];
}
return null;
}, array_keys($columnlist));
$this->define_help_for_headers($columnhelp);
}
/**
* Set the standard order of the plugins.
*
* @param array $plugins
* @return array
*/
protected function order_plugins(array $plugins): array {
uasort($plugins, function ($a, $b) {
if ($a->is_enabled() && !$b->is_enabled()) {
return -1;
} else if (!$a->is_enabled() && $b->is_enabled()) {
return 1;
}
return strnatcasecmp($a->name, $b->name);
});
return $plugins;
}
/**
* Get the plugintype for this table.
*
* @return string
*/
abstract protected function get_plugintype(): string;
/**
* Get the action URL for this table.
*
* The action URL is used to perform all actions when JS is not available.
*
* @param array $params
* @return moodle_url
*/
abstract protected function get_action_url(array $params = []): moodle_url;
/**
* Provide a default implementation for guessing the base URL from the action URL.
*/
public function guess_base_url(): void {
$this->define_baseurl($this->get_action_url());
}
/**
* Get the web service method used to toggle state.
*
* @return null|string
*/
protected function get_toggle_service(): ?string {
return 'core_admin_set_plugin_state';
}
/**
* Get the web service method used to order plugins.
*
* @return null|string
*/
protected function get_sortorder_service(): ?string {
return 'core_admin_set_plugin_order';
}
/**
* Get the ID of the table.
*
* @return string
*/
protected function get_table_id(): string {
return 'plugin_management_table-' . $this->get_plugintype();
}
/**
* Get a list of the column titles
* @return string[]
*/
protected function get_column_list(): array {
$columns = [
'name' => get_string('name', 'core'),
'version' => get_string('version', 'core'),
];
if ($this->supports_disabling()) {
$columns['enabled'] = get_string('pluginenabled', 'core_plugin');
}
if ($this->supports_ordering()) {
$columns['order'] = get_string('order', 'core');
}
$columns['settings'] = get_string('settings', 'core');
$columns['uninstall'] = get_string('uninstallplugin', 'core_admin');
return $columns;
}
protected function get_columns_with_help(): array {
return [];
}
/**
* Get the context for this table.
*
* @return context_system
*/
public function get_context(): context_system {
return context_system::instance();
}
/**
* Get the table content.
*/
public function get_content(): string {
ob_start();
$this->out();
$content = ob_get_contents();
ob_end_clean();
return $content;
}
/**
* Print the table.
*/
public function out(): void {
$plugintype = $this->get_plugintype();
foreach ($this->plugins as $plugininfo) {
$plugin = "{$plugintype}_{$plugininfo->name}";
$rowdata = (object) [
'plugin' => $plugin,
'plugininfo' => $plugininfo,
'name' => $plugininfo->displayname,
'version' => $plugininfo->versiondb,
];
$this->add_data_keyed(
$this->format_row($rowdata),
$this->get_row_class($rowdata)
);
}
$this->finish_output(false);
}
/**
* This table is not downloadable.
* @param bool $downloadable
* @return bool
*/
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
public function is_downloadable($downloadable = null): bool {
return false;
}
/**
* Show the name column content.
*
* @param stdClass $row
* @return string
*/
protected function col_name(stdClass $row): string {
$status = $row->plugininfo->get_status();
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
return html_writer::span(
get_string('pluginmissingfromdisk', 'core', $row->plugininfo),
'notifyproblem'
);
}
if ($row->plugininfo->is_installed_and_upgraded()) {
return $row->plugininfo->displayname;
}
return html_writer::span(
$row->plugininfo->displayname,
'notifyproblem'
);
}
/**
* Show the enable/disable column content.
*
* @param stdClass $row
* @return string
*/
protected function col_enabled(stdClass $row): string {
global $OUTPUT;
$enabled = $row->plugininfo->is_enabled();
$params = [
'sesskey' => sesskey(),
'plugin' => $row->plugininfo->name,
'action' => $enabled ? 'disable' : 'enable',
];
if ($enabled) {
$icon = $OUTPUT->pix_icon('t/hide', get_string('disableplugin', 'core_admin', $row->plugininfo->displayname));
} else {
$icon = $OUTPUT->pix_icon('t/show', get_string('enableplugin', 'core_admin', $row->plugininfo->displayname));
}
return html_writer::link(
$this->get_action_url($params),
$icon,
[
'data-toggle-method' => $this->get_toggle_service(),
'data-action' => 'togglestate',
'data-plugin' => $row->plugin,
'data-state' => $enabled ? 1 : 0,
],
);
}
protected function col_order(stdClass $row): string {
global $OUTPUT;
if (!$this->supports_ordering()) {
return '';
}
if (!$row->plugininfo->is_enabled()) {
return '';
}
if ($this->enabledplugincount <= 1) {
// There is only one row.
return '';
}
$hasup = true;
$hasdown = true;
if (empty($this->currentrow)) {
// This is the top row.
$hasup = false;
}
if ($this->currentrow === ($this->enabledplugincount - 1)) {
// This is the last row.
$hasdown = false;
}
if ($this->supports_ordering()) {
$dataattributes = [
'data-method' => $this->get_sortorder_service(),
'data-action' => 'move',
'data-plugin' => $row->plugin,
];
} else {
$dataattributes = [];
}
if ($hasup) {
$upicon = html_writer::link(
$this->get_action_url([
'sesskey' => sesskey(),
'action' => 'up',
'plugin' => $row->plugininfo->name,
]),
$OUTPUT->pix_icon('t/up', get_string('moveup')),
array_merge($dataattributes, ['data-direction' => 'up']),
);
} else {
$upicon = $OUTPUT->spacer();
}
if ($hasdown) {
$downicon = html_writer::link(
$this->get_action_url([
'sesskey' => sesskey(),
'action' => 'down',
'plugin' => $row->plugininfo->name,
]),
$OUTPUT->pix_icon('t/down', get_string('movedown')),
array_merge($dataattributes, ['data-direction' => 'down']),
);
} else {
$downicon = $OUTPUT->spacer();
}
// For now just add the up/down icons.
return html_writer::span($upicon . $downicon);
}
/**
* Show the settings column content.
*
* @param stdClass $row
* @return string
*/
protected function col_settings(stdClass $row): string {
if ($settingsurl = $row->plugininfo->get_settings_url()) {
return html_writer::link($settingsurl, get_string('settings'));
}
return '';
}
/**
* Show the Uninstall column content.
*
* @param stdClass $row
* @return string
*/
protected function col_uninstall(stdClass $row): string {
$status = $row->plugininfo->get_status();
if ($status === core_plugin_manager::PLUGIN_STATUS_NEW) {
return get_string('status_new', 'core_plugin');
}
if ($status === core_plugin_manager::PLUGIN_STATUS_MISSING) {
$uninstall = get_string('status_missing', 'core_plugin') . '<br/>';
} else {
$uninstall = '';
}
if ($uninstallurl = $this->pluginmanager->get_uninstall_url($row->plugin)) {
$uninstall .= html_writer::link($uninstallurl, get_string('uninstallplugin', 'core_admin'));
}
return $uninstall;
}
/**
* Get the JS module used to manage this table.
*
* This should be a class which extends 'core_admin/plugin_management_table'.
*
* @return string
*/
protected function get_table_js_module(): string {
return 'core_admin/plugin_management_table';
}
/**
* Add JS specific to this implementation.
*
* @return string
*/
protected function get_dynamic_table_html_end(): string {
global $PAGE;
$PAGE->requires->js_call_amd($this->get_table_js_module(), 'init');
return parent::get_dynamic_table_html_end();
}
/**
* Get any class to add to the row.
*
* @param mixed $row
* @return string
*/
protected function get_row_class($row): string {
$plugininfo = $row->plugininfo;
if ($plugininfo->get_status() === core_plugin_manager::PLUGIN_STATUS_MISSING) {
return '';
}
if (!$plugininfo->is_enabled()) {
return 'dimmed_text';
}
return '';
}
public static function get_filterset_class(): string {
return self::class . '_filterset';
}
/**
* Whether this plugin type supports the disabling of plugins.
*
* @return bool
*/
protected function supports_disabling(): bool {
return $this->plugininfoclass::plugintype_supports_disabling();
}
/**
* Whether this table should show ordering fields.
*
* @return bool
*/
protected function supports_ordering(): bool {
return $this->plugininfoclass::plugintype_supports_ordering();
}
}
@@ -1,27 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
/**
* This file contains the dynamic interface.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class plugin_management_table_filterset extends \core_table\local\filter\filterset {
}
@@ -1,44 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace core_admin\table;
use moodle_url;
/**
* Admin tool settings.
*
* @package core_admin
* @copyright 2023 Andrew Lyons <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_plugin_management_table extends \core_admin\table\plugin_management_table {
protected function get_plugintype(): string {
return 'tool';
}
protected function get_column_list(): array {
$columns = parent::get_column_list();
unset($columns['settings']);
return $columns;
}
protected function get_action_url(array $params = []): moodle_url {
return new moodle_url('/admin/settings.php', array_merge(['section' => 'toolsmanagement'], $params));
}
}
-174
View File
@@ -1,174 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Task executor for adhoc tasks.
*
* @package core
* @subpackage cli
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once("{$CFG->libdir}/clilib.php");
list($options, $unrecognized) = cli_get_params(
[
'help' => false,
'showsql' => false,
'showdebugging' => false,
'execute' => false,
'keep-alive' => 0,
'ignorelimits' => false,
'force' => false,
'id' => null,
'classname' => null,
'taskslimit' => null,
'failed' => false,
], [
'h' => 'help',
'e' => 'execute',
'k' => 'keep-alive',
'i' => 'ignorelimits',
'f' => 'force',
'c' => 'classname',
'l' => 'taskslimit',
]
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$help = <<<EOT
Ad hoc cron tasks.
Options:
-h, --help Print out this help
--showsql Show sql queries before they are executed
--showdebugging Show developer level debugging information
-e, --execute Run all queued adhoc tasks
-k, --keep-alive=N Keep this script alive for N seconds and poll for new adhoc tasks
-i --ignorelimits Ignore task_adhoc_concurrency_limit and task_adhoc_max_runtime limits
-f, --force Run even if cron is disabled
--id Run (failed) task with id
-c, --classname Run tasks with a certain classname (FQN)
-l, --taskslimit=N Run at most N tasks
--failed Run only tasks that failed, ie those with a fail delay
Run all queued tasks:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --execute
Run all queued tasks of specific class:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --classname=\\\\core_course\\\\task\\\\course_delete_modules
Double backslash for the shell escape reasons.
Run a specific task:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --id=123456
Run a specific task with debugging:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --id=123456 --showsql --showdebugging
To profile a long running task:
\$sudo -u www-data /usr/bin/php admin/cli/adhoc_task.php --taskslimit=1 --classname='\\some\\class\\name' --ignorelimits
EOT;
if ($options['help']) {
echo $help;
exit(0);
}
if (CLI_MAINTENANCE) {
echo "CLI maintenance mode active, cron execution suspended.\n";
exit(1);
}
if (moodle_needs_upgrading()) {
echo "Moodle upgrade pending, cron execution suspended.\n";
exit(1);
}
if (!get_config('core', 'cron_enabled') && !$options['force']) {
mtrace('Cron is disabled. Use --force to override.');
exit(1);
}
// Common debugging options.
if ($options['showdebugging']) {
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql']) {
$DB->set_debug(true);
}
if (!empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if (!empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
}
// Process params.
core_php_time_limit::raise();
// Increase memory limit.
raise_memory_limit(MEMORY_EXTRA);
// Emulate normal session - we use admin account by default.
\core\cron::setup_user();
\core\local\cli\shutdown::script_supports_graceful_exit();
$humantimenow = date('r', time());
mtrace("Server Time: {$humantimenow}\n");
$classname = $options['classname'];
// Run a single adhoc task only, if requested.
if (!empty($options['id'])) {
$taskid = (int) $options['id'];
\core\cron::run_adhoc_task($taskid);
exit(0);
}
// Run all failed tasks.
if (!empty($options['failed'])) {
\core\cron::run_failed_adhoc_tasks($classname);
exit(0);
}
// Examine params and determine if we should run.
$execute = (bool) $options['execute'];
$keepalive = empty($options['keep-alive']) ? 0 : (int) $options['keep-alive'];
$taskslimit = empty($options['taskslimit']) ? null : (int) $options['taskslimit'];
$checklimits = empty($options['ignorelimits']);
if ($classname || $keepalive || $taskslimit) {
$execute = true;
}
// Output the help text if no criteria for running the adhoc tasks are given.
if (!$execute) {
echo $help;
exit(0);
}
\core\cron::run_adhoc_tasks(time(), $keepalive, $checklimits, null, $taskslimit, $classname);
-111
View File
@@ -1,111 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This hack is intended for clustered sites that do not want
* to use shared cachedir for component cache.
*
* This file needs to be called after any change in PHP files in dataroot,
* that is before upgrade and install.
*
* @package core
* @copyright 2013 Petr Skoda (skodak) {@link http://skodak.org}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
define('ABORT_AFTER_CONFIG', true); // We need just the values from config.php.
define('CACHE_DISABLE_ALL', true); // This prevents reading of existing caches.
define('IGNORE_COMPONENT_CACHE', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
// Now get cli options.
list($options, $unrecognized) = cli_get_params(
array(
'file' => false,
'rebuild' => false,
'print' => false,
'help' => false
),
array(
'h' => 'help'
)
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
}
if (!$options['rebuild'] and !$options['file'] and !$options['print']) {
$help =
"Create alternative component cache file
Options:
-h, --help Print out this help
--rebuild Rebuild \$CFG->alternative_component_cache file
--file=filepath Save component cache to file
--print Print component cache file content
Example:
\$ php admin/cli/rebuild_alternative_component_cache.php --rebuild
";
echo $help;
exit(0);
}
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
$content = core_component::get_cache_content();
if ($options['print']) {
echo $content;
exit(0);
}
if ($options['rebuild']) {
if (empty($CFG->alternative_component_cache)) {
fwrite(STDERR, 'config.php does not contain $CFG->alternative_component_cache setting');
fwrite(STDERR, "\n");
exit(2);
}
$target = $CFG->alternative_component_cache;
} else {
$target = $options['file'];
}
if (!$target) {
fwrite(STDERR, "Invalid target file $target");
fwrite(STDERR, "\n");
exit(1);
}
$bytes = file_put_contents($target, $content);
if (!$bytes) {
fwrite(STDERR, "Error writing to $target");
fwrite(STDERR, "\n");
exit(1);
}
// Success.
echo "File $target was updated\n";
exit(0);
+8 -6
View File
@@ -28,8 +28,9 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
require_once($CFG->libdir.'/cronlib.php');
// now get cli options
list($options, $unrecognized) = cli_get_params(array('help'=>false),
@@ -74,15 +75,16 @@ if (!empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if (!empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
$CFG->debug = DEBUG_DEVELOPER;
$CFG->debugdisplay = true;
}
$starttime = microtime();
// Emulate normal session.
\core\cron::setup_user();
/// emulate normal session
cron_setup_user();
// Start output log.
/// Start output log
$timenow = time();
mtrace("Server Time: ".date('r',$timenow)."\n\n");
@@ -95,4 +97,4 @@ backup_cron_automated_helper::run_automated_backup(backup_cron_automated_helper:
mtrace("Automated cron backups completed correctly");
$difftime = microtime_diff($starttime, microtime());
mtrace("Execution took ".$difftime." seconds");
mtrace("Execution took ".$difftime." seconds");
-119
View File
@@ -1,119 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script allows to do backup.
*
* @package core
* @subpackage cli
* @copyright 2013 Lancaster University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', 1);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php');
// Now get cli options.
list($options, $unrecognized) = cli_get_params(array(
'courseid' => false,
'courseshortname' => '',
'destination' => '',
'help' => false,
), array('h' => 'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] || !($options['courseid'] || $options['courseshortname'])) {
$help = <<<EOL
Perform backup of the given course.
Options:
--courseid=INTEGER Course ID for backup.
--courseshortname=STRING Course shortname for backup.
--destination=STRING Path where to store backup file. If not set the backup
will be stored within the course backup file area.
-h, --help Print out this help.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/backup.php --courseid=2 --destination=/moodle/backup/\n
EOL;
echo $help;
die;
}
$admin = get_admin();
if (!$admin) {
mtrace("Error: No admin account was found");
die;
}
// Do we need to store backup somewhere else?
$dir = rtrim($options['destination'], '/');
if (!empty($dir)) {
if (!file_exists($dir) || !is_dir($dir) || !is_writable($dir)) {
mtrace("Destination directory does not exists or not writable.");
die;
}
}
// Check that the course exists.
if ($options['courseid']) {
$course = $DB->get_record('course', array('id' => $options['courseid']), '*', MUST_EXIST);
} else if ($options['courseshortname']) {
$course = $DB->get_record('course', array('shortname' => $options['courseshortname']), '*', MUST_EXIST);
}
cli_heading('Performing backup...');
$bc = new backup_controller(backup::TYPE_1COURSE, $course->id, backup::FORMAT_MOODLE,
backup::INTERACTIVE_YES, backup::MODE_GENERAL, $admin->id);
// Set the default filename.
$format = $bc->get_format();
$type = $bc->get_type();
$id = $bc->get_id();
$users = $bc->get_plan()->get_setting('users')->get_value();
$anonymised = $bc->get_plan()->get_setting('anonymize')->get_value();
$filename = backup_plan_dbops::get_default_backup_filename($format, $type, $id, $users, $anonymised);
$bc->get_plan()->get_setting('filename')->set_value($filename);
// Execution.
$bc->finish_ui();
$bc->execute_plan();
$results = $bc->get_results();
$file = $results['backup_destination']; // May be empty if file already moved to target location.
// Do we need to store backup somewhere else?
if (!empty($dir)) {
if ($file) {
mtrace("Writing " . $dir.'/'.$filename);
if ($file->copy_content_to($dir.'/'.$filename)) {
$file->delete();
mtrace("Backup completed.");
} else {
mtrace("Destination directory does not exist or is not writable. Leaving the backup in the course backup file area.");
}
}
} else {
mtrace("Backup completed, the new file is listed in the backup area of the given course");
}
$bc->destroy();
exit(0);
-119
View File
@@ -1,119 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Build and store theme CSS.
*
* @package core
* @subpackage cli
* @copyright 2017 Ryan Wyllie <ryan@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once("$CFG->libdir/clilib.php");
require_once("$CFG->libdir/csslib.php");
require_once("$CFG->libdir/outputlib.php");
$longparams = [
'themes' => null,
'direction' => null,
'help' => false,
'verbose' => false
];
$shortmappings = [
't' => 'themes',
'd' => 'direction',
'h' => 'help',
'v' => 'verbose'
];
// Get CLI params.
list($options, $unrecognized) = cli_get_params($longparams, $shortmappings);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
echo
"Compile the CSS for one or more installed themes.
Existing CSS caches will replaced.
By default all themes will be recompiled unless otherwise specified.
Options:
-t, --themes A comma separated list of themes to be compiled
-d, --direction Only compile a single direction (either ltr or rtl)
-v, --verbose Print info comments to stdout
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/build_theme_css.php --themes=boost --direction=ltr
";
die;
}
if (empty($options['verbose'])) {
$trace = new null_progress_trace();
} else {
$trace = new text_progress_trace();
}
cli_heading('Build theme css');
// Determine which themes we need to build.
$themenames = [];
if (is_null($options['themes'])) {
$trace->output('No themes specified. Finding all installed themes.');
$themenames = array_keys(core_component::get_plugin_list('theme'));
} else {
if (is_string($options['themes'])) {
$themenames = explode(',', $options['themes']);
} else {
cli_error('--themes must be a comma separated list of theme names');
}
}
$trace->output('Checking that each theme is correctly installed...');
$themeconfigs = [];
foreach ($themenames as $themename) {
if (is_null(theme_get_config_file_path($themename))) {
cli_error("Unable to find theme config for {$themename}");
}
// Load the config for the theme.
$themeconfigs[] = theme_config::load($themename);
}
$directions = ['ltr', 'rtl'];
if (!is_null($options['direction'])) {
if (!in_array($options['direction'], $directions)) {
cli_error("--direction must be either ltr or rtl");
}
$directions = [$options['direction']];
}
$trace->output('Building CSS for themes: ' . implode(', ', $themenames));
theme_build_css_for_themes($themeconfigs, $directions);
exit(0);
-185
View File
@@ -1,185 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI script allowing to get and set config values.
*
* This is technically just a thin wrapper for {@link get_config()} and
* {@link set_config()} functions.
*
* @package core
* @subpackage cli
* @copyright 2017 David Mudrák <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
$usage = "Displays the current value of the given site setting. Allows to set it to the given value, too.
Usage:
# php cfg.php [--component=<componentname>] [--json] [--shell-arg]
# php cfg.php --name=<configname> [--component=<componentname>] [--shell-arg] [--no-eol]
# php cfg.php --name=<configname> [--component=<componentname>] --set=<value>
# php cfg.php --name=<configname> [--component=<componentname>] --unset
# php cfg.php [--help|-h]
Options:
-h --help Print this help.
--component=<frankenstyle> Name of the component the variable is part of. Defaults to core.
--name=<configname> Name of the configuration variable to get/set. If missing, print all
configuration variables of the given component.
--set=<value> Set the given variable to this value.
--unset Unset the given variable.
--shell-arg Escape output values so that they can be directly used as shell script arguments.
--json Encode output list of values using JSON notation.
--no-eol Do not include the trailing new line character when printing the value.
The list of all variables of the given component can be printed as
tab-separated list (default) or JSON object (--json). Particular values are
printed as raw text values, optionally escaped so that they can be directly
used as shell script arguments (--shell-arg). Single values are displayed with
trailing new line by default, unless explicitly disabled (--no-eol).
In the read mode, the script exits with success status 0 if the requested value
is found. If the requested variable is not set, the script exits with status 3.
When listing all variables of the component, the exit status is always 0 even
if no variables for the given component are found. When setting/unsetting a
value, the exit status is 0. When attempting to set/unset a value that has
already been hard-set in config.php, the script exits with error status 4. In
case of unexpected error, the script exits with error status 1.
Examples:
# php cfg.php
Prints tab-separated list of all core configuration variables and their values.
# php cfg.php --json
Prints list of all core configuration variables and their values as a JSON object.
# php cfg.php --name=release
Prints the given configuration variable - e.g. \$CFG->release in this case.
# php cfg.php --component=tool_recyclebin
# Prints tab-separated list of the plugin's configuration variables.
# export DATAROOT=\$(php cfg.php --name=dataroot --shell-arg --no-eol)
Stores the given configuration variable in the shell variable, escaped
so that it can be safely used as a shell argument.
# php cfg.php --name=theme --set=classic
Sets the given configuration variable to the given value.
# php cfg.php --name=noemailever --unset
Unsets the previously configured variable.
";
list($options, $unrecognised) = cli_get_params([
'help' => false,
'component' => null,
'name' => null,
'set' => null,
'unset' => false,
'shell-arg' => false,
'json' => false,
'no-eol' => false,
], [
'h' => 'help'
]);
if ($unrecognised) {
$unrecognised = implode(PHP_EOL.' ', $unrecognised);
cli_error(get_string('cliunknowoption', 'core_admin', $unrecognised));
}
if ($options['help']) {
cli_writeln($usage);
exit(2);
}
if ($options['unset'] || $options['set'] !== null) {
// Unset the variable or set it to the given value.
if (empty($options['name'])) {
cli_error('Missing configuration variable name', 2);
}
// Check that the variable is not hard-set in the main config.php already.
$component = $options['component'];
if (!empty($component)) {
$componentsettings = $CFG->forced_plugin_settings[$component] ?? [];
$settinginconfig = array_key_exists($options['name'], $componentsettings);
} else {
$settinginconfig = array_key_exists($options['name'], $CFG->config_php_settings);
}
if ($settinginconfig) {
cli_error('The configuration variable is hard-set in the config.php, unable to change.', 4);
}
$new = $options['set'];
$old = get_config($options['component'], $options['name']);
if ($new !== $old) {
set_config($options['name'], $options['set'], $options['component']);
add_to_config_log($options['name'], $old, $new, $options['component']);
}
exit(0);
}
if ($options['name'] === null) {
// List all variables provided by the component (defaults to core).
$got = get_config($options['component']);
if ($options['json']) {
cli_writeln(json_encode($got));
} else {
foreach ($got as $name => $value) {
if ($options['shell-arg']) {
$value = escapeshellarg($value);
}
cli_writeln($name."\t".$value);
}
}
exit(0);
} else {
// Display the value of a single variable.
$got = get_config($options['component'], $options['name']);
if ($got === false) {
cli_error('No such configuration variable found.', 3);
}
if ($options['shell-arg']) {
$got = escapeshellarg($got);
}
if ($options['json']) {
$got = json_encode($got);
}
if ($options['no-eol']) {
cli_write($got);
} else {
cli_writeln($got);
}
exit(0);
}
-76
View File
@@ -1,76 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Validate that the current db structure matches the install.xml files.
*
* @package core
* @copyright 2014 Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Petr Skoda <petr.skoda@totaralms.com>
*/
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir.'/clilib.php');
$help = "Validate database structure
Options:
-h, --help Print out this help.
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/check_database_schema.php
";
list($options, $unrecognized) = cli_get_params(
array(
'help' => false,
),
array(
'h' => 'help',
)
);
if ($options['help']) {
echo $help;
exit(0);
}
if (empty($CFG->version)) {
echo "Database is not yet installed.\n";
exit(2);
}
$dbmanager = $DB->get_manager();
$schema = $dbmanager->get_install_xml_schema();
if (!$errors = $dbmanager->check_database_schema($schema)) {
echo "Database structure is ok.\n";
exit(0);
}
foreach ($errors as $table => $items) {
cli_separator();
echo "$table\n";
foreach ($items as $item) {
echo " * $item\n";
}
}
cli_separator();
exit(1);
-171
View File
@@ -1,171 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI tool for system checks
*
* @package core
* @category check
* @copyright 2020 Brendan Heywood (brendan@catalyst-au.net)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir.'/clilib.php');
use core\check\result;
list($options, $unrecognized) = cli_get_params([
'help' => false,
'filter' => '',
'type' => 'status',
'verbose' => false,
], [
'h' => 'help',
'f' => 'filter',
'v' => 'verbose',
't' => 'type',
]);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$checks = \core\check\manager::get_checks($options['type']);
$types = join(', ', \core\check\manager::TYPES);
$help = "Run Moodle system checks
Options:
-h, --help Print out this help
-f, --filter Filter to a subset of checks
-t, --type Which set of checks? Defaults to 'status'
One of $types
-v, --verbose Show details of all checks, not just failed checks
Example:
sudo -u www-data php admin/cli/checks.php
sudo -u www-data php admin/cli/checks.php -v
sudo -u www-data php admin/cli/checks.php -v --filter=environment
";
if ($options['help']) {
echo $help;
die();
}
$filter = $options['filter'];
if ($filter) {
$checks = array_filter($checks, function($check, $key) use ($filter) {
$ref = $check->get_ref();
return (strpos($ref, $filter) !== false);
}, 1);
}
// These shell exit codes and labels align with the NRPE standard.
$exitcodes = [
result::NA => 0,
result::OK => 0,
result::INFO => 0,
result::UNKNOWN => 3,
result::WARNING => 1,
result::ERROR => 2,
result::CRITICAL => 2,
];
$exitlabel = [
result::NA => 'OK',
result::OK => 'OK',
result::INFO => 'OK',
result::UNKNOWN => 'UNKNOWN',
result::WARNING => 'WARNING',
result::ERROR => 'CRITICAL',
result::CRITICAL => 'CRITICAL',
];
$format = "% 10s| % -60s\n";
$spacer = "----------+--------------------------------------------------------------------\n";
$prefix = ' |';
$output = '';
$header = $exitlabel[result::OK] . ': ' . get_string('checksok', '', $options['type']) . "\n";
$exitcode = $exitcodes[result::OK];
foreach ($checks as $check) {
$ref = $check->get_ref();
$result = $check->get_result();
$status = $result->get_status();
$checkexitcode = $exitcodes[$status];
// Summary is treated as html.
$summary = $result->get_summary();
$summary = html_to_text($summary, 60, false);
if ($checkexitcode > $exitcode) {
$exitcode = $checkexitcode;
$header = $exitlabel[$status] . ': ' . $check->get_name() . " (" . $check->get_ref() . ")\n";
}
if (empty($messages[$status])) {
$messages[$status] = $result;
}
$len = strlen(get_string('status' . $status));
if ($options['verbose'] ||
$status == result::WARNING ||
$status == result::CRITICAL ||
$status == result::ERROR) {
$output .= sprintf(
$format,
$OUTPUT->check_result($result),
sprintf('%s (%s)', $check->get_name(), $ref)
);
$summary = str_replace("\n", "\n" . $prefix . ' ', $summary);
$output .= sprintf( $format, '', ' ' . $summary);
if ($options['verbose']) {
$actionlink = $check->get_action_link();
if ($actionlink) {
$output .= sprintf( $format, '', ' ' . $actionlink->url);
}
$output .= sprintf( $format, '', '');
}
}
}
// Print NRPE header.
print $header;
// Only show the table header if there is anything to show.
if ($output) {
print sprintf($format,
get_string('status'). ' ',
get_string('check')
) . $spacer;
print $output;
}
// NRPE shell exit code.
exit($exitcode);
+10 -135
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -29,32 +30,13 @@
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
require_once($CFG->libdir.'/cronlib.php');
// Now get cli option.
[$options, $unrecognized] = cli_get_params(
[
'help' => false,
'stop' => false,
'list' => false,
'force' => false,
'enable' => false,
'disable' => false,
'disable-wait' => false,
'keep-alive' => null,
],
[
'h' => 'help',
's' => 'stop',
'l' => 'list',
'f' => 'force',
'e' => 'enable',
'd' => 'disable',
'w' => 'disable-wait',
'k' => 'keep-alive',
]
);
// now get cli options
list($options, $unrecognized) = cli_get_params(array('help'=>false),
array('h'=>'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
@@ -63,19 +45,10 @@ if ($unrecognized) {
if ($options['help']) {
$help =
"Execute periodic cron actions.
"Execute periodic cron actions.
Options:
-h, --help Print out this help
-s, --stop Notify all other running cron processes to stop after the current task
-l, --list Show the list of currently running tasks and how long they have been running
-f, --force Execute task even if cron is disabled
-e, --enable Enable cron
-d, --disable Disable cron
-w, --disable-wait=600 Disable cron and wait until all tasks finished or fail after N seconds (optional param)
-k, --keep-alive=N Keep this script alive for N seconds and poll for new tasks
The default value can be set by administrators in:
Site administration > Server > Tasks > Task processing > Keep alive time
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/cron.php
@@ -85,102 +58,4 @@ Example:
die;
}
if ($options['stop']) {
// By clearing the caches this signals to other running processes
// to exit after finishing the current task.
\core\task\manager::clear_static_caches();
die;
}
if ($options['enable']) {
set_config('cron_enabled', 1);
mtrace('Cron has been enabled for the site.');
exit(0);
}
if ($options['disable']) {
set_config('cron_enabled', 0);
\core\task\manager::clear_static_caches();
mtrace('Cron has been disabled for the site.');
exit(0);
}
if ($options['list']) {
$tasks = \core\task\manager::get_running_tasks();
mtrace('The list of currently running tasks:');
$format = "%7s %-12s %-9s %-20s %-52s\n";
printf(
$format,
'PID',
'HOST',
'TYPE',
'TIME',
'CLASSNAME'
);
foreach ($tasks as $task) {
printf(
$format,
$task->pid,
substr($task->hostname, 0, 12),
$task->type,
format_time(time() - $task->timestarted),
substr($task->classname, 0, 52)
);
}
exit(0);
}
if ($wait = $options['disable-wait']) {
$started = time();
if (true === $wait) {
// Default waiting time.
$waitsec = 600;
} else {
$waitsec = $wait;
$wait = true;
}
set_config('cron_enabled', 0);
\core\task\manager::clear_static_caches();
mtrace('Cron has been disabled for the site.');
mtrace('Allocating ' . format_time($waitsec) . ' for the tasks to finish.');
$lastcount = 0;
while ($wait) {
$tasks = \core\task\manager::get_running_tasks();
if (count($tasks) == 0) {
mtrace('');
mtrace('All scheduled and adhoc tasks finished.');
exit(0);
}
if (time() - $started >= $waitsec) {
mtrace('');
mtrace('Wait time (' . format_time($waitsec) . ') elapsed, but ' . count($tasks) . ' task(s) still running.');
mtrace('Exiting with code 1.');
exit(1);
}
if (count($tasks) !== $lastcount) {
mtrace('');
mtrace(count($tasks) . " tasks currently running.", '');
$lastcount = count($tasks);
} else {
mtrace('.', '');
}
sleep(1);
}
}
if (!get_config('core', 'cron_enabled') && !$options['force']) {
mtrace('Cron is disabled. Use --force to override.');
exit(1);
}
\core\local\cli\shutdown::script_supports_graceful_exit();
$keepalive = $options['keep-alive'];
\core\cron::run_main_process($keepalive);
cron_run();
-65
View File
@@ -1,65 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI script to reset dashboards.
*
* @package core
* @subpackage cli
* @copyright 2021 Brendan Heywood (brendan@catalyst-au.net)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
require_once($CFG->dirroot.'/my/lib.php');
list($options, $unrecognized) = cli_get_params([
'help' => false,
'execute' => false,
], [
'h' => 'help',
'e' => 'execute',
]);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
}
if (!$options['execute']) {
$help = <<<EOF
Resets Moodle dashboards for all users
Options:
-h, --help Print out this help
-e, --execute Actually run the reset
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/dashboard_reset.php -e
EOF;
echo $help;
exit(0);
}
$progressbar = new progress_bar();
$progressbar->create();
my_reset_page_for_all_users(MY_PAGE_PRIVATE, 'my-index', $progressbar);
-123
View File
@@ -1,123 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI script to delete a course.
*
* @package core
* @subpackage cli
* @author Mikhail Golenkov <mikhailgolenkov@catalyst-au.net>
* @copyright 2022 Catalyst IT
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
list($options, $unrecognized) = cli_get_params(
[
'courseid' => false,
'help' => false,
'showsql' => false,
'showdebugging' => false,
'disablerecyclebin' => false,
'non-interactive' => false,
], [
'c' => 'courseid',
'h' => 'help',
]
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] || empty($options['courseid'])) {
$help = <<<EOT
CLI script to delete a course.
Options:
-h, --help Print out this help
--showsql Show sql queries before they are executed
--showdebugging Show developer level debugging information
--disablerecyclebin Skip backing up the course
--non-interactive No interactive questions or confirmations
-c, --courseid Course id to be deleted
Example:
\$sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=123456
\$sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=123456 --showdebugging
\$sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=123456 --disablerecyclebin
EOT;
echo $help;
die;
}
$interactive = empty($options['non-interactive']);
if ($options['showdebugging']) {
mtrace('Enabling debugging...');
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql']) {
mtrace('Enabling SQL debugging...');
$DB->set_debug(true);
}
if (CLI_MAINTENANCE) {
cli_error('CLI maintenance mode active, CLI execution suspended');
}
if (moodle_needs_upgrading()) {
cli_error('Moodle upgrade pending, CLI execution suspended');
}
$course = $DB->get_record('course', array('id' => $options['courseid']));
if (empty($course)) {
cli_error('Course not found');
}
mtrace('Deleting course id ' . $course->id);
mtrace('Course name: ' . $course->fullname);
mtrace('Short name: ' . $course->shortname);
if ($interactive) {
mtrace('');
$input = cli_input('Are you sure you wish to delete this course? (y/N)', 'N', ['y', 'Y', 'n', 'N']);
if (strtolower($input) != 'y') {
exit(0);
}
}
if ($options['disablerecyclebin']) {
mtrace('Disabling recycle bin...');
$overrideconfig = ['tool_recyclebin' => ['coursebinenable' => false, 'categorybinenable' => false]];
$CFG->forced_plugin_settings = array_merge($CFG->forced_plugin_settings, $overrideconfig);
}
core_php_time_limit::raise();
delete_course($course);
mtrace('Updating course count in categories...');
fix_course_sortorder();
mtrace('Done!');
-209
View File
@@ -1,209 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script allows you to view and change the emailstop flag of any user.
*
* @package core
* @subpackage cli
* @copyright 2023 Stephan Robotta (stephan.robotta@bfh.ch)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
// Define the input options.
$longparams = [
'email' => '',
'help' => false,
'id' => '',
'quiet' => false,
'stop' => '',
'username' => '',
];
$shortparams = [
'e' => 'email',
'h' => 'help',
'i' => 'id',
'q' => 'quiet',
's' => 'stop',
'u' => 'username',
];
// Define exit codes.
$exitsuccess = 0;
$exitunknownoption = 1;
$exitmissinguserarg = 2;
$exittoomanyuserarg = 3;
$exitnosearchargs = 4;
$exitnousersfound = 5;
$exitinvalidstopflag = 6;
$exiterrordb = 7;
// Now get cli options that are set by the caller.
list($options, $unrecognized) = cli_get_params($longparams, $shortparams);
$verbose = empty($options['quiet']);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
if ($verbose) {
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), $exitunknownoption);
}
exit($exitunknownoption);
}
if ($options['help']) {
$help =
"Set/unset or show status of emailstop flag for a user, identified by username or email.
There are no security checks here because anybody who is able to
execute this file may execute any PHP too.
Options:
-h, --help Print out this help
-e, --email=email Specify user by email, separate many users by comma
-i, --id=id Specify user by id, separate many users by comma
-q, --quiet No output to stdout
-s, --stop=0|1|off|on Set new value for emailstop flag
-u, --username=username Specify user by username, separate many users by comma
Example:
\$sudo -u www-data /usr/bin/php admin/cli/emailstop.php --email=student1@example.com --stop=1
\$sudo -u www-data /usr/bin/php admin/cli/emailstop.php --email=student1@example.com,student2@example.com
\$sudo -u www-data /usr/bin/php admin/cli/emailstop.php --u=student1,student2 -s=on
";
echo $help;
exit($exitsuccess);
}
$cntempty = 0;
$cntfilled = 0;
$searchargs = [];
// Try to find out which option is used to fetch the users from. Also do sanitize etc.
foreach (['email', 'username', 'id'] as $option) {
if (empty($options[$option])) {
$cntempty++;
} else {
$cntfilled++;
$argname = $option;
// The search args must be: split by the comma, trimmed, and empty elements filtered out.
$searchargs = array_flip(array_filter(
array_map(
function ($item) {
return trim($item);
},
explode(',', $options[$option])
),
function ($item) {
return $item !== '';
}
));
}
}
if ($cntempty === 3) {
if ($verbose) {
cli_error('One of username, email, or id must be set.', $exitmissinguserarg);
}
exit($exitmissinguserarg);
}
if ($cntfilled > 1) {
if ($verbose) {
cli_error('Only one of email, username, or id can be set to identify a user.', $exittoomanyuserarg);
}
exit($exittoomanyuserarg);
}
if (empty($searchargs)) {
if ($verbose) {
cli_error('No values are provided for users.', $exitnosearchargs);
}
exit($exitnosearchargs);
}
try {
$users = $DB->get_records_list('user', $argname, array_keys($searchargs));
} catch (Exception $e) {
if ($verbose) {
cli_error("Could not fetch data from db by {$argname}: '{$options[$argname]}'.", $exiterrordb);
}
exit($exiterrordb);
}
if (empty($users)) {
if ($verbose) {
cli_error("Can not find any user by {$argname}: '{$options[$argname]}'.", $exitnousersfound);
}
exit($exitnousersfound);
}
// No stop flag set, then just print the user and the current emailstop flag state.
if ($options['stop'] === '') {
foreach ($users as $user) {
if ($verbose) {
echo 'user=' . $user->{$argname} . ' - emailstop=' . (int)$user->emailstop . PHP_EOL;
unset($searchargs[$user->{$argname}]);
}
}
if ($verbose) {
foreach (array_keys($searchargs) as $arg) {
echo 'user=' . $arg . ' - not found' . PHP_EOL;
}
}
exit($exitsuccess);
}
// Allowed values for the stop flag enabled are 1 and on, for disabled are 0 and off.
$validvalues = ['0', '1', 'off', 'on'];
$stopflag = strtolower($options['stop']);
if (!in_array($stopflag, $validvalues)) {
if ($verbose) {
cli_error('Value for the emailstop flag must be one of: ' . implode(', ', $validvalues) . '.', $exitinvalidstopflag);
}
exit($exitinvalidstopflag);
}
foreach ($validvalues as $value) {
if ($value === $stopflag) {
$stopflag = ($value === '1' || $value === 'on') ? 1 : 0;
break;
}
}
// Update each user with the stop flag to be set if it is necessary.
foreach ($users as $user) {
$line = 'Update user ' . $user->{$argname} . ($argname !== 'id' ? ' (' . $user->id . ')' : '') . ' - ';
if ((int)$user->emailstop !== $stopflag) {
$DB->set_field('user', 'emailstop', $stopflag, ['id' => $user->id]);
$line .= 'ok';
} else {
$line .= 'already done';
}
if ($verbose) {
echo $line . PHP_EOL;
unset($searchargs[$user->{$argname}]);
}
}
if ($verbose) {
foreach (array_keys($searchargs) as $arg) {
echo 'user=' . $arg . ' - not found' . PHP_EOL;
}
}
exit($exitsuccess);
-125
View File
@@ -1,125 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script fixed incorrectly deleted users.
*
* @package core
* @subpackage cli
* @copyright 2013 Marina Glancy
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
// Get cli options.
list($options, $unrecognized) = cli_get_params(
array(
'courses' => false,
'fix' => false,
'help' => false
),
array(
'h' => 'help',
'c' => 'courses',
'f' => 'fix'
)
);
if ($options['help'] || empty($options['courses'])) {
$help =
"Checks and fixes that course modules and sections reference each other correctly.
Compares DB fields course_sections.sequence and course_modules.section
checking that:
- course_sections.sequence contains each module id not more than once in the course
- for each moduleid from course_sections.sequence the field course_modules.section
refers to the same section id (this means course_sections.sequence is more
important if they are different)
- each module in the course is present in one of course_sections.sequence
- section sequences do not contain non-existing course modules
If there are any mismatches, the message is displayed. If --fix is specified,
the records in DB are corrected.
This script may run for a long time on big systems if called for all courses.
Avoid executing the script when another user may simultaneously edit any of the
courses being checked (recommended to run in mainenance mode).
Options:
-c, --courses List courses that need to be checked (comma-separated
values or * for all). Required
-f, --fix Fix the mismatches in DB. If not specified check only and
report problems to STDERR
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/fix_course_sequence.php --courses=*
\$sudo -u www-data /usr/bin/php admin/cli/fix_course_sequence.php --courses=2,3,4 --fix
";
echo $help;
die;
}
$courseslist = preg_split('/\s*,\s*/', $options['courses'], -1, PREG_SPLIT_NO_EMPTY);
if (in_array('*', $courseslist)) {
$where = '';
$params = array();
} else {
list($sql, $params) = $DB->get_in_or_equal($courseslist, SQL_PARAMS_NAMED, 'id');
$where = 'WHERE id '. $sql;
}
$coursescount = $DB->get_field_sql('SELECT count(id) FROM {course} '. $where, $params);
if (!$coursescount) {
cli_error('No courses found');
}
echo "Checking $coursescount courses...\n\n";
require_once($CFG->dirroot. '/course/lib.php');
$problems = array();
$courses = $DB->get_fieldset_sql('SELECT id FROM {course} '. $where, $params);
foreach ($courses as $courseid) {
$errors = course_integrity_check($courseid, null, null, true, empty($options['fix']));
if ($errors) {
if (!empty($options['fix'])) {
// Reset the course cache to make sure cache is recalculated next time the course is viewed.
rebuild_course_cache($courseid, true);
}
foreach ($errors as $error) {
cli_problem($error);
}
$problems[] = $courseid;
} else {
echo "Course [$courseid] is OK\n";
}
}
if (!count($problems)) {
echo "\n...All courses are OK\n";
} else {
if (!empty($options['fix'])) {
echo "\n...Found and fixed ".count($problems)." courses with problems". "\n";
} else {
echo "\n...Found ".count($problems)." courses with problems. To fix run:\n";
echo "\$sudo -u www-data /usr/bin/php admin/cli/fix_course_sequence.php --courses=".join(',', $problems)." --fix". "\n";
}
}
-92
View File
@@ -1,92 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script fixed incorrectly deleted users.
*
* @package core
* @subpackage cli
* @copyright 2013 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
// Now get cli options.
list($options, $unrecognized) = cli_get_params(array('help'=>false),
array('h'=>'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
$help =
"Fix incorrectly deleted users.
This scripts detects users that are marked as deleted instead
of calling delete_user().
Deleted users do not have original username, idnumber or email,
we must also delete all roles, enrolments, group memberships, etc.
Please note this script does not delete any public information
such as forum posts.
Options:
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/fix_deleted_users.php
";
echo $help;
die;
}
cli_heading('Looking for sloppy user deletes');
// Look for sloppy deleted users where somebody only flipped the deleted flag.
$sql = "SELECT *
FROM {user}
WHERE deleted = 1 AND email LIKE '%@%' AND username NOT LIKE '%@%'";
$rs = $DB->get_recordset_sql($sql);
foreach ($rs as $user) {
echo "Redeleting user $user->id: $user->username ($user->email)\n";
delete_user($user);
}
$rs->close();
cli_heading('Deleting all leftovers');
$DB->set_field('user', 'idnumber', '', array('deleted'=>1));
$DB->delete_records_select('role_assignments', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('cohort_members', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('groups_members', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_enrolments', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_preferences', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_info_data', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('user_lastaccess', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('external_tokens', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
$DB->delete_records_select('external_services_users', "userid IN (SELECT id FROM {user} WHERE deleted = 1)");
exit(0);
-138
View File
@@ -1,138 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Fix orphaned calendar events that were broken by MDL-67494.
*
* This script will look for all the calendar events which userids
* where broken by a wrong upgrade step, affecting to Moodle 3.9.5
* and up.
*
* It performs checks to both:
* a) Detect if the site was affected (ran the wrong upgrade step).
* b) Look for orphaned calendar events, categorising them as:
* - standard: site / category / course / group / user events
* - subscription: events created via subscriptions.
* - action: normal action events, created to show common important dates.
* - override: user and group override events, particular, that some activities support.
* - custom: other events, not being any of the above, common or particular.
* By specifying it (--fix) try to recover as many broken events (missing userid) as
* possible. Standard, subscription, action, override events in core are fully supported but
* override or custom events should be fixed by each plugin as far as there isn't any standard
* API (plugin-wise) to launch a rebuild of the calendar events.
*
* @package core
* @copyright 2021 onwards Simey Lameze <simey@moodle.com>
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir . "/clilib.php");
require_once($CFG->libdir . '/db/upgradelib.php');
// Supported options.
$long = ['fix' => false, 'help' => false];
$short = ['f' => 'fix', 'h' => 'help'];
// CLI options.
[$options, $unrecognized] = cli_get_params($long, $short);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
$help = <<<EOT
Fix orphaned calendar events.
This script detects calendar events that have had their
userid lost. By default it will perform various checks
and report them, showing the site status in an easy way.
Also, optionally (--fix), it wil try to recover as many
lost userids as possible from different sources. Note that
this script aims to process well-know events in core,
leaving custom events in 3rd part plugins mostly unmodified
because there isn't any consistent way to regenerate them.
For more details: https://tracker.moodle.org/browse/MDL-71156
Options:
-h, --help Print out this help.
-f, --fix Fix the orphaned calendar events in the DB.
If not specified only check and report problems to STDERR.
Usage:
- Only report: \$ sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_calendar_events.php
- Report and fix: \$ sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_calendar_events.php -f
EOT;
cli_writeln($help);
die;
}
// Check various usual pre-requisites.
if (empty($CFG->version)) {
cli_error('Database is not yet installed.');
}
$admin = get_admin();
if (!$admin) {
cli_error('Error: No admin account was found.');
}
if (moodle_needs_upgrading()) {
cli_error('Moodle upgrade pending, script execution suspended.');
}
// Do everything as admin by default.
\core\session\manager::set_user($admin);
// Report current site status.
cli_heading('Checking the site status');
$needsfix = upgrade_calendar_site_status();
// Report current calendar events status.
cli_heading('Checking the calendar events status');
$info = upgrade_calendar_events_status();
$hasbadevents = $info['total']->bad > 0 || $info['total']->bad != $info['other']->bad;
$needsfix = $needsfix || $hasbadevents;
// If, selected, fix as many calendar events as possible.
if ($options['fix']) {
// If the report has told us that the fix was not needed... ask for confirmation!
if (!$needsfix) {
cli_writeln("This site DOES NOT NEED to run the calendar events fix.");
$input = cli_input('Are you completely sure that you want to run the fix? (y/N)', 'N', ['y', 'Y', 'n', 'N']);
if (strtolower($input) != 'y') {
exit(0);
}
cli_writeln("");
}
cli_heading('Fixing as many as possible calendar events');
upgrade_calendar_events_fix_remaining($info);
// Report current (after fix) calendar events status.
cli_heading('Checking the calendar events status (after fix)');
upgrade_calendar_events_status();
} else if ($needsfix) {
// Fix option was not provided but problem events have been found. Notify the user and provide info how to fix these events.
cli_writeln("This site NEEDS to run the calendar events fix!");
cli_writeln("To fix the calendar events, re-run this script with the --fix option.");
}
@@ -1,103 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script fixes orphaned question categories.
*
* Orphaned question categories have had their associated context deleted
* but the category itself remains in the database with an invalid context.
*
* @package core
* @subpackage cli
* @copyright 2013 Tyler Bannister (tyler.bannister@remote-learner.net)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
require_once($CFG->libdir.'/questionlib.php');
$long = array('fix' => false, 'help' => false);
$short = array('f' => 'fix', 'h' => 'help');
// Now get cli options.
list($options, $unrecognized) = cli_get_params($long, $short);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help']) {
$help =
"Fix orphaned question categories.
This scripts detects question categories that have had their
context deleted, thus severing them from their original purpose.
This script will find the orphaned categories and delete the unused
questions in each category found. Used questions will not be
deleted, instead they will be moved to a rescue question category.
Options:
-h, --help Print out this help
-f, --fix Fix the orphaned question categories in the DB.
If not specified only check and report problems to STDERR.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_question_categories.php
\$sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_question_categories.php -f
";
echo $help;
die;
}
cli_heading('Checking for orphaned categories');
$sql = 'SELECT qc.id, qc.contextid, qc.name
FROM {question_categories} qc
LEFT JOIN {context} c ON qc.contextid = c.id
WHERE c.id IS NULL';
$categories = $DB->get_recordset_sql($sql);
$i = 0;
foreach ($categories as $category) {
$i += 1;
echo "Found orphaned category: {$category->name}\n";
if (!empty($options['fix'])) {
echo "Cleaning...";
// One transaction per category.
$transaction = $DB->start_delegated_transaction();
question_category_delete_safe($category);
$transaction->allow_commit();
echo " Done!\n";
}
}
if (($i > 0) && !empty($options['fix'])) {
echo "Found and removed {$i} orphaned question categories\n";
} else if ($i > 0) {
echo "Found {$i} orphaned question categories. To fix, run:\n";
echo "\$sudo -u www-data /usr/bin/php admin/cli/fix_orphaned_question_categories.php --fix\n";
} else {
echo "No orphaned question categories found.\n";
}
$categories->close();
-79
View File
@@ -1,79 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Generates a secure key for the current server (presuming it does not already exist).
*
* @package core_admin
* @copyright 2020 The Open University
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
use \core\encryption;
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
// Get cli options.
[$options, $unrecognized] = cli_get_params(
['help' => false, 'method' => null],
['h' => 'help']);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
// TODO: MDL-71421 - Remove the openssl alternative once sodium becomes a requirement in Moodle 4.2.
if ($options['help']) {
echo "Generate secure key
This script manually creates a secure key within the secret data root folder (configured in
config.php as \$CFG->secretdataroot). You must run it using an account with access to write
to that folder.
In normal use Moodle automatically creates the key; this script is intended when setting up
a new Moodle system, for cases where the secure folder is not on shared storage and the key
may be manually installed on multiple servers.
Options:
-h, --help Print out this help
--method <method> Generate key for specified encryption method instead of default.
* sodium
* openssl-aes-256-ctr
Example:
php admin/cli/generate_key.php
";
exit;
}
$method = $options['method'];
if (encryption::key_exists($method)) {
echo 'Key already exists: ' . encryption::get_key_file($method) . "\n";
exit;
}
// Creates key with default permissions (no chmod).
echo "Generating key...\n";
encryption::create_key($method, false);
echo "\nKey created: " . encryption::get_key_file($method) . "\n\n";
echo "If the key folder is not shared storage, then key files should be copied to all servers.\n";
+175 -354
View File
@@ -36,12 +36,6 @@ if (isset($_SERVER['REMOTE_ADDR'])) {
exit(1);
}
// Force OPcache reset if used, we do not want any stale caches
// when preparing test environment.
if (function_exists('opcache_reset')) {
opcache_reset();
}
$help =
"Command line Moodle installer, creates config.php and initializes database.
Please note you must execute this script with the same uid as apache
@@ -64,26 +58,19 @@ Options:
--dbname=NAME Database name. Default is moodle
--dbuser=USERNAME Database user. Default is root
--dbpass=PASSWORD Database password. Default is blank
--dbport=NUMBER Use database port.
--dbsocket=PATH Use database socket, 1 means default. Available for some databases only.
--dbsocket Use database sockets. Available for some databases only.
--prefix=STRING Table prefix for above database tables. Default is mdl_
--fullname=STRING The fullname of the site
--shortname=STRING The shortname of the site
--summary=STRING The summary to be displayed on the front page
--adminuser=USERNAME Username for the moodle admin account. Default is admin
--adminpass=PASSWORD Password for the moodle admin account,
required in non-interactive mode.
--adminemail=STRING Email address for the moodle admin account.
--sitepreset=STRING Admin site preset to be applied during the installation process.
--supportemail=STRING Email address for support and help.
--upgradekey=STRING The upgrade key to be set in the config.php, leave empty to not set it.
--non-interactive No interactive questions, installation fails if any
problem encountered.
--agree-license Indicates agreement with software license,
required in non-interactive mode.
--allow-unstable Install even if the version is not marked as stable yet,
required in non-interactive mode.
--skip-database Stop the installation before installing the database.
-h, --help Print out this help
Example:
@@ -92,7 +79,7 @@ Example:
// distro specific customisation
$distrolibfile = __DIR__.'/../../install/distrolib.php';
$distrolibfile = dirname(dirname(dirname(__FILE__))).'/install/distrolib.php';
$distro = null;
if (file_exists($distrolibfile)) {
require_once($distrolibfile);
@@ -102,7 +89,7 @@ if (file_exists($distrolibfile)) {
}
// Nothing to do if config.php exists
$configfile = __DIR__.'/../../config.php';
$configfile = dirname(dirname(dirname(__FILE__))).'/config.php';
if (file_exists($configfile)) {
require($configfile);
require_once($CFG->libdir.'/clilib.php');
@@ -126,11 +113,10 @@ $olddir = getcwd();
chdir(dirname($_SERVER['argv'][0]));
// Servers should define a default timezone in php.ini, but if they don't then make sure something is defined.
if (!function_exists('date_default_timezone_set') or !function_exists('date_default_timezone_get')) {
fwrite(STDERR, "Timezone functions are not available.\n");
exit(1);
// This is a quick hack. Ideally we should ask the admin for a value. See MDL-22625 for more on this.
if (function_exists('date_default_timezone_set') and function_exists('date_default_timezone_get')) {
@date_default_timezone_set(@date_default_timezone_get());
}
date_default_timezone_set(@date_default_timezone_get());
// make sure PHP errors are displayed - helps with diagnosing of problems
@error_reporting(E_ALL);
@@ -141,87 +127,53 @@ date_default_timezone_set(@date_default_timezone_get());
/** Used by library scripts to check they are being called by Moodle */
define('MOODLE_INTERNAL', true);
// Disables all caching.
define('CACHE_DISABLE_ALL', true);
define('PHPUNIT_TEST', false);
define('IGNORE_COMPONENT_CACHE', true);
// Check that PHP is of a sufficient version as soon as possible.
require_once(__DIR__.'/../../lib/phpminimumversionlib.php');
moodle_require_minimum_php_version();
// Check that PHP is of a sufficient version
if (version_compare(phpversion(), "5.3.2") < 0) {
$phpversion = phpversion();
// do NOT localise - lang strings would not work here and we CAN NOT move it after installib
fwrite(STDERR, "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).\n");
fwrite(STDERR, "Please upgrade your server software or install older Moodle version.\n");
exit(1);
}
// set up configuration
global $CFG;
$CFG = new stdClass();
$CFG->lang = 'en';
$CFG->dirroot = dirname(dirname(__DIR__));
$CFG->dirroot = dirname(dirname(dirname(__FILE__)));
$CFG->libdir = "$CFG->dirroot/lib";
$CFG->wwwroot = "http://localhost";
$CFG->httpswwwroot = $CFG->wwwroot;
$CFG->docroot = 'http://docs.moodle.org';
$CFG->running_installer = true;
$CFG->early_install_lang = true;
$CFG->ostype = (stristr(PHP_OS, 'win') && !stristr(PHP_OS, 'darwin')) ? 'WINDOWS' : 'UNIX';
$CFG->dboptions = array();
$CFG->debug = (E_ALL | E_STRICT);
$CFG->debugdisplay = true;
$CFG->debugdeveloper = true;
$parts = explode('/', str_replace('\\', '/', dirname(__DIR__)));
$parts = explode('/', str_replace('\\', '/', dirname(dirname(__FILE__))));
$CFG->admin = array_pop($parts);
//point pear include path to moodles lib/pear so that includes and requires will search there for files before anywhere else
//the problem is that we need specific version of quickforms and hacked excel files :-(
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
require_once($CFG->libdir.'/classes/component.php');
require_once($CFG->libdir.'/classes/text.php');
require_once($CFG->libdir.'/classes/string_manager.php');
require_once($CFG->libdir.'/classes/string_manager_install.php');
require_once($CFG->libdir.'/classes/string_manager_standard.php');
require_once($CFG->libdir.'/installlib.php');
require_once($CFG->libdir.'/clilib.php');
require_once($CFG->libdir.'/setuplib.php');
require_once($CFG->libdir.'/textlib.class.php');
require_once($CFG->libdir.'/weblib.php');
require_once($CFG->libdir.'/dmllib.php');
require_once($CFG->libdir.'/moodlelib.php');
require_once($CFG->libdir.'/deprecatedlib.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
require_once($CFG->dirroot.'/cache/lib.php');
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
// Required because the database checks below lead to session interaction which is going to lead us to requiring autoloaded classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
require($CFG->dirroot.'/version.php');
$CFG->target_release = $release;
\core\session\manager::init_empty_session();
global $SESSION;
global $USER;
global $COURSE;
$COURSE = new stdClass();
$COURSE->id = 1;
global $SITE;
$SITE = $COURSE;
define('SITEID', 1);
//Database types
$databases = array('mysqli' => moodle_database::get_driver_instance('mysqli', 'native'),
'auroramysql' => moodle_database::get_driver_instance('auroramysql', 'native'),
'mariadb'=> moodle_database::get_driver_instance('mariadb', 'native'),
'pgsql' => moodle_database::get_driver_instance('pgsql', 'native'),
'oci' => moodle_database::get_driver_instance('oci', 'native'),
'sqlsrv' => moodle_database::get_driver_instance('sqlsrv', 'native'), // MS SQL*Server PHP driver
'mssql' => moodle_database::get_driver_instance('mssql', 'native'), // FreeTDS driver
);
foreach ($databases as $type=>$database) {
if ($database->driver_installed() !== true) {
@@ -241,28 +193,21 @@ list($options, $unrecognized) = cli_get_params(
'chmod' => isset($distro->directorypermissions) ? sprintf('%04o',$distro->directorypermissions) : '2777', // let distros set dir permissions
'lang' => $CFG->lang,
'wwwroot' => '',
'dataroot' => empty($distro->dataroot) ? str_replace('\\', '/', dirname(dirname(dirname(__DIR__))).'/moodledata'): $distro->dataroot, // initialised later after including libs or by distro
'dataroot' => empty($distro->dataroot) ? str_replace('\\', '/', dirname(dirname(dirname(dirname(__FILE__)))).'/moodledata'): $distro->dataroot, // initialised later after including libs or by distro
'dbtype' => empty($distro->dbtype) ? $defaultdb : $distro->dbtype, // let distro skip dbtype selection
'dbhost' => empty($distro->dbhost) ? 'localhost' : $distro->dbhost, // let distros set dbhost
'dbname' => 'moodle',
'dbuser' => empty($distro->dbuser) ? 'root' : $distro->dbuser, // let distros set dbuser
'dbpass' => '',
'dbport' => '',
'dbsocket' => '',
'dbsocket' => false,
'prefix' => 'mdl_',
'fullname' => '',
'shortname' => '',
'summary' => '',
'adminuser' => 'admin',
'adminpass' => '',
'adminemail' => '',
'sitepreset' => '',
'supportemail' => '',
'upgradekey' => '',
'non-interactive' => false,
'agree-license' => false,
'allow-unstable' => false,
'skip-database' => false,
'help' => false
),
array(
@@ -271,21 +216,13 @@ list($options, $unrecognized) = cli_get_params(
);
$interactive = empty($options['non-interactive']);
$skipdatabase = $options['skip-database'];
// set up language
$lang = clean_param($options['lang'], PARAM_SAFEDIR);
$languages = get_string_manager()->get_list_of_translations();
if (array_key_exists($lang, $languages)) {
if (file_exists($CFG->dirroot.'/install/lang/'.$lang)) {
$CFG->lang = $lang;
}
// Set up site admin preset.
$sitepreset = clean_param($options['sitepreset'], PARAM_RAW);
if (!empty($sitepreset)) {
$CFG->setsitepresetduringinstall = $sitepreset;
}
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
@@ -297,41 +234,28 @@ if ($options['help']) {
}
//Print header
cli_logo();
echo PHP_EOL;
echo get_string('cliinstallheader', 'install', $CFG->target_release)."\n";
//Fist select language
if ($interactive) {
cli_separator();
$languages = get_string_manager()->get_list_of_translations();
// Do not put the langs into columns because it is not compatible with RTL.
$langlist = implode("\n", $languages);
$default = $CFG->lang;
cli_heading(get_string('chooselanguagehead', 'install'));
if (array_key_exists($default, $languages)) {
echo $default.' - '.$languages[$default]."\n";
}
if ($default !== 'en') {
echo 'en - English (en)'."\n";
}
echo '? - '.get_string('availablelangs', 'install')."\n";
cli_heading(get_string('availablelangs', 'install'));
echo $langlist."\n";
$prompt = get_string('clitypevaluedefault', 'admin', $CFG->lang);
$error = '';
do {
echo $error;
$input = cli_input($prompt, $default);
$input = clean_param($input, PARAM_SAFEDIR);
if ($input === '?') {
echo implode("\n", $languages)."\n";
$error = "\n";
if (!file_exists($CFG->dirroot.'/install/lang/'.$input)) {
$error = get_string('cliincorrectvalueretry', 'admin')."\n";
} else {
$input = clean_param($input, PARAM_SAFEDIR);
if (!array_key_exists($input, $languages)) {
$error = get_string('cliincorrectvalueretry', 'admin')."\n";
} else {
$error = '';
}
$error = '';
}
} while ($error !== '');
$CFG->lang = $input;
@@ -365,8 +289,6 @@ if ($interactive) {
}
}
$CFG->directorypermissions = $chmod;
$CFG->filepermissions = ($CFG->directorypermissions & 0666);
$CFG->umaskpermissions = (($CFG->directorypermissions & 0777) ^ 0777);
//We need wwwroot before we test dataroot
$wwwroot = clean_param($options['wwwroot'], PARAM_URL);
@@ -403,6 +325,7 @@ if ($interactive) {
$CFG->wwwroot = $wwwroot;
$CFG->httpswwwroot = $CFG->wwwroot;
//We need dataroot before lang download
$CFG->dataroot = $options['dataroot'];
if ($interactive) {
@@ -452,10 +375,8 @@ if ($interactive) {
cli_error(get_string('pathserrcreatedataroot', 'install', $a));
}
}
$CFG->tempdir = $CFG->dataroot.'/temp';
$CFG->backuptempdir = $CFG->tempdir.'/backup';
$CFG->cachedir = $CFG->dataroot.'/cache';
$CFG->localcachedir = $CFG->dataroot.'/localcache';
$CFG->tempdir = $CFG->dataroot.'/temp';
$CFG->cachedir = $CFG->dataroot.'/cache';
// download required lang packs
if ($CFG->lang !== 'en') {
@@ -525,105 +446,72 @@ if ($interactive) {
$database = $databases[$CFG->dbtype];
// We cannot do any validation until all DB connection data is provided.
$hintdatabase = '';
do {
echo $hintdatabase;
// Ask for db host.
if ($interactive) {
cli_separator();
cli_heading(get_string('databasehost', 'install'));
if ($options['dbhost'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbhost']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbhost = cli_input($prompt, $options['dbhost']);
// ask for db host
if ($interactive) {
cli_separator();
cli_heading(get_string('databasehost', 'install'));
if ($options['dbhost'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbhost']);
} else {
$CFG->dbhost = $options['dbhost'];
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbhost = cli_input($prompt, $options['dbhost']);
// Ask for db name.
if ($interactive) {
cli_separator();
cli_heading(get_string('databasename', 'install'));
if ($options['dbname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbname = cli_input($prompt, $options['dbname']);
} else {
$CFG->dbhost = $options['dbhost'];
}
// ask for db name
if ($interactive) {
cli_separator();
cli_heading(get_string('databasename', 'install'));
if ($options['dbname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbname']);
} else {
$CFG->dbname = $options['dbname'];
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbname = cli_input($prompt, $options['dbname']);
// Ask for db prefix.
if ($interactive) {
cli_separator();
cli_heading(get_string('dbprefix', 'install'));
//TODO: solve somehow the prefix trouble for oci.
if ($options['prefix'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['prefix']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->prefix = cli_input($prompt, $options['prefix']);
} else {
$CFG->dbname = $options['dbname'];
}
// ask for db prefix
if ($interactive) {
cli_separator();
cli_heading(get_string('dbprefix', 'install'));
//TODO: solve somehow the prefix trouble for oci
if ($options['prefix'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['prefix']);
} else {
$CFG->prefix = $options['prefix'];
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->prefix = cli_input($prompt, $options['prefix']);
// Ask for db port.
if ($interactive) {
cli_separator();
cli_heading(get_string('databaseport', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbport']);
$CFG->dboptions['dbport'] = (int) cli_input($prompt, $options['dbport']);
} else {
$CFG->prefix = $options['prefix'];
}
// ask for db user
if ($interactive) {
cli_separator();
cli_heading(get_string('databaseuser', 'install'));
if ($options['dbuser'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbuser']);
} else {
$CFG->dboptions['dbport'] = (int) $options['dbport'];
}
if ($CFG->dboptions['dbport'] <= 0) {
$CFG->dboptions['dbport'] = '';
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbuser = cli_input($prompt, $options['dbuser']);
// Ask for db socket.
if ($CFG->ostype === 'WINDOWS') {
$CFG->dboptions['dbsocket'] = '';
} else if ($interactive and empty($CFG->dboptions['dbport'])) {
cli_separator();
cli_heading(get_string('databasesocket', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbsocket']);
$CFG->dboptions['dbsocket'] = cli_input($prompt, $options['dbsocket']);
} else {
$CFG->dboptions['dbsocket'] = $options['dbsocket'];
}
// Ask for db user.
if ($interactive) {
cli_separator();
cli_heading(get_string('databaseuser', 'install'));
if ($options['dbuser'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbuser']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
$CFG->dbuser = cli_input($prompt, $options['dbuser']);
} else {
$CFG->dbuser = $options['dbuser'];
}
// Ask for db password.
if ($interactive) {
cli_separator();
cli_heading(get_string('databasepass', 'install'));
} else {
$CFG->dbuser = $options['dbuser'];
}
// ask for db password
if ($interactive) {
cli_separator();
cli_heading(get_string('databasepass', 'install'));
do {
if ($options['dbpass'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['dbpass']);
} else {
@@ -631,171 +519,113 @@ do {
}
$CFG->dbpass = cli_input($prompt, $options['dbpass']);
if (function_exists('distro_pre_create_db')) { // Hook for distros needing to do something before DB creation.
$distro = distro_pre_create_db($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix,
array('dbpersist' => 0, 'dbport' => $CFG->dboptions['dbport'], 'dbsocket' => $CFG->dboptions['dbsocket']),
$distro);
if (function_exists('distro_pre_create_db')) { // Hook for distros needing to do something before DB creation
$distro = distro_pre_create_db($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbsocket'=>$options['dbsocket']), $distro);
}
$hintdatabase = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix,
array('dbpersist' => 0, 'dbport' => $CFG->dboptions['dbport'], 'dbsocket' => $CFG->dboptions['dbsocket']));
$hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbsocket'=>$options['dbsocket']));
} while ($hint_database !== '');
} else {
$CFG->dbpass = $options['dbpass'];
$hintdatabase = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix,
array('dbpersist' => 0, 'dbport' => $CFG->dboptions['dbport'], 'dbsocket' => $CFG->dboptions['dbsocket']));
if ($hintdatabase !== '') {
cli_error(get_string('dbconnectionerror', 'install'));
}
}
} while ($hintdatabase !== '');
// If --skip-database option is provided, we do not need to ask for site fullname, shortname, adminuser, adminpass, adminemail.
// These fields will be requested during the database install part.
if (!$skipdatabase) {
// Ask for fullname.
if ($interactive) {
cli_separator();
cli_heading(get_string('fullsitename', 'moodle'));
if ($options['fullname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['fullname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['fullname'] = cli_input($prompt, $options['fullname']);
} while (empty($options['fullname']));
} else {
if (empty($options['fullname'])) {
$a = (object)['option' => 'fullname', 'value' => $options['fullname']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for shortname.
if ($interactive) {
cli_separator();
cli_heading(get_string('shortsitename', 'moodle'));
if ($options['shortname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['shortname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['shortname'] = cli_input($prompt, $options['shortname']);
} while (empty($options['shortname']));
} else {
if (empty($options['shortname'])) {
$a = (object)['option' => 'shortname', 'value' => $options['shortname']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for admin user name.
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminusername', 'install'));
if (!empty($options['adminuser'])) {
$prompt = get_string('clitypevaluedefault', 'admin', $options['adminuser']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['adminuser'] = cli_input($prompt, $options['adminuser']);
} while (empty($options['adminuser']) or $options['adminuser'] === 'guest');
} else {
if ((empty($options['adminuser']) || $options['adminuser'] === 'guest')) {
$a = (object)['option' => 'adminuser', 'value' => $options['adminuser']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for admin user password.
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminpassword', 'install'));
$prompt = get_string('clitypevalue', 'admin');
do {
$options['adminpass'] = cli_input($prompt);
} while (empty($options['adminpass']) or $options['adminpass'] === 'admin');
} else {
if ((empty($options['adminpass']) or $options['adminpass'] === 'admin')) {
$a = (object)['option' => 'adminpass', 'value' => $options['adminpass']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Ask for the admin email address.
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminemail', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['adminemail']);
$options['adminemail'] = cli_input($prompt, $options['adminemail']);
}
// Validate that the address provided was an e-mail address.
if (!empty($options['adminemail']) && !validate_email($options['adminemail'])) {
$a = (object)['option' => 'adminemail', 'value' => $options['adminemail']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
// Ask for the support email address.
if ($interactive) {
cli_separator();
cli_heading(get_string('clisupportemail', 'install'));
$prompt = get_string('clitypevaluedefault', 'admin', $options['supportemail']);
$options['supportemail'] = cli_input($prompt, $options['supportemail']);
}
// Validate that the support email address provided is valid.
if (!empty($options['supportemail']) && !validate_email($options['supportemail'])) {
$a = (object)['option' => 'supportemail', 'value' => $options['supportemail']];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
} else {
$CFG->dbpass = $options['dbpass'];
$hint_database = install_db_validate($database, $CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, array('dbpersist'=>0, 'dbsocket'=>$options['dbsocket']));
if ($hint_database !== '') {
cli_error(get_string('dbconnectionerror', 'install'));
}
}
// Ask for the upgrade key.
// ask for fullname
if ($interactive) {
cli_separator();
cli_heading(get_string('upgradekeyset', 'admin'));
if ($options['upgradekey'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['upgradekey']);
$options['upgradekey'] = cli_input($prompt, $options['upgradekey']);
cli_heading(get_string('fullsitename', 'moodle'));
if ($options['fullname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['fullname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
$options['upgradekey'] = cli_input($prompt);
}
do {
$options['fullname'] = cli_input($prompt, $options['fullname']);
} while (empty($options['fullname']));
} else {
if (empty($options['fullname'])) {
$a = (object)array('option'=>'fullname', 'value'=>$options['fullname']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// Set the upgrade key if it was provided.
if ($options['upgradekey'] !== '') {
$CFG->upgradekey = $options['upgradekey'];
// ask for shortname
if ($interactive) {
cli_separator();
cli_heading(get_string('shortsitename', 'moodle'));
if ($options['shortname'] !== '') {
$prompt = get_string('clitypevaluedefault', 'admin', $options['shortname']);
} else {
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['shortname'] = cli_input($prompt, $options['shortname']);
} while (empty($options['shortname']));
} else {
if (empty($options['shortname'])) {
$a = (object)array('option'=>'shortname', 'value'=>$options['shortname']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// The user does not also need to pass agree-license when --skip-database is provided as the user will need to accept
// the license again in the database install part.
if (!$skipdatabase) {
if ($interactive) {
if (!$options['agree-license']) {
cli_separator();
cli_heading(get_string('copyrightnotice'));
echo "Moodle - Modular Object-Oriented Dynamic Learning Environment\n";
echo get_string('gpl3')."\n\n";
echo get_string('doyouagree')."\n";
$prompt = get_string('cliyesnoprompt', 'admin');
$input = cli_input($prompt, '', array(get_string('clianswerno', 'admin'), get_string('cliansweryes', 'admin')));
if ($input == get_string('clianswerno', 'admin')) {
exit(1);
}
}
// ask for admin user name
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminusername', 'install'));
if (!empty($options['adminuser'])) {
$prompt = get_string('clitypevaluedefault', 'admin', $options['adminuser']);
} else {
if (!$options['agree-license'] && !$skipdatabase) {
cli_error(get_string('climustagreelicense', 'install'));
$prompt = get_string('clitypevalue', 'admin');
}
do {
$options['adminuser'] = cli_input($prompt, $options['adminuser']);
} while (empty($options['adminuser']) or $options['adminuser'] === 'guest');
} else {
if (empty($options['adminuser']) or $options['adminuser'] === 'guest') {
$a = (object)array('option'=>'adminuser', 'value'=>$options['adminuser']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
// ask for admin user password
if ($interactive) {
cli_separator();
cli_heading(get_string('cliadminpassword', 'install'));
$prompt = get_string('clitypevalue', 'admin');
do {
$options['adminpass'] = cli_input($prompt);
} while (empty($options['adminpass']) or $options['adminpass'] === 'admin');
} else {
if (empty($options['adminpass']) or $options['adminpass'] === 'admin') {
$a = (object)array('option'=>'adminpass', 'value'=>$options['adminpass']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
}
if ($interactive) {
if (!$options['agree-license']) {
cli_separator();
cli_heading(get_string('copyrightnotice'));
echo "Moodle - Modular Object-Oriented Dynamic Learning Environment\n";
echo get_string('gpl3')."\n\n";
echo get_string('doyouagree')."\n";
$prompt = get_string('cliyesnoprompt', 'admin');
$input = cli_input($prompt, '', array(get_string('clianswerno', 'admin'), get_string('cliansweryes', 'admin')));
if ($input == get_string('clianswerno', 'admin')) {
exit(1);
}
}
} else {
if (!$options['agree-license']) {
cli_error(get_string('climustagreelicense', 'install'));
}
}
// Finally we have all info needed for config.php
@@ -837,23 +667,14 @@ if (!$envstatus) {
}
// Test plugin dependencies.
require_once($CFG->libdir . '/pluginlib.php');
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
cli_error(get_string('pluginschecktodo', 'admin'));
}
if (!$skipdatabase) {
install_cli_database($options, $interactive);
// This needs to happen at the end to ensure it occurs after all caches
// have been purged for the last time.
// This will build a cached version of the current theme for the user
// to immediately start browsing the site.
require_once($CFG->libdir.'/upgradelib.php');
upgrade_themes();
} else {
echo get_string('cliskipdatabase', 'install')."\n";
}
install_cli_database($options, $interactive);
echo get_string('cliinstallfinished', 'install')."\n";
exit(0); // 0 means success
+16 -50
View File
@@ -29,19 +29,12 @@
*/
define('CLI_SCRIPT', true);
define('CACHE_DISABLE_ALL', true);
// extra execution prevention - we can not just require config.php here
if (isset($_SERVER['REMOTE_ADDR'])) {
exit(1);
}
// Force OPcache reset if used, we do not want any stale caches
// when preparing test environment.
if (function_exists('opcache_reset')) {
opcache_reset();
}
$help =
"Advanced command line Moodle database installer.
Please note you must execute this script with the same uid as apache.
@@ -52,24 +45,26 @@ Options:
--lang=CODE Installation and default site language. Default is en.
--adminuser=USERNAME Username for the moodle admin account. Default is admin.
--adminpass=PASSWORD Password for the moodle admin account.
--adminemail=STRING Email address for the moodle admin account.
--agree-license Indicates agreement with software license.
--fullname=STRING Name of the site
--shortname=STRING Name of the site
--summary=STRING The summary to be displayed on the front page
--supportemail=STRING Email address for support and help.
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/install_database.php --lang=cs --adminpass=soMePass123 --agree-license
";
// Check that PHP is of a sufficient version as soon as possible.
require_once(__DIR__.'/../../lib/phpminimumversionlib.php');
moodle_require_minimum_php_version();
// Check that PHP is of a sufficient version
if (version_compare(phpversion(), "5.3.2") < 0) {
$phpversion = phpversion();
// do NOT localise - lang strings would not work here and we CAN NOT move it after installib
fwrite(STDERR, "Moodle 2.1 or later requires at least PHP 5.3.2 (currently using version $phpversion).\n");
fwrite(STDERR, "Please upgrade your server software or install older Moodle version.\n");
exit(1);
}
// Nothing to do if config.php does not exist
$configfile = __DIR__.'/../../config.php';
$configfile = dirname(dirname(dirname(__FILE__))).'/config.php';
if (!file_exists($configfile)) {
fwrite(STDERR, 'config.php does not exist, can not continue'); // do not localize
fwrite(STDERR, "\n");
@@ -84,6 +79,11 @@ require_once($CFG->libdir.'/installlib.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/componentlib.class.php');
// make sure no tables are installed yet
if ($DB->get_tables() ) {
cli_error(get_string('clitablesexist', 'install'));
}
$CFG->early_install_lang = true;
get_string_manager(true);
@@ -95,11 +95,8 @@ list($options, $unrecognized) = cli_get_params(
'lang' => 'en',
'adminuser' => 'admin',
'adminpass' => '',
'adminemail' => '',
'fullname' => '',
'shortname' => '',
'summary' => '',
'supportemail' => '',
'agree-license' => false,
'help' => false
),
@@ -108,22 +105,12 @@ list($options, $unrecognized) = cli_get_params(
)
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
// We show help text even if tables are installed.
if ($options['help']) {
echo $help;
die;
}
// Make sure no tables are installed yet.
if ($DB->get_tables() ) {
cli_error(get_string('clitablesexist', 'install'));
}
if (!$options['agree-license']) {
cli_error('You have to agree to the license. --help prints out the help'); // TODO: localize
}
@@ -132,21 +119,6 @@ if ($options['adminpass'] === true or $options['adminpass'] === '') {
cli_error('You have to specify admin password. --help prints out the help'); // TODO: localize
}
// Validate that the address provided was an e-mail address.
if (!empty($options['adminemail']) && !validate_email($options['adminemail'])) {
$a = (object) array('option' => 'adminemail', 'value' => $options['adminemail']);
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
// Validate that the supportemail provided was an e-mail address.
if (!empty($options['supportemail']) && !validate_email($options['supportemail'])) {
$a = (object) [
'option' => 'supportemail',
'value' => $options['supportemail']
];
cli_error(get_string('cliincorrectvalueerror', 'admin', $a));
}
$options['lang'] = clean_param($options['lang'], PARAM_SAFEDIR);
if (!file_exists($CFG->dirroot.'/install/lang/'.$options['lang'])) {
$options['lang'] = 'en';
@@ -188,20 +160,14 @@ if (!$envstatus) {
}
// Test plugin dependencies.
require_once($CFG->libdir . '/pluginlib.php');
$failed = array();
if (!core_plugin_manager::instance()->all_plugins_ok($version, $failed)) {
if (!plugin_manager::instance()->all_plugins_ok($version, $failed)) {
cli_problem(get_string('pluginscheckfailed', 'admin', array('pluginslist' => implode(', ', array_unique($failed)))));
cli_error(get_string('pluginschecktodo', 'admin'));
}
install_cli_database($options, true);
// This needs to happen at the end to ensure it occurs after all caches
// have been purged for the last time.
// This will build a cached version of the current theme for the user
// to immediately start browsing the site.
require_once($CFG->libdir.'/upgradelib.php');
upgrade_themes();
echo get_string('cliinstallfinished', 'install')."\n";
exit(0); // 0 means success
-55
View File
@@ -1,55 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI script to kill all user sessions without asking for confirmation.
*
* @package core
* @subpackage cli
* @copyright 2017 Alexander Bias <alexander.bias@uni-ulm.de>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir.'/clilib.php');
list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2);
}
if ($options['help']) {
$help =
"Kill all Moodle sessions
Options:
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/kill_all_sessions.php
";
echo $help;
exit(0);
}
\core\session\manager::kill_all_sessions();
exit(0);
+10 -46
View File
@@ -1,4 +1,5 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,7 +16,7 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Enable or disable maintenance mode.
* Enable or disable maintenance mode
*
* @package core
* @subpackage cli
@@ -25,13 +26,12 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once("$CFG->libdir/clilib.php");
require_once("$CFG->libdir/adminlib.php");
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
// Now get cli options.
list($options, $unrecognized) = cli_get_params(array('enable'=>false, 'enablelater'=>0, 'enableold'=>false, 'disable'=>false, 'help'=>false),
// now get cli options
list($options, $unrecognized) = cli_get_params(array('enable'=>false, 'disable'=>false, 'help'=>false),
array('h'=>'help'));
if ($unrecognized) {
@@ -45,14 +45,12 @@ if ($options['help']) {
Current status displayed if not option specified.
Options:
--enable Enable CLI maintenance mode
--enablelater=MINUTES Number of minutes before entering CLI maintenance mode
--enableold Enable legacy half-maintenance mode
--enable Enable maintenance mode
--disable Disable maintenance mode
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/maintenance.php
\$sudo -u www-data /usr/bin/php admin/cli/maintenance.php
"; //TODO: localize - to be translated later when everything is finished
echo $help;
@@ -61,52 +59,18 @@ Example:
cli_heading(get_string('sitemaintenancemode', 'admin')." ($CFG->wwwroot)");
if ($options['enablelater']) {
if (file_exists("$CFG->dataroot/climaintenance.html")) {
// Already enabled, sorry.
echo get_string('clistatusenabled', 'admin')."\n";
return 1;
}
$time = time() + ($options['enablelater']*60);
set_config('maintenance_later', $time);
echo get_string('clistatusenabledlater', 'admin', userdate($time))."\n";
return 0;
} else if ($options['enable']) {
if (file_exists("$CFG->dataroot/climaintenance.html")) {
// The maintenance is already enabled, nothing to do.
} else {
enable_cli_maintenance_mode();
}
set_config('maintenance_enabled', 0);
unset_config('maintenance_later');
echo get_string('sitemaintenanceoncli', 'admin')."\n";
exit(0);
} else if ($options['enableold']) {
if ($options['enable']) {
set_config('maintenance_enabled', 1);
unset_config('maintenance_later');
echo get_string('sitemaintenanceon', 'admin')."\n";
exit(0);
} else if ($options['disable']) {
set_config('maintenance_enabled', 0);
unset_config('maintenance_later');
if (file_exists("$CFG->dataroot/climaintenance.html")) {
unlink("$CFG->dataroot/climaintenance.html");
}
echo get_string('sitemaintenanceoff', 'admin')."\n";
exit(0);
}
if (!empty($CFG->maintenance_enabled) or file_exists("$CFG->dataroot/climaintenance.html")) {
if (!empty($CFG->maintenance_enabled)) {
echo get_string('clistatusenabled', 'admin')."\n";
} else if (isset($CFG->maintenance_later)) {
echo get_string('clistatusenabledlater', 'admin', userdate($CFG->maintenance_later))."\n";
} else {
echo get_string('clistatusdisabled', 'admin')."\n";
}
+11 -128
View File
@@ -24,7 +24,7 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
if ($DB->get_dbfamily() !== 'mysql') {
@@ -53,7 +53,7 @@ Options:
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
\$ sudo -u www-data /usr/bin/php admin/cli/mysql_collation.php --collation=utf8_general_ci
";
if (!empty($options['collation'])) {
@@ -64,71 +64,6 @@ if (!empty($options['collation'])) {
cli_error("Error: collation '$collation' is not available on this server!");
}
$collationinfo = explode('_', $collation);
$charset = reset($collationinfo);
$engine = strtolower($DB->get_dbengine());
// Do checks for utf8mb4.
if (strpos($collation, 'utf8mb4') === 0) {
// Do we have the right engine?
if ($engine !== 'innodb' && $engine !== 'xtradb') {
cli_error("Error: '$collation' requires InnoDB or XtraDB set as the engine.");
}
// Are we using Barracuda?
if ($DB->get_row_format() != 'Barracuda') {
// Try setting it here.
try {
$DB->execute("SET GLOBAL innodb_file_format=Barracuda");
} catch (dml_exception $e) {
cli_error("Error: '$collation' requires the file format to be set to Barracuda.
An attempt was made to change the format, but it failed. Please try doing this manually.");
}
echo "GLOBAL SETTING: innodb_file_format changed to Barracuda\n";
}
// Is one file per table being used?
if (!$DB->is_file_per_table_enabled()) {
try {
$DB->execute("SET GLOBAL innodb_file_per_table=1");
} catch (dml_exception $e) {
cli_error("Error: '$collation' requires the setting 'innodb_file_per_table' be set to 'ON'.
An attempt was made to change the format, but it failed. Please try doing this manually.");
}
echo "GLOBAL SETTING: innodb_file_per_table changed to 1\n";
}
// Is large prefix set?
if (!$DB->is_large_prefix_enabled()) {
try {
$DB->execute("SET GLOBAL innodb_large_prefix=1");
} catch (dml_exception $e) {
cli_error("Error: '$collation' requires the setting 'innodb_large_prefix' be set to 'ON'.
An attempt was made to change the format, but it failed. Please try doing this manually.");
}
echo "GLOBAL SETTING: innodb_large_prefix changed to 1\n";
}
}
$sql = "SHOW VARIABLES LIKE 'collation_database'";
if (!$dbcollation = $DB->get_record_sql($sql)) {
cli_error("Error: Could not access collation information on the database.");
}
$sql = "SHOW VARIABLES LIKE 'character_set_database'";
if (!$dbcharset = $DB->get_record_sql($sql)) {
cli_error("Error: Could not access character set information on the database.");
}
if ($dbcollation->value !== $collation || $dbcharset->value !== $charset) {
// Try to convert the DB.
echo "Converting database to '$collation' for $CFG->wwwroot:\n";
$sql = "ALTER DATABASE `$CFG->dbname` DEFAULT CHARACTER SET $charset DEFAULT COLLATE = $collation";
try {
$DB->change_database_structure($sql);
} catch (exception $e) {
cli_error("Error: Tried to alter the database with no success. Please try manually changing the database
to the new collation and character set and then run this script again.");
}
echo "DATABASE CONVERTED\n";
}
echo "Converting tables and columns to '$collation' for $CFG->wwwroot:\n";
$prefix = $DB->get_prefix();
$prefix = str_replace('_', '\\_', $prefix);
@@ -145,25 +80,12 @@ if (!empty($options['collation'])) {
$skipped++;
} else {
try {
$DB->change_database_structure("ALTER TABLE `$table->name` CONVERT TO CHARACTER SET $charset COLLATE $collation");
echo "CONVERTED\n";
$converted++;
} catch (ddl_exception $e) {
$result = mysql_set_row_format($table->name, $charset, $collation, $engine);
if ($result) {
echo "CONVERTED\n";
$converted++;
} else {
// We don't know what the problem is. Stop the conversion.
cli_error("Error: Tried to convert $table->name, but there was a problem. Please check the details of this
table and try again.");
die();
}
}
$DB->change_database_structure("ALTER TABLE $table->name DEFAULT COLLATE = $collation");
echo "CONVERTED\n";
$converted++;
}
$sql = "SHOW FULL COLUMNS FROM `$table->name` WHERE collation IS NOT NULL";
$sql = "SHOW FULL COLUMNS FROM $table->name WHERE collation IS NOT NULL";
$rs2 = $DB->get_recordset_sql($sql);
foreach ($rs2 as $column) {
$column = (object)array_change_key_case((array)$column, CASE_LOWER);
@@ -174,36 +96,22 @@ if (!empty($options['collation'])) {
continue;
}
// Check for utf8mb4 collation.
$rowformat = $DB->get_row_format_sql($engine, $collation);
if ($column->type === 'tinytext' or $column->type === 'mediumtext' or $column->type === 'text' or $column->type === 'longtext') {
$notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
$default = (!is_null($column->default) and $column->default !== '') ? "DEFAULT '$column->default'" : '';
// primary, unique and inc are not supported for texts
$sql = "ALTER TABLE `$table->name`
MODIFY COLUMN $column->field $column->type
CHARACTER SET $charset
COLLATE $collation $notnull $default";
$sql = "ALTER TABLE $table->name MODIFY COLUMN $column->field $column->type COLLATE $collation $notnull $default";
$DB->change_database_structure($sql);
} else if (strpos($column->type, 'varchar') === 0) {
$notnull = ($column->null === 'NO') ? 'NOT NULL' : 'NULL';
$default = !is_null($column->default) ? "DEFAULT '$column->default'" : '';
if ($rowformat != '') {
$sql = "ALTER TABLE `$table->name` $rowformat";
$DB->change_database_structure($sql);
}
$sql = "ALTER TABLE `$table->name`
MODIFY COLUMN $column->field $column->type
CHARACTER SET $charset
COLLATE $collation $notnull $default";
// primary, unique and inc are not supported for texts
$sql = "ALTER TABLE $table->name MODIFY COLUMN $column->field $column->type COLLATE $collation $notnull $default";
$DB->change_database_structure($sql);
} else {
echo "ERROR (unknown column type: $column->type)\n";
$errors++;
$error++;
continue;
}
echo "CONVERTED\n";
@@ -272,9 +180,7 @@ function mysql_get_collations() {
global $DB;
$collations = array();
$sql = "SHOW COLLATION
WHERE Collation LIKE 'utf8\_%' AND Charset = 'utf8'
OR Collation LIKE 'utf8mb4\_%' AND Charset = 'utf8mb4'";
$sql = "SHOW COLLATION WHERE Collation LIKE 'utf8\_%' AND Charset = 'utf8'";
$rs = $DB->get_recordset_sql($sql);
foreach ($rs as $collation) {
$collations[$collation->collation] = $collation->collation;
@@ -303,26 +209,3 @@ function mysql_get_column_collations($tablename) {
$rs->close();
return $collations;
}
function mysql_set_row_format($tablename, $charset, $collation, $engine) {
global $DB;
$sql = "SELECT row_format
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = DATABASE() AND table_name = ?";
$rs = $DB->get_record_sql($sql, array($tablename));
if ($rs) {
if ($rs->row_format == 'Compact' || $rs->row_format == 'Redundant') {
$rowformat = $DB->get_row_format_sql($engine, $collation);
// Try to convert to compressed format and then try updating the collation again.
$DB->change_database_structure("ALTER TABLE `$tablename` $rowformat");
$DB->change_database_structure("ALTER TABLE `$tablename` CONVERT TO CHARACTER SET $charset COLLATE $collation");
} else {
// Row format may not be the problem. Can not diagnose problem. Send fail reply.
return false;
}
} else {
return false;
}
return true;
}
-202
View File
@@ -1,202 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* MySQL table row compression tool tool.
*
* @package core
* @copyright 2014 Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Petr Skoda <petr.skoda@totaralms.com>
*/
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require_once($CFG->libdir . '/clilib.php');
if ($DB->get_dbfamily() !== 'mysql') {
cli_error('This script is used for MySQL databases only.');
}
$engine = strtolower($DB->get_dbengine());
if ($engine !== 'innodb' and $engine !== 'xtradb') {
cli_error('This script is for MySQL servers using InnoDB or XtraDB engines only.');
}
list($options, $unrecognized) = cli_get_params(
array('help' => false, 'info' => false, 'list' => false, 'fix' => false, 'showsql' => false),
array('h' => 'help', 'i' => 'info', 'l' => 'list', 'f' => 'fix', 's' => 'showsql')
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$help =
"Script for detection of row size problems in MySQL InnoDB tables.
By default InnoDB storage table is using legacy Antelope file format
which has major restriction on database row size.
Use this script to detect and fix database tables with potential data
overflow problems.
Options:
-i, --info Show database information
-l, --list List problematic tables
-f, --fix Attempt to fix all tables (requires SUPER privilege)
-s, --showsql Print SQL statements for fixing of tables
-h, --help Print out this help
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/mysql_compressed_rows.php -l
";
/** @var mysql_sql_generator $generator */
$generator = $DB->get_manager()->generator;
$info = $DB->get_server_info();
$filepertable = $DB->get_record_sql("SHOW VARIABLES LIKE 'innodb_file_per_table'");
$filepertable = $filepertable ? $filepertable->value : '';
$fileformat = $DB->get_record_sql("SHOW VARIABLES LIKE 'innodb_file_format'");
$fileformat = $fileformat ? $fileformat->value : '';
$prefix = $DB->get_prefix();
$database = $CFG->dbname;
if (!empty($options['info'])) {
echo "Database version: " . $info['description'] . "\n";
echo "Database name: $database\n";
echo "Database engine: " . $DB->get_dbengine() . "\n";
echo "innodb_file_per_table: $filepertable\n";
echo "innodb_file_format: $fileformat\n";
exit(0);
} else if (!empty($options['list'])) {
$problem = false;
foreach ($DB->get_tables(false) as $table) {
$columns = $DB->get_columns($table, false);
$size = $generator->guess_antelope_row_size($columns);
$format = $DB->get_row_format($table);
if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) {
continue;
}
echo str_pad($prefix . $table, 32, ' ', STR_PAD_RIGHT);
echo str_pad($format, 11, ' ', STR_PAD_RIGHT);
if ($format === 'Compact' or $format === 'Redundant') {
$problem = true;
echo " (needs fixing)\n";
} else if ($format !== 'Compressed' and $format !== 'Dynamic') {
echo " (unknown)\n";
} else {
echo "\n";
}
}
if ($problem) {
exit(1);
}
exit(0);
} else if (!empty($options['fix'])) {
$fixtables = array();
foreach ($DB->get_tables(false) as $table) {
$columns = $DB->get_columns($table, false);
$size = $generator->guess_antelope_row_size($columns);
$format = $DB->get_row_format($table);
if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) {
continue;
}
if ($format === 'Compact' or $format === 'Redundant') {
$fixtables[$table] = $table;
}
}
if (!$fixtables) {
echo "No changes necessary\n";
exit(0);
}
if ($filepertable !== 'ON') {
try {
$DB->execute("SET GLOBAL innodb_file_per_table=1");
} catch (dml_exception $e) {
echo "Cannot enable GLOBAL innodb_file_per_table setting, use --showsql option and execute the statements manually.";
throw $e;
}
}
if ($fileformat !== 'Barracuda') {
try {
$DB->execute("SET GLOBAL innodb_file_format=Barracuda");
} catch (dml_exception $e) {
echo "Cannot change GLOBAL innodb_file_format setting, use --showsql option and execute the statements manually.";
throw $e;
}
}
if (!$DB->is_compressed_row_format_supported(false)) {
echo "MySQL server is not compatible with compressed row format.";
exit(1);
}
foreach ($fixtables as $table) {
$DB->change_database_structure("ALTER TABLE `{$prefix}$table` ROW_FORMAT=Compressed");
echo str_pad($prefix . $table, 32, ' ', STR_PAD_RIGHT) . " ... Compressed\n";
}
exit(0);
} else if (!empty($options['showsql'])) {
$fixtables = array();
foreach ($DB->get_tables(false) as $table) {
$columns = $DB->get_columns($table, false);
$size = $generator->guess_antelope_row_size($columns);
$format = $DB->get_row_format($table);
if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) {
continue;
}
if ($format === 'Compact' or $format === 'Redundant') {
$fixtables[$table] = $table;
}
}
if (!$fixtables) {
echo "No changes necessary\n";
exit(0);
}
echo "Copy the following SQL statements and execute them using account with SUPER privilege:\n\n";
echo "USE $database;\n";
echo "SET SESSION sql_mode=STRICT_ALL_TABLES;\n";
echo "SET GLOBAL innodb_file_per_table=1;\n";
echo "SET GLOBAL innodb_file_format=Barracuda;\n";
foreach ($fixtables as $table) {
echo "ALTER TABLE `{$prefix}$table` ROW_FORMAT=Compressed;\n";
}
echo "\n";
exit(0);
} else {
echo $help;
die;
}
+180
View File
@@ -0,0 +1,180 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* MySQL engine conversion tool.
*
* @package core
* @subpackage cli
* @copyright 2009 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
if ($DB->get_dbfamily() !== 'mysql') {
cli_error('This function is designed for MySQL databases only!');
}
// now get cli options
list($options, $unrecognized) = cli_get_params(array('help'=>false, 'list'=>false, 'engine'=>false, 'available'=>false),
array('h'=>'help', 'l'=>'list', 'a'=>'available'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
$help =
"MySQL engine conversions script.
It is recommended to stop the web server before the conversion.
Do not use MyISAM if possible, because it is not ACID compliant
and does not support transactions.
Options:
--engine=ENGINE Convert MySQL tables to different engine
-l, --list Show table information
-a, --available Show list of available engines
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/mysql_engine.php --engine=InnoDB
";
if (!empty($options['engine'])) {
$engines = mysql_get_engines();
$engine = clean_param($options['engine'], PARAM_ALPHA);
if (!isset($engines[strtoupper($engine)])) {
cli_error("Error: engine '$engine' is not available on this server!");
}
echo "Converting tables to '$engine' for $CFG->wwwroot:\n";
$prefix = $DB->get_prefix();
$prefix = str_replace('_', '\\_', $prefix);
$sql = "SHOW TABLE STATUS WHERE Name LIKE BINARY '$prefix%'";
$rs = $DB->get_recordset_sql($sql);
$converted = 0;
$skipped = 0;
$errors = 0;
foreach ($rs as $table) {
if (strtoupper($table->engine) === strtoupper($engine)) {
$newengine = mysql_get_table_engine($table->name);
echo str_pad($table->name, 40). " - NO CONVERSION NEEDED ($newengine)\n";
$skipped++;
continue;
}
echo str_pad($table->name, 40). " - ";
try {
$DB->change_database_structure("ALTER TABLE {$table->name} ENGINE = $engine");
$newengine = mysql_get_table_engine($table->name);
if (strtoupper($newengine) !== strtoupper($engine)) {
echo "ERROR ($newengine)\n";
$errors++;
continue;
}
echo "DONE ($newengine)\n";
$converted++;
} catch (moodle_exception $e) {
echo $e->getMessage()."\n";
$errors++;
continue;
}
}
$rs->close();
echo "Converted: $converted, skipped: $skipped, errors: $errors\n";
exit(0); // success
} else if (!empty($options['list'])) {
echo "List of tables for $CFG->wwwroot:\n";
$prefix = $DB->get_prefix();
$prefix = str_replace('_', '\\_', $prefix);
$sql = "SHOW TABLE STATUS WHERE Name LIKE BINARY '$prefix%'";
$rs = $DB->get_recordset_sql($sql);
$counts = array();
foreach ($rs as $table) {
if (isset($counts[$table->engine])) {
$counts[$table->engine]++;
} else {
$counts[$table->engine] = 1;
}
echo str_pad($table->engine, 10);
echo $table->name . "\n";
}
$rs->close();
echo "\n";
echo "Table engines summary for $CFG->wwwroot:\n";
foreach ($counts as $engine => $count) {
echo "$engine: $count\n";
}
exit(0); // success
} else if (!empty($options['available'])) {
echo "List of available MySQL engines for $CFG->wwwroot:\n";
$engines = mysql_get_engines();
foreach ($engines as $engine) {
echo " $engine\n";
}
die;
} else {
echo $help;
die;
}
// ========== Some functions ==============
function mysql_get_engines() {
global $DB;
$sql = "SHOW Engines";
$rs = $DB->get_recordset_sql($sql);
$engines = array();
foreach ($rs as $engine) {
if (strtoupper($engine->support) !== 'YES' and strtoupper($engine->support) !== 'DEFAULT') {
continue;
}
$engines[strtoupper($engine->engine)] = $engine->engine;
if (strtoupper($engine->support) === 'DEFAULT') {
$engines[strtoupper($engine->engine)] .= ' (default)';
}
}
$rs->close();
return $engines;
}
function mysql_get_table_engine($tablename) {
global $DB;
$engine = null;
$sql = "SHOW TABLE STATUS WHERE Name = '$tablename'"; // no special chars expected here
$rs = $DB->get_recordset_sql($sql);
if ($rs->valid()) {
$record = $rs->current();
$engine = $record->engine;
}
$rs->close();
return $engine;
}
+8 -31
View File
@@ -15,8 +15,6 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI script to purge caches without asking for confirmation.
*
* @package core
* @subpackage cli
* @copyright 2011 David Mudrak <david@moodle.com>
@@ -25,19 +23,10 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php');
$longoptions = [
'help' => false,
'muc' => false,
'theme' => false,
'lang' => false,
'js' => false,
'filter' => false,
'other' => false
];
list($options, $unrecognized) = cli_get_params($longoptions, ['h' => 'help']);
list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
@@ -45,32 +34,20 @@ if ($unrecognized) {
}
if ($options['help']) {
// The indentation of this string is "wrong" but this is to avoid a extra whitespace in console output.
$help = <<<EOF
Invalidates Moodle internal caches
Specific caches can be defined (alone or in combination) using arguments. If none are specified,
all caches will be purged.
$help =
"Invalidates all Moodle internal caches
Options:
-h, --help Print out this help
--muc Purge all MUC caches (includes lang cache)
--theme Purge theme cache
--lang Purge language string cache
--js Purge JavaScript cache
--filter Purge text filter cache
--other Purge all file caches and other miscellaneous caches (may include MUC
if using cachestore_file).
Example:
\$ sudo -u www-data /usr/bin/php admin/cli/purge_caches.php
EOF;
\$sudo -u www-data /usr/bin/php admin/cli/purge_caches.php
";
echo $help;
exit(0);
}
purge_caches(array_filter($options));
purge_all_caches();
exit(0);
exit(0);
+13 -40
View File
@@ -26,26 +26,13 @@
define('CLI_SCRIPT', true);
require(__DIR__.'/../../config.php');
require(dirname(dirname(dirname(__FILE__))).'/config.php');
require_once($CFG->libdir.'/clilib.php'); // cli only functions
// Define the input options.
$longparams = array(
'help' => false,
'username' => '',
'password' => '',
'ignore-password-policy' => false
);
$shortparams = array(
'h' => 'help',
'u' => 'username',
'p' => 'password',
'i' => 'ignore-password-policy'
);
// now get cli options
list($options, $unrecognized) = cli_get_params($longparams, $shortparams);
list($options, $unrecognized) = cli_get_params(array('help'=>false),
array('h'=>'help'));
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
@@ -60,43 +47,29 @@ There are no security checks here because anybody who is able to
execute this file may execute any PHP too.
Options:
-h, --help Print out this help
-u, --username=username Specify username to change
-p, --password=newpassword Specify new password
--ignore-password-policy Ignore password policy when setting password
-h, --help Print out this help
Example:
\$sudo -u www-data /usr/bin/php admin/cli/reset_password.php
\$sudo -u www-data /usr/bin/php admin/cli/reset_password.php --username=rosaura --password=jiu3jiu --ignore-password-policy
";
"; //TODO: localize - to be translated later when everything is finished
echo $help;
die;
}
if ($options['username'] == '' ) {
cli_heading('Password reset');
$prompt = "Enter username (manual authentication only)";
$username = cli_input($prompt);
} else {
$username = $options['username'];
}
cli_heading('Password reset'); // TODO: localize
$prompt = "enter username (manual authentication only)"; // TODO: localize
$username = cli_input($prompt);
if (!$user = $DB->get_record('user', array('auth'=>'manual', 'username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) {
cli_error("Can not find user '$username'");
}
if ($options['password'] == '' ) {
$prompt = "Enter new password";
$password = cli_input($prompt);
} else {
$password = $options['password'];
}
$prompt = "Enter new password"; // TODO: localize
$password = cli_input($prompt);
$errmsg = '';//prevent eclipse warning
if (!$options['ignore-password-policy'] ) {
if (!check_password_policy($password, $errmsg, $user)) {
cli_error(html_to_text($errmsg, 0));
}
if (!check_password_policy($password, $errmsg)) {
cli_error($errmsg);
}
$hashedpassword = hash_internal_user_password($password);
@@ -105,4 +78,4 @@ $DB->set_field('user', 'password', $hashedpassword, array('id'=>$user->id));
echo "Password changed\n";
exit(0); // 0 means success.
exit(0); // 0 means success
-109
View File
@@ -1,109 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This script allows to restore a course from CLI.
*
* @package core
* @subpackage cli
* @copyright 2020 Catalyst IT
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', 1);
require(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/clilib.php');
require_once($CFG->dirroot . "/backup/util/includes/restore_includes.php");
list($options, $unrecognized) = cli_get_params([
'file' => '',
'categoryid' => '',
'showdebugging' => false,
'help' => false,
], [
'f' => 'file',
'c' => 'categoryid',
's' => 'showdebugging',
'h' => 'help',
]);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] || !($options['file']) || !($options['categoryid'])) {
$help = <<<EOL
Restore backup into provided category.
Options:
-f, --file=STRING Path to the backup file.
-c, --categoryid=INT ID of the category to restore too.
-s, --showdebugging Show developer level debugging information
-h, --help Print out this help.
Example:
\$sudo -u www-data /usr/bin/php admin/cli/restore_backup.php --file=/path/to/backup/file.mbz --categoryid=1\n
EOL;
echo $help;
exit(0);
}
if ($options['showdebugging']) {
set_debugging(DEBUG_DEVELOPER, true);
}
if (!$admin = get_admin()) {
throw new \moodle_exception('noadmins');
}
if (!file_exists($options['file'])) {
throw new \moodle_exception('filenotfound');
}
if (!$category = $DB->get_record('course_categories', ['id' => $options['categoryid']], 'id')) {
throw new \moodle_exception('invalidcategoryid');
}
$backupdir = restore_controller::get_tempdir_name(SITEID, $USER->id);
$path = make_backup_temp_directory($backupdir);
cli_heading(get_string('extractingbackupfileto', 'backup', $path));
$fp = get_file_packer('application/vnd.moodle.backup');
$fp->extract_to_pathname($options['file'], $path);
cli_heading(get_string('preprocessingbackupfile'));
try {
list($fullname, $shortname) = restore_dbops::calculate_course_names(0, get_string('restoringcourse', 'backup'),
get_string('restoringcourseshortname', 'backup'));
$courseid = restore_dbops::create_new_course($fullname, $shortname, $category->id);
$rc = new restore_controller($backupdir, $courseid, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $admin->id, backup::TARGET_NEW_COURSE);
$rc->execute_precheck();
$rc->execute_plan();
$rc->destroy();
} catch (Exception $e) {
cli_heading(get_string('cleaningtempdata'));
fulldelete($path);
throw new \moodle_exception('generalexceptionmessage', 'error', '', $e->getMessage());
}
cli_heading(get_string('restoredcourseid', 'backup', $courseid));
exit(0);
-167
View File
@@ -1,167 +0,0 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* CLI task execution.
*
* @package core
* @subpackage cli
* @copyright 2014 Petr Skoda
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require(__DIR__ . '/../../config.php');
require_once("$CFG->libdir/clilib.php");
list($options, $unrecognized) = cli_get_params(
[
'help' => false,
'list' => false,
'execute' => false,
'showsql' => false,
'showdebugging' => false,
'force' => false,
], [
'h' => 'help',
'f' => 'force',
]
);
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
if ($options['help'] or (!$options['list'] and !$options['execute'])) {
$help =
"Scheduled cron tasks.
Options:
--execute=\\some\\task Execute scheduled task manually
--list List all scheduled tasks
--showsql Show sql queries before they are executed
--showdebugging Show developer level debugging information
-h, --help Print out this help
-f, --force Execute task even if cron is disabled
Example:
\$sudo -u www-data /usr/bin/php admin/cli/scheduled_task.php --execute=\\core\\task\\session_cleanup_task
";
echo $help;
die;
}
if ($options['showdebugging'] || !empty($CFG->showcrondebugging)) {
set_debugging(DEBUG_DEVELOPER, true);
}
if ($options['showsql'] || !empty($CFG->showcronsql)) {
$DB->set_debug(true);
}
if ($options['list']) {
cli_heading("List of scheduled tasks ($CFG->wwwroot)");
$shorttime = get_string('strftimedatetimeshort');
$tasks = \core\task\manager::get_all_scheduled_tasks();
echo str_pad(get_string('scheduledtasks', 'tool_task'), 50, ' ') . ' ' . str_pad(get_string('runpattern', 'tool_task'), 17, ' ')
. ' ' . str_pad(get_string('lastruntime', 'tool_task'), 40, ' ') . get_string('nextruntime', 'tool_task') . "\n";
foreach ($tasks as $task) {
$class = '\\' . get_class($task);
$schedule = $task->get_minute() . ' '
. $task->get_hour() . ' '
. $task->get_day() . ' '
. $task->get_day_of_week() . ' '
. $task->get_month() . ' '
. $task->get_day_of_week();
$nextrun = $task->get_next_run_time();
$lastrun = $task->get_last_run_time();
$plugininfo = core_plugin_manager::instance()->get_plugin_info($task->get_component());
$plugindisabled = $plugininfo && $plugininfo->is_enabled() === false && !$task->get_run_if_component_disabled();
if ($plugindisabled) {
$nextrun = get_string('plugindisabled', 'tool_task');
} else if ($task->get_disabled()) {
$nextrun = get_string('taskdisabled', 'tool_task');
} else if ($nextrun > time()) {
$nextrun = userdate($nextrun);
} else {
$nextrun = get_string('asap', 'tool_task');
}
if ($lastrun) {
$lastrun = userdate($lastrun);
} else {
$lastrun = get_string('never');
}
echo str_pad($class, 50, ' ') . ' ' . str_pad($schedule, 17, ' ') .
' ' . str_pad($lastrun, 40, ' ') . ' ' . $nextrun . "\n";
}
exit(0);
}
if ($execute = $options['execute']) {
if (!$task = \core\task\manager::get_scheduled_task($execute)) {
mtrace("Task '$execute' not found");
exit(1);
}
if (moodle_needs_upgrading()) {
mtrace("Moodle upgrade pending, cannot execute tasks.");
exit(1);
}
if (!get_config('core', 'cron_enabled') && !$options['force']) {
mtrace('Cron is disabled. Use --force to override.');
exit(1);
}
\core\task\manager::scheduled_task_starting($task);
// Increase memory limit.
raise_memory_limit(MEMORY_EXTRA);
// Emulate normal session - we use admin account by default.
\core\cron::setup_user();
// Execute the task.
\core\local\cli\shutdown::script_supports_graceful_exit();
$cronlockfactory = \core\lock\lock_config::get_lock_factory('cron');
if (!$cronlock = $cronlockfactory->get_lock('core_cron', 10)) {
mtrace('Cannot obtain cron lock');
exit(129);
}
if (!$lock = $cronlockfactory->get_lock('\\' . get_class($task), 10)) {
$cronlock->release();
mtrace('Cannot obtain task lock');
exit(130);
}
$task->set_lock($lock);
if (!$task->is_blocking()) {
$cronlock->release();
} else {
$task->set_cron_lock($cronlock);
}
\core\cron::run_inner_scheduled_task($task);
}

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