Compare commits

...

253 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7) 3ee8703317 Moodle release 2.9rc2 2015-05-08 12:16:23 +02:00
Eloy Lafuente (stronk7) 60c6c510bd Merge branch 'install_master' of https://git.in.moodle.com/amosbot/moodle-install 2015-05-08 12:16:06 +02:00
Andrew Nicols 802dbbf882 MDL-50153 messageinbound: Normalise line endings instead of rtrim 2015-05-08 15:40:51 +08:00
Andrew Nicols 217d7f6f24 Merge branch 'MDL-50162-master' of git://github.com/FMCorz/moodle 2015-05-08 13:56:11 +08:00
David Monllao f9c14c6135 Merge branch 'MDL-50153-master' of git://github.com/andrewnicols/moodle 2015-05-08 13:21:29 +08:00
Frederic Massart a622bc1a96 MDL-50162 core_user: Some preferences are not updated in $USER object 2015-05-08 13:02:12 +08:00
Andrew Nicols 2d07240f23 MDL-50153 messageinbound: Make messageinbound tests dos-safe 2015-05-08 12:16:31 +08:00
Andrew Nicols cba92dc805 MDL-50153 core: Use directory_separator when autoloading psr0 classes 2015-05-08 12:14:48 +08:00
Rajesh Taneja f84a0d49c1 MDL-50154 behat: Resize pdf window so toolbar is always visible 2015-05-08 11:17:39 +08:00
Rajesh Taneja 0ce090c09a MDL-50154 behat: Click on Grades link under navigation 2015-05-08 10:06:39 +08:00
Eloy Lafuente (stronk7) 7a69b19596 Merge branch 'MDL-50136-master' of git://github.com/ankitagarwal/moodle 2015-05-07 19:34:00 +02:00
Eloy Lafuente (stronk7) 88ffe4020f Merge branch 'MDL-50152' of git://github.com/timhunt/moodle 2015-05-07 16:18:35 +02:00
Dan Poltawski fad8ee28f1 Merge branch 'MDL-50120-master' of git://github.com/FMCorz/moodle 2015-05-07 10:52:25 +01:00
Tim Hunt f459f29b6f MDL-50152 forum: show if last post in a thread is unread. 2015-05-07 10:38:32 +01:00
Dan Poltawski 5b3bda80db Merge branch 'wip-MDL-50131-master' of git://github.com/abgreeve/moodle 2015-05-07 09:26:45 +01:00
Ankit Agarwal 991efb8b1a MDL-50136 database: Update css of search box 2015-05-07 13:40:44 +05:30
Adrian Greeve c36c3d07ad MDL-50131 themes: Update to upgrade.txt about renderers.
Information about full_header and context_header has been added to
upgrade.txt.
2015-05-07 15:47:01 +08:00
Frederic Massart 69a3587196 MDL-50120 core_user: Profile edit redirects to profile or preferences 2015-05-07 14:31:03 +08:00
Adrian Greeve a19c4b8dd0 MDL-50039 tool_monitor: Behat update to fix selection error 2015-05-07 13:13:04 +08:00
Adrian Greeve 0f510be763 MDL-50039 tool_monitor: Additional checks for subscription.
Additional capability checks are now in place to stop unauthorised
users from accessing the event monitor subscription page.

Thanks to Eloy Lafuente for creating a gist with ideas of tackling
No site level capability to the rule subscription.
2015-05-07 13:13:04 +08:00
David Monllao 0f186bd62d Merge branch 'MDL-50110' of git://github.com/ramdesh/moodle 2015-05-07 12:16:03 +08:00
Andrew Nicols 954f3f5aa8 Merge branch 'MDL-50047-master-2nd' of git://github.com/FMCorz/moodle 2015-05-07 11:36:36 +08:00
Frederic Massart 546a58bcdc MDL-50128 mod_data: String needed escaping before being used in regex 2015-05-07 11:19:47 +08:00
Andrew Nicols 7ae030d54e Merge branch 'master_MDL-50133' of https://github.com/danmarsden/moodle
Conflicts:
	mod/scorm/version.php
2015-05-07 10:24:11 +08:00
Andrew Nicols 85643ff6e0 Merge branch 'MDL-49802-master' of git://github.com/FMCorz/moodle 2015-05-07 10:03:37 +08:00
Andrew Nicols 92f47ae2f9 Merge branch 'MDL-49783-master' of git://github.com/mastnym/moodle 2015-05-07 09:42:21 +08:00
Martin Mastny eaec9cfec7 MDL-49783 forms: Collapsed form section is opened on error 2015-05-07 08:57:30 +08:00
Dan Marsden a374769640 MDL-50133 mod_scorm: use correct captypes 2015-05-07 11:43:28 +12:00
Ramindu Deshapriya 83679e0fb9 MDL-50110 mod_book: Added Behat test to automate MDLQA-7646 2015-05-07 01:52:18 +05:30
Dan Poltawski 57fc76ab92 Merge branch 'MDL-50102' of git://github.com/stronk7/moodle 2015-05-06 10:50:35 +01:00
Frederic Massart 913784114d MDL-49802 core_message: Prevent message being sent twice in messenger 2015-05-06 17:43:48 +08:00
David Monllao 52802cf624 Merge branch 'MDL-49870-master' of git://github.com/damyon/moodle 2015-05-06 15:30:31 +08:00
Marina Glancy 8b4568500b MDL-49788 navigation: Ensure we only check active enrolments 2015-05-06 08:01:31 +01:00
Damyon Wiese 917bd02be5 MDL-49870 tool_templatelibrary: Allow docs in parent template only.
If the mustache comment containing the docs for the template is
not found in the theme overridden template, search the original
core/plugin template for the docs.
2015-05-06 14:54:56 +08:00
Salih Gedik 683f717919 MDL-49789 mod_book: filter book chapter content 2015-05-06 13:54:24 +08:00
Frederic Massart 36c1cc4dc1 MDL-50047 quiz_results: Restore handles misconfig and missing quizzes
We had to change back the result of instance_allow_multiple to true,
or a backup would have only restored one instance at random.
2015-05-06 13:16:01 +08:00
Marina Glancy 46be1d58ac MDL-49718 externallib: unittest correction 2015-05-06 13:00:56 +08:00
Frederic Massart ae742f12c1 MDL-50047 quiz_results: Upgrade handles misconfig and missing quizzes 2015-05-06 12:32:29 +08:00
Andrew Nicols 1bd3c5b846 Merge branch 'MDL-49931-master' of git://github.com/ankitagarwal/moodle 2015-05-06 12:25:56 +08:00
Andrew Nicols 43ef409276 Merge branch 'MDL-49985_master' of git://github.com/markn86/moodle
Conflicts:
	mod/forum/post.php
2015-05-06 11:11:21 +08:00
Marina Glancy f236dcc35c MDL-50090 user: suspended user can login upon conrimation 2015-05-06 11:00:44 +08:00
Juan Leyva c4a150219a MDL-49718 webservices: Fix forced format and force external text cleaning 2015-05-06 10:56:09 +08:00
Juan Leyva 57d9a750e3 MDL-49994 files: Prevent to browse private files when are disabled 2015-05-06 10:27:18 +08:00
Andrew Nicols 8e92f48c40 Merge branch 'MDL-50001-master' of git://github.com/damyon/moodle 2015-05-06 09:13:19 +08:00
Eloy Lafuente (stronk7) 15005d91f0 MDL-50102 versions: coding style cleanup. 2015-05-05 18:23:21 +02:00
AMOS bot 07e09f2b29 Automatically generated installer lang files 2015-05-06 00:03:52 +08:00
Eloy Lafuente (stronk7) 84d6094685 MDL-50102 versions: main version mini-bump 2015-05-05 17:45:06 +02:00
Eloy Lafuente (stronk7) 26ea380d24 MDL-50102 versions: bump all versions and requires near release
version = planned 2015051100 release version
requires= current 2015050500 rc1 version

Note: On purpose, the course format social wrong version (2015102100)
has been kept unmodified. Looking forward a solution right now.
2015-05-05 17:43:19 +02:00
Marina Glancy 4f8b6d5674 MDL-50099 auth: less verbose account confirmed message 2015-05-05 15:33:36 +01:00
Frederic Massart db200a8e9f MDL-49179 setuplib: print_error() uses local URLs exclusively 2015-05-05 18:31:13 +08:00
Frederic Massart b2687a055d MDL-49179 weblib: Secure the direct usage of $_SERVER['HTTP_REFERER'] 2015-05-05 18:31:13 +08:00
Frederic Massart dd0607b7bb MDL-49179 mod_forum, mod_quiz: Prevent misuse of get_referer() 2015-05-05 18:31:13 +08:00
Tim Hunt e51fdfe0cb MDL-49941 quiz: mod/quiz:grade should declare RISK_XSS 2015-05-05 18:31:13 +08:00
Frederic Massart d031c2dcb9 MDL-49401 moodlelib: PARAM_LOCALURL supports loginhttps 2015-05-05 18:31:13 +08:00
Eloy Lafuente (stronk7) b3f5865eab Moodle release 2.9rc1 2015-05-05 12:29:09 +02:00
Eloy Lafuente (stronk7) c12cfeac45 Merge branch 'MDL-49845-fix3-master' of git://github.com/gurgus/moodle 2015-05-05 11:42:08 +02:00
Dave Cooper 186747fd75 MDL-49845 core_user: Fix behat failures 2015-05-05 17:30:53 +08:00
Dave Cooper 4c54bc6fe1 MDL-49845 lang: Remove userspreferences string 2015-05-05 16:36:30 +08:00
Mark Nelson 9542b15671 MDL-49985 core_enrol: direct user to appropriate URL 2015-05-05 01:17:23 -07:00
Mark Nelson b3cb726431 MDL-49985 core_course: revert commit belonging to MDL-18309
This reverts commit 6601690202.

This commit was adding the 'returnurl' param unnecessarily to the
course links in the navigation block, causing a lot of long URLs
to be created.
2015-05-05 01:09:20 -07:00
Andrew Nicols 8b3ba5b370 Merge branch 'MDL-49983-master-fix-3' of https://github.com/xow/moodle 2015-05-05 15:34:00 +08:00
David Monllao 48645e475b Merge branch 'wip-MDL-49778-master' of git://github.com/abgreeve/moodle 2015-05-05 15:20:47 +08:00
Adrian Greeve aac6717056 MDL-49778 lib: Update to upgrade_stale_php_files_present() 2015-05-05 15:18:33 +08:00
John Okely 6289c2ea94 MDL-49983 admin: Improve user menu grades setting language strings 2015-05-05 15:13:01 +08:00
Ankit Agarwal 36bbb0b70a MDL-49931 preferences: Add cancel button to forms 2015-05-05 10:32:14 +05:30
Damyon Wiese e67585f8ca MDL-50001 grunt: Make grunt work on windows
Unfortunately, this is not perfect yet. It will build the entire
repository every time - which takes a while because it builds all the
yui modules (On linux it correctly only builds whats in the current dir).
2015-05-05 12:15:59 +08:00
Andrew Nicols ce16ceb667 Merge branch 'MDL-49983-master-fix-2' of https://github.com/xow/moodle 2015-05-05 11:57:03 +08:00
John Okely ad13aff7c4 MDL-49983 lang: Remove language strings that were added in 2.9 2015-05-05 11:35:21 +08:00
Andrew Nicols d2bec50b7c MDL-48002 inbound: Tidy up language in unit test 2015-05-05 10:57:35 +08:00
David Monllao 96ec51bdec Merge branch 'MDL-50055-master' of git://github.com/andrewnicols/moodle 2015-05-05 10:51:30 +08:00
David Monllao 9f3adc943b Merge branch 'MDL-49848-master' of git://github.com/xow/moodle 2015-05-05 10:37:53 +08:00
Andrew Nicols 3e5b4aa9bc Merge branch 'MDL-49845-fix-master' of git://github.com/gurgus/moodle 2015-05-05 10:28:50 +08:00
John Okely 172ed01a29 MDL-49848 message: Make messaging interface responsive 2015-05-05 10:27:14 +08:00
Andrew Nicols e8cf6330c2 MDL-50055 enrol: Stop requiring javascript for behat tests 2015-05-05 10:23:18 +08:00
Andrew Nicols 2b964e1d24 MDL-50055 tests: Add new step to deal with Single Selects 2015-05-05 10:23:17 +08:00
David Monllao a7f81bc72d Merge branch 'MDL-48002-master' of git://github.com/ankitagarwal/moodle 2015-05-05 10:21:06 +08:00
Andrew Nicols d29bfb25ca Merge branch 'MDL-50084-master' of git://github.com/gurgus/moodle 2015-05-05 10:18:21 +08:00
Dave Cooper 4ad43f2a2f MDL-49845 lang: Fixing incorrect component name for deprecated string 2015-05-05 10:01:48 +08:00
Andrew Nicols 8ac391b826 Merge branch 'MDL-50059-master' of git://github.com/damyon/moodle 2015-05-05 09:55:11 +08:00
Damyon Wiese 003577cd85 MDL-50085 output: Remove component and subtype from renderer
They were only added to support templates, and due to refactoring
are not required any more. So we should remove this API change.
2015-05-05 03:19:47 +02:00
Damyon Wiese 410034eef0 MDL-50085 templates: Minor fixes from peer review
* rename get_filename to get_filepath
* phpdocs fixes
* improve formatting of exceptions
* lang string improvement
2015-05-05 03:19:39 +02:00
Damyon Wiese fcc383db0f MDL-50085 Mustache : Strictly define the search paths for templates.
This change moves several repeated sections of code that was searching
for templates and valid template locations to a new class. It adds
unit tests for the new class and verifies subsystem support for templates.
2015-05-05 03:19:25 +02:00
David Monllao 890078bf03 MDL-49983-master lang: Fixing wrong mygrades string location 2015-05-04 18:16:53 +08:00
David Monllao d670f31fc7 Merge branch 'MDL-49923-master-fix1' of git://github.com/damyon/moodle 2015-05-04 18:06:26 +08:00
Ankit Agarwal a4f19cfc95 MDL-48002: inbound: Add outlook fixture 2015-05-04 15:14:13 +05:30
Ankit Agarwal 7f9b8cf3a3 MDL-48002 inbound: Update regex for token matching 2015-05-04 15:13:50 +05:30
Damyon Wiese 3454072f31 MDL-50059 Output: Remove heading param from full_header
It was only used for a hack in clean to show the logo.
2015-05-04 17:02:33 +08:00
Damyon Wiese dd636abf38 MDL-49923 theme_clean: The core renderer was in the wrong folder
Renderers need to follow autoloading rules or be included from renderer.php.
2015-05-04 16:57:10 +08:00
John Okely 35ea78d2ba MDL-49987 Navigation: Put messages before preferences, not mypreferences 2015-05-04 16:31:16 +08:00
Dave Cooper eb42bb7e83 MDL-50084 pix: Updated pix to use the templatable interface 2015-05-04 15:56:45 +08:00
Ankit Agarwal bf06f672f4 MDL-48002: inbound: Add ios fixture 2015-05-04 13:25:10 +05:30
David Monllao 119ff65c0e Merge branch 'MDL-49954-master' of git://github.com/jleyva/moodle 2015-05-04 15:16:01 +08:00
Andrew Nicols 9787c4caba Merge branch 'MDL-49845-master' of git://github.com/gurgus/moodle 2015-05-04 15:03:22 +08:00
David Monllao 9996e8954b Merge branch 'wip-MDL-49846-master-fix' of git://github.com/abgreeve/moodle 2015-05-04 14:57:18 +08:00
Andrew Nicols d3f1cde59e MDL-49987 upgrade: Correct missing main_savepoint update 2015-05-04 14:40:09 +08:00
David Monllao 3994812f38 Merge branch 'wip-mdl-50042' of git://github.com/rajeshtaneja/moodle 2015-05-04 14:16:09 +08:00
Adrian Greeve bdf899a503 MDL-49846 tool_monitor: Context simplification and clean up.
Removed some unnecessary variables and simplified the context
usage in the index.php page.
2015-05-04 14:05:44 +08:00
Dave Cooper 327e68e69d MDL-49845 notes: Changed headers for notes index 2015-05-04 14:02:17 +08:00
Dave Cooper a7e98a6900 MDL-49845 blog: Changed headers for blog index 2015-05-04 14:02:17 +08:00
Dave Cooper 7193ea2cd2 MDL-49845 profile: changed 'My preferences' display logic 2015-05-04 14:02:17 +08:00
Dave Cooper c1f97c777f MDL-49845 blog: Fixed navigation logic for blog 2015-05-04 14:02:16 +08:00
Dave Cooper 298c9da5f1 MDL-49845 navigation: Fix breadcrumbs for links in my profile. 2015-05-04 14:02:16 +08:00
Andrew Nicols 6df7f2008b Merge branch 'MDL-49987-master' of git://github.com/damyon/moodle
Conflicts:
	lib/db/upgrade.php
	version.php
2015-05-04 13:40:57 +08:00
Andrew Nicols 6e9abef568 Merge branch 'MDL-49983-master' of git://github.com/xow/moodle 2015-05-04 12:39:48 +08:00
John Okely 4887d15228 MDL-49983 navigation: Remove 'my' from user context navigation 2015-05-04 12:38:50 +08:00
Andrew Nicols 23c4c76ff9 Merge branch 'wip-MDL-49846-master-v2' of git://github.com/abgreeve/moodle 2015-05-04 12:31:20 +08:00
Adrian Greeve 19452c99d7 MDL-49846 tool_monitor: Subscription page now filters on site events. 2015-05-04 12:29:54 +08:00
David Monllao 44e2802555 Merge branch 'MDL-49923-master' of git://github.com/FMCorz/moodle 2015-05-04 11:14:45 +08:00
Ankit Agarwal 5e4438b5c3 MDL-48002 inbound: Update fixtures to add client info 2015-05-04 08:00:01 +05:30
Ankit Agarwal 0174fa9bc0 MDL-48002 inbound: add tests for evolution 2015-05-04 08:00:01 +05:30
Andrew Nicols a8a742cb50 MDL-48002 inbound Unit tests from fixtures for quoted text 2015-05-04 08:00:01 +05:30
Ankit Agarwal aef3c18b76 MDL-48002 inbound: Remove quoted text from forum emails 2015-05-04 08:00:00 +05:30
Andrew Nicols b861cc96f7 Merge branch 'wip-MDL-50066-master' of git://github.com/marinaglancy/moodle 2015-05-04 09:07:26 +08:00
Damyon Wiese 3c568cd3db MDL-49987 upgrade: Make sure messages is in the user menu
Because we have removed messages from the navigation tree,
it is important that it exists in the user menu. That is the default
behaviour, but if sites previously removed it, we need to make sure it
is inserted back.
2015-05-03 21:47:20 +08:00
Frederic Massart a75dbde04c MDL-49923 theme_clean: Removed nested H1 tags due to new full_header() 2015-05-01 18:25:38 +08:00
David Monllao 24a2babdd3 on-demand release 2.9beta+ 2015-05-01 16:51:51 +08:00
David Monllao dc9b229d7a MDL-49232 enrol_self: Adapting unit test to new can_self_enrol() output 2015-05-01 15:43:09 +08:00
David Monllao 84d83fe7e1 Merge branch 'MDL-49998' of git://github.com/stronk7/moodle 2015-05-01 15:05:42 +08:00
David Monllao 600596fd6a Merge branch 'MDL-49840-master' of git://github.com/andrewnicols/moodle 2015-05-01 11:05:59 +08:00
Andrew Nicols 04cb1103a6 Merge branch 'MDL-49232_master' of git://github.com/markn86/moodle 2015-05-01 09:27:11 +08:00
Dan Poltawski 864275788c Merge branch 'MDL-50028' of git://github.com/timhunt/moodle 2015-04-30 16:06:58 +01:00
Eloy Lafuente (stronk7) 46686eafeb MDL-49998 editpdf: Clean code to make it more readable.
There was a big proliferation and reuse of $pdf variable
that was making the code hard to read/review. This commit
does change nothing but makes it more readable.

Also adds a couple of Close() calls, not strictly needed
because they don't have opened files. But think it makes
really clearer the scope of every variable. And, for sure
it frees some resources. That cannot be bad.
2015-04-30 10:55:08 +02:00
Rajesh Taneja 7fb84d75ee MDL-50042 behat: Use double quotes to avoid symfony adding it 2015-04-30 16:42:11 +08:00
Marina Glancy 2960eb4dd2 MDL-50066 strings: unable to deprecate string from moodle.php 2015-04-30 16:14:53 +08:00
Andrew Nicols f4b2a38728 Merge branch 'MDL-49986-master' of git://github.com/FMCorz/moodle 2015-04-30 15:39:13 +08:00
Andrew Nicols e841d654aa Merge branch 'MDL-49583' of https://github.com/NeillM/moodle 2015-04-30 15:00:25 +08:00
Andrew Nicols 237ce46b3f Merge branch 'MDL-50038-master' of git://github.com/FMCorz/moodle 2015-04-30 14:55:48 +08:00
David Monllao d567320928 Merge branch 'MDL-49281-master' of git://github.com/mastnym/moodle 2015-04-30 14:53:52 +08:00
David Monllao 388b0beec1 MDL-49637 mod_assign: Fixing behat test
The participant number is dynamically generated so it is not possible to
match known values.

Match on the submission text instead.
2015-04-30 14:03:50 +08:00
Martin Mastny 5c3b5143dc MDL-49281 grades: Calculation settings upgraded 2015-04-30 13:42:19 +08:00
Frederic Massart d71feab8ae MDL-49986 messages: Contacts in contact list should not be bold 2015-04-30 12:40:03 +08:00
Andrew Nicols c80270fe89 Merge branch 'MDL-50033-master-enfix' of git://github.com/mudrd8mz/moodle 2015-04-30 10:47:33 +08:00
Andrew Nicols 3056a260f6 Merge branch 'MDL-49932_master' of git://github.com/markn86/moodle 2015-04-30 10:25:27 +08:00
Andrew Nicols e89c5c203c MDL-49232 enrol_self: Add behat test for non-guest self-enrolment 2015-04-29 18:04:29 -07:00
Mark Nelson 9c54a0abad MDL-49232 enrol_self: display continue button 2015-04-29 18:04:28 -07:00
Mark Nelson 3b318d3e69 MDL-49932 core_install: removed upgrade step changing 'defaulthomepage'
The upgrade step was changing any site that had the setting
'defaulthomepage' set to HOMEPAGE_SITE to HOMEPAGE_MY. We can
not make the assumption that users want this setting changed.
2015-04-29 15:30:45 -07:00
David Mudrák 3759e7ae96 MDL-50033 lang: Update Behat scenarios to use the new strings 2015-04-29 23:15:44 +02:00
Helen Foster 0634dc3b76 MDL-50033 lang: Merge English strings from the en_fix language pack 2015-04-29 21:43:00 +02:00
Frederic Massart 94e6f38fa6 MDL-50038 my: Redirect admin users to the notifications page when needed 2015-04-29 18:56:56 +08:00
Dan Poltawski f60ea7d7df Merge branch 'MDL-50041-master' of git://github.com/FMCorz/moodle 2015-04-29 11:53:47 +01:00
Frederic Massart cda2a8273a MDL-50041 gdlib: Badges need PNG files from process_new_icon() 2015-04-29 18:50:20 +08:00
Adrian Greeve dc769673fa MDL-49843 navigation: Fixed fatal error when viewing reports. 2015-04-29 11:28:55 +01:00
Neill Magill ccd3dd5bc9 MDL-49583 enrol: enrol/index.php page doesn't handle direct access well
Before this patch if a user who is not logged in to Moodle accesses the
enrol/index.php page directly they were redirected to the Moodle front
page after login, rather than back to a page that would allow them to
self enrol, if it is enabled on the course.

This change will cause a user who directly accesses the page to be
redirected back to it after they have logged in, unless the course has guest
access enabled.

Thanks to Marina Glancy for suggesting the use of get_referer()
2015-04-29 09:22:14 +01:00
Andrew Nicols 3db610583e Merge branch 'MDL-49928-master' of git://github.com/ankitagarwal/moodle 2015-04-29 13:40:44 +08:00
David Monllao 2296285748 Merge branch 'MDL-50026' of git://github.com/timhunt/moodle 2015-04-29 13:25:02 +08:00
Ankit Agarwal b647db20e1 MDL-49928 userprofile: Reorder blocks 2015-04-29 10:15:00 +05:30
Andrew Nicols 2fac3c3c5f Merge branch 'wip-MDL-49888-master' of git://github.com/abgreeve/moodle 2015-04-29 12:18:52 +08:00
David Monllao 5c012a7426 Merge branch 'MDL-49637' of git://github.com/NeillM/moodle 2015-04-29 12:04:43 +08:00
Eloy Lafuente (stronk7) a916d557cf MDL-49998 unit tests: Close the pdf objects when needed.
When a pdf object is instantiated and any file is loaded
with set_pdf() or load_pdf(), the files remain open until
the pdf is saved with pdf_save() or outputted with Output()..

In that cases is needed to perform an explicit Close() in
order to free resources, parsers and, ultimately, fclose()
the files.

Note that only the uses detected in the editpdf unit tests have
been fixed. I'd recommend to analyse every instance of the tcpdf
libs.

Also, there was one incorrecly reused pdf instance in then
generate_combined_pdf_for_attempt() method. Apparently it was not
leading to problems, but better use a separate instance (#246).
2015-04-28 19:46:50 +02:00
Eloy Lafuente (stronk7) 095ecde727 MDL-49998 unit tests: files left open are our fault.
Get rid of the gc_collect_cycles() that only was
hiding incorrectly left open files. This must be fixed
in code when possible. And pdf libs allow us to do so.

Note that a lot of gc_collect_cycles() were added
in MDL-47675, I'd recommend to take a look to all them,
being replaced by fixes in code when possible.
2015-04-28 19:46:50 +02:00
Dan Poltawski a6dbe2fb1a Merge branch 'wip-mdl-49974' of https://github.com/rajeshtaneja/moodle 2015-04-28 15:01:08 +01:00
Tim Hunt d4572c1716 MDL-50026 quiz: don't show locks for random Qs in deferred feedback
can_finish_during_the_attempt was returning the wrong result for
random questions for behaviours like deferred feedback.
2015-04-28 13:37:00 +01:00
Tim Hunt 299d77dd5a MDL-50028 qtype_match: fix correct answer display
Atto's stupid tendency to create HTML like
<p>You don't need a br at the end of a paragraph!</br></p>
was breaking it.
2015-04-28 13:07:26 +01:00
Tim Hunt c70c18c0e3 MDL-50028 questions: split into one testcase class per file 2015-04-28 13:07:25 +01:00
Dan Poltawski 84ea226616 on-demand release 2.9beta+ 2015-04-28 10:13:37 +01:00
Frederic Massart c7d5ca8d16 MDL-49981 badges: Missing link to manage your badges 2015-04-28 10:13:36 +01:00
Frederic Massart ca6f3a8b5f MDL-49911 admin: Prevent notices when updatenotifications is disabled 2015-04-28 10:13:36 +01:00
Dan Poltawski 77a8c9aae3 Merge branch 'install_master' of https://git.in.moodle.com/amosbot/moodle-install 2015-04-28 10:11:18 +01:00
David Monllao 1d47b81928 Merge branch 'wip-MDL-17929-master' of git://github.com/marinaglancy/moodle 2015-04-28 10:11:18 +01:00
David Monllao 1f619e8d60 Merge branch 'MDL-42449' of git://github.com/andrewhancox/moodle 2015-04-28 10:11:17 +01:00
Andrew Nicols 1c193d49f0 Merge branch 'MDL-49926-master' of git://github.com/mastnym/moodle 2015-04-28 10:11:16 +01:00
Andrew Nicols b10d72f4e9 Merge branch 'MDL-49814' of git://github.com/timhunt/moodle 2015-04-28 10:11:16 +01:00
Neill Magill 129d26aac4 MDL-49637 assign: Workflow & blind marking do not always show feedback
Before this patch if an assignment has workflow and blind marking enabled if a teacher
sets a submission to have its grades released to students before they reveal student
identities the feedback they have given is not displayed to the student.

The patch causes the reveal_identities() method to pass the correct value to the
get_feedback_plugin_by_type() function in the assign class.
2015-04-28 09:05:05 +01:00
Neill Magill 6e972bdd34 MDL-49637 assign: Behat test for blind marking with workflow
This test checks that that if reveal student identities is used before or after the submissions grades have
been set released that the teacher's feedback is displayed to students.
2015-04-28 09:04:57 +01:00
Adrian Greeve 12261113a9 MDL-49888 navigation: Added missing reports to user profile.
Added statistics and grade to the reports section in the user
profile.
2015-04-28 14:30:26 +08:00
Juan Leyva 9a3f7a484d MDL-49954 forum: Use clean_returnvalue properly in external unit tests 2015-04-27 18:22:49 +02:00
AMOS bot 99b679b385 Automatically generated installer lang files 2015-04-28 00:04:09 +08:00
Dan Poltawski c5cdc8887a Merge branch 'MDL-49993_master' of git://github.com/grabs/moodle 2015-04-27 14:47:58 +01:00
Rajesh Taneja ceeab15019 MDL-49948 lesson: Answer and response format should be known for each form 2015-04-27 14:35:20 +01:00
Dan Poltawski 08c8fc50ce Merge branch 'MDL-49913' of git://github.com/jmvedrine/moodle 2015-04-27 14:28:27 +01:00
Tim Hunt 377ce9938b MDL-49814 quiz: make question dependency clear in the nav 2015-04-27 13:55:40 +01:00
Dan Poltawski 6e28c039cb Merge branch 'MDL-49956_getstring' of https://github.com/andyjdavis/moodle 2015-04-27 11:03:32 +01:00
Dan Poltawski 2be9a45389 Merge branch 'MDL-49977_master' of git://github.com/markn86/moodle 2015-04-27 10:46:08 +01:00
Andreas Grabs 9f78349f58 MDL-49993 mod_feedback: Question auto numbers have no space between number and question 2015-04-26 19:04:40 +02:00
Jean-Michel Vedrine c914c92da0 MDL-49913 mod_lesson: studentanswer format should be HTML 2015-04-24 19:19:32 +02:00
Jean-Michel Vedrine cb9d259dcd MDL-49913 mod_lesson: fix import scores and jumps 2015-04-24 19:19:31 +02:00
Jean-Michel Vedrine 9fb9aa9c91 MDL-49913 mod_lesson: defaultanswer to avoid duplication 2015-04-24 19:19:31 +02:00
Jean-Michel Vedrine 35cec798c2 MDL-49913 mod_lesson: round question grades on import 2015-04-24 19:19:30 +02:00
AMOS bot 170497cd22 Automatically generated installer lang files 2015-04-25 00:04:04 +08:00
Andrew Hancox baba473b24 MDL-42449 backup: Fix for activity grade category
Retain grade category when restoring an activity into the course that
it came from
2015-04-24 13:59:18 +01:00
Dan Poltawski d5d23acdf5 on-demand release 2.9beta+ 2015-04-24 12:10:20 +01:00
Dan Poltawski 14c5b3a23f Merge branch 'MDL-49960-master' of git://github.com/FMCorz/moodle 2015-04-24 10:19:21 +01:00
Andrew Nicols b083e0f6f2 Merge branch 'MDL-49311-master' of git://github.com/lameze/moodle 2015-04-24 10:19:20 +01:00
Andrew Nicols 0264bb1ecb Merge branch 'MDL-49813' of https://github.com/mkassaei/moodle 2015-04-24 10:19:20 +01:00
Dan Poltawski 5975d9521a Merge branch 'MDL-49946' of https://github.com/jmvedrine/moodle 2015-04-24 10:19:19 +01:00
Dan Poltawski 9548d1e058 Merge branch 'MDL-49972-master' of git://github.com/FMCorz/moodle 2015-04-24 10:19:18 +01:00
David Monllao 9dbcdd8b1f Merge branch 'MDL-49937-master' of git://github.com/jleyva/moodle 2015-04-24 10:19:18 +01:00
Andrew Nicols 1cbfb67789 Merge branch 'm29_MDL-49922' of https://github.com/totara/moodle 2015-04-24 10:19:17 +01:00
Andrew Nicols 4815e4c5b1 Merge branch 'MDL-49477-master' of git://github.com/FMCorz/moodle 2015-04-24 10:19:17 +01:00
Martin Mastny 000d624cc4 MDL-49926 gradereport: Cursor changes to pointer on hover 2015-04-24 13:16:08 +08:00
Martin Mastny 1af4cced98 MDL-49926 gradereport: Feedback gets saved when editing grade in ajax mode 2015-04-24 13:16:07 +08:00
Rajesh Taneja b6e98dc8bd MDL-49974 unit_test: Use datetime format supported by different os
%k is not supported by windows, so using %H
2015-04-24 13:01:01 +08:00
papillon 28d27e85d7 MDL-49311 user: fix default sorting problem 2015-04-24 09:10:22 +08:00
Andrew Davis 28343f0e12 MDL-49956 admin: removed unused get_string() params 2015-04-24 08:33:38 +08:00
Mark Nelson ccc1bc7e2e MDL-49977 mod_assign: added missing page titles 2015-04-23 16:24:18 -07:00
M Kassaei 32498c28ea MDL-49813 quiz: add sections in the right place after page changes 2015-04-23 16:54:50 +01:00
Frederic Massart e14388e3a7 MDL-49972 preferences: Fix incorrect title and headings 2015-04-23 16:05:00 +08:00
Juan Leyva 8352aa50f3 MDL-49937 data: Handle admins/managers in get_databases_by_courses 2015-04-23 09:37:06 +02:00
Marina Glancy f99fe11045 MDL-17929 enrol_meta: unittest for unenrolment from group 2015-04-23 15:08:07 +08:00
Frederic Massart c8b4b67a2f MDL-49960 message: Adding behat test for recent conversations 2015-04-23 14:05:55 +08:00
Frederic Massart d9b5f9bb6c MDL-49960 message: Prevent coding error when getting recent convos 2015-04-23 12:08:33 +08:00
Andrew Nicols b3b6588262 Merge branch 'MDL-34921_master_unwanted-sitehome-redirects' of https://github.com/colin-umn/moodle 2015-04-23 11:49:16 +08:00
Andrew Nicols ed8caffa5a Merge branch 'MDL-49613' of https://github.com/NeillM/moodle 2015-04-23 08:40:44 +08:00
Jean-Michel Vedrine 6197497393 MDL-49946 mod_lesson: improve qformat_default::defaultquestion 2015-04-22 19:40:19 +02:00
Dan Poltawski a8d8783988 Merge branch 'MDL-49921-master' of git://github.com/jleyva/moodle 2015-04-22 16:40:15 +01:00
Dan Poltawski 296a428776 Merge branch 'wip-MDL-49953-master' of git://github.com/marinaglancy/moodle 2015-04-22 12:06:46 +01:00
Dan Poltawski 1f23341f7d Merge branch 'MDL-49800-master' of git://github.com/FMCorz/moodle 2015-04-22 10:47:56 +01:00
Viduranga Wijesooriya 21e6aabce9 MDL-49477 availability_grade-form: checkbox disable problem fixed
Signed-off-by: Viduranga Wijesooriya <vpowerrc@gmail.com>
2015-04-22 17:33:54 +08:00
David Monllao e5c5ced912 Merge branch 'MDL-49933-master' of git://github.com/lucisgit/moodle 2015-04-22 17:02:19 +08:00
Neill Magill 9d72ae249c MDL-49613 access: count_role_users gives unexpected results
The count_role_users function in lib/accesslib.php gives the wrong results if a user has the
same role at multiple levels in a context path.

For example a user is a coursecreator on a course and the category that the course is in,
in this case they would be counted twice, rather than being recognised as the same user.

This change will make the function only count unique users.
2015-04-22 09:34:45 +01:00
Neill Magill 3a92084c6b MDL-49613 access: Unit test for count_role_users 2015-04-22 09:34:44 +01:00
Juan Leyva c8f1d8a026 MDL-49921 forum: Handle exceptions correctly in get_forums_by_courses 2015-04-22 09:47:18 +02:00
David Monllao ac0f0f9dd9 Merge branch 'MDL-49849-master' of git://github.com/gurgus/moodle 2015-04-22 14:40:37 +08:00
Marina Glancy 9c1561ef83 MDL-17929 groups: function to sync groups with enrolments 2015-04-22 14:36:38 +08:00
Marina Glancy bacb7b1f6e MDL-17929 enrol_meta: allow to edit instance 2015-04-22 14:36:38 +08:00
Marina Glancy e284e1792c MDL-17929 enrol_meta: create new group if selected
AMOS BEGIN
  CPY [creategroup,enrol_cohort],[creategroup,enrol_meta]
AMOS END
2015-04-22 14:36:38 +08:00
Marina Glancy 9e37d365d8 MDL-17929 enrol_meta: synchronise with groups 2015-04-22 14:36:34 +08:00
Dave Cooper f13a911317 MDL-49849 profile: Split site access information into it's own section 2015-04-22 14:08:18 +08:00
Marina Glancy 5894432c50 MDL-49953 enrol_cohort: correction to string 2015-04-22 13:40:03 +08:00
Marina Glancy 42c92eef33 MDL-49953 enrol_cohort: check courseid when looking for group 2015-04-22 13:39:02 +08:00
Daniel Neis Araujo 98177a4510 MDL-17929 enrol: Populate groups from Child Courses in META courses
This is based on code from the enrol cohort plugin and
on work from Willy Lee available at https://github.com/willylee/moodle-local_metasync

AMOS BEGIN
  CPY [addgroup,enrol_cohort],[addgroup,enrol_meta]
AMOS END
2015-04-22 12:06:29 +08:00
Andrew Nicols e28767f414 Merge branch 'MDL-49753-master' of https://github.com/alexmitin/moodle 2015-04-22 11:00:21 +08:00
Tony Butler 2224f2c598 MDL-49933 mod_assign: Sort marker select lists alphabetically by name 2015-04-21 16:58:38 +01:00
Dan Poltawski d0704fd9e2 Merge branch 'patch-2' of https://github.com/sk-unikent/moodle 2015-04-21 15:38:32 +01:00
Dan Poltawski df9981cfda on-demand release 2.9beta+ 2015-04-21 11:15:23 +01:00
Dan Poltawski 4f6f5f1a10 Merge branch 'install_master' of https://git.in.moodle.com/amosbot/moodle-install 2015-04-21 11:15:21 +01:00
Simey Lameze 0525a7a8f1 MDL-49854 core_user: fix the myprofile lib inclusion 2015-04-21 12:04:40 +08:00
Simey Lameze e35bac3e80 MDL-49854 core: User navigation refinements
Fixing some reported issues:
- Removing unnecessary conditional include
- Require login in grade/report/mygrades.php
- Remove unnecessary defined('MOODLE_INTERNAL') call
- Fixing context_header::__construct $imagedata param type
2015-04-21 11:46:32 +08:00
Andrew Nicols 9d745218e8 Merge branch 'MDL-49902-master' of git://github.com/jleyva/moodle 2015-04-21 11:40:39 +08:00
Andrew Nicols 6866527275 MDL-40811 uploaduser: Optimise testuser code 2015-04-21 11:34:00 +08:00
Andrew Nicols 7464939f6d Merge branch 'MDL-40881_master' of https://github.com/nadavkav/moodle 2015-04-21 11:17:16 +08:00
Andrew Nicols 793645a03f Merge branch 'm29_MDL-49782' of https://github.com/totara/moodle 2015-04-21 10:43:48 +08:00
AMOS bot cb2fc25ba0 Automatically generated installer lang files 2015-04-21 00:04:17 +08:00
Andrew Nicols bd305d3dcb Merge branch 'wip-mdl-49799-m' of https://github.com/rajeshtaneja/moodle 2015-04-20 12:22:18 +08:00
David Monllao 970d54d076 Merge branch 'MDL-48187_master' of git://github.com/markn86/moodle 2015-04-20 12:20:28 +08:00
David Monllao 1577072b7b Merge branch 'wip-MDL-49880-master' of git://github.com/abgreeve/moodle 2015-04-20 12:12:44 +08:00
Mark Nelson 595b911a98 MDL-48187 core_course: use updated '$grade_item' 2015-04-19 20:30:21 -07:00
Rajesh Taneja 0fe86bbdbb MDL-49799 behat: replaced asd.com with example.com
asd.com is a valid domain, we should use reserved domain names for testing
2015-04-20 11:21:20 +08:00
David Monllao b9476466f1 Merge branch 'm29_MDL-49904' of git://github.com/totara/moodle 2015-04-20 10:40:37 +08:00
Brian Barnes 508e756eaf MDL-49922 badges: replaced unnecessary fieldset 2015-04-20 13:20:38 +12:00
Adrian Greeve 08000e535d MDL-49880 mod_lesson: Fixed notice while importing questions.
Cloze questions (not supported by lesson) threw up a notice saying that
the course wasn't set.
2015-04-20 09:12:20 +08:00
Brian Barnes cfff4da9f6 MDL-49904 user: set title when editing another user 2015-04-17 12:09:30 +12:00
Juan Leyva ea2fa324d7 MDL-49902 forum: Add missing capability check in mod_forum_view_forum 2015-04-16 22:07:11 +02:00
Andrew Nicols a910e3885a MDL-49840 testing: Ensure that composer dependencies are updated
We should ensure that composer dependencies are present before running
phpunit and behat. We should also ensure that they match the versions in
the composer.lock file.

Doing so ensures that we have a consistency across the board amongst
testers. All testers are a specific commit will be using the same version
of composer.lock and the same version of the relevant tools.
2015-04-16 09:00:03 +08:00
Skylar Kelty bf5eebe8f8 MDL-49878 block_settings: Only count visible children 2015-04-15 15:07:22 +01:00
Frederic Massart 60de7df148 MDL-49800 core_output: Templates are not allowed in sub directories 2015-04-15 14:03:23 +08:00
Andrew Nicols 69c150cbda MDL-49840 testing: Always call composer install 2015-04-14 11:26:53 +08:00
Andrew Nicols 08f38358c8 MDL-49840 testing: Include current composer.lock 2015-04-14 11:25:42 +08:00
Andrew Nicols d2c64a7b5b MDL-49840 testing: Stop ignoring composer.lock 2015-04-14 11:25:29 +08:00
Nadav Kavalerchik ada407159f MDL-40881 uploaduser: Validate profile fields unique values 2015-04-13 21:42:26 +03:00
Brian Barnes 8b3a10438f MDL-49782 general: removed uses of window.status 2015-04-08 11:49:06 +12:00
Alex Mitin af4e80ae69 MDL-49753 enrolments: preselct status filter if needed 2015-04-07 16:19:01 +08:00
Colin Campbell 6825560889 MDL-34921 course/format: Fix unwanted redirects from Site home 2015-04-04 21:31:35 -05:00
893 changed files with 7876 additions and 3159 deletions
+1 -2
View File
@@ -26,9 +26,8 @@ CVS
/.buildpath
/.cache
phpunit.xml
# Composer support - only composer.json is to be in git, the rest is installed in each checkout.
# Composer support. Do not ignore composer.json, or composer.lock. These should be shipped by us.
composer.phar
composer.lock
/vendor/
/behat.yml
*/yui/build/*/*-coverage.js
+12 -9
View File
@@ -24,7 +24,8 @@
module.exports = function(grunt) {
var path = require('path'),
tasks = {};
tasks = {},
cwd = process.env.PWD || process.cwd();
// Project configuration.
grunt.initConfig({
@@ -38,11 +39,11 @@ module.exports = function(grunt) {
['**/src/*.js', '!**/node_modules/**'],
'',
{
cwd: process.env.PWD,
cwd: cwd,
rename: function(destBase, destPath) {
destPath = destPath.replace('src', 'build');
destPath = destPath.replace('.js', '.min.js');
destPath = path.resolve(process.env.PWD, destPath);
destPath = path.resolve(cwd, destPath);
return destPath;
}
}
@@ -63,13 +64,15 @@ module.exports = function(grunt) {
},
shifter;
args.push( path.normalize(__dirname + '/node_modules/shifter/bin/shifter'));
// Determine the most appropriate options to run with based upon the current location.
if (path.basename(process.env.PWD) === 'src') {
if (path.basename(cwd) === 'src') {
// Detect whether we're in a src directory.
grunt.log.debug('In a src directory');
args.push('--walk');
options.walk = true;
} else if (path.basename(path.dirname(process.env.PWD)) === 'src') {
} else if (path.basename(path.dirname(cwd)) === 'src') {
// Detect whether we're in a module directory.
grunt.log.debug('In a module directory');
options.module = true;
@@ -100,8 +103,8 @@ module.exports = function(grunt) {
}
// Actually run shifter.
shifter = exec(process.cwd() + '/node_modules/shifter/bin/shifter', args, {
cwd: process.env.PWD,
shifter = exec("node", args, {
cwd: cwd,
stdio: 'inherit',
env: process.env
});
@@ -119,10 +122,10 @@ module.exports = function(grunt) {
tasks.startup = function() {
// Are we in a YUI directory?
if (path.basename(path.resolve(process.env.PWD, '../../')) == 'yui') {
if (path.basename(path.resolve(cwd, '../../')) == 'yui') {
grunt.task.run('shifter');
// Are we in an AMD directory?
} else if (path.basename(process.env.PWD) == 'amd') {
} else if (path.basename(cwd) == 'amd') {
grunt.task.run('jshint');
grunt.task.run('uglify');
} else {
+21 -16
View File
@@ -556,31 +556,36 @@ $cronoverdue = ($lastcron < time() - 3600 * 24);
$dbproblems = $DB->diagnose();
$maintenancemode = !empty($CFG->maintenance_enabled);
// Available updates for Moodle core
// Available updates for Moodle core.
$updateschecker = \core\update\checker::instance();
$availableupdates = array();
$availableupdates['core'] = $updateschecker->get_update_info('core',
array('minmaturity' => $CFG->updateminmaturity, 'notifybuilds' => $CFG->updatenotifybuilds));
$availableupdatesfetch = null;
// Available updates for contributed plugins
$pluginman = core_plugin_manager::instance();
foreach ($pluginman->get_plugins() as $plugintype => $plugintypeinstances) {
foreach ($plugintypeinstances as $pluginname => $plugininfo) {
if (!empty($plugininfo->availableupdates)) {
foreach ($plugininfo->availableupdates as $pluginavailableupdate) {
if ($pluginavailableupdate->version > $plugininfo->versiondisk) {
if (!isset($availableupdates[$plugintype.'_'.$pluginname])) {
$availableupdates[$plugintype.'_'.$pluginname] = array();
if (empty($CFG->disableupdatenotifications)) {
// Only compute the update information when it is going to be displayed to the user.
$availableupdates['core'] = $updateschecker->get_update_info('core',
array('minmaturity' => $CFG->updateminmaturity, 'notifybuilds' => $CFG->updatenotifybuilds));
// Available updates for contributed plugins
$pluginman = core_plugin_manager::instance();
foreach ($pluginman->get_plugins() as $plugintype => $plugintypeinstances) {
foreach ($plugintypeinstances as $pluginname => $plugininfo) {
if (!empty($plugininfo->availableupdates)) {
foreach ($plugininfo->availableupdates as $pluginavailableupdate) {
if ($pluginavailableupdate->version > $plugininfo->versiondisk) {
if (!isset($availableupdates[$plugintype.'_'.$pluginname])) {
$availableupdates[$plugintype.'_'.$pluginname] = array();
}
$availableupdates[$plugintype.'_'.$pluginname][] = $pluginavailableupdate;
}
$availableupdates[$plugintype.'_'.$pluginname][] = $pluginavailableupdate;
}
}
}
}
}
// The timestamp of the most recent check for available updates
$availableupdatesfetch = $updateschecker->get_last_timefetched();
// The timestamp of the most recent check for available updates
$availableupdatesfetch = $updateschecker->get_last_timefetched();
}
$buggyiconvnomb = (!function_exists('mb_convert_encoding') and @iconv('UTF-8', 'UTF-8//IGNORE', '100'.chr(130).'€') !== '100€');
//check if the site is registered on Moodle.org
+1 -4
View File
@@ -58,7 +58,6 @@ if (!empty($registeredhub) and $registeredhub->token == $token) {
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('registrationconfirmed', 'hub'), 3, 'main');
$hublink = html_writer::tag('a', $hubname, array('href' => $url));
$registeredhub->token = $newtoken;
$registeredhub->confirmed = 1;
@@ -66,9 +65,7 @@ if (!empty($registeredhub) and $registeredhub->token == $token) {
$registrationmanager->update_registeredhub($registeredhub);
// Display notification message.
$notificationmessage = $OUTPUT->notification(
get_string('registrationconfirmedon', 'hub', $hublink), 'notifysuccess');
echo $notificationmessage;
echo $OUTPUT->notification(get_string('registrationconfirmedon', 'hub'), 'notifysuccess');
//display continue button
$registrationpage = new moodle_url('/admin/registration/index.php');
+2 -7
View File
@@ -31,21 +31,16 @@
class core_register_renderer extends plugin_renderer_base {
/**
* Display Moodle.org registration message about benefit to register on Moodle.org
* Display message about the benefits of registering on Moodle.org
*
* @return string
*/
public function moodleorg_registration_message() {
$moodleorgstatslink = html_writer::link('http://moodle.net/stats',
get_string('statsmoodleorg', 'admin'),
array('target' => '_blank'));
$hublink = html_writer::link('https://moodle.net/mod/page/view.php?id=1',
get_string('moodleorghubname', 'admin'),
array('target' => '_blank'));
$moodleorgregmsg = get_string('registermoodleorg', 'admin', $hublink);
$moodleorgregmsg = get_string('registermoodleorg', 'admin');
$items = array(get_string('registermoodleorgli1', 'admin'),
get_string('registermoodleorgli2', 'admin', $moodleorgstatslink));
$moodleorgregmsg .= html_writer::alist($items);
+2 -2
View File
@@ -27,9 +27,9 @@ if ($hassiteconfig or has_any_capability($capabilities, $systemcontext)) { // sp
'customusermenuitems',
new lang_string('customusermenuitems', 'admin'),
new lang_string('configcustomusermenuitems', 'admin'),
'mygrades,grades|/grade/report/mygrades.php|grades
'grades,grades|/grade/report/mygrades.php|grades
messages,message|/message/index.php|message
mypreferences,moodle|/user/preferences.php|preferences',
preferences,moodle|/user/preferences.php|preferences',
PARAM_TEXT,
'50',
'10'
+6 -6
View File
@@ -7,10 +7,10 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
Background:
Given the following "users" exist:
| username | firstname | lastname | email | auth | confirmed |
| user1 | User | One | one@asd.com | manual | 0 |
| user2 | User | Two | two@asd.com | ldap | 1 |
| user3 | User | Three | three@asd.com | manual | 1 |
| user4 | User | Four | four@asd.com | ldap | 0 |
| user1 | User | One | one@example.com | manual | 0 |
| user2 | User | Two | two@example.com | ldap | 1 |
| user3 | User | Three | three@example.com | manual | 1 |
| user4 | User | Four | four@example.com | ldap | 0 |
And the following "cohorts" exist:
| name | idnumber |
| Cohort 1 | CH1 |
@@ -23,8 +23,8 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
| user2 | C1 | student |
| user3 | C1 | student |
And I log in as "admin"
And I add "User Two (two@asd.com)" user to "CH1" cohort members
And I add "User Three (three@asd.com)" user to "CH1" cohort members
And I add "User Two (two@example.com)" user to "CH1" cohort members
And I add "User Three (three@example.com)" user to "CH1" cohort members
And I follow "Browse list of users"
@javascript
+2 -2
View File
@@ -21,7 +21,7 @@ Feature: Upload users
And I should see "Tom"
And I should see "Jones"
And I should see "verysecret"
And I should see "jonest@someplace.edu"
And I should see "jonest@example.com"
And I should see "Reznor"
And I should see "course1"
And I should see "math102"
@@ -32,7 +32,7 @@ Feature: Upload users
And I follow "Browse list of users"
And I should see "Tom Jones"
And I should see "Trent Reznor"
And I should see "reznor@someplace.edu"
And I should see "reznor@example.com"
And I am on site homepage
And I follow "Maths"
And I expand "Users" node
+3 -3
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_assignmentupgrade';
$plugin->dependencies = array('mod_assign' => 2014110400);
$plugin->dependencies = array('mod_assign' => 2015050500);
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_availabilityconditions';
+2 -14
View File
@@ -99,25 +99,13 @@ if ($options['parallel'] && $options['parallel'] > 1) {
$cwd = getcwd();
$output = null;
$installcomposer = true;
// If behat dependencies not downloaded then do it first, else symfony/process can't be used.
if ($options['parallel'] && !file_exists(__DIR__ . "/../../../../vendor/autoload.php")) {
$installcomposer = false;
testing_update_composer_dependencies();
}
testing_update_composer_dependencies();
// Check whether the behat test environment needs to be updated.
chdir(__DIR__);
exec("php $utilfile --diag $paralleloption", $output, $code);
// Check if composer needs to be updated.
if ($installcomposer &&
($code == BEHAT_EXITCODE_INSTALL || $code == BEHAT_EXITCODE_REINSTALL || $code == BEHAT_EXITCODE_COMPOSER)) {
testing_update_composer_dependencies();
// Check again for behat test site and see if it's install or re-install.
chdir(__DIR__);
exec("php $utilfile --diag $paralleloption", $output, $code);
}
if ($code == 0) {
echo "Behat test environment already installed\n";
+2 -2
View File
@@ -108,7 +108,7 @@ if (extension_loaded('pcntl')) {
$time = microtime(true);
array_walk($unrecognised, function (&$v) {
if ($x = preg_filter("#^(-+\w+)=(.+)#", "\$1='\$2'", $v)) {
if ($x = preg_filter("#^(-+\w+)=(.+)#", "\$1=\"\$2\"", $v)) {
$v = $x;
} else if (!preg_match("#^-#", $v)) {
$v = escapeshellarg($v);
@@ -124,7 +124,7 @@ if ($options['profile']) {
echo "Invalid profile passed: " . $profile;
exit(1);
}
$extraopts[] = '--profile=\'' . $profile . "'";
$extraopts[] = '--profile="' . $profile . '"';
// By default, profile tags will be used.
if (!empty($CFG->behat_config[$profile]['filters']['tags'])) {
$tags = $CFG->behat_config[$profile]['filters']['tags'];
@@ -71,8 +71,8 @@ Feature: Set up contextual data for tests
Scenario: Role overrides
Given the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| student1 | Student | 1 | student1@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
| student1 | Student | 1 | student1@example.com |
And the following "categories" exist:
| name | category | idnumber |
| Cat 1 | 0 | CAT1 |
@@ -102,7 +102,7 @@ Feature: Set up contextual data for tests
Scenario: Add course enrolments
Given the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@asd.com |
| student1 | Student | 1 | student1@example.com |
And the following "courses" exist:
| fullname | shortname | format |
| Course 1 | C1 | topics |
@@ -120,11 +120,11 @@ Feature: Set up contextual data for tests
| Custom student | custom2 | | |
And the following "users" exist:
| username | firstname | lastname | email |
| user1 | User | 1 | user1@moodlemoodle.com |
| user2 | User | 2 | user2@moodlemoodle.com |
| user3 | User | 3 | user3@moodlemoodle.com |
| user4 | User | 4 | user4@moodlemoodle.com |
| user5 | User | 5 | user5@moodlemoodle.com |
| user1 | User | 1 | user1@example.com |
| user2 | User | 2 | user2@example.com |
| user3 | User | 3 | user3@example.com |
| user4 | User | 4 | user4@example.com |
| user5 | User | 5 | user5@example.com |
And the following "categories" exist:
| name | category | idnumber |
| Cat 1 | 0 | CAT1 |
@@ -238,8 +238,8 @@ Feature: Set up contextual data for tests
Scenario: Add relations between users and groups
Given the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@asd.com |
| student2 | Student | 2 | student2@asd.com |
| student1 | Student | 1 | student1@example.com |
| student2 | Student | 2 | student2@example.com |
And the following "courses" exist:
| fullname | shortname |
| Course 1 | C1 |
@@ -279,8 +279,8 @@ Feature: Set up contextual data for tests
| Cat 1 | 0 | CAT1 |
And the following "users" exist:
| username | firstname | lastname | email |
| student1 | Student | 1 | student1@asd.com |
| student2 | Student | 2 | student2@asd.com |
| student1 | Student | 1 | student1@example.com |
| student2 | Student | 2 | student2@example.com |
And the following "cohorts" exist:
| name | idnumber |
| System cohort A | CHSA |
@@ -349,7 +349,7 @@ Feature: Set up contextual data for tests
When I log in as "admin"
And I am on site homepage
And I follow "Course 1"
And I follow "Grades"
And I navigate to "Grades" node in "Course administration"
And I expand "Setup" node
And I follow "Categories and items"
Then I should see "Test Grade Item 1"
@@ -380,7 +380,7 @@ Feature: Set up contextual data for tests
When I log in as "admin"
And I am on site homepage
And I follow "Course 1"
And I follow "Grades"
And I navigate to "Grades" node in "Course administration"
And I follow "Scales"
Then I should see "Test Scale 1"
And I should see "Disappointing, Good, Very good, Excellent"
@@ -432,7 +432,7 @@ Feature: Set up contextual data for tests
When I log in as "admin"
And I am on site homepage
And I follow "Course 1"
And I follow "Grades"
And I navigate to "Grades" node in "Course administration"
And I expand "Setup" node
And I follow "Categories and items"
Then I should see "Test Outcome Grade Item 1"
@@ -7,7 +7,7 @@ Feature: Edit capabilities
Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
@@ -10,9 +10,9 @@ Feature: Verify that all form fields values can be get and set
| Course 1 | C1 | 0 |
And the following "users" exist:
| username | email | firstname | lastname |
| student1 | s1@asd.com | Student | 1 |
| student2 | s2@asd.com | Student | 2 |
| student3 | s3@asd.com | Student | 3 |
| student1 | s1@example.com | Student | 1 |
| student2 | s2@example.com | Student | 2 |
| student3 | s3@example.com | Student | 3 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
@@ -7,7 +7,7 @@ Feature: Forms manipulation
@javascript
Scenario: Basic forms manipulation
Given I log in as "admin"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Edit profile"
When I set the field "First name" to "Field value"
And I set the field "Select a country" to "Japan"
@@ -10,7 +10,7 @@ Feature: Transform steps arguments
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And I log in as "admin"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Edit profile"
@javascript
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014112700;
$plugin->requires = 2014112700;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_filetypes';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_generator';
+2 -2
View File
@@ -25,8 +25,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_health'; // Full name of the plugin (used for diagnostics)
$plugin->maturity = MATURITY_ALPHA; // this version's maturity level
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_innodb'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_installaddon';
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->maturity = MATURITY_STABLE;
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_langimport'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'logstore_legacy'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'logstore_standard'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'tool_log'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_messageinbound';
@@ -203,31 +203,24 @@ class rules extends \table_sql implements \renderable {
/**
* Gets a list of courses where the current user can subscribe to rules as a dropdown.
*
* @param bool $choose A flag for whether to show the 'choose...' option in the select box.
* @return \single_select|bool returns the list of courses, or false if the select box
* should not be displayed.
*/
public function get_user_courses_select() {
global $DB;
// If the number of courses on the site exceed the maximum drop down limit do not display the select box.
$numcourses = $DB->count_records('course');
if ($numcourses > COURSE_MAX_COURSES_PER_DROPDOWN) {
public function get_user_courses_select($choose = false) {
$options = tool_monitor_get_user_courses();
// If we have no options then don't create a select element.
if (!$options) {
return false;
}
$orderby = 'visible DESC, sortorder ASC';
$options = array();
if ($courses = get_user_capability_course('tool/monitor:subscribe', null, true, 'fullname', $orderby)) {
foreach ($courses as $course) {
$options[$course->id] = format_string($course->fullname, true,
array('context' => \context_course::instance($course->id)));
}
}
// If there are no options to display, then don't display anything.
if (count($options) === 0) {
return false;
$selected = $this->courseid;
$nothing = array();
if ($choose) {
$selected = null;
$nothing = array('choosedots');
}
$url = new \moodle_url('/admin/tool/monitor/index.php');
$select = new \single_select($url, 'courseid', $options, $this->courseid);
$select = new \single_select($url, 'courseid', $options, $selected, $nothing);
$select->set_label(get_string('selectacourse', 'tool_monitor'));
return $select;
}
+37 -22
View File
@@ -24,38 +24,58 @@
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->dirroot . '/admin/tool/monitor/lib.php');
$courseid = optional_param('courseid', SITEID, PARAM_INT);
$courseid = optional_param('courseid', 0, PARAM_INT);
$action = optional_param('action', '', PARAM_ALPHA);
$cmid = optional_param('cmid', 0, PARAM_INT);
$ruleid = optional_param('ruleid', 0, PARAM_INT);
$subscriptionid = optional_param('subscriptionid', 0, PARAM_INT);
$confirm = optional_param('confirm', false, PARAM_BOOL);
require_login();
// We need to explicitly check that the course id is something legitimate.
$choose = false;
// Validate course id.
if (empty($courseid)) {
$courseid = SITEID;
require_login();
$context = context_system::instance();
// check system level capability.
if (!has_capability('tool/monitor:subscribe', $context)) {
// If not system level then check to see if they have access to any course level rules.
if (tool_monitor_get_user_courses()){
// Make them choose a course.
$choose = true;
} else {
// return error.
print_error('rulenopermission', 'tool_monitor');
}
}
} else {
// They might want to see rules for this course.
$course = get_course($courseid);
require_login($course);
$context = context_course::instance($course->id);
// Check for caps.
require_capability('tool/monitor:subscribe', $context);
}
$coursecontext = context_course::instance($courseid);
if (!get_config('tool_monitor', 'enablemonitor')) {
// This should never happen as the this page does not appear in navigation when the tool is disabled.
throw new coding_exception('Event monitoring is disabled');
}
$sitename = format_string($SITE->fullname, true, array('context' => $coursecontext));
// Use the user context here so that the header shows user information.
$PAGE->set_context(context_user::instance($USER->id));
// Set up the page.
$indexurl = new moodle_url('/admin/tool/monitor/index.php', array('courseid' => $courseid));
$PAGE->set_url($indexurl);
$PAGE->set_pagelayout('report');
$PAGE->set_title($sitename);
$PAGE->set_title(get_string('managesubscriptions', 'tool_monitor'));
$PAGE->set_heading(fullname($USER));
$settingsnode = $PAGE->settingsnav->find('monitor', null)->make_active();
$settingsnode = $PAGE->settingsnav->find('monitor', null);
if ($settingsnode) {
$settingsnode->make_active();
}
// Create/delete subscription if needed.
if (!empty($action)) {
@@ -86,7 +106,7 @@ if (!empty($action)) {
} else {
$subscription = \tool_monitor\subscription_manager::get_subscription($subscriptionid);
echo $OUTPUT->header();
echo $OUTPUT->confirm(get_string('subareyousure', 'tool_monitor', $subscription->get_name($coursecontext)),
echo $OUTPUT->confirm(get_string('subareyousure', 'tool_monitor', $subscription->get_name($context)),
$confirmurl, $cancelurl);
echo $OUTPUT->footer();
exit();
@@ -104,17 +124,13 @@ $renderer = $PAGE->get_renderer('tool_monitor', 'managesubs');
$totalrules = \tool_monitor\rule_manager::count_rules_by_courseid($courseid);
$rules = new \tool_monitor\output\managesubs\rules('toolmonitorrules', $indexurl, $courseid);
$usercourses = $rules->get_user_courses_select();
if (!empty($usercourses)) {
echo $renderer->render($usercourses);
} else {
// Nothing to show at all. Show a notification.
echo $OUTPUT->notification(get_string('rulenopermission', 'tool_monitor'), 'notifyproblem');
}
$usercourses = $rules->get_user_courses_select($choose);
// There must be user courses otherwise we wouldn't make it this far.
echo $renderer->render($usercourses);
// Render the current subscriptions list.
$totalsubs = \tool_monitor\subscription_manager::count_user_subscriptions();
if (!empty($totalsubs)) {
if (!empty($totalsubs) && !$choose) {
// Show the subscriptions section only if there are subscriptions.
$subs = new \tool_monitor\output\managesubs\subs('toolmonitorsubs', $indexurl, $courseid);
echo $OUTPUT->heading(get_string('currentsubscriptions', 'tool_monitor'), 3);
@@ -122,14 +138,13 @@ if (!empty($totalsubs)) {
}
// Render the potential rules list.
// Check the capability here before displaying any rules to subscribe to.
if (has_capability('tool/monitor:subscribe', $coursecontext)) {
if (!$choose) {
echo $OUTPUT->heading(get_string('rulescansubscribe', 'tool_monitor'), 3);
echo $renderer->render($rules);
}
// Check if the user can manage the course rules we are viewing.
$canmanagerules = has_capability('tool/monitor:managerules', $coursecontext);
$canmanagerules = has_capability('tool/monitor:managerules', $context);
if (empty($totalrules)) {
// No rules present. Show a link to manage rules page if permissions permit.
+33 -12
View File
@@ -79,19 +79,40 @@ function tool_monitor_extend_navigation_user_settings($navigation, $user, $userc
// Don't show the setting if the event monitor isn't turned on. No access to other peoples subscriptions.
if (get_config('tool_monitor', 'enablemonitor') && $USER->id == $user->id) {
// The $course->id will always be the course that corresponds to the current context.
$courseid = $course->id;
// A $course->id of $SITE->id might either be the frontpage or the site. So if we get the site ID back, check the...
// ...courseid parameter passed to the page so we can know if we are looking at the frontpage rules or site level rules.
if ($course->id == $SITE->id && optional_param('courseid', $course->id, PARAM_INT) == 0) {
$courseid = 0;
}
$url = new moodle_url('/admin/tool/monitor/index.php', array('courseid' => $courseid));
$subsnode = navigation_node::create(get_string('managesubscriptions', 'tool_monitor'), $url,
navigation_node::TYPE_SETTING, null, 'monitor', new pix_icon('i/settings', ''));
// Now let's check to see if the user has any courses / site rules that they can subscribe to.
if ($courses = tool_monitor_get_user_courses()) {
$url = new moodle_url('/admin/tool/monitor/index.php');
$subsnode = navigation_node::create(get_string('managesubscriptions', 'tool_monitor'), $url,
navigation_node::TYPE_SETTING, null, 'monitor', new pix_icon('i/settings', ''));
if (isset($subsnode) && !empty($navigation)) {
$navigation->add_node($subsnode);
if (isset($subsnode) && !empty($navigation)) {
$navigation->add_node($subsnode);
}
}
}
}
/**
* Get a list of courses and also include 'Site' for site wide rules.
*
* @return array|bool Returns an array of courses or false if the user has no permission to subscribe to rules.
*/
function tool_monitor_get_user_courses() {
$orderby = 'visible DESC, sortorder ASC';
$options = array();
if (has_capability('tool/monitor:subscribe', context_system::instance())) {
$options[0] = get_string('site');
}
if ($courses = get_user_capability_course('tool/monitor:subscribe', null, true, 'fullname', $orderby)) {
foreach ($courses as $course) {
$options[$course->id] = format_string($course->fullname, true,
array('context' => context_course::instance($course->id)));
}
}
// If there are no courses and there is no site permission then return false.
if (count($options) < 1) {
return false;
} else {
return $options;
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ Feature: tool_monitor_rule
| Course 1 | C1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
@@ -11,8 +11,8 @@ Feature: tool_monitor_subscriptions
| Course 2 | C2 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| teacher2 | Teacher | 2 | teacher2@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
| teacher2 | Teacher | 2 | teacher2@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
@@ -55,7 +55,7 @@ Feature: tool_monitor_subscriptions
Scenario: Subscribe to a rule on course level
Given I log in as "teacher1"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
When I follow "Subscribe to rule \"New rule course level\""
@@ -64,7 +64,7 @@ Feature: tool_monitor_subscriptions
Scenario: Delete a subscription on course level
Given I log in as "teacher1"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
And I follow "Subscribe to rule \"New rule course level\""
@@ -77,7 +77,7 @@ Feature: tool_monitor_subscriptions
Scenario: Subscribe to a rule on site level
Given I log in as "admin"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Acceptance test site"
When I follow "Subscribe to rule \"New rule site level\""
@@ -86,7 +86,7 @@ Feature: tool_monitor_subscriptions
Scenario: Delete a subscription on site level
Given I log in as "admin"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Acceptance test site"
And I follow "Subscribe to rule \"New rule site level\""
@@ -100,11 +100,11 @@ Feature: tool_monitor_subscriptions
Scenario: Receiving notification on site level
Given I log in as "admin"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Messaging"
And I click on "input[name^=tool_monitor_notification_loggedin]" "css_element"
And I press "Save changes"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Acceptance test site"
And I follow "Subscribe to rule \"New rule site level\""
@@ -119,11 +119,11 @@ Feature: tool_monitor_subscriptions
Scenario: Receiving notification on course level
Given I log in as "teacher1"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Messaging"
And I click on "input[name^=tool_monitor_notification_loggedin]" "css_element"
And I press "Save changes"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
And I follow "Subscribe to rule \"New rule course level\""
@@ -139,7 +139,7 @@ Feature: tool_monitor_subscriptions
Scenario: Navigating via quick link to rules
Given I log in as "admin"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
When I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
Then I should see "You can manage rules from the Event monitoring rules page."
@@ -147,7 +147,7 @@ Feature: tool_monitor_subscriptions
And I should see "You can subscribe to rules from the Event monitoring page."
And I log out
And I log in as "teacher1"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
And I should see "You can manage rules from the Event monitoring rules page."
@@ -155,11 +155,12 @@ Feature: tool_monitor_subscriptions
And I should see "You can subscribe to rules from the Event monitoring page."
And I click on "//a[text()='Event monitoring']" "xpath_element"
And the field "courseid" matches value "Course 1"
And I set the field "courseid" to "Choose..."
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I should not see "You can manage rules from the Event monitoring rules page."
And I log out
And I log in as "teacher2"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
And I should not see "You can manage rules the from the Event monitoring rules page."
@@ -170,7 +171,7 @@ Feature: tool_monitor_subscriptions
| tool/monitor:managerules | Prohibit |
And I log out
And I log in as "teacher1"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
When I set the field "Select a course" to "Course 1"
Then I should see "You can manage rules from the Event monitoring rules page."
@@ -178,7 +179,7 @@ Feature: tool_monitor_subscriptions
And I should not see "You can manage rules from the Event monitoring rules page."
And I log out
And I log in as "teacher2"
And I follow "My preferences" in the user menu
And I follow "Preferences" in the user menu
And I follow "Event monitoring"
And I set the field "Select a course" to "Course 1"
And I should not see "You can manage rules from the Event monitoring rules page."
+2 -2
View File
@@ -26,6 +26,6 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2014111001; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'tool_monitor'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_multilangupgrade'; // Full name of the plugin (used for diagnostics)
+3
View File
@@ -39,6 +39,7 @@ require_once(__DIR__.'/../../../../lib/phpunit/bootstraplib.php');
require_once(__DIR__.'/../../../../lib/testing/lib.php');
echo "Initialising Moodle PHPUnit test environment...\n";
testing_update_composer_dependencies();
$output = null;
exec('php --version', $output, $code);
@@ -72,4 +73,6 @@ if ($code == 0) {
passthru("php util.php --buildconfig", $code);
echo "\n";
echo "PHPUnit test environment setup complete.\n";
exit(0);
+2 -2
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_phpunit'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_profiling'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -25,8 +25,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_replace'; // Full name of the plugin (used for diagnostics)
$plugin->maturity = MATURITY_ALPHA; // this version's maturity level
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'tool_spamcleaner'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_task'; // Full name of the plugin (used for diagnostics)
+1 -1
View File
@@ -1 +1 @@
define(["jquery","core/ajax","core/log","core/notification","core/templates","core/config","core/str"],function(a,b,c,d,e,f,g){var h=function(b,f){g.get_string("templateselected","tool_templatelibrary",b).done(function(b){a('[data-region="displaytemplateheader"]').text(b)}).fail(d.exception);var h="@template "+b,i=f.match(/{{!([\s\S]*?)}}/g),j=0;if(null!==i)for(j=0;j<i.length;j++){var k=i[j],l=k.indexOf(h);if(-1!==l){var m=l+h.length+1;k=k.substr(m,k.length-2-m),f=k;break}}a('[data-region="displaytemplatesource"]').text(f);var n=f.match(/Example context \(json\):([\s\S]*)/),o=!1;if(n){var p=n[1].trim();try{o=a.parseJSON(p)}catch(q){c.debug("Could not parse json example context for template."),c.debug(q)}}o?e.render(b,o).done(function(b,c){a('[data-region="displaytemplateexample"]').empty(),a('[data-region="displaytemplateexample"]').append(b),e.runTemplateJS(c)}).fail(d.exception):g.get_string("templatehasnoexample","tool_templatelibrary").done(function(b){a('[data-region="displaytemplateexample"]').text(b)}).fail(d.exception)},i=function(a){var c=a.split("/"),e=c.shift(),g=c.shift();b.call([{methodname:"core_output_load_template",args:{component:e,template:g,themename:f.theme},done:function(b){h(a,b)},fail:d.exception}])};return a('[data-region="list-templates"]').on("click","[data-templatename]",function(){var b=a(this).data("templatename");i(b)}),{}});
define(["jquery","core/ajax","core/log","core/notification","core/templates","core/config","core/str"],function(a,b,c,d,e,f,g){var h=function(a,b){var c="@template "+b,d=0,e=[];if(e=a.match(/{{!([\s\S]*?)}}/g),null!==e)for(d=0;d<e.length;d++){var f=e[d],g=f.indexOf(c);if(-1!==g){var h=g+c.length+1;return f=f.substr(h,f.length-2-h)}}return!1},i=function(b,f,i){g.get_string("templateselected","tool_templatelibrary",b).done(function(b){a('[data-region="displaytemplateheader"]').text(b)}).fail(d.exception);var j=h(f,b);j===!1&&(j=h(i,b)),j&&(f=j),a('[data-region="displaytemplatesource"]').text(f);var k=f.match(/Example context \(json\):([\s\S]*)/),l=!1;if(k){var m=k[1].trim();try{l=a.parseJSON(m)}catch(n){c.debug("Could not parse json example context for template."),c.debug(n)}}l?e.render(b,l).done(function(b,c){a('[data-region="displaytemplateexample"]').empty(),a('[data-region="displaytemplateexample"]').append(b),e.runTemplateJS(c)}).fail(d.exception):g.get_string("templatehasnoexample","tool_templatelibrary").done(function(b){a('[data-region="displaytemplateexample"]').text(b)}).fail(d.exception)},j=function(c){var e=c.split("/"),g=e.shift(),h=e.shift(),j=b.call([{methodname:"core_output_load_template",args:{component:g,template:h,themename:f.theme}},{methodname:"tool_templatelibrary_load_canonical_template",args:{component:g,template:h}}]);a.when.apply(a,j).done(function(a,b){i(c,a,b)}).fail(d.exception)};return a('[data-region="list-templates"]').on("click","[data-templatename]",function(){var b=a(this).data("templatename");j(b)}),{}});
+53 -16
View File
@@ -25,21 +25,20 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
function($, ajax, log, notification, templates, config, str) {
/**
* Handle a template loaded response.
* Search through a template for a template docs comment.
*
* @param {String} templateName The template name
* @param {String} source The template source
* @param {String} templateSource The raw template
* @param {String} templateName The name of the template used to search for docs tag
* @return {String|boolean} the correct comment or false
*/
var templateLoaded = function(templateName, source) {
str.get_string('templateselected', 'tool_templatelibrary', templateName).done(function(s) {
$('[data-region="displaytemplateheader"]').text(s);
}).fail(notification.exception);
var findDocsSection = function(templateSource, templateName) {
// Find the comment section marked with @template component/template.
var marker = "@template " + templateName;
var marker = "@template " + templateName,
i = 0,
sections = [];
var sections = source.match(/{{!([\s\S]*?)}}/g);
var i = 0;
sections = templateSource.match(/{{!([\s\S]*?)}}/g);
// If no sections match - show the entire file.
if (sections !== null) {
@@ -50,11 +49,38 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
// Remove {{! and }} from start and end.
var offset = start + marker.length + 1;
section = section.substr(offset, section.length - 2 - offset);
source = section;
break;
return section;
}
}
}
// No matching comment.
return false;
};
/**
* Handle a template loaded response.
*
* @param {String} templateName The template name
* @param {String} source The template source
* @param {String} originalSource The original template source (not theme overridden)
*/
var templateLoaded = function(templateName, source, originalSource) {
str.get_string('templateselected', 'tool_templatelibrary', templateName).done(function(s) {
$('[data-region="displaytemplateheader"]').text(s);
}).fail(notification.exception);
// Find the comment section marked with @template component/template.
var docs = findDocsSection(source, templateName);
if (docs === false) {
// Docs was not in theme template, try original.
docs = findDocsSection(originalSource, templateName);
}
// If we found a docs section, limit the template library to showing this section.
if (docs) {
source = docs;
}
$('[data-region="displaytemplatesource"]').text(source);
@@ -86,6 +112,7 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
/**
* Load the a template source from Moodle.
*
* @param {String} templateName
*/
var loadTemplate = function(templateName) {
@@ -93,16 +120,26 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
var component = parts.shift();
var name = parts.shift();
ajax.call([{
var promises = ajax.call([{
methodname: 'core_output_load_template',
args:{
component: component,
template: name,
themename: config.theme
},
done: function(source) { templateLoaded(templateName, source); },
fail: notification.exception
}
}, {
methodname: 'tool_templatelibrary_load_canonical_template',
args:{
component: component,
template: name
}
}]);
// When returns a new promise that is resolved when all the passed in promises are resolved.
// The arguments to the done become the values of each resolved promise.
$.when.apply($, promises)
.done( function(source, originalSource) { templateLoaded(templateName, source, originalSource); })
.fail(notification.exception);
};
// Add the event listeners.
+68 -20
View File
@@ -23,10 +23,12 @@
*/
namespace tool_templatelibrary;
use stdClass;
use core_component;
use core\output\mustache_template_finder;
use coding_exception;
use moodle_exception;
use required_capability_exception;
use stdClass;
/**
* API exposed by tool_templatelibrary
@@ -41,52 +43,98 @@ class api {
*
* @param string $component Filter the list to a single component.
* @param string $search Search string to optionally filter the list of templates.
* @param string $themename The name of the current theme.
* @return array[string] Where each template is in the form "component/templatename".
*/
public static function list_templates($component = '', $search = '') {
public static function list_templates($component = '', $search = '', $themename = '') {
global $CFG;
$templatedirs = array();
$results = array();
if ($component != '') {
if ($component !== '') {
// Just look at one component for templates.
$dir = core_component::get_component_directory($component);
if (!$dir) {
return $templatedirs;
}
$dirs = mustache_template_finder::get_template_directories_for_component($component, $themename);
$templatedirs[$component] = $dir . '/templates';
$templatedirs[$component] = $dirs;
} else {
// Look at all the templates dirs for all installed plugins.
$dir = $CFG->libdir . '/templates';
if (!empty($dir) && is_dir($dir)) {
$templatedirs['core'] = $dir;
// Look at all the templates dirs for core.
$templatedirs['core'] = mustache_template_finder::get_template_directories_for_component('core', $themename);
// Look at all the templates dirs for subsystems.
$subsystems = core_component::get_core_subsystems();
foreach ($subsystems as $subsystem => $dir) {
$dir .= '/templates';
if (is_dir($dir)) {
$dirs = mustache_template_finder::get_template_directories_for_component('core_' . $subsystem, $themename);
$templatedirs['core_' . $subsystem] = $dirs;
}
}
// Look at all the templates dirs for plugins.
$plugintypes = core_component::get_plugin_types();
foreach ($plugintypes as $type => $dir) {
$plugins = core_component::get_plugin_list_with_file($type, 'templates', false);
foreach ($plugins as $plugin => $dir) {
if (!empty($dir) && is_dir($dir)) {
$templatedirs[$type . '_' . $plugin] = $dir;
$pluginname = $type . '_' . $plugin;
$dirs = mustache_template_finder::get_template_directories_for_component($pluginname, $themename);
$templatedirs[$pluginname] = $dirs;
}
}
}
}
foreach ($templatedirs as $templatecomponent => $dir) {
// List it.
$files = glob($dir . '/*.mustache');
foreach ($templatedirs as $templatecomponent => $dirs) {
foreach ($dirs as $dir) {
// List it.
$files = glob($dir . '/*.mustache');
foreach ($files as $file) {
$templatename = basename($file, '.mustache');
if ($search == '' || strpos($templatename, $search) !== false) {
$results[] = $templatecomponent . '/' . $templatename;
foreach ($files as $file) {
$templatename = basename($file, '.mustache');
if ($search == '' || strpos($templatename, $search) !== false) {
$results[$templatecomponent . '/' . $templatename] = 1;
}
}
}
}
$results = array_keys($results);
sort($results);
return $results;
}
/**
* Return a mustache template.
* Note - this function differs from the function core_output_load_template
* because it will never return a theme overridden version of a template.
*
* @param string $component The component that holds the template.
* @param string $template The name of the template.
* @return string the template
*/
public static function load_canonical_template($component, $template) {
// Get the list of possible template directories.
$dirs = mustache_template_finder::get_template_directories_for_component($component);
$filename = false;
foreach ($dirs as $dir) {
// Skip theme dirs - we only want the original plugin/core template.
if (strpos($dir, "/theme/") === false) {
$candidate = $dir . $template . '.mustache';
if (file_exists($candidate)) {
$filename = $candidate;
break;
}
}
}
if ($filename === false) {
throw new moodle_exception('filenotfound', 'error');
}
$templatestr = file_get_contents($filename);
return $templatestr;
}
}
@@ -95,4 +95,55 @@ class external extends external_api {
public static function list_templates_returns() {
return new external_multiple_structure(new external_value(PARAM_RAW, 'The template name (format is component/templatename)'));
}
/**
* Returns description of load_canonical_template() parameters.
*
* @return external_function_parameters
*/
public static function load_canonical_template_parameters() {
return new external_function_parameters(
array('component' => new external_value(PARAM_COMPONENT, 'component containing the template'),
'template' => new external_value(PARAM_ALPHANUMEXT, 'name of the template'))
);
}
/**
* Can this function be called directly from ajax?
*
* @return boolean
* @since Moodle 2.9
*/
public static function load_canonical_template_is_allowed_from_ajax() {
return true;
}
/**
* Return a mustache template.
* Note - this function differs from the function core_output_load_template
* because it will never return a theme overridden version of a template.
*
* @param string $component The component that holds the template.
* @param string $template The name of the template.
* @return string the template
*/
public static function load_canonical_template($component, $template) {
$params = self::validate_parameters(self::load_canonical_template_parameters(),
array('component' => $component,
'template' => $template));
$component = $params['component'];
$template = $params['template'];
return api::load_canonical_template($component, $template);
}
/**
* Returns description of load_canonical_template() result value.
*
* @return external_description
*/
public static function load_canonical_template_returns() {
return new external_value(PARAM_RAW, 'template');
}
}
@@ -59,8 +59,8 @@ class list_templates_page implements renderable, templatable {
foreach ($components as $component) {
$info = new stdClass();
$info->component = $component;
if ($component == 'core') {
$info->name = get_string('core_component', 'tool_templatelibrary');
if (strpos($component, 'core') === 0) {
$info->name = get_string('coresubsystem', 'tool_templatelibrary', $component);
} else {
$info->name = $pluginmanager->plugin_name($component);
}
@@ -33,5 +33,12 @@ $functions = array(
'type' => 'read',
'capabilities'=> '',
),
'tool_templatelibrary_load_canonical_template' => array(
'classname' => 'tool_templatelibrary\external',
'methodname' => 'load_canonical_template',
'description' => 'Load a canonical template by name (not the theme overidden one).',
'type' => 'read'
),
);
@@ -24,7 +24,7 @@
$string['all'] = 'All components';
$string['component'] = 'Component';
$string['core_component'] = 'Moodle core';
$string['coresubsystem'] = 'Subsystem ({$a})';
$string['documentation'] = 'Documentation';
$string['example'] = 'Example';
$string['noresults'] = 'No results';
@@ -65,5 +65,19 @@ class tool_templatelibrary_external_testcase extends externallib_advanced_testca
$this->assertEquals($result[0], "tool_templatelibrary/list_templates_page");
}
public function test_load_canonical_template() {
global $CFG;
$originaltheme = $CFG->theme;
// Change the theme to 'base' because it overrides these templates.
$CFG->theme = 'base';
$template = external::load_canonical_template('core', 'notification_problem');
// Only the base template should contain the docs.
$this->assertContains('@template core/notification_problem', $template);
// Restore the original theme.
$CFG->theme = $originaltheme;
}
}
+2 -2
View File
@@ -21,6 +21,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2015021623; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'tool_templatelibrary'; // Full name of the plugin (used for diagnostics).
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_unsuproles'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2014110400; // Requires this Moodle version.
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015050500; // Requires this Moodle version.
$plugin->component = 'tool_uploadcourse'; // Full name of the plugin (used for diagnostics).
+19 -2
View File
@@ -421,8 +421,14 @@ function uu_pre_process_custom_profile_data($data) {
function uu_check_custom_profile_data(&$data) {
global $CFG, $DB;
$noerror = true;
$testuserid = null;
// find custom profile fields and check if data needs to converted.
if (!empty($data['username'])) {
if (preg_match('/id=(.*)"/i', $data['username'], $result)) {
$testuserid = $result[1];
}
}
// Find custom profile fields and check if data needs to converted.
foreach ($data as $key => $value) {
if (preg_match('/^profile_field_/', $key)) {
$shortname = str_replace('profile_field_', '', $key);
@@ -436,9 +442,20 @@ function uu_check_custom_profile_data(&$data) {
$data['status'][] = get_string('invaliduserfield', 'error', $shortname);
$noerror = false;
}
// Check for duplicate value.
if (method_exists($formfield, 'edit_validate_field') ) {
$testuser = new stdClass();
$testuser->{$key} = $value;
$testuser->id = $testuserid;
$err = $formfield->edit_validate_field($testuser);
if (!empty($err[$key])) {
$data['status'][] = $err[$key].' ('.$key.')';
$noerror = false;
}
}
}
}
}
}
return $noerror;
}
}
+2 -2
View File
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_uploaduser'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'tool_xmldb'; // Full name of the plugin (used for diagnostics)
+3 -3
View File
@@ -26,8 +26,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111001; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_cas'; // Full name of the plugin (used for diagnostics)
$plugin->dependencies = array('auth_ldap' => 2014110400);
$plugin->dependencies = array('auth_ldap' => 2015050500);
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_db'; // Full name of the plugin (used for diagnostics)
+4 -4
View File
@@ -142,12 +142,12 @@ class auth_plugin_email extends auth_plugin_base {
$user = get_complete_user_data('username', $username);
if (!empty($user)) {
if ($user->confirmed) {
return AUTH_CONFIRM_ALREADY;
} else if ($user->auth != $this->authtype) {
if ($user->auth != $this->authtype) {
return AUTH_CONFIRM_ERROR;
} else if ($user->secret == $confirmsecret && $user->confirmed) {
return AUTH_CONFIRM_ALREADY;
} else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in
$DB->set_field("user", "confirmed", 1, array("id"=>$user->id));
return AUTH_CONFIRM_OK;
+1 -1
View File
@@ -24,7 +24,7 @@
$string['auth_emaildescription'] = '<p>Email-based self-registration enables a user to create their own account via a \'Create new account\' button on the login page. The user then receives an email containing a secure link to a page where they can confirm their account. Future logins just check the username and password against the stored values in the Moodle database.</p><p>Note: In addition to enabling the plugin, email-based self-registration must also be selected from the self registration drop-down menu on the \'Manage authentication\' page.</p>';
$string['auth_emailnoemail'] = 'Tried to send you an email but failed!';
$string['auth_emailrecaptcha'] = 'Adds a visual/audio confirmation form element to the signup page for email self-registering users. This protects your site against spammers and contributes to a worthwhile cause. See http://www.google.com/recaptcha/learnmore for more details. <br /><em>PHP cURL extension is required.</em>';
$string['auth_emailrecaptcha'] = 'Adds a visual/audio confirmation form element to the sign-up page for email self-registering users. This protects your site against spammers and contributes to a worthwhile cause. See http://www.google.com/recaptcha for more details.';
$string['auth_emailrecaptcha_key'] = 'Enable reCAPTCHA element';
$string['auth_emailsettings'] = 'Settings';
$string['pluginname'] = 'Email-based self-registration';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_email'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_fc'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_imap'; // Full name of the plugin (used for diagnostics)
+6 -5
View File
@@ -607,12 +607,12 @@ class auth_plugin_ldap extends auth_plugin_base {
$user = get_complete_user_data('username', $username);
if (!empty($user)) {
if ($user->confirmed) {
return AUTH_CONFIRM_ALREADY;
} else if ($user->auth != $this->authtype) {
if ($user->auth != $this->authtype) {
return AUTH_CONFIRM_ERROR;
} else if ($user->secret == $confirmsecret && $user->confirmed) {
return AUTH_CONFIRM_ALREADY;
} else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in
if (!$this->user_activate($username)) {
return AUTH_CONFIRM_FAIL;
@@ -1653,7 +1653,8 @@ class auth_plugin_ldap extends auth_plugin_base {
$_SERVER['HTTP_REFERER'] != $CFG->wwwroot &&
$_SERVER['HTTP_REFERER'] != $CFG->wwwroot.'/' &&
$_SERVER['HTTP_REFERER'] != $CFG->httpswwwroot.'/login/' &&
$_SERVER['HTTP_REFERER'] != $CFG->httpswwwroot.'/login/index.php')
$_SERVER['HTTP_REFERER'] != $CFG->httpswwwroot.'/login/index.php' &&
clean_param($_SERVER['HTTP_REFERER'], PARAM_LOCALURL) != '')
? $_SERVER['HTTP_REFERER'] : NULL;
}
+1 -1
View File
@@ -296,7 +296,7 @@ class auth_ldap_plugin_testcase extends advanced_testcase {
'lastnamephonetic' => '最後のお名前のテスト一号',
'firstnamephonetic' => 'お名前のテスト一号',
'alternatename' => 'Alternate Name User Test 1',
'email' => 'usersignuptest1@email.com',
'email' => 'usersignuptest1@example.com',
'description' => 'This is a description for user 1',
'city' => 'Perth',
'country' => 'au',
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111001; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_ldap'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_manual'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_mnet'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_nntp'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_nologin'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_none'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_pam'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_pop3'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_radius'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_shibboleth'; // Full name of the plugin (used for diagnostics)
+2 -2
View File
@@ -16,7 +16,7 @@ Feature: Authentication
Scenario: Log in as an existing admin user filling the form
Given the following "users" exist:
| username | password | firstname | lastname | email |
| testuser | testuser | Test | User | moodle@moodlemoodle.com |
| testuser | testuser | Test | User | moodle@example.com |
And I am on site homepage
When I follow "Log in"
And I set the field "Username" to "testuser"
@@ -27,7 +27,7 @@ Feature: Authentication
Scenario: Log in as an unexisting user filling the form
Given the following "users" exist:
| username | password | firstname | lastname | email |
| testuser | testuser | Test | User | moodle@moodlemoodle.com |
| testuser | testuser | Test | User | moodle@example.com |
And I am on site homepage
When I follow "Log in"
And I set the field "Username" to "testuser"
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2014110400; // Requires this Moodle version
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2015050500; // Requires this Moodle version
$plugin->component = 'auth_webservice'; // Full name of the plugin (used for diagnostics)
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'availability_completion';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'availability_date';
@@ -10,8 +10,8 @@ Feature: availability_grade
| Course 1 | C1 | topics | 1 |
And the following "users" exist:
| username | email |
| teacher1 | t@example.org |
| student1 | s@example.org |
| teacher1 | t@example.com |
| student1 | s@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
@@ -59,8 +59,22 @@ Feature: availability_grade
And I set the field "Grade" to "A1"
And I click on "min" "checkbox" in the ".availability-item" "css_element"
And I set the field "Minimum grade percentage (inclusive)" to "50"
And I click on "max" "checkbox" in the ".availability-item" "css_element"
And I set the field "Maximum grade percentage (exclusive)" to "80"
And I press "Save and return to course"
# Check if disabling a part of the restriction is get saved.
And I open "P3" actions menu
And I click on "Edit settings" "link" in the "P3" activity
And I expand all fieldsets
And I click on "max" "checkbox" in the ".availability-item" "css_element"
And I press "Save and return to course"
And I open "P3" actions menu
And I click on "Edit settings" "link" in the "P3" activity
And I expand all fieldsets
And the field "Maximum grade percentage (exclusive)" matches value ""
And I follow "Course 1"
# Add a Page with a grade condition for 10%.
And I add a "Page" to section "4"
And I set the following fields to these values:
@@ -104,8 +118,8 @@ Feature: availability_grade
# Give the assignment 40%.
And I follow "A1"
And I follow "View/grade all submissions"
# Pick the grade link in the row that has s@example.org in it.
And I click on "//a[contains(@href, 'action=grade') and ancestor::tr/td[normalize-space(.) = 's@example.org']]/img" "xpath_element"
# Pick the grade link in the row that has s@example.com in it.
And I click on "//a[contains(@href, 'action=grade') and ancestor::tr/td[normalize-space(.) = 's@example.com']]/img" "xpath_element"
And I set the field "Grade out of 100" to "40"
And I click on "Save changes" "button"
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'availability_grade';
@@ -94,6 +94,7 @@ M.availability_grade.form.getNode = function(json) {
root.delegate('click', function() {
updateCheckbox(this, true);
M.core_availability.form.update();
}, '.availability_grade input[type=checkbox]');
root.delegate('valuechange', function() {
@@ -1 +1 @@
YUI.add("moodle-availability_grade-form",function(e,t){M.availability_grade=M.availability_grade||{},M.availability_grade.form=e.Object(M.core_availability.plugin),M.availability_grade.form.grades=null,M.availability_grade.form.initInner=function(e){this.grades=e,this.nodesSoFar=0},M.availability_grade.form.getNode=function(t){this.nodesSoFar++;var n="<label>"+M.util.get_string("title","availability_grade")+' <span class="availability-group">'+'<select name="id"><option value="0">'+M.util.get_string("choosedots","moodle")+"</option>";for(var r=0;r<this.grades.length;r++){var i=this.grades[r];n+='<option value="'+i.id+'">'+i.name+"</option>"}n+='</select></span></label> <span class="availability-group"><label><input type="checkbox" name="min"/>'+M.util.get_string("option_min","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_min","availability_grade")+'</span><input type="text" name="minval" title="'+M.util.get_string("label_min","availability_grade")+'"/></label>%</span>'+'<span class="availability-group">'+'<label><input type="checkbox" name="max"/>'+M.util.get_string("option_max","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_max","availability_grade")+'</span><input type="text" name="maxval" title="'+M.util.get_string("label_max","availability_grade")+'"/></label>%</span>';var s=e.Node.create("<span>"+n+"</span>");t.id!==undefined&&s.one("select[name=id] > option[value="+t.id+"]")&&s.one("select[name=id]").set("value",""+t.id),t.min!==undefined&&(s.one("input[name=min]").set("checked",!0),s.one("input[name=minval]").set("value",t.min)),t.max!==undefined&&(s.one("input[name=max]").set("checked",!0),s.one("input[name=maxval]").set("value",t.max));var o=function(e,t){var n=e.ancestor("label").next("label").one("input"),r=e.get("checked");return n.set("disabled",!r),t&&r&&n.focus(),r};s.all("input[type=checkbox]").each(o);if(!M.availability_grade.form.addedEvents){M.availability_grade.form.addedEvents=!0;var u=e.one("#fitem_id_availabilityconditionsjson");u.delegate("change",function(){M.core_availability.form.update()},".availability_grade select[name=id]"),u.delegate("click",function(){o(this,!0)},".availability_grade input[type=checkbox]"),u.delegate("valuechange",function(){M.core_availability.form.update()},".availability_grade input[type=text]")}return s},M.availability_grade.form.fillValue=function(e,t){e.id=parseInt(t.one("select[name=id]").get("value"),10),t.one("input[name=min]").get("checked")&&(e.min=this.getValue("minval",t)),t.one("input[name=max]").get("checked")&&(e.max=this.getValue("maxval",t))},M.availability_grade.form.getValue=function(e,t){var n=t.one("input[name="+e+"]").get("value");if(!/^[0-9]+([.,][0-9]+)?$/.test(n))return n;var r=parseFloat(n.replace(",","."));return r<0||r>100?n:r},M.availability_grade.form.fillErrors=function(e,t){var n={};this.fillValue(n,t),n.id===0&&e.push("availability_grade:error_selectgradeid"),n.min!==undefined&&typeof n.min=="string"||n.max!==undefined&&typeof n.max=="string"?e.push("availability_grade:error_invalidnumber"):n.min!==undefined&&n.max!==undefined&&n.min>=n.max&&e.push("availability_grade:error_backwardrange")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
YUI.add("moodle-availability_grade-form",function(e,t){M.availability_grade=M.availability_grade||{},M.availability_grade.form=e.Object(M.core_availability.plugin),M.availability_grade.form.grades=null,M.availability_grade.form.initInner=function(e){this.grades=e,this.nodesSoFar=0},M.availability_grade.form.getNode=function(t){this.nodesSoFar++;var n="<label>"+M.util.get_string("title","availability_grade")+' <span class="availability-group">'+'<select name="id"><option value="0">'+M.util.get_string("choosedots","moodle")+"</option>";for(var r=0;r<this.grades.length;r++){var i=this.grades[r];n+='<option value="'+i.id+'">'+i.name+"</option>"}n+='</select></span></label> <span class="availability-group"><label><input type="checkbox" name="min"/>'+M.util.get_string("option_min","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_min","availability_grade")+'</span><input type="text" name="minval" title="'+M.util.get_string("label_min","availability_grade")+'"/></label>%</span>'+'<span class="availability-group">'+'<label><input type="checkbox" name="max"/>'+M.util.get_string("option_max","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_max","availability_grade")+'</span><input type="text" name="maxval" title="'+M.util.get_string("label_max","availability_grade")+'"/></label>%</span>';var s=e.Node.create("<span>"+n+"</span>");t.id!==undefined&&s.one("select[name=id] > option[value="+t.id+"]")&&s.one("select[name=id]").set("value",""+t.id),t.min!==undefined&&(s.one("input[name=min]").set("checked",!0),s.one("input[name=minval]").set("value",t.min)),t.max!==undefined&&(s.one("input[name=max]").set("checked",!0),s.one("input[name=maxval]").set("value",t.max));var o=function(e,t){var n=e.ancestor("label").next("label").one("input"),r=e.get("checked");return n.set("disabled",!r),t&&r&&n.focus(),r};s.all("input[type=checkbox]").each(o);if(!M.availability_grade.form.addedEvents){M.availability_grade.form.addedEvents=!0;var u=e.one("#fitem_id_availabilityconditionsjson");u.delegate("change",function(){M.core_availability.form.update()},".availability_grade select[name=id]"),u.delegate("click",function(){o(this,!0),M.core_availability.form.update()},".availability_grade input[type=checkbox]"),u.delegate("valuechange",function(){M.core_availability.form.update()},".availability_grade input[type=text]")}return s},M.availability_grade.form.fillValue=function(e,t){e.id=parseInt(t.one("select[name=id]").get("value"),10),t.one("input[name=min]").get("checked")&&(e.min=this.getValue("minval",t)),t.one("input[name=max]").get("checked")&&(e.max=this.getValue("maxval",t))},M.availability_grade.form.getValue=function(e,t){var n=t.one("input[name="+e+"]").get("value");if(!/^[0-9]+([.,][0-9]+)?$/.test(n))return n;var r=parseFloat(n.replace(",","."));return r<0||r>100?n:r},M.availability_grade.form.fillErrors=function(e,t){var n={};this.fillValue(n,t),n.id===0&&e.push("availability_grade:error_selectgradeid"),n.min!==undefined&&typeof n.min=="string"||n.max!==undefined&&typeof n.max=="string"?e.push("availability_grade:error_invalidnumber"):n.min!==undefined&&n.max!==undefined&&n.min>=n.max&&e.push("availability_grade:error_backwardrange")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
@@ -94,6 +94,7 @@ M.availability_grade.form.getNode = function(json) {
root.delegate('click', function() {
updateCheckbox(this, true);
M.core_availability.form.update();
}, '.availability_grade input[type=checkbox]');
root.delegate('valuechange', function() {
+1
View File
@@ -92,6 +92,7 @@ M.availability_grade.form.getNode = function(json) {
root.delegate('click', function() {
updateCheckbox(this, true);
M.core_availability.form.update();
}, '.availability_grade input[type=checkbox]');
root.delegate('valuechange', function() {
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'availability_group';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'availability_grouping';
@@ -10,8 +10,8 @@ Feature: availability_profile
| Course 1 | C1 | topics | 1 |
And the following "users" exist:
| username | email |
| teacher1 | t@example.org |
| student1 | s@example.org |
| teacher1 | t@example.com |
| student1 | s@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
@@ -37,7 +37,7 @@ Feature: availability_profile
And I click on "Add restriction..." "button"
And I click on "User profile" "button"
And I set the field "User profile field" to "Email address"
And I set the field "Value to compare against" to "s@example.org"
And I set the field "Value to compare against" to "s@example.com"
And I click on ".availability-item .availability-eye img" "css_element"
And I click on "Save and return to course" "button"
@@ -51,7 +51,7 @@ Feature: availability_profile
And I click on "Add restriction..." "button"
And I click on "User profile" "button"
And I set the field "User profile field" to "Email address"
And I set the field "Value to compare against" to "q@example.org"
And I set the field "Value to compare against" to "q@example.com"
And I click on ".availability-item .availability-eye img" "css_element"
And I click on "Save and return to course" "button"
@@ -78,7 +78,7 @@ Feature: availability_profile
# Set field value for user.
And I navigate to "Browse list of users" node in "Site administration > Users > Accounts"
And I click on "a[title=Edit]" "css_element" in the "s@example.org" "table_row"
And I click on "a[title=Edit]" "css_element" in the "s@example.com" "table_row"
And I expand all fieldsets
And I set the field "Super field" to "Bananaman"
And I click on "Update profile" "button"
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2014111000;
$plugin->requires = 2014110400;
$plugin->version = 2015051100;
$plugin->requires = 2015050500;
$plugin->component = 'availability_profile';
@@ -75,7 +75,7 @@ Feature: display_availability
And I press "Add restriction..."
And I click on "User profile" "button" in the "Add restriction..." "dialogue"
And I set the field "User profile field" to "Email address"
And I set the field "Value to compare against" to "email@example.org"
And I set the field "Value to compare against" to "email@example.com"
And I set the field "Method of comparison" to "is equal to"
And I press "Save and return to course"
+10 -2
View File
@@ -125,8 +125,16 @@ abstract class backup implements checksumable {
const OPERATION_BACKUP ='backup'; // We are performing one backup
const OPERATION_RESTORE ='restore';// We are performing one restore
// Version (to keep CFG->backup_version (and release) updated automatically)
const VERSION = 2014111000;
// Version and release (to keep CFG->backup_version (and release) updated automatically).
/**
* Usually same than major release version, this is used to mark important
* point is backup when some behavior/approach channged, in order to allow
* conditional coding based on it.
*/
const VERSION = 2015051100;
/**
* Usually same than major release zero version, mainly for informative/historic purposes.
*/
const RELEASE = '2.9';
}
+3 -3
View File
@@ -299,7 +299,7 @@
<IDNUMBER>891220979</IDNUMBER>
<FIRSTNAME>Admin</FIRSTNAME>
<LASTNAME>User</LASTNAME>
<EMAIL>adamzap@gmail.com</EMAIL>
<EMAIL>adamzap@example.com</EMAIL>
<EMAILSTOP>0</EMAILSTOP>
<ICQ></ICQ>
<SKYPE></SKYPE>
@@ -368,7 +368,7 @@
<IDNUMBER>891111111</IDNUMBER>
<FIRSTNAME>Adam</FIRSTNAME>
<LASTNAME>Zapletal</LASTNAME>
<EMAIL>azaple1@lsu.edu</EMAIL>
<EMAIL>azaple1@example.com</EMAIL>
<EMAILSTOP>0</EMAILSTOP>
<ICQ></ICQ>
<SKYPE></SKYPE>
@@ -481,7 +481,7 @@
<IDNUMBER></IDNUMBER>
<FIRSTNAME>Philip</FIRSTNAME>
<LASTNAME>Cali</LASTNAME>
<EMAIL>pcali1@lsu.edu</EMAIL>
<EMAIL>pcali1@example.com</EMAIL>
<EMAILSTOP>0</EMAILSTOP>
<ICQ></ICQ>
<SKYPE></SKYPE>
+11 -6
View File
@@ -3051,11 +3051,6 @@ class restore_activity_grades_structure_step extends restore_structure_step {
$oldparentid = $data->categoryid;
$courseid = $this->get_courseid();
// make sure top course category exists, all grade items will be associated
// to it. Later, if restoring the whole gradebook, categories will be introduced
$coursecat = grade_category::fetch_course_category($courseid);
$coursecatid = $coursecat->id; // Get the categoryid to be used
$idnumber = null;
if (!empty($data->idnumber)) {
// Don't get any idnumber from course module. Keep them as they are in grade_item->idnumber
@@ -3080,8 +3075,18 @@ class restore_activity_grades_structure_step extends restore_structure_step {
}
}
if (!empty($data->categoryid)) {
// If the grade category id of the grade item being restored belongs to this course
// then it is a fair assumption that this is the correct grade category for the activity
// and we should leave it in place, if not then unset it.
// TODO MDL-34790 Gradebook does not import if target course has gradebook categories.
$conditions = array('id' => $data->categoryid, 'courseid' => $courseid);
if (!$this->task->is_samesite() || !$DB->record_exists('grade_categories', $conditions)) {
unset($data->categoryid);
}
}
unset($data->id);
$data->categoryid = $coursecatid;
$data->courseid = $this->get_courseid();
$data->iteminstance = $this->task->get_activityid();
$data->idnumber = $idnumber;
@@ -11,7 +11,7 @@ Feature: Duplicate activities
| Course 1 | C1 | 0 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
@@ -12,7 +12,7 @@ Feature: Import course's contents into another course
| Course 2 | C2 | 0 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
@@ -11,7 +11,7 @@ Feature: Option to include groups and groupings when importing a course to anoth
| Course 2 | C2 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@asd.com |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
+2 -2
View File
@@ -42,8 +42,8 @@ function core_badges_myprofile_navigation(\core_user\output\myprofile\tree $tree
return true;
}
// Add category.
$category = new core_user\output\myprofile\category('badges', get_string('badges', 'badges'), null);
// Add category. This node should appear after 'contact' so that administration block appears towards the end. Refer MDL-49928.
$category = new core_user\output\myprofile\category('badges', get_string('badges', 'badges'), 'contact');
$tree->add_category($category);
// Determine context.

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