Compare commits

..

297 Commits

Author SHA1 Message Date
Dan Poltawski 382d80646b weekly release 2.9.9+ 2016-11-29 13:32:32 +00:00
Dan Poltawski 9d4c11199e Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-11-29 13:32:31 +00:00
Vladimir Zhirov b99f854795 MDL-57163 installation: fixed "Call to undefined function curl_version" 2016-11-29 14:13:45 +01:00
AMOS bot 89ad5776d4 Automatically generated installer lang files 2016-11-27 00:06:18 +08:00
David Monllao 9bff4d35db weekly release 2.9.9+ 2016-11-25 15:56:35 +08:00
David Monllao 47ccd6b3d7 Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-11-25 15:56:33 +08:00
Damyon Wiese 7724705df1 MDL-57100 JS: Exceptions give exceptions
Exceptions returned from ajax are not in the format expected by the JS, so
an error occurs and the exception popups are not appearing.

Conflicts:
	lib/amd/build/notification.min.js
	lib/amd/src/notification.js
2016-11-23 18:08:14 +00:00
AMOS bot e767bf986d Automatically generated installer lang files 2016-11-23 00:05:44 +08:00
AMOS bot 7747f5f717 Automatically generated installer lang files 2016-11-17 00:05:26 +08:00
Eloy Lafuente (stronk7) da84dd37f3 Moodle release 2.9.9 2016-11-12 20:21:22 +01:00
Eloy Lafuente (stronk7) 3c413110ff Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-11-12 20:21:19 +01:00
AMOS bot 7ba4955f9d Automatically generated installer lang files 2016-11-12 00:29:41 +08:00
Andrew Nicols 8c504c1f0e Merge branch 'MDL-55121-29' of git://github.com/lameze/moodle into MOODLE_29_STABLE 2016-11-11 15:14:36 +08:00
Simey Lameze dfe8919c6c MDL-55121 environment: check for unsuported php version 7.1 2016-11-11 12:35:10 +08:00
Dan Poltawski 5c2adb282f MDL-55777 version: bump 2016-11-10 13:48:39 +00:00
Dan Poltawski bc9fc77b39 Merge branch 'MDL-55777-29' of git://github.com/ankitagarwal/moodle into MOODLE_29_STABLE 2016-11-10 13:46:49 +00:00
Ankit Agarwal 86c22b202d MDL-55777 installation: Check libcurl version on install 2016-11-10 10:24:09 +05:30
Juan Leyva 0ee30fc5b8 MDL-56268 webservice: Format backtrace to avoid display private datawq 2016-11-07 13:15:57 +00:00
AMOS bot f0e38c2ce6 Automatically generated installer lang files 2016-11-07 00:05:18 +08:00
AMOS bot 5c86055249 Automatically generated installer lang files 2016-10-26 00:04:57 +08:00
Simey Lameze 4daa27678a MDL-51347 core_notes: check view notes capability by course context 2016-10-17 16:18:34 +08:00
AMOS bot ec091d8198 Automatically generated installer lang files 2016-10-17 00:07:17 +08:00
AMOS bot f342654ca7 Automatically generated installer lang files 2016-10-15 00:05:17 +08:00
AMOS bot eb28fb4f3a Automatically generated installer lang files 2016-10-12 00:05:27 +08:00
Tim Hunt 3142206102 MDL-53744 question file access: fix access checks 2016-10-10 11:11:26 +08:00
AMOS bot a954d77d37 Automatically generated installer lang files 2016-10-09 00:06:56 +08:00
AMOS bot 7bb24f9884 Automatically generated installer lang files 2016-10-08 00:05:18 +08:00
AMOS bot 3b7c411dcf Automatically generated installer lang files 2016-10-05 00:06:51 +08:00
AMOS bot d4b822cfb1 Automatically generated installer lang files 2016-09-28 00:05:12 +08:00
Juan Leyva f01632affa MDL-56065 user: Fix update_users Web Service
Users won’t be updated if:
- They are admins and the user updating is not
- They are the guest user
- They are mnet users
- They are deleted users
2016-09-26 18:39:30 +02:00
AMOS bot 1dec402e96 Automatically generated installer lang files 2016-09-23 00:05:13 +08:00
AMOS bot cbe5699193 Automatically generated installer lang files 2016-09-20 00:05:01 +08:00
AMOS bot b8a545f8de Automatically generated installer lang files 2016-09-17 00:05:16 +08:00
AMOS bot 93a1739f39 Automatically generated installer lang files 2016-09-16 00:05:36 +08:00
Dan Poltawski 216b71f03e weekly release 2.9.8+ 2016-09-15 11:15:18 +01:00
Jake Dallimore f55a65b0bf MDL-55945 login: fix https support for forgot_password.php 2016-09-15 09:23:45 +08:00
Eloy Lafuente (stronk7) 567ab3d5d1 Moodle release 2.9.8 2016-09-10 22:50:11 +02:00
Eloy Lafuente (stronk7) ebbad9ca59 Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-09-10 22:50:07 +02:00
AMOS bot b2d737b90d Automatically generated installer lang files 2016-08-30 00:05:23 +08:00
AMOS bot db46fe6c59 Automatically generated installer lang files 2016-08-27 00:05:17 +08:00
AMOS bot b31ba08ffa Automatically generated installer lang files 2016-08-25 00:05:53 +08:00
Jake Dallimore 365ecbead3 MDL-50803 login: Remove token from URL in forgot password process
Store the token value in the session and redirect to self, thus
removing the token from the URL and eliminating the problem where
the token is exposed via the http referer header.
2016-08-16 10:29:17 +01:00
AMOS bot 51bde4b0dc Automatically generated installer lang files 2016-08-10 00:05:20 +08:00
AMOS bot 72f8b25b24 Automatically generated installer lang files 2016-08-06 00:05:31 +08:00
Juan Leyva ce75268a2f MDL-49026 webservice: Remove tokens on password change 2016-08-02 09:32:53 +08:00
AMOS bot 2d6e97b5c2 Automatically generated installer lang files 2016-08-02 00:04:49 +08:00
AMOS bot f14fa82b5b Automatically generated installer lang files 2016-07-29 00:06:15 +08:00
AMOS bot 4fd4f002ee Automatically generated installer lang files 2016-07-20 00:05:48 +08:00
AMOS bot 139f1a0ad8 Automatically generated installer lang files 2016-07-16 00:06:08 +08:00
AMOS bot fa8fb6fbe1 Automatically generated installer lang files 2016-07-13 00:05:16 +08:00
AMOS bot 27d127b9c5 Automatically generated installer lang files 2016-07-11 00:06:26 +08:00
Eloy Lafuente (stronk7) 1174a463f3 Moodle release 2.9.7 2016-07-10 00:29:12 +02:00
Eloy Lafuente (stronk7) 33d0756aac Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-07-10 00:29:07 +02:00
Jake Dallimore 41d01a8f98 MDL-53431 tool_monitor: Access control for tool monitor subscriptions 2016-07-05 10:47:02 +08:00
Marina Glancy 67889ed5be MDL-55069 core: escape special characters in email headers 2016-07-04 12:28:09 +01:00
Andrew Nicols 65c1213e00 Merge branch 'MDL-53019_29' of git://github.com/stronk7/moodle into MOODLE_29_STABLE 2016-07-04 09:14:43 +08:00
AMOS bot df4907d146 Automatically generated installer lang files 2016-07-02 00:05:34 +08:00
Eloy Lafuente (stronk7) 85d91d18b4 MDL-53019 environment: 3.2 requirements added
Changes:
 - PHP 5.6.5 required
2016-07-01 13:50:14 +02:00
AMOS bot b0dd37fa73 Automatically generated installer lang files 2016-06-28 00:06:26 +08:00
AMOS bot 4f5fba677a Automatically generated installer lang files 2016-06-22 00:06:50 +08:00
AMOS bot 95ac714f8f Automatically generated installer lang files 2016-06-21 00:06:10 +08:00
AMOS bot 1ea01c9c50 Automatically generated installer lang files 2016-06-21 00:06:09 +08:00
AMOS bot 94587407ec Automatically generated installer lang files 2016-06-20 00:05:26 +08:00
AMOS bot f3076b17b4 Automatically generated installer lang files 2016-06-04 00:04:54 +08:00
AMOS bot b54ac35cb3 Automatically generated installer lang files 2016-06-02 00:04:42 +08:00
AMOS bot 8b3a8b9438 Automatically generated installer lang files 2016-05-25 00:05:08 +08:00
AMOS bot e3e619e845 Automatically generated installer lang files 2016-05-24 00:04:48 +08:00
Dan Poltawski c345c3a460 weekly release 2.9.6+ 2016-05-20 10:15:27 +01:00
Dan Poltawski 81b1e515f4 Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-05-20 10:15:24 +01:00
Andrew Nicols 218d2c0eb3 Merge branch 'wip-mdl-54564-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-05-18 12:27:06 +08:00
Andrew Nicols 81fcfc2065 MDL-54620 rating: Add tests for get_aggregate_string 2016-05-18 12:13:06 +08:00
Andrew Nicols 5c18bd041a Merge branch 'MDL-54620_29' of git://github.com/dmonllao/moodle into MOODLE_29_STABLE 2016-05-18 12:11:49 +08:00
Rajesh Taneja ad1b3e2a11 MDL-54564 behat: Wait after hover, to ensure page is ready 2016-05-18 11:17:32 +08:00
Kevin Wiliarty e647d73811 MDL-54620 ratings: display '0' when aggregate = 0 2016-05-18 07:38:06 +08:00
AMOS bot 554826ec78 Automatically generated installer lang files 2016-05-15 00:05:13 +08:00
AMOS bot d23c5c8c8d Automatically generated installer lang files 2016-05-10 00:05:03 +08:00
Eloy Lafuente (stronk7) 9ea5796a63 Moodle release 2.9.6 2016-05-08 00:23:51 +02:00
Dan Poltawski 061fd45c33 Merge branch 'MDL-54042-29' of git://github.com/damyon/moodle into MOODLE_29_STABLE 2016-05-06 14:09:28 +01:00
Damyon Wiese 178d87e0b6 MDL-54042 user: Add unit test to cover change 2016-05-06 16:43:56 +08:00
Damyon Wiese ebdec47991 MDL-54042 user: Fix debugging in core_user_get_users_by_field
The course object returned by enrol_get_all_users_courses does not include the defaultgroupingid.

This course object is passed to user_get_user_details - which does need
the defaultgroupingid.

All the other group info is returned (groupmode) etc - so it makes sense to also return this extra field.
2016-05-06 16:43:56 +08:00
David Monllao 18c4978bba weekly release 2.9.5+ 2016-05-06 16:14:59 +08:00
David Monllao 383b1ae15d Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-05-06 16:14:57 +08:00
Andrew Nicols b53f8c676c Merge branch 'wip-mdl-53701-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-05-06 10:14:48 +08:00
Dan Poltawski 6cae543378 MDL-54062 bootstrapbase: remove unused less file
This file has never been included in our CSS.
2016-05-06 09:46:46 +08:00
Eloy Lafuente (stronk7) 53a51dab0a MDL-53944 dml: make char2real() for mysql to support decimals
- With the patch, 6 positions of scale accuracy are guaranteed
  per individual casted value.
- Backed with unit tests, both for varchar and clob.
- Added 2 missing tests about uses of the method with params
  and values.

Note: 6 was picked because looking to all databases implementation
postgres was found to be casting to real, aka, 6.
2016-05-06 09:46:45 +08:00
Adam Olley cf0374d303 MDL-54007 mod_assign: Limit unit tests to core plugins
Without this change, the unit tests make assumptions for the output of
mod_assign functions/webservices that do not hold true when 3rd party
submission and feedback plugins are installed.
2016-05-06 09:46:45 +08:00
Simey Lameze 3194244721 MDL-53913 core_user: make parameters consistent across versions 2016-05-06 09:46:44 +08:00
Fred Woolard b1b9ddc302 MDL-53713 core: account for session_start returning false 2016-05-06 09:46:44 +08:00
David Monllao 9e96e0b36f MDL-53750 shibboleth: Passing a var to empty for PHP 5.4 2016-05-06 09:46:44 +08:00
John Okely 93b0e733cc MDL-53750 auth: fix logout bug in shibboleth
Original patch by Dr. Michael Schneider
2016-05-06 09:46:43 +08:00
Frederic Massart 16227d8ef3 MDL-51369 course: Adding tests to cover restoring course info 2016-05-06 09:46:43 +08:00
Frederic Massart 2950f9fb91 MDL-51369 backup: Respect capabilities when restoring course info
In short, when a user is creating a new course they can set
the ID number, shortname, fullname and summary. However, when
they merge a backup into a course they need the permissions to do so.
2016-05-06 09:46:43 +08:00
Frederic Massart 872fe961f8 MDL-53954 user: Prevent locked profile fields from being edited 2016-05-06 09:46:42 +08:00
Andrew Nicols d98c246599 MDL-53755 forum: Check session when marking posts 2016-05-06 09:46:42 +08:00
Andrew Nicols bc890913fe MDL-53696 forum: Check discussion in forum 2016-05-06 09:46:42 +08:00
Tim Hunt 6739845c85 MDL-53589 badges: fix capability check 2016-05-06 09:46:41 +08:00
Dan Marsden aaa49aa835 MDL-53546 SCORM: Set window.opener to null 2016-05-06 09:46:41 +08:00
Rajesh Taneja 8ed8c68dfb MDL-53701 core_lib: use date_format_string for utf8
So when language is different say Hebrew then
it would pic codepage-1255. As  is json_encoded
we need to ensure we get utf8 string. so use
date_format_string instead
2016-05-05 16:36:33 +08:00
AMOS bot 6a59a0b349 Automatically generated installer lang files 2016-05-05 00:04:50 +08:00
Dan Poltawski 1cb6ac499a weekly release 2.9.5+ 2016-05-03 20:38:05 +01:00
Dan Poltawski 9a5709f474 Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-05-03 20:38:03 +01:00
Dan Poltawski efa18040dc Merge branch 'wip-MDL-53402-29-v2' of git://github.com/abgreeve/moodle into MOODLE_29_STABLE 2016-05-03 09:13:29 +01:00
Dan Poltawski f2aa7e7bd9 MDL-54008 tests: clarify comment in tz test 2016-05-03 09:10:31 +01:00
Dan Poltawski fe404e039c Merge branch 'MDL-54008_29-normalise' of git://github.com/dmonllao/moodle into MOODLE_29_STABLE 2016-05-03 09:09:08 +01:00
Adrian Greeve 2a8f372e1c MDL-53402 mod_data: field values of 0 are now displayed. 2016-05-03 15:09:22 +08:00
David Monllao a9cca2b893 MDL-54008 tz: Unexisting tz with decimals fallback to rounded down integer 2016-05-03 14:02:13 +08:00
David Monllao ae77a3d6d1 Merge branch 'wip-MDL-53402-29' of git://github.com/abgreeve/moodle into MOODLE_29_STABLE 2016-05-03 13:03:55 +08:00
Adrian Greeve 85ac3cdbb0 MDL-53402 mod_data: Added custom validation code for data fields.
Added custom validation to radiobutton, menu, and checkbox.
2016-05-03 12:54:49 +08:00
David Monllao 809233d23f Merge branch 'MDL-51142-29' of git://github.com/damyon/moodle into MOODLE_29_STABLE 2016-05-03 09:59:18 +08:00
Dan Poltawski 166a09028f Merge branch 'wip-MDL-53402-29' of git://github.com/abgreeve/moodle into MOODLE_29_STABLE 2016-05-02 17:06:28 +01:00
Dan Poltawski a34068d126 Merge branch 'MDL-54019_m29' of git://github.com/markn86/moodle into MOODLE_29_STABLE 2016-05-02 16:57:14 +01:00
Dan Poltawski 7d0051154e Merge branch 'wip-mdl-53861-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-05-02 16:55:53 +01:00
Mark Nelson d19d7309e6 MDL-54019 core_behat: fixed typo 2016-05-02 18:12:06 +08:00
Dan Poltawski ecccb0d30c Merge branch 'wip_MDL-53033_m29' of git://github.com/gjb2048/moodle into MOODLE_29_STABLE 2016-05-02 10:17:11 +01:00
Dan Poltawski 3ece99e9d0 Merge branch 'MDL-53904-29' of git://github.com/marinaglancy/moodle into MOODLE_29_STABLE 2016-05-02 10:16:38 +01:00
Dan Poltawski 283375144b Merge branch 'MDL-54008_29' of git://github.com/dmonllao/moodle into MOODLE_29_STABLE 2016-05-02 09:52:25 +01:00
Damyon Wiese 6d9f6af6ef MDL-51142 assign: Fix for group assignments with NEW status 2016-05-02 16:44:48 +08:00
Clement Smith 5056eeab3a MDL-51142 mod/assign: Fix erroneous submission status display
This prevents display of submission time/date when the assignment
submission record is in a new state. It also keeps the display of
overdue assignments identical for those students who have viewed
the assignment yet not submitted, for those students who have
not viewed the assignment, and for those students who have not
viewed the assignment yet the instructor has accessed the grading
page.
2016-05-02 16:44:47 +08:00
Rajesh Taneja 99913f0b50 MDL-53861 behat: o/p buffer is not used in Behat 2.5.x
Don't need ob_flush() as o/p is not buffered
in behat 2.5.x
2016-05-02 15:55:18 +08:00
David Monllao 9b9c08cdbb Merge branch 'MDL-53901-29' of git://github.com/damyon/moodle into MOODLE_29_STABLE 2016-05-02 15:54:26 +08:00
David Monllao 4f3a6d382e Merge branch 'MDL-53635-29' of git://github.com/jleyva/moodle into MOODLE_29_STABLE 2016-05-02 15:38:31 +08:00
Juan Leyva 47f7b1e386 MDL-53635 message_airnotifier: Remove tags from notifications 2016-05-02 09:33:29 +02:00
David Monllao e50f5d51a5 MDL-54008 timezone: Updating references to Caracas tz.
I've removed Caracas direct references because it would fail on
some systems, it would depend on how updated is the olson version
PHP is using.
2016-05-02 15:07:20 +08:00
Adrian Greeve 0f8a2d6734 MDL-53402 mod_data: Behat test for entering zero in required fields. 2016-05-02 13:40:10 +08:00
Adrian Greeve c01cbb3e1a MDL-53402 mod_data: Required fields can contain 0.
The number and text field would not accept 0 as a
valid response.
2016-05-02 13:40:05 +08:00
Damyon Wiese 44465eddef MDL-53901 login: Redirect to https if loginhttps is enabled
This just prevents a double redirect.
2016-05-02 11:22:17 +08:00
David Monllao ded031cfc8 Merge branch 'MDL-53980-29-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_29_STABLE 2016-05-02 10:47:59 +08:00
AMOS bot 9a7adbcd32 Automatically generated installer lang files 2016-05-02 00:04:37 +08:00
AMOS bot d3d1f84271 Automatically generated installer lang files 2016-04-30 00:07:10 +08:00
Dan Poltawski 4039f94021 weekly release 2.9.5+ 2016-04-29 12:26:59 +01:00
Andrew Nicols 382274be5b MDL-53858 quiz accessibility: Correct aria-labelledby attribute 2016-04-29 12:14:24 +01:00
Andrew Nicols 9909401af4 Merge branch 'MDL-53858_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-04-29 12:14:23 +01:00
David Monllao c3732af3f3 Merge branch 'MDL-53928_29' of git://github.com/stronk7/moodle into MOODLE_29_STABLE 2016-04-29 12:14:23 +01:00
Helen Foster 180e818331 MDL-53980 lang: Merge English strings from the en_fix language pack 2016-04-29 08:10:32 +02:00
Marina Glancy a94e86d9cc MDL-53904 course: apply default completion when approving request 2016-04-27 15:57:15 +08:00
Henning Bostelmann 2779372c17 MDL-53780 mod_assign: Remove teachers from submission group members 2016-04-26 15:38:01 +01:00
Dan Poltawski 7159a9ab0c Merge branch 'MDL-53855_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-04-26 11:18:31 +01:00
Dan Poltawski 953b8cb7c8 weekly release 2.9.5+ 2016-04-26 09:28:25 +01:00
David Monllao 8c1d988566 Merge branch 'MDL-52550-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE 2016-04-26 11:12:58 +08:00
Dan Poltawski f570ad59cf Merge branch 'MDL-49754-29' of https://github.com/xow/moodle into MOODLE_29_STABLE 2016-04-25 14:38:46 +01:00
Eloy Lafuente (stronk7) 0138da3949 MDL-53928 environment: add xmlreader requirement for 3.1 2016-04-24 01:36:46 +02:00
Eloy Lafuente (stronk7) e7975d1443 weekly release 2.9.5+ 2016-04-22 10:57:04 +02:00
Panagiotis Nikoloutsopoulos 753cde3442 MDL-52550 atto: Added preventDefaults for events dragover and dragenter 2016-04-21 15:11:35 +08:00
Dan Poltawski 38dbbecc4d Merge branch 'wip-MDL-52642-29' of git://github.com/abgreeve/moodle into MOODLE_29_STABLE 2016-04-20 13:48:39 +01:00
Dan Poltawski 9b2faf2056 Merge branch 'MDL-53095-29' of git://github.com/lameze/moodle into MOODLE_29_STABLE 2016-04-20 11:52:16 +01:00
David Monllao af61aeda9b Merge branch 'MDL-53757_m29' of git://github.com/markn86/moodle into MOODLE_29_STABLE 2016-04-20 15:53:42 +08:00
Nick Phillips 9abda98e48 MDL-53757 core_calendar: always show whole day's events in 'day' view 2016-04-20 15:49:41 +08:00
David Monllao be0f46f922 Merge branch 'MDL-53676_29' of https://github.com/wjroes/moodle into MOODLE_29_STABLE 2016-04-20 11:17:07 +08:00
Eloy Lafuente (stronk7) 75dcdc098e Merge branch 'MDL-53660-29' of git://github.com/danpoltawski/moodle into MOODLE_29_STABLE 2016-04-20 01:20:21 +02:00
Andrew Nicols 35720ce43b Merge branch 'MDL-53779-29' of git://github.com/FMCorz/moodle into MOODLE_29_STABLE 2016-04-19 10:37:04 +08:00
Eloy Lafuente (stronk7) 2e97e1fee1 Merge branch 'MDL-53796_29' of git://github.com/dmonllao/moodle into MOODLE_29_STABLE 2016-04-19 01:59:01 +02:00
Tim Hunt 4ead6b97f0 MDL-53858 quiz accessibility: nav block should have role='navigation' 2016-04-18 17:37:22 +01:00
Tim Hunt 46b091a67e MDL-53855 accessibility: navbar should be in exactly one nav region
And that should be labelled.
2016-04-18 16:57:06 +01:00
Eloy Lafuente (stronk7) b61f86a052 weekly release 2.9.5+ 2016-04-15 10:19:14 +02:00
Eloy Lafuente (stronk7) 867824322f Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-04-15 10:19:09 +02:00
Mark Nielsen 92f2b31f74 MDL-53660 mod_forum: Fix link decoding in single discussions
This only happens when user data is not included.
2016-04-13 16:00:58 +01:00
Gareth J Barnard 445312d685 MDL-53033 themes: Invalid attribute values for div.c1.btn. 2016-04-13 12:56:13 +01:00
Dan Poltawski 59d7b59a0b Revert "Merge branch 'MDL-52944-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE"
This reverts commit e0339be416, reversing
changes made to a6d9d5f7e4.
2016-04-13 10:49:08 +01:00
David Risner 54df1bdcf7 MDL-53095 repository_merlot: change merlot url use https 2016-04-13 15:11:49 +08:00
David Monllao 256cd103ba MDL-53796 behat: Move get_debug_text to base class 2016-04-13 10:37:10 +08:00
AMOS bot 48d1f7267b Automatically generated installer lang files 2016-04-13 00:04:34 +08:00
Dan Poltawski bf980316b0 Merge branch 'MDL-52263-29' of git://github.com/crazyserver/moodle into MOODLE_29_STABLE 2016-04-12 16:50:32 +01:00
Pau Ferrer Ocaña 88546dad6b MDL-52263 libraries: Add test cases to external_format_text options 2016-04-12 15:04:46 +02:00
Pau Ferrer Ocaña f32bd23f8f MDL-52263 libraries: Add options to external_format_text 2016-04-12 14:56:19 +02:00
Dan Poltawski e0339be416 Merge branch 'MDL-52944-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE 2016-04-12 13:13:59 +01:00
Frederic Massart fefe867a72 MDL-53779 external: get_string and get_strings use PARAM_RAW
For the string parameters and translated strings.
2016-04-12 17:04:50 +08:00
spvickers eb81e0b50a MDL-49754 mod_lti: Fixes to JSON format
@id elements in JSON corrected to match the IMS spec.  Version number of
the service updated.
2016-04-12 15:50:02 +08:00
Adrian Greeve a1468ef48b MDL-52642 blog: Fix notices for swapping contexts in activities. 2016-04-12 13:55:08 +08:00
Stephen Bourget 795e302ea4 MDL-52642 block_blog_menu: behat test 2016-04-12 13:54:58 +08:00
David Monllao a6d9d5f7e4 Merge branch 'MDL-53007_29_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_29_STABLE 2016-04-12 11:31:41 +08:00
David Monllao ff51028d8d Merge branch 'MDL-53770-29' of git://github.com/marinaglancy/moodle into MOODLE_29_STABLE 2016-04-12 10:54:34 +08:00
Dan Poltawski e43bea4883 Merge branch 'MDL-53417-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE 2016-04-11 16:37:09 +01:00
Dan Poltawski 3f80f680ad Merge branch 'MDL-53674-29-eventmsg' of git://github.com/mudrd8mz/moodle into MOODLE_29_STABLE 2016-04-11 14:29:16 +01:00
Dan Poltawski 5f100892d0 Merge branch 'MDL-53728_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-04-11 14:10:24 +01:00
Dan Poltawski e561b3b818 Merge branch 'MDL-52338-29' of https://github.com/dg711/moodle into MOODLE_29_STABLE 2016-04-11 13:53:22 +01:00
Andrew Nicols 6837221beb MDL-52942 forum: Allow posting to multiple groups in eachuser forums 2016-04-11 12:45:17 +08:00
Devang Gaur 475c4d7ca8 MDL-52338 blocks: message link should not appear when set false 2016-04-11 08:31:22 +05:30
Marina Glancy 95a2aa2e1c MDL-53770 mod_lti: allow to uninstall ltisource plugins 2016-04-11 09:04:46 +08:00
David Mudrák a3ac5646e4 MDL-53674 event monitor: Do not send HTML as plain text formatted emails
There were two problems here.

* The $msgdata->fullmessage was always formatted as HTML even if the
  $msgdata->fullmessageformat was set to the original template's format.
* The plain text part of the emailed message contained HTML code.

The patch makes sure that the original template is always formatted into
HTML and then converted to plain text before setting the text/plain
multipart of the sent email.
2016-04-08 15:15:18 +02:00
Cameron Ball 91a5c94a00 MDL-52944 atto: Use event-key to handle enter key 2016-04-08 12:37:05 +08:00
Panagiotis Nikoloutsopoulos 44019add1f MDL-52944 atto: Contenteditable command 'FormatBlock' set to 'p' 2016-04-08 12:37:04 +08:00
Mark Johnson e938870101 MDL-53007 block_navigation: Set width of item text to prevent overflow 2016-04-07 11:48:03 +01:00
Andrew Nicols 98eb681cc0 weekly release 2.9.5+ 2016-04-07 14:00:36 +08:00
Andrew Nicols d414753678 Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-04-07 14:00:33 +08:00
Willem Roes 451d540527 MDL-53676 block_navigation: fix incorrect array iteration 2016-04-07 07:46:45 +02:00
Rajesh Taneja aab5ef2cbc MDL-52502 behat: Flush buffer to show differences 2016-04-07 09:39:37 +08:00
AMOS bot 378b622a09 Automatically generated installer lang files 2016-04-07 00:05:17 +08:00
Dan Poltawski 888adbee07 Merge branch 'MDL-53000-29' of git://github.com/jleyva/moodle into MOODLE_29_STABLE 2016-04-06 15:48:03 +01:00
Tim Hunt 6e56027b5b MDL-53728 question import/export: improve form structure 2016-04-06 15:36:30 +01:00
Juan Leyva bc1ded6ef4 MDL-53000 mod_assign: Unit tests for get_file_areas 2016-04-06 12:56:58 +02:00
Andrew Nicols ff0cc2dc3c Merge branch 'wip-mdl-53381-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-04-06 12:24:58 +08:00
Rajesh Taneja ec0a000564 MDL-53381 behat: Add support to execute step api
With chain step deprecation, execute api will
help user to execute step api and backport it
2016-04-06 11:00:14 +08:00
Eloy Lafuente (stronk7) e596ea8ca5 Merge branch 'MDL-53115-29' of git://github.com/andrewnicols/moodle into MOODLE_29_STABLE 2016-04-06 03:33:17 +02:00
Andrew Nicols 10c227830e MDL-53461 assign: Unit test regex fix 2016-04-06 08:57:13 +08:00
Andrew Nicols 1b46b00f98 Merge branch 'MDL-53461-29' of git://github.com/crazyserver/moodle into MOODLE_29_STABLE 2016-04-06 08:57:04 +08:00
Eloy Lafuente (stronk7) 1f7044c5b9 MDL-52502 behat: clean 2 uses of method and fix upgrade.txt version 2016-04-06 00:27:23 +02:00
Eloy Lafuente (stronk7) dfaf8c5ad8 Merge branch 'wip-mdl-52502-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-04-06 00:25:16 +02:00
Eloy Lafuente (stronk7) 61b4aaab0a Merge branch 'MDL-53671-29' of git://github.com/dpalou/moodle into MOODLE_29_STABLE 2016-04-06 00:04:45 +02:00
Eloy Lafuente (stronk7) 9b59cfbb52 Merge branch 'MDL-53647_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-04-05 22:00:39 +02:00
Dan Poltawski 01d1a3300b Merge branch 'MDL-53000-29' of git://github.com/jleyva/moodle into MOODLE_29_STABLE 2016-04-05 14:34:14 +01:00
Dan Poltawski aa86e76af8 Merge branch 'MDL-53175-29' of git://github.com/jleyva/moodle into MOODLE_29_STABLE 2016-04-05 12:17:45 +01:00
Pau Ferrer Ocaña de14b56501 MDL-53461 assign: Fix intro images to be shown in the mobile app 2016-04-05 09:33:44 +02:00
Andrew Nicols ef19640b64 Merge branch 'MDL-53500-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE 2016-04-05 12:28:50 +08:00
Rajesh Taneja b2095de913 MDL-52502 behat: Ensure php web and cli version is same 2016-04-05 11:48:26 +08:00
Rajesh Taneja bc4ad1c39e MDL-52502 phpunit: Add php, db and os deatils 2016-04-05 11:48:25 +08:00
Eloy Lafuente (stronk7) d59e64b4f1 Merge branch 'MDL-53256-m29' of https://github.com/micaherne/moodle into MOODLE_29_STABLE 2016-04-04 19:03:02 +02:00
Dan Poltawski 5e01d61014 Merge branch 'wip-MDL-49861-29' of git://github.com/abgreeve/moodle into MOODLE_29_STABLE 2016-04-04 12:10:21 +01:00
Michael Aherne b2c13a1120 MDL-53256 cache: Prevent overwriting of cache config with invalid data 2016-04-04 08:55:39 +01:00
Andrew Nicols a39a67a436 Merge branch 'MDL-53661_29' of https://github.com/sam-moodle/moodle into MOODLE_29_STABLE 2016-04-04 12:26:21 +08:00
Andrew Nicols 27cc73e9e2 MDL-53115 mod_lesson: Remove unnecessary @javascript tags 2016-04-04 08:09:55 +08:00
Andrew Nicols 278ff79d84 MDL-53115 mod_choice: Remove unnecessary @javascript tags 2016-04-04 08:09:23 +08:00
Tim Hunt a8afcb2e4a MDL-53647 quiz summary: keep row class names in synch around headings 2016-04-02 13:23:21 +01:00
Dani Palou 64224cb840 MDL-53671 book: Return whole filepath in book_export_contents 2016-04-01 15:32:32 +02:00
AMOS bot b5f8d6b1a1 Automatically generated installer lang files 2016-04-01 00:05:04 +08:00
Dan Poltawski 4709d5dfcb weekly release 2.9.5+ 2016-03-31 14:06:34 +08:00
Dan Poltawski 9f724212ee Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-03-31 14:06:31 +08:00
Jay Jayswal c8d840561c MDL-53417 glossary: Glossary printer friendly link responsive 2016-03-31 13:59:39 +08:00
Dan Marsden 8f7dc60ad2 MDL-53500 report_outline: Allow parent role to view all activities.
Parents are not enrolled in the course, use $user to generate modinfo
for uservisible checks.
2016-03-31 13:39:03 +08:00
Sam Chaffee d0841d8c4a MDL-53661 mod_lti: Fix lti_prepare_type_for_save forcessl config 2016-03-30 18:30:16 -06:00
Adrian Greeve 66f2486da2 MDL-49861 mod_data: Behat step to test adding records.
Clicking 'Save and add another' should clear the form.
2016-03-30 16:36:40 +08:00
Adrian Greeve 64aaf5ff59 MDL-49861 mod_data: Save and add another button clears fields. 2016-03-30 16:36:21 +08:00
Juan Leyva d77bdd910c MDL-53175 filter: Fix text formatting for the book and page modules 2016-03-30 09:32:35 +01:00
Juan Leyva 7cd6eefe28 MDL-53175 file: Allow file_rewrite_pluginfile_urls to reverse 2016-03-30 09:32:34 +01:00
Eloy Lafuente (stronk7) 7eb83278bb Merge branch 'wip-mdl-49150-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-03-30 00:11:14 +02:00
Eloy Lafuente (stronk7) 616a362577 Merge branch 'MDL-52388-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE 2016-03-29 23:14:36 +02:00
AMOS bot b09ac036dc Automatically generated installer lang files 2016-03-30 00:04:36 +08:00
David Monllao 2e40d98863 Merge branch 'MDL-53356-29' of git://github.com/cameron1729/moodle into MOODLE_29_STABLE 2016-03-29 15:57:25 +08:00
David Monllao cbadf3ac6b Merge branch 'MDL-53432-git-less-css-MOODLE_29_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_29_STABLE 2016-03-29 15:43:50 +08:00
David Monllao c67965f6d7 Merge branch 'wip-mdl-53434-m29' of https://github.com/rajeshtaneja/moodle into MOODLE_29_STABLE 2016-03-29 14:24:11 +08:00
David Monllao f61e80bd87 Merge branch 'MDL-52646_29' of https://github.com/wjroes/moodle into MOODLE_29_STABLE 2016-03-29 12:59:03 +08:00
Dan Poltawski c055478914 Merge branch 'MDL-52976-29' of git://github.com/lameze/moodle into MOODLE_29_STABLE 2016-03-29 10:24:36 +08:00
AMOS bot d5ef4a3706 Automatically generated installer lang files 2016-03-29 00:04:35 +08:00
Brendan Heywood bbd073a455 MDL-53432 core: Treat derived css and js as binary files in git 2016-03-26 22:19:34 +11:00
Dan Poltawski 996a5331ab Merge branch 'wip-MDL-53538-29' of git://github.com/abgreeve/moodle into MOODLE_29_STABLE 2016-03-26 11:37:40 +08:00
Dan Poltawski 27891b6a0d Merge branch 'MDL-53562-forum-reply-re-MOODLE_29_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_29_STABLE 2016-03-26 10:36:39 +08:00
Dan Poltawski 5c65da3a2e MDL-53507 quiz: fix bad htmlid 2016-03-26 10:06:46 +08:00
Dan Poltawski bd9348c532 Merge branch 'MDL-53507_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-03-26 10:06:13 +08:00
Adrian Greeve 3668f28734 MDL-50795 atto: Pasting into atto removes background colour style.
Copying from one atto editor to another comes with a lot of style
information. This removes the color attributes which make the page
look ugly when competing with different themes.
2016-03-26 09:35:34 +08:00
AMOS bot a2e4255a34 Automatically generated installer lang files 2016-03-25 00:04:51 +08:00
Eloy Lafuente (stronk7) 1912e615f7 weekly release 2.9.5+ 2016-03-24 12:58:19 +01:00
Cameron Ball a1c33bf60f MDL-52388 output: Only stop displaying pager next link on last page
Thank you to Brenda Uga for working on this.
2016-03-24 17:20:07 +08:00
Simey Lameze c46180ef04 MDL-52976 core: replace all HTTP_RAW_POST_DATA usages
Backport of the MDL-52976.

This patch replace all usages of HTTP_RAW_POST_DATA that was deprecated on PHP 5.6 by
file_get_contents('php://input'). Only the TinyMCE library has not been updated.
2016-03-24 12:07:51 +08:00
Brendan Heywood 3529bdaa22 MDL-53356 admin: Fixed erroneous sectionerror when upgrade is needed 2016-03-23 16:27:17 +08:00
Dan Poltawski b40e2262d3 Merge branch 'MDL-52952-29-fix' of github.com:xow/moodle into MOODLE_29_STABLE 2016-03-23 12:08:08 +08:00
John Okely e2133abd7b MDL-52952 forms: Ignore autofill catching fields in form change checker 2016-03-23 11:55:56 +08:00
Dan Poltawski 10d22b709c Merge branch 'MDL-53383-29' of git://github.com/andrewnicols/moodle into MOODLE_29_STABLE 2016-03-23 08:31:54 +08:00
Tim Hunt 03edf12b9c MDL-53507 quiz editing: was possible to lose questions
If you dragged a question to the top of the quiz, it could
disappear. Several other cases of dragging questions to the
same place in sequence, but to a different page/section were
also failing, and have been fixed.
2016-03-22 23:05:04 +00:00
Marina Glancy 62a16f7ca0 MDL-45274 mod_feedback: show heading on non-respondents page 2016-03-22 23:05:52 +01:00
Eloy Lafuente (stronk7) f1fcb8e252 Merge branch 'MDL-53547_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-03-22 22:58:55 +01:00
Tim Hunt f7e12e6d14 MDL-53547 logstore_database: better DB driver handling in unit test 2016-03-22 06:46:35 +00:00
Adrian Greeve 922fa7a2f2 MDL-53538 mod_data: Unit test for data_get_advance_search_ids 2016-03-22 14:30:06 +08:00
Adrian Greeve 7055d71865 MDL-53538 mod_data: Show no records message instead of error.
When there are no records in the database module and a user
does an advanced search. Show a message that there are no entries
in the database.
2016-03-22 14:29:56 +08:00
Rajesh Taneja 2084e35009 MDL-49150 behat: Removed unnecessary @javascript tags 2016-03-22 13:57:59 +08:00
Dan Poltawski 069cea91f6 Merge branch 'MDL-52158-29' of https://github.com/xow/moodle into MOODLE_29_STABLE 2016-03-22 10:32:33 +08:00
Eloy Lafuente (stronk7) 06ecd3de42 Merge branch 'MDL-48307-29' of git://github.com/marinaglancy/moodle into MOODLE_29_STABLE 2016-03-22 00:13:00 +01:00
Brendan Heywood acb947d98a MDL-53562 forum: Fixed missing forum subject Re: prefix 2016-03-22 09:26:49 +11:00
Eloy Lafuente (stronk7) d0f1a93260 Merge branch 'MDL-52978_m29' of git://github.com/markn86/moodle into MOODLE_29_STABLE 2016-03-21 23:07:34 +01:00
Willem Roes 2183bea2f8 MDL-52646 mod_scorm: fix missing launch_data for SCORM 2004 2016-03-21 09:03:30 +01:00
Dan Poltawski dda9cf907f Merge branch 'MOODLE_29_STABLE-MDL-53407-editing-css' of https://github.com/Dagefoerde/moodle into MOODLE_29_STABLE 2016-03-21 14:48:44 +08:00
Dan Poltawski f9b568088e Merge branch 'MDL-52952-29' of https://github.com/xow/moodle into MOODLE_29_STABLE 2016-03-21 14:44:20 +08:00
Dan Poltawski 256a84657b Merge branch 'MDL-53239_29' of git://github.com/dmonllao/moodle into MOODLE_29_STABLE 2016-03-21 14:12:14 +08:00
James 4dde5d381e MDL-53383 navigation: Do not require $type in remove()
navigation_node_collection -> remove function broken when $type is null
2016-03-21 12:18:19 +08:00
Dan Poltawski bf56548d60 Merge branch 'MDL-53262-verp-confirm-from-support-MOODLE_29_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_29_STABLE 2016-03-21 11:37:37 +08:00
Dan Poltawski 7aee70bd08 Merge branch 'MDL-53489_29' of git://github.com/timhunt/moodle into MOODLE_29_STABLE 2016-03-21 11:02:05 +08:00
Jay Jayswal 67405a0d68 MDL-52158 auth: Improve recaptcha settings and help 2016-03-21 10:32:25 +08:00
Dan Poltawski b8b55ad3f4 Merge branch 'MDL-53548-m29' of https://github.com/sammarshallou/moodle into MOODLE_29_STABLE 2016-03-21 09:20:36 +08:00
Brendan Heywood bbf6676fb4 MDL-53262 inboundmessage: Fix inconsistent confirm From vs email body 2016-03-20 15:53:05 +11:00
sam marshall af22f8a159 MDL-53548 Accessibility: Block show/hide keyboard access broken 2016-03-18 13:49:04 +00:00
Grigory Baleevskiy 5ff9e45817 MDL-52978 core_lib: fixed wrong days showing for dates in datepicker 2016-03-18 12:31:21 +08:00
Eloy Lafuente (stronk7) 389ba35049 weekly release 2.9.5+ 2016-03-17 14:00:35 +01:00
Eloy Lafuente (stronk7) be454c9310 Merge branch 'install_29_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_29_STABLE 2016-03-17 14:00:31 +01:00
David Monllao 4e285f7f45 MDL-53239 grader report: Add all names to error msg 2016-03-17 10:57:44 +08:00
Dan Poltawski ea26ec7524 Revert "MDL-52133 mod_assign: Pass userid param when saving grade"
This reverts commit 9ba2218a2a.
2016-03-17 09:30:52 +08:00
Andrew Nicols c0ed242820 Merge branch 'MDL-51828-29' of git://github.com/FMCorz/moodle into MOODLE_29_STABLE 2016-03-16 10:04:10 +08:00
Frederic Massart 352c88f166 MDL-51828 repository_wikimedia: Always use PNG for SVG files 2016-03-16 09:52:42 +08:00
Eloy Lafuente (stronk7) 263be92760 Merge branch 'MDL-53139-29' of https://github.com/dg711/moodle into MOODLE_29_STABLE 2016-03-16 00:19:11 +01:00
Eloy Lafuente (stronk7) 8489c94238 Merge branch 'MDL-53430-29' of git://github.com/merrill-oakland/moodle into MOODLE_29_STABLE 2016-03-16 00:05:41 +01:00
Eloy Lafuente (stronk7) feed83488b Merge branch 'mdl-53133-m29' of git://github.com/deraadt/moodle into MOODLE_29_STABLE 2016-03-15 23:53:56 +01:00
Russell Smith bfc7fd680e MDL-53323 profiling: Close session as early as possible. 2016-03-15 21:21:24 +01:00
Tim Hunt ba84a7e3f4 MDL-53489 quiz editing: fix display of long section headings 2016-03-15 18:36:21 +00:00
AMOS bot 14f7892048 Automatically generated installer lang files 2016-03-16 00:04:25 +08:00
Andrew Nicols 3648a75ef1 Merge branch 'MDL-53234-support-email-MOODLE_29_STABLE' of https://github.com/brendanheywood/moodle into MOODLE_29_STABLE 2016-03-15 13:44:10 +08:00
Andrew Nicols 627cfe2398 Merge branch 'MDL-53351-29-lti-notice' of git://github.com/mudrd8mz/moodle into MOODLE_29_STABLE 2016-03-15 12:50:00 +08:00
David Monllao 905626ba79 MDL-53176 grades: Fix upgrade version 2016-03-14 14:10:09 +08:00
David Monllao d67e511a9a Merge branch 'MDL-53176-29' of git://github.com/merrill-oakland/moodle into MOODLE_29_STABLE
Conflicts:
	version.php
2016-03-14 14:08:55 +08:00
Rajesh Taneja e600e7c368 MDL-53434 behat: Improved exit status of parallel run
Exit status should contain pass/fail information
of each run it is executing. Every bit of status
will have information of pass/fail status of parallel
process
2016-03-11 21:08:26 +08:00
Rajesh Taneja 6967933d4a MDL-53434 behat: Added support for $CFG->behat_profiles
This config will be supported to avoid broken configuration
in future. As this is limited, we need will still use
->behat_config to set config values which can't be set by
behat_profiles
2016-03-11 21:08:10 +08:00
dg711 75a2731b32 MDL-53139 admin: case diff issue with email 2016-03-11 16:29:29 +05:30
John Okely 73e226c971 MDL-52952 forms: Fix chrome autofilling passwords again
In MDL-45772 a hack was introduced to some forms to stop browsers from
putting the user's password into password fields in forms unrelated to
logging in.

Chrome now no longer fills the user's password in the first password
field in the page. There now needs to be a plain text input above it
for the username too.
2016-03-11 10:33:56 +08:00
Eric Merrill b53f9ed5f1 MDL-53430 dml: Fix recordset_walk for additional parameters 2016-03-10 16:33:25 -05:00
Eric Merrill be7a01b355 MDL-53176 grades: Adding index to improve history search
Backport of MDL-50385
2016-03-10 12:00:45 -05:00
Jan C. Dageförde dbade23e87 MDL-53407 themes: Add CSS class editing only if appropriate
The CSS class `editing` should only be added if the user is in editing
mode AND she is allowed to edit the rendered page. `user_is_editing()`
achieves exactly this, without changing behaviour for the appropriate
pages.
2016-03-10 10:43:51 +01:00
Brendan Heywood 2e735a14f9 MDL-53234 admin: Fixed wrong default support email bug 2016-03-09 20:56:35 +11:00
Michael de Raadt 9ba2218a2a MDL-52133 mod_assign: Pass userid param when saving grade 2016-03-09 15:30:44 +11:00
David Mudrák dcf6ffd131 MDL-53351 lti: Do not throw PHP notice when deleting LTI instance
The typeid=0 is a valid and common value representing "Automatic, based
on launch URL" type. In that case, no record in the lti_types table is
found. Thence attempting to access its toolproxyid property used to
throw PHP notice.
2016-03-04 17:03:58 +01:00
Marina Glancy aa7c4bed07 MDL-48307 mod_wiki: protect [edit] section link from nwiki parser 2016-02-26 13:27:54 +08:00
Juan Leyva 7d3472a753 MDL-53000 mod_assign: Add missing get_file_areas in editpdf subplugin 2016-02-09 11:34:30 +01:00
265 changed files with 4019 additions and 781 deletions
+4
View File
@@ -0,0 +1,4 @@
**/yui/build/** -diff
**/amd/build/** -diff
theme/bootstrapbase/style/editor.css -diff
theme/bootstrapbase/style/moodle.css -diff
+174
View File
@@ -1145,6 +1145,11 @@
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="2.8" requires="2.2">
@@ -1418,6 +1423,11 @@
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.0" requires="2.2">
@@ -1434,6 +1444,7 @@
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.4.4" level="required">
<RESTRICT function="restrict_php_version_71" message="unsupportedphpversion71" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -1556,6 +1567,11 @@
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.1" requires="2.7">
@@ -1572,6 +1588,7 @@
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.4.4" level="required">
<RESTRICT function="restrict_php_version_71" message="unsupportedphpversion71" />
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
@@ -1647,6 +1664,8 @@
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="optional">
<FEEDBACK>
<ON_CHECK message="intlrecommended" />
@@ -1694,6 +1713,161 @@
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.2" requires="2.7">
<UNICODE level="required">
<FEEDBACK>
<ON_ERROR message="unicoderequired" />
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mariadb" version="5.5.31" />
<VENDOR name="mysql" version="5.5.31" />
<VENDOR name="postgres" version="9.1" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="5.6.5" level="required">
</PHP>
<PCREUNICODE level="optional">
<FEEDBACK>
<ON_CHECK message="pcreunicodewarning" />
</FEEDBACK>
</PCREUNICODE>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="required">
<FEEDBACK>
<ON_ERROR message="iconvrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="mbstring" level="optional">
<FEEDBACK>
<ON_CHECK message="mbstringrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="curl" level="required">
<FEEDBACK>
<ON_ERROR message="curlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="openssl" level="optional">
<FEEDBACK>
<ON_CHECK message="opensslrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="tokenizer" level="optional">
<FEEDBACK>
<ON_CHECK message="tokenizerrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlrpc" level="optional">
<FEEDBACK>
<ON_CHECK message="xmlrpcrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="soap" level="optional">
<FEEDBACK>
<ON_CHECK message="soaprecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="ctype" level="required">
<FEEDBACK>
<ON_ERROR message="ctyperequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zip" level="required">
<FEEDBACK>
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="zlib" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="gd" level="required">
<FEEDBACK>
<ON_ERROR message="gdrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_ERROR message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="spl" level="required">
<FEEDBACK>
<ON_ERROR message="splrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="pcre" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="dom" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xml" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="xmlreader" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="intl" level="optional">
<FEEDBACK>
<ON_CHECK message="intlrecommended" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="96M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="opcache.enable" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="opcacherecommended" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbstorageengine" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
<FEEDBACK>
<ON_ERROR message="quizattemptsupgradedmessage" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
<FEEDBACK>
<ON_CHECK message="slashargumentswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
<FEEDBACK>
<ON_CHECK message="unsupporteddbtablerowformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_unoconv_version" level="optional">
<FEEDBACK>
<ON_CHECK message="unoconvwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
<FEEDBACK>
<ON_CHECK message="libcurlwarning" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+5 -1
View File
@@ -20,7 +20,11 @@ $adminroot = admin_get_root(); // need all settings
$settingspage = $adminroot->locate($section, true);
if (empty($settingspage) or !($settingspage instanceof admin_settingpage)) {
print_error('sectionerror', 'admin', "$CFG->wwwroot/$CFG->admin/");
if (moodle_needs_upgrading()) {
redirect(new moodle_url('/admin/index.php'));
} else {
print_error('sectionerror', 'admin', "$CFG->wwwroot/$CFG->admin/");
}
die;
}
+4 -5
View File
@@ -18,11 +18,10 @@ $ADMIN->add('server', $temp);
// "supportcontact" settingpage
$temp = new admin_settingpage('supportcontact', new lang_string('supportcontact','admin'));
if (isloggedin()) {
global $USER;
$primaryadminemail = $USER->email;
$primaryadminname = fullname($USER, true);
$primaryadmin = get_admin();
if ($primaryadmin) {
$primaryadminemail = $primaryadmin->email;
$primaryadminname = fullname($primaryadmin, true);
} else {
// no defaults during installation - admin user must be created first
$primaryadminemail = NULL;
-2
View File
@@ -27,7 +27,6 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
And I add "User Three (three@example.com)" user to "CH1" cohort members
And I follow "Browse list of users"
@javascript
Scenario: Filter user accounts by role and cohort
When I set the following fields to these values:
| courserole_rl | Student |
@@ -51,7 +50,6 @@ Feature: An administrator can filter user accounts by role, cohort and other pro
And I should see "User Three"
And I should see "User Four"
@javascript
Scenario: Filter user accounts by confirm and authentication method
When I set the following fields to these values:
| Confirmed | No |
+12 -7
View File
@@ -120,8 +120,8 @@ $tags = '';
if ($options['profile']) {
$profile = $options['profile'];
if (!isset($CFG->behat_config[$profile])) {
echo "Invalid profile passed: " . $profile;
if (!isset($CFG->behat_config[$profile]) && !isset($CFG->behat_profiles[$profile])) {
echo "Invalid profile passed: " . $profile . PHP_EOL;
exit(1);
}
$extraopts[] = '--profile="' . $profile . '"';
@@ -226,22 +226,27 @@ $exitcodes = print_combined_run_output($processes, $stoponfail);
$time = round(microtime(true) - $time, 1);
echo "Finished in " . gmdate("G\h i\m s\s", $time) . PHP_EOL . PHP_EOL;
ksort($exitcodes);
// Print exit info from each run.
$status = false;
// Status bits contains pass/fail status of parallel runs.
$status = 0;
$processcounter = 0;
foreach ($exitcodes as $exitcode) {
$status = (bool)$status || (bool)$exitcode;
if ($exitcode) {
$status |= (1 << $processcounter);
}
$processcounter++;
}
// Run finished. Show exit code and output from individual process.
$verbose = empty($options['verbose']) ? false : true;
$verbose = $verbose || $status;
$verbose = $verbose || !empty($status);
// Show exit code from each process, if any process failed.
if ($verbose) {
// Echo exit codes.
echo "Exit codes for each behat run: " . PHP_EOL;
ksort($exitcodes);
foreach ($exitcodes as $run => $exitcode) {
echo $run . ": " . $exitcode . PHP_EOL;
}
@@ -263,7 +268,7 @@ print_each_process_info($processes, $verbose);
// Remove site symlink if necessary.
behat_config_manager::drop_parallel_site_links();
exit((int) $status);
exit($status);
/**
* Signal handler for terminal exit.
+1
View File
@@ -173,6 +173,7 @@ if ($options['install']) {
// This is only displayed once for parallel install.
if (empty($options['run'])) {
$runtestscommand = behat_command::get_behat_command(true, !empty($options['run']));
$runtestscommand .= ' --config ' . behat_config_manager::get_behat_cli_config_filepath();
@@ -0,0 +1,34 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Display environment used for running behat.
*
* This file is used for behat testing to ensure cli and apache
* version of environment is same.
*
* @package tool_behat
* @copyright 2016 onwards Rajesh Taneja
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__.'/../../../../../../config.php');
// Only continue for behat site.
defined('BEHAT_SITE_RUNNING') || die();
require_once($CFG->libdir.'/behat/classes/util.php');
echo json_encode(behat_util::get_environment(), true);
@@ -52,8 +52,7 @@ class logstore_database_store_testcase extends advanced_testcase {
$this->assertCount(0, $stores);
// Fake the settings, we will abuse the standard plugin table here...
$parts = explode('_', get_class($DB));
set_config('dbdriver', $parts[1] . '/' . $parts[0], 'logstore_database');
set_config('dbdriver', $CFG->dblibrary . '/' . $CFG->dbtype, 'logstore_database');
set_config('dbhost', $CFG->dbhost, 'logstore_database');
set_config('dbuser', $CFG->dbuser, 'logstore_database');
set_config('dbpass', $CFG->dbpass, 'logstore_database');
@@ -898,7 +898,7 @@ class manager {
$userfrom->customheaders[] = 'In-Reply-To: ' . $messageid;
// The message will be sent from the intended user.
$eventdata->userfrom = \core_user::get_noreply_user();
$eventdata->userfrom = \core_user::get_support_user();
$eventdata->userto = $USER;
$eventdata->subject = $this->get_reply_subject($this->currentmessagedata->envelope->subject);
$eventdata->fullmessage = get_string('invalidrecipientdescription', 'tool_messageinbound', $this->currentmessagedata);
@@ -140,6 +140,10 @@ class eventobservers {
$subscriptions = subscription_manager::get_subscriptions_by_event($eventobj);
$idstosend = array();
foreach ($subscriptions as $subscription) {
// Only proceed to fire events and notifications if the subscription is active.
if (!subscription_manager::subscription_is_active($subscription)) {
continue;
}
$starttime = $now - $subscription->timewindow;
$starttime = ($starttime > $subscription->lastnotificationsent) ? $starttime : $subscription->lastnotificationsent;
if ($subscription->courseid == 0) {
@@ -82,15 +82,16 @@ class notification_task extends \core\task\adhoc_task {
$template = $subscription->template;
$template = $this->replace_placeholders($template, $subscription, $eventobj, $context);
$htmlmessage = format_text($template, $subscription->templateformat, array('context' => $context));
$msgdata = new \stdClass();
$msgdata->component = 'tool_monitor'; // Your component name.
$msgdata->name = 'notification'; // This is the message name from messages.php.
$msgdata->userfrom = \core_user::get_noreply_user();
$msgdata->userto = $user;
$msgdata->subject = $subscription->get_name($context);
$msgdata->fullmessage = format_text($template, $subscription->templateformat, array('context' => $context));
$msgdata->fullmessageformat = $subscription->templateformat;
$msgdata->fullmessagehtml = format_text($template, $subscription->templateformat, array('context' => $context));
$msgdata->fullmessage = html_to_text($htmlmessage);
$msgdata->fullmessageformat = FORMAT_PLAIN;
$msgdata->fullmessagehtml = $htmlmessage;
$msgdata->smallmessage = '';
$msgdata->notification = 1; // This is only set to 0 for personal messages between users.
+11 -2
View File
@@ -55,17 +55,26 @@ class subscription {
* Magic get method.
*
* @param string $prop property to get.
*
* @return mixed
* @throws \coding_exception
*/
public function __get($prop) {
if (property_exists($this->subscription, $prop)) {
if (isset($this->subscription->$prop)) {
return $this->subscription->$prop;
}
throw new \coding_exception('Property "' . $prop . '" doesn\'t exist');
}
/**
* Magic isset method.
*
* @param string $prop the property to get.
* @return bool true if the property is set, false otherwise.
*/
public function __isset($prop) {
return property_exists($this->subscription, $prop);
}
/**
* Get a human readable name for instances associated with this subscription.
*
@@ -35,6 +35,10 @@ defined('MOODLE_INTERNAL') || die();
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class subscription_manager {
/** @const Period of time, in days, after which an inactive subscription will be removed completely.*/
const INACTIVE_SUBSCRIPTION_LIFESPAN_IN_DAYS = 30;
/**
* Subscribe a user to a given rule.
*
@@ -456,4 +460,78 @@ class subscription_manager {
return false;
}
/**
* Activates a group of subscriptions based on an input array of ids.
*
* @since 2.9.7
* @param array $ids of subscription ids.
* @return bool true if the operation was successful, false otherwise.
*/
public static function activate_subscriptions(array $ids) {
global $DB;
if (!empty($ids)) {
list($sql, $params) = $DB->get_in_or_equal($ids);
$success = $DB->set_field_select('tool_monitor_subscriptions', 'inactivedate', '0', 'id ' . $sql, $params);
return $success;
}
return false;
}
/**
* Deactivates a group of subscriptions based on an input array of ids.
*
* @since 2.9.7
* @param array $ids of subscription ids.
* @return bool true if the operation was successful, false otherwise.
*/
public static function deactivate_subscriptions(array $ids) {
global $DB;
if (!empty($ids)) {
$inactivedate = time();
list($sql, $params) = $DB->get_in_or_equal($ids);
$success = $DB->set_field_select('tool_monitor_subscriptions', 'inactivedate', $inactivedate, 'id ' . $sql,
$params);
return $success;
}
return false;
}
/**
* Deletes subscriptions which have been inactive for a period of time.
*
* @since 2.9.7
* @param int $userid if provided, only this user's stale subscriptions will be deleted.
* @return bool true if the operation was successful, false otherwise.
*/
public static function delete_stale_subscriptions($userid = 0) {
global $DB;
// Get the expiry duration, in days.
$cutofftime = strtotime("-" . self::INACTIVE_SUBSCRIPTION_LIFESPAN_IN_DAYS . " days", time());
if (!empty($userid)) {
// Remove any stale subscriptions for the desired user only.
$success = $DB->delete_records_select('tool_monitor_subscriptions',
'userid = ? AND inactivedate < ? AND inactivedate <> 0',
array($userid, $cutofftime));
} else {
// Remove all stale subscriptions.
$success = $DB->delete_records_select('tool_monitor_subscriptions',
'inactivedate < ? AND inactivedate <> 0',
array($cutofftime));
}
return $success;
}
/**
* Check whether a subscription is active.
*
* @since 2.9.7
* @param \tool_monitor\subscription $subscription instance.
* @return bool true if the subscription is active, false otherwise.
*/
public static function subscription_is_active(subscription $subscription) {
return empty($subscription->inactivedate);
}
}
@@ -0,0 +1,274 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace tool_monitor\task;
use tool_monitor\subscription;
use tool_monitor\subscription_manager;
/**
* Simple task class responsible for activating, deactivating and removing subscriptions.
*
* Activation/deactivation is managed by looking at the same access rules used to determine whether a user can
* subscribe to the rule in the first place.
*
* Removal occurs when a subscription has been inactive for a period of time exceeding the lifespan, as set by
* subscription_manager::get_inactive_subscription_lifespan().
*
* I.e.
* - Activation: If a user can subscribe currently, then an existing subscription should be made active.
* - Deactivation: If a user cannot subscribe currently, then an existing subscription should be made inactive.
* - Removal: If a user has a subscription that has been inactive for longer than the prescribed period, then
* delete the subscription entirely.
*
* @since 2.9.7
* @package tool_monitor
* @copyright 2016 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class check_subscriptions extends \core\task\scheduled_task {
/** @var array 1d static cache, indexed by userid, storing whether or not the user has been fully set up.*/
protected $userssetupcache = array();
/** @var array 2d static cache, indexed by courseid and userid, storing whether a user can access the course with
* the 'tool/monitor:subscribe' capability.
*/
protected $courseaccesscache = array();
/**
* Get a descriptive name for this task.
*
* @since 2.9.7
* @return string name of the task.
*/
public function get_name() {
return get_string('taskchecksubscriptions', 'tool_monitor');
}
/**
* Checks all course-level rule subscriptions and activates/deactivates based on current course access.
*
* The ordering of checks within the task is important for optimisation purposes. The aim is to be able to make a decision
* about whether to activate/deactivate each subscription without making unnecessary checks. The ordering roughly follows the
* context model, starting with system and user checks and moving down to course and course-module only when necessary.
*
* For example, if the user is suspended, then any active subscription is made inactive right away. I.e. there is no need to
* check site-level, course-level or course-module-level permissions. Likewise, if a subscriptions is site-level, there is no
* need to check course-level and course-module-level permissions.
*
* The task performs the following checks, in this order:
* 1. Check for a suspended user, breaking if suspended.
* 2. Check for an incomplete (not set up) user, breaking if not fully set up.
* 3. Check for the required capability in the relevant context, breaking if the capability is not found.
* 4. Check whether the subscription is site-context, breaking if true.
* 5. Check whether the user has course access, breaking only if the subscription is not also course-module-level.
* 6. Check whether the user has course-module access.
*
* @since 2.9.7
*/
public function execute() {
global $DB;
if (!get_config('tool_monitor', 'enablemonitor')) {
return; // The tool is disabled. Nothing to do.
}
$toactivate = array(); // Store the ids of subscriptions to be activated upon completion.
$todeactivate = array(); // Store the ids of subscriptions to be deactivated upon completion.
// Resultset rows are ordered by userid and courseid to work nicely with get_fast_modinfo() caching.
$sql = "SELECT u.id AS userid, u.firstname AS userfirstname, u.lastname AS userlastname, u.suspended AS usersuspended,
u.email AS useremail, c.visible as coursevisible, c.cacherev as coursecacherev, s.courseid AS subcourseid,
s.userid AS subuserid, s.cmid AS subcmid, s.inactivedate AS subinactivedate, s.id AS subid
FROM {user} u
JOIN {tool_monitor_subscriptions} s ON (s.userid = u.id)
LEFT JOIN {course} c ON (c.id = s.courseid)
WHERE u.id = s.userid
ORDER BY s.userid, s.courseid";
$rs = $DB->get_recordset_sql($sql);
foreach ($rs as $row) {
// Create skeleton records from the result. This should be enough to use in subsequent access calls and avoids DB hits.
$sub = $this->get_subscription_from_rowdata($row);
$sub = new subscription($sub);
if (!isset($user) || $user->id != $sub->userid) {
$user= $this->get_user_from_rowdata($row);
}
if ((!isset($course) || $course->id != $sub->courseid) && !empty($sub->courseid)) {
$course = $this->get_course_from_rowdata($row);
}
// The user is suspended at site level, so deactivate any active subscriptions.
if ($user->suspended) {
if (subscription_manager::subscription_is_active($sub)) {
$todeactivate[] = $sub->id;
}
continue;
}
// Is the user fully set up? As per require_login on the subscriptions page.
if (!$this->is_user_setup($user)) {
if (subscription_manager::subscription_is_active($sub)) {
$todeactivate[] = $sub->id;
}
continue;
}
// Determine the context, based on the subscription course id.
$sitelevelsubscription = false;
if (empty($sub->courseid)) {
$context = \context_system::instance();
$sitelevelsubscription = true;
} else {
$context = \context_course::instance($sub->courseid);
}
// Check capability in the context.
if (!has_capability('tool/monitor:subscribe', $context, $user)) {
if (subscription_manager::subscription_is_active($sub)) {
$todeactivate[] = $sub->id;
}
continue;
}
// If the subscription is site-level, then we've run all the checks required to make an access decision.
if ($sitelevelsubscription) {
if (!subscription_manager::subscription_is_active($sub)) {
$toactivate[] = $sub->id;
}
continue;
}
// Check course access.
if (!$this->user_can_access_course($user, $course, 'tool/monitor:subscribe')) {
if (subscription_manager::subscription_is_active($sub)) {
$todeactivate[] = $sub->id;
}
continue;
}
// If the subscription has no course module relationship.
if (empty($sub->cmid)) {
if (!subscription_manager::subscription_is_active($sub)) {
$toactivate[] = $sub->id;
}
continue;
}
// Otherwise, check the course module info. We use the same checks as on the subscription page.
$modinfo = get_fast_modinfo($course, $sub->userid);
$cm = $modinfo->get_cm($sub->cmid);
if (!$cm || !$cm->uservisible || !$cm->available) {
if (subscription_manager::subscription_is_active($sub)) {
$todeactivate[] = $sub->id;
}
continue;
}
// The course module is available and visible, so make a decision.
if (!subscription_manager::subscription_is_active($sub)) {
$toactivate[] = $sub->id;
}
}
$rs->close();
// Activate/deactivate/delete relevant subscriptions.
subscription_manager::activate_subscriptions($toactivate);
subscription_manager::deactivate_subscriptions($todeactivate);
subscription_manager::delete_stale_subscriptions();
}
/**
* Determines whether a user is fully set up, using cached results where possible.
*
* @since 2.9.7
* @param \stdClass $user the user record.
* @return bool true if the user is fully set up, false otherwise.
*/
protected function is_user_setup($user) {
if (!isset($this->userssetupcache[$user->id])) {
$this->userssetupcache[$user->id] = !user_not_fully_set_up($user);
}
return $this->userssetupcache[$user->id];
}
/**
* Determines a user's access to a course with a given capability, using cached results where possible.
*
* @since 2.9.7
* @param \stdClass $user the user record.
* @param \stdClass $course the course record.
* @param string $capability the capability to check.
* @return bool true if the user can access the course with the specified capability, false otherwise.
*/
protected function user_can_access_course($user, $course, $capability) {
if (!isset($this->courseaccesscache[$course->id][$user->id][$capability])) {
$this->courseaccesscache[$course->id][$user->id][$capability] = can_access_course($course, $user, $capability, true);
}
return $this->courseaccesscache[$course->id][$user->id][$capability];
}
/**
* Returns a partial subscription record, created from properties of the supplied recordset row object.
* Intended to return a minimal record for specific use within this class and in subsequent access control calls only.
*
* @since 2.9.7
* @param \stdClass $rowdata the row object.
* @return \stdClass a partial subscription record.
*/
protected function get_subscription_from_rowdata($rowdata) {
$sub = new \stdClass();
$sub->id = $rowdata->subid;
$sub->userid = $rowdata->subuserid;
$sub->courseid = $rowdata->subcourseid;
$sub->cmid = $rowdata->subcmid;
$sub->inactivedate = $rowdata->subinactivedate;
return $sub;
}
/**
* Returns a partial course record, created from properties of the supplied recordset row object.
* Intended to return a minimal record for specific use within this class and in subsequent access control calls only.
*
* @since 2.9.7
* @param \stdClass $rowdata the row object.
* @return \stdClass a partial course record.
*/
protected function get_course_from_rowdata($rowdata) {
$course = new \stdClass();
$course->id = $rowdata->subcourseid;
$course->visible = $rowdata->coursevisible;
$course->cacherev = $rowdata->coursecacherev;
return $course;
}
/**
* Returns a partial user record, created from properties of the supplied recordset row object.
* Intended to return a minimal record for specific use within this class and in subsequent access control calls only.
*
* @since 2.9.7
* @param \stdClass $rowdata the row object.
* @return \stdClass a partial user record.
*/
protected function get_user_from_rowdata($rowdata) {
$user = new \stdClass();
$user->id = $rowdata->userid;
$user->firstname = $rowdata->userfirstname;
$user->lastname = $rowdata->userlastname;
$user->email = $rowdata->useremail;
$user->suspended = $rowdata->usersuspended;
return $user;
}
}
+1
View File
@@ -38,6 +38,7 @@
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="User id of the subscriber"/>
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" COMMENT="Timestamp of when this subscription was created"/>
<FIELD NAME="lastnotificationsent" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="Timestamp of the time when a notification was last sent for this subscription."/>
<FIELD NAME="inactivedate" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+9
View File
@@ -32,5 +32,14 @@ $tasks = array(
'day' => '*',
'dayofweek' => '*',
'month' => '*'
),
array(
'classname' => 'tool_monitor\task\check_subscriptions',
'blocking' => 0,
'minute' => 'R',
'hour' => 'R',
'day' => '*',
'dayofweek' => '*',
'month' => '*'
)
);
+15
View File
@@ -56,5 +56,20 @@ function xmldb_tool_monitor_upgrade($oldversion) {
// Moodle v2.9.0 release upgrade line.
// Put any upgrade step following this.
if ($oldversion < 2015051101) {
// Define field inactivedate to be added to tool_monitor_subscriptions.
$table = new xmldb_table('tool_monitor_subscriptions');
$field = new xmldb_field('inactivedate', XMLDB_TYPE_INTEGER, '10', null, true, null, 0, 'lastnotificationsent');
// Conditionally launch add field inactivedate.
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}
// Monitor savepoint reached.
upgrade_plugin_savepoint(true, 2015051101, 'tool', 'monitor');
}
return true;
}
@@ -99,4 +99,5 @@ $string['subhelp'] = 'Subscription details';
$string['subhelp_help'] = 'This subscription listens for when the event \'{$a->eventname}\' has been triggered in \'{$a->moduleinstance}\' {$a->frequency} time(s) in {$a->minutes} minute(s).';
$string['subscribeto'] = 'Subscribe to rule "{$a}"';
$string['taskcleanevents'] = 'Removes any unnecessary event monitor events';
$string['taskchecksubscriptions'] = 'Activate/deactivate invalid rule subscriptions';
$string['unsubscribe'] = 'Unsubscribe';
@@ -1,10 +1,9 @@
@javascript @tool @tool_monitor
@tool @tool_monitor
Feature: Enable/disable managment of the event monitor
In order to manage event monitoring
As an admin
I need to enable/disable it
@javascript
Scenario: Tool is disabled by default.
Given I log in as "admin"
When I navigate to "Event monitoring rules" node in "Site administration > Reports"
@@ -467,7 +467,13 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$rulerecord->eventname = '\mod_book\event\course_module_viewed';
$rulerecord->cmid = $book->cmid;
$rulerecord->frequency = 1;
$rulerecord->template = '{link} {modulelink} {rulename} {description} {eventname}';
$rulerecord->template = '## {link} ##
* {modulelink}
* __{rulename}__
* {description}
* {eventname}';
$rulerecord->templateformat = FORMAT_MARKDOWN;
$rule = $toolgenerator->create_rule($rulerecord);
@@ -491,13 +497,21 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase {
$msg = array_pop($msgs);
$modurl = new moodle_url('/mod/book/view.php', array('id' => $book->cmid));
$expectedmsg = $event->get_url()->out() . ' ' .
$modurl->out() . ' ' .
$rule->get_name($context) . ' ' .
$rule->get_description($context) . ' ' .
$rule->get_event_name();
$this->assertEquals($expectedmsg, $msg->fullmessage);
$this->assertContains('<h2>'.$event->get_url()->out().'</h2>', $msg->fullmessagehtml);
$this->assertContains('<li>'.$modurl->out().'</li>', $msg->fullmessagehtml);
$this->assertContains('<li><strong>'.$rule->get_name($context).'</strong></li>', $msg->fullmessagehtml);
$this->assertContains('<li>'.$rule->get_description($context).'</li>', $msg->fullmessagehtml);
$this->assertContains('<li>'.$rule->get_event_name().'</li>', $msg->fullmessagehtml);
$this->assertEquals(FORMAT_PLAIN, $msg->fullmessageformat);
$this->assertNotContains('<h2>', $msg->fullmessage);
$this->assertNotContains('##', $msg->fullmessage);
$this->assertContains(strtoupper($event->get_url()->out()), $msg->fullmessage);
$this->assertContains('* '.$modurl->out(), $msg->fullmessage);
$this->assertContains('* '.strtoupper($rule->get_name($context)), $msg->fullmessage);
$this->assertContains('* '.$rule->get_description($context), $msg->fullmessage);
$this->assertContains('* '.$rule->get_event_name(), $msg->fullmessage);
}
/**
@@ -0,0 +1,65 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || exit();
/**
* Unit tests for the subscription class.
* @since 2.9.7
*
* @package tool_monitor
* @category test
* @copyright 2016 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_monitor_subscription_testcase extends advanced_testcase {
/**
* @var \tool_monitor\subscription $subscription object.
*/
private $subscription;
/**
* Test set up.
*/
public function setUp() {
$this->resetAfterTest(true);
// Create the mock subscription.
$sub = new stdClass();
$sub->id = 100;
$sub->name = 'My test rule';
$sub->courseid = 20;
$this->subscription = $this->getMock('\tool_monitor\subscription',null, array($sub));
}
/**
* Test for the magic __isset method.
*/
public function test_magic_isset() {
$this->assertEquals(true, isset($this->subscription->name));
$this->assertEquals(true, isset($this->subscription->courseid));
$this->assertEquals(false, isset($this->subscription->ruleid));
}
/**
* Test for the magic __get method.
*/
public function test_magic_get() {
$this->assertEquals(20, $this->subscription->courseid);
$this->setExpectedException('coding_exception');
$this->subscription->ruleid;
}
}
@@ -0,0 +1,364 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
defined('MOODLE_INTERNAL') || exit();
/**
* Unit tests for the tool_monitor clean events task.
* @since 2.9.7
*
* @package tool_monitor
* @category test
* @copyright 2016 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_monitor_task_check_subscriptions_testcase extends advanced_testcase {
private $course;
private $user;
private $rule;
private $subscription;
private $teacherrole;
private $studentrole;
/**
* Test set up.
*/
public function setUp() {
global $DB;
set_config('enablemonitor', 1, 'tool_monitor');
$this->resetAfterTest(true);
// All tests defined herein need a user, course, rule and subscription, so set these up.
$this->user = $this->getDataGenerator()->create_user();
$this->course = $this->getDataGenerator()->create_course();
$rule = new stdClass();
$rule->userid = 2; // Rule created by admin.
$rule->courseid = $this->course->id;
$rule->plugin = 'mod_book';
$rule->eventname = '\mod_book\event\course_module_viewed';
$rule->timewindow = 500;
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$this->rule = $monitorgenerator->create_rule($rule);
$sub = new stdClass();
$sub->courseid = $this->course->id;
$sub->userid = $this->user->id;
$sub->ruleid = $this->rule->id;
$this->subscription = $monitorgenerator->create_subscription($sub);
// Also set up a student and a teacher role for use in some tests.
$this->teacherrole = $DB->get_record('role', array('shortname' => 'teacher'));
$this->studentrole = $DB->get_record('role', array('shortname' => 'student'));
}
/**
* Reloads the subscription object from the DB.
*
* @return void.
*/
private function reload_subscription() {
global $DB;
$sub = $DB->get_record('tool_monitor_subscriptions', array('id' => $this->subscription->id));
$this->subscription = new \tool_monitor\subscription($sub);
}
/**
* Test to confirm the task is named correctly.
*/
public function test_task_name() {
$task = new \tool_monitor\task\check_subscriptions();
$this->assertEquals(get_string('taskchecksubscriptions', 'tool_monitor'), $task->get_name());
}
/**
* Test to confirm that site level subscriptions are activated and deactivated according to system capabilities.
*/
public function test_site_level_subscription() {
// Create a site level subscription.
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$sub = new stdClass();
$sub->userid = $this->user->id;
$sub->ruleid = $this->rule->id;
$this->subscription = $monitorgenerator->create_subscription($sub);
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should be inactive as the user doesn't have the capability. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Now, assign the user as a teacher role at system context.
$this->getDataGenerator()->role_assign($this->teacherrole->id, $this->user->id, context_system::instance());
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should be active now. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that if the module is disabled, no changes are made to active subscriptions.
*/
public function test_module_disabled() {
set_config('enablemonitor', 0, 'tool_monitor');
// Subscription should be active to start with.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Run the task. Note, we never enrolled the user.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should still be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm an active, valid subscription stays active once the scheduled task is run.
*/
public function test_active_unaffected() {
// Enrol the user as a teacher. This role should have the required capability.
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->teacherrole->id);
// Subscription should be active to start with.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should still be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that a subscription for a user without an enrolment to the course is made inactive.
*/
public function test_course_enrolment() {
// Subscription should be active until deactivated by the scheduled task. Remember, by default the test setup
// doesn't enrol the user, so the first run of the task should deactivate it.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should NOT be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Enrol the user.
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->teacherrole->id);
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// Subscription should now be active again.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that subscriptions for enrolled users without the required capability are made inactive.
*/
public function test_enrolled_user_with_no_capability() {
// Enrol the user. By default, students won't have the required capability.
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->studentrole->id);
// The subscription should be active to start with. Pass in the id only to refetch the data.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should NOT be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that subscriptions for users who fail can_access_course(), are deactivated.
*/
public function test_can_access_course() {
// Enrol the user as a teacher. This role should have the required capability.
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->teacherrole->id);
// Strip the ability to see hidden courses, so we'll fail the check_subscriptions->user_can_access_course call.
$context = \context_course::instance($this->course->id);
assign_capability('moodle/course:viewhiddencourses', CAP_PROHIBIT, $this->teacherrole->id, $context);
// Subscription should be active to start with.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Hide the course.
course_change_visibility($this->course->id, false);
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should be inactive. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that subscriptions for enrolled users who don't have CM access, are deactivated.
*/
public function test_cm_access() {
// Enrol the user as a student but grant to ability to subscribe. Students cannot view hidden activities.
$context = \context_course::instance($this->course->id);
assign_capability('tool/monitor:subscribe', CAP_ALLOW, $this->studentrole->id, $context);
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->studentrole->id);
// Generate a course module.
$book = $this->getDataGenerator()->create_module('book', array('course' => $this->course->id));
// And add a subscription to it.
$sub = new stdClass();
$sub->courseid = $this->course->id;
$sub->userid = $this->user->id;
$sub->ruleid = $this->rule->id;
$sub->cmid = $book->cmid;
$monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
$this->subscription = $monitorgenerator->create_subscription($sub);
// The subscription should be active to start with. Pass in the id only to refetch the data.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should still be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Make the course module invisible, which should in turn make the subscription inactive.
set_coursemodule_visible($book->cmid, false);
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should NOT be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Make the course module visible again.
set_coursemodule_visible($book->cmid, true);
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should be active. Pass in the id only to refetch the data.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that long term inactive subscriptions are removed entirely.
*/
public function test_stale_subscription_removal() {
global $DB;
// Manually set the inactivedate to 1 day older than the limit allowed.
$daysold = 1 + \tool_monitor\subscription_manager::INACTIVE_SUBSCRIPTION_LIFESPAN_IN_DAYS;
$inactivedate = strtotime("-$daysold days", time());
$DB->set_field('tool_monitor_subscriptions', 'inactivedate', $inactivedate, array('id' => $this->subscription->id));
// Subscription should be inactive to start with.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// Subscription should now not exist at all.
$this->assertEquals(false, $DB->record_exists('tool_monitor_subscriptions', array('id' => $this->subscription->id)));
}
/**
* Test to confirm that subscriptions for a partially set up user are deactivated.
*/
public function test_user_not_fully_set_up() {
global $DB;
// Enrol the user as a teacher.
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->teacherrole->id);
// The subscription should be active to start.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Unset the user's email address, so we fail the check_subscriptions->is_user_setup() call.
$DB->set_field('user', 'email', '', array('id' => $this->user->id));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should now be inactive.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
/**
* Test to confirm that a suspended user's subscriptions are deactivated properly.
*/
public function test_suspended_user() {
global $DB;
// Enrol the user as a teacher. This role should have the required capability.
$this->getDataGenerator()->enrol_user($this->user->id, $this->course->id, $this->teacherrole->id);
// Subscription should be active to start with.
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Suspend the user.
$DB->set_field('user', 'suspended', '1', array('id' => $this->user->id));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should now be inactive.
$this->reload_subscription();
$this->assertEquals(false, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
// Unsuspend the user.
$DB->set_field('user', 'suspended', '0', array('id' => $this->user->id));
// Run the task.
$task = new \tool_monitor\task\check_subscriptions();
$task->execute();
// The subscription should now be active again.
$this->reload_subscription();
$this->assertEquals(true, \tool_monitor\subscription_manager::subscription_is_active($this->subscription));
}
}
+1 -1
View File
@@ -26,6 +26,6 @@
defined('MOODLE_INTERNAL') || die;
$plugin->version = 2015051100; // The current plugin version (Date: YYYYMMDDXX).
$plugin->version = 2015051101; // 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).
+16 -3
View File
@@ -567,8 +567,18 @@ if ($formdata = $mform2->is_cancelled()) {
}
if ($existinguser->$column !== $user->$column) {
if ($column === 'email') {
if ($DB->record_exists('user', array('email'=>$user->email))) {
if ($noemailduplicates) {
$select = $DB->sql_like('email', ':email', false, true, false, '|');
$params = array('email' => $DB->sql_like_escape($user->email, '|'));
if ($DB->record_exists_select('user', $select , $params)) {
$changeincase = core_text::strtolower($existinguser->$column) === core_text::strtolower(
$user->$column);
if ($changeincase) {
// If only case is different then switch to lower case and carry on.
$user->$column = core_text::strtolower($user->$column);
continue;
} else if ($noemailduplicates) {
$upt->track('email', $stremailduplicate, 'error');
$upt->track('status', $strusernotupdated, 'error');
$userserrors++;
@@ -1177,7 +1187,10 @@ while ($linenum <= $previewrows and $fields = $cir->next()) {
if (!validate_email($rowcols['email'])) {
$rowcols['status'][] = get_string('invalidemail');
}
if ($DB->record_exists('user', array('email'=>$rowcols['email']))) {
$select = $DB->sql_like('email', ':email', false, true, false, '|');
$params = array('email' => $DB->sql_like_escape($rowcols['email'], '|'));
if ($DB->record_exists_select('user', $select , $params)) {
$rowcols['status'][] = $stremailduplicate;
}
}
+1 -1
View File
@@ -45,7 +45,7 @@ $string['auth_dbname'] = 'Name of the database itself. Leave empty if using an O
$string['auth_dbname_key'] = 'DB name';
$string['auth_dbpass'] = 'Password matching the above username';
$string['auth_dbpass_key'] = 'Password';
$string['auth_dbpasstype'] = '<p>Specify the format that the password field is using. MD5 hashing is useful for connecting to other common web applications like PostNuke.</p> <p>Use \'internal\' if you want to the external DB to manage usernames &amp; email addresses, but Moodle to manage passwords. If you use \'internal\', you <i>must</i> provide a populated email address field in the external DB, and you must execute both admin/cron.php and auth/db/cli/sync_users.php regularly. Moodle will send an email to new users with a temporary password.</p>';
$string['auth_dbpasstype'] = '<p>Specify the format that the password field is using. MD5 hashing is useful for connecting to other common web applications like PostNuke.</p> <p>Use \'internal\' if you want the external database to manage usernames and email addresses, but Moodle to manage passwords. If you use \'internal\', you <i>must</i> provide a populated email address field in the external database, and you must execute both admin/cron.php and auth/db/cli/sync_users.php regularly. Moodle will send an email to new users with a temporary password.</p>';
$string['auth_dbpasstype_key'] = 'Password format';
$string['auth_dbreviveduser'] = 'Revived user {$a->name} id {$a->id}';
$string['auth_dbrevivedusererror'] = 'Error reviving user {$a}';
+1 -1
View File
@@ -438,7 +438,7 @@ class auth_db_testcase extends advanced_testcase {
$user3->username = 'john%#&~%*_doe';
$user3->email = ' john@testing.com ';
$user3->deleted = 'no';
$user3->description = '<b>A description <script>alert(123)</script>about myself.</b>';
$user3->description = '<b>A description about myself.</b>';
$user3cleaned = $auth->clean_data($user3);
// Expected results.
+1 -1
View File
@@ -56,7 +56,7 @@ $string['auth_ldap_gracelogins_desc'] = 'Enable LDAP gracelogin support. After p
$string['auth_ldap_gracelogins_key'] = 'Grace logins';
$string['auth_ldap_groupecreators'] = 'List of groups or contexts whose members are allowed to create groups. Separate multiple groups with \';\'. Usually something like \'cn=teachers,ou=staff,o=myorg\'';
$string['auth_ldap_groupecreators_key'] = 'Group creators';
$string['auth_ldap_host_url'] = 'Specify LDAP host in URL-form like \'ldap://ldap.myorg.com/\' or \'ldaps://ldap.myorg.com/\' Separate multipleservers with \';\' to get failover support.';
$string['auth_ldap_host_url'] = 'Specify LDAP host in URL-form like \'ldap://ldap.myorg.com/\' or \'ldaps://ldap.myorg.com/\'. Separate multiple servers with \';\' to get failover support.';
$string['auth_ldap_host_url_key'] = 'Host URL';
$string['auth_ldap_changepasswordurl_key'] = 'Password-change URL';
$string['auth_ldap_ldap_encoding'] = 'Specify encoding used by LDAP server. Most probably utf-8, MS AD v2 uses default platform encoding such as cp1252, cp1250, etc.';
+2 -1
View File
@@ -23,6 +23,7 @@ if (!is_enabled_auth('shibboleth')) {
}
// Front channel logout.
$inputstream = file_get_contents("php://input");
if ($action == 'logout' && !empty($redirect)) {
if ($USER->auth == 'shibboleth') {
@@ -32,7 +33,7 @@ if ($action == 'logout' && !empty($redirect)) {
redirect($redirect);
}
} else if (!empty($HTTP_RAW_POST_DATA)) {
} else if (!empty($inputstream)) {
// Back channel logout.
// Set SOAP header.
+14 -70
View File
@@ -47,34 +47,15 @@ class behat_auth extends behat_base {
* @Given /^I log in as "(?P<username_string>(?:[^"]|\\")*)"$/
*/
public function i_log_in_as($username) {
// Visit login page.
$this->getSession()->visit($this->locate_path('login/index.php'));
// Running this step using the API rather than a chained step because
// we need to see if the 'Log in' link is available or we need to click
// the dropdown to expand the navigation bar before.
$this->getSession()->visit($this->locate_path('/'));
// Enter username and password.
$this->execute('behat_forms::i_set_the_field_to', array('Username', $this->escape($username)));
$this->execute('behat_forms::i_set_the_field_to', array('Password', $this->escape($username)));
// Generic steps (we will prefix them later expanding the navigation dropdown if necessary).
$steps = array(
new Given('I click on "' . get_string('login') . '" "link" in the ".logininfo" "css_element"'),
new Given('I set the field "' . get_string('username') . '" to "' . $this->escape($username) . '"'),
new Given('I set the field "' . get_string('password') . '" to "'. $this->escape($username) . '"'),
new Given('I press "' . get_string('login') . '"')
);
// If Javascript is disabled we have enough with these steps.
if (!$this->running_javascript()) {
return $steps;
}
// Wait for the homepage to be ready.
$this->getSession()->wait(self::TIMEOUT * 1000, self::PAGE_READY_JS);
// If it is needed, it expands the navigation bar with the 'Log in' link.
if ($clicknavbar = $this->get_expand_navbar_step()) {
array_unshift($steps, $clicknavbar);
}
return $steps;
// Press log in button, no need to check for exceptions as it will checked after this step execution.
$this->execute('behat_forms::press_button', get_string('login'));
}
/**
@@ -83,53 +64,16 @@ class behat_auth extends behat_base {
* @Given /^I log out$/
*/
public function i_log_out() {
$steps = array(new When('I follow "' . get_string('logout') . '"'));
// No need to check anything else if we run without JS.
if (!$this->running_javascript()) {
return $steps;
}
// There is no longer any need to worry about whether the navigation
// bar needs to be expanded; user_menu now lives outside the
// hamburger.
// However, the user menu *always* needs to be expanded.
$xpath = "//div[@class='usermenu']//a[contains(concat(' ', @class, ' '), ' toggle-display ')]";
array_unshift($steps, new When('I click on "'.$xpath.'" "xpath_element"'));
return $steps;
}
/**
* Returns a step to open the navigation bar if it is needed.
*
* The top log in and log out links are hidden when middle or small
* size windows (or devices) are used. This step returns a step definition
* clicking to expand the navbar if it is hidden.
*
* @return Given|bool A step definition or false if there is no need to show the navbar.
*/
protected function get_expand_navbar_step() {
// Checking if we need to click the navbar button to show the navigation menu, it
// is hidden by default when using clean theme and a medium or small screen size.
// The DOM and the JS should be all ready and loaded. Running without spinning
// as this is a widely used step and we can not spend time here trying to see
// a DOM node that is not always there (at the moment clean is not even the
// default theme...).
$navbuttonjs = "return (
Y.one('.btn-navbar') &&
Y.one('.btn-navbar').getComputedStyle('display') !== 'none'
)";
// Adding an extra click we need to show the 'Log in' link.
if (!$this->getSession()->getDriver()->evaluateScript($navbuttonjs)) {
return false;
// However, the user menu *always* needs to be expanded. if running JS.
if ($this->running_javascript()) {
$xpath = "//div[@class='usermenu']//a[contains(concat(' ', @class, ' '), ' toggle-display ')]";
$this->execute('behat_general::i_click_on', array($xpath, "xpath_element"));
}
return new Given('I click on ".btn-navbar" "css_element"');
// No need to check for exceptions as it will checked after this step execution.
$this->execute('behat_general::click_link', get_string('logout'));
}
}
+35 -8
View File
@@ -1700,27 +1700,54 @@ class restore_course_structure_step extends restore_structure_step {
*/
public function process_course($data) {
global $CFG, $DB;
$context = context::instance_by_id($this->task->get_contextid());
$userid = $this->task->get_userid();
$target = $this->get_task()->get_target();
$isnewcourse = $target != backup::TARGET_CURRENT_ADDING && $target != backup::TARGET_EXISTING_ADDING;
// When restoring to a new course we can set all the things except for the ID number.
$canchangeidnumber = $isnewcourse || has_capability('moodle/course:changeidnumber', $context, $userid);
$canchangeshortname = $isnewcourse || has_capability('moodle/course:changeshortname', $context, $userid);
$canchangefullname = $isnewcourse || has_capability('moodle/course:changefullname', $context, $userid);
$canchangesummary = $isnewcourse || has_capability('moodle/course:changesummary', $context, $userid);
$data = (object)$data;
$data->id = $this->get_courseid();
$fullname = $this->get_setting_value('course_fullname');
$shortname = $this->get_setting_value('course_shortname');
$startdate = $this->get_setting_value('course_startdate');
// Calculate final course names, to avoid dupes
// Calculate final course names, to avoid dupes.
list($fullname, $shortname) = restore_dbops::calculate_course_names($this->get_courseid(), $fullname, $shortname);
// Need to change some fields before updating the course record
$data->id = $this->get_courseid();
$data->fullname = $fullname;
$data->shortname= $shortname;
if ($canchangefullname) {
$data->fullname = $fullname;
} else {
unset($data->fullname);
}
if ($canchangeshortname) {
$data->shortname = $shortname;
} else {
unset($data->shortname);
}
if (!$canchangesummary) {
unset($data->summary);
unset($data->summaryformat);
}
// Only allow the idnumber to be set if the user has permission and the idnumber is not already in use by
// another course on this site.
$context = context::instance_by_id($this->task->get_contextid());
if (!empty($data->idnumber) && has_capability('moodle/course:changeidnumber', $context, $this->task->get_userid()) &&
$this->task->is_samesite() && !$DB->record_exists('course', array('idnumber' => $data->idnumber))) {
if (!empty($data->idnumber) && $canchangeidnumber && $this->task->is_samesite()
&& !$DB->record_exists('course', array('idnumber' => $data->idnumber))) {
// Do not reset idnumber.
} else if (!$isnewcourse) {
// Prevent override when restoring as merge.
unset($data->idnumber);
} else {
$data->idnumber = '';
}
+2 -8
View File
@@ -45,13 +45,7 @@ function core_badges_myprofile_navigation(\core_user\output\myprofile\tree $tree
// 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.
if (isloggedin()) {
$context = context_user::instance($USER->id);
} else {
$context = context_system::instance();
}
$context = context_user::instance($user->id);
$courseid = empty($course) ? 0 : $course->id;
if ($USER->id == $user->id || has_capability('moodle/badges:viewotherbadges', $context)) {
@@ -78,4 +72,4 @@ function core_badges_myprofile_navigation(\core_user\output\myprofile\tree $tree
}
}
}
}
}
@@ -0,0 +1,222 @@
@block @block_blog_menu
Feature: Enable Block blog menu in an activity
In order to enable the blog menu in an activity
As a teacher
I can add blog menu block to a course
Background:
Given the following "users" exist:
| username | firstname | lastname | email | idnumber |
| teacher1 | Teacher | 1 | teacher1@example.com | T1 |
| student1 | Student | 1 | student1@example.com | S1 |
| student2 | Student | 2 | student2@example.com | S2 |
And the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
| student2 | C1 | student |
And I log in as "teacher1"
And I follow "Course 1"
And I turn editing mode on
And I add a "Assignment" to section "1" and I fill the form with:
| Assignment name | Test assignment 1 |
| Description | Offline text |
| assignsubmission_file_enabled | 0 |
And I follow "Test assignment 1"
And I add the "Blog menu" block
And I log out
Scenario: Students use the blog menu block to post blogs
Given I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add a new entry"
When I set the following fields to these values:
| Entry title | S1 First Blog |
| Blog entry body | This is my awesome blog! |
And I press "Save changes"
Then I should see "S1 First Blog"
And I should see "This is my awesome blog!"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Blog entries"
And I should see "S1 First Blog"
And I should see "This is my awesome blog!"
Scenario: Students use the blog menu block to view their blogs about the activity
Given I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S1 First Blog |
| Blog entry body | This is my awesome blog about this Assignment! |
And I press "Save changes"
And I should see "S1 First Blog"
And I should see "This is my awesome blog about this Assignment!"
And I should see "Associated Assignment: Test assignment 1"
And I log out
And I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add a new entry"
And I set the following fields to these values:
| Entry title | S2 Second Blog |
| Blog entry body | My unrelated blog! |
And I press "Save changes"
And I should see "S2 Second Blog"
And I should see "My unrelated blog!"
And I should not see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S2 First Blog |
| Blog entry body | My course blog is better! |
And I press "Save changes"
And I should see "S2 First Blog"
And I should see "My course blog is better!"
And I should see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
When I follow "View my entries about this Assignment"
Then I should see "S2 First Blog"
And I should not see "S2 Second Blog"
And I should not see "S1 First Blog"
Scenario: Students use the blog menu block to view all blogs about the assignment
Given I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S1 First Blog |
| Blog entry body | This is my awesome blog about this Assignment! |
And I press "Save changes"
And I should see "S1 First Blog"
And I should see "This is my awesome blog about this Assignment!"
And I should see "Associated Assignment: Test assignment 1"
And I log out
And I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add a new entry"
And I set the following fields to these values:
| Entry title | S2 Second Blog |
| Blog entry body | My unrelated blog! |
And I press "Save changes"
And I should see "S2 Second Blog"
And I should see "My unrelated blog!"
And I should not see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S2 First Blog |
| Blog entry body | My course blog is better! |
And I press "Save changes"
And I should see "S2 First Blog"
And I should see "My course blog is better!"
And I should see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
When I follow "View all entries about this Assignment"
Then I should see "S1 First Blog"
And I should see "S2 First Blog"
And I should not see "S2 Second Blog"
Scenario: Students use the blog menu block to view all their blog entries
Given I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S1 First Blog |
| Blog entry body | This is my awesome blog about this Assignment! |
And I press "Save changes"
And I should see "S1 First Blog"
And I should see "This is my awesome blog about this Assignment!"
And I should see "Associated Assignment: Test assignment 1"
And I log out
And I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add a new entry"
And I set the following fields to these values:
| Entry title | S2 Second Blog |
| Blog entry body | My unrelated blog! |
And I press "Save changes"
And I should see "S2 Second Blog"
And I should see "My unrelated blog!"
And I should not see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S2 First Blog |
| Blog entry body | My course blog is better! |
And I press "Save changes"
And I should see "S2 First Blog"
And I should see "My course blog is better!"
And I should see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
When I follow "Blog entries"
Then I should see "S2 First Blog"
And I should see "S2 Second Blog"
And I should not see "S1 First Blog"
Scenario: Teacher searches for student blogs
Given I log in as "student1"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S1 First Blog |
| Blog entry body | This is my awesome blog about this Assignment! |
And I press "Save changes"
And I should see "S1 First Blog"
And I should see "This is my awesome blog about this Assignment!"
And I should see "Associated Assignment: Test assignment 1"
And I log out
And I log in as "student2"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add a new entry"
And I set the following fields to these values:
| Entry title | S2 Second Blog |
| Blog entry body | My unrelated blog! |
And I press "Save changes"
And I should see "S2 Second Blog"
And I should see "My unrelated blog!"
And I should not see "Associated Assignment: Test assignment 1"
And I follow "Dashboard"
And I follow "Course 1"
And I follow "Test assignment 1"
And I follow "Add an entry about this Assignment"
And I set the following fields to these values:
| Entry title | S2 First Blog |
| Blog entry body | My course blog is better! |
And I press "Save changes"
And I should see "S2 First Blog"
And I should see "My course blog is better!"
And I should see "Associated Assignment: Test assignment 1"
And I log out
When I log in as "teacher1"
And I follow "Course 1"
And I follow "Test assignment 1"
And I set the field "blogsearchquery" to "First"
And I press "Search"
Then I should see "S1 First Blog"
And I should see "S2 First Blog"
And I should not see "S2 Second Blog"
+12 -9
View File
@@ -325,7 +325,7 @@ class block_course_overview_renderer extends plugin_renderer_base {
* @return string html string for welcome area.
*/
public function welcome_area($msgcount) {
global $USER;
global $CFG, $USER;
$output = $this->output->box_start('welcome_area');
$picture = $this->output->user_picture($USER, array('size' => 75, 'class' => 'welcome_userpicture'));
@@ -334,16 +334,19 @@ class block_course_overview_renderer extends plugin_renderer_base {
$output .= $this->output->box_start('welcome_message');
$output .= $this->output->heading(get_string('welcome', 'block_course_overview', $USER->firstname));
$plural = 's';
if ($msgcount > 0) {
$output .= get_string('youhavemessages', 'block_course_overview', $msgcount);
if ($msgcount == 1) {
$plural = '';
if (!empty($CFG->messaging)) {
$plural = 's';
if ($msgcount > 0) {
$output .= get_string('youhavemessages', 'block_course_overview', $msgcount);
if ($msgcount == 1) {
$plural = '';
}
} else {
$output .= get_string('youhavenomessages', 'block_course_overview');
}
} else {
$output .= get_string('youhavenomessages', 'block_course_overview');
$output .= html_writer::link(new moodle_url('/message/index.php'),
get_string('message'.$plural, 'block_course_overview'));
}
$output .= html_writer::link(new moodle_url('/message/index.php'), get_string('message'.$plural, 'block_course_overview'));
$output .= $this->output->box_end();
$output .= $this->output->box('', 'flush');
$output .= $this->output->box_end();
+1
View File
@@ -49,6 +49,7 @@
.block_navigation .block_tree .tree_item.hasicon .item-content-wrap {
display: inline-block;
white-space: normal;
width: calc(100% - 21px);
}
.block_navigation .block_tree ul {
@@ -524,9 +524,9 @@ BRANCH.prototype = {
branchicon.setAttribute('title', icon.title);
}
if (icon.classes) {
for (var i in icon.classes) {
branchicon.addClass(icon.classes[i]);
}
icon.classes.forEach(function(element) {
branchicon.addClass(element);
});
}
}
File diff suppressed because one or more lines are too long
@@ -523,9 +523,9 @@ BRANCH.prototype = {
branchicon.setAttribute('title', icon.title);
}
if (icon.classes) {
for (var i in icon.classes) {
branchicon.addClass(icon.classes[i]);
}
icon.classes.forEach(function(element) {
branchicon.addClass(element);
});
}
}
+3 -3
View File
@@ -522,9 +522,9 @@ BRANCH.prototype = {
branchicon.setAttribute('title', icon.title);
}
if (icon.classes) {
for (var i in icon.classes) {
branchicon.addClass(icon.classes[i]);
}
icon.classes.forEach(function(element) {
branchicon.addClass(element);
});
}
}
+7 -3
View File
@@ -63,9 +63,13 @@ if ($id) {
$sitecontext = context_system::instance();
$usercontext = context_user::instance($userid);
$PAGE->set_context($usercontext);
$blognode = $PAGE->settingsnav->find('blogadd', null);
$blognode->make_active();
if ($modid) {
$PAGE->set_context($sitecontext);
} else {
$PAGE->set_context($usercontext);
$blognode = $PAGE->settingsnav->find('blogadd', null);
$blognode->make_active();
}
require_login($courseid);
+1 -1
View File
@@ -63,7 +63,7 @@ if ($entryid and !isset($userid)) {
$userid = $entry->userid;
}
if (isset($userid) && empty($courseid)) {
if (isset($userid) && empty($courseid) && empty($modid)) {
$context = context_user::instance($userid);
} else if (!empty($courseid) && $courseid != SITEID) {
$context = context_course::instance($courseid);
+5 -1
View File
@@ -330,7 +330,11 @@ class cache_config {
if (!file_exists($cachefile)) {
throw new cache_exception('Default cache config could not be found. It should have already been created by now.');
}
include($cachefile);
if (!include($cachefile)) {
throw new cache_exception('Unable to load the cache configuration file');
}
if (!is_array($configuration)) {
throw new cache_exception('Invalid cache configuration file');
}
+1
View File
@@ -96,6 +96,7 @@ class behat_calendar extends behat_base {
$dayofmonth = "a[{$daycontains}]";
return array(
new Given('I hover "//' . $currentmonth . '/descendant::' . $daycell . '/' . $dayofmonth . '" "xpath_element"'),
new Given('I wait until the page is ready'),
);
}
+13 -12
View File
@@ -53,25 +53,26 @@ $time = optional_param('time', 0, PARAM_INT);
$url = new moodle_url('/calendar/view.php');
if ($courseid != SITEID) {
$url->param('course', $courseid);
}
if ($view !== 'upcoming') {
$url->param('view', $view);
}
// If a day, month and year were passed then convert it to a timestamp. If these were passed
// then we can assume the day, month and year are passed as Gregorian, as no where in core
// should we be passing these values rather than the time. This is done for BC.
if (!empty($day) && !empty($mon) && !empty($year)) {
if (checkdate($mon, $day, $year)) {
$time = make_timestamp($year, $mon, $day);
} else {
$time = usergetmidnight(time());
}
} else if (empty($time)) {
$time = usergetmidnight(time());
}
if (empty($time)) {
$time = time();
}
if ($courseid != SITEID) {
$url->param('course', $courseid);
}
if ($view !== 'upcoming') {
$time = usergetmidnight($time);
$url->param('view', $view);
}
$url->param('time', $time);
@@ -44,12 +44,11 @@ Feature: Access visible and hidden cohorts
| user | course | role |
| teacher | C1 | editingteacher |
@javascript
Scenario: Teacher can see visible cohorts defined in the above contexts
When I log in as "teacher"
And I follow "Course 1"
And I navigate to "Enrolment methods" node in "Course administration > Users"
And I set the field "Add method" to "Cohort sync"
And I select "Cohort sync" from the "Add method" singleselect
Then the "Cohort" select box should contain "Cohort in category 1"
And the "Cohort" select box should contain "System cohort"
And the "Cohort" select box should not contain "Cohort hidden in category 1"
@@ -71,13 +70,12 @@ Feature: Access visible and hidden cohorts
And the "Select members from cohort" select box should not contain "Cohort empty in category 1"
And the "Select members from cohort" select box should not contain "System empty cohort"
@javascript
Scenario: System manager can see all cohorts defined in the above contexts
When I log in as "user1"
And I am on site homepage
And I follow "Course 1"
And I navigate to "Enrolment methods" node in "Course administration > Users"
And I set the field "Add method" to "Cohort sync"
And I select "Cohort sync" from the "Add method" singleselect
Then the "Cohort" select box should contain "Cohort in category 1"
And the "Cohort" select box should contain "System cohort"
And the "Cohort" select box should contain "Cohort hidden in category 1"
@@ -99,13 +97,12 @@ Feature: Access visible and hidden cohorts
And the "Select members from cohort" select box should not contain "Cohort empty in category 1"
And the "Select members from cohort" select box should not contain "System empty cohort"
@javascript
Scenario: Category manager can see all cohorts defined in his category and visible cohorts defined above
When I log in as "user2"
And I am on site homepage
And I follow "Course 1"
And I navigate to "Enrolment methods" node in "Course administration > Users"
And I set the field "Add method" to "Cohort sync"
And I select "Cohort sync" from the "Add method" singleselect
Then the "Cohort" select box should contain "Cohort in category 1"
And the "Cohort" select box should contain "System cohort"
And the "Cohort" select box should contain "Cohort hidden in category 1"
-3
View File
@@ -21,7 +21,6 @@ Feature: Add cohorts of users
| Description | Test cohort description |
And I press "Save changes"
@javascript
Scenario: Add a cohort
When I follow "Cohorts"
Then I should see "Test cohort name"
@@ -29,7 +28,6 @@ Feature: Add cohorts of users
And I should see "Test cohort description"
And I should see "Created manually"
@javascript
Scenario: Add users to a cohort selecting them from the system users list
When I add "First User (first@example.com)" user to "333" cohort members
And I add "Second User (second@example.com)" user to "333" cohort members
@@ -39,7 +37,6 @@ Feature: Add cohorts of users
And the "Current users" select box should contain "Second User (second@example.com)"
And the "Current users" select box should not contain "Forth User (forth@example.com)"
@javascript
Scenario: Add users to a cohort using a bulk user action
When I follow "Bulk user actions"
And I set the field "Available" to "Third User"
+10 -23
View File
@@ -59,29 +59,16 @@ class behat_cohort extends behat_base {
if (!$this->getSession()->getPage()->find('css', 'input#cohort_search_q')) {
// With JS enabled we should expand a few tree nodes.
if ($this->running_javascript()) {
$parentnodes = get_string('administrationsite') . ' > ' .
get_string('users', 'admin') . ' > ' .
get_string('accounts', 'admin');
$steps = array_merge(
array(
new Given('I am on homepage'),
new Given('I navigate to "' . get_string('cohorts', 'cohort') . '" node in "' . $parentnodes . '"')
),
$steps
);
} else {
// JS disabled.
$steps = array_merge(
array(
new Given('I am on homepage'),
new Given('I follow "' . get_string('administrationsite') . '" node'),
new Given('I follow "' . get_string('cohorts', 'cohort') . '"')
),
$steps
);
}
$parentnodes = get_string('administrationsite') . ' > ' .
get_string('users', 'admin') . ' > ' .
get_string('accounts', 'admin');
$steps = array_merge(
array(
new Given('I am on homepage'),
new Given('I navigate to "' . get_string('cohorts', 'cohort') . '" node in "' . $parentnodes . '"')
),
$steps
);
}
return $steps;
-3
View File
@@ -27,7 +27,6 @@ Feature: View cohort list
| user1 | manager | System | |
| user2 | manager | Category | CAT1 |
@javascript
Scenario: Admin can see system cohorts and all cohorts
When I log in as "admin"
And I navigate to "Cohorts" node in "Site administration > Users > Accounts"
@@ -40,7 +39,6 @@ Feature: View cohort list
And I should see "Cohort in category 3"
And I log out
@javascript
Scenario: Manager can see system cohorts and all cohorts
When I log in as "user1"
And I navigate to "Cohorts" node in "Site administration > Users > Accounts"
@@ -53,7 +51,6 @@ Feature: View cohort list
And I should see "Cohort in category 3"
And I log out
@javascript
Scenario: Manager in category can see cohorts in the category
When I log in as "user2"
And I follow "Courses"
+14
View File
@@ -690,6 +690,20 @@ $CFG->admin = 'admin';
// )
// )
// );
// You can also use the following config to override default Moodle configuration for Behat.
// This config is limited to default suite and will be supported in later versions.
// It will have precedence over $CFG->behat_config.
// $CFG->behat_profiles = array(
// 'phantomjs' => array(
// 'browser' => 'phantomjs',
// 'tags' => '~@_file_upload&&~@_alert&&~@_bug_phantomjs',
// 'wd_host' => 'http://127.0.0.1:4443/wd/hub',
// 'capabilities' => array(
// 'platform' => 'Linux',
// 'version' => 2.1
// )
// ),
// );
//
// You can force the browser session (not user's sessions) to restart after N seconds. This could
// be useful if you are using a cloud-based service with time restrictions in the browser side.
+1
View File
@@ -3093,6 +3093,7 @@ class course_request {
$data->visible = $courseconfig->visible;
$data->visibleold = $data->visible;
$data->lang = $courseconfig->lang;
$data->enablecompletion = $courseconfig->enablecompletion;
$course = create_course($data);
$context = context_course::instance($course->id, MUST_EXIST);
+324
View File
@@ -0,0 +1,324 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Course restore tests.
*
* @package core_course
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php');
require_once($CFG->dirroot . '/backup/util/includes/restore_includes.php');
/**
* Course restore testcase.
*
* @package core_course
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_restore_backup_testcase extends advanced_testcase {
/**
* Backup a course and return its backup ID.
*
* @param int $courseid The course ID.
* @param int $userid The user doing the backup.
* @return string
*/
protected function backup_course($courseid, $userid = 2) {
globaL $CFG;
$packer = get_file_packer('application/vnd.moodle.backup');
$bc = new backup_controller(backup::TYPE_1COURSE, $courseid, backup::FORMAT_MOODLE, backup::INTERACTIVE_NO,
backup::MODE_GENERAL, $userid);
$bc->execute_plan();
$results = $bc->get_results();
$results['backup_destination']->extract_to_pathname($packer, "$CFG->tempdir/backup/core_course_testcase");
$bc->destroy();
unset($bc);
return 'core_course_testcase';
}
/**
* Create a role with capabilities and permissions.
*
* @param string|array $caps Capability names.
* @param int $perm Constant CAP_* to apply to the capabilities.
* @return int The new role ID.
*/
protected function create_role_with_caps($caps, $perm) {
$caps = (array) $caps;
$dg = $this->getDataGenerator();
$roleid = $dg->create_role();
foreach ($caps as $cap) {
assign_capability($cap, $perm, $roleid, context_system::instance()->id, true);
}
accesslib_clear_all_caches_for_unit_testing();
return $roleid;
}
/**
* Restore a course.
*
* @param int $backupid The backup ID.
* @param int $courseid The course ID to restore in, or 0.
* @param int $userid The ID of the user performing the restore.
* @return stdClass The updated course object.
*/
protected function restore_course($backupid, $courseid, $userid) {
global $DB;
$target = backup::TARGET_CURRENT_ADDING;
if (!$courseid) {
$target = backup::TARGET_NEW_COURSE;
$categoryid = $DB->get_field_sql("SELECT MIN(id) FROM {course_categories}");
$courseid = restore_dbops::create_new_course('Tmp', 'tmp', $categoryid);
}
$rc = new restore_controller($backupid, $courseid, backup::INTERACTIVE_NO, backup::MODE_GENERAL, $userid, $target);
$target == backup::TARGET_NEW_COURSE ?: $rc->get_plan()->get_setting('overwrite_conf')->set_value(true);
$rc->execute_precheck();
$rc->execute_plan();
$course = $DB->get_record('course', array('id' => $rc->get_courseid()));
$rc->destroy();
unset($rc);
return $course;
}
/**
* Restore a course to an existing course.
*
* @param int $backupid The backup ID.
* @param int $courseid The course ID to restore in.
* @param int $userid The ID of the user performing the restore.
* @return stdClass The updated course object.
*/
protected function restore_to_existing_course($backupid, $courseid, $userid = 2) {
return $this->restore_course($backupid, $courseid, $userid);
}
/**
* Restore a course to a new course.
*
* @param int $backupid The backup ID.
* @param int $userid The ID of the user performing the restore.
* @return stdClass The new course object.
*/
protected function restore_to_new_course($backupid, $userid = 2) {
return $this->restore_course($backupid, 0, $userid);
}
public function test_restore_existing_idnumber_in_new_course() {
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$c1 = $dg->create_course(['idnumber' => 'ABC']);
$backupid = $this->backup_course($c1->id);
$c2 = $this->restore_to_new_course($backupid);
// The ID number is set empty.
$this->assertEquals('', $c2->idnumber);
}
public function test_restore_non_existing_idnumber_in_new_course() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$c1 = $dg->create_course(['idnumber' => 'ABC']);
$backupid = $this->backup_course($c1->id);
$c1->idnumber = 'BCD';
$DB->update_record('course', $c1);
// The ID number changed.
$c2 = $this->restore_to_new_course($backupid);
$this->assertEquals('ABC', $c2->idnumber);
}
public function test_restore_existing_idnumber_in_existing_course() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$c1 = $dg->create_course(['idnumber' => 'ABC']);
$c2 = $dg->create_course(['idnumber' => 'DEF']);
$backupid = $this->backup_course($c1->id);
// The ID number does not change.
$c2 = $this->restore_to_existing_course($backupid, $c2->id);
$this->assertEquals('DEF', $c2->idnumber);
$c1 = $DB->get_record('course', array('id' => $c1->id));
$this->assertEquals('ABC', $c1->idnumber);
}
public function test_restore_non_existing_idnumber_in_existing_course() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$c1 = $dg->create_course(['idnumber' => 'ABC']);
$c2 = $dg->create_course(['idnumber' => 'DEF']);
$backupid = $this->backup_course($c1->id);
$c1->idnumber = 'XXX';
$DB->update_record('course', $c1);
// The ID number has changed.
$c2 = $this->restore_to_existing_course($backupid, $c2->id);
$this->assertEquals('ABC', $c2->idnumber);
}
public function test_restore_idnumber_in_existing_course_without_permissions() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$u1 = $dg->create_user();
$managers = get_archetype_roles('manager');
$manager = array_shift($managers);
$roleid = $this->create_role_with_caps('moodle/course:changeidnumber', CAP_PROHIBIT);
$dg->role_assign($manager->id, $u1->id);
$dg->role_assign($roleid, $u1->id);
$c1 = $dg->create_course(['idnumber' => 'ABC']);
$c2 = $dg->create_course(['idnumber' => 'DEF']);
$backupid = $this->backup_course($c1->id);
$c1->idnumber = 'XXX';
$DB->update_record('course', $c1);
// The ID number does not change.
$c2 = $this->restore_to_existing_course($backupid, $c2->id, $u1->id);
$this->assertEquals('DEF', $c2->idnumber);
}
public function test_restore_course_info_in_new_course() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$c1 = $dg->create_course(['shortname' => 'SN', 'fullname' => 'FN', 'summary' => 'DESC', 'summaryformat' => FORMAT_MOODLE]);
$backupid = $this->backup_course($c1->id);
// The information is restored but adapted because names are already taken.
$c2 = $this->restore_to_new_course($backupid);
$this->assertEquals('SN_1', $c2->shortname);
$this->assertEquals('FN copy 1', $c2->fullname);
$this->assertEquals('DESC', $c2->summary);
$this->assertEquals(FORMAT_MOODLE, $c2->summaryformat);
}
public function test_restore_course_info_in_existing_course() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$c1 = $dg->create_course(['shortname' => 'SN', 'fullname' => 'FN', 'summary' => 'DESC', 'summaryformat' => FORMAT_MOODLE]);
$c2 = $dg->create_course(['shortname' => 'A', 'fullname' => 'B', 'summary' => 'C', 'summaryformat' => FORMAT_PLAIN]);
$backupid = $this->backup_course($c1->id);
// The information is restored but adapted because names are already taken.
$c2 = $this->restore_to_existing_course($backupid, $c2->id);
$this->assertEquals('SN_1', $c2->shortname);
$this->assertEquals('FN copy 1', $c2->fullname);
$this->assertEquals('DESC', $c2->summary);
$this->assertEquals(FORMAT_MOODLE, $c2->summaryformat);
}
public function test_restore_course_shortname_in_existing_course_without_permissions() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$u1 = $dg->create_user();
$managers = get_archetype_roles('manager');
$manager = array_shift($managers);
$roleid = $this->create_role_with_caps('moodle/course:changeshortname', CAP_PROHIBIT);
$dg->role_assign($manager->id, $u1->id);
$dg->role_assign($roleid, $u1->id);
$c1 = $dg->create_course(['shortname' => 'SN', 'fullname' => 'FN', 'summary' => 'DESC', 'summaryformat' => FORMAT_MOODLE]);
$c2 = $dg->create_course(['shortname' => 'A1', 'fullname' => 'B1', 'summary' => 'C1', 'summaryformat' => FORMAT_PLAIN]);
// The shortname does not change.
$backupid = $this->backup_course($c1->id);
$restored = $this->restore_to_existing_course($backupid, $c2->id, $u1->id);
$this->assertEquals($c2->shortname, $restored->shortname);
$this->assertEquals('FN copy 1', $restored->fullname);
$this->assertEquals('DESC', $restored->summary);
$this->assertEquals(FORMAT_MOODLE, $restored->summaryformat);
}
public function test_restore_course_fullname_in_existing_course_without_permissions() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$u1 = $dg->create_user();
$managers = get_archetype_roles('manager');
$manager = array_shift($managers);
$roleid = $this->create_role_with_caps('moodle/course:changefullname', CAP_PROHIBIT);
$dg->role_assign($manager->id, $u1->id);
$dg->role_assign($roleid, $u1->id);
$c1 = $dg->create_course(['shortname' => 'SN', 'fullname' => 'FN', 'summary' => 'DESC', 'summaryformat' => FORMAT_MOODLE]);
$c2 = $dg->create_course(['shortname' => 'A1', 'fullname' => 'B1', 'summary' => 'C1', 'summaryformat' => FORMAT_PLAIN]);
// The fullname does not change.
$backupid = $this->backup_course($c1->id);
$restored = $this->restore_to_existing_course($backupid, $c2->id, $u1->id);
$this->assertEquals('SN_1', $restored->shortname);
$this->assertEquals($c2->fullname, $restored->fullname);
$this->assertEquals('DESC', $restored->summary);
$this->assertEquals(FORMAT_MOODLE, $restored->summaryformat);
}
public function test_restore_course_summary_in_existing_course_without_permissions() {
global $DB;
$this->resetAfterTest();
$dg = $this->getDataGenerator();
$u1 = $dg->create_user();
$managers = get_archetype_roles('manager');
$manager = array_shift($managers);
$roleid = $this->create_role_with_caps('moodle/course:changesummary', CAP_PROHIBIT);
$dg->role_assign($manager->id, $u1->id);
$dg->role_assign($roleid, $u1->id);
$c1 = $dg->create_course(['shortname' => 'SN', 'fullname' => 'FN', 'summary' => 'DESC', 'summaryformat' => FORMAT_MOODLE]);
$c2 = $dg->create_course(['shortname' => 'A1', 'fullname' => 'B1', 'summary' => 'C1', 'summaryformat' => FORMAT_PLAIN]);
// The summary and format do not change.
$backupid = $this->backup_course($c1->id);
$restored = $this->restore_to_existing_course($backupid, $c2->id, $u1->id);
$this->assertEquals('SN_1', $restored->shortname);
$this->assertEquals('FN copy 1', $restored->fullname);
$this->assertEquals($c2->summary, $restored->summary);
$this->assertEquals($c2->summaryformat, $restored->summaryformat);
}
}
+1 -1
View File
@@ -136,7 +136,7 @@ class core_enrollib_testcase extends advanced_testcase {
// Make sure sorting and columns work.
$basefields = array('id', 'category', 'sortorder', 'shortname', 'fullname', 'idnumber',
'startdate', 'visible', 'groupmode', 'groupmodeforce');
'startdate', 'visible', 'groupmode', 'groupmodeforce', 'defaultgroupingid');
$courses = enrol_get_all_users_courses($user2->id, true);
$course = reset($courses);
+1 -1
View File
@@ -91,7 +91,7 @@ switch ($action) {
}
if ($errorstr) {
$user = $DB->get_record('user', array('id' => $userid), 'id, firstname, lastname');
$user = $DB->get_record('user', array('id' => $userid), 'id, ' . get_all_user_name_fields(true));
$gradestr = new stdClass();
$gradestr->username = fullname($user);
$gradestr->itemname = $grade_item->get_name();
+34
View File
@@ -0,0 +1,34 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['thisdirection'] = 'ltr';
$string['thislanguage'] = 'Breizh';
+6 -5
View File
@@ -32,20 +32,21 @@ defined('MOODLE_INTERNAL') || die();
$string['cannotcreatedboninstall'] = '<p>No és pot crear la base de dades.</p> <p>La base de dades especificada no existeix i l\'usuari que heu proporcionat no té permís per a crear-la.</p>
<p>L\'administrador del lloc hauria de verificar la configuració de la base de dades.</p>';
$string['cannotcreatelangdir'] = 'No s\'ha pogut crear el directori d\'idiomes.';
$string['cannotcreatelangdir'] = 'No s\'ha pogut crear el directori d\'idiomes';
$string['cannotcreatetempdir'] = 'No s\'ha pogut crear el directori temporal';
$string['cannotdownloadcomponents'] = 'No s\'han pogut baixar components';
$string['cannotdownloadzipfile'] = 'No s\'ha pogut baixar el fitxer zip';
$string['cannotdownloadzipfile'] = 'No s\'ha pogut baixar el fitxer ZIP';
$string['cannotfindcomponent'] = 'No s\'ha pogut trobar el component';
$string['cannotsavemd5file'] = 'No s\'ha pogut desar el fitxer md5';
$string['cannotsavezipfile'] = 'No s\'ha pogut desar el fitxer zip';
$string['cannotsavezipfile'] = 'No s\'ha pogut desar el fitxer ZIP';
$string['cannotunzipfile'] = 'No s\'ha pogut descomprimir el fitxer';
$string['componentisuptodate'] = 'El component està al dia';
$string['componentisuptodate'] = 'El component està actualitzat';
$string['dmlexceptiononinstall'] = '<p>S\'ha produït un error de la base de dades [{$a->errorcode}].<br />{$a->debuginfo}</p>';
$string['downloadedfilecheckfailed'] = 'Ha fallat la comprovació del fitxer baixat';
$string['invalidmd5'] = 'L\'md5 no és vàlid. Torneu-ho a provar';
$string['missingrequiredfield'] = 'Falta algun camp necessari';
$string['remotedownloaderror'] = 'No s\'ha pogut baixar el component al vostre servidor. Verifiqueu els paràmetres de servidor intermediari. Es recomana l\'extensió cURL.<br /><br />Haureu de baixar manualment el fitxer <a href="{$a->url}">{$a->url}</a>, copiar-lo a la ubicació "{$a->dest}" del vostre servidor i descomprimir-lo allí.';
$string['remotedownloaderror'] = '<p>No s\'ha pogut baixar el component al vostre servidor. Verifiqueu els paràmetres del servidor intermediari. Es recomana vivament l\'extensió cURL de PHP.</p>
<p>Haureu de baixar manualment el fitxer <a href="{$a->url}">{$a->url}</a>, copiar-lo a la ubicació «{$a->dest}» del vostre servidor i descomprimir-lo allí.</p>';
$string['wrongdestpath'] = 'El camí de destinació és erroni';
$string['wrongsourcebase'] = 'L\'adreça (URL) base de la font és errònia';
$string['wrongzipfilename'] = 'El nom del fitxer ZIP és erroni';
+10 -10
View File
@@ -34,8 +34,8 @@ $string['admindirname'] = 'Directori d\'administració';
$string['availablelangs'] = 'Llista d\'idiomes disponibles';
$string['chooselanguagehead'] = 'Trieu un idioma';
$string['chooselanguagesub'] = 'Trieu un idioma per a la instal·lació. S\'utilitzarà també com a idioma per defecte del lloc, tot i que després podeu canviar-lo.';
$string['clialreadyconfigured'] = 'El fitxer config.php ja existeix, feu servir dmin/cli/install_database.php si voleu instal·lar aquest lloc web.';
$string['clialreadyinstalled'] = 'El fitxer config.php ja existeix, feu servir admin/cli/upgrade.php si voleu actualitzar aquest lloc web.';
$string['clialreadyconfigured'] = 'El fitxer config.php ja existeix, feu servir admin/cli/install_database.php si voleu instal·lar el Moodle en aquest lloc web.';
$string['clialreadyinstalled'] = 'El fitxer de configuració config.php ja existeix. Feu servir admin/cli/upgrade.php si voleu actualitzar Moodle per a aquest lloc web.';
$string['cliinstallheader'] = 'Programa d\'instal·lació de línia d\'ordres de Moodle {$a}';
$string['databasehost'] = 'Servidor de base de dades:';
$string['databasename'] = 'Nom de la base de dades:';
@@ -67,14 +67,14 @@ $string['pathserrcreatedataroot'] = 'L\'instal·lador no pot crear el directori
$string['pathshead'] = 'Confirmeu els camins';
$string['pathsrodataroot'] = 'No es pot escriure en el directori dataroot.';
$string['pathsroparentdataroot'] = 'No es pot escriure en el directori pare ({$a->parent}). L\'instal·lador no pot crear el directori ({$a->dataroot}).';
$string['pathssubadmindir'] = 'Alguns serveis d\'allotjament web (pocs) utilitzen un URL especial /admin p. ex. per a accedir a un tauler de control o quelcom semblant. Malauradament això entra en conflicte amb la ubicació estàndard de les pàgines d\'administració de Moodle. Podeu arreglar aquest problema canviant el nom del directori d\'administració de Moodle en la vostra instal·lació i posant el nou nom aquí. Per exemple <em>moodleadmin</em>. Això modificarà els enllaços d\'administració de Moodle.';
$string['pathssubdataroot'] = 'Necessiteu un espai on Moodle pugui desar els fitxers penjats. Aquest directori hauria de tenir permisos de lectura I ESCRIPTURA per a l\'usuari del servidor web (normalment \'nobody\' o \'apache\'), però no cal que sigui accessible directament via web. L\'instal·lador provarà de crear-lo si no existeix.';
$string['pathssubadmindir'] = 'Alguns serveis d\'allotjament web (pocs) utilitzen /admin com a URL especial perquè accediu a un tauler de control o quelcom semblant. Malauradament, això entra en conflicte amb la ubicació estàndard de les pàgines d\'administració de Moodle. Podeu arreglar aquest problema canviant el nom del directori d\'administració de Moodle en la vostra instal·lació i posant el nou nom aquí. Per exemple: <em>moodleadmin</em>. Això arreglarà els enllaços d\'administració de Moodle.';
$string['pathssubdataroot'] = '<p>Directori on el Moodle emmagatzemarà els materials pujats pels usuaris.</p>
<p>Aquest directori hauria de tenir permisos de lectura i escriptura per a l\'usuari del servidor web (normalment \'www-data\', \'nobody\', or \'apache\').</p>
<p>No ha de ser accessible directament via web.</p>
<p>L\'instal·lador provarà de crear-lo si no existeix.</p>';
$string['pathssubdirroot'] = 'Camí complet del directori d\'instal·lació de Moodle.';
$string['pathssubwwwroot'] = 'L\'adreça web completa on s\'accedirà a Moodle.
No és possible accedir a Moodle en diferents adreces.
Si el vostre lloc té múltiples adreces públiques haureu de configurar redireccions permanents per a totes excepte aquesta.
Si el vostre lloc és accessible tant des d\'Internet com des d\'una intranet, utilitzeu aquí l\'adreça pública i configureu el DNS de manera que els usuaris de la intranet puguin utilitzar també l\'adreça pública.
Si l\'adreça no és correcta, canvieu l\'URL en el vostre navegador per reiniciar la instal·lació amb un altre valor.';
$string['pathssubwwwroot'] = '<p>L\'adreça web completa on s\'accedirà a Moodle; per exemple, l\'adreça que els usuaris introduiran a la barra d\'adreces del navegador per accedir a Moodle.</p> <p> No és possible accedir a Moodle utilitzant diferents adreces. Si el vostre lloc és accessible a través de diferents adreces, trieu-ne la més fàcil i configureu una redirecció permanent per a cadascuna de les altres adreces.</p> <p>
Si el vostre lloc és accessible tant des d\'Internet com des d\'una xarxa interna (anomenada de vegades intranet), utilitzeu l\'adreça pública aquí.</p> <p>Si l\'adreça actual no és correcta, canvieu l\'URL a la barra d\'adreces del navegador i reinicieu la instal·lació.';
$string['pathsunsecuredataroot'] = 'La ubicació del dataroot no és segura.';
$string['pathswrongadmindir'] = 'No existeix el directori d\'administració';
$string['phpextension'] = 'Extensió PHP {$a}';
@@ -84,7 +84,7 @@ $string['phpversionhelp'] = '<p>Moodle necessita una versió de PHP 4.3.0 o 5.1.
<p>Us cal actualitzar el PHP o traslladar Moodle a un ordinador amb una versió de PHP més recent.<br />(Si esteu utilitzant la versió 5.0.x, alternativament també podríeu tornar enrere a la 4.4.x)</p>';
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
$string['welcomep20'] = 'Esteu veient aquesta pàgina perquè heu instal·lat amb èxit i heu executat el paquet <strong>{$a->packname} {$a->packversion}</strong>. Felicitacions.';
$string['welcomep30'] = 'Aquesta versió de <strong>{$a->installername}</strong> inclou les aplicacions necessàries per crear un entorn en el qual funcioni <strong>Moodle</strong>:';
$string['welcomep30'] = 'Aquesta versió de <strong>{$a->installername}</strong> inclou les aplicacions necessàries per crear un entorn en el qual funcioni <strong>Moodle</strong>, concretament:';
$string['welcomep40'] = 'El paquet inclou també <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
$string['welcomep50'] = 'L\'ús de totes les aplicacions d\'aquest paquet és governat per les seves llicències respectives. El paquet <strong>{$a->installername}</strong> complet és
<a href="http://www.opensource.org/docs/definition_plain.html">codi font obert</a> i es distribueix
+1
View File
@@ -30,5 +30,6 @@
defined('MOODLE_INTERNAL') || die();
$string['parentlanguage'] = '';
$string['thisdirection'] = 'ltr';
$string['thislanguage'] = 'Català';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Idioma';
$string['moodlelogo'] = 'Logotip de Moodle';
$string['next'] = 'Següent';
$string['previous'] = 'Anterior';
$string['reload'] = 'Torna a carregar';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'زمان';
$string['moodlelogo'] = 'لۆگۆی موودڵ';
$string['next'] = 'دواتر';
$string['previous'] = 'پێشوو';
$string['reload'] = 'بارکردنەوە';
+9 -3
View File
@@ -69,9 +69,15 @@ $string['pathshead'] = 'Potvrdit cesty';
$string['pathsrodataroot'] = 'Do datového adresáře nelze zapisovat.';
$string['pathsroparentdataroot'] = 'Do nadřazeného adresáře ({$a->parent}) nelze zapisovat. Datový adresář ({$a->dataroot}) nemůže být tímto průvodcem instalací vytvořen.';
$string['pathssubadmindir'] = 'Na některých serverech je URL adresa /admin vyhrazena pro speciální účely (např. pro ovládací panel). Na takových serverech může dojít ke kolizi se standardním umístěním stránek pro správu Moodle. Máte-li tento problém, přejmenujte adresář <eM>admin</em> ve vaší instalaci Moodle a sem zadejte jeho nový název - například <em>moodleadmin</em>. Všechny generované odkazy na stránky správy Moodle budou používat tento nový název.';
$string['pathssubdataroot'] = 'Moodle potřebuje prostor, kam si bude ukládat nahrané soubory a další údaje. K tomuto adresáři musí mít proces webového serveru právo ke čtení i k zápisu (webový server bývá většinou spouštěn pod uživatelem "www-data" nebo "apache"). Tento adresář ale zároveň nesmí být dostupný přímo přes webové rozhraní. Instalační skript se pokusí tento adresář vytvořit, pokud nebude existovat.';
$string['pathssubdataroot'] = '<p>Moodle potřebuje prostor, kam si bude ukládat nahrané soubory a další údaje. .</p>
<p>K tomuto adresáři musí mít proces webového serveru právo ke čtení i k zápisu (webový server bývá většinou spouštěn pod uživatelem "www-data" nebo "apache"). .</p>
<p>Tento adresář ale zároveň nesmí být dostupný přímo přes webové rozhraní. .</p>
<p>Instalační skript se pokusí tento adresář vytvořit, pokud nebude existovat..</p>';
$string['pathssubdirroot'] = 'Absolutní cesta k adresáři s instalací Moodle';
$string['pathssubwwwroot'] = 'Zadejte úplnou webovou adresu, na níž bude Moodle dostupný. Moodle potřebuje jedinečnou adresu, není možné jej provozovat na několika URL současně. Používáte-li několik veřejných domén, musíte si sami nastavit permanentní přesměrování na jednu z nich a tu pak použít. Pokud je váš server dostupný z vnější a z vnitřní sítě pod různými IP adresami, použijte jeho veřejnou adresu a nastavte si váš DNS server tak, že ji mohou používat i uživatelé z vnitřní sítě.';
$string['pathssubwwwroot'] = '<p>Zadejte úplnou webovou adresu, na níž bude Moodle dostupný, t.j. adresa, kterou zadají uživatelé do adresního řádku svého prohlížeče, aby spustili Moodle.</p>
<p>Moodle potřebuje jedinečnou adresu, není možné jej provozovat na několika URL současně. Používáte-li několik veřejných domén, musíte si sami nastavit permanentní přesměrování na jednu z nich a tu pak použít.</p>
<p> Pokud je váš server dostupný z vnější a z vnitřní sítě pod různými IP adresami, použijte jeho veřejnou adresu a nastavte si váš DNS server tak, že ji mohou používat i uživatelé z vnitřní sítě.</p>
<p>Pokud aktuální adresa není správná, změňte URL adresu v adresním řádku prohlížeče a spusťte instalaci.</p>';
$string['pathsunsecuredataroot'] = 'Umístění datového adresáře není bezpečné';
$string['pathswrongadmindir'] = 'Adresář pro správu serveru (admin) neexistuje';
$string['phpextension'] = '{$a} PHP rozšíření';
@@ -82,7 +88,7 @@ $string['phpversionhelp'] = '<p>Moodle vyžaduje PHP alespoň verze 4.3.0 nebo 5
(U PHP 5.0.x můžete také přejít na nižší verzi 4.4.x )</p>';
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
$string['welcomep20'] = 'Podařilo se vám úspěšně nainstalovat a spustit balíček <strong>{$a->packname} {$a->packversion}</strong>. Gratulujeme!';
$string['welcomep30'] = '<strong>{$a->installername}</strong> obsahuje aplikace k vytvoření prostředí, ve kterém bude provozován váš <strong>Moodle</strong>. Jmenovitě se jedná o:';
$string['welcomep30'] = 'Tato verze <strong>{$a->installername}</strong> obsahuje aplikace k vytvoření prostředí, ve kterém bude provozován váš <strong>Moodle</strong>. Jmenovitě se jedná o:';
$string['welcomep40'] = 'Balíček rovněž obsahuje <strong>Moodle ve verzi {$a->moodlerelease} ({$a->moodleversion})</strong>.';
$string['welcomep50'] = 'Použití všech aplikací v tomto balíčku je vázáno jejich příslušnými licencemi. Kompletní balíček <strong>{$a->installername}</strong> je software s <a href="http://www.opensource.org/docs/definition_plain.html"> otevřeným kódem (open source)</a> a je šířen pod licencí <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>.';
$string['welcomep60'] = 'Následující stránky vás v několik jednoduchých krocích nastavením <strong>Moodlu</strong> na vašem počítači. Můžete přijmout výchozí nastavení, nebo si je upravit podle svých potřeb.';
+4 -1
View File
@@ -30,6 +30,7 @@
defined('MOODLE_INTERNAL') || die();
$string['cannotcreatedboninstall'] = '<p>Kan ikke oprette databasen.</p> <p>Den specificerede database eksisterer ikke og brugeren har ikke tilladelse til at oprette den.</p> <p>Administrator bør verificere databasekonfigurationen.</p>';
$string['cannotcreatelangdir'] = 'Kan ikke oprette sprogmappe';
$string['cannotcreatetempdir'] = 'Kan ikke oprette temp-mappe';
$string['cannotdownloadcomponents'] = 'Kan ikke downloade komponenter';
@@ -39,9 +40,11 @@ $string['cannotsavemd5file'] = 'Kan ikke gemme md5-fil';
$string['cannotsavezipfile'] = 'Kan ikke gemme zip-fil';
$string['cannotunzipfile'] = 'Kan ikke pakke filen ud';
$string['componentisuptodate'] = 'Komponenten er ajour';
$string['downloadedfilecheckfailed'] = 'Downloadet fil-tjek fejlede';
$string['dmlexceptiononinstall'] = '<p>En databasefejl er opstået [{$a->errorcode}].<br />{$a->debuginfo}</p>';
$string['downloadedfilecheckfailed'] = 'Downloadet fil-tjek mislykkedes';
$string['invalidmd5'] = 'Tjekvariablen var forkert - prøv igen';
$string['missingrequiredfield'] = 'Der mangler nogle obligatoriske felter';
$string['remotedownloaderror'] = '<p>Download af komponenten til din server mislykkedes. Verificer proxy-indstillilngerne, udvidelsen PHP cURL anbefales kraftigt. </p> <p>Du skal downloade filen <a href="{$a->url}">{$a->url}</a> manuelt, kopiere den til "{$a->dest}" på din server og udpakke den der.</p>';
$string['wrongdestpath'] = 'Forkert destinationssti';
$string['wrongsourcebase'] = 'Forkert kilde-URL';
$string['wrongzipfilename'] = 'Forkert zip-filnavn';
+12 -9
View File
@@ -34,13 +34,15 @@ $string['admindirname'] = 'Admin-mappe';
$string['availablelangs'] = 'Tilgængelige sprogpakker';
$string['chooselanguagehead'] = 'Vælg et sprog';
$string['chooselanguagesub'] = 'Vælg et sprog til brug under installationen. Dette sprog vil også blive brugt som standardsprog på webstedet, men det kan altid ændres til et andet sprog.';
$string['clialreadyconfigured'] = 'Konfigurationsfilen config.php eksisterer allerede. Benyt venigst admin/cli/install_database.php til at installere Moodle for dette site.';
$string['clialreadyinstalled'] = 'Filen config.php eksisterer allerede, brug venligst admin/cli/upgrade.php hvis du ønsker at opgradere dette websted.';
$string['cliinstallheader'] = 'Moodle {$a} kommandolinje-installationsprogram';
$string['databasehost'] = 'Databasevært';
$string['databasename'] = 'Databasenavn';
$string['databasetypehead'] = 'Vælg databasedriver';
$string['dataroot'] = 'Datamappe';
$string['dbprefix'] = 'Præfix for tabeller';
$string['datarootpermission'] = 'Rettighed til datamapper';
$string['dbprefix'] = 'Præfiks til tabeller';
$string['dirroot'] = 'Moodle-mappe';
$string['environmenthead'] = 'Kontrollerer din serveropsætning...';
$string['environmentsub2'] = 'Hver version af Moodle har nogle minimumskrav til PHP-version og nogle obligatoriske PHP-extensions.
@@ -70,13 +72,14 @@ $string['pathshead'] = 'Bekræft stier';
$string['pathsrodataroot'] = 'Datamappen er skrivebeskyttet.';
$string['pathsroparentdataroot'] = 'Den overordnede mappe ({$a->parent}) er skrivebeskyttet. Datamappen ({$a->dataroot}) kan ikke oprettes af installationsprogrammet.';
$string['pathssubadmindir'] = 'Enkelte webhoteller bruger /admin som speciel URL til kontrolpanelet el. lign. Desværre konflikter det med Moodles standardplacering af admin-sider. Du kan klare dette ved at give admin-mappen et andet navn i din installation og skrive det her. Det kan f.eks. være <em>moodleadmin</em>. Det vil fikse admin-links i Moodle.';
$string['pathssubdataroot'] = 'Du har brug for et sted, hvor Moodle kan gemme uploadede filer. Denne mappe skal kunne læses OG SKRIVES I af webserverbrugeren (oftest \'ingen\' eller \'apache\'), men må ikke være tilgængelig direkte via internettet. Installationsprogrammet vil forsøge at oprette mappen, hvis ikke den allerede eksisterer.';
$string['pathssubdirroot'] = 'Den fulde sti til Moodleinstallationen.';
$string['pathssubwwwroot'] = 'Moodles fulde web-adresse.
Det er ikke muligt at komme ind på Moodle fra mere end en adresse.
Hvis dit websted har flere offentlige adresser skal du opsætte permanent viderestilling til dem alle undtagen denne.
Hvis dit websted er tilgængeligt fra både internet og intranet skal du bruge internetadressen her og opsætte din DNS sådan at intranet-brugerne kan bruge den offentlige adresse også.
Hvis ikke adressen er korrekt må du ændre URL\'en i din browser og genstarte installationen med den rigtige adresse.';
$string['pathssubdataroot'] = '<p>En mappe hvori Moodle kan gemme alle brugeres uploadede filer.</p>
<p>Mappen skal både have læse- og skriveadgang Webserver-brugeren (som regel \'www-data\', \'nobody\', eller \'apache\') skal have både læse- og skriveadgang til den.</p>
<p>Mappen må ikke have direkte adgang fra internettet.</p>
<p>Installationsprogrammet vil forsøge at oprette mappen, hvis ikke den findes i forvejen.</p>';
$string['pathssubdirroot'] = '<p>Den fulde sti til mappen med Moodles kode.</p>';
$string['pathssubwwwroot'] = '<p>Moodles fulde web-adresse, dvs. den adresse brugere skal indtaste i browserens adressefelt for at få adgang til Moodle.</p>
<p>Det er ikke muligt at komme ind på Moodle fra mere end en adresse. Er dit site tilgængeligt via flere adresser skal du vælge den letteste og opsætte en permanent viderestilling til hver af de andre adresser.</p> <p>Er dit site tilgængeligt fra både internettet og et internt netværk (ofte kaldet intranet), brug da den offentlige adresse her.</p>
<p>Hvis ikke den aktuelle adresse er korrekt, skal du rette URL\'en i din browsers adressefelt og genstarte installationen.</p>';
$string['pathsunsecuredataroot'] = 'Datamappen er ikke sikret';
$string['pathswrongadmindir'] = 'Adminmappe eksisterer ikke';
$string['phpextension'] = '{$a} PHP-extension';
@@ -91,6 +94,6 @@ Tillykke med det!';
$string['welcomep30'] = 'Denne udgave af <strong>{$a->installername}</strong> indeholder programmerne til at oprette et miljø, hvori <strong>Moodle</strong> vil operere, nemlig:';
$string['welcomep40'] = 'Pakken indeholder også <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
$string['welcomep50'] = 'Brugen af programmerne i denne pakke er styret af deres respektive licenser. Hele <strong>{$a->installername}</strong>-pakken er <a href="http://www.opensource.org/docs/definition_plain.html">open source</a> og distribueret under <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>-licensen.';
$string['welcomep60'] = 'De følgende sider vil hjælpe dig gennem nogle nemme trin til konfiguration og opsætning af <strong>Moodle</strong> på din computer. Du kan acceptere standardindstillingerne eller vælge at ændre dem så de bedre svarer til dine egne behov.';
$string['welcomep60'] = 'De følgende sider vil hjælpe dig gennem nogle nemme trin til konfiguration og opsætning af <strong>Moodle</strong> på din computer. Du kan acceptere standardindstillingerne eller, hvis du foretrækker det, vælge at ændre dem så de bedre svarer til dine egne behov.';
$string['welcomep70'] = 'Klik på "Næste" herunder for at forsætte opsætningen af <strong>Moodle</strong>.';
$string['wwwroot'] = 'Webadresse';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Sprog';
$string['moodlelogo'] = 'Moodlelogo';
$string['next'] = 'Næste';
$string['previous'] = 'Forrige';
$string['reload'] = 'Genindlæs';
+35
View File
@@ -0,0 +1,35 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['parentlanguage'] = 'da';
$string['thisdirection'] = 'ltr';
$string['thislanguage'] = 'Dansk Rum';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'སྐད་ཡིག།';
$string['moodlelogo'] = 'Moodle ལས་རྟགས།';
$string['next'] = 'ཤུལ་མམ';
$string['previous'] = 'ཧེ་མམ';
$string['reload'] = 'ཡང་བསྐྱར་མངོན་གསལ་འབད';
+1 -1
View File
@@ -90,7 +90,7 @@ $string['phpversionhelp'] = '<p>Moodle requiere al menos una versión de PHP 4.3
<p>¡Debe actualizar PHP o trasladarse a otro servidor con una versión más reciente de PHP!<br />
(En caso de 5.0.x podría también revertir a la versión 4.4.x)</p>';
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
$string['welcomep20'] = 'Si está viendo esta página es porque ha podido ejecutar el paquete <strong>{$a->packname} {$a->packversion}</strong> en su computadora. !Enhorabuena!';
$string['welcomep20'] = 'Si está viendo esta página es porque ha podido instalar y ejecutar exitosamente el paquete <strong>{$a->packname} {$a->packversion}</strong> en su computadora. !Enhorabuena!';
$string['welcomep30'] = 'Esta versión de <strong>{$a->installername}</strong> incluye las aplicaciones necesarias para que <strong>Moodle</strong> funcione en su computadora, principalmente:';
$string['welcomep40'] = 'El paquete también incluye <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
$string['welcomep50'] = 'El uso de todas las aplicaciones del paquete está gobernado por sus respectivas
+1
View File
@@ -30,4 +30,5 @@
defined('MOODLE_INTERNAL') || die();
$string['cannotfindcomponent'] = 'کامپوننت پیدا نشد';
$string['missingrequiredfield'] = 'بعضی از فیلدهای ضروری خالی است';
+2
View File
@@ -34,6 +34,8 @@ $string['admindirname'] = 'دایرکتوری مدیر';
$string['availablelangs'] = 'بسته‌های زبانی موجود';
$string['chooselanguagehead'] = 'انتخاب زبان';
$string['chooselanguagesub'] = 'لطفاً زبانی را به جهت استفاده در حین نصب انتخاب نمائید. زبان سایت و کاربر را در صفحه‌ای دیگر می‌توانید انتخاب کنید.';
$string['databasehost'] = 'میزبان پایگاه داده';
$string['databasename'] = 'نام پایگاه داده';
$string['dataroot'] = 'دایرکتوری داده';
$string['dbprefix'] = 'پیشوند جدول‌ها';
$string['dirroot'] = 'دایرکتوری مودل';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'زبان';
$string['moodlelogo'] = 'لوگوی مودل';
$string['next'] = 'ادامه';
$string['previous'] = 'قبلی';
$string['reload'] = 'بررسی مجدد';
+2 -2
View File
@@ -40,5 +40,5 @@ $string['cliunknowoption'] = 'Options non reconnues :
{$a}.
Utilisez l\'option --help.';
$string['cliyesnoprompt'] = 'Tapez y (pour oui) ou n (pour non)';
$string['environmentrequireinstall'] = 'doit être installé et activé';
$string['environmentrequireversion'] = 'la version {$a->needed} est requise ; vous utilisez actuellement la version {$a->current}';
$string['environmentrequireinstall'] = 'L\'extension doit être installée et activée';
$string['environmentrequireversion'] = 'La version {$a->needed} est requise ; vous utilisez actuellement la version {$a->current}';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Idioma';
$string['moodlelogo'] = 'Logotipo de Moodle';
$string['next'] = 'Seguinte';
$string['previous'] = 'Anterior';
$string['reload'] = 'Cargar de novo';
+2 -2
View File
@@ -41,5 +41,5 @@ $string['cliunknowoption'] = 'אפשרויות לא מוכרות :
{$a}
אנא השתמש באפשרות העזרה.';
$string['cliyesnoprompt'] = 'רשום y (שפרושו כן) או n (שפרושו לא)';
$string['environmentrequireinstall'] = 'נדרש להתקין/לאפשר זאת';
$string['environmentrequireversion'] = 'גירסת {$a->needed} נדרשת ואתה מריץ {$a->current}';
$string['environmentrequireinstall'] = 'נדרש להתקין ולאפשר הרחבה זו';
$string['environmentrequireversion'] = 'גירסה {$a->needed} נדרשת אך הגירסה הנוכחית היא {$a->current}';
+2 -2
View File
@@ -86,10 +86,10 @@ $string['pathsunsecuredataroot'] = 'ספריית המידע (Data Directory) ל
$string['pathswrongadmindir'] = 'ספריית ה-admin לא קיימת';
$string['phpextension'] = 'הרחבת PHP {$a}';
$string['phpversion'] = 'גירסת PHP';
$string['phpversionhelp'] = '<p>גרסת PHP חייבת להיות לפחות 4.3.0 או 5.1.0 (בגרסאות 5.0.x קיימות מספר בעיות ידועות) </p>
$string['phpversionhelp'] = '<p>גרסת PHP חייבת להיות לפחות 4.3.0 או 5.1.0 (בגרסאות 5.0 קיימות מספר בעיות ידועות) </p>
<p> במערכת שלך פועלת כרגע גרסת {$a} </p>
<p> אתה חייב לשדרג את גרסת ה-PHP שלך או לעבור למחשב מארח עם עם גירסת PHP חדשה! <br/>
(במקרים של גרסת 5.0.x תוכל גם לרדת בגרסה ל- 4.4.x)
(במקרים של גרסת 5.0 תוכל גם לרדת בגרסה ל- 4.4)
</p>';
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
$string['welcomep20'] = 'הינך רואה את עמוד זה מפני שהתקנת והפעלת בהלכה את <strong>{$a->packname} {$a->packversion}</strong>
+1 -1
View File
@@ -33,4 +33,4 @@ defined('MOODLE_INTERNAL') || die();
$string['language'] = 'שפת ממשק';
$string['next'] = 'הבא';
$string['previous'] = 'קודם';
$string['reload'] = 'טען מחדש';
$string['reload'] = 'טעינה מחדש';
+3
View File
@@ -32,5 +32,8 @@ defined('MOODLE_INTERNAL') || die();
$string['clianswerno'] = 'ոչ';
$string['cliansweryes'] = 'այո';
$string['cliincorrectvalueerror'] = 'Սխալ, "{$a->value}"-ը ոչ ճիշտ արժեք է "{$a->option}"-ի համար';
$string['cliincorrectvalueretry'] = 'Ոչ ճիշտ արժեք, կրկին փորձեք';
$string['cliyesnoprompt'] = 'Մեքենագրեք y (նշանակում է այո) կամ n (նշանակում է ոչ):';
$string['environmentrequireinstall'] = 'անհրաժեշտ է, որպեսզի տեղակայված և թույլատրված լինի';
$string['environmentrequireversion'] = 'պահանջվում է {$a->needed} տարբերակը, դուք գործարկում եք՝ {$a->current}';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Լեզու';
$string['moodlelogo'] = 'Moodle-ի լոգոտիպ';
$string['next'] = 'Հաջորդը';
$string['previous'] = 'Նախորդը';
$string['reload'] = 'Վերաբեռնել';
+33
View File
@@ -0,0 +1,33 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['thislanguage'] = 'Taqbaylit';
+33
View File
@@ -0,0 +1,33 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['thislanguage'] = 'Malagasy';
+34
View File
@@ -0,0 +1,34 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['parentlanguage'] = '';
$string['thislanguage'] = 'Crnogorski';
+2
View File
@@ -31,5 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Јазик';
$string['moodlelogo'] = 'Moodle лого';
$string['next'] = 'Следно';
$string['previous'] = 'Претходно';
$string['reload'] = 'Вчитај повторно';
+33
View File
@@ -0,0 +1,33 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['paths'] = 'ठेगानाहरु';
+33
View File
@@ -0,0 +1,33 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Automatically generated strings for Moodle installer
*
* Do not edit this file manually! It contains just a subset of strings
* needed during the very first steps of installation. This file was
* generated automatically by export-installer.php (which is part of AMOS
* {@link http://docs.moodle.org/dev/Languages/AMOS}) using the
* list of strings defined in /install/stringnames.txt.
*
* @package installer
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['next'] = 'अर्को';
+3 -1
View File
@@ -66,7 +66,9 @@ $string['pathshead'] = 'Bekreft stier';
$string['pathsrodataroot'] = 'Dataroot katalog er ikke skrivbar.';
$string['pathsroparentdataroot'] = 'Overordnet katalog ({$a->parent}) er ikke skrivbar. Datakatalogen ({$a->dataroot}) kan ikke opprettes av installasjonsprogrammet.';
$string['pathssubadmindir'] = 'Noen ganske få webhoteller bruker /admin som en egen url for å få tilgang til et kontrollpanel. Dessverre kommer det i konflikt med standard lokalisering av Moodle sine admin-sider. Du kan fikse dette ved å endre navn på admin-mappen og deretter oppgi dette navnet her. F.eks. <em>moodleadmin</em>. Dette vil fikse adminlenkene i Moodle.';
$string['pathssubdataroot'] = 'Du trenger et sted hvor Moodle kan lagre opplastede filer. Denne mappen må være med lese og skriverettigheter for webserver-brukeren (veldig ofte \'nobody\' eller \'apache\'), men denne mappen må IKKE være direkte tilgjengelig via web. Installasjonsprogrammet vil forsøke å opprette den om den ikke finnes fra før.';
$string['pathssubdataroot'] = '<p>En mappe der Moodle vil lagre alle filer lastet opp av brukerne.</p>
<p>Denne mappen må være med lese og skriverettigheter for webserver-brukeren (vanligvis \'www-data\', \'nobody\' eller \'apache\').</p>
<p>Denne mappen må IKKE være direkte tilgjengelig via web.</p> <p>Installasjonsprogrammet vil forsøke å opprette den om den ikke finnes fra før.</p>';
$string['pathssubdirroot'] = '<p>Full mappesti til moodleinstallasjonen.</p>';
$string['pathssubwwwroot'] = '<p>Full webadresse til der hvor Moodle skal vises, altså den addressen som brukere skriver inn i adresselinjen i nettlseren sin.</p>
<p>Det er ikke mulig å bruke Moodle med mer enn en adresse. Dersom portalen din har flere webadresser bør du oppgi den enkleste av de her, og bruke videresending for hver av de andre adressene.</p>
+6 -6
View File
@@ -30,9 +30,9 @@
defined('MOODLE_INTERNAL') || die();
$string['cannotcreatedboninstall'] = '<p>Impossible de crear la banca de donadas.</p>
<p>La banca de donadas indicada existís pas e l\'utilizaire especificat a pas las autorizacions que permeton de crear una banca de donadas.</p>.
<p>L\'administrator del site deu repassar la configuracion de la banca de donadas.</p>';
$string['cannotcreatedboninstall'] = '<p>Impossible de crear la basa de donadas.</p>
<p>La banca de donadas indicada existís pas e l\'utilizaire especificat a pas las autorizacions que permeton de crear una basa de donadas.</p>.
<p>L\'administrator del site deu repassar la configuracion de la basa de donadas.</p>';
$string['cannotcreatelangdir'] = 'Creacion del dorsièr lang impossible';
$string['cannotcreatetempdir'] = 'Creacion del dorsièr temp impossibla';
$string['cannotdownloadcomponents'] = 'Telecargament dels components impossible';
@@ -42,12 +42,12 @@ $string['cannotsavemd5file'] = 'Enregistrament del fichièr md5 impossible';
$string['cannotsavezipfile'] = 'Enregistrament del fichièr ZIP impossible';
$string['cannotunzipfile'] = 'Descompression del fichièr ZIP impossibla';
$string['componentisuptodate'] = 'Lo component es a jorn';
$string['dmlexceptiononinstall'] = '<p>Una error de banca de donadas s\'es producha [{$a->errorcode}].<br />{$a->debuginfo}</p>';
$string['dmlexceptiononinstall'] = '<p>Una error de basa de donadas s\'es produita [{$a->errorcode}].<br />{$a->debuginfo}</p>';
$string['downloadedfilecheckfailed'] = 'La verificacion del fichièr telecargat a fracassat';
$string['invalidmd5'] = 'Lo còde de contraròtle md5 es pas valid';
$string['invalidmd5'] = 'Lo còdi de contraròtle md5 es pas valid';
$string['missingrequiredfield'] = 'Un camp obligatòri es pas completat';
$string['remotedownloaderror'] = '<p>Lo telecargament del component sus vòstre servidor a fracassat. Verificatz los reglatges de proxy. L\'extension cURL de PHP es bravament recomandada.</p>
<p>Vos cal telecargar manualament lo fichièr <a href="{$a->url}">{$a->url}</a>, lo copiar sus vòstre servidor a l\'emplaçament « {$a->dest} » e lo descompressar a aqueste endrech.</p>';
<p>Vos cal telecargar manualament lo fichièr <a href="{$a->url}">{$a->url}</a>, lo copiar sus vòstre servidor a l\'emplaçament « {$a->dest} » e lo descompressar a aqueste endreit.</p>';
$string['wrongdestpath'] = 'Camin de destinacion incorrècte';
$string['wrongsourcebase'] = 'Adreça URL de basa de la font incorrècta';
$string['wrongzipfilename'] = 'Nom de fichièr ZIP incorrècte';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Lenga';
$string['moodlelogo'] = 'Lògo Moodle';
$string['next'] = 'Seguent';
$string['previous'] = 'Precedent';
$string['reload'] = 'Actualizar';
+1 -1
View File
@@ -44,7 +44,7 @@ $string['dmlexceptiononinstall'] = '<p>Ocorreu um erro de base de dados [{$a->er
$string['downloadedfilecheckfailed'] = 'A verificação do ficheiro descarregado falhou.';
$string['invalidmd5'] = 'A variável de verificação está errada - tente novamente.';
$string['missingrequiredfield'] = 'Um dos campos obrigatórios está em falta';
$string['remotedownloaderror'] = 'O download do componente para o servidor falhou. Verifique as configurações do proxy. A instalação da extensão cURL do PHP é muito recomendada.<br /><br />Terá de fazer manualmente o download do ficheiro <a href="{$a->url}">{$a->url}</a>, copiá-lo para a pasta "{$a->dest}" no seu servidor e descompactá-lo';
$string['remotedownloaderror'] = 'Não foi possível descarregar o componente para o servidor. Verifique as configurações do proxy. A instalação da extensão cURL do PHP é muito recomendada.<br /><br />Terá de descarregar manualmente o ficheiro <a href="{$a->url}">{$a->url}</a>, copiá-lo para a pasta "{$a->dest}" no seu servidor e descompactá-lo';
$string['wrongdestpath'] = 'Caminho de destino errado';
$string['wrongsourcebase'] = 'Base do URL de origem errada';
$string['wrongzipfilename'] = 'Nome de ficheiro ZIP errado';
+2 -2
View File
@@ -48,13 +48,13 @@ $string['environmenthead'] = 'A verificar sistema...';
$string['environmentsub2'] = 'Cada nova versão do Moodle tem pré-requisitos mínimos relativamente à versão do PHP e extensões necessárias para o seu correto funcionamento. Estes pré-requisitos são verificados sempre que o Moodle é instalado ou atualizado. Contacte o administrador do servidor caso seja necessário atualizar a versão do PHP ou instalar novas extensões.';
$string['errorsinenvironment'] = 'A verificação do sistema falhou!';
$string['installation'] = 'Instalação';
$string['langdownloaderror'] = 'Não foi possível instalar o idioma <b>{$a}</b> por falha no download. O processo de instalação continuará em Inglês.';
$string['langdownloaderror'] = 'Não foi possível descarregar o idioma <b>{$a}</b> . O processo de instalação continuará em Inglês.';
$string['memorylimithelp'] = '<p>O limite de memória para o PHP definido atualmente no servidor é <b>{$a}</b>.</p><p>Um número elevado de módulos em utilização ou de utilizadores registados pode fazer com que o Moodle apresente problemas de falta de memória.</p><p>É recomendado que o PHP seja configurado com um limite de memória de pelo menos 40MB. Esta configuração pode ser definida de diversas formas:</p><ol><li>Compilação do PHP com o parâmetro <b>--enable-memory-limit</b>. Esta definição permitirá ao próprio Moodle definir o valor a utilizar.</li><li>Alteração do parâmetro <b>memory_limit</b> no ficheiro de configuração do PHP para um valor igual ou superior a 40MB.</li><li>Criação de um ficheiro <b>.htaccess</b> na raiz da pasta do Moodle com a linha <b>php_value memory_limit 40M</b><p>ATENÇÃO: Em alguns servidores esta configuração impedirá o funcionamento de <b>todas</b> as páginas PHP. Nestes casos, não poderá ser utilizado o ficheiro <b>.htaccess</b>.</p></li></ol>';
$string['paths'] = 'Caminhos';
$string['pathserrcreatedataroot'] = 'O programa de instalação não conseguiu criar a pasta de dados <b>{$a->dataroot}</b>.';
$string['pathshead'] = 'Confirmar caminhos';
$string['pathsrodataroot'] = 'A pasta de dados não tem permissões de escrita.';
$string['pathsroparentdataroot'] = 'A pasta pai <b>{$a->parent}</b> não tem permissões de escrita. O programa de instalação não conseguiu criar a pasta <b>{$a->dataroot}</b>.';
$string['pathsroparentdataroot'] = 'A pasta ascendente <b>{$a->parent}</b> não tem permissões de escrita. O programa de instalação não conseguiu criar a pasta <b>{$a->dataroot}</b>.';
$string['pathssubadmindir'] = 'Alguns servidores Web utilizam a pasta <strong>admin</strong> em URLs especiais de acesso a funcionalidades especiais, como é o caso de painéis de controlo. Algumas situações podem criar conflitos com a localização normal das páginas de administração do Moodle. Estes problemas podem ser resolvidos renomeando a pasta <strong>admin</strong> na instalação do Moodle e indicando aqui o novo nome a utilizar. Por exemplo:<br /><br /><b>moodleadmin</b><br /><br />Esta ação resolverá os problemas de acesso das hiperligações para as funcionalidades de administração do Moodle.';
$string['pathssubdataroot'] = '<p>Uma diretoria em que o Moodle irá armazenar todo o conteúdo de ficheiros enviados pelos utilizadores.</p>
<p>Esta diretoria deve ser legível e gravável pelo utilizador do servidor web (geralmente \'www-data\', \'nobody\', ou \'apache\').</p>
+1 -1
View File
@@ -31,7 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Idioma';
$string['moodlelogo'] = 'Logotipo Moodle';
$string['moodlelogo'] = 'Logótipo Moodle';
$string['next'] = 'Seguinte';
$string['previous'] = 'Anterior';
$string['reload'] = 'Recarregar';
+1 -1
View File
@@ -34,7 +34,7 @@ $string['clianswerno'] = 'n';
$string['cliansweryes'] = 's';
$string['cliincorrectvalueerror'] = 'Erro, valor incorreto "{$a->value}" para "{$a->option}"';
$string['cliincorrectvalueretry'] = 'Valor incorreto, por favor tente novamente';
$string['clitypevalue'] = 'Digite o valor';
$string['clitypevalue'] = 'digite o valor';
$string['clitypevaluedefault'] = 'digite o valor, pressione Enter para utilizar o valor padrão ({$a})';
$string['cliunknowoption'] = 'Opções não reconhecidas:
{$a}
+1
View File
@@ -42,6 +42,7 @@ $string['cannotsavemd5file'] = 'Fişierul md5 nu poate fi salvat';
$string['cannotsavezipfile'] = 'Arhiva ZIP nu poate fi salvată';
$string['cannotunzipfile'] = 'Arhiva nu poate fi deschisă';
$string['componentisuptodate'] = 'Componenta este actualizată';
$string['dmlexceptiononinstall'] = '<p>A apărut o problemă la baza de date [{$a->errorcode}].<br />{$a->debuginfo}</p>';
$string['downloadedfilecheckfailed'] = 'Verificarea fişierului descărcat a eşuat';
$string['invalidmd5'] = 'md5 incorect';
$string['missingrequiredfield'] = 'Lipseşte un câmp obligatoriu';
+12
View File
@@ -36,6 +36,7 @@ $string['chooselanguagehead'] = 'Selectare limbă';
$string['chooselanguagesub'] = 'Vă rugăm selectaţi limba pentru interfaţa de instalare, limba selectată va fi folosită EXCLUSIV în cadrul procedurii de instalare. Ulterior veţi putea selecta limba în care doriţi să fie afişată interfaţa.';
$string['clialreadyconfigured'] = 'Fișierul de configurare';
$string['clialreadyinstalled'] = 'Fișierul de configurare config.php există deja. Vă rugăm să folosiți dmin/cli/install_database.php to pentru a upgrada Moodle pentru acest site.';
$string['cliinstallheader'] = 'Program command line installation Moodle {$a}';
$string['databasehost'] = 'Gazdă baza de date';
$string['databasename'] = 'Nume baza de date';
$string['databasetypehead'] = 'Alegere driver baza de date';
@@ -44,9 +45,13 @@ $string['datarootpermission'] = 'Permisiuni directoare date';
$string['dbprefix'] = 'Prefix tabele';
$string['dirroot'] = 'Director Moodle';
$string['environmenthead'] = 'Se verifică mediul...';
$string['environmentsub2'] = 'Fiecare versiune Moodle are o anumită cerință minimă PHP și un număr de extensii PHP obligatorii.
Verificarea completă a mediului se face înainte de fiecare instalare și upgrade. Vă rugăm să contactați administratorul serverului, dacă nu știți cum se instalează noua versiune sau dacă activați extensiile PHP.';
$string['errorsinenvironment'] = 'Verificarea mediului eșuată!';
$string['installation'] = 'Instalare';
$string['langdownloaderror'] = 'Din păcate, limba "{$a}" nu a putut fi descărcată. Procesul de instalare va continua în limba engleză.';
$string['paths'] = 'Căi';
$string['pathserrcreatedataroot'] = 'Data directory ({$a->dataroot}) nu poate fi creat de către installer.';
$string['pathshead'] = 'Confirmare căi';
$string['pathsrodataroot'] = 'Directorul dataroot nu poate fi scris.';
$string['pathssubdirroot'] = '<p>Calea completă către directorul care conține codul Moodle .</p>';
@@ -54,5 +59,12 @@ $string['pathsunsecuredataroot'] = 'Locația dataroot nu este sigură';
$string['pathswrongadmindir'] = 'Directorul admin nu există';
$string['phpextension'] = 'extensie PHP {$a}';
$string['phpversion'] = 'Versiune PHP';
$string['phpversionhelp'] = '<p>Moodle necesită o versiune PHP de cel puțin 4.3.0 or 5.1.0 (5.0.x are un număr de probleme cunscute).</p>
<p>Momentan rulați versiunea {$a}</p>
<p>Trebuie să upgradați PHP sau să îl mutați pe o gazdă cu o nouă versiune de PHP!<br />
(În cazul 5.0.x puteți, de asemenea, să downgradați la versiunea 4.4.x)</p>';
$string['welcomep10'] = '{$a->installername} ({$a->installerversion})';
$string['welcomep20'] = 'Vedeți această pagină deoarece ați instalat și lansat cu succes pachetul <strong>{$a->packname} {$a->packversion}</strong> în computerul dumneavoastră. Felicitări!';
$string['welcomep40'] = 'Pachetul include și <strong>Moodle {$a->moodlerelease} ({$a->moodleversion})</strong>.';
$string['welcomep70'] = 'Click pe butonul "Next" de mai jos pentru a continua setarea <strong>Moodle</strong>.';
$string['wwwroot'] = 'Adresă Web';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Язык';
$string['moodlelogo'] = 'Логотип Moodle';
$string['next'] = 'Далее';
$string['previous'] = 'Назад';
$string['reload'] = 'Обновить';
+1
View File
@@ -40,6 +40,7 @@ $string['databasehost'] = 'Gostitelj podatkovne baze';
$string['databasename'] = 'Ime podatkovne baze';
$string['databasetypehead'] = 'Izberite gonilnik podatkovne baze';
$string['dataroot'] = 'Imenik za podatke';
$string['datarootpermission'] = 'Pravice za podatkovno mapo';
$string['dbprefix'] = 'Predpona tabel';
$string['dirroot'] = 'Imenik Moodle';
$string['environmenthead'] = 'Preverjanje vašega okolja ...';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Jezik';
$string['moodlelogo'] = 'Logotip Moodle';
$string['next'] = 'Naslednje';
$string['previous'] = 'Prejšnje';
$string['reload'] = 'Osveži';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Språk';
$string['moodlelogo'] = 'Moodie-logotyp';
$string['next'] = 'Nästa';
$string['previous'] = 'Tidigare';
$string['reload'] = 'Uppdatera';
+1
View File
@@ -31,6 +31,7 @@
defined('MOODLE_INTERNAL') || die();
$string['language'] = 'Мова інтерфейсу';
$string['moodlelogo'] = 'Логотип Moodle';
$string['next'] = 'Далі';
$string['previous'] = 'Назад';
$string['reload'] = 'Оновити';
+3
View File
@@ -30,6 +30,9 @@
defined('MOODLE_INTERNAL') || die();
$string['cannotcreatedboninstall'] = '<p>无法建立数据库</p>
<p>指定数据库不存在。使用者没有权限建立数据库</p>
<p>网站管理员需查明数据库状态.</p>';
$string['cannotcreatelangdir'] = '无法创建 lang 目录。';
$string['cannotcreatetempdir'] = '无法创建 temp 目录。';
$string['cannotdownloadcomponents'] = '无法下载组件';
+6 -4
View File
@@ -293,8 +293,8 @@ $string['configproxyport'] = 'If this server needs to use a proxy computer, then
$string['configproxytype'] = 'Type of web proxy (PHP5 and cURL extension required for SOCKS5 support).';
$string['configproxyuser'] = 'Username needed to access internet through proxy if required, empty if none (PHP cURL extension required).';
$string['configquarantinedir'] = 'If you want clam AV to move infected files to a quarantine directory, enter it here. It must be writable by the webserver. If you leave this blank, or if you enter a directory that doesn\'t exist or isn\'t writable, infected files will be deleted. Do not include a trailing slash.';
$string['configrecaptchaprivatekey'] = 'String of characters used to communicate between your Moodle server and the recaptcha server. Obtain one for this site by visiting http://www.google.com/recaptcha';
$string['configrecaptchapublickey'] = 'String of characters used to display the reCAPTCHA element in the signup form. Generated by http://www.google.com/recaptcha';
$string['configrecaptchaprivatekey'] = 'String of characters (private key) used to communicate between your Moodle server and the recaptcha server. ReCAPTCHA keys can be obtained from <a target="_blank" href="https://www.google.com/recaptcha">Google reCAPTCHA</a>.';
$string['configrecaptchapublickey'] = 'String of characters (public key) used to display the reCAPTCHA element in the signup form. ReCAPTCHA keys can be obtained from <a target="_blank" href="https://www.google.com/recaptcha">Google reCAPTCHA</a>.';
$string['configrequestcategoryselection'] = 'Allow the selection of a category when requesting a course.';
$string['configrequestedstudentname'] = 'Word for student used in requested courses';
$string['configrequestedstudentsname'] = 'Word for students used in requested courses';
@@ -612,6 +612,7 @@ $string['legacyfilesaddallowed'] = 'Allow adding to legacy course files';
$string['legacyfilesaddallowed_help'] = 'If a course has legacy course files, allow new files and folders to be added to it.';
$string['legacyfilesinnewcourses'] = 'Legacy course files in new courses';
$string['legacyfilesinnewcourses_help'] = 'By default, legacy course files areas are available in upgraded courses only. Please note that some features such as activity backup and restore are not compatible with this setting.';
$string['libcurlwarning'] = 'Libcurl with CURLOPT_PROTOCOL support has not been detected. It is recommended to have an up to date libcurl installation for security reasons.';
$string['licensesettings'] = 'Licence settings';
$string['linkadmincategories'] = 'Link admin categories';
$string['linkadmincategories_help'] = 'If enabled admin setting categories will be displayed as links in the navigation and will lead to the admin category pages.';
@@ -891,8 +892,8 @@ $string['questioncwqpfsok'] = 'Good. There are no \'random\' questions in your q
$string['questiontype'] = 'Question type';
$string['questiontypes'] = 'Question types';
$string['quizattemptsupgradedmessage'] = 'In Moodle 2.1 there was a major upgrade to questions. It was possible to delay parts of the database upgrade to be run later. Before upgrading to Moodle 2.7, this upgrade must be completed.';
$string['recaptchaprivatekey'] = 'ReCAPTCHA private key';
$string['recaptchapublickey'] = 'ReCAPTCHA public key';
$string['recaptchaprivatekey'] = 'ReCAPTCHA secret key';
$string['recaptchapublickey'] = 'ReCAPTCHA site key';
$string['register'] = 'Register your site';
$string['registermoodleorg'] = 'When you register your site';
$string['registermoodleorgli1'] = 'You are added to a low-volume mailing list for important notifications such as security alerts and new releases of Moodle.';
@@ -1072,6 +1073,7 @@ $string['unsupported'] = 'Unsupported';
$string['unsupporteddbstorageengine'] = 'The database storage engine being used is no longer supported.';
$string['unsupporteddbtablerowformat'] = 'Your database has tables using Antelope as the file format. You are recommended to convert the tables to the Barracuda file format. See the documentation <a href="https://docs.moodle.org/en/cli">Administration via command line</a> for details of a tool for converting InnoDB tables to Barracuda.';
$string['unsupportedphpversion7'] = 'PHP version 7 is not supported.';
$string['unsupportedphpversion71'] = 'PHP version 7.1 is not supported.';
$string['unsuspenduser'] = 'Activate user account';
$string['updateaccounts'] = 'Update existing accounts';
$string['updatecomponent'] = 'Update component';
+1 -1
View File
@@ -95,7 +95,7 @@ $string['getanimagecaptcha'] = 'Get an image CAPTCHA';
$string['getanothercaptcha'] = 'Get another CAPTCHA';
$string['guestloginbutton'] = 'Guest login button';
$string['changepassword'] = 'Change password URL';
$string['changepasswordhelp'] = 'Here you can specify a location at which your users can recover or change their username/password if they\'ve forgotten it. This will be provided to users as a button on the login page and their user page. If you leave this blank the button will not be printed.';
$string['changepasswordhelp'] = 'URL of lost password recovery page, which will be sent to users in an email. Note that this setting will have no effect if a forgotten password URL is set in the authentication common settings.';
$string['chooseauthmethod'] = 'Choose an authentication method';
$string['chooseauthmethod_help'] = 'This setting determines the authentication method used when the user logs in. Only enabled authentication plugins should be chosen, otherwise the user will no longer be able to log in. To block the user from logging in, select "No login".';
$string['incorrectpleasetryagain'] = 'Incorrect. Please try again.';
+1 -1
View File
@@ -727,7 +727,7 @@ $string['uncategorised'] = 'Uncategorised';
$string['unenrolledusersinimport'] = 'This import included the following grades for users not currently enrolled in this course: {$a}';
$string['unchangedgrade'] = 'Grade unchanged';
$string['unlimitedgrades'] = 'Unlimited grades';
$string['unlimitedgrades_help'] = 'By default grades are limited by the maximum and minimum values of the grade item. Enabling this setting removes this limit, and allows grades of over 100% to be entered directly in the gradebook. It is recommended that this setting is enabled at an off-peak time, as all grades will be recalculated, which may result in a high server load.';
$string['unlimitedgrades_help'] = 'By default, grades are limited by the maximum and minimum values of the grade item. Enabling this setting removes this limit, and allows grades of over 100% to be entered directly in the gradebook.';
$string['unlock'] = 'Unlock';
$string['unlockverbose'] = 'Unlock {$a->category} {$a->itemmodule} {$a->itemname}';
$string['unused'] = 'Unused';

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