Compare commits

...

2014 Commits

Author SHA1 Message Date
Eloy Lafuente (stronk7) 28f6460de3 Moodle release 3.4.5 2018-09-08 16:49:46 +02:00
AMOS bot a63c88c57a Automatically generated installer lang files 2018-09-08 00:07:45 +00:00
Jun Pataleta 1796e82ef3 weekly release 3.4.4+ 2018-09-07 11:12:18 +08:00
Jun Pataleta d6df81c983 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-09-07 11:11:55 +08:00
Jake Dallimore d7fbf4a33e Merge branch 'MDL-63302-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-09-06 09:23:55 +08:00
Jun Pataleta 165ce9437e MDL-63302 tool_dataprivacy: Increment version of the merged plugin
This is to distinguish the versions available from the plugins directory
from the versions that are part of Moodle standard distribution.
2018-09-06 08:51:52 +08:00
Eloy Lafuente (stronk7) eacb15b2b2 Merge branch 'MDL-63292-34-policyversion' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-09-05 21:10:23 +02:00
David Mudrák ae650468ed MDL-63292 tool_policy: Increment version of the merged plugin
This is to distinguish the versions available from the plugins directory
from the versions that are part of Moodle standard distribution.
2018-09-05 13:47:32 +02:00
Jake Dallimore dab2e7771f MDL-62947 mod_feedback: fix feedback so it correctly uses forms API
Feedback code was doing the following, which is incompatible with the
sec-patched quickforms lib:
- appending '[0]' to non-group element names, meaning type checks in
getCleanType() were falling back to PARAM_RAW instead of PARAM_INT,
and meaning _findValue() was comparing elements it thought to be arrays
with scalar submit values (worked with eval() implementation as the 0th
element of a string was the character, but not working when patched).
- external unit tests incorrectly testing multichoice questions in the
process_page tests - patched lib highlighted failures.

It was also doing the following:
- actively setting null as default element values instead of 0 for
radio buttons and dropdowns (for 'not selected'). This is incompatible
with more recent quickforms lib (see MDL-63070).
- creating groups using addElement instead of addGroup - not recommended

This patch addresses the above.
2018-09-05 12:13:52 +08:00
Jake Dallimore bd509e7575 MDL-62947 core_form: fix remote code execution exploit in QuickForms
Applies the patch found upstream:
https://github.com/pear/HTML_QuickForm/commit/
d3a6d5c44dedf3c164c6c79198e4ef479bcedcd2 and make util methods static
for php7 compatibility.
2018-09-05 12:13:52 +08:00
AMOS bot e6394e2eaa Automatically generated installer lang files 2018-09-05 00:07:38 +00:00
Damyon Wiese 40e3c83ec8 MDL-62748 course: maxsections is a limit
For course formats shipped with core, maxsections should be a limit to the number of sections
allowed in the course.
2018-09-04 22:37:50 +02:00
Mihail Geshoski 3ea7d116b8 MDL-62857 theme_boost: Better filtering on navbar / breadcrumbs 2018-09-04 22:37:50 +02:00
Tim Hunt cfc4393aa6 MDL-62880 qtype_ddwtos: drop support for legacy import format
It was more than 8 years since we wrote in that format.
2018-09-04 22:37:50 +02:00
Eloy Lafuente (stronk7) f477be8684 Merge branch 'MDL-63249-34-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-09-04 22:35:12 +02:00
Helen Foster 9d9d1b985f MDL-63249 lang: Merge English strings from the en_fix language pack
Significant string changes:

* completionpass_help, gradetopassnotset in mod_quiz - grade to pass
  set in quiz settings not gradebook
* namecolumnmissing,core_cohort - fixing incorrect message about adding
  users to a cohort
2018-09-04 15:14:50 +02:00
David Monllao bb5a6b610c Merge branch 'MDL-62342-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-09-04 14:34:13 +02:00
Neill Magill 2720c9570a MDL-62944 calendar: Clarify the intended use of $checkcapability 2018-09-04 12:19:07 +02:00
David Monllao 3955345d8c Merge branch 'MDL-62944-m34' of https://github.com/NeillM/moodle into MOODLE_34_STABLE 2018-09-04 12:16:15 +02:00
David Monllao 2df693e17d Merge branch 'MDL-55993-34' of https://github.com/albertolarah/moodle into MOODLE_34_STABLE 2018-09-04 10:53:40 +02:00
Jun Pataleta 929962527c Merge branch 'MDL-60901_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-09-04 10:17:45 +08:00
Dan Poltawski 8252dfbd00 MDL-48846 filter: Stop reffering to invalid moodle.org/download/mimetex 2018-09-03 23:45:16 +02:00
Eloy Lafuente (stronk7) de7cc3fbea Merge branch 'MDL-61325-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-09-03 23:34:02 +02:00
Eloy Lafuente (stronk7) 898d1beb5c Merge branch 'MDL-63255-34' of git://github.com/vmdef/moodle into MOODLE_34_STABLE 2018-09-03 23:31:21 +02:00
Eloy Lafuente (stronk7) eb19e3352a Merge branch 'MDL-62848-34-placeholderwidth' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-09-03 23:01:59 +02:00
David Monllao 0c8dfdcf0e Merge branch 'MDL-38301-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-09-03 12:45:06 +02:00
David Monllao f14acd208f Merge branch 'MDL-55744-34_atto_should_not_autosave_on_not_loggedin_users' of https://github.com/dravek/moodle into MOODLE_34_STABLE 2018-09-03 12:28:07 +02:00
Alberto Lara Hernández a5ca74838f Merge branch 'MDL-55993-34' of https://github.com/albertolarah/moodle into MDL-55993-34 2018-09-03 12:25:24 +02:00
Alberto Lara Hernández 588b484099 MDL-55993 mod_assign: web services don´t set a URL. 2018-09-03 12:25:17 +02:00
Eloy Lafuente (stronk7) 47de66238b MDL-60901 environment: 3.6 requirements
Changes include:
- MySQL 5.6 is required.
- PostgreSQL 8.4 is required.
- Oracle 11.2 is required.
- 64bits architecture is recommended.
2018-09-03 10:14:22 +02:00
Víctor Déniz Falcón 93654d4b60 Merge branch 'MDL-63255-34' of git://github.com/vmdef/moodle into MDL-63255-34-test 2018-09-03 07:00:33 +01:00
Mihail Geshoski 4dc8fa2237 MDL-62342 privacy: Fix strings used in the consent on behalf modal 2018-09-03 13:00:58 +08:00
Mihail Geshoski 38127e5ed6 MDL-62342 privacy: Use singular/plural form in labels 2018-09-03 13:00:58 +08:00
Mihail Geshoski 69e15470dc MDL-56998 blog: Remove associated blog posts when module is deleted 2018-09-03 08:40:02 +08:00
AMOS bot 8c55985f99 Automatically generated installer lang files 2018-09-02 00:07:36 +00:00
AMOS bot 150f2bdfe3 Automatically generated installer lang files 2018-09-01 00:07:36 +00:00
David Mudrák 847444bc5b MDL-62848 form: Fix width of the autocomplete input field
Make sure that the autcomplete input field is wide enough to display the
placeholder text.
2018-08-31 14:54:33 +02:00
David Mudrák 6906f50822 MDL-62848 form: Fix missing support for {{#js}} helper in autocomplete
The form-autocomplete module uses three Mustache templates
core/form_autocomplete_input, core/form_autocomplete_suggestions and
core/form_autocomplete_selection. However, it did not support executing
the JS that is eventually part of those templates.
2018-08-31 14:54:33 +02:00
Simey Lameze 9d9d5af530 MDL-62944 calendar: Fix actionevent logic on template
During the calendar work, we have added the feature of
drag and drop activity event or "action events".

The problem at that time was, action events could not be
editable through the calendar UI, but should be allowed
to drag and drop. So, we couldn't use the return of
calendar_edit_event_allowed() because it can return true
(in case of teachers, that have permission to change the
activity) and the attribute isactionevent was created to
control on the UI if the user is viewing an action event.

So what my patch does is just add the check if we are
viewing an action event, and in this case, it won't display
the cog to edit that event.
2018-08-31 10:19:26 +01:00
Neill Magill c98058add8 MDL-62944 activities: Activities should not require capability
Activities should not require the user manipulating them to have
calendar capabilities for their events to be added to the Moodle
calendar
2018-08-31 10:19:26 +01:00
Neill Magill de198dce1b MDL-62944 activities: Test adding activities with no calendar capability 2018-08-31 10:19:25 +01:00
Neill Magill 2d533ee7e8 MDL-62944 completion: Calendar capabilities should not be required
The completion API should not require a user to have the capability to
add calendar events for it to function correctly.
2018-08-31 10:19:25 +01:00
Neill Magill 8b2e002cca MDL-62944 completion: Test that completion dates add events to calendar
When a user does not have calendar capabilities completion dates should
still be created correctly.
2018-08-31 10:19:25 +01:00
Neill Magill a620750547 MDL-62944 mod_data: Action menu missing from database pages
The action menu was missing from many of the database activity pages,
which meant that it could not be accessed until enough had been done to
the activity to make the editing tabs that used view.php accessible.
2018-08-31 10:19:25 +01:00
Eloy Lafuente (stronk7) 0416ad83f6 weekly release 3.4.4+ 2018-08-30 19:04:22 +02:00
Eloy Lafuente (stronk7) 620654f9bb Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-08-30 19:04:19 +02:00
Dan Marsden a26c9ceff5 MDL-61325 use correct value when looking for string. 2018-08-30 09:14:40 +08:00
AMOS bot a2e0bea764 Automatically generated installer lang files 2018-08-30 00:08:14 +00:00
Eloy Lafuente (stronk7) f0f0bd87cd Merge branch 'MDL-63094-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-08-29 00:22:57 +02:00
Eloy Lafuente (stronk7) 916415860a Merge branch 'MDL-62914-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-08-28 23:17:04 +02:00
Victor Deniz f7ea5aef8f MDL-63255 core_user: fix hardcoded sql table aliases 2018-08-28 11:57:05 +01:00
Jake Dallimore 22cbbb04bb Merge branch 'MDL-63101-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-08-28 16:56:12 +08:00
Andrew Nicols 3cb27d07cd Merge branch 'MDL-62782-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-08-28 07:07:59 +08:00
Eloy Lafuente (stronk7) 351552597e Merge branch 'MDL-62989-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-27 17:51:39 +02:00
Jun Pataleta db3a6dc2c8 MDL-63187 tool_dataprivacy: Behat fixes for confirmation lang strings 2018-08-27 22:44:58 +08:00
David Monllao 5158d78e89 Merge branch 'MDL-63174-34-emptyusername' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-08-27 15:09:11 +02:00
David Monllao 322c827a92 MDL-63187 tool_dataprivacy: Update delete purpose and category lang strings 2018-08-27 12:12:08 +02:00
David Monllao 9e4450e2c3 Merge branch 'MDL-63187-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-08-27 11:59:00 +02:00
David Monllao dacd9f0aaf Merge branch 'MDL-63210_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-08-27 11:47:07 +02:00
David Monllao 3497dbd58f Merge branch 'MDL-62867-34-missing_colon_in_query' of https://github.com/bitumin/moodle into MOODLE_34_STABLE 2018-08-27 11:23:05 +02:00
Andrew Nicols e553601950 Merge branch 'MDL-53024-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-08-27 15:46:53 +08:00
Damyon Wiese d0920c3ccf MDL-53024 assign: Remove incorrect logic in query
We are simplifying this query so it will return grades if the attempt matches
the submission attempt, or there is no submission. The case where there is a grade
but no submission can happen only for group assignments.
2018-08-27 15:35:04 +08:00
Zig Tan 79c0b489dd MDL-38301 mod_assign: Fix date validation logic & message consistency 2018-08-27 15:33:35 +08:00
Andrew Nicols bb52200f87 MDL-63101 cache: Improve accuracy of cache event invalidation 2018-08-27 14:44:26 +08:00
Alberto Lara Hernández 0cd85a850c MDL-55993 mod_assign: web services don´t set a URL. 2018-08-24 16:30:21 +02:00
Mitxel Moriana a21664df59 MDL-62867 tags: Fix missing colon in sql placeholder
Due to a missing colon in an sql query field value placeholder
the calculation of the ordering field for a newly added tag
was ignoring itemid.
2018-08-24 15:02:10 +02:00
Mihail Geshoski 2f4fe81c81 MDL-62989 privacy: Improve data request order for users 2018-08-24 15:34:24 +08:00
Jake Dallimore 1a7ae6c763 weekly release 3.4.4+ 2018-08-24 13:08:55 +08:00
Mark Nelson 5b4811c28b MDL-63210 core: convert for loop to forEach in JS 2018-08-24 11:34:50 +08:00
Jun Pataleta 73daef62b4 MDL-63187 tool_dataprivacy: Improve confirm message lang strings
* Updated the delete confirmation messages so that the category/purpose
names are shown in italics. This makes it easier for the privacy officer
to see the category/purpose that is being deleted.
2018-08-23 16:58:59 +08:00
Jun Pataleta 6368757029 MDL-63187 tool_dataprivacy: Behat tests for purposes/categories CRUD 2018-08-23 16:58:59 +08:00
Jun Pataleta 19efff94f4 MDL-63187 tool_dataprivacy: Fix delete button text
* No need to add the purpose/category name for the delete button itself
* Fix delete confirmation lang strings.
* Add button titles to Add purpose/category buttons so they can be
  clicked on when running Behat tests.
2018-08-23 16:58:59 +08:00
Mark Nelson a456850616 MDL-63210 core: touch-up after review
1. Reworded the string.
2. Removed logic handling form data.
3. Do not use window.location.replace.

Backport of MDL-54551.
2018-08-23 12:40:04 +08:00
Thom Rawson 24342e7617 MDL-63210 core: AJAX call redirects to login page when session expired
Backport of MDL-54551.
2018-08-23 12:40:04 +08:00
Jake Dallimore b56a0d69f1 MDL-36255 core_grade: fix to ensure correct context used for filters
Some grade object (outcomes,scales) can be created at site or course
context, so this patch just makes sure we use the respective context
when applying format_string to the name in the get_name() function.
2018-08-22 17:58:07 +08:00
Andrew Nicols 86c7c955eb MDL-63094 tool_policy: Fix the cookie banner to the bottom
Floating banners cause issues with clickability in Behat as it is unable
to understand that it cannot interact with the elements underneath the
floating banner, or that it needs to scroll the page so that the
required content is no longer beneath the floating banner.

Changing the banner to be fixed to the bottom of the page during Behat
runes is a reliable fix.
2018-08-22 11:00:08 +08:00
Andrew Nicols 0c94a92429 MDL-63094 js: Do not check visibility before hiding backdrop
It's possible for the backdrop to be created during the show, before the
modal is actually fully shown.

This check is unnecessary because the getBackdrop() function always
returns a value and will always succeed.
2018-08-22 10:28:32 +08:00
Andrew Nicols fed3dbe83e MDL-63094 tool_policy: Fix race condition in modal display
The way in which the modal was displayed meant that there were no
pending JS items, whilst the modal was rendered, causing random behat
fails.

This JS has been restructured to create the Modal and pass it a set of
Promises for both the title, and body.
2018-08-22 10:27:58 +08:00
Henning Bostelmann 45c3cf28e9 MDL-62914 Calendar: handle TZURL iCal property 2018-08-22 10:11:17 +08:00
Andrew Nicols ebb2a1e101 Merge branch 'MDL-62660_34' of https://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-08-22 08:04:33 +08:00
Eloy Lafuente (stronk7) 4d7029fd03 MDL-62660 xmldb: fix tool_dataprivacy_request_>status to int(2)
So the new defined statuses fit in the column for all databases.
2018-08-22 00:05:30 +02:00
Jake Dallimore 70b6f5fb55 Merge branch 'MDL-36255-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-08-21 16:07:02 +08:00
Jake Dallimore e03c0c9c4c Merge branch 'MDL-62534-34' of https://github.com/mackensen/moodle into MOODLE_34_STABLE 2018-08-21 11:45:42 +08:00
Andrew Nicols 50eea43f99 Merge branch 'MDL-62660-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-08-21 11:11:33 +08:00
Jun Pataleta 5f51b6dcf0 MDL-62660 tool_dataprivacy: Behat fix for data deletion 2018-08-21 10:38:28 +08:00
Jun Pataleta 52df040e61 MDL-62660 tool_dataprivacy: CI fixes 2018-08-21 09:38:14 +08:00
Charles Fulton 93c174cbf1 MDL-62534 course formats: do not purge empty sections on upgrade 2018-08-20 09:16:22 -04:00
Michael Hawkins a8fb33368c MDL-62660 tool_dataprivacy: Behat additions for deletion and data expiry 2018-08-20 16:05:13 +08:00
Michael Hawkins ceb825a892 MDL-62660 tool_dataprivacy: Add and update PHPUnit tests
Updated tests with latest statuses.
Added testing for request download expiry functionality and method.
Added assign_site_dpo within a parent class for unit tests.
2018-08-20 16:05:12 +08:00
Michael Hawkins c47a276b00 MDL-62660 tool_dataprivacy: Add scheduled task to expire data requests 2018-08-20 16:05:12 +08:00
Jun Pataleta 1efd8b0291 MDL-62660 tool_dataprivacy: Fix version number in upgrade code 2018-08-20 16:05:12 +08:00
Michael Hawkins 332a03df8b MDL-62660 tool_dataprivacy: Add ability to expire data requests
Also replaced Completed status with situation specific statuses.
Also improved UX on request pages in line with expiries and the aadditional statuses.
2018-08-20 16:03:55 +08:00
Andrew Nicols 90f7c52e40 MDL-62660 tool_dataprivacy: Add method for unit tests to run adhoc tasks 2018-08-20 16:02:32 +08:00
Luca Bösch 13b07ada78 MDL-36255 grades: allow multilang filters in grades 2018-08-20 08:34:36 +02:00
Jake Dallimore 402d5de15a Merge branch 'MDL-57741-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-08-20 10:12:34 +08:00
Eloy Lafuente (stronk7) 94409c69b1 weekly release 3.4.4+ 2018-08-17 17:37:42 +02:00
Eloy Lafuente (stronk7) b0bbe6b2c8 NOBUG: Fixed file access permissions 2018-08-17 17:37:41 +02:00
Eloy Lafuente (stronk7) edb7272666 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-08-17 17:37:39 +02:00
David Mudrák 1d3cbad20e MDL-63174 user: user_create_user to throw exception on empty username
The core API function user_create_user() did not check the case when the
given username was empty.

Also adding a missing string 'usernamelowercase' for the existing lower
case check and unit tests.
2018-08-17 13:24:23 +02:00
David Mudrák fa9d16fd66 MDL-63174 user: core_user_create_users to throw exception on empty names
To be consistent with the web administration UI, we should not allow to
create invalid user records with empty username, lastname or firstname
via the web services.
2018-08-17 13:24:23 +02:00
Damyon Wiese 9d6bf4c4c0 MDL-62884 privacy: Additional fix for popper.js
The older version of popper needs custom CSS to ensure the menus are
visible without scrolling.
2018-08-17 16:07:15 +08:00
Damyon Wiese aaf055af33 MDL-62884 privacy: Fix styles
An action menu displayed inside a table needs to be tested on every theme. It is
required to ensure that the menu displays correctly, even when it would display outside
the scrollable region for the table.
2018-08-17 16:07:07 +08:00
cescobedo 08f4b0323b MDL-57741 enrol_lti: Add Launch URL to Published as LTI tools 2018-08-16 09:19:27 +02:00
AMOS bot 494a91d003 Automatically generated installer lang files 2018-08-16 00:08:27 +00:00
Jake Dallimore 9028bd17a5 Merge branch 'MDL-63050-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-08-15 11:00:32 +08:00
Andrew Nicols a3d0d0adba Merge branch 'MDL-62600-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-08-15 08:55:46 +08:00
AMOS bot 0b68426b3c Automatically generated installer lang files 2018-08-15 00:07:49 +00:00
Luke Carrier b939f70922 MDL-61238 cohort: require_once all libraries 2018-08-15 00:13:58 +02:00
Eloy Lafuente (stronk7) 5ae2ec409b Merge branch 'MDL-62341-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-15 00:06:22 +02:00
Eloy Lafuente (stronk7) e660bc47f0 Merge branch 'MDL-58409-34_needs_clean_in_autocomplete_element' of https://github.com/dravek/moodle into MOODLE_34_STABLE 2018-08-14 17:50:55 +02:00
Eloy Lafuente (stronk7) e8eb4f7825 Merge branch 'MDL-61650-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-08-14 16:57:34 +02:00
Michael Hawkins 635a878bae MDL-62600 tool_dataprivacy: Corrected availability of PO pages to admins 2018-08-14 12:28:54 +08:00
Andrew Nicols 85a0f30489 Merge branch 'MDL-62643-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-08-14 09:21:12 +08:00
Karen Holland df8f32bdf8 MDL-62896 Privacy: External plugin Additional label update. 2018-08-14 08:05:38 +08:00
David Monllao 7fda5667ba Merge branch 'MDL-62761-34' of https://github.com/jmvedrine/moodle into MOODLE_34_STABLE 2018-08-13 15:30:15 +02:00
David Monllao 3d5d4ad291 Merge branch 'MDL-59015-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-13 12:19:33 +02:00
Jake Dallimore 6a96c6d9b7 Merge branch 'MDL-60114_34_radio-option-choose' of https://github.com/awagner/moodle into MOODLE_34_STABLE 2018-08-13 16:04:07 +08:00
Andrew Nicols 3636e715e0 Merge branch 'MDL-62799-34-2' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-08-13 13:53:28 +08:00
Jun Pataleta 7c85d38e93 MDL-62799 core: Add tool_dataprivacy to list of standard plugins 2018-08-13 12:46:16 +08:00
Jun Pataleta 51e87bce2f MDL-62799 tool_dataprivacy: Fix CiBoT complaints 2018-08-13 12:30:26 +08:00
Jun Pataleta 983b72cedd MDL-62799 tool_dataprivacy: Move user generation within the test
Patch originally from MDL-62962.
2018-08-13 12:30:07 +08:00
sam marshall fc4ca0f91c MDL-62799 tool_dataprivacy: Add capabilities to control data downloads
Patch originally from MDL-61652.
2018-08-13 12:29:46 +08:00
Jun Pataleta e2a2d8424b MDL-62799 tool_dataprivacy: Behat tests for contacting PO
Patch originally from MDL-62026.
2018-08-13 12:29:36 +08:00
Jun Pataleta b6168a9990 MDL-62799 tool_dataprivacy: Allow manual completion of general enquiries
Patch originally from MDL-62026.
2018-08-13 12:29:24 +08:00
Jun Pataleta aaa58a165d MDL-62799 tool_dataprivacy: Merge the data privacy tool in 3.4 2018-08-13 09:07:42 +08:00
Mihail Geshoski 5676f7308f MDL-62341 privacy: Add behat test 2018-08-13 08:00:26 +08:00
Mihail Geshoski 52415401b6 MDL-62341 privacy: Add link to previous page in viewall policies page 2018-08-13 08:00:26 +08:00
Mihail Geshoski 59e3d345a1 MDL-59015 blocks: Confusing View more button in course overview block 2018-08-13 07:59:07 +08:00
Jean-Michel Vedrine 5eb7a89f6f MDL-62761 lesson: wrong deadlines on index with overrides 2018-08-12 07:53:56 +02:00
Andreas Wagner 76847757ec MDL-60114 mod_data: adding db activity lost radio field choose option 2018-08-11 07:45:51 +02:00
Eloy Lafuente (stronk7) e8452a3d0a weekly release 3.4.4+ 2018-08-10 13:22:01 +02:00
Andrew Nicols 2e7ffa7af4 Merge branch 'MDL-62619_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-08-10 08:46:00 +08:00
Eloy Lafuente (stronk7) 283369be28 MDL-62619 privacy: Prevent action when boolean queries are involved
Before the patch, queries like:

SELECT 1 FROM dual UNION SELECT 2 FROM dual

were failing badly, with everything but the first numeric element
being ignored by the optimization.

So, being conservative, now we reduce the query being analysed,
ignoring any subquery, inline view (anything within parenthesis
in general) and, in the remaining query, if a boolean query (UNION,
MINUS, INTERSECT...) is found, we don't apply any optimization.
2018-08-09 16:15:54 +02:00
Eloy Lafuente (stronk7) 3b10f8db20 Merge branch 'MDL-62619-34-privacycontexts' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-08-08 01:03:21 +02:00
Eloy Lafuente (stronk7) 8ad1ba5675 Merge branch 'MDL-43334-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-08-08 00:16:43 +02:00
Eloy Lafuente (stronk7) e08af21694 Merge branch 'MDL-61839-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-07 23:56:34 +02:00
Eloy Lafuente (stronk7) e9fcb3bcf9 Merge branch 'MDL-61870-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-08-07 23:48:49 +02:00
Eloy Lafuente (stronk7) 8a6b47642e Merge branch 'MDL-62750_34' of https://github.com/aanabit/moodle into MOODLE_34_STABLE 2018-08-07 17:23:59 +02:00
David Matamoros b391ba4214 MDL-55744 EDITOR_ATTO: Now atto does not autosave for not loggedin user 2018-08-07 15:24:15 +02:00
David Matamoros cb9ab70513 MDL-58409 core_form: needs clean in autocomplete element 2018-08-07 11:04:36 +02:00
Andrew Nicols 51b1c2b4d6 MDL-62800 behat: Correct path to P&P
This commit was originally a part of MDL-62950
2018-08-07 14:13:34 +08:00
Andrew Nicols d812eb333b Merge branch 'MDL-62798-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-07 13:13:13 +08:00
Andrew Nicols 288710cac2 Merge branch 'MDL-62800-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-07 12:11:52 +08:00
Mihail Geshoski 32c0d93b26 MDL-62800 tool_policy: Add policy plugin in standard_plugins_list() 2018-08-07 11:21:19 +08:00
sarjona 5174d7ad75 MDL-62800 tool_policy: Merge the policy tool to 3.4
The following changes has been done from the original repo:
- Remove README.md, LICENSE.md and .travis.yml
- Review the version.php content, to look like a standard plugin
- Adapt jquery-eu-cookie-law-popup.js and readme_moodle.txt to remove the
eslint-ignore
2018-08-07 11:04:38 +08:00
Andrew Nicols 7c8dadf029 Merge branch 'wip-MDL-61424-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-08-07 09:30:09 +08:00
Amaia Anabitarte 9a0e25e7dd MDL-62750 lang: Trim langlist setting values 2018-08-06 09:41:27 +01:00
Mihail Geshoski 3c1e4d11b7 MDL-62798 repositories: Report sections by name in server repository 2018-08-06 09:54:49 +08:00
Mihail Geshoski 5d10a3e920 MDL-61839 glossary: One letter search in glossary returns all entries 2018-08-06 09:50:38 +08:00
Damyon Wiese 29d815799b MDL-61650 assign: More consistent empty text
Consistently check for empty submissions with count_words(trim($text)).
2018-08-03 16:53:47 +08:00
Andrew Nicols 80ed1e0cd7 weekly release 3.4.4+ 2018-08-03 11:30:24 +08:00
Andrew Nicols c6149d54d6 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-08-03 11:30:22 +08:00
Damyon Wiese 3eaca718a5 MDL-61870 mod_assign: Conditionally backup groups
When group info is not backed up, do not backup assignment submissions or overrides that related to a specific group.
We are already correctly not restoring them, but it is more robust not to include them in the backup file at all.
2018-08-02 13:09:06 +08:00
Zig Tan 3b7ead71a4 MDL-61870 mod_assign: Fix/clean up imported group override duedates
Applying patch supplied from Damyon Wiese to address the root-cause
of this issue in the backup/restore logic.
2018-08-02 13:09:01 +08:00
Zig Tan ae25d0ec2c MDL-61870 mod_assign: Fix/clean up imported group override duedates
- Prevent group override duedate events from being imported when groups are excluded
- Clean up any existing group override duedate events when editing assignment in upgradelib.php
- Updated lib.php unit tests
2018-08-02 13:08:28 +08:00
Andrew Nicols 5f901db7e7 Merge branch 'MDL-59847-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-08-02 11:41:01 +08:00
Andrew Nicols 8266c03f7a Merge branch 'MDL-62983-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-08-02 11:27:51 +08:00
Andrew Nicols 03587989ea MDL-63050 cachestore_redis: Update hExists to check empty 2018-08-02 11:00:42 +08:00
Andrew Nicols 8058d53f6a MDL-63050 redis: Make session check compatible with Redis 4.0 2018-08-02 11:00:42 +08:00
David Mudrák 52b377677a MDL-59847 core: Fix display of hidden identity fields in user selectors
User selectors now respect the user's permission to view other users'
hidden profile fields.
2018-08-02 10:35:25 +08:00
Eloy Lafuente (stronk7) 6cabd9b1f2 Merge branch 'MDL-57666-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-08-02 01:28:10 +02:00
Eloy Lafuente (stronk7) 85e4550689 Merge branch 'MDL-62965-34-userprofilesignup' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-08-02 00:41:45 +02:00
Eloy Lafuente (stronk7) 5636f37daf Merge branch 'MDL-59595-34-2' of git://github.com/snake/moodle into MOODLE_34_STABLE 2018-08-02 00:21:44 +02:00
Eloy Lafuente (stronk7) 71db484a6a Merge branch 'MDL-62977_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-08-01 16:44:15 +02:00
Jonathon Fowler d065231113 MDL-62983 core_user: Hold multiple filters when clicking any link 2018-08-01 12:11:00 +02:00
Eloy Lafuente (stronk7) 5aa54cc598 Merge branch 'MDL-41847-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-07-31 23:51:04 +02:00
David Monllao 389a43143e Merge branch 'm34_MDL-58015' of https://github.com/danmarsden/moodle into MOODLE_34_STABLE 2018-07-31 13:37:16 +02:00
David Monllao 09fd0f485a Merge branch 'MDL-59611-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-07-31 13:31:23 +02:00
David Monllao 0aa0600059 Merge branch 'MDL-44538-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-07-31 11:21:23 +02:00
Jun Pataleta b415e34429 Merge branch 'MDL-58768-34-2' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-07-31 16:16:35 +08:00
Shamim Rezaie 723e5b7533 MDL-58768 mod_assign: Added userid param to calendar callbacks
The mod_assign_core_calendar_is_event_visible and mod_assign_core_calendar_provide_event_action
functions now accept a new parameter ($userid) so they are not always dependet to the logged in user.
2018-07-31 15:45:36 +10:00
Shamim Rezaie 4ac18c8480 MDL-58768 core: Fix a typo for callback name 2018-07-31 15:45:36 +10:00
Shamim Rezaie ec92334c18 MDL-58768 mod_assign: Add $user param to assign::can_grade 2018-07-31 15:45:36 +10:00
Shamim Rezaie 856d6bcaf7 MDL-58768 calendar: Add $requestinguser to the container class
The requesting user is not always the same as the current user. The container class now allows a different user
to be set as the requesting user. All capability checks are done against the requesting user.

Also, the $requestinguser is passed to core_calendar_provide_event_action and core_calendar_is_event_visible
callback functions. These callback functions need to be updated in all activity modules to accept a $user parameter.
2018-07-31 15:45:36 +10:00
Shamim Rezaie b2704139ad MDL-58768 coursecat: coursecat::get to accept a $user parameter 2018-07-31 15:45:35 +10:00
Shamim Rezaie 991850894e MDL-58768 Calendar: Update get_raw_events_legacy_implementation
Update get_raw_events_legacy_implementation to work with the passed $users parameter instead of the logged in user.
Also, fixed a bug where get_raw_events_legacy_implementation was failing when $users was set to true, and a list of
$groups was given.
2018-07-31 15:45:35 +10:00
Shamim Rezaie a20071b2fe MDL-58768 Calendar: Added user param to calendar_set_filters
Decoupled calendar_set_filters from $USER.
Also removed the backward compatibility bit from the function because it was a left over.
2018-07-31 15:44:58 +10:00
Shamim Rezaie c71fe8690c MDL-58768 Calendar: Added userid param to calendar_get_default_courses 2018-07-31 15:31:58 +10:00
Eloy Lafuente (stronk7) 66e70ef537 Merge branch 'MDL-57977-34' of git://github.com/vmdef/moodle into MOODLE_34_STABLE 2018-07-30 21:10:17 +02:00
Eloy Lafuente (stronk7) 0ed13e1936 MDL-63002 core: fixed incorrect calls to non-existent delete_record() 2018-07-30 16:17:24 +02:00
Marina Glancy 01ed2a4b1c MDL-61424 admin: reset registration if token is rejected 2018-07-30 16:13:30 +02:00
Mihail Geshoski f99d2fc276 MDL-57666 repositories: Error when copying file from Dropbox repository 2018-07-30 09:30:41 +08:00
AMOS bot d4079a3b2d Automatically generated installer lang files 2018-07-28 00:08:54 +00:00
David Mudrák e2cbb82469 MDL-62965 core_user: Fix missing user profile fields on signup page 2018-07-27 10:36:47 +02:00
Jun Pataleta aaca3f9244 Merge branch 'MDL-62950-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-07-27 16:18:25 +08:00
David Mudrák b2586b47c6 MDL-62619 privacy: Fix a missing alias in the blog provider class
The new implementation revealed another existing bug that did not expose
before due to coincidently same named table alias in the outer query.
2018-07-27 10:14:33 +02:00
David Mudrák 52bb7f16d3 MDL-62619 privacy: Fix some bits of performance improvements
* We need to use is_numeric() in this case as is_int() would never
  return true.
* Extend the supported cases, add support for SQL consisting just of
  numerical value or selectinga numerical constant.
* Do not rely on any particulat letter case in provided SQL.
* Add unit tests for the new method. Even when it is a protected one, it
  is an essential unit to be tested on its own.
2018-07-27 10:14:33 +02:00
Andrew Nicols 9f3ca3e7ac MDL-62619 privacy: Improve performance of contexts loading
When possible, we want to use JOIN over WHERE IN. It is known that the
later performs badly in MySQL.
2018-07-27 10:14:33 +02:00
David Mudrák bee9ca08af MDL-59847 core: Fix display of hidden identity fields in user lists
Places that display list of users (such as course participants page)
with additional identifier fields now respect the user's permission to
view other users' hidden profile fields.
2018-07-27 10:09:05 +02:00
Sara Arjona 6e09d47fc5 MDL-41847 core_user: Add preferred lang field to the user creation form
The preferred language has been added only to the user creation form.
For existing users, you should access to the user profile, click over
Preferences and go to the Preferred language page.
2018-07-27 09:07:39 +02:00
Sara Arjona 396b60a4c2 MDL-41847 core_user: Add lang to login URL email for new user accounts 2018-07-27 09:07:39 +02:00
Andrew Nicols ebba2fc8d3 MDL-62950 behat: Disable editing for boost test 2018-07-27 11:06:30 +08:00
Andrew Nicols e93427657a MDL-62950 behat: Correct use of nav 2018-07-27 11:02:52 +08:00
Andrew Nicols f1cb7fc6a3 MDL-62950 behat: Correct path to P&P 2018-07-27 11:02:47 +08:00
Mark Nelson 687d4c6aec MDL-62977 mod_wiki: style buttons appropriately 2018-07-27 10:51:38 +08:00
AMOS bot 58829757c3 Automatically generated installer lang files 2018-07-27 00:40:34 +00:00
Dan Marsden f3a4d3fef3 MDL-58015 mod_scorm: set orgidentifier correctly for popup. 2018-07-27 10:37:06 +12:00
Eloy Lafuente (stronk7) e8ebf0f088 weekly release 3.4.4+ 2018-07-26 19:56:45 +02:00
Eloy Lafuente (stronk7) bbc29a982c Merge branch 'MDL-62771-34_move_plag_disclosure' of https://github.com/jmcgettrick/moodle into MOODLE_34_STABLE 2018-07-26 00:39:36 +02:00
Andrew Nicols d2354a36e2 Merge branch 'MDL-60826-34-fix' of https://github.com/lameze/moodle into MOODLE_34_STABLE 2018-07-25 13:42:37 +08:00
Simey Lameze e1f4fdeef0 MDL-60826 calendar: fix group event type logic 2018-07-25 12:50:48 +08:00
Tony Butler c4ebaeccfc MDL-59611 mod_assign: Move help icons for subplugin types out of labels 2018-07-25 12:22:05 +08:00
Andrew Nicols 7aaaf91ff7 Merge branch 'MDL-60826-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-07-25 09:20:14 +08:00
Simey Lameze 0159ae55db MDL-60826 calendar: further performance improvements
This commit does few tweaks and other performance improvements to
calendar_get_allowed_event_types to be more efficient. Also some minor
queries optimizations on the event form to fetch the list of courses
without groups.
2018-07-25 09:03:54 +08:00
Simey Lameze 98e7b3b5bc MDL-60826 calendar: restrict course fields to be retrieved 2018-07-25 09:03:54 +08:00
Simey Lameze b7f4c5d9db MDL-60826 calendar: update manage subscription page to use new function 2018-07-25 09:03:54 +08:00
Simey Lameze e220725ad7 MDL-60826 calendar: lazy load groups on event form 2018-07-25 09:03:54 +08:00
Simey Lameze 7eec9cd236 MDL-60826 calendar: tests for calendar_get_allowed_event_types 2018-07-25 09:03:54 +08:00
Simey Lameze 8105a66d02 MDL-60826 calendar: introduce calendar_get_allowed_event_types function 2018-07-25 09:03:54 +08:00
Eloy Lafuente (stronk7) efa0914c75 Merge branch 'MDL-62961_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-07-25 01:25:02 +02:00
Eloy Lafuente (stronk7) aa7004d325 Merge branch 'MDL-62935-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-07-25 01:17:31 +02:00
Eloy Lafuente (stronk7) d35b833ff1 Merge branch 'MDL-62653-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-07-25 00:39:20 +02:00
Eloy Lafuente (stronk7) f62ab7dcbc Merge branch 'MDL-60874-34-enrolautocomplete' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-07-24 19:06:37 +02:00
Eloy Lafuente (stronk7) ce3f2aec3d Merge branch 'MDL-62925_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-07-24 18:33:05 +02:00
Bas Brands 826725db5b MDL-62935 boost: slideshow view page overflow 2018-07-24 10:27:39 +02:00
Jun Pataleta 9ed6f59d5c Merge branch 'MDL-62919-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-07-24 16:23:01 +08:00
Jun Pataleta 42f4ae18eb Merge branch 'MDL-62939-34-cleanhtmluserdesc' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-07-24 11:58:01 +08:00
Jake Dallimore ab53088e8d MDL-59595 admin: Make sure $ADMIN is properly unset when changing users 2018-07-24 08:33:04 +08:00
Jake Dallimore 3bbb669729 MDL-59595 admin: unit test covering the adminroot cache reset scenario
The adminroot cache should be reset when the current user is changed,
which can occur during cron or during unit tests.
2018-07-24 08:33:04 +08:00
Victor Deniz 215dd70bd7 MDL-57977 search: GlobalSearch by alternate name fields
Enable support for searching all name fields in search
2018-07-23 10:12:28 +01:00
Mark Nelson 9573812fc1 MDL-62961 mod_feedback: style buttons appropriately 2018-07-23 15:49:18 +08:00
Andrew Nicols b82c612bf5 Merge branch 'MDL-35977-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-07-23 15:31:38 +08:00
Jun Pataleta 8962d2972f Merge branch 'MDL-62949-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-07-23 14:53:19 +08:00
Andrew Nicols 7c20db0f18 Merge branch 'MDL-61707-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-07-23 11:41:17 +08:00
Andrew Nicols aa425b569b Merge branch 'MDL-29701-34' of https://github.com/phuchau1509/moodle into MOODLE_34_STABLE 2018-07-23 09:44:23 +08:00
Mihail Geshoski 80418bedc0 MDL-61707 authentication: Remove presignup session upon user signup 2018-07-23 09:33:32 +08:00
Mihail Geshoski 28ec0dff6e MDL-35977 comments: Missing label in blog and assignment comment area 2018-07-23 08:56:06 +08:00
Andrew Nicols 7968c4c46a MDL-62949 calendar: Fix behat nav to calendar 2018-07-20 18:01:45 +08:00
Andrew Nicols 2d6cb43e1e weekly release 3.4.4+ 2018-07-20 15:09:07 +08:00
Andrew Nicols 68bc0a0b80 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-07-20 15:09:06 +08:00
Jake Hau b405813ec0 MDL-29701 editor: mform disableif doesn't work on editor element 2018-07-19 11:35:59 +07:00
David Mudrák 4b6910d319 MDL-62939 user: Fix field type of the user profile description
As this is an editor element field, the it is supposed to be PARAM_RAW.
Otherwise it cleans-up certain non-HTML syntax such as Markdown
blockquote characters.
2018-07-18 14:30:05 +02:00
Jun Pataleta 760e425c62 Merge branch 'MDL-62811_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-07-18 16:12:00 +08:00
Andrew Nicols c87e271a95 Merge branch 'MDL-62889_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-07-18 15:36:50 +08:00
Jun Pataleta c6dc53a0d6 Merge branch 'MDL-62769_34' of https://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-07-18 14:54:17 +08:00
Mark Nelson 23a04bf2cb MDL-62889 message_popup: redirect using moodle_url
Without this relative URLs passed (like /message/index.php)
were being redirected to HOST/message/index.php rather than
$CFG->wwwroot/message/index.php.
2018-07-18 13:25:36 +08:00
Mark Nelson b36383fb42 MDL-62889 message_popup: redirect to notification page if url is empty
If you pass a URL that is not a valid URL (for example
';') it is cleaned to an empty string which redirects to
$CFG->wwwroot/message/output/popup/ which is not a valid
page.
2018-07-18 13:24:57 +08:00
Mark Nelson bf69854d40 MDL-62889 message_popup: allow redirects to external URLs
Many institutions create notifications that link to an
external service. We need to allow redirects to these
systems.
2018-07-18 13:18:15 +08:00
Mark Nelson f52e88ac70 MDL-62889 message_popup: only add redirecturl if it exists
We allow notifications to have a null value for the 'contexturl'.
In this case we should not be appending a 'redirecturl' param to
the URL when it is going to be empty.
2018-07-18 13:16:18 +08:00
Jun Pataleta d0026b8b25 Merge branch 'MDL-62781-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-07-18 10:05:19 +08:00
Jun Pataleta a67cc10051 MDL-62781 core_question: Remove unnecessary assertion 2018-07-18 09:59:51 +08:00
Tim Hunt cf3f82bd18 MDL-62781 question/privacy: fix tests with CodeRunner is installed
The tests were assuming that no plugin ever created questions on
install.

Also change the tests to do the counting in the DB. That is more
efficient.
2018-07-18 09:59:51 +08:00
AMOS bot 2e1dab9f60 Automatically generated installer lang files 2018-07-18 00:07:42 +00:00
cescobedo c6a9858c98 MDL-62919 auth_shibboleth: Use the right shibboleth_auth_instructions
Change $CFG->auth_instructions by shibboleth/auth_instructions in the index_form.html
2018-07-17 21:08:00 +02:00
David Monllao 9c48f36931 Merge branch 'MDL-59447-34' of https://github.com/nwp90/moodle into MOODLE_34_STABLE 2018-07-17 14:35:13 +02:00
David Monllao c0a2bba4e7 Merge branch 'MDL-54830-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-07-17 13:55:20 +02:00
David Monllao c650dd8568 Merge branch 'MDL-61351_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-07-17 12:32:16 +02:00
Tim Schroeder af4c2fb8cf MDL-61351 auth_shibboleth: removed redundant session handler class check 2018-07-17 16:48:22 +08:00
Tim Schroeder 823bbbfc00 MDL-61351 core: added \core\session\manager\get_handler_class()
* This is needed e.g. by the shibboleth logout handler to check which
type of sessions are used.
2018-07-17 16:48:22 +08:00
Mark Nelson 18a937e9d1 MDL-61351 auth_shibboleth: move new functions to separate class
This reduces the amount of code to an already confusing logout.php
file and prevents conflicts if someone else happens to be using
the same function name in a file.
2018-07-17 16:48:22 +08:00
David Monllao b55fa75d03 Merge branch 'MDL-62868-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-07-17 10:20:30 +02:00
Tim Schroeder 2170351cbc MDL-61351 shibboleth: Logout: fix session handler class not being used
* use $CFG->session_handler_class to determine which type of session is
  used
* if not set, use $CFG->dbsession instead
2018-07-17 16:19:13 +08:00
David Monllao 2abfaea271 Merge branch 'MDL-62663_34' of https://github.com/andrewhancox/moodle into MOODLE_34_STABLE 2018-07-17 09:58:47 +02:00
David Monllao efd4bdb490 Merge branch 'MDL-60924-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-07-17 09:39:23 +02:00
Mark Nelson 5d12627609 MDL-62925 mod_wiki: style 'Search wikis' button 2018-07-17 11:31:58 +08:00
Andrew Nicols 52a3e011e3 Merge branch 'MDL-62849-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-07-17 10:37:09 +08:00
Adrian Greeve f1900faf75 MDL-62849 files lib: Add method to return all files.
Added a function which returns all the files from all directories
in the draftarea.
2018-07-17 10:28:22 +08:00
AMOS bot a52a06c744 Automatically generated installer lang files 2018-07-17 00:08:28 +00:00
David Mudrák 33d87fdbc4 MDL-60874 enrol_manual: Improve searching of users in quick enrol UI
* The maximum of users to be displayed raised from 30 to 100. This is
  consistent with the legacy users selector available via enrolment
  methods page.
* If there are more users found matching the search criteria, notify the
  user instead of displaying them. This is to prevent false impression
  that there are only that many users.
* Added behat tests for the new behaviour.
2018-07-16 20:54:40 +02:00
David Mudrák 5015c4229e MDL-60874 core_form: allow autocomplete AJAX handlers return a string
Custom AJAX handlers for the form autocomplete fields can now optionally
return string in their processResults() callback. If a string is
returned, it is displayed instead of the list of suggested items.

The string is displayed same way as we inform about no available
suggestions.
2018-07-16 20:54:40 +02:00
sarjona 44bae9d937 MDL-60924 core_user: Hold participant filters when clicking some link 2018-07-16 18:06:29 +02:00
David Monllao b88a479c6d Merge branch 'MDL-49025-m34' of https://github.com/NeillM/moodle into MOODLE_34_STABLE 2018-07-16 13:35:13 +02:00
David Monllao 982a838ec1 Merge branch 'MDL-61019-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-07-16 13:25:21 +02:00
Andrew Nicols a96703eae4 Merge branch 'MDL-45851_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-07-16 13:18:44 +08:00
Jake Dallimore 6a3aaf1803 MDL-54830 core_course: fix maxbytes logic in course_update web service
The service should allow the special value of 0 (site limit) to be set.
2018-07-16 10:43:33 +08:00
Jake Dallimore 36f47cb5e5 MDL-62868 core_group: clear group_grouping cache when changing grouping 2018-07-16 10:36:48 +08:00
Jake Dallimore ae125e5c39 Merge branch 'MDL-45389-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-07-16 10:12:16 +08:00
Neill Magill 3c5064892c MDL-49025 assign: Submissions of an empty directory should not save
Before this change if only a folder was submitted the submission_is_empty
check would return true. This meant that the draft area would be saved.
The is_empty check would then be called which would return false. This
caused the submission form to indicate to the user that the submission
had failed.

Now is_empty and submission_is_empty should both return false if only
folders are submitted.
2018-07-13 14:05:41 +01:00
Neill Magill dae2f76b7d MDL-49025 assign: Test than an empty directory will not submit 2018-07-13 14:05:41 +01:00
Luca Bösch 7775958575 MDL-61019 Theme boost: lesson display issues with buttons/progress bar. 2018-07-13 09:24:25 +02:00
Luca Bösch e1dc6ff735 MDL-45389 theme_bootstrapbase: Forum index page alignment in clean. 2018-07-13 09:24:08 +02:00
Luca Bösch c9f5af8596 MDL-44538 action_menu: rounded corner of highlights only where needed. 2018-07-13 09:24:00 +02:00
Andrew Nicols d1040fe2b3 MDL-62653 behat: Ensure that tasks run properly from behat 2018-07-13 13:54:15 +08:00
Jake Dallimore a7c1f4497c weekly release 3.4.4+ 2018-07-13 12:26:11 +08:00
Nick Phillips a29d421ac4 MDL-59447 question: GIFT import to respect multichoice defaults
Fix GIFT import to respect default answernumbering for new multichoice
questions (introduced in MDL-50011). Default for shuffleanswers is still
ignored, as this is a rather coarse-grained way to do it, and the wrong
setting for shuffleanswers would irreversibly alter the meaning of some
questions.

This is not an ideal long-term fix, but will save significant effort
for anyone who needs to be able to set answernumbering style for
questions imported in GIFT format.
2018-07-13 13:32:27 +12:00
Andrew Nicols aae5f920ae Merge branch 'MDL-62746-34-fix' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-07-12 16:22:47 +08:00
Jun Pataleta b53c5e3891 MDL-62746 tag: Behat fix for combining tags scenario 2018-07-12 16:04:06 +08:00
David Monllao 30854621a0 MDL-59599 navigation: Respect previous activity-level navigation
The original patch was overwriting grading methods navigation.

All credit goes to Andrew Nicols.
2018-07-12 10:25:34 +08:00
David Monllao 6cc1f2efda Merge branch 'MDL-62618-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-07-11 18:48:22 +02:00
Jake Dallimore 63dc12acea Merge branch 'MDL-62712-34' of https://github.com/HuongNV13/moodle into MOODLE_34_STABLE 2018-07-11 09:02:51 +08:00
Andrew Nicols 8350a4fddd Merge branch 'MDL-52318-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-07-11 08:58:59 +08:00
David Monllao 42a2445ddc Merge branch 'MDL-62262-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-07-10 13:33:30 +02:00
David Monllao c07a557a40 Merge branch 'MDL-62823-m34' of https://github.com/NeillM/moodle into MOODLE_34_STABLE 2018-07-10 11:46:50 +02:00
Andrew Nicols 080bb928ab Merge branch 'MDL-61578-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-07-10 16:46:43 +08:00
Huong Nguyen d49d4dbcd4 MDL-62712 Filepicker: Improve upload process
Lost the uploading file when user press Submit before upload process has done
2018-07-10 15:21:40 +07:00
David Monllao 32b39ec6bb Merge branch 'MDL-62814-34' of https://github.com/HuongNV13/moodle into MOODLE_34_STABLE 2018-07-10 07:51:05 +02:00
Andrew Hancox b88f38e65d MDL-61578 backup: Added unit test for is_course_modified check. 2018-07-10 10:59:52 +08:00
Michael Hawkins af2afaae9b MDL-61578 backup: Prevent backup logging triggering fresh backups.
Thanks to Renaat Debleu for their contribution to this solution.
2018-07-10 10:57:28 +08:00
Andrew Nicols 273e37cba7 Merge branch 'MDL-62746-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-07-10 10:09:17 +08:00
Jake Dallimore a91db9907e Merge branch 'MDL-62772-34_always_show_disclosure' of https://github.com/jmcgettrick/moodle into MOODLE_34_STABLE 2018-07-10 09:00:57 +08:00
David Monllao 2722c38955 Merge branch 'mdl34_MDL-62753' of https://github.com/OdyX/moodle into MOODLE_34_STABLE 2018-07-09 15:15:54 +02:00
David Monllao 662e17e502 Merge branch 'MDL-56881-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-07-09 14:39:21 +02:00
David Monllao be49e1f9cc Merge branch 'MDL-62037-34' of https://github.com/lethevinh/moodle into MOODLE_34_STABLE 2018-07-09 13:48:59 +02:00
David Monllao 5d33da7569 Merge branch 'MDL-62831-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-07-09 13:36:29 +02:00
David Monllao 7f044c1ed4 MDL-59599 navigation: Strict zero-position comparision 2018-07-09 12:27:43 +02:00
David Monllao 4013b661b4 Merge branch 'MDL-59599-34' of https://github.com/Kathrin84/moodle into MOODLE_34_STABLE 2018-07-09 12:00:20 +02:00
Andrew Hancox 8b36e8a5c2 MDL-62663 core_user: Enforce viewalldetails capability when editing user 2018-07-09 09:50:26 +01:00
John McGettrick 61d5685b04 MDL-62772 mod_assign: Show disclosure for all submitters 2018-07-09 09:14:38 +01:00
Andrew Nicols cb932b8692 Merge branch 'MDL-33509-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-07-09 14:02:22 +08:00
Damyon Wiese ee70cf9d15 MDL-43334 backup: Fix cancel JS
The cancel button is a form element within a div that has the confirmcancel class. When we
accept a cancel modal, we should attempt to click the most specific form element of the
div, not the entire div.
2018-07-09 12:18:46 +08:00
Damyon Wiese ad83f25e94 MDL-43334 backup: Lanuage for cancel
Cancel backup buttons need clear lang strings.
2018-07-09 12:18:45 +08:00
Andrew Nicols b54f6d4781 MDL-56093 auth_db: Remove issue no. from comment 2018-07-09 12:14:50 +08:00
Andrew Nicols 8a78198376 Merge branch 'MOODLE_34_STABLE_MDL_56093' of https://github.com/eledia/moodle into MOODLE_34_STABLE 2018-07-09 12:14:46 +08:00
Jake Dallimore ebaabae83d Merge branch 'MDL-61359-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-07-09 12:11:26 +08:00
Jake Dallimore 2eeb189638 MDL-52318 core_form: allow multiple filepicker-enabled url elements
In cases when filepicker support is enabled, this patch adds a wrapper
div around the url element and includes the filepicker id in its id.
This allows the js callback code to target the specific input field
with which it is associated.
2018-07-09 11:34:00 +08:00
Jake Dallimore ea89ce9406 MDL-56881 mod_choice: add unit tests for choice_user_submit_response
Tests cover option limits and multiple option responses.
2018-07-09 11:09:13 +08:00
Jake Dallimore 3dac03b060 MDL-56881 mod_choice: clarify lang string for limit-reached scenarios 2018-07-09 11:08:45 +08:00
Jake Dallimore c58e6ca41e MDL-56881 mod_choice: fix bug with limits when saving existing choice
The check determining whether a choice option's limit was exceeded was
including the user's existing answers in its checks, meaning a user
couldn't save an existing choice answer, or select further options,
if all a choice option limit was reached. This patch fixes that.
2018-07-09 11:08:41 +08:00
Eloy Lafuente (stronk7) 5ebb6eb15c Moodle release 3.4.4 2018-07-07 06:53:43 +02:00
AMOS bot c97874b7a8 Automatically generated installer lang files 2018-07-07 00:08:37 +00:00
Luca Bösch 79e6e5de26 MDL-62262 quiz: quiz index page showing wrong dates. 2018-07-06 15:05:03 +02:00
vinhle ba335d048c MDL-62037 Filepicker: Review image not change when overwrite same 2018-07-06 17:50:34 +07:00
John McGettrick 39e69c1b9b MDL-62771 mod_forum: Move print_disclosure 2018-07-06 09:21:22 +01:00
Andrew Nicols 71e351ec79 weekly release 3.4.3+ 2018-07-06 14:05:10 +08:00
Andrew Nicols 9347c4f8a3 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-07-06 14:05:08 +08:00
Huong Nguyen 7591658a47 MDL-62814 Question: Improve column base display_header
Column base does not support custom tip if sortable is an array
2018-07-06 10:59:38 +07:00
Tim Hunt b05acb6b10 MDL-62811 question bank: rendering shouldn't load individual questions 2018-07-05 17:01:54 +01:00
Benjamin Wolf be616a6fd9 MDL-56093 auth_db: Save custom profile fields in auth_db 2018-07-05 11:12:50 +02:00
Didier 'OdyX' Raboud 79172a41fe MDL-62753 shibboleth: Logout: fix DB sessions kill
* Use the Moodle 2+ {sessions} table, and decode the session
  correctly using session_decode (adodb_unserialize is deprecated).
* Kill all user sessions using \core\session\manager's
  kill_user_sessions.
2018-07-05 09:06:47 +02:00
Michael Hawkins 1d3ff57a88 MDL-62618 user: Display full names consistently on users page 2018-07-05 10:17:16 +08:00
Michael Hawkins d0f3521f27 MDL-62618 forum: Made full names displayed consistent 2018-07-05 10:17:16 +08:00
AMOS bot c1491880fa Automatically generated installer lang files 2018-07-05 00:08:32 +00:00
Kathrin Osswald f3f44ad3d8 MDL-59599 navigation: Improve activity status for nav nodes. 2018-07-04 20:00:56 +02:00
Tim Hunt 3b5086f510 MDL-45851 restore: random questions must always be created
They are really a pointer from a particular quiz to a question category.
They should never be shared, because if they are, unexpected things
happend when they are edited.
2018-07-04 16:30:33 +01:00
Tim Hunt 9dd7b0f7f4 MDL-62820 question import: properly escape output 2018-07-04 15:41:05 +08:00
Jake Dallimore eeefdaebcf Merge branch 'wip-nolink-bug-34' of https://gitlab.di.unito.it/rabellino/moodle into MOODLE_34_STABLE 2018-07-04 14:39:08 +08:00
Damyon Wiese d2761afa21 MDL-62782 assign: viewgrades allows files
Grade viewer role should be able to see feedback files for an assignment submission.
2018-07-04 14:19:24 +08:00
Jake Dallimore 29f7ef8305 Merge branch 'MDL-41463-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-07-04 12:59:44 +08:00
Damyon Wiese 89908c0256 MDL-62831 mod_assign: Download as folders help
The help string for the download as folders setting should not mention the number of files
submitted by the student. It is not related to that, it is only dependant on the value of this setting.
2018-07-04 12:20:50 +08:00
Jake Dallimore 7aeaba8b8b Merge branch 'MDL-44081-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-07-04 10:51:09 +08:00
Andrew Nicols 136f206331 MDL-62834 behat: Move include to function 2018-07-04 10:45:35 +08:00
Eloy Lafuente (stronk7) 80ad7014f9 Merge branch 'wip-MDL-62526-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-07-04 04:19:31 +02:00
Adrian Greeve adbfa2fbfa MDL-62616 tool_log: Add a setting to disable exporting logs. 2018-07-04 10:00:16 +08:00
Eloy Lafuente (stronk7) ed3bf90af1 Merge branch 'MDL-62792_34' of https://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-07-04 00:55:31 +02:00
Eloy Lafuente (stronk7) 3861d07c02 Merge branch 'MDL-62838_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-07-04 00:52:23 +02:00
Eloy Lafuente (stronk7) 131fbed9fb Merge branch 'MDL-62834_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-07-04 00:46:49 +02:00
David Monllao e418005609 Merge branch 'MDL-61296-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-07-03 23:34:25 +02:00
David Monllao 41562c927f Merge branch 'MDL-62656-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-07-03 23:34:25 +02:00
David Monllao d83f207e8a Merge branch 'MDL-60915_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-07-03 23:34:24 +02:00
David Monllao bc1f051c49 Merge branch 'MDL-60014-34-catcherror-nopermission-annotatepdfcron' of https://github.com/Eva-Dv/moodle into MOODLE_34_STABLE 2018-07-03 23:34:24 +02:00
David Monllao 69ae176ca3 Merge branch 'MDL-62813-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-07-03 23:34:23 +02:00
David Monllao 6fef4bfb2f Merge branch 'MDL-32232-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-07-03 14:00:29 +02:00
Michael Hawkins d683aff069 MDL-62767 theme: Remove old localcaches when clearing/updating theme cache 2018-07-03 14:00:51 +08:00
Michael Hawkins 58fba949c4 MDL-61359 message: Updated sender contact text to text node content 2018-07-03 13:33:32 +08:00
Michael Hawkins 032abb1a6f MDL-62801 themes: Added missing filelib include 2018-07-03 13:08:51 +08:00
Marina Glancy 58b1b213ee MDL-62790 course: cap check in core_course_get_categories 2018-07-03 12:04:14 +08:00
Mihail Geshoski 94ac5fce56 MDL-33509 forms: Change button type in url resource editing page 2018-07-03 12:00:03 +08:00
Jake Dallimore eb2f403c10 Merge branch 'MDL-62715-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-07-03 08:50:14 +08:00
Eloy Lafuente (stronk7) af9ae800ee Merge branch 'MDL-62763-34-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-07-02 20:09:27 +02:00
Eloy Lafuente (stronk7) 9cc4cc02cf Merge branch 'MDL-62621-34-ixcomment' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-07-02 20:03:01 +02:00
Helen Foster 23790560f3 MDL-62763 lang: Merge English strings from the en_fix language pack
Significant string change:

* idnumbermod_help,core - mentioning resource and custom reporting
2018-07-02 13:44:38 +02:00
Jake Dallimore c082a46980 Merge branch 'MDL-62801-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-07-02 16:19:30 +08:00
David Mudrák 644a76167a MDL-62621 comments: Add missing indexes on comments table
The composite index over the fields contextid, commentarea and itemid
helps the comments API to load all comments for the given area
effectively.

The index over the userid field helps the privacy API to load all
comments by the given user.
2018-07-02 10:11:51 +02:00
Mihail Geshoski 31f830c2e8 MDL-62656 course: Align elements in course and category management 2018-07-02 08:26:14 +08:00
Eloy Lafuente (stronk7) 7cba6c1671 MDL-60915 core_dml: Change behavior to disabled by default
In stables it was decided to keep the current behavior
(not buffering/cursors) so nothing breaks/changes suddenly.

So this commit just disables the default buffer size used in
Moodle 3.5 and up (100000), defaulting to zero (feature disabled).

Still the feature can be enabled via dboptions and it's docummented
in the config-dist file.
2018-07-02 01:15:49 +02:00
sam marshall 9d97d1e006 MDL-60915 Document new dboption in config-dist.php 2018-07-02 00:46:36 +02:00
sam marshall f83d748f77 MDL-60915 core_dml: fix miscellaneous incorrect recordset usage
The new recordset support for Postgres requires transactions and
will cause errors if recordsets are not closed correctly. This
commit fixes problems that were identified during unit tests, and
via some basic code analysis, across all core code. Most of these
are incorrect usage of recordset (forgetting to close them).
2018-07-02 00:46:26 +02:00
sam marshall 838f07703a MDL-60915 core_dml: get_recordset on Postgres eats all the RAM
On Postgres, get_recordset_sql loads all the results into memory
(within the Postgres library, which doesn't count towards the PHP
memory limit, but does count towards making your server run out of
memory) as soon as the query completes.

This commit changes the code to use cursors, which in Postgres
allow the results to be returned in smaller chunks (by default
100,000 rows).
2018-07-02 00:46:09 +02:00
Tim Hunt 189c996f4f MDL-62838 filters: dont use statics inside functions. Use MUC 2018-06-29 17:25:17 +01:00
Tim Hunt a8887717eb MDL-62834 behat: new step for enabling filters 2018-06-29 11:27:49 +01:00
Neill Magill cc008824ee MDL-62823 filter: Save changes button should be styled 2018-06-29 08:41:48 +01:00
Michael Hawkins dc39780050 MDL-62801 themes: Remove old mustache caches when new one generated 2018-06-29 10:51:09 +08:00
Zig Tan 282e6fe54d MDL-44081 assign: Fix Grader annotation button accessibility ordering 2018-06-29 09:28:46 +08:00
Luca Bösch dccacb6649 MDL-41463 course: Reset remove groups section advanced toggle. 2018-06-28 23:04:34 +02:00
Luca Bösch 7fe6acac9e MDL-32232 lesson: changing a page type chooser option for consistency 2018-06-28 23:04:23 +02:00
Sergio Rabellino 328ec4459f MDL-61403 filter: Fix for the nolink tag ignored
Fix for the nolink tag ignored if there are some other attributes defined in the same span
2018-06-28 11:01:40 +02:00
Simey Lameze 2a643b019e MDL-62813 calendar: add behat test for form validation 2018-06-28 14:12:32 +08:00
Simey Lameze 8291540ae7 MDL-62813 calendar: fix dmlreadexception on event form 2018-06-28 14:12:32 +08:00
Jake Dallimore ec68f39a1b weekly release 3.4.3+ 2018-06-28 14:03:01 +08:00
Marina Glancy 5a4668943d MDL-62526 admin: ask privacy policy agreement for moodle.net 2018-06-28 11:44:23 +08:00
Eloy Lafuente (stronk7) fa38f0302e Merge branch 'MDL-62325-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-06-28 02:06:10 +02:00
Eloy Lafuente (stronk7) 672dacf797 Merge branch 'wip-MDL-62755-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-06-28 01:56:52 +02:00
Eloy Lafuente (stronk7) 681fd03543 Merge branch 'MDL-62747_34' of https://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-06-28 00:32:52 +02:00
Matteo Scaramuccia 50402581d1 MDL-51080 env: warn when running MariaDB w/ wrong dbtype 2018-06-28 00:15:41 +02:00
Jake Dallimore b088c6d89b Merge branch 'MDL-61732-34' of https://github.com/Dagefoerde/moodle into MOODLE_34_STABLE 2018-06-27 12:18:36 +08:00
Eloy Lafuente (stronk7) 7811b73968 Merge branch 'MDL-45088-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-27 03:23:34 +02:00
Eloy Lafuente (stronk7) 08f2d2a061 Merge branch 'MDL-62703-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-06-27 03:17:59 +02:00
Eloy Lafuente (stronk7) 98523f6970 Merge branch 'MDL-62735-34-refactor' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-06-26 10:44:45 +02:00
Eloy Lafuente (stronk7) a73c0c82f0 Merge branch 'MDL-59047-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-06-26 03:05:38 +02:00
Eloy Lafuente (stronk7) 30fca6d09c Merge branch 'MDL-51419-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-06-26 02:42:34 +02:00
Eva Davitasvili ffa3e0e25e MDL-60014 assign: Annotate PDF - catch no permission error 2018-06-25 14:10:06 -04:00
Tim Hunt 215f3c9c25 MDL-62792 filters: fix some bad PHPdocs 2018-06-25 15:55:25 +01:00
Tim Hunt 4b862a14c9 MDL-62792 filter_mathjaxloader: don't use statics for once-only items 2018-06-25 15:55:23 +01:00
Shamim Rezaie 7bb4d2d88e MDL-62325 enrol_paypal: Added some keys and indexes to enrol_paypal.
- Added these keys to the enrol_paypal db: courseid, userid, instanceid
- Added these indexes to the enrol_paypal db: business, receiver_email
2018-06-25 13:01:16 +10:00
Adrian Greeve e57455a92d MDL-62755 mod_assign: Update to unit tests.
Overrides are now checked to be exported properly.
2018-06-25 09:52:37 +08:00
Adrian Greeve aa0a70f203 MDL-62755 mod_assign: Fix override export problem.
The cutoffdate and allowsubmissionsfromdate were not
being exported.
2018-06-25 09:52:37 +08:00
Christian Glahn 4fbb27eb13 MDL-61732 filters: Have emoticons respect nolink
Also extracts static emoticon cache to a field in order to increases
testability of filter_emoticon, because we are now able to reset the
static emoticon cache before tests, particularly for observing the
response to changing $CFG->emoticons.
2018-06-22 10:27:54 +02:00
Jake Dallimore 8e6d95b9cf MDL-51419 core_files: Support for utf8 in file names in MS Edge 2018-06-22 10:30:23 +08:00
Jake Dallimore 8aeacce28a MDL-62735 core_search: searchareas page now respects indexing support 2018-06-22 10:15:12 +08:00
Luca Bösch ebb40e783d MDL-45088 xmldb: Fix table alignment 2018-06-21 19:36:12 +02:00
Tim Hunt e997551349 MDL-62769 quiz statistics: graph should show all, not last, variant 2018-06-21 14:55:30 +01:00
Eloy Lafuente (stronk7) 7b1139543c weekly release 3.4.3+ 2018-06-21 14:01:04 +02:00
Andrew Nicols f720f30fd8 MDL-62715 mod_assign: Bump submissions back when grading in tests 2018-06-21 08:41:24 +08:00
Jun Pataleta 33bce7fa20 Merge branch 'MDL-62017-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-20 19:39:58 +08:00
David Monllao aa7263c202 Merge branch 'MDL-61482-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-06-20 13:29:33 +02:00
cescobedo e21e44b054 MDL-61296 auth_ldap: remove PHP notices when field does not exist. 2018-06-20 11:49:11 +02:00
Luca Bösch e99625f496 MDL-62017 tool_customlang: format language customisation buttons. 2018-06-20 10:54:04 +02:00
Eloy Lafuente (stronk7) 288fe4fe35 Merge branch 'MDL-62014-34' of git://github.com/nashtechdev01/moodle into MOODLE_34_STABLE 2018-06-20 00:57:37 +02:00
Eloy Lafuente (stronk7) 908a8be88b Merge branch 'MDL-36424-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-19 19:20:46 +02:00
Eloy Lafuente (stronk7) 3000c7bd3a Merge branch 'wip-MDL-61786-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-06-19 19:16:51 +02:00
Eloy Lafuente (stronk7) 93bce58feb Merge branch 'MDL-62358-34' of https://github.com/HuongNV13/moodle into MOODLE_34_STABLE 2018-06-19 19:08:59 +02:00
Eloy Lafuente (stronk7) ec78b3cb99 Merge branch 'MDL-44791-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-19 18:59:57 +02:00
Eloy Lafuente (stronk7) 421a61a4fb Merge branch 'MDL-62449-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-06-19 18:52:40 +02:00
Zig Tan ac8b6611c9 MDL-61482 mod_assign: Clean html in offline grading CSV 2018-06-19 23:30:24 +08:00
Tim Hunt 3d2ba2e8f1 MDL-62747 accesslib: rdef caching should handle roles with no caps 2018-06-19 16:26:25 +01:00
Jun Pataleta 98434f6594 MDL-62746 tag: Make forms in tag modals use proper BS classes 2018-06-19 23:23:27 +08:00
Bas Brands d4213e994c MDL-62703 Themes: remove hover styles in course listings 2018-06-19 16:32:41 +02:00
Bas Brands 18c7a47105 MDL-59047 question type: short answer boost styles 2018-06-19 15:50:15 +02:00
David Monllao f601f8fa3f Merge branch 'MDL-62588-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-06-19 12:53:28 +02:00
Jun Pataleta 7090d8002b Merge branch 'MDL-61894-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-19 17:56:42 +08:00
David Monllao 61f06e8430 Merge branch 'MDL-58702-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-06-19 11:55:00 +02:00
Andrew Nicols 0e9bbab80b Merge branch 'MDL-60950-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-06-19 11:41:11 +08:00
Damyon Wiese 8b4346c530 MDL-60950 assign: Update incompatible unit test
Maintain compatibility with unit test changes after MDL-55609.
2018-06-19 10:59:19 +08:00
Damyon Wiese 0877aacab9 MDL-60950 assign: Rename class
testable_assign was renamed to mod_assign_testable_assign
2018-06-19 10:59:18 +08:00
Damyon Wiese 53e833b459 MDL-60950 assign: Robust filtering of grading table
For assignments with gradetype set to none, we need special handling when generating the query to filter submissions that need grading.
2018-06-19 10:59:18 +08:00
Damyon Wiese ba22824230 MDL-60950 assign: Test for the requires grading filter
This test covers when the requires grading filter is applied, but the
assignment has no grade and the feedbackcomments plugin is disabled.
2018-06-19 10:59:18 +08:00
Eloy Lafuente (stronk7) 6742a6f486 Merge branch 'MDL-62638-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-06-19 02:04:09 +02:00
Eloy Lafuente (stronk7) 53be2f2707 Merge branch 'MDL-62571_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-06-19 01:49:58 +02:00
Sara Arjona 368aa15e22 MDL-62449 scorm: Move related data to data in the privacy export 2018-06-18 10:43:56 +02:00
Sara Arjona 55471119bd MDL-62449 scorm: Add SCORM data to privacy export (name, description) 2018-06-18 10:43:55 +02:00
Jun Pataleta d45d70b86b Merge branch 'MDL-62614-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-06-18 16:12:12 +08:00
Jun Pataleta 303aaced3d Merge branch 'MDL-62658_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-06-18 14:36:31 +08:00
Jun Pataleta 784bb185a5 Merge branch 'wip-MDL-62474-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-06-18 14:32:12 +08:00
Mark Nelson 276f6435af MDL-62658 message_popup: fixed issue with malformed URL being generated 2018-06-18 14:31:35 +08:00
Adrian Greeve 4cc042dff7 MDL-62474 theme_boost: Update to provider and unit test.
Theme boost contains a user preference which was not reported
before. Unit tests have been added to test the update.
2018-06-18 14:09:02 +08:00
Willian Mano 49d65dc9ee MDL-62474 theme_boost: Fix Boost privacy provider 2018-06-18 14:08:55 +08:00
Huong Nguyen 70c2cb7266 MDL-62614 Privacy: Core tag provider delete_item_tags function not work 2018-06-18 14:00:50 +08:00
Andrew Nicols 10845183f3 Merge branch 'MDL-62320-34' of git://github.com/vmdef/moodle into MOODLE_34_STABLE 2018-06-18 13:59:31 +08:00
Shamim Rezaie 5dcdf1d1ba MDL-62588 enrol_paypal: Add missing instanceid field 2018-06-18 15:15:50 +10:00
Andrew Nicols 7d0956191d Merge branch 'MDL-57968-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-06-18 09:10:36 +08:00
Victor Deniz ab3759815a MDL-62320 mimetypes: Add JSON to the default mime types list 2018-06-15 13:18:18 +01:00
Damyon Wiese 7621280df1 MDL-62643 assign: Skip empty online text files
Online text assignment submissions with no text entered into the editor should not
create a blank html document for providing feedback.
2018-06-15 13:45:39 +08:00
HungTran b338e8d272 MDL-62014 course: Add title to activity completion button 2018-06-15 10:21:01 +07:00
Zig Tan c53170461f MDL-58702 backup: Fix restoration of role mappings labels
Changes:
- Add logic to retrieve all the existing current roles.
- Apply the backup's role shortname by matching on the archetype.
- Added backup lang string 'undefinedrolemapping'.
2018-06-15 09:56:17 +08:00
Luca Bösch b4fdf0a5a3 MDL-61894 tag: Modal buttons style. 2018-06-14 17:30:50 +02:00
Luca Bösch 8fcf9309bb MDL-44791 admin: Open server check doc links in new window. 2018-06-14 17:29:52 +02:00
Ed Basset 6f5ae7edad MDL-36424 wiki: set group so subwiki tabs/pages display correctly 2018-06-14 17:29:35 +02:00
Huong Nguyen 132169831f MDL-62358 Question: Improve number function
Support all 'question numbers' that might be needed
2018-06-14 19:47:11 +07:00
Eloy Lafuente (stronk7) d8832ae8b9 weekly release 3.4.3+ 2018-06-14 10:56:00 +02:00
Eloy Lafuente (stronk7) 3e7543e81f Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-06-14 10:55:58 +02:00
Mark Nelson 5d42ef7732 MDL-31443 core_backup: change review heading to 'Restore settings' 2018-06-13 18:39:20 +02:00
Luca Bösch adf5986331 MDL-31443 core_backup: revert changes to util/ui/renderer.php 2018-06-13 18:39:19 +02:00
Jun Pataleta a7a630a3f5 Merge branch 'MDL59980_block_bug_34_STABLE' of git://github.com/kristian-94/moodle into MOODLE_34_STABLE 2018-06-13 09:58:33 +08:00
AMOS bot 92c1d10595 Automatically generated installer lang files 2018-06-13 00:08:19 +00:00
Kristian Ringer 6eef69757b MDL-59980 core_admin: Fix bug preventing block modification in settings 2018-06-13 09:33:02 +10:00
Simey Lameze 816b448956 MDL-62446 mod_glossary: optimize provider code 2018-06-12 18:28:31 +02:00
Simey Lameze f0c0534cf8 MDL-62446 mod_glossary: improve privacy unit tests 2018-06-12 18:28:30 +02:00
David Monllao cf482a6e6e Merge branch 'MDL-58063-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-06-12 11:05:53 +02:00
David Monllao c1f3810e42 Merge branch 'MDL-55609-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-06-12 10:20:38 +02:00
Jun Pataleta 1568720496 Merge branch 'wip-MDL-62574-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-06-12 11:55:32 +08:00
Adrian Greeve f136376f51 MDL-62574 core_privacy: Unit tests to check the context base.
This now tests the possibility of a context being deleted.
2018-06-12 11:28:33 +08:00
Adrian Greeve 9bef4c5495 MDL-62574 core_privacy: Check the contextlist for real contexts.
There are situations when contexts will be deleted in the provider.
The context list is not updated and so we have introduced a try
catch.
2018-06-12 11:28:33 +08:00
Andrew Nicols c172b1e2f7 Merge branch 'MDL-62628-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-06-12 09:55:08 +08:00
Andrew Nicols 37e7988513 Merge branch 'MDL-60819-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-06-12 09:27:49 +08:00
Eloy Lafuente (stronk7) 66705e877b Merge branch 'MDL-31443-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-12 01:38:09 +02:00
Michael Aherne 55e47947e5 MDL-62577 unit tests: Quote class name in re-run command. 2018-06-12 00:08:24 +02:00
Leon Stringer fc1b6699df MDL-61786 auth: Changed strings for Test Settings to lang strings
The output strings for the Test Settings function were hard-coded English
strings. They've been changed to standard language strings which can be
translated and maintained via AMOS.
2018-06-11 14:18:46 +08:00
Jake Dallimore 843c3d5242 MDL-60819 core_files: fix exception thrown from generate_image_thumbnail
This function now requires gdlib.php.
2018-06-11 10:46:57 +08:00
Luca Bösch 68d4285fc4 MDL-31443 backup: Title and cancel messages stating import and restore 2018-06-08 11:33:09 +02:00
Mihail Geshoski eb1798f392 MDL-62628 resource: Folder name formatting issue when displayed inline 2018-06-08 08:36:48 +08:00
Mihail Geshoski fa141e42e5 MDL-58063 blocks: Cannot access manage files in HTML block in clean 2018-06-08 08:30:37 +08:00
Eloy Lafuente (stronk7) cad7a07170 weekly release 3.4.3+ 2018-06-07 16:59:57 +02:00
Bas Brands 5275d9edc6 MDL-62638 Theme boost: remove broken css 2018-06-07 16:44:54 +02:00
Jun Pataleta b7ce4d277b Merge branch 'MDL-61826-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-06-06 11:25:17 +02:00
Jun Pataleta 77870cc549 Merge branch 'MDL-46513_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-06-06 11:25:14 +02:00
Jun Pataleta 456651626c Merge branch 'MDL-62586-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-06-06 11:25:11 +02:00
Andrew Nicols 4606d898b0 Merge branch 'm34_MDL-61702_MariaDB_InnoDB10d3d1_Params_Removed' of https://github.com/scara/moodle into MOODLE_34_STABLE 2018-06-06 11:25:07 +02:00
Eloy Lafuente (stronk7) ca9a22327d Merge branch 'MDL-39486-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-06-06 11:25:04 +02:00
David Monllao 2e0fa15542 Merge branch 'MDL-46344-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-06-06 11:25:01 +02:00
Jun Pataleta cf5ed61e0d Merge branch 'MDL-62336_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-06-06 11:24:57 +02:00
Jun Pataleta e266745dd9 Merge branch 'MDL-61778-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-06-06 11:24:54 +02:00
cescobedo 4db0f1446c MDL-57968 core_message: Remove multiple unnecessary AJAX requests
Remove AJAX requests core_message_get_unread_conversations_count and
message_popup_get_unread_popup_notification_count and
render the unread messages and notifications into mustache template.
2018-06-06 11:07:48 +02:00
Jun Pataleta b8df0041ef MDL-61826 auth: Make Facebook endpoints more maintainable 2018-06-06 12:44:55 +08:00
Łukasz Szeremeta e5b9894cb1 MDL-61826 auth: Facebook OAuth2 - getting a better-quality profile photo
Get 200x200 px instead of 50x50 px user profile picture from Facebook OAuth2.
2018-06-06 12:44:55 +08:00
Bas Brands 82082aef16 MDL-62586 Themes: use Boostrap media compontent for author display 2018-06-05 15:14:22 +02:00
Luca Bösch 3149273dc0 MDL-62605 core_user: course name filter in unenrol modal. 2018-06-05 08:12:10 +02:00
Luca Bösch c5999e9816 MDL-46344 outputrenderers: Localize 'This page is'. 2018-06-01 11:43:54 +02:00
Michael Hawkins 40e7951409 MDL-61778 message: Renamed online status icon and replaced Boost icon 2018-06-01 10:25:24 +08:00
Andrew Nicols 572c939ec2 MDL-55609 assignfeedback_comments: Remove shared setUp 2018-06-01 07:33:14 +08:00
Andrew Nicols 6f1bf92b2f MDL-55609 mod_assign: Move fixture to folder 2018-06-01 07:33:14 +08:00
Andrew Nicols aea6fc7e83 MDL-55609 mod_assign: Remove shared setUp for all tests 2018-06-01 07:33:12 +08:00
Andrew Nicols 5e3bc5f34f MDL-55609 testing: Add a create_and_enrol helper 2018-06-01 07:32:25 +08:00
Matteo Scaramuccia 7d91d88601 MDL-61702 dml: MariaDB 10.3 supports only the Barracuda file format.
More details about this change also in https://tracker.moodle.org/browse/MDL-59099

Ref.: https://mariadb.com/kb/en/library/mariadb-1031-release-notes/#other-variables
2018-05-31 23:00:08 +02:00
Mark Nelson 6a1bb0f2be MDL-62571 mod_forum: fixed redirection URLs 2018-05-31 21:15:57 +08:00
David Monllao 8ebe976393 weekly release 3.4.3+ 2018-05-31 08:39:35 +02:00
Andrew Nicols de6d69b43e Merge branch 'MDL-57486-34-fix' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-05-30 13:27:31 +08:00
Jun Pataleta 43ae2182a9 MDL-57486 tool_recyclebin: Close the files recordset properly 2018-05-30 13:16:39 +08:00
Andrew Nicols b8bc620619 Merge branch 'MDL-57600-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-05-30 09:19:05 +08:00
Andrew Nicols 999fcfaa9f MDL-57486 tool_recyclebin: Coding style fix 2018-05-30 08:35:38 +08:00
Andrew Nicols f722092645 Merge branch 'm34_MDL-57486' of https://github.com/danmarsden/moodle into MOODLE_34_STABLE 2018-05-30 08:35:17 +08:00
Dan Marsden 92a2087415 MDL-57486 tool_recyclebin: Delete items when context already deleted. 2018-05-29 14:26:02 +12:00
Jun Pataleta 8ee54d3a01 Merge branch 'MDL-56498-34' of git://github.com/mickhawkins/moodle into MOODLE_34_STABLE 2018-05-29 09:37:05 +08:00
David Monllao c2036ae370 Merge branch 'MDL-62316_oauth_guess_image_fix_34_STABLE' of https://github.com/leonstr/moodle into MOODLE_34_STABLE 2018-05-28 16:48:57 +02:00
David Monllao 85b0aa82b5 Merge branch 'wip-MDL-62584-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-28 16:32:22 +02:00
David Monllao 2bb95d9c5a Merge branch 'MDL-42779-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-05-28 11:43:02 +02:00
Mark Nelson 86e3a67a95 MDL-62336 media_videojs: ensure videos have unique IDs 2018-05-28 16:44:46 +08:00
Luca Bösch 000e6f4975 MDL-42779 course: Pagination in management page preserves view action 2018-05-28 10:37:08 +02:00
Mark Nelson 9963253093 MDL-46513 mod_chat: pass has_capability result to fullname function 2018-05-28 15:53:10 +08:00
David Monllao 3753139ffe Merge branch 'MDL-57742_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-28 09:16:55 +02:00
David Monllao 8359822423 Merge branch 'm34_MDL-59596_DDL_Issues_With_MariaDB_10p2_SQLMode' of https://github.com/scara/moodle into MOODLE_34_STABLE 2018-05-28 08:19:35 +02:00
Mark Nelson 6c4ffecc59 MDL-57742 core_lib: Updated readme_moodle.txt 2018-05-28 13:14:02 +08:00
David Balch 2d8ba1ea5e MDL-57742 core_lib: Make tool_consumer_instance_guid optional
In the specification, tool_consumer_instance_guid is only listed
as recommended. However, the library was requiring it.

https://www.imsglobal.org/specs/ltiv2p0/implementation-guide#toc-42
2018-05-28 13:13:55 +08:00
Andrew Nicols cb6b89a3e6 Merge branch 'MDL-62515-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-05-28 12:30:17 +08:00
Marina Glancy d5897a6b17 MDL-62584 xmlrpc: return correct content-length 2018-05-28 11:20:08 +08:00
Simey Lameze e04ac51a29 MDL-57600 course: fix typo on courselib test 2018-05-28 09:42:11 +08:00
Alex 39a586d2fa MDL-57600 format: Fix spelling errors 2018-05-28 09:42:10 +08:00
Jun Pataleta eb7b1a9688 Merge branch 'MDL-61832-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-05-28 09:20:59 +08:00
Andrew Nicols e5434384e5 MDL-62543 mod_forum: Add RSS Unit tests 2018-05-28 08:54:58 +08:00
Andrew Nicols c5e1d2e5d2 Merge branch 'MDL-62543-34' of git://github.com/tobiasreischmann/moodle into MOODLE_34_STABLE 2018-05-28 08:54:46 +08:00
Eloy Lafuente (stronk7) bad2f9df33 Merge branch 'MDL-62408_34_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_34_STABLE 2018-05-28 02:15:39 +02:00
Mihail Geshoski 27b62bbaf4 MDL-39486 lesson: Length of label text too narrow in matching questions 2018-05-25 10:03:14 +08:00
Luca Bösch 9e1acf813b MDL-61832 lesson: don't hide lesson page editing options 2018-05-24 15:43:28 +02:00
David Monllao 9cf74e2636 weekly release 3.4.3+ 2018-05-24 10:45:59 +02:00
Tobias Reischmann 708dca3400 MDL-62543 forum: Switched the usage of the deleted flag for rss
The deleted flag was introduced through the Privacy API and was used
for post selection for the rss feed. In there it was used in the
wrong way, which lead to the exclusion of all non deleted posts instead
of excluding all deleted ones.
This commit fixes this problem.
2018-05-23 14:24:11 +02:00
Simey Lameze 951febb2a8 MDL-61189 editor_tinymce: save data before submitting 2018-05-23 10:48:50 +08:00
Jake Dallimore dde3643075 Merge branch 'MDL-61932-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-05-23 10:03:09 +08:00
Jun Pataleta 1fc9b813b2 MDL-61932 mod_glossary: Fetch the correct front page section 1 ID 2018-05-23 09:58:40 +08:00
Jun Pataleta a8662028ab MDL-61932 mod_glossary: Display site-level glossaries on section 1
* Glossary activities created on the front page by importing
entries are being added to section 0, but the front page only shows
activities on section 1.
2018-05-23 09:58:37 +08:00
Leon Stringer 1755077688 MDL-62316 OAuth 2: Only guess image if base URL set.
If you added an OAuth 2 service with no base URL guess_image() would try to
parse this empty value looking for a favicon.ico.  We now check if the base
URL is empty beforehand and skip this if so.
2018-05-22 19:46:12 +01:00
Jun Pataleta 41d477d8d6 Merge branch 'wip-MDL-62239-34' of https://github.com/Beedell/moodle into MOODLE_34_STABLE 2018-05-22 10:05:06 +08:00
Andrew Nicols 7c8dc9bc0d Merge branch 'MDL-62482_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-05-22 09:42:40 +08:00
Andrew Nicols 69471d8f81 Merge branch 'MDL-62488_34_STABLE' of https://github.com/marxjohnson/moodle into MOODLE_34_STABLE 2018-05-22 09:31:41 +08:00
Jake Dallimore e41a1d1409 Merge branch 'MDL-61015-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-05-22 08:15:30 +08:00
Eloy Lafuente (stronk7) 48dbc763c9 Merge branch 'MDL-62500-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-21 13:37:48 +02:00
John Beedell e306188732 MDL-62239 QTYPE: iOS 11.3 broke Moodle drag-drop question types 2018-05-21 11:50:36 +01:00
David Monllao 137508e70f Merge branch 'm34_MDL-61893_Accept_Any_Node_Carbon_Version' of https://github.com/scara/moodle into MOODLE_34_STABLE 2018-05-21 12:04:50 +02:00
Luca Bösch 32211803c3 MDL-61015 course: consistently display hidden sections
This commit moves the availability info on top.
2018-05-21 11:33:57 +02:00
Marina Glancy eeb84ca381 MDL-61015 course: consistently display hidden sections
When section is hidden but the course setting says to show hidden sections display the hidden
sections consistently with how we display the sections with access restriction.

The only difference is that we didn't previously display the summary of the hidden section
in this case, the new logic repeats this behavior
2018-05-21 11:33:57 +02:00
David Monllao 5aa946dda7 Merge branch 'MDL-62516-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-21 11:15:15 +02:00
Jun Pataleta 88d0b05172 Merge branch 'MDL-62229-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-05-21 17:04:16 +08:00
Jake Dallimore f25a5f42ea Merge branch 'MDL-62440_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-05-21 14:56:05 +08:00
Andrew Nicols 841b8c5e34 MDL-62516 mod_forum: Only delete files for requested user 2018-05-21 14:12:49 +08:00
Michael Hawkins 81a8c42a15 MDL-56498 message: Ensure clicked notifications are marked read 2018-05-21 13:08:58 +08:00
Jun Pataleta c23417e9ad MDL-62515 templates: Remove unnecessary button role for submit button 2018-05-21 09:33:32 +08:00
Andrew Nicols dc387ce16f Merge branch 'MDL-62386-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-05-21 09:11:44 +08:00
Andrew Nicols 63e64aa6cb MDL-62500 tag: Update checkbox label when updating tag 2018-05-20 15:15:37 +08:00
Matteo Scaramuccia dd61328be3 MDL-61893 JavaScript: Bumped npm packages
Performed by removing the current 'npm-shrinkwrap.json' file:
$ rm -Rf node_modules
$ rm -f npm-shrinkwrap.json
$ npm install
$ npm shrinkwrap
2018-05-18 00:34:14 +02:00
Matteo Scaramuccia 4cc2b64cb6 MDL-61893 JavaScript: Accept any node version but Carbon (LTS) 2018-05-18 00:34:14 +02:00
Mark Johnson 83acfca76a MDL-62488 filebrowser: Stop unit tests assuming number of categories 2018-05-17 16:02:28 +01:00
Tim Hunt d7cdf10744 MDL-62482 file_storage: may have many files with same content hash 2018-05-17 11:25:12 +01:00
Tim Hunt a534d3e044 MDL-62440 participants: out-of-memory is many site-wide role assigns 2018-05-17 10:44:30 +01:00
Eloy Lafuente (stronk7) 05a434229c Moodle release 3.4.3 2018-05-16 18:42:18 +02:00
Marina Glancy e5c3ba2df9 MDL-62469 qtype_calculated: check remaining placeholders, see MDL-62275 2018-05-16 17:30:09 +02:00
David Monllao 2f3bcbc5ce Merge branch 'MDL-62456_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-16 08:58:47 +02:00
Andrew Nicols 4c2a5ce403 Merge branch 'wip-MDL-62147-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-16 14:28:13 +08:00
Jun Pataleta 97a800149c Merge branch 'MDL-62463-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-16 14:21:51 +08:00
Frédéric Massart 9510c3c535 MDL-62147 core_grades: Report contexts and data related to scales 2018-05-16 13:56:14 +08:00
Marina Glancy 5c1b473931 MDL-62147 core_grades: Declare metadata of scales and import tables 2018-05-16 13:56:14 +08:00
Marina Glancy f2f7255f7b MDL-62147 portfolio: add missing tables to privacy provider 2018-05-16 13:56:11 +08:00
Marina Glancy 3a20fb23a5 MDL-62147 privacy: unittest ensures that all tables covered 2018-05-16 13:56:07 +08:00
Andrew Nicols 6f0e3c70a9 MDL-62463 mod_glossary: Fix SQL query
The query was doing:
WHERE c.id ... AND ... OR ... OR ...

Which equates to:
WHERE (c.id ... AND ...) OR ... OR ...

Adding parens to:
WHERE (c.id ... AND (... OR ... OR ...))
2018-05-16 13:51:17 +08:00
Marina Glancy 212b6daf32 MDL-62147 privacy: corrections to tables, temporary tables 2018-05-16 12:46:24 +08:00
Mark Nelson d5f69f0c5c MDL-62456 mod_lti: add missing add_external_location_link call 2018-05-16 12:23:06 +08:00
Jake Dallimore b066f554c4 Merge branch 'MDL-62134-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-16 12:02:30 +08:00
Andrew Nicols e6a65ee796 MDL-62134 core_privacy: Allow for a failure handler 2018-05-16 11:52:46 +08:00
Andrew Nicols d44adb98f6 Merge branch 'MDL-62426-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-05-16 11:00:55 +08:00
Jake Dallimore 321d41a022 MDL-62426 core_enrol: control enrolment subcontexts at the provider
Added a function to the core_enrol provider allowing enrol plugins
to set their subcontext relative to a fixed 'enrolments' parent dir.
2018-05-16 10:23:24 +08:00
Jake Dallimore 2f477b5764 MDL-62426 enrol_flatfile: make provider a plugin provider
The enrol_flatfile table can contain userdata relating to pending
enrolments, so this should be exported and deleted as necessary.
2018-05-16 09:38:11 +08:00
Marina Glancy 8596627666 MDL-62134 privacy: consistantly call components methods 2018-05-16 09:05:45 +08:00
Eloy Lafuente (stronk7) 7f7e03e923 Merge branch 'MDL-62447_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-05-16 01:26:16 +02:00
Eloy Lafuente (stronk7) f9d6769ecd Merge branch 'MDL-62448-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-15 17:29:15 +02:00
Sara Arjona dc15df1651 MDL-62448 block_rss_client: Export all feeds from Privacy API 2018-05-15 14:26:55 +02:00
David Monllao 17d4aeacb4 Merge branch 'MDL-62228_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-15 13:31:50 +02:00
David Monllao 4d2dc4246d MDL-62447 user: Fix component name typo 2018-05-15 10:45:24 +02:00
Mark Johnson d577e027b6 MDL-62408 behat: Correct PHPUNIT_TEST checks in behat_config_util 2018-05-15 09:12:53 +01:00
David Monllao 08c3480834 weekly release 3.4.2+ 2018-05-15 09:42:13 +02:00
David Monllao 67d10dd9f3 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-05-15 09:42:11 +02:00
Mark Nelson 13a215ee8f MDL-62228 core: remove unnecessary context check in privacy providers 2018-05-15 11:59:38 +08:00
Andrew Nicols 8b90c6d421 Merge branch 'MDL-62444-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-05-15 11:39:09 +08:00
Andrew Nicols 1087c7ecf6 Merge branch 'MDL-62428_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-15 11:05:40 +08:00
Zig Tan a7a2e52230 MDL-62444 mod_assignment: Fix missing lang string. 2018-05-15 09:54:23 +08:00
Jun Pataleta a061b37c9f Merge branch 'MDL-62432-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-15 09:34:11 +08:00
Andrew Nicols a7e25a4743 MDL-62432 quiz: Check contexts more carefully 2018-05-15 09:25:51 +08:00
Eloy Lafuente (stronk7) 6ed7752d77 Merge branch 'MDL-62430_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-05-15 02:56:13 +02:00
AMOS bot 3d519e9028 Automatically generated installer lang files 2018-05-15 00:06:29 +00:00
David Monllao cca4584795 MDL-62430 block_html: Check that block instances are block_html 2018-05-14 17:07:12 +02:00
David Monllao 285d723271 Merge branch 'MDL-62370-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-14 16:00:58 +02:00
Andrew Nicols 862b48ec3e Merge branch 'MDL-62356-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-14 21:01:44 +08:00
Andrew Nicols 2c00480315 Merge branch 'MDL-62357-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-14 20:45:12 +08:00
Andrew Nicols 93476477d6 MDL-62370 core_privacy: Directory-less subsystems are compliant 2018-05-14 20:01:35 +08:00
Marina Glancy 755fe15718 MDL-62430 privacy: validate context when deleting all user data 2018-05-14 18:14:04 +08:00
David Monllao 38899f4068 Merge branch 'MDL-62425-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-14 10:59:06 +02:00
cescobedo 07e77422e6 MDL-62356 enrol_meta: Add privacy implementation for enrol_meta 2018-05-14 10:57:44 +02:00
cescobedo 2e2bfe1c8e MDL-62357 enrol_cohort: Add privacy implementation for enrol_cohort 2018-05-14 10:50:06 +02:00
Andrew Nicols b04d01c29e MDL-62425 core: Add privacy implementation 2018-05-14 15:42:59 +08:00
Andrew Nicols 67b4cde9bd MDL-62425 core_privacy: Add core to the list of components 2018-05-14 15:42:05 +08:00
Mark Nelson e1baf5e1d6 MDL-62428 core: fix incorrect early return in privacy providers 2018-05-14 13:07:49 +08:00
Jake Dallimore 0f82392c8b Merge branch 'MDL-62420-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-14 11:58:13 +08:00
Jake Dallimore a023256c41 Merge branch 'MDL-62393-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-14 09:37:57 +08:00
Andrew Nicols 108ed14f1d MDL-62420 enrol_lti: Fix random unit test fail in privacy 2018-05-14 08:44:10 +08:00
Eloy Lafuente (stronk7) d419fe2ccf Merge branch 'MDL-62371-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-14 02:42:04 +02:00
Eloy Lafuente (stronk7) d70da80b82 Merge branch 'MDL-62251-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-13 23:56:20 +02:00
Andrew Nicols 8ef2cc73c7 MDL-62371 core_privacy: Add support for progress trace 2018-05-13 15:45:24 +08:00
AMOS bot 2e764430b3 Automatically generated installer lang files 2018-05-13 00:06:43 +00:00
Andrew Nicols 644c42f936 MDL-62393 message: Fix random unit test fails 2018-05-12 22:54:29 +08:00
Eloy Lafuente (stronk7) 6df0fa92f3 weekly release 3.4.2+ 2018-05-12 12:56:48 +02:00
Eloy Lafuente (stronk7) a274f62195 MDL-62275 qtype_calculatedmulti: Fix typo 2018-05-11 21:17:25 +02:00
David Monllao c941c541b4 MDL-62029 core_course: Site format is not a standard plugin 2018-05-11 20:19:25 +02:00
Eloy Lafuente (stronk7) 6204ed292e Merge branch 'MDL-62384-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-11 18:27:58 +02:00
David Monllao 3c4be4e9f5 Merge branch 'MDL-61858_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-11 18:07:10 +02:00
David Monllao 2489791a70 Merge branch 'MDL-62368_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-11 17:59:30 +02:00
Bas Brands 75bff87d18 MDL-62386 theme: Fix audio playback display for HTML audio
Fixed for boost
Fixed for bootstrapbase
2018-05-11 14:52:53 +02:00
Mark Nelson e0700b4c79 MDL-61858 tool_phpunit: added missing privacy null provider 2018-05-11 19:39:43 +08:00
Mark Nelson 91fdd3b806 MDL-61858 gradingform_guide: added missing metadata implementation 2018-05-11 19:39:43 +08:00
Mark Nelson a4a05cffdb MDL-61858 core_portfolio: added missing metadata implementation 2018-05-11 19:39:43 +08:00
Andrew Nicols 039f5b0472 MDL-61858 core_privacy: Add test to ensure component implementations 2018-05-11 19:39:43 +08:00
Sara Arjona 4a6aa192a0 MDL-61951 core_grading: Review SQL to avoid Oracle errors 2018-05-11 13:35:34 +02:00
David Monllao c4a24dbc2e Merge branch 'MDL-61714-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-11 11:31:36 +02:00
Sara Arjona 1f89dde34f MDL-61714 admin: Removed Slovenian digital age 2018-05-11 10:12:51 +02:00
Shamim Rezaie 5604f5977f MDL-62251 Privacy: Fix dir separator in export_file() 2018-05-11 17:33:08 +10:00
Shamim Rezaie 6d882faecf MDL-62251 Privacy: Url path separator should be platform independant
It should always be forward slash.
2018-05-11 17:31:23 +10:00
Shamim Rezaie b561a9a3c2 MDL-62251 Privacy: Fix get_path() and get_full_path() bug in Windows 2018-05-11 17:27:49 +10:00
Shamim Rezaie 836f8eb62e MDL-62251 backup: Fix replace_tempdir() bug under Windows
rename() fails under Windows if the destination file/directory exists.
I modified the code to only call $this->get_workdir_path() once as that function
creates the directory if doesn't exist. And we don't want that considering the
behaviour of rename on Windows.
2018-05-11 17:19:12 +10:00
Eloy Lafuente (stronk7) 5bcf683030 MDL-62354 notes: Reduce string to avoid js_call_amd() lenght limits
That way we are under the max 1024 allowed and also, the help string
is shown properly in the modal (previously part of it was not visible
falling off-window).
2018-05-11 14:53:12 +08:00
Jun Pataleta 3403ae0f9d Merge branch 'MDL-62394-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-11 14:23:33 +08:00
Andrew Nicols 6e7bc3a86a MDL-62394 privacy: Make JSON export pretty 2018-05-11 14:12:40 +08:00
Mark Nelson cd674a6d1d MDL-62368 enrol_lti: implement privacy provider 2018-05-11 14:06:13 +08:00
Mihail Geshoski 9b5778fcd1 MDL-62384 privacy: Modify user contexts query for auth_oauth2 2018-05-11 11:14:12 +08:00
Andrew Nicols 2986db7b8d MDL-62384 core_rating: Move WHERE clauses to JOIN 2018-05-11 11:14:11 +08:00
Andrew Nicols 75f2840454 MDL-62384 core_grade: Move WHERE clause to JOIN 2018-05-11 11:14:11 +08:00
Andrew Nicols 0d91ed2942 MDL-62384 mod_lesson: Move WHERE clause to JOIN 2018-05-11 11:14:11 +08:00
Andrew Nicols b2b8f037de MDL-62384 logstore_standard: Remove unnecessary join on context 2018-05-11 11:14:10 +08:00
Andrew Nicols 0011785c0a MDL-62384 mod_quiz: Improve performancy of privacy queries 2018-05-11 11:14:10 +08:00
Adrian Greeve bfd070b711 MDL-62384 mod_data: Update sql to improve performance. 2018-05-11 11:14:10 +08:00
Adrian Greeve 53616ddb09 MDL-62384 tool_monitor: Update to sql to fix performance. 2018-05-11 11:14:09 +08:00
Adrian Greeve 9c10ba6e78 MDL-62384 core_competency: Update to sql to increase performance. 2018-05-11 11:14:09 +08:00
Adrian Greeve db2797b58c MDL-62384 core_completion: Update to sql to improve performance. 2018-05-11 11:14:09 +08:00
Adrian Greeve a50cb83349 MDL-62384 mod_assign: Update to sql query for performance. 2018-05-11 11:14:08 +08:00
Andrew Nicols 25e366c3f5 Merge branch 'wip-MDL-61814-34-fix' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-05-11 10:49:23 +08:00
Adrian Greeve df986a59fc MDL-61814 report_stats: Update to sql to increase performance. 2018-05-11 10:43:57 +08:00
Jake Dallimore 78f478c00b MDL-61951 core_grading: SQL improvements for grading_instance join 2018-05-11 10:19:50 +08:00
Jake Dallimore 031a7948f1 Merge branch 'MDL-61951-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-11 10:19:46 +08:00
Jun Pataleta 0c1f7db133 Merge branch 'MDL-62117-34-fix' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-11 09:31:43 +08:00
Andrew Nicols 3fa0cd9708 MDL-62117 enrol_paypal: Improve SQL efficiency 2018-05-11 09:30:10 +08:00
Tim Hunt 023c3d4f0d MDL-62275 qtype_calc*: improve validation of formulae
Many thanks to Marina Glancy for helping with this.
2018-05-11 01:28:47 +02:00
David Monllao 20f9ff3a10 Merge branch 'MDL-62366-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-05-10 18:14:10 +02:00
David Monllao 464a6c7f7e Merge branch 'MDL-61714-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-10 18:10:55 +02:00
David Monllao 43f86202dc Merge branch 'MDL-62200-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-05-10 18:04:26 +02:00
David Monllao 0cd244b5c7 Merge branch 'MDL-61949-34-privacy-upgrade-txt' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-05-10 17:53:16 +02:00
Jake Dallimore 1d49ba282a MDL-61951 core_grading: Several fixes to the privacy implementation
- Fixed legacy polyfill method definitions
- Added unit test for legacy polyfill
- Fixed delete_gradingform_for_userid in gradingform provider
2018-05-10 13:27:21 +02:00
Sara Arjona 500a03f9ed MDL-61951 grading: Implement privacy API 2018-05-10 13:27:20 +02:00
Andrew Nicols 74d018c3e0 MDL-61905 mod_workshop: Adjust privacy SQL queries
This change moves the content of WHERE to the JOIN, thus filtering the
results before they are returned. This reduces the number of joined rows
which gives a big performance benefit.
2018-05-10 13:05:48 +02:00
David Mudrák 0628adc6c7 MDL-61949 privacy: Add mention of the new API in upgrade.txt files
The notice is explicitly repeated for activity modules because they
usually process user data heavily.
2018-05-10 12:01:09 +02:00
Eloy Lafuente (stronk7) 4f53102a9e Merge branch 'MDL-62354-34-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-05-10 11:38:50 +02:00
Sara Arjona 3c3451b1b6 MDL-61714 admin: Update digital age consent map according legislation 2018-05-10 10:33:17 +02:00
David Monllao 29d090c15c Merge branch 'MDL-61309-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-10 08:48:19 +02:00
Andrew Nicols 500146d1e6 MDL-61309 mod_forum: Improve privacy query performance 2018-05-10 14:06:30 +08:00
Marina Glancy 6cc7e8cd51 MDL-62206 blocks: do not add fixed form elements as hidden 2018-05-10 12:08:56 +08:00
Adam Olley 18a3db531e MDL-62210 mod_assign: limit file lookup to the target assign 2018-05-10 11:21:58 +08:00
Brendan Cox 00781f3590 MDL-62210 mod_assign: improved validation in portfolio caller class 2018-05-10 11:21:58 +08:00
Jake Dallimore 475d4345ca Merge branch 'MDL-62383-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-05-10 10:03:57 +08:00
Jun Pataleta 569e2aae3b MDL-62383 privacy: Close recordset in contextlist::add_from_sql() 2018-05-10 09:56:48 +08:00
Jake Dallimore eb0b01e3c9 MDL-62257 mnetservice_enrol: minor fixes to privacy provider 2018-05-10 09:37:46 +08:00
Jake Dallimore 6147acceba Merge branch 'MDL-62257-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-10 09:37:40 +08:00
Eloy Lafuente (stronk7) 5c581ac980 Merge branch 'MDL-61309-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-10 09:18:59 +08:00
David Monllao fe99227626 Merge branch 'MDL-62308_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-10 09:18:59 +08:00
David Monllao a586c08def MDL-61976 mod_wiki: Trim returned value to avoid EOF-related failures 2018-05-10 09:18:59 +08:00
Andrew Nicols 9db4483076 Merge branch 'wip-MDL-62351-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-10 09:18:58 +08:00
David Monllao 927fe3ce99 Merge branch 'MDL-62249-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-05-10 09:18:58 +08:00
Andrew Nicols b53663e359 Merge branch 'MDL-62217_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-05-10 09:18:57 +08:00
Andrew Nicols 3e88f8e7d1 Merge branch 'MDL-62269-34' of git://github.com/vmdef/moodle into MOODLE_34_STABLE 2018-05-10 09:18:57 +08:00
David Monllao 608cb5dcc0 Merge branch 'wip-MDL-61976-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-10 09:18:56 +08:00
David Monllao d99070f10e MDL-61994 mod_glossary: Fixing wrong subsystem name 2018-05-10 09:18:56 +08:00
David Monllao 9b7163faf1 Merge branch 'MDL-61994-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-05-10 09:18:55 +08:00
David Monllao 40e290fe27 Merge branch 'MDL-61309-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-10 09:18:55 +08:00
Brendan Cox f53c4b18b4 MDL-62232 mod_forum: Additional tests for portfolio file export 2018-05-10 09:18:55 +08:00
Adam Olley ef56dcb9dd MDL-62232 mod_forum: Limit portfolio to files belonging to the post 2018-05-10 09:18:54 +08:00
Andrew Nicols 1e0ca61d45 Merge branch 'MDL-61905-34-privacyworkshop' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-05-10 09:18:54 +08:00
Andrew Nicols adb4e9b55e Merge branch 'MDL-62029-34-2' of git://github.com/snake/moodle into MOODLE_34_STABLE 2018-05-10 09:18:53 +08:00
Jun Pataleta 31f20b9309 Merge branch 'MDL-62332-34' of git://github.com/bmbrands/moodle into MOODLE_34_STABLE 2018-05-10 09:18:53 +08:00
Andrew Nicols 472770e15e Merge branch 'MDL-62318-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-10 09:18:52 +08:00
Andrew Nicols 8a5c22a052 Merge branch 'MDL-62117-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-10 09:18:52 +08:00
Marina Glancy 32df854591 MDL-62233 portfolio: check caller parent class 2018-05-10 09:18:51 +08:00
Zig Tan 42caaedf5e MDL-62366 mod_assign: Followup fix for attemptnumber in exported JSON 2018-05-10 09:18:46 +08:00
Andrew Nicols 1813fb1019 MDL-61309 mod_forum: Remove unnecessary deletion check 2018-05-10 07:48:13 +08:00
Helen Foster b909153fef MDL-62354 lang: Merge English strings from the en_fix language pack
* publishstate_help, core_notes - including GDPR guidance
2018-05-09 22:56:40 +02:00
Mark Nelson 0b01e3abc1 MDL-62308 core_backup: implement privacy provider
The provider was added to 'backup/util/ui/' due to
Moodle's implementation of autoclass loading. See
fetch_subsystems() in lib/classes/component.php.
2018-05-09 23:14:25 +08:00
Marina Glancy ed061d4a9a MDL-62351 privacy: check that subsystem/plugintype exist 2018-05-09 17:38:11 +08:00
Marina Glancy 6a06f60fc6 MDL-61976 mod_wiki: implement privacy API 2018-05-09 17:30:45 +08:00
Victor Deniz b694fb4a33 MDL-62269 auth_mnet: Implement privacy API
AMOS BEGIN
 CPY [privacy:metadata:address,core_user],[privacy:metadata:mnet_external:address,auth_mnet]
 CPY [privacy:metadata:aim,core_user],[privacy:metadata:mnet_external:aim,auth_mnet]
 CPY [privacy:metadata:aim,core_user],[privacy:metadata:mnet_external:aim,auth_mnet]
 CPY [privacy:metadata:alternatename,core_user],[privacy:metadata:mnet_external:alternatename,auth_mnet]
 CPY [privacy:metadata:autosubscribe,core_user],[privacy:metadata:mnet_external:autosubscribe,auth_mnet]
 CPY [privacy:metadata:calendartype,core_user],[privacy:metadata:mnet_external:calendartype,auth_mnet]
 CPY [privacy:metadata:city,core_user],[privacy:metadata:mnet_external:city,auth_mnet]
 CPY [privacy:metadata:country,core_user],[privacy:metadata:mnet_external:country,auth_mnet]
 CPY [privacy:metadata:currentlogin,core_user],[privacy:metadata:mnet_external:currentlogin,auth_mnet]
 CPY [privacy:metadata:department,core_user],[privacy:metadata:mnet_external:department,auth_mnet]
 CPY [privacy:metadata:description,core_user],[privacy:metadata:mnet_external:description,auth_mnet]
 CPY [privacy:metadata:email,core_user],[privacy:metadata:mnet_external:email,auth_mnet]
 CPY [privacy:metadata:emailstop,core_user],[privacy:metadata:mnet_external:emailstop,auth_mnet]
 CPY [privacy:metadata:firstaccess,core_user],[privacy:metadata:mnet_external:firstaccess,auth_mnet]
 CPY [privacy:metadata:firstname,core_user],[privacy:metadata:mnet_external:firstname,auth_mnet]
 CPY [privacy:metadata:firstnamephonetic,core_user],[privacy:metadata:mnet_external:firstnamephonetic,auth_mnet]
 CPY [privacy:metadata:icq,core_user],[privacy:metadata:mnet_external:icq,auth_mnet]
 CPY [privacy:metadata:id,core_user],[privacy:metadata:mnet_external:id,auth_mnet]
 CPY [privacy:metadata:idnumber,core_user],[privacy:metadata:mnet_external:idnumber,auth_mnet]
 CPY [privacy:metadata:imagealt,core_user],[privacy:metadata:mnet_external:imagealt,auth_mnet]
 CPY [privacy:metadata:institution,core_user],[privacy:metadata:mnet_external:institution,auth_mnet]
 CPY [privacy:metadata:lang,core_user],[privacy:metadata:mnet_external:lang,auth_mnet]
 CPY [privacy:metadata:lastaccess,core_user],[privacy:metadata:mnet_external:lastaccess,auth_mnet]
 CPY [privacy:metadata:lastlogin,core_user],[privacy:metadata:mnet_external:lastlogin,auth_mnet]
 CPY [privacy:metadata:lastname,core_user],[privacy:metadata:mnet_external:lastname,auth_mnet]
 CPY [privacy:metadata:lastnamephonetic,core_user],[privacy:metadata:mnet_external:lastnamephonetic,auth_mnet]
 CPY [privacy:metadata:maildigest,core_user],[privacy:metadata:mnet_external:maildigest,auth_mnet]
 CPY [privacy:metadata:maildisplay,core_user],[privacy:metadata:mnet_external:maildisplay,auth_mnet]
 CPY [privacy:metadata:middlename,core_user],[privacy:metadata:mnet_external:middlename,auth_mnet]
 CPY [privacy:metadata:msn,core_user],[privacy:metadata:mnet_external:msn,auth_mnet]
 CPY [privacy:metadata:phone,core_user],[privacy:metadata:mnet_external:phone1,auth_mnet]
 CPY [privacy:metadata:picture,core_user],[privacy:metadata:mnet_external:picture,auth_mnet]
 CPY [privacy:metadata:policyagreed,core_user],[privacy:metadata:mnet_external:policyagreed,auth_mnet]
 CPY [privacy:metadata:skype,core_user],[privacy:metadata:mnet_external:skype,auth_mnet]
 CPY [privacy:metadata:suspended,core_user],[privacy:metadata:mnet_external:suspended,auth_mnet]
 CPY [privacy:metadata:timezone,core_user],[privacy:metadata:mnet_external:timezone,auth_mnet]
 CPY [privacy:metadata:trackforums,core_user],[privacy:metadata:mnet_external:trackforums,auth_mnet]
 CPY [privacy:metadata:trustbitmask,core_user],[privacy:metadata:mnet_external:trustbitmask,auth_mnet]
 CPY [privacy:metadata:url,core_user],[privacy:metadata:mnet_external:url,auth_mnet]
 CPY [privacy:metadata:username,core_user],[privacy:metadata:mnet_external:username,auth_mnet]
 CPY [privacy:metadata:yahoo,core_user],[privacy:metadata:mnet_external:yahoo,auth_mnet]
AMOS END
2018-05-09 10:06:18 +01:00
David Monllao 852a814791 MDL-62217 search_solr: Plugin provider fake implementation 2018-05-09 10:58:06 +02:00
David Monllao 3cd8687bec MDL-62217 search: Privacy providers 2018-05-09 10:58:05 +02:00
David Mudrák 0d7e2fc5ec MDL-61905 workshop: Implement privacy API in grading evaluators
Standard workshop ships with only one evaluation method and that one
holds no personal data.
2018-05-09 10:02:46 +02:00
David Mudrák fdcb33c5c5 MDL-61905 workshop: Implement privacy API in assessment allocators
Assessment allocation methods normally do not store any personal data.
Their duty is to create assessment records that are then exported by the
workshop core itself.

Still, some allocators (such as the Manual allocation) can store certain
personal data such as user preferences.
2018-05-09 10:02:46 +02:00
David Mudrák 07dc8783a9 MDL-61905 workshop: Implement privacy API in grading strategies
On low level, standard grading strategies subplugins do not store
personal themselves.  They make use of the grades storage provided by
the workshop itself.  What they do contain though is the information
about how the assessment forms were defined. And they are also
responsible for correctly interpreting the values in the central grades
table.

Grading strategies fulfil the contract with the parent workshop module
by implementing the workshopform_provider interface. That gives them a
chance to export data about the assessment form to each of exported
assessment.
2018-05-09 10:02:45 +02:00
David Mudrák 4d829b1159 MDL-61905 workshop: Implement the privacy API in the workshop core
Workshop module stores personal data in its tables, via user
preference and via core_files and core_plagiarism subsystems.

When exporting the data, we export not only data created by users
themselves (such as their submissions and provided peer-assessments) but
also all relevant data that can (or must) be used to interpret created
content and evaluate the user's performance and skills.

On the other hand, when deleting data at user's request, we delete only
those data that do not affect other users' performance evaluation. The
reasoning is that one's right for privacy does not overweight someone
else's right for fair assessment. For that reason, we can't fully delete
whole provided peer-assessments, for example. Because they are used in
cross-comparison and grading evaluation of all other peers who assessed
the same submission. So instead, we replace provided texts but still
keep the original record.

Workshop defines the interface for its grading strategy subplugins to
allow them attach personal data under their control to the exported
structures.
2018-05-09 10:02:45 +02:00
Jake Dallimore 791824e682 MDL-62029 core_course: Fixes to context-aware provider implementation. 2018-05-09 15:41:31 +08:00
Andrew Nicols 3c7fe9a187 MDL-61309 mod_forum: Implement privacy deletion 2018-05-09 14:03:33 +08:00
Andrew Nicols 6359c7e7be MDL-61309 mod_forum: Implement the Privacy API 2018-05-09 14:03:33 +08:00
Andrew Nicols 36f95f4473 MDL-61309 core_tags: Add privacy unit test trait 2018-05-09 13:54:49 +08:00
Shamim Rezaie 059b45807e MDL-62318 core_group: Updating cache when deleting group memberships 2018-05-09 13:30:28 +10:00
Shamim Rezaie bc36eb358c MDL-62318 core_group: Add implementation of privacy API 2018-05-09 13:30:28 +10:00
Simey Lameze 9dcb1ca891 MDL-61994 mod_glossary: add unit tests for provider 2018-05-09 10:59:35 +08:00
Simey Lameze e8aed4e726 MDL-61994 mod_glossary: implement privacy providers 2018-05-09 10:59:35 +08:00
Adrian Greeve 5701891122 MDL-62029 core_privacy: context aware provider creation. 2018-05-09 10:08:07 +08:00
Adrian Greeve 79c1c70d3e MDL-62029 core_course: Create privacy files for core_course. 2018-05-09 10:07:59 +08:00
Marina Glancy 4972e130b0 MDL-61996 core: when loggedin always check user is complete 2018-05-09 02:56:55 +02:00
Andrew Nicols 29fde8b965 Merge branch 'MDL-62010-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-09 08:51:40 +08:00
cescobedo 9a8e043005 MDL-62010 core_enrol: Add privacy implementation for core_enrol 2018-05-08 18:54:50 +02:00
David Monllao 01c96e9407 MDL-61814 core_user: Remove empty line to avoid ci warning 2018-05-08 17:19:53 +02:00
David Monllao fe91efe959 Merge branch 'wip-MDL-61814-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-05-08 17:19:44 +02:00
David Monllao b70613ff41 Merge branch 'MDL-61943-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-08 16:44:09 +02:00
David Monllao f4fb0b93ce weekly release 3.4.2+ 2018-05-08 14:02:17 +02:00
David Monllao 4d5b3a33b4 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-05-08 14:02:16 +02:00
cescobedo 042bce6e96 MDL-61943 core_role: Add privacy implementation for core_role 2018-05-08 13:43:07 +02:00
cescobedo 7f0e4dc648 MDL-62257 mnetservice_enrol: Implement Privacy API 2018-05-08 10:08:14 +02:00
Bas Brands ebad5e1ad0 MDL-62332 Theme boost: paging bar empty active link 2018-05-08 09:54:34 +02:00
Andrew Nicols c4e40568e6 Merge branch 'wip-MDL-61937-34-fix' of https://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-08 14:44:34 +08:00
Marina Glancy 7e34297bc4 MDL-61937 mod_data: fix commentarea name 2018-05-08 14:39:55 +08:00
Adrian Greeve 00ee2d2253 MDL-61814 report_stats: Update to be a full privacy provider. 2018-05-08 13:50:32 +08:00
Adrian Greeve 4f63dba263 MDL-61814 core_portfolio: Update to portfolio provider. 2018-05-08 13:50:19 +08:00
Adrian Greeve 50c5de127c MDL-61814 core_user: Implement privacy system for user. 2018-05-08 13:50:06 +08:00
Zig Tan 3a4032ddc8 MDL-62249 block_tag_flickr: Corrected privacy providers 2018-05-08 12:12:01 +08:00
Marina Glancy b3db534b8c MDL-61976 privacy: replace pluginfile in test writer 2018-05-08 12:02:40 +08:00
Marina Glancy a37d821895 MDL-61976 privacy: add subcontext argument to has_any_data 2018-05-08 12:02:40 +08:00
Andrew Nicols 763db71ad3 Merge branch 'wip-MDL-62068-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-08 11:45:16 +08:00
Shamim Rezaie 87abd9b0aa MDL-62117 enrol_paypal: Add implementation of Privacy API 2018-05-08 13:34:25 +10:00
Marina Glancy 8d34874399 MDL-62068 core_tag: implement privacy API 2018-05-08 11:31:54 +08:00
Andrew Nicols 1fe42d1cd1 Merge branch 'MDL-62285-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2018-05-08 11:11:24 +08:00
Ryan Wyllie 5764a4640f MDL-62285 privacy: use context id when generating context path
moodle_content_writer::get_context_path() now includes the context
id in the path to ensure that it will always generate unique paths
even when the context names are not unique.
2018-05-08 01:41:03 +00:00
Eloy Lafuente (stronk7) 403e3b0333 Merge branch 'MDL-61521-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-05-08 01:44:53 +02:00
Andrew Nicols c305233628 Merge branch 'MDL-62326-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-07 17:26:10 +08:00
Andrew Nicols 47265c83e0 Merge branch 'MDL-62169-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-05-07 17:25:49 +08:00
Zig Tan a942eb648a MDL-62169 mod_assignment: Improved phpunit test reliability 2018-05-07 16:44:03 +08:00
Andrew Nicols 26fad064f0 Merge branch 'MDL-61919_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-07 15:46:46 +08:00
Andrew Nicols 26c255a160 Merge branch 'wip-MDL-62137-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-05-07 15:27:53 +08:00
Andrew Nicols e00c025ed6 MDL-62326 core_antivirus: Implement null provider 2018-05-07 14:40:22 +08:00
Adrian Greeve 3bf826e23d MDL-62137 core_privacy: Update to helper to use core_completion 2018-05-07 14:27:10 +08:00
Adrian Greeve 3f98a6af5b MDL-62137 core_completion: Privacy files for core_completion. 2018-05-07 14:27:10 +08:00
Andrew Nicols ab4de7a081 Merge branch 'MDL-62169-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-05-07 14:16:25 +08:00
Andrew Nicols 269327c0fb Merge branch 'MDL-61407-34-fix' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-05-07 13:51:37 +08:00
Zig Tan 4b012e921c MDL-62169 mod_assignment: Implemented privacy providers 2018-05-07 13:45:38 +08:00
Jun Pataleta f304a59b8a MDL-61407 mod_quiz: Determine quiz step for manual comment 2018-05-07 13:35:18 +08:00
Andrew Nicols 6294e3b9ec MDL-61937 mod_data: Correct rating export args in privacy 2018-05-07 09:43:20 +08:00
David Monllao 845a6a8329 MDL-61937 mod_data: Target the correct area 2018-05-07 09:43:20 +08:00
Andrew Nicols d038e858df MDL-61407 question: Export step files in privacy 2018-05-07 07:10:07 +08:00
Eloy Lafuente (stronk7) 176aacfe93 MDL-61693 core_calendar: make results deterministic for better testing 2018-05-06 18:19:05 +02:00
David Monllao 9063bdf5b1 MDL-62218 analytics: Add missing sample origin checking 2018-05-04 16:38:41 +02:00
Bas Brands 1ed8bd1b2f MDL-62200 Theme boost: popup in popup styles 2018-05-04 14:08:16 +02:00
Frédéric Massart c78bbe369c MDL-61877 core_competency: False negative due to random ordering 2018-05-04 11:18:48 +02:00
Zig Tan baec14ae3a MDL-61693 core_calendar: Simplified get calendar event details SQL 2018-05-04 13:11:21 +08:00
Jake Dallimore 876fd26435 Merge branch 'MDL-61407-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-04 11:51:22 +08:00
Andrew Nicols c7c6f2107b Merge branch 'wip-MDL-61937-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-04 11:29:55 +08:00
Jun Pataleta f49cae6e04 Merge branch 'MDL-61877-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-04 11:25:37 +08:00
Marina Glancy ba84a6e926 MDL-61937 mod_data: implement privacy provider 2018-05-04 11:16:00 +08:00
Marina Glancy defa163768 MDL-61937 tag: new method in privacy api 2018-05-04 11:15:59 +08:00
Marina Glancy f88ea97b79 MDL-61937 rating: delete method in privacy provider 2018-05-04 11:15:59 +08:00
Marina Glancy 4e71852fbc MDL-61937 comment: do not use API in provider
When exporting comments we can not use comments API because:
- we don't need to call component validate, comments may be disabled right now but
  are still stored
- we don't need to call display callback
- we need to export all comments and not only first 15 of them
2018-05-04 11:15:59 +08:00
Marina Glancy 7e8fc8cc0f MDL-61937 mod_data: generator for all field types 2018-05-04 11:15:59 +08:00
cescobedo 4cd32d3712 MDL-61937 datafield: Add privacy implementation for all datafield 2018-05-04 11:15:58 +08:00
Andrew Nicols a8027ed5cb Merge branch 'MDL-62218-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2018-05-04 11:12:21 +08:00
Ryan Wyllie e5affab8bd MDL-62218 analytics: make privacy test class name more unique 2018-05-04 03:06:31 +00:00
David Monllao 4e262e6b2b MDL-62218 analytics: Privacy API implementation 2018-05-04 03:06:23 +00:00
David Monllao eb5bcca5ad MDL-62218 mlbackend: Null privacy providers for core mlbackends 2018-05-04 03:06:16 +00:00
Mark Nelson 94b01d5304 MDL-61919 core_message: implement privacy provider 2018-05-04 11:03:22 +08:00
Jake Dallimore fcc16c0dd3 Merge branch 'MDL-62046-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-05-04 10:27:44 +08:00
Jake Dallimore 79aac77a26 Merge branch 'MDL-62032-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-05-04 09:57:17 +08:00
Jake Dallimore 3bc60b4f89 Merge branch 'MDL-62030-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-05-04 09:51:53 +08:00
Jake Dallimore 872958acbf Merge branch 'MDL-59845-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-04 09:47:39 +08:00
Jake Dallimore b4ff89c851 Merge branch 'MDL-62007-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-05-04 09:22:57 +08:00
Eloy Lafuente (stronk7) e9780ff068 Merge branch 'MDL-62315-34-privacycoreform' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-05-03 23:40:49 +02:00
Eloy Lafuente (stronk7) 640fda0ce5 Merge branch 'MDL-61800-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-03 23:28:42 +02:00
David Mudrák 8010382a9c MDL-62315 form: Implement the privacy API for core_form subsystem
Forms subsystem has no own database table. The only personal data is the
user preference 'filemanager_recentviewmode' that stores the view mode
of the file picker element.

It was discussed whether handling of this preference should be added
here into core_form, or rather into core_repository subsystem. The final
decision was to consider the preference as owned by the core_form
because it is affecting the display of a form element, not the
repository backend (even though the strings describing it had been put
into core_repository strings).
2018-05-03 19:06:19 +02:00
Andrew Nicols ce76768382 Merge branch 'MDL-62240-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-03 19:05:51 +08:00
Jake Dallimore a4efb88ff2 Merge branch 'MDL-62310-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-03 18:03:29 +08:00
Jun Pataleta 6d0112902a Merge branch 'MDL-61194-34' of git://git.cameron1729.xyz/moodle into MOODLE_34_STABLE 2018-05-03 17:06:28 +08:00
Cameron Ball 1078a686bd MDL-61194 assignfeedback_editpdf: Check if we can convert online text
This patch adds a check to make sure there is a converter available that
will be able to handle html->pdf conversion before adding onlinetext
submissions to the list of files to combine.
2018-05-03 16:46:32 +08:00
Mihail Geshoski 352fd99b38 MDL-62046 profilefield_textarea: Add privacy files and unit tests 2018-05-03 16:26:42 +08:00
David Monllao 238a285a1b Merge branch 'MDL-61693-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-05-03 10:24:25 +02:00
Andrew Nicols df14c026bf MDL-61407 privacy: Reset the writer after writer tests
The writer was not reset after these tests which had the potential to
affect the next test after these were run.
2018-05-03 16:14:38 +08:00
Andrew Nicols 2915719cb9 MDL-61407 quizaccess: Add null_writer implementations 2018-05-03 16:14:37 +08:00
Andrew Nicols 9abdeed325 MDL-61407 quiz: Add reports for quiz 2018-05-03 16:14:37 +08:00
Andrew Nicols 52dd3facb5 MDL-61407 qtype: Add null_writer for all qtypes 2018-05-03 16:14:37 +08:00
Andrew Nicols 27aaaf2998 MDL-61407 qformat: Add null_writer for all qformats
Questions formats do not store any personal data.
Any contrib format which does store personal data should utilise the
standard export interfaces as this subsystem will not call them directly.
2018-05-03 16:14:36 +08:00
Andrew Nicols e4fcfbb8f9 MDL-61407 question: Add null_writer for all behaviours
Behaviours do not store any personal data.
Any contrib behaviour which does store personal data should utilise the
standard export interfaces as this subsystem will not call them directly.
2018-05-03 16:14:36 +08:00
Andrew Nicols 4e62b0f999 MDL-61407 mod_quiz: Add initial privacy implementation 2018-05-03 16:14:35 +08:00
Andrew Nicols b09f1d8be9 MDL-61407 question: Add initial privacy implementation 2018-05-03 16:14:35 +08:00
Mihail Geshoski 3bab35e6b1 MDL-62032 profilefield_text: Add privacy files and unit tests 2018-05-03 16:08:55 +08:00
David Monllao 419af6769e Merge branch 'MDL-62059-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-03 10:08:16 +02:00
Mihail Geshoski 82f8050bb8 MDL-62030 profilefield_menu: Add privacy files and unit tests 2018-05-03 15:52:57 +08:00
Mihail Geshoski 8e8a48cfd9 MDL-62007 profilefield_checkbox: Modify privacy provider 2018-05-03 15:28:28 +08:00
Sara Arjona 4a877f36d2 MDL-62240 privacy: Avoid error when path is higher than allowed
A new method shorten_filenames has been added to moodlelib.
2018-05-03 09:17:05 +02:00
Andrew Nicols 27b956ef56 MDL-62240 file: Add includehash to shorten_filename + unit tests 2018-05-03 09:17:04 +02:00
Mihail Geshoski 5603f19631 MDL-62007 profilefield_datetime: Add privacy files and unit tests 2018-05-03 14:58:28 +08:00
Jun Pataleta 44378db9cf Merge branch 'MDL-61956-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-05-03 14:43:56 +08:00
Jake Dallimore 83ff8f1eac Merge branch 'MDL-62264-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-05-03 14:06:05 +08:00
Jun Pataleta 31ced1fa3f Merge branch 'MDL-62202-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-03 13:31:46 +08:00
Andrew Nicols 361fc9a30c Merge branch 'MDL-62009-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-03 12:28:24 +08:00
Andrew Nicols 37d4ba0269 Merge branch 'wip-MDL-62312-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-03 11:10:28 +08:00
Jake Dallimore 8d229bfb4c Merge branch 'MDL-62280-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-03 10:53:25 +08:00
Marina Glancy 59354457e0 MDL-62312 course: Move core_publish renderer methods to course renderer 2018-05-03 10:09:00 +08:00
Jun Pataleta 276d129e03 Merge branch 'MDL-60414-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-05-03 09:33:12 +08:00
AMOS bot 639add8bf9 Automatically generated installer lang files 2018-05-03 00:06:30 +00:00
Luca Bösch 7b25853ccb MDL-60414 theme_boost: bootstrap dropdown menu html spec char rendering 2018-05-02 23:02:39 +02:00
Jun Pataleta 111a056d3f MDL-62312 admin: Move moodleorg_registration_message to admin renderer 2018-05-02 23:43:48 +08:00
Andrew Nicols b3753e60fa MDL-61407 question: Allow formatters to ignore caps 2018-05-02 19:10:24 +08:00
Andrew Nicols e9419db48d MDL-61407 privacy: Track changes in any context 2018-05-02 19:10:24 +08:00
cescobedo 6d30a1ded4 MDL-62310 core_admin: Implement Privacy API 2018-05-02 11:58:48 +02:00
Andrew Nicols 9cf2c160dc MDL-62135 tool_log: Use plugintype_class_callback 2018-05-02 17:46:45 +08:00
Andrew Nicols f4603b1e15 Merge branch 'MDL-62135-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-02 17:38:23 +08:00
cescobedo 97585a325d MDL-62264 core_mnet: Implement Privacy API 2018-05-02 11:20:20 +02:00
Frédéric Massart fb34d23759 MDL-62135 logstore_legacy: Implement privacy API 2018-05-02 17:18:19 +08:00
Frédéric Massart f46e96bd91 MDL-62135 logstore_database: Implement privacy API 2018-05-02 17:18:19 +08:00
Frédéric Massart 4a62ff444e MDL-62135 logstore_standard: Implement privacy API 2018-05-02 17:18:19 +08:00
Frédéric Massart d3cbf97a2e MDL-62135 tool_log: Implement privacy API 2018-05-02 17:18:19 +08:00
David Mudrák b62eb9310e MDL-61905 workshop: Drop the old 1.x era tables
These tables may still contain relics of old personal data if the site
was installed before Moodle 2.0. We do not need these tables any more.
Following the "privacy by design" principles, we are dropping them now.
2018-05-02 11:15:13 +02:00
Luca Bösch f6ebb57702 MDL-61956 calendar: allow to see hidden course with switch role 2018-05-02 09:37:13 +02:00
Sara Arjona c381d9c18f MDL-62202 privacy: Move Privacy and policies category to Users page 2018-05-02 08:46:01 +02:00
Jun Pataleta 386c5299d8 Merge branch 'MDL-62253-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-02 13:53:01 +08:00
Jun Pataleta c96525e2bd Merge branch 'MDL-61898-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-05-02 13:46:40 +08:00
Andrew Nicols 5886b5ef47 MDL-61898 cache: Implement privacy API for all stores and locks 2018-05-02 13:37:29 +08:00
Andrew Nicols 8bde0603d1 MDL-61898 core_cache: Implement Privacy API 2018-05-02 13:37:29 +08:00
Frédéric Massart fcf745c170 MDL-62214 tool_messageinbound: False negative due to time() usage
PHP Unit is so fast that my test couldn't cope with it!
2018-05-02 13:09:55 +08:00
Andrew Nicols bdda38b8b6 Merge branch 'MDL-61920_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-05-02 13:07:51 +08:00
Andrew Nicols 8048aedf46 Merge branch 'MDL-62266-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-05-02 12:34:34 +08:00
Andrew Nicols 057a8fe78b Merge branch 'MDL-62214-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-02 12:29:10 +08:00
Andrew Nicols 8b8f1bf85c MDL-61800 task: Reset the OUTPUT and PAGE on execution 2018-05-02 11:58:09 +08:00
Andrew Nicols d5a6324fe1 Merge branch 'MDL-62236-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-02 10:54:00 +08:00
Andrew Nicols 2964d00f94 MDL-59845 tool_lp: Add js tracking around UI refresh 2018-05-02 09:16:14 +08:00
Eloy Lafuente (stronk7) 8e5187c0b6 weekly release 3.4.2+ 2018-05-01 23:04:20 +02:00
Eloy Lafuente (stronk7) 04c8c1431b Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-05-01 23:04:19 +02:00
Frédéric Massart 61091a5457 MDL-62167 core_badges: Remove usage of a reserved keyword of Oracle 2018-05-01 15:22:33 +02:00
Frédéric Massart b5400f20cb MDL-62167 core_badges: Prevent SQL error with Oracle 2018-05-01 15:22:32 +02:00
Andrew Nicols 5d705cbed4 Merge branch 'wip-MDL-61308-34-testfix' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-05-01 12:32:49 +02:00
Adrian Greeve 8966bb5b38 MDL-61308 assignsubmission_comments: Unit test ordering fix. 2018-05-01 12:32:39 +02:00
Andrew Nicols 46985532b5 Merge branch 'MDL-62231-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-01 12:32:28 +02:00
Shamim Rezaie 75dc5bf14b MDL-62231 block_recent_activity: Implement null provider for the block 2018-05-01 14:07:52 +10:00
Andrew Nicols 82c8ef17b0 Merge branch 'wip-MDL-62138-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-05-01 11:57:41 +08:00
Andrew Nicols aeaf9f0986 Merge branch 'MDL-61411-34' of git://github.com/Kathrin84/moodle into MOODLE_34_STABLE 2018-05-01 11:22:27 +08:00
Andrew Nicols 031f4e28d9 Merge branch 'MDL-62167-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-05-01 11:14:47 +08:00
Andrew Nicols 9bb560cd7c MDL-62280 xhprof: Support tideways_xhprof 2018-05-01 11:03:00 +08:00
Frédéric Massart 269cbdce37 MDL-62009 core_grades: Implement privacy API 2018-05-01 10:50:30 +08:00
Jun Pataleta 998fad0954 Merge branch 'MDL-62060-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-01 10:44:53 +08:00
Shamim Rezaie 970515e932 MDL-62060 core_privacy: Make sure the exported json is human readable 2018-05-01 12:36:42 +10:00
Frédéric Massart de070d92e1 MDL-62214 tool_messageinbound: Implement privacy API 2018-05-01 09:23:21 +08:00
Frédéric Massart 5555399582 MDL-62214 tool_messageinbound: Delete old messages pending verification 2018-05-01 09:23:20 +08:00
Frédéric Massart bfa32ae5c0 MDL-62253 core_auth: Implement privacy API 2018-05-01 09:15:22 +08:00
Jake Dallimore fc7c30e3f0 Merge branch 'MDL-62005-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-05-01 09:10:39 +08:00
AMOS bot fad52c36fd Automatically generated installer lang files 2018-05-01 00:07:04 +00:00
Jun Pataleta 1e3a6e2d32 Merge branch 'MDL-62248-34-fix' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-30 21:24:34 +08:00
Andrew Nicols a59a5912ee MDL-62248 core_privacy: Add getter for user context prefs 2018-04-30 20:37:46 +08:00
Mark Nelson 5e8f5cbce3 MDL-61920 mod_lti: implement privacy provider 2018-04-30 18:49:38 +08:00
Mark Nelson 2d390e8b69 MDL-61920 ltiservice_toolsettings: implement privacy provider 2018-04-30 18:49:38 +08:00
Mark Nelson d1c45ed355 MDL-61920 ltiservice_toolproxy: implement privacy provider 2018-04-30 18:49:38 +08:00
Mark Nelson 08fd60f505 MDL-61920 ltiservice_profile: implement privacy provider 2018-04-30 18:49:38 +08:00
Mark Nelson dd95c21a95 MDL-61920 ltiservice_memberships: implement privacy provider 2018-04-30 18:49:38 +08:00
Jun Pataleta dc9888df17 Merge branch 'MDL-61012_v3.4.x' of https://github.com/troywilliams/moodle into MOODLE_34_STABLE 2018-04-30 17:29:04 +08:00
Sara Arjona 636a50044b MDL-62266 core_availability: Implement privacy API 2018-04-30 11:20:55 +02:00
Shamim Rezaie ac2e6921cb MDL-62005 block_comments: Add implementation of Privacy API 2018-04-30 18:20:54 +10:00
Andrew Nicols 2dcc83ac38 MDL-62248 core_privacy: Unit test for get_user_preferences 2018-04-30 16:01:38 +08:00
Andrew Nicols c2f944b022 Merge branch 'MDL-62248-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-30 16:01:33 +08:00
Frédéric Massart f47cd85ff6 MDL-62248 core_block: Implement privacy API 2018-04-30 15:30:27 +08:00
Frédéric Massart 1a329e6977 MDL-62248 core_privacy: Test writer writes user prefs in right contexts 2018-04-30 15:30:27 +08:00
Shamim Rezaie 351bfbef06 MDL-62059 mod_book: Implement null provider for mod_book 2018-04-30 16:15:59 +10:00
Andrew Nicols 951c886951 Merge branch 'MDL-62235-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-30 14:01:28 +08:00
Frédéric Massart a4c23f2b13 MDL-62235 core_files: Implement privacy API 2018-04-30 13:46:09 +08:00
Andrew Nicols 647c7ec982 Merge branch 'MDL-62208-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-30 13:20:40 +08:00
Troy Williams 31ebe1ff67 MDL-61012 course: Allow extending class to set 2018-04-30 16:27:38 +12:00
Andrew Nicols aaf9b0db67 Merge branch 'MDL-62241-34-typehint' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-04-30 11:45:20 +08:00
Andrew Nicols 790a3c60de Merge branch 'MDL-61959-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-30 10:24:58 +08:00
Andrew Nicols ab58842db9 MDL-61308 mod_assign: Whitespace fix 2018-04-30 09:27:23 +08:00
Andrew Nicols 38c5451942 Merge branch 'wip-MDL-61308-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-30 09:19:48 +08:00
AMOS bot 1a3bdfd652 Automatically generated installer lang files 2018-04-30 00:06:29 +00:00
Frédéric Massart 5dcc3bca58 MDL-62236 core_webservice: Implement privacy API 2018-04-29 10:10:40 +08:00
David Mudrák 4e5e4d715b MDL-62241 privacy: Include the unit tests from the 3.3 branch
The tests do not actually do anything, they just make sure that the
method signature is correct on the given PHP version. They are mostly
relevant and useful on 3.3.
2018-04-27 15:23:04 +02:00
Eloy Lafuente (stronk7) 533e41f82e weekly release 3.4.2+ 2018-04-27 13:15:48 +02:00
Eloy Lafuente (stronk7) 24a171c5b9 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-04-27 13:15:41 +02:00
Eloy Lafuente (stronk7) 43be1507a1 MDL-61993 profilefield_checkbox: take rid of oracle reserved word 2018-04-27 10:42:57 +02:00
Frédéric Massart 7c772f449b MDL-61877 core_competency: Handle comments in privacy API 2018-04-27 11:30:30 +08:00
Frédéric Massart 72da93a9ea MDL-61877 core_competency: Implement privacy API 2018-04-27 11:30:30 +08:00
Frédéric Massart 802ab825ed MDL-62167 core_badges: Implement privacy API 2018-04-27 10:51:53 +08:00
Bas Brands 5c8bebc159 MDL-62172 Theme boostrapbase: align advanced checkbox in mform 2018-04-27 09:56:13 +08:00
Eloy Lafuente (stronk7) 1d5d122b27 Merge branch 'MDL-60882-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-04-27 01:38:45 +02:00
Eloy Lafuente (stronk7) 242797a9d8 Merge branch 'wip_MDL-62011_34_approval_of_course_request' of https://github.com/grabs/moodle into MOODLE_34_STABLE 2018-04-27 01:30:17 +02:00
Eloy Lafuente (stronk7) 734825bc6d Merge branch 'MDL-61993-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-27 01:01:14 +02:00
Eloy Lafuente (stronk7) bd087739c6 Merge branch 'MDL-61863-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-26 22:31:49 +02:00
Eloy Lafuente (stronk7) 28a7c5b677 Merge branch 'MDL-61715-34' of https://github.com/lethevinh/moodle into MOODLE_34_STABLE 2018-04-26 22:23:07 +02:00
Sara Arjona c7b3f78e25 MDL-61959 mod_scorm: Implement privacy API 2018-04-26 19:57:14 +02:00
Sara Arjona ec2474927f MDL-61959 scormreport_objectives: Implement privacy API 2018-04-26 19:57:13 +02:00
sarjona abb19f6cd1 MDL-61959 scormreport_interactions: Implement privacy API 2018-04-26 19:57:13 +02:00
Sara Arjona f95d1bd73a MDL-61959 scormreport_graphs: Implement privacy API 2018-04-26 19:57:13 +02:00
sarjona 3d791f1b6b MDL-61959 scormreport_basic: Implement privacy API 2018-04-26 19:57:12 +02:00
Juan Leyva 82482a0b65 MDL-62229 tool_mobile: Add missing supported module
The Workshop module it’s been supported since Moodle 3.4 so it
should’ve been included here.
2018-04-26 19:18:41 +02:00
Jun Pataleta 3b9f278a95 Merge branch 'MDL-61986_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-04-27 00:46:42 +08:00
Eloy Lafuente (stronk7) 6ca9bbd0e8 MDL-61986 mod_lesson: oracle order by clob fix 2018-04-26 18:31:40 +02:00
Eloy Lafuente (stronk7) 8e786a3a30 Merge branch 'MDL-62224_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-04-26 17:38:35 +02:00
Zig Tan 770045533a MDL-61693 core_calendar: Implemented privacy providers 2018-04-26 21:10:59 +08:00
Mark Nelson d45a552c02 MDL-62224 core_rss: implement correct provider 2018-04-26 20:16:59 +08:00
Kathrin Osswald 276350a9a6 MDL-61411 theme Boost: Close navigation on all items (on small screens) 2018-04-26 13:19:40 +02:00
Juan Leyva ae4963c300 MDL-61521 course: Add missing text formatting for category name 2018-04-26 12:38:10 +02:00
Juan Leyva 27a3313539 MDL-60882 mod_choice: Avoid teacher delete all responses
Teachers should be able to delete all responses but when indicating the
response ids.
When the response ids are not passed, only their own responses should
be deleted (as the function documentation said).
2018-04-26 10:26:50 +02:00
Andrew Nicols 45742c52a4 Merge branch 'MDL-61947-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-26 14:52:36 +08:00
Jun Pataleta 4ab9b1a502 Merge branch 'MDL-62188-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-26 14:49:44 +08:00
Adrian Greeve fa83660e35 MDL-61308 assign_feedback: Privacy code for user rights. 2018-04-26 14:24:34 +08:00
Adrian Greeve 15c5a72024 MDL-61308 assign_submission: Privacy code for user rights. 2018-04-26 14:24:24 +08:00
Adrian Greeve 63f3fd97b0 MDL-61308 mod_assign: Adding privacy classes. 2018-04-26 14:24:13 +08:00
Sara Arjona 49f37c4573 MDL-62188 enrol: Avoid ignoring the Recover grades default setting 2018-04-26 08:14:08 +02:00
Frédéric Massart 7029b4eff4 MDL-62208 core_fileconverter: Implement privacy API 2018-04-26 12:55:16 +08:00
Zig Tan 730f7da8eb MDL-61947 core_my: Implemented privacy providers 2018-04-26 12:50:55 +08:00
Mihail Geshoski 389fed5720 MDL-61993 profilefield_checkbox: Add privacy files and unit tests 2018-04-26 10:30:25 +08:00
Eloy Lafuente (stronk7) 9967972257 Merge branch 'MDL-61979-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-26 03:09:36 +02:00
Eloy Lafuente (stronk7) 698391ffe4 Merge branch 'MDL-61998-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-26 02:40:05 +02:00
Andrew Nicols bae1a479aa Merge branch 'MDL-61944-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-26 08:35:10 +08:00
Eloy Lafuente (stronk7) 365697c942 Merge branch 'MDL-62181-34-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-04-25 19:09:46 +02:00
David Monllao a61fab9c50 Merge branch 'MDL-62175-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-04-25 17:37:33 +02:00
David Monllao 4fbacc4a5e Merge branch 'MDL-61986-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-25 16:32:49 +02:00
cescobedo 0ffb2b4156 MDL-61944 tool_mobile: Implement Privacy API 2018-04-25 15:35:52 +02:00
AMOS bot 9d3b7bb04c Automatically generated installer lang files 2018-04-25 00:06:34 +00:00
David Mudrák b712af05fb MDL-62181 lang: Fix changed admin node title in behat scenario 2018-04-24 22:08:27 +02:00
Helen Foster 7cc490a3dd MDL-62181 lang: Merge English strings from the en_fix language pack
Significant string changes:

* sitepolicies, core_admin - 'Site policies' changed to 'Site security
  settings'
* sitepolicy_help and sitepolicyguest_help, core_admin - setting will
  only have an effect if the site policy handler is set to default
* sitepolicyhandler_desc,core_admin - improved wording
* pathtodot_help, core_admin - Windows and Mac paths
* debugstringids_desc, core_admin - improved explanation
2018-04-24 22:08:27 +02:00
Eloy Lafuente (stronk7) 66df2222f5 weekly release 3.4.2+ 2018-04-24 18:57:22 +02:00
Eloy Lafuente (stronk7) 373a574f62 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-04-24 18:57:20 +02:00
Juan Leyva c15b72b415 MDL-62175 auth_email: Fix site policy enabled check 2018-04-24 15:06:56 +02:00
vinhle b7236f9fdb MDL-61715 question: qbank_chooser is not intelligent about headings 2018-04-24 16:09:49 +07:00
Zig Tan 376212f1b9 MDL-61863 core_notes: Implemented privacy providers 2018-04-24 12:08:07 +08:00
Jun Pataleta b22517e334 Merge branch 'MDL-62079-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-24 11:56:10 +08:00
Andrew Nicols 3fd4a77fde MDL-62079 core_filters: Implement null provider 2018-04-24 11:49:04 +08:00
Mark Nelson 26ec8c1b67 MDL-62140 core_privacy: only reset tests when necessary 2018-04-24 11:16:46 +08:00
Frédéric Massart 7a88d29380 MDL-61984 mod_chat: Do not assume context passed is one of chat 2018-04-24 11:04:08 +08:00
Andrew Nicols 3df1711e6d MDL-62140 core_privacy: Improve unit test 2018-04-24 10:19:03 +08:00
Andrew Nicols 14d714b69c Merge branch 'MDL-62140_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-04-24 10:18:44 +08:00
Jun Pataleta 72c09c0e3f Merge branch 'MDL-61764_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-04-24 09:54:08 +08:00
Jun Pataleta d52682b09d Merge branch 'MDL-61882-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-24 09:38:14 +08:00
Andrew Nicols 61506589a6 Merge branch 'MDL-61984-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-24 09:34:44 +08:00
Andrew Nicols b124c934ee Merge branch 'MDL-61995-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-24 08:16:07 +08:00
AMOS bot 65b7b6cac5 Automatically generated installer lang files 2018-04-24 00:06:32 +00:00
cescobedo 52797db36b MDL-61882 auth_oauth2: Implement Privacy API 2018-04-23 17:40:03 +02:00
David Monllao 63869e39b5 Merge branch 'MDL-61915-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-23 16:26:18 +02:00
David Monllao 9053adb675 Merge branch 'MDL-62042-m34' of https://github.com/sammarshallou/moodle into MOODLE_34_STABLE 2018-04-23 16:08:13 +02:00
cescobedo d73cb53055 MDL-61915 enrol: Add privacy implementation for all enrol plugins
None of the Enrol plugins (except lti and paypal) have any user preference or database table.
They all implement the null provider.
2018-04-23 14:24:36 +02:00
Mark Nelson 9b6bf24f7f MDL-62140 core_privacy: add helper functions to add system/user context 2018-04-23 20:06:32 +08:00
Andrew Nicols eb8d5f283e Merge branch 'wip-MDL-61759-34' of https://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-04-23 18:32:20 +08:00
David Monllao ba2d1550a9 Merge branch 'MDL-62078-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-23 12:08:58 +02:00
David Monllao ace94710be Merge branch 'MDL-62047-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-23 11:59:32 +02:00
David Monllao 75af50bb8d Merge branch 'MDL-61891-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-23 11:55:33 +02:00
Sara Arjona 54ccd521a9 MDL-61998 cohort: Implement privacy API 2018-04-23 11:41:31 +02:00
Zig Tan 9a4404e071 MDL-61995 tool_assignmentupgrade: Implemented privacy providers 2018-04-23 16:49:29 +08:00
Marina Glancy afc0076cf2 MDL-61759 admin: non-existing site policy handler means no policy 2018-04-23 16:46:46 +08:00
Andrew Nicols bcefe75402 Merge branch 'MDL-62055-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-23 16:04:01 +08:00
Jun Pataleta 2e49807d50 Merge branch 'MDL-62049_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-04-23 13:54:31 +08:00
Marina Glancy dbdae3d343 MDL-62138 core: remove core_register and core_publish
These components have no classes and no strings and have no purspose. Component core_hub is responsible
for storing data, defining classes and strings for site registration and course publishing

This also reverts MDL-61945
2018-04-23 13:21:15 +08:00
Jun Pataleta 06f237aa68 Merge branch 'wip-MDL-61966-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-23 13:11:22 +08:00
Mark Nelson 1062a75b04 MDL-62049 core_privacy: use correct lang string for date 2018-04-23 13:03:35 +08:00
Andrew Nicols 84f092a44b MDL-61891 core_portfolio: Use manager method caller 2018-04-23 10:09:13 +08:00
Andrew Nicols 35e39d8b5d MDL-61891 core_plagiarism: Use manager method caller 2018-04-23 10:09:13 +08:00
Andrew Nicols 7fe24b695c MDL-61891 privacy: Add helper to call methods on interfaces 2018-04-23 10:09:13 +08:00
Andrew Nicols a7ffba763d Merge branch 'MDL-61759-34-nonexistinghandler' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-04-22 21:05:55 +08:00
Frédéric Massart 973457da4c MDL-61986 mod_lesson: Implement privacy API 2018-04-22 17:31:30 +08:00
sarjona 8a18c88a60 MDL-62078 rss: Link to core_userkey in the Privacy API implementation 2018-04-22 09:04:53 +02:00
Andreas Grabs ab8eb0a56e MDL-62011 course: Approval of a course request fails 2018-04-21 20:55:46 +02:00
AMOS bot 95368281bc Automatically generated installer lang files 2018-04-21 01:02:39 +00:00
Eloy Lafuente (stronk7) f234880958 weekly release 3.4.2+ 2018-04-20 23:52:15 +02:00
Eloy Lafuente (stronk7) d1387ac765 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-04-20 23:52:13 +02:00
sam marshall 5262ae8faf MDL-62042 core_search: Unicode non-characters cause indexing problems
Unicode characters such as U+FFEF can be entered into Moodle data and
cause indexing failures. This change strips them out of search fields.
2018-04-20 13:17:20 +01:00
Sara Arjona aae70e19ae MDL-62055 imscp: Implement privacy API 2018-04-20 08:58:18 +02:00
Adrian Greeve 19f06a1877 MDL-61966 block_myoverview: Update to provider for user preferences. 2018-04-20 14:52:45 +08:00
Mark Nelson fbf766ba01 MDL-61764 message_popup: implement privacy provider 2018-04-20 12:06:06 +08:00
Jun Pataleta d4db4a869f Merge branch 'MDL-62048_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-04-20 11:53:29 +08:00
Andrew Nicols 627299b796 Merge branch 'MDL-61892-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-20 11:49:31 +08:00
Zig Tan 6e102f2c6d MDL-61892 admin/tools: Implement null privacy providers 2018-04-20 11:41:58 +08:00
Andrew Nicols fb639d95b5 Merge branch 'wip-MDL-62035-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-20 11:33:59 +08:00
Adrian Greeve af90bd0b7e MDL-62035 core_blog: Update to blog with comments.
This makes blog use the updated delete methods in the
comments provider.
2018-04-20 10:46:07 +08:00
Adrian Greeve b598bd2f79 MDL-62035 core_comment: Update to deletion methods.
Also clarification with the export method to clarify that it
is only for one context.
2018-04-20 10:45:56 +08:00
Andrew Nicols c8cf913c76 Merge branch 'MDL-62003-34-privacyfiles' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-04-20 10:34:35 +08:00
Jun Pataleta 88639eefc4 Merge branch 'MDL-61848-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-20 09:20:04 +08:00
Eloy Lafuente (stronk7) 444bdb189a Merge branch 'MDL-61836-34-order' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-20 03:04:24 +02:00
Andrew Nicols 96f5327b3d MDL-61836 blog: Fix random order failures 2018-04-20 08:49:00 +08:00
Łukasz Szeremeta f505863218 MDL-61827 auth: Change Facebook Graph API v2.8 to v.2.12 in OAuth2
Use v2.12 Facebook Graph API instead of v2.8
2018-04-20 02:33:41 +02:00
Eloy Lafuente (stronk7) f6dc9263f8 Merge branch 'MDL-61836-34-fix' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-20 02:28:38 +02:00
Eloy Lafuente (stronk7) 09577f1ec8 Merge branch 'MDL-61991-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-04-20 02:24:54 +02:00
Andrew Nicols 92b4e5956e MDL-61836 comment: Add missing require 2018-04-20 08:17:46 +08:00
Eloy Lafuente (stronk7) 1de7010e47 Merge branch 'MDL-61975-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-20 02:17:42 +02:00
Eloy Lafuente (stronk7) 7bf7bee56c Merge branch 'MDL-61348-take2_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-04-20 02:02:02 +02:00
cescobedo 95bc9fa631 MDL-61848 auth_manual: Implement Privacy API 2018-04-20 00:14:20 +02:00
Andrew Nicols a1656afa41 Merge branch 'MDL-61836-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-19 20:36:47 +08:00
Frédéric Massart df77539994 MDL-61836 core_blog: Prevent randomness in comments order 2018-04-19 16:06:06 +08:00
Mark Nelson 04ef818023 MDL-62025 mod_choice: add missing join on modules table 2018-04-19 15:51:07 +08:00
Andrew Nicols 1444ea075e MDL-62047 core_userkey: Add privacy implementation 2018-04-19 15:30:40 +08:00
Andrew Nicols 457f4b7551 MDL-62047 core_userkey: Define component path 2018-04-19 15:30:40 +08:00
Andrew Nicols f02e11d668 Merge branch 'MDL-61568-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-19 15:01:08 +08:00
Andrew Nicols a1eef605f0 Merge branch 'MDL-61970-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-19 14:53:23 +08:00
Andrew Nicols fe3ece78ea Merge branch 'MDL-61969-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-19 14:48:49 +08:00
Jun Pataleta 8905f55508 Merge branch 'MDL-61878-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-19 14:40:03 +08:00
Zig Tan 89feef08e8 MDL-61568 repository_flickr: Fix oauth secret export 2018-04-19 14:37:55 +08:00
Mihail Geshoski 96a257f7a9 MDL-61878 fileconverter_googledrive: Add privacy files and unit tests 2018-04-19 13:17:06 +08:00
Frédéric Massart 45b3665c00 MDL-61970 mod_survey: Do not assume context passed is one of survey 2018-04-19 13:11:43 +08:00
Mark Nelson 509c176f0a MDL-62048 core_privacy: extend test to ensure table exists 2018-04-19 13:03:53 +08:00
Andrew Nicols 8788ad4f14 Merge branch 'MDL-61945-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-19 11:55:26 +08:00
Andrew Nicols 64466bd2b8 Merge branch 'MDL-61948-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-19 11:47:16 +08:00
Andrew Nicols 1d1baa54f0 Merge branch 'MDL-61836-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-19 11:20:15 +08:00
Andrew Nicols 4376919fee Merge branch 'MDL-61970-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-19 11:13:15 +08:00
AMOS bot 6de72ccebd Automatically generated installer lang files 2018-04-19 00:06:20 +00:00
David Monllao 5011a166b8 Merge branch 'MDL-61716-34' of git://github.com/mastnym/moodle into MOODLE_34_STABLE 2018-04-18 17:40:21 +02:00
David Monllao 6e6edbe001 MDL-61958 rss: Add rss test suite 2018-04-18 17:38:23 +02:00
David Monllao 6728b43113 Merge branch 'MDL-61958-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-18 17:22:31 +02:00
David Mudrák 34858987ca MDL-62003 privacy: Fix reported coding style violation 2018-04-18 17:11:10 +02:00
David Mudrák c6f9dce2a0 MDL-62003 privacy: Consistently export files into _files folder
There were two major issues with the previous implementation:

* The exported folder name was localised so it was "Files" or "Soubory"
  etc depending on the current language. Yet URLs referring to the files
  in that folder were always rewritten with hard-coded English "files".
* Files from all fileareas and itemids were all exported to a single
  target directory. So if there were two files with the same name being
  exported from multiple areas (such as submission_content and
  submission_attachment in the workshop module), one would overwrite
  another.

The patch addresses these issues as follows:

* To unify the folder name and also to minimise the risk of conflict
  with a subcontext folder, we now always export stored files under
  "_files" folder.
* Under that folder, there is a subdirectory with the area name and then
  eventually another subdirectory with non-zero itemid. And there
  finally the stored_file is exported to under its own file path.
2018-04-18 17:11:10 +02:00
Martin Mastny 06d3bab902 MDL-61716 auth_oauth2: field names in mappings allow all characters 2018-04-18 16:54:56 +02:00
David Monllao 0eb5643936 Merge branch 'MDL-61796-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-04-18 15:20:52 +02:00
David Monllao 4d53f252e3 Merge branch 'MDL-38099-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-04-18 14:14:46 +02:00
Sara Arjona 775a804c68 MDL-61958 core_rss: Implement privacy API 2018-04-18 13:39:21 +02:00
Sara Arjona ac183832bc MDL-61958 rss: Create core_rss lang file and move rss string
At the moment will only be copied one of the rss strings ('rss').
The issue MDL-61997 has been created to move the rest of the core_rss lang
strings from moodle.php to rss.php.

AMOS BEGIN
 CPY [rss,core],[rss,core_rss]
AMOS END
2018-04-18 13:39:21 +02:00
Sara Arjona 9d0f4315f0 MDL-61958 lang: Move privatefilesmanage string to correct place 2018-04-18 13:39:20 +02:00
Eloy Lafuente (stronk7) 524312d1ef Merge branch 'MDL-61621_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-04-18 12:58:27 +02:00
Jun Pataleta 81bd6817b9 Merge branch 'MDL-62025_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-04-18 16:26:01 +08:00
Jun Pataleta 99b227c604 Merge branch 'MDL-61928_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-04-18 16:00:37 +08:00
Mark Nelson ecc63154f9 MDL-62025 mod_choice: only export in the CONTEXT_MODULE context 2018-04-18 15:11:58 +08:00
Frédéric Massart 642389a9a9 MDL-61970 mod_survey: Implement privacy API 2018-04-18 14:56:46 +08:00
Andrew Nicols 8cac59ef84 Merge branch 'MDL-61568-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-18 14:25:25 +08:00
Mihail Geshoski bb9dcb7479 MDL-61969 datapreset_imagegallery: Implement null privacy provider 2018-04-18 13:50:46 +08:00
Zig Tan 3b1e2eb6f4 MDL-61568 core_repository: Implement privacy providers 2018-04-18 13:44:21 +08:00
Mihail Geshoski 1692fae8c0 MDL-61948 core_media: Implement null privacy provider 2018-04-18 13:44:21 +08:00
Zig Tan 7d8b9d454e MDL-61568 repository_onedrive: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan f4b2263a56 MDL-61568 repository_youtube: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan db318336de MDL-61568 repository_wikimedia: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan e072d0eec4 MDL-61568 repository_picasa: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan 3d8caa7ea5 MDL-61568 repository_merlot: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan 4984f4bdac MDL-61568 repository_googledocs: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan b2eccf48da MDL-61568 repository_flickr_public: Implement privacy providers 2018-04-18 13:44:21 +08:00
Zig Tan 98daec96f4 MDL-61568 repository_flickr: Implement privacy providers 2018-04-18 13:44:20 +08:00
Zig Tan b8fb5e361a MDL-61568 repository_dropbox: Implement privacy providers 2018-04-18 13:44:20 +08:00
Zig Tan 4917cc34e7 MDL-61568 repository_boxnet: Implement privacy providers 2018-04-18 13:44:20 +08:00
Zig Tan 66208cc750 MDL-61568 repository_webdav: Implement null privacy provider 2018-04-18 13:44:20 +08:00
Zig Tan 9df4cecb27 MDL-61568 repository_user: Implement null privacy provider 2018-04-18 13:44:20 +08:00
Zig Tan 8338bf6593 MDL-61568 repository_url: Implement null privacy provider 2018-04-18 13:44:20 +08:00
Zig Tan 1c86c7ddc1 MDL-61568 repository_upload: Implement null privacy provider 2018-04-18 13:44:20 +08:00
Zig Tan ec0dae6909 MDL-61568 repository_skydrive: Implement null privacy provider 2018-04-18 13:44:20 +08:00
Zig Tan 9556d7bb2b MDL-61568 repository_s3: Implement null privacy provider 2018-04-18 13:44:20 +08:00
Zig Tan 7eb62206da MDL-61568 repository_recent: Implement null privacy provider 2018-04-18 13:44:19 +08:00
Zig Tan d4b288aa9f MDL-61568 repository_local: Implement null privacy provider 2018-04-18 13:44:19 +08:00
Zig Tan 18b5d648d3 MDL-61568 repository_filesystem: Implement null privacy provider 2018-04-18 13:44:19 +08:00
Zig Tan 7fcec033b0 MDL-61568 repository_equella: Implement null privacy provider 2018-04-18 13:44:19 +08:00
Zig Tan f1e5ab7715 MDL-61568 repository_coursefiles: Implement null privacy provider 2018-04-18 13:44:19 +08:00
Zig Tan ece49dae92 MDL-61568 repository_areafiles: Implement null privacy provider 2018-04-18 13:44:19 +08:00
Jun Pataleta 8e7f7d2e50 Merge branch 'MDL-61520-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-04-18 13:28:22 +08:00
Andrew Nicols 56909e7f80 Merge branch 'MDL-61957-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-18 13:09:27 +08:00
Zig Tan 4c58569211 MDL-61979 tool_cohortroles: Implemented privacy providers 2018-04-18 10:50:36 +08:00
Jun Pataleta 3da0292df5 Merge branch 'MDL-61950-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2018-04-18 09:46:48 +08:00
Eloy Lafuente (stronk7) 4663dc19f2 Merge branch 'm34_MDL-59857' of https://github.com/danmarsden/moodle into MOODLE_34_STABLE 2018-04-18 03:07:45 +02:00
AMOS bot 1971a6b958 Automatically generated installer lang files 2018-04-18 00:07:59 +00:00
Luca Bösch 3515c76f92 MDL-61796 themes: In Clean, normalize filter labels font size.
Actually, in every theme not overriding the template.
2018-04-17 22:43:50 +02:00
Luca Bösch fb795d0177 MDL-61991 theme_boost: Question correctness displayed as label. 2018-04-17 22:39:54 +02:00
Luca Bösch 868681e9ba MDL-38099 comments: year in comments date 2018-04-17 22:39:01 +02:00
Eloy Lafuente (stronk7) 9a6b854e5c weekly release 3.4.2+ 2018-04-17 19:54:42 +02:00
Eloy Lafuente (stronk7) 397bd9aa3c Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-04-17 19:54:40 +02:00
Sara Arjona 54d35aec03 MDL-61957 gradereport_user: Implement privacy API 2018-04-17 14:34:20 +02:00
Sara Arjona 7b15e26ef7 MDL-61957 gradereport_singleview: Implement privacy API 2018-04-17 14:34:20 +02:00
Sara Arjona c2ea064a30 MDL-61957 gradereport_overview: Implement privacy API 2018-04-17 14:34:20 +02:00
Sara Arjona 7b585ddb84 MDL-61957 gradereport_outcomes: Implement privacy API 2018-04-17 14:34:19 +02:00
Sara Arjona a991d5b9f4 MDL-61957 gradereport_history: Implement privacy API 2018-04-17 14:34:19 +02:00
Sara Arjona 1ab6c6caef MDL-61957 gradereport_grader: Implement privacy API 2018-04-17 14:34:19 +02:00
Frédéric Massart 24abced8a6 MDL-61984 mod_chat: Implement privacy API 2018-04-17 15:34:16 +08:00
Andrew Nicols d2b9bbf551 MDL-61663 phpunit: Add portfolio to the testsuite list 2018-04-17 14:44:43 +08:00
cescobedo 14bdc702a5 MDL-61945 core_register: Implement Privacy API 2018-04-17 08:25:27 +02:00
Frédéric Massart fd8a0e5498 MDL-61862 mod_feedback: Tweak query to support UNION on TEXT fields
Thanks Oracle.
2018-04-17 12:09:51 +08:00
Andrew Nicols ca91ebf33e Merge branch 'wip-MDL-61663-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-17 11:46:32 +08:00
Andrew Nicols 8df10e8a28 Merge branch 'MDL-61977-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-17 11:43:07 +08:00
Adrian Greeve 6292041827 MDL-61663 portfolio: Update to the external system link names.
Changed the name of the link to something less like an English
string for each of the portfolios.
2018-04-17 11:41:38 +08:00
Andrew Nicols cc53b1773a Merge branch 'MDL-61980-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-17 11:35:01 +08:00
Andrew Nicols 708d156131 Merge branch 'MDL-61916-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-17 11:18:43 +08:00
Andrew Nicols 1266d56c57 Merge branch 'MDL-61918-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-17 11:12:55 +08:00
Andrew Nicols c4c73a3b44 Merge branch 'MDL-61903-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-17 11:10:16 +08:00
Mihail Geshoski 24a051e949 MDL-61903 webservice: Implement null privacy provider
Implement null privacy provider to rest, soap and xmlrpc webservice plugins.
2018-04-17 09:20:35 +08:00
AMOS bot 1fc5fe1ddd Automatically generated installer lang files 2018-04-17 00:07:17 +00:00
Dan Marsden e819de5611 MDL-59857 mod_scorm: use valid length for grade type field. 2018-04-17 08:36:46 +12:00
Jun Pataleta 0cc1957ddd Merge branch 'MDL-61862-34' of git://github.com/FMCorz/moodle into MOODLE_34_STABLE 2018-04-16 23:30:28 +08:00
Eloy Lafuente (stronk7) 953a4575d7 MDL-61819 editor: add testsuite to phpunit.xml 2018-04-16 16:38:35 +02:00
David Monllao ed94efe520 Merge branch 'MDL-61819-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-16 16:15:01 +02:00
Andrew Nicols 8c9880c2ba MDL-61819 core_editor: Implement core provider 2018-04-16 21:55:35 +08:00
Andrew Nicols 8f52e5f0da MDL-61819 editor_atto: Implement null provider 2018-04-16 21:55:35 +08:00
Andrew Nicols b4d758c6a7 MDL-61819 editor: Implement editor null providers 2018-04-16 21:55:34 +08:00
Frédéric Massart 0de5067c23 MDL-61862 mod_feedback: Implement core_privacy API 2018-04-16 18:45:56 +08:00
David Monllao 1f52bff88a Merge branch 'MDL-61741-34-paypal' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-04-16 10:58:34 +02:00
David Monllao e0c45f30a8 Merge branch 'wip-MDL-61808-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-16 10:03:57 +02:00
Jun Pataleta 6b2ac967a8 Merge branch 'MDL-61708-MOODLE34-lti-fullnamedisplay' of https://github.com/wjroes/moodle into MOODLE_34_STABLE 2018-04-16 15:29:31 +08:00
Jun Pataleta ce1bde9502 Merge branch 'MDL-61974-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-16 13:16:54 +08:00
Andrew Nicols 28780bdb62 MDL-61974 privacy: Rewrite the content writer storage 2018-04-16 11:12:37 +08:00
Andrew Nicols 9959542265 Merge branch 'MDL-61952-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-16 10:51:48 +08:00
Andrew Nicols a7713fd8eb Merge branch 'MDL-61954-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-16 10:47:02 +08:00
Andrew Nicols bff5ccf474 Merge branch 'MDL-61902-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-16 10:21:38 +08:00
Mihail Geshoski 9d1d7caf54 MDL-61918 assignment: Implement null privacy provider
Implement null privacy provider to offline, online, upload and uploadsingle assignment plugins.
2018-04-16 10:02:39 +08:00
Mihail Geshoski ee7c1b3a24 MDL-61902 media: Implement null privacy provider 2018-04-16 09:47:51 +08:00
AMOS bot 8c43f4cc9f Automatically generated installer lang files 2018-04-16 00:07:18 +00:00
Adrian Greeve 496c5f57f6 MDL-61808 tool_monitor: Implemented privacy classes.
This plugin is now compatible with the new privacy system.
2018-04-14 10:50:00 +08:00
AMOS bot 966acf7fc5 Automatically generated installer lang files 2018-04-14 00:08:01 +00:00
Mihail Geshoski 4548bff23b MDL-61980 booktool: Implement null privacy provider
Implement null privacy provider into booktool_exportimscp, booktool_importhtml, booktool_print plugin.
2018-04-13 16:18:23 +08:00
David Mudrák 0c24851679 MDL-61759 admin: Fix notice if attempting use nonexisting policy handler
The list of all known handlers may not contain the configured value,
raising the PHP undefined index notice.
2018-04-13 10:00:33 +02:00
Jake Dallimore f98c0bc576 MDL-61663 portfolio_picasa: add privacy provider implementation 2018-04-13 14:48:54 +08:00
Jake Dallimore fa49cdeb8a MDL-61663 portfolio_googledocs: add privacy provider implementation 2018-04-13 14:48:54 +08:00
Jake Dallimore 634830af0b MDL-61663 portfolio_flickr: add privacy provider implementation 2018-04-13 14:48:54 +08:00
Jake Dallimore 77f4c014b4 MDL-61663 portfolio_download: add privacy provider implementation 2018-04-13 14:48:54 +08:00
Jake Dallimore 3b8e4fb5de MDL-61663 portfolio_boxnet: add privacy provider implementation 2018-04-13 14:48:53 +08:00
Jake Dallimore c321bdd891 MDL-61663 portfolio_mahara: add privacy provider implementation 2018-04-13 14:48:53 +08:00
Jake Dallimore 77430d203d MDL-61663 core_portfolio: add subsystem privacy provider
Added provider for portfolio plugins, and legacy polyfill for plugins.
2018-04-13 14:48:53 +08:00
Zig Tan 69693630a4 MDL-61977 tool_profiling: Implemented null privacy provider 2018-04-13 14:39:09 +08:00
Zig Tan 0e16e180df MDL-61975 tool_recyclebin: Implemented null privacy provider 2018-04-13 14:00:48 +08:00
Frédéric Massart 2cd0309d90 MDL-61836 core_blog: Implement privacy API 2018-04-13 13:30:13 +08:00
AMOS bot 52a844087a Automatically generated installer lang files 2018-04-13 00:07:27 +00:00
David Monllao 109eb1124c weekly release 3.4.2+ 2018-04-12 14:38:25 +02:00
David Monllao 5c1004b8a3 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-04-12 14:38:24 +02:00
Sara Arjona 5309e7f63d MDL-61954 gradeimport_xml: Implement privacy API 2018-04-12 09:54:12 +02:00
Sara Arjona 686e91d5c0 MDL-61954 gradeimport_direct: Implement privacy API 2018-04-12 09:54:12 +02:00
Sara Arjona 1355912aa8 MDL-61954 gradeimport_csv: Implement privacy API 2018-04-12 09:54:12 +02:00
Sara Arjona b9aa614831 MDL-61952 gradeexport_xml: Implement privacy API 2018-04-12 08:41:56 +02:00
Sara Arjona 1e803c595a MDL-61952 gradeexport_xls: Implement privacy API 2018-04-12 08:41:56 +02:00
Sara Arjona c52427e1b8 MDL-61952 gradeexport_txt: Implement privacy API 2018-04-12 08:41:56 +02:00
Sara Arjona 33b62aab65 MDL-61952 gradeexport_ods: Implement privacy API 2018-04-12 08:41:55 +02:00
Ryan Wyllie 0961388a0a MDL-61950 question: include random questions in statistics calculator 2018-04-12 05:39:37 +00:00
nlnrose 92c327fccd MDL-61802 Admin: Corrected typo in test file.
The file privcacy_provider_test.php was supposed to be
privacy_provider_test.php.
2018-04-12 00:23:48 +02:00
Eloy Lafuente (stronk7) fe7fbf24b9 Merge branch 'MDL-61828-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-12 00:14:41 +02:00
Eloy Lafuente (stronk7) 2998e41620 Merge branch 'MDL-61895-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-11 23:58:02 +02:00
Eloy Lafuente (stronk7) 89e4561e94 Merge branch 'MDL-61896-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-11 23:54:55 +02:00
Eloy Lafuente (stronk7) 92c7a3b3c5 Merge branch 'MDL-61859-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-04-11 22:28:46 +02:00
Eloy Lafuente (stronk7) f33ef72a29 Merge branch 'MDL-61743_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-04-11 19:23:22 +02:00
David Monllao db7a1199cf Merge branch 'MDL-61873-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-11 18:42:00 +02:00
David Monllao 6a670f942c Merge branch 'MDL-61581-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-04-11 18:07:56 +02:00
Jake Dallimore 4d5ae78760 Merge branch 'MDL-59691-34' of https://github.com/lucisgit/moodle into MOODLE_34_STABLE 2018-04-11 16:01:26 +08:00
David Monllao 02ca3a12ce MDL-61743 message: Add context level checking 2018-04-11 08:57:51 +02:00
David Monllao fc2238cfec MDL-61743 core_privacy: Add context level checks for all users deletion 2018-04-11 08:57:50 +02:00
Andrew Nicols ab30639634 MDL-61743 core_privacy: Reduce context specificty
Deletion is called for a context against all components, not just
modules.
2018-04-11 08:57:25 +02:00
Simey Lameze 666b12c1e6 MDL-61520 quiz: fix references for xhtml on stats report 2018-04-11 10:49:31 +08:00
Andrew Nicols 53f38ff0d9 Merge branch 'MDL-61881-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-11 10:15:05 +08:00
Zig Tan 4030001cf8 MDL-61881 report: fix privacy lang strings 2018-04-11 10:07:05 +08:00
Zig Tan 184f7d3a85 MDL-61881 report_usersessions: Implement null privacy provider 2018-04-11 10:07:05 +08:00
Zig Tan 7409199411 MDL-61881 report_stats: Implement null privacy provider 2018-04-11 10:07:05 +08:00
Zig Tan bc421d6d46 MDL-61881 report_security: Implement null privacy provider 2018-04-11 10:07:05 +08:00
Zig Tan 850bbe3b97 MDL-61881 report_questioninstances: Implement null privacy provider 2018-04-11 10:07:05 +08:00
Zig Tan e95b8a7c7b MDL-61881 report_performance: Implement null privacy provider 2018-04-11 10:07:05 +08:00
Zig Tan c98c41712d MDL-61881 report_participation: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan df5f0c8f93 MDL-61881 report_outline: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan b05ffcfc57 MDL-61881 report_loglive: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan 7015547371 MDL-61881 report_log: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan 70242a8f17 MDL-61881 report_insights: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan 6b39e44679 MDL-61881 report_eventlist: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan bb49184116 MDL-61881 report_courseoverview: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan 07dd873f63 MDL-61881 report_configlog: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan 00ab1f6e58 MDL-61881 report_competency: Implement null privacy provider 2018-04-11 10:07:04 +08:00
Zig Tan 8f2e5829ce MDL-61881 report_backup: Implement null privacy provider 2018-04-11 10:07:03 +08:00
Andrew Nicols d564f67b2d Merge branch 'MDL-61731-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-11 09:12:28 +08:00
Mihail Geshoski db6aacf45e MDL-61731 message_email: Add privacy files and unit tests 2018-04-11 09:04:48 +08:00
Andrew Nicols b808bf5374 Merge branch 'MDL-61867-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-11 08:52:16 +08:00
AMOS bot 2fbd688d8f Automatically generated installer lang files 2018-04-11 00:07:21 +00:00
Eloy Lafuente (stronk7) d39ae0084a Merge branch 'MDL-61824-m34' of https://github.com/sammarshallou/moodle into MOODLE_34_STABLE 2018-04-11 01:07:01 +02:00
Eric Merrill f539686553 MDL-61913 restore: Protect against blocks that aren't being created 2018-04-11 00:52:00 +02:00
Tim Hunt fadee607e9 MDL-61928 formslib: shortforms should work with non-editable forms 2018-04-10 17:40:19 +01:00
Tim Hunt 199b34b5d0 MDL-61348 quiz reports: fix incorrect groups averages
the averages were wrong if a user had mulitple enrolments in a course,
which can happen with some enrolment plugins.
2018-04-10 17:12:04 +01:00
Eloy Lafuente (stronk7) 713a61f712 Merge branch 'wip-MDL-58697-34-assigngrading' of git://github.com/adamann2/moodle into MOODLE_34_STABLE 2018-04-10 15:53:59 +02:00
sam marshall 5a4cd49648 MDL-61824 core_search: Deleting restored context caused error
When restoring content, this adds it to a queue for indexing. If the
restored content was then deleted before the indexing takes place,
this caused an exception in the scheduled task.

This change makes it continue safely past missing contexts.
2018-04-10 13:07:57 +01:00
David Monllao dec44f9d39 Merge branch 'MDL-61838-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-10 13:44:36 +02:00
David Monllao 61bb1ebe33 Merge branch 'MDL-61843-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-10 13:42:50 +02:00
Eloy Lafuente (stronk7) 933ce256a6 MDL-61875 tests: Use existing component & support $CFG->admin 2018-04-10 13:14:01 +02:00
Eloy Lafuente (stronk7) 70348aa81e Merge branch 'MDL-61875-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-04-10 13:06:30 +02:00
David Monllao 5f1145b4ce Merge branch 'MDL-61846-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-10 09:00:08 +02:00
David Monllao 308435acb4 Merge branch 'MDL-61129-fix-accessibility-on-tables-mod_survey_Moodle-34' of https://github.com/guillalva06/moodle into MOODLE_34_STABLE 2018-04-10 07:59:09 +02:00
Andrew Nicols a8c579b4c5 Merge branch 'MDL-61795-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-10 10:42:10 +08:00
Mihail Geshoski 321a30e14f MDL-61795 block_rss_client: Add privacy files and unit tests 2018-04-10 09:37:38 +08:00
Jake Dallimore edadfa06cb MDL-61875 core_privacy: update the core_component_list in the manager 2018-04-10 08:51:00 +08:00
Jake Dallimore 21c438f24a MDL-61875 core_component: new method to get full components list 2018-04-10 08:50:58 +08:00
Eloy Lafuente (stronk7) 4d01802d31 Merge branch 'MDL-61860-34' of https://github.com/mackensen/moodle into MOODLE_34_STABLE 2018-04-10 01:01:07 +02:00
Eloy Lafuente (stronk7) 91513c6bd3 Merge branch 'MDL-60196_34' of https://github.com/mfabriczy/moodle into MOODLE_34_STABLE 2018-04-10 00:57:35 +02:00
cescobedo 623acad16b MDL-61916 format: Add privacy implementation for all format plugins
None of the Course format plugins have any user preference or database table.
They all implement the null provider.
2018-04-10 00:24:58 +02:00
Daniel Thies f62a247467 MDL-61476 mod_glossary: Check XML arrays exist 2018-04-09 23:45:58 +02:00
Daniel Thies 8071b5fc9e MDL-61476 mod_glossary: Support tags in entries export 2018-04-09 23:45:38 +02:00
Eloy Lafuente (stronk7) 6d044ed3d9 Merge branch 'MDL-61861-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-09 20:28:34 +02:00
Tony Butler 966f659277 MDL-59691 assignfeedback_editpdf: Allow comment placement to all edges
Plus a couple of extra usability improvements:
- Collapse comment during move to allow precise placement
- Change cursor style to indicate that dragging is possible
2018-04-09 16:56:08 +01:00
Tony Butler 00e98f2a8b MDL-59691 assignfeedback_editpdf: Allow comments to collapse to top-left
Forcing them to collapse to the bottom-left corner seems less natural
and effectively changes the location of existing comments from pre-3.3
2018-04-09 16:56:08 +01:00
Guillermo Alvarez ca9f979270 MDL-61129 survey: Add colgroup attribute at survey question tables 2018-04-09 10:32:43 -05:00
Andrew Nicols 6f1680569b Merge branch 'MDL-61829-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-09 15:28:37 +08:00
Andrew Nicols f647b94a75 Merge branch 'MDL-61736-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-04-09 15:25:48 +08:00
Sara Arjona b1f50cdf98 MDL-61736 user: Show correct status when enrol method is disabled
When disabling an enrolment method, the user status will be displayed
as "Not current" instead of "Active".
2018-04-09 08:47:12 +02:00
Zig Tan 26109431b5 MDL-61829 block_community: Implement privacy provider 2018-04-09 14:09:27 +08:00
Mihail Geshoski 36506f7354 MDL-61867 fileconverter_unoconv: Add privacy files 2018-04-09 11:44:48 +08:00
Helen Foster 60d78e5a11 MDL-61033 mod_quiz: Update lang string 2018-04-09 10:40:17 +08:00
Andrew Nicols 7569618528 Merge branch 'MDL-61033-34' of https://github.com/nashtechdev01/moodle into MOODLE_34_STABLE 2018-04-09 10:39:34 +08:00
Andrew Nicols f42a899268 MDL-61896 filter: Implement privacy API for all filters 2018-04-08 15:56:14 +08:00
Andrew Nicols 46612109ff MDL-61895 availability: Implement null provider for plugins 2018-04-08 14:22:16 +08:00
Andrew Nicols 5712717383 MDL-61861 privacy: Add unit tests to check all providers. 2018-04-08 14:13:22 +08:00
Andrew Nicols a00bc971d5 MDL-61861 core_tag: Correct langstring identifier 2018-04-08 14:13:22 +08:00
Andrew Nicols ec965d9e00 MDL-61828 core_privacy: Support proper nesting in test trees 2018-04-08 13:35:39 +08:00
Charles Fulton 507867b76d MDL-61860 auth: standardise config inclusion 2018-04-07 12:19:17 -04:00
cescobedo 935d2c9f29 MDL-61873 auth: Add privacy implementation for all auth plugins
None of the Auth plugins (except manual and oauth2) have any user preference or database table.
They all implement the null provider.
2018-04-07 11:26:51 +02:00
Luca Bösch 0023c0254f MDL-61581 lesson: style continue to last buttons 2018-04-06 16:43:00 +02:00
David Monllao 42770ce9a9 MDL-61621 blocks: New API function 2018-04-06 13:13:33 +02:00
Jake Dallimore 810e854153 MDL-61859 core_completion: fix unit tests expecting exceptions twice
We can't expectException twice in the same test, so split this out into
another test.
2018-04-06 17:31:38 +08:00
Mihail Geshoski bc7287eaf5 MDL-61846 dataformat: Add privacy implementation for all plugins 2018-04-06 09:25:53 +08:00
Mihail Geshoski 4dc61ed547 MDL-61843 report_completion: Add privacy files 2018-04-06 09:14:20 +08:00
Mihail Geshoski 2496cd7ffd MDL-61838 report_progress: Add privacy files 2018-04-06 09:00:52 +08:00
Eloy Lafuente (stronk7) 2d8ddc8239 weekly release 3.4.2+ 2018-04-05 15:38:15 +02:00
Eloy Lafuente (stronk7) d7174ce4e2 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-04-05 15:38:12 +02:00
Jake Dallimore 4fe8b57969 Merge branch 'MDL-61761-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-05 13:18:30 +08:00
Mihail Geshoski ed7d3f13b6 MDL-61761 message_jabber: Add privacy files and unit tests 2018-04-05 12:01:20 +08:00
Jake Dallimore 55653a2dac Merge branch 'wip-MDL-61163-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-04-05 10:37:15 +08:00
Andrew Nicols 4fe9879b14 Merge branch 'MDL-60726-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-04-05 08:39:18 +08:00
Eloy Lafuente (stronk7) 2f6c6c0026 Merge branch 'MDL-61818-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-05 00:53:10 +02:00
Rohith 551fa309a0 MDL-61746 PARAM_CLEANHTML: Fix documentation typos 2018-04-05 00:43:34 +02:00
Eloy Lafuente (stronk7) 476380749b Merge branch 'MDL-61673-fix-wrong-string-on-calendar-mustache_Moodle_34' of https://github.com/guillalva06/moodle into MOODLE_34_STABLE 2018-04-05 00:37:39 +02:00
Eloy Lafuente (stronk7) f143f75d91 Merge branch 'MDL-61781-34-fix' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-04-04 10:51:11 +02:00
Jun Pataleta 4ed6dd031a MDL-61781 admin_settings: Fix default settings value for docroot 2018-04-04 16:48:02 +08:00
Zig Tan f13c851d05 MDL-60726 assign: Fix assign submission confirmation alignment 2018-04-04 16:35:27 +08:00
Andrew Nicols 328c32c3db Merge branch 'MDL-61692-34-2' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-04-04 13:03:24 +08:00
Andrew Nicols 5a0251179a Merge branch 'wip-MDL-56635-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-04-04 11:32:22 +08:00
Andrew Nicols 450aa66dcd Merge branch 'MDL-61183-34' of git://github.com/farhan6318/moodle into MOODLE_34_STABLE 2018-04-04 11:02:00 +08:00
Farhan Karmali 2377be335a MDL-61183 user: Added total participants count on paricipants page 2018-04-04 07:59:17 +05:30
Jake Dallimore 9665640c24 MDL-61692 core_privacy: add privacyfields to link_ methods
Some subsystems are like conduits, passing data along to plugins which,
in turn, send the data externally. Only the component linking to (using)
the subsystem will know what data it is sending along to the eventual
external system, so should be able to specify this at the time of
linking. The same goes for plugintypes.
2018-04-04 10:06:04 +08:00
Andrew Nicols bd0ce23402 Merge branch 'MDL-61751-34-fix' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-04-04 09:11:39 +08:00
Jake Dallimore 82df7d0a4d MDL-61751 core_plagiarism: fix fatal error with privacy legacy polyfill 2018-04-04 08:59:12 +08:00
Eloy Lafuente (stronk7) b3c6973362 Merge branch 'MDL-61451-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-04-04 01:40:45 +02:00
Eloy Lafuente (stronk7) dc43213556 Merge branch 'MDL-61817-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-04 01:23:11 +02:00
Eloy Lafuente (stronk7) 5959911fff MDL-61751 core_plagiarism: add testsuite to phpunit.xml 2018-04-04 01:05:40 +02:00
Luca Bösch 90632e0763 MDL-61502 questions: add filter tests to gapselect question type. 2018-04-04 00:56:29 +02:00
Eloy Lafuente (stronk7) 2d621dc0ef Merge branch 'wip-MDL-61522-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-04-04 00:46:33 +02:00
Eloy Lafuente (stronk7) 9066f3bde6 Merge branch 'MDL-61525-34' of https://github.com/HuongNV13/moodle into MOODLE_34_STABLE 2018-04-04 00:44:40 +02:00
Eloy Lafuente (stronk7) e3529026a0 Merge branch 'MDL-61665-34' of https://github.com/iamandrew/moodle into MOODLE_34_STABLE 2018-04-04 00:39:31 +02:00
Eloy Lafuente (stronk7) 2f56d7d101 Merge branch 'MDL-61703-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-04 00:35:12 +02:00
Eloy Lafuente (stronk7) 15a84d14d5 Merge branch 'MDL-61751-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-04 00:23:55 +02:00
Eloy Lafuente (stronk7) c184fb81f3 Merge branch 'MDL-61781-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-04-03 23:46:40 +02:00
Eloy Lafuente (stronk7) 737f272b1e Merge branch 'MDL-61724-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-04-03 23:39:56 +02:00
Eloy Lafuente (stronk7) 89d622013b Merge branch 'MDL-60115-Book-cancel-button-redirect-bug-34' of https://github.com/Moodlers/moodle-1 into MOODLE_34_STABLE 2018-04-03 21:46:27 +02:00
Marcus Fabriczy 44d7ee0937 MDL-60196 core_course: Fix the display of custom LTI icons
Custom LTI icons attached to LTI tools did not display - a regression
caused by MDL-55796.

Change-Id: Ia7e3428755fae4a2b1bc31b3903574061a23ee9b
2018-04-03 20:34:47 +09:30
Jake Dallimore 12440c7f9d Merge branch 'wip-MDL-61815-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-03 17:53:39 +08:00
Eloy Lafuente (stronk7) df740a511b MDL-61629 message_airnotifier: whitespace fix 2018-04-03 11:48:51 +02:00
Jake Dallimore 334bea41ec Merge branch 'wip-MDL-61127-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-03 17:34:20 +08:00
Adrian Greeve fd3d62ca37 MDL-61127 filepicker: Selected repository now highlighted. 2018-04-03 16:43:21 +08:00
Adrian Greeve 3ad6fc7852 MDL-61127 filepicker: Added aria-selected attribute to repos.
The repository list in the file picker now as aria-selected
added to denote which repository is selected.
2018-04-03 16:43:10 +08:00
Andrew Nicols d61bbb5f37 Merge branch 'wip-MDL-61629-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-04-03 15:59:58 +08:00
Adrian Greeve e4a71a9a96 MDL-61629 message_airnotifier: Add privacy files and unit tests. 2018-04-03 15:29:46 +08:00
Andrew Nicols 51cd6d5f48 Merge branch 'MDL-61020-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-04-03 14:21:17 +08:00
Adrian Greeve 34a39ba884 MDL-61815 core_privacy: Fix for metadata types and new method.
Minor fix for subsystem_link and plugintype_link.
Addition of get_null_provider_reason in the manager class.
2018-04-03 13:05:11 +08:00
Eloy Lafuente (stronk7) fe9c70b9b5 Merge branch 'MDL-61689-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-03 01:17:26 +02:00
Eloy Lafuente (stronk7) 5d4d21a31a MDL-61223 course: keep some tests using old values (January 1st 1970) 2018-04-03 00:13:28 +02:00
Guillermo Alvarez a564495dcf MDL-61673 calendar: Replace wrong string on mustache template 2018-04-02 10:34:23 -05:00
Eloy Lafuente (stronk7) f070d262a1 MDL-61223 course: amend test setup to keep passing and covering case 2018-04-02 12:03:51 +02:00
Andrew Nicols 12d8c5a611 MDL-61223 course: Set default course start date 2018-04-02 12:03:46 +02:00
Eloy Lafuente (stronk7) 5251a11c59 Merge branch 'MDL-61801-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-04-02 11:04:39 +02:00
Andrew Nicols 522f199222 MDL-61817 tinymce: Add privacy implementation for all plugins
None of the TinyMCE plugins have any user preference or database table.
They all implement the null provider.
2018-04-02 13:51:40 +08:00
Andrew Nicols 1e70bd2b95 MDL-61818 antivirus: Implement core_privacy API 2018-04-02 13:47:45 +08:00
Michael Brown 2830aca413 MDL-60115 mod_book: Book Resource Cancel Button Redirect Bug
When the user creates a book but adds no chapters, hitting cancel on
 the chapter creation page would redirect you right back to the same
 page with no explanation. This solution redirects to the course page
 when canceling chapter creation when no chapters are present.
2018-04-02 04:09:35 +00:00
AMOS bot 8995a77306 Automatically generated installer lang files 2018-04-02 00:07:17 +00:00
Huong Nguyen 97e8019261 MDL-61525 Groups: Index page error on first time visit 2018-04-01 23:01:10 +07:00
Andrew Nicols 658b689b12 MDL-61751 core_privacy: Correct test return 2018-04-01 13:35:14 +08:00
Jake Dallimore 92282f5320 MDL-61751 core_plagiarism: add polyfill for plagiarism provider 2018-04-01 13:35:14 +08:00
AMOS bot 2cfb7f823f Automatically generated installer lang files 2018-03-31 00:07:13 +00:00
Andrew Nicols 8e02d8b3df MDL-61801 core_privacy: Correct bug in unit test provider 2018-03-29 22:45:28 +08:00
Luca Bösch aa096c380d MDL-61781 installation: docs link should have https. 2018-03-29 12:12:45 +02:00
Andrew Nicols cf0e873506 MDL-61703 privacy: Allow writing of user preferences at any context 2018-03-29 15:28:45 +08:00
Jun Pataleta bdceed1023 weekly release 3.4.2+ 2018-03-29 12:55:59 +08:00
Jun Pataleta 53f8de7af4 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-03-29 12:55:58 +08:00
Marina Glancy c30595af59 MDL-61163 mod_wiki: guests should be able to view frontpage modules
When wiki is added to the frontpage and the guest role has capability to view
wiki, users should not be required to log in.
2018-03-29 11:12:30 +08:00
Marina Glancy ec5e497a35 MDL-61163 mod_wiki: add default view capability to frontpage
It is inconsistent that guests are allowed to view frontpage wiki but once user is logged in they
loose this capability
2018-03-29 11:12:30 +08:00
Marina Glancy b800501c76 MDL-61163 mod_wiki: correct capability check in modinfo
Wiki defines capability mod/wiki:viewpage instead of standard mod/wiki:view . This means that people
who do not have capability to view wiki still see it in the modules list.

Also corrected unittest that was testing situation when student has capability to create pages
but does not have capability to view pages. Such student should not see wiki module at all.
2018-03-29 11:12:30 +08:00
dinhloc e2e7f32d6c MDL-61033 quiz: Editing a quiz while a preview is open
Editing a quiz while a preview is open in another browser tab can leads to a cryptic error that is hard to recover from
2018-03-28 13:53:01 +07:00
Jake Dallimore 2cd48e09c7 Merge branch 'MDL-61770-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-28 13:36:31 +08:00
Andrew Nicols 0d2a976843 MDL-61770 iplookup: Check types rather than values 2018-03-28 10:58:51 +08:00
Shamim Rezaie bc021bf6c6 MDL-61020 media_videojs: Fix RTL display issues 2018-03-28 13:38:02 +11:00
Eloy Lafuente (stronk7) a2545bad49 Merge branch 'MDL-39060-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-03-27 13:45:42 +02:00
Ankit Agarwal 62bfa92b7a MDL-51362 libraries: Remove deprecated admin tool unittest 2018-03-27 13:37:39 +02:00
Eloy Lafuente (stronk7) 68842b56d4 Merge branch 'MDL-61321-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-03-27 12:45:11 +02:00
Eloy Lafuente (stronk7) 513ac30d0a Merge branch 'MDL-61718-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-03-27 12:40:49 +02:00
Jun Pataleta df5eac853a Merge branch 'MDL-60762-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-03-27 15:47:27 +08:00
Adam Pawełczak edec1e65d2 MDL-60762 tool_usertours: Respect $CFG->admin in manager.php 2018-03-27 15:23:19 +08:00
Jun Pataleta 1b99f0c8a1 Merge branch 'wip-MDL-61328-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-03-27 13:50:10 +08:00
Jun Pataleta 128f077b68 Merge branch 'MDL-61257-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-03-27 12:53:06 +08:00
Jun Pataleta 497d52b407 Merge branch 'MDL-61656_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-03-27 12:12:02 +08:00
Eloy Lafuente (stronk7) e58107b258 Merge branch 'MDL-61248_m34' of https://github.com/ak4t0sh/moodle into MOODLE_34_STABLE 2018-03-27 01:42:09 +02:00
Eloy Lafuente (stronk7) f0a2fb7e2f Merge branch 'MDL-61576-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-03-26 23:26:21 +02:00
Matteo Scaramuccia 1edb0f1027 MDL-59596 ddl: Support MariaDB 10.2.4+ SQL_MODE new default value. 2018-03-26 23:16:10 +02:00
Matteo Scaramuccia ad75e8bb15 MDL-59596 ddl: Added has_breaking_change_sqlmode() 2018-03-26 23:15:47 +02:00
Eloy Lafuente (stronk7) d7e920d8dd Merge branch 'MDL-61691-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-03-26 23:15:19 +02:00
Willem Roes 65f957051c MDL-61708 mod_lti: use fullname for lis_person_name_full
Fullname passed on to LTI Provider was in format 'firstname lastname' 
completely ignoring fullnamedisplay settings.
2018-03-26 12:54:52 +02:00
Andrew Nicols 6972d683ef Merge branch 'MDL-55532-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-03-26 15:36:12 +08:00
Andrew Nicols 60c03cf181 Merge branch 'MDL-61733-34' of https://github.com/MartinGauk/moodle into MOODLE_34_STABLE 2018-03-26 15:02:04 +08:00
Jake Dallimore 0786b8a1c3 MDL-61691 core_plagiarism: fix namespace in privacy provider interface 2018-03-26 12:29:59 +08:00
Mihail Geshoski da769bbc8c MDL-61257 reports: Report logs link to unavailable completion report 2018-03-26 12:24:13 +08:00
Nick Phillips 173b5ea5ac MDL-55532 gradebook: fix grade export to include category names 2018-03-26 11:50:35 +08:00
Mihail Geshoski c5c18d46dc MDL-61724 resource: Unable to view or download file resource 2018-03-26 11:20:07 +08:00
Marina Glancy 8253bba831 MDL-61328 tool_usertours: do not fix tour sortorder after step editing
otherwise it breaks when we try to modify the step sortorder
2018-03-26 09:53:11 +08:00
Zig Tan b65ae316f8 MDL-39060 backup: fix typo backup destroy() function 2018-03-26 09:27:55 +08:00
AMOS bot 31f46d8db2 Automatically generated installer lang files 2018-03-25 00:06:23 +00:00
David Mudrák 72b01c5382 MDL-61741 enrol_paypal: Prevent some edge-case false errors
While testing the plugin in various scenarios, I've noticed that there
are two situations which the current code does not handle quite well:

* Detecting for existing txn_id record was likely to throw "found more
  than one record" debugging message. Fixed by explicitly ignoring
  multiple records.
* The incoming IPN verification message does not always contain the
  recipient's email in the "business" field. When a payment has to be
  claimed manually at PayPal (e.g. as a result of currencies mismatch
  and other settings), the email is coming only in the "receiver_email"
  field. This led to PHP notice and caused the script to fail falsely.
2018-03-23 19:51:13 +01:00
David Mudrák 021be5877a MDL-61741 enrol_paypal: Fix the IPN verification endpoint URL
IPN protocol spec has different URL for sending the verification
request. Better to have it fixed even if the existing value still
seems to work - to avoid unexpected surprise in the future.

Source: https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNImplementation/#specs
2018-03-23 19:44:42 +01:00
Arnaud Trouvé 90feb75113 MDL-61248 admin: fix incorrectly initialized property 2018-03-23 16:24:18 +01:00
Martin Gauk b13a4c68ed MDL-61733 atto_table: fix creating new table
If Atto is embedded in an HTML table (e.g. in the database activity
on the template pages), you could not create a new table.
2018-03-23 09:39:18 +00:00
Eloy Lafuente (stronk7) 70937a4a20 weekly release 3.4.2+ 2018-03-22 16:57:17 +01:00
Eloy Lafuente (stronk7) 3db6e89ccc Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-03-22 16:57:15 +01:00
Jun Pataleta 285f957a5b MDL-61718 admin: Make sure city and country columns are not duplicated
* Since City/town and Country have been added in $CFG->showuseridentity
since 3.4, we need to exclude the required city and country columns
when fetching the extra columns using get_extra_user_fields().
2018-03-22 13:53:09 +08:00
Jun Pataleta 98c563e0b7 Merge branch 'MDL-61678_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-03-22 12:33:17 +08:00
Jake Dallimore 6894a65f72 Merge branch 'MDL-58179-34-fix' of https://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-22 12:06:26 +08:00
Andrew Nicols bfff12f527 MDL-58179 mod_lesson: Add missing : in labels 2018-03-22 12:01:37 +08:00
Andrew Nicols d16e97fdcc Merge branch 'MDL-61530-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-22 11:49:37 +08:00
Renaat Debleu 389a872baa MDL-61530 mod_glossary: import_entries.feature needs @_file_upload tag 2018-03-22 11:45:11 +08:00
Jun Pataleta 1127f6768d Merge branch 'MDL-52989-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-03-22 11:29:43 +08:00
Jun Pataleta f34b345910 MDL-52989 mod_lesson: Fix typo in feature description 2018-03-22 11:28:39 +08:00
Luca Bösch 17615d90d4 MDL-52989 mod_lesson: Fix cluster_jump returning a cluster page id. 2018-03-22 11:28:39 +08:00
Eloy Lafuente (stronk7) 05866360b7 Merge branch 'MDL-61658-34-allcountrycodes' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-03-21 19:37:55 +01:00
David Mudrák c3ab217820 MDL-61658 user: Fix displaying of user's country name
In these cases we want to use the method get_list_of_countries() to
obtain translated names of all potential country codes. The country code
is already there in the database. So it does not matter if the country
is among those whitelisted in $CFG->allcountrycodes - we want to see its
name anyway.
2018-03-21 18:15:20 +01:00
David Mudrák a3ef4709ae MDL-61658 user: Fix parsing of the agedigitalconsentmap setting
When parsing and validating the value of the Digital age of consent
(agedigitalconsentmap) field, we want to load all country codes. Not
just the ones whitelisted for drop down menus that users can choose
from.
2018-03-21 18:15:19 +01:00
Andrew Nicols 6966cdc45b Merge branch 'MDL-61519-34' of https://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-21 09:09:59 +08:00
Andrew Nicols 65fa7c7d15 MDL-61519 coursecat: Reset the coursecat cache on enrolment 2018-03-21 09:07:46 +08:00
Andrew Nicols 96cf945c7e Merge branch 'MDL-61519-34' of https://github.com/MartinGauk/moodle into MOODLE_34_STABLE 2018-03-21 09:07:29 +08:00
AMOS bot 47f75d41ab Automatically generated installer lang files 2018-03-21 00:06:11 +00:00
Martin Gauk bede042b12 MDL-61519 coursecat: do not cache get_all_children_ids 2018-03-20 13:13:08 +00:00
Juan Leyva b195c7dc90 MDL-61321 mod_feedback: Return all the items responses
The WS should receive all the item responses for all the attempts.
2018-03-20 10:37:14 +01:00
Andrew Davidson 2988b04705 MDL-61665 calendar: Added missing complete layout call for calendar page 2018-03-20 09:27:17 +00:00
Andrew Nicols 78928a3537 Merge branch 'MDL-61519-34' of https://github.com/MartinGauk/moodle into MOODLE_34_STABLE 2018-03-20 13:56:29 +08:00
Luca Bösch a1b9c05003 MDL-58179 lesson: Avoid using span with class "label" 2018-03-20 13:48:12 +08:00
Andrew Nicols ef86897b46 MDL-61597 calendartype: Implement the privacy API 2018-03-20 02:26:14 +01:00
Andrew Nicols 1886d9df92 MDL-61689 phpunit: Be stricter about output during unit tests
This change also add fail-on-risky to travis to help pick these up, and
verbosity too.

We only fail on risky during Travis and not during normal output because
developers may want to debug tests.
2018-03-20 08:32:27 +08:00
AMOS bot dee930150d Automatically generated installer lang files 2018-03-20 00:06:11 +00:00
AMOS bot 3267f5be8c Automatically generated installer lang files 2018-03-20 00:06:11 +00:00
Andrew Nicols 799b4a2618 Merge branch 'MDL-61265-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-03-19 10:51:58 +08:00
Andrew Nicols 794ec9478e Merge branch 'MDL-58179-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-03-19 10:31:40 +08:00
Andrew Nicols 86d77c31ca Merge branch 'MDL-61154_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-03-19 10:20:16 +08:00
Eloy Lafuente (stronk7) 8b66c45e9d MDL-61678 phpunit: Bump to current / latest 6.5.x before major release 2018-03-18 23:50:21 +01:00
Eloy Lafuente (stronk7) c485e42447 Moodle release 3.4.2 2018-03-17 01:18:36 +01:00
Martin Gauk 72901ac846 MDL-61519 calendar: do not iterate through all categories
Replace calls to \coursecat::get_all() or cache the results.
2018-03-16 14:28:41 +00:00
cescobedo 71aad59120 MDL-61451 message_area: core/auto_rows remove set height to 1px 2018-03-16 13:04:30 +01:00
Sara Arjona 3f476f0c5a MDL-61265 enrol: Add default numsections for external db 2018-03-16 11:33:23 +01:00
cescobedo 5499f63d46 MDL-61576 mod_lti: remove allowinstructorcustom in lib/locallib.php 2018-03-16 10:38:36 +01:00
David Monllao 973108a5c8 MDL-61154 analytics: No escaping for text format url 2018-03-16 09:27:19 +01:00
Luca Bösch 3094f53f1e MDL-58179 lesson: Avoid using span with class "label" 2018-03-16 08:48:11 +01:00
Jake Dallimore 263e505748 weekly release 3.4.1+ 2018-03-16 10:08:55 +08:00
Eloy Lafuente (stronk7) ec33505139 MDL-61656 report_security: fix role name 2018-03-16 02:26:10 +01:00
Eloy Lafuente (stronk7) cb46936de8 Merge branch 'MDL-61570-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-16 01:15:25 +01:00
Eloy Lafuente (stronk7) bc514fac18 Merge branch 'MDL-61566-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-16 00:29:48 +01:00
Andrew Nicols ea59dfbb81 MDL-61571 atto: Implement null provider for atto plugins 2018-03-15 23:49:53 +01:00
Jake Dallimore 8b1b0011f0 Merge branch 'wip-MDL-61477-34-behat' of https://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-03-15 16:44:25 +08:00
Marina Glancy e6571f9af9 MDL-61477 auth_email: behat tests for sign up 2018-03-15 16:22:57 +08:00
Jake Dallimore dea705b6b1 Merge branch 'wip-MDL-61477-34-manager' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-03-15 11:38:45 +08:00
Marina Glancy aef659d1e2 MDL-61477 admin: sitepolicy handler API
- Define sitepolicy handler manager class, base class and the core handler
- Allow to set a plugin as sitepolicyhandler that implements the sitepolicy API
- Modify web services to return information from the 3rd party handler instead of core if needed
2018-03-15 11:32:13 +08:00
David Mudrák 94e7b022c7 MDL-61477 admin: Allow plugins to act as alternate policy handlers
The patch introduces a new site setting 'sitepolicyhandler' that can be
either empty or contain a plugin component name. If it is empty, the
site policy feature keeps working as before and the core keeps the
control over it.

If a plugin is specified, it is expected to implement the callback
'site_policy_handler' in its lib.php file. The callback should return a
URL to a script where the user can accept the site policies. The plugin
itself is responsible for setting the 'policyagreed' flag in the users
table. The callback may return an empty value, in which case the user
can continue using the site without being redirected.

The patch adds support for a new pre-config flag NO_SITEPOLICY_CHECK.
This constant should be defined and set to true if we should not check
the user's policyagreed status during the require_login().

This is for pages where the user actually accepts the site policies and
helps to avoid the redirect loop.
2018-03-15 09:30:59 +08:00
Eloy Lafuente (stronk7) 98e4385879 Merge branch 'MDL-61600-34' of git://github.com/dpalou/moodle into MOODLE_34_STABLE 2018-03-14 14:43:38 +01:00
Eloy Lafuente (stronk7) 81eec779d9 Merge branch 'MDL-61620_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-03-14 13:38:50 +01:00
David Monllao 735da2261b MDL-61620 output: New action_menu options 2018-03-14 11:38:25 +01:00
Eloy Lafuente (stronk7) ad3fe959fd Merge branch 'MDL-61398-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-14 11:22:25 +01:00
Eloy Lafuente (stronk7) 66af90fde4 Merge branch 'MDL-61475-34-v3' of git://github.com/snake/moodle into MOODLE_34_STABLE 2018-03-14 11:01:07 +01:00
Dani Palou d9aa39baad MDL-61600 recaptcha: Create a script to display recaptcha 2018-03-14 10:33:52 +01:00
Andrew Nicols c71654fd2c Merge branch 'MDL-60398-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-03-14 10:33:44 +08:00
Jake Dallimore 8f72459f1a Merge branch 'MDL-61307-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-14 09:43:50 +08:00
Jake Dallimore 89985f5c5b MDL-61475 mod_choice: perf improvement when exporting personal data
Instead of creating an array containing all record information and then
writing, we know write periodically during the recordset iteration, thus
alleviating any memory concerns associated with the array approach.
2018-03-14 09:37:14 +08:00
Jake Dallimore 4d07ed6b17 MDL-61475 mod_choice: Update core_privacy implementation 2018-03-14 09:37:14 +08:00
Jun Pataleta 42c3218b2c MDL-61475 mod_choice: Add implementation of Privacy API 2018-03-14 09:37:14 +08:00
Andrew Nicols 1706ca6140 MDL-61398 block_html: Implement privacy API 2018-03-14 09:33:16 +08:00
Andrew Nicols 06ae551f04 MDL-61307 core_privacy: Add unit test to check installed providers 2018-03-14 09:32:28 +08:00
David Mudrák c22ea810ee MDL-61392 enrol_paypal: Improve IPN input parameters checking 2018-03-14 09:11:36 +08:00
David Mudrák 0167ce3ded MDL-61392 enrol_paypal: Improve the IPN notifications handling
* Notify administrators once incoming IPN request is verified by PayPal.
* Fix the HTTP status as expected by the IPN protocol.
2018-03-14 09:11:36 +08:00
Eloy Lafuente (stronk7) c6f4528a7f Merge branch 'MDL-61625_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-03-14 00:59:53 +01:00
David Mudrák b3016e0e1b MDL-60101 auth_oauth2: Don't allow suspended users to SSO in via OAuth2
Without this patch, users could still log in as a suspended account via
OAuth2 SSO feature.
2018-03-13 09:13:50 +01:00
Jake Dallimore 7286f62c01 Merge branch 'm34_MDL-61626_PgSQL_Table_Name_Could_Be_Schema_Qualified' of https://github.com/scara/moodle into MOODLE_34_STABLE 2018-03-13 15:37:43 +08:00
Andrew Nicols 50dcf3bdae Merge branch 'MDL-60828-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-03-13 15:29:13 +08:00
Andrew Nicols e8dae4203d Merge branch 'MDL-59070-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-03-13 13:23:10 +08:00
Andrew Nicols 30279d16dd Merge branch 'MDL-61397-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-03-13 12:36:37 +08:00
Andrew Nicols 8088ae2b3c Merge branch 'MDL-61567-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-03-13 12:21:00 +08:00
Zig Tan 362a7ed6fe MDL-61567 mod_url: Implement null provider mod_url 2018-03-13 11:14:12 +08:00
Zig Tan 2298b97814 MDL-61567 mod_resource: Implement null provider mod_resource 2018-03-13 11:14:12 +08:00
Zig Tan f2289ba9a2 MDL-61567 mod_page: Implement null provider mod_page 2018-03-13 11:14:12 +08:00
Zig Tan 731f9bd3f2 MDL-61567 mod_label: Implement null provider mod_label 2018-03-13 11:14:12 +08:00
Zig Tan 804e7a6142 MDL-61567 mod_folder: Implement null provider mod_folder 2018-03-13 11:14:12 +08:00
Eloy Lafuente (stronk7) c1bb75a533 Merge branch 'MDL-61307-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-13 03:27:41 +01:00
Zig Tan e319a383dc MDL-61397 blocks: Fix null_provider namespace for blocks 2018-03-13 09:59:21 +08:00
Andrew Nicols 72999a7eb9 MDL-61307 core: Language changes 2018-03-13 09:42:21 +08:00
Andrew Nicols cd505acf19 MDL-61307 privacy: Rename deletion functions 2018-03-13 08:49:03 +08:00
Andrew Nicols cf9ef3275d MDL-61307 core: Remove deletion_criteria 2018-03-13 08:48:59 +08:00
Eloy Lafuente (stronk7) 11e2c441cd Merge branch 'MDL-48501-mdl34' of git://github.com/jswebster/moodle into MOODLE_34_STABLE 2018-03-12 23:50:35 +01:00
Matteo Scaramuccia c499b15fe0 MDL-61626 core_dml: pgsql and schema qualification. 2018-03-12 22:51:38 +01:00
Eloy Lafuente (stronk7) 21f2c3435b Merge branch 'wip-MDL-60241-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-03-12 18:28:50 +01:00
Eloy Lafuente (stronk7) 61305a7684 Merge branch 'MDL-61397-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-12 17:31:27 +01:00
Eloy Lafuente (stronk7) 85eec82bc7 Merge branch 'MDL-61622-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-03-12 11:36:36 +01:00
David Monllao 841d54bc4a MDL-61625 persistent form: Add missing param to the constructor 2018-03-12 08:10:02 +01:00
Andrew Nicols e842b68d67 Merge branch 'MDL-61365-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-03-12 13:44:56 +08:00
Andrew Nicols 0fbe9dfb95 MDL-61570 tool_usertours: Implement Privacy API 2018-03-12 13:34:35 +08:00
Andrew Nicols 6f8ea0e2ea MDL-61566 theme: Add Privacy providers for all core themes 2018-03-12 13:26:06 +08:00
Andrew Nicols 63a54665f2 Merge branch 'MDL-61513-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-03-12 12:26:28 +08:00
Andrew Nicols 69b0484c6b Merge branch 'MDL-61498-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-03-12 12:07:49 +08:00
Andrew Nicols bcc0d0e9eb Merge branch 'MDL-61261-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-03-12 11:52:00 +08:00
Zig Tan 80d7a98d84 MDL-61397 blocks: Add null_providers for blocks with no user data 2018-03-12 08:44:19 +08:00
Juan Leyva 19ff10cf06 MDL-61622 auth: New WS is_age_digital_consent_verification_enabled 2018-03-09 18:07:30 +01:00
Sara Arjona 71a1d2bd85 MDL-60828 user: Reset current page when filtering/searching users
Added baseurl parameter to core_user\output\unified_filter to let specify
different URL, instead of using always $PAGE->url.
2018-03-09 08:36:39 +01:00
Jake Dallimore 3dacb31271 Merge branch 'MDL-61307-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-03-09 13:36:55 +08:00
Andrew Nicols 15a4560637 MDL-61307 core_plagiarism: Add implementation of Privacy API 2018-03-09 12:25:11 +08:00
Adrian Greeve 6010b427b4 MDL-61307 core_comment: Add implementation of privacy API 2018-03-09 12:25:10 +08:00
Andrew Nicols c0ca1a22bf MDL-61307 core_rating: Add implementation of Privacy API 2018-03-09 12:25:10 +08:00
Zig Tan e143bae8ea MDL-61307 core_tag: Unit tests for privacy implementation 2018-03-09 12:25:10 +08:00
Andrew Nicols 51da83291b MDL-61307 core_tag: Add implementation of privacy API 2018-03-09 12:25:10 +08:00
Andrew Nicols def77d7882 MDL-61307 core_privacy: Implementation of itself 2018-03-09 12:25:10 +08:00
Andrew Nicols 3f1cc42f4b MDL-61307 core_privacy: Add legacy polyfill for contrib plugins
This legacy polyfill allows plugin developers who release a single
branch to work with multiple versions of Moodle to support the API in
both Moodle 3.3 with PHP 5.6, and later versions.
2018-03-09 12:25:09 +08:00
Jake Dallimore 164034c4ec MDL-61307 core_privacy: Add the privacy manager 2018-03-09 12:25:09 +08:00
Andrew Nicols 289fe1ef76 MDL-61307 core_privacy: Define and test providers 2018-03-09 12:25:09 +08:00
Andrew Nicols 1d58d59c86 MDL-61307 core: Add component_class_callback functionality 2018-03-09 12:25:09 +08:00
Andrew Nicols 24125dd102 MDL-61307 core: Define a new privacy component 2018-03-09 12:25:08 +08:00
Marina Glancy 1263887287 MDL-60241 course: General section always visible (topics, weeks) 2018-03-09 12:08:52 +08:00
Jeff Webster a8d1cc6598 MDL-48501 auth/email: update external class to use reCAPTCHA v2 2018-03-08 14:48:08 -05:00
Jeff Webster d0c9577d6c MDL-48501 mod_feedback: update feedback to use reCAPTCHA v2 2018-03-08 14:48:08 -05:00
Jeff Webster 17e1f9a22d MDL-48501 login: update signup_form to use reCAPTCHA v2 2018-03-08 14:48:08 -05:00
Jeff Webster b526202a35 MDL-48501 form/recaptcha: update to use reCAPTCHA v2 2018-03-08 14:48:08 -05:00
Jeff Webster 3ff16f4ed9 MDL-48501 recaptchalib_v2: add new lib to support reCAPTCHA v2 2018-03-08 14:48:08 -05:00
Jeff Webster 1fca1d68b5 MDL-48501 lang: update reCAPTCHA language strings 2018-03-08 14:48:08 -05:00
Luca Bösch 86a1fa9984 MDL-59070 enrol_database: Take enablecompletion from template 2018-03-08 17:23:45 +01:00
Luca Bösch 1840aa4cb1 MDL-61498 lesson: link to next activity in boost 2018-03-08 17:23:19 +01:00
Eloy Lafuente (stronk7) f4e99c54bb weekly release 3.4.1+ 2018-03-08 13:29:17 +01:00
Eloy Lafuente (stronk7) 1c6506769a NOBUG: Fixed SVG browser compatibility 2018-03-08 13:29:15 +01:00
Eloy Lafuente (stronk7) d13fa3fb6d Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-03-08 13:29:14 +01:00
Andrew Nicols 6418439f08 Merge branch 'MDL-61423-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-03-08 15:27:32 +08:00
Mihail Geshoski 1ae5e63101 MDL-61423 authentication: Add digital minor verification upon signup 2018-03-08 15:02:16 +08:00
Eloy Lafuente (stronk7) 70902e0f9c Merge branch 'MDL-60445-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-03-07 19:20:10 +01:00
Jesse Ritchey b005459b1e MDL-60445 theme_boost: remove fieldset tag 2018-03-07 11:09:12 +01:00
Andrew Nicols 74653366f3 Merge branch 'WIP-MDL-60658-34' of https://github.com/chkhanu/moodle into MOODLE_34_STABLE 2018-03-07 11:37:37 +08:00
Andrew Nicols e0008d0ae3 Merge branch 'wip-MDL-61322-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-03-07 10:57:46 +08:00
Andrew Nicols 7d0f502483 Merge branch 'MDL-61497-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-03-07 10:27:39 +08:00
AMOS bot 0301d8bd62 Automatically generated installer lang files 2018-03-07 00:06:26 +00:00
Eloy Lafuente (stronk7) ed154400cd Merge branch 'MDL-61312-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-03-07 00:49:41 +01:00
Eloy Lafuente (stronk7) 21f3353471 Merge branch 'MDL-36157-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-03-06 02:49:12 +01:00
Luca Bösch 3b1041475e MDL-36157 block_rss_client: Don't double escape titles. 2018-03-06 00:20:40 +01:00
Luca Bösch 3e74f4c3ce MDL-36157 block_rss_client: Don't double escape titles. 2018-03-06 00:20:40 +01:00
Eloy Lafuente (stronk7) 0af73bec89 Merge branch 'MDL-61211-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-03-05 23:33:25 +01:00
Eloy Lafuente (stronk7) 059ac53abb Merge branch 'MDL-55153-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-03-05 23:26:03 +01:00
Eloy Lafuente (stronk7) d968714802 Merge branch 'MDL-61549-34' of git://github.com/Dagefoerde/moodle into MOODLE_34_STABLE 2018-03-05 23:22:55 +01:00
Andrew Nicols ff74536adb MDL-61268 core: Fix empty string DB cehck
(amended by stronk7 to use the helper better)
2018-03-02 16:32:19 +01:00
Andrew Nicols 8221c18d51 Merge branch 'wip-MDL-61268-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-03-02 10:03:28 +08:00
Andrew Nicols a40d205eb5 Merge branch 'MDL-61196_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-03-02 09:34:46 +08:00
Adrian Greeve ec72828d18 MDL-61268 blocks: Unit tests for deprecated object update.
Unit tests for testing that the upgrade functions to change
the now deprecated object to stdClass works.
2018-03-02 09:28:05 +08:00
Adrian Greeve e8e497f4d4 MDL-61268 blocks: Fix corrupt configdata in block instances.
Old configuration data in the block instances is base64 encoded with
the deprecated object class instead of stdClass.
2018-03-02 09:27:10 +08:00
Eloy Lafuente (stronk7) 6b1a68d2b5 Merge branch 'MDL-61533-34-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-03-02 01:42:56 +01:00
Helen Foster 8756f250eb MDL-61533 lang: Merge English strings from the en_fix language pack
Significant string change:

* typeoflogin_desc,tool_mobile - removing sentence about autologinguests
2018-03-01 15:29:43 +01:00
Luca Bösch 52902fb436 MDL-61497 repository_onedrive: Use post 2015 icon 2018-03-01 08:58:21 +01:00
Chernyavskiy Leonid 24112d09b9 MDL-60658 course, gradebook: fix missing unformat_float for gradepass
Fix incorrect comparison of gradepass variable (with comma as decimal separator)
with grade variable when trying to save assignment settings.
Adds missing unformat_float($data['gradepass']).
2018-03-01 09:27:29 +07:00
Mihail Geshoski e1a1f5652f MDL-61211 lesson: Error when answer or response contains break tag 2018-03-01 09:51:44 +08:00
Andrew Nicols 413d6b046b Merge branch 'MDL-61453-34-userpicturefiletype' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-03-01 08:46:20 +08:00
Eloy Lafuente (stronk7) fa19d59444 weekly release 3.4.1+ 2018-02-28 12:58:23 +01:00
Jan Dageförde 6bfebfc7b8 MDL-61549 user: Remove $already columns because none were loaded yet 2018-02-27 14:47:59 +01:00
Jake Dallimore 6f7a1abba4 Merge branch 'wip-MDL-61485-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-02-27 09:39:51 +08:00
Jake Dallimore f3e2bf2b7c Merge branch 'MDL-61480-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-02-27 09:05:21 +08:00
Eloy Lafuente (stronk7) 1c3887d692 Merge branch 'MDL-61249-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-02-26 23:10:32 +01:00
Mihail Geshoski 40df9d3653 MDL-60398 resource: Unable to download folder resource 2018-02-26 16:52:23 +08:00
Andrew Nicols 85270722f5 MDL-61480 core: Check plugin installed before returning 2018-02-26 12:11:54 +08:00
Andrew Nicols 5cff9f0e9a Merge branch 'MDL-60547-34' of git://github.com/cescobedo/moodle into MOODLE_34_STABLE 2018-02-26 10:27:29 +08:00
Andrew Nicols bdf49f89f5 Merge branch 'MDL-61462-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-26 10:16:09 +08:00
Sara Arjona 59f3aac4ac MDL-61249 enrol_manual: Fix end date calculation
This patch has been given by Bruno Malaval.
2018-02-23 08:21:05 +01:00
Jake Dallimore 1126aaf1a2 weekly release 3.4.1+ 2018-02-23 11:51:37 +08:00
Jake Dallimore ceb90e7131 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-02-23 11:51:36 +08:00
Marina Glancy 93244439b5 MDL-61522 mod_glossary: use full url in links 2018-02-23 10:56:32 +08:00
Jun Pataleta 3191a94345 MDL-61513 admin: Fix undefined $buttons variable 2018-02-22 10:22:49 +08:00
Eloy Lafuente (stronk7) e45feac1ad Merge branch 'MDL-61324_lti_sync_34' of git://github.com/davosmith/moodle into MOODLE_34_STABLE 2018-02-22 08:31:30 +08:00
Dan Marsden 5e35fa16d5 MDL-61005 core_cohort: Allow teachers to view site-wide cohorts 2018-02-22 08:31:29 +08:00
Luca Bösch 08b3b1b449 MDL-58845 mod_choice: Fix behat related tests 2018-02-22 08:31:29 +08:00
Andrew Nicols 1af36b5ffd Merge branch 'MDL-61421-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-02-22 08:31:28 +08:00
Andrew Nicols 058ba89dab Merge branch 'MDL-61408-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-02-22 08:31:27 +08:00
Carlos 16e0ea970e MDL-60547 message_popup: adding preventDefault at notification popover 2018-02-21 23:36:03 +01:00
Sara Arjona fa5e817df9 MDL-55153 customlang: Remove local DB entries when deleting local file 2018-02-21 21:03:11 +01:00
Mihail Geshoski ac424c9bb6 MDL-61485 authentication: Add callback 'pre_signup_requests' 2018-02-20 10:01:50 +08:00
AMOS bot b7eab5a554 Automatically generated installer lang files 2018-02-20 00:06:25 +00:00
Eloy Lafuente (stronk7) a6a174d817 Merge branch 'MDL-58845-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-02-19 02:12:48 +01:00
Andrew Nicols d0064b9d05 Merge branch 'MDL-61289-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-19 09:06:54 +08:00
Jun Pataleta cf32b66e19 MDL-61289 mod_choice: Add extra user fields to response data 2018-02-19 08:54:50 +08:00
AMOS bot c56217eee1 Automatically generated installer lang files 2018-02-19 00:06:23 +00:00
AMOS bot 29570a7a84 Automatically generated installer lang files 2018-02-17 00:06:25 +00:00
Luca Bösch b0199478df MDL-61408 qbehaviour: Correct "Check" button styling. 2018-02-16 08:45:09 +01:00
Luca Bösch 5b1cfc900d MDL-58845 mod_choice: In reports, respect "Show column for unanswered" 2018-02-16 08:45:02 +01:00
Jun Pataleta 02804d1cec MDL-61462 admin_roles: Point back to roles link to the correct URL 2018-02-16 10:33:37 +08:00
Marina Glancy 004e5f9c66 MDL-56635 tags: use recordset since component may not be unique 2018-02-16 09:51:33 +08:00
Eloy Lafuente (stronk7) 4ce48de8d6 weekly release 3.4.1+ 2018-02-15 17:10:32 +01:00
David Mudrák 32324be121 MDL-61453 user: Fix accepted file type when uploading user pictures
Not all archives are supported, only ZIP files are.
2018-02-14 18:08:10 +01:00
Andrew Nicols 80528b181a Merge branch 'wip-34-MDL-61344' of https://github.com/ndunand/moodle into MOODLE_34_STABLE 2018-02-13 09:04:27 +08:00
Andrew Nicols e037ee80fb Merge branch 'MDL-61150_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-02-13 09:02:31 +08:00
David Monllao fc649d6700 Merge branch 'MDL-61236-34' of git://github.com/farhan6318/moodle into MOODLE_34_STABLE 2018-02-12 12:14:23 +01:00
Nicolas Dunand 96baa3d320 MDL-61344 mod_assign: Show additional files when adding submission 2018-02-12 11:16:49 +01:00
David Monllao eadb6a737e Merge branch 'MDL-61153-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-02-12 10:56:01 +01:00
David Monllao 9a88b86217 Merge branch 'MDL-61375_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-02-12 09:40:56 +01:00
Nick Phillips 77c2211b75 MDL-56688 grade: fix ordering of grade items in grade_seq::flatten 2018-02-12 09:35:11 +01:00
Davo Smith e2bb36513f MDL-61324 enrol_lti: fix detection of changed grades during sync 2018-02-12 08:24:59 +00:00
David Monllao 664308286c Merge branch 'mod-lti-fix-test-with-hardcoded-url-mdl34' of https://github.com/peikk0/moodle into MOODLE_34_STABLE 2018-02-12 09:20:56 +01:00
David Monllao 8553738434 Merge branch 'MDL-61425-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-02-12 09:13:13 +01:00
Sara Arjona 7a414b0522 MDL-61421 cohort: Fix cohort_role_sync when a user is in two cohorts 2018-02-12 08:57:55 +01:00
Andrew Nicols ba27a4f741 Merge branch 'MDL-61366_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-02-12 15:26:16 +08:00
Ryan Wyllie 18ea34c2a5 MDL-60958 calendar: fix test helper action factory 2018-02-12 13:52:19 +08:00
Andrew Nicols db75447658 Merge branch 'MDL-60958-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2018-02-12 13:35:03 +08:00
Ryan Wyllie f594f67868 MDL-60958 calendar: stop db query in repeat collection constructor
Stop loading the parent record in the constructor because it is an
unnecessary DB query for each event instantiation.

Return null on get_repeats() for events that don't have repeats.
2018-02-12 05:31:41 +00:00
Shamim Rezaie 77786dec80 MDL-61425 theme_boost: Made question labels width full in question bank 2018-02-12 14:54:44 +11:00
Andrew Nicols 01dc5c1a45 Merge branch 'MDL-61305-34-fix' of https://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-02-12 11:31:43 +08:00
Andrew Nicols 45202e1154 MDL-61305 modinfo: Add back missing require for course 2018-02-12 10:38:33 +08:00
Andrew Nicols 8c12581e12 Merge branch 'MDL-61305-m34' of https://github.com/sammarshallou/moodle into MOODLE_34_STABLE 2018-02-12 09:07:45 +08:00
Pierre Guinoiseau 6bbba0d921 MDL-61379 mod_lti: fix a test comparing a hardcoded URL from fixtures
The hardcoded URL from tests/fixtures/ims_cartridge_basic_lti_link.xml
didn't match if TEST_EXTERNAL_FILES_HTTPS_URL was defined, the test
needs to compare with the exact same URL instead of a generated one.
2018-02-12 13:46:11 +13:00
Andrew Nicols 0d3166adb5 Merge branch 'MDL-61413_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-02-12 08:08:38 +08:00
Marina Glancy 5a43147f56 MDL-61150 xmldb: correct path to schema in install.xml 2018-02-11 23:07:48 +01:00
Eloy Lafuente (stronk7) 3e3c2994be MDL-61150 xmldb: Fix wrong PATH attributes in core 2018-02-11 23:07:48 +01:00
Farhan Karmali 4448ddc159 MDL-61236 enrol: Course welcome message to be sent from correct contact 2018-02-11 20:49:56 +05:30
Eloy Lafuente (stronk7) d293116fda MDL-61413 mod_lti: Use sql_compare_text() for comparing TEXTs 2018-02-11 02:17:52 +01:00
Mark Nelson 2f2d7e6358 MDL-61196 message_popup: clean params before returning via WS 2018-02-09 17:37:16 +08:00
Mark Nelson db6cff3f7a MDL-61375 mod_chat: specify the 'eventtype' to avoid duplicate rows 2018-02-09 14:47:02 +08:00
sam marshall 283f265fbe MDL-61305 Performance: Modinfo cache can get built in parallel
In a busy site it is possible that one user will access the site
while another is building modinfo cache. This can result in the
cache being built several times at once, potentially causing a
performance issue.
2018-02-08 14:49:10 +00:00
David Monllao 091b2fad14 weekly release 3.4.1+ 2018-02-08 09:29:16 +01:00
Sara Arjona aba9cc490d MDL-61365 group: Fix default filter when group mode is visible 2018-02-07 18:10:34 +01:00
Andrew Nicols 9cb9c85728 Merge branch 'MDL-61377-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-02-07 12:52:42 +08:00
Shamim Rezaie 7edc187fb7 MDL-61377 Core: Fixed faulty warning when using progress_bar 2018-02-07 14:49:00 +11:00
Eloy Lafuente (stronk7) 3b35ab9fd5 MDL-52832 quiz: sql fixing couple of incorrect group by uses 2018-02-07 07:09:15 +08:00
Tim Hunt 5678028de7 MDL-61366 setuplib: safely construct the ajax renderer when needed 2018-02-06 12:13:02 +00:00
David Monllao 100e9f3d12 Merge branch 'MDL-52832-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-02-06 12:20:04 +01:00
Dan Marsden 5bcc32e756 MDL-60421 tool_cohortroles: fix deprecated call. 2018-02-06 10:51:44 +01:00
Eloy Lafuente (stronk7) 202affd1a2 Merge branch 'MDL-61168-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-05 20:40:26 +01:00
Eloy Lafuente (stronk7) ab72dbee64 Merge branch 'MDL-61341-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-02-05 20:08:20 +01:00
David Monllao 496a40a49b Merge branch 'MDL-61027-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-02-05 11:56:28 +01:00
David Monllao 1a24b6b2d7 Merge branch 'MDL-61251-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-02-05 11:50:48 +01:00
David Monllao 38f9a7b1c8 Merge branch 'MDL-42764_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-02-05 11:18:46 +01:00
Andrew Nicols ab121de9de Merge branch 'MDL-61269_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-02-05 17:30:32 +08:00
Andrew Nicols 429ea1545c Merge branch 'MDL-51189-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-02-05 15:52:28 +08:00
Eloy Lafuente (stronk7) 9c397f9f63 MDL-61269 composer: better license GPL-3.0-or-later
Source: https://spdx.org/licenses/
2018-02-04 19:40:02 +01:00
Sara Arjona 85fea314bb MDL-61261 badges: Add email validation during backpack configuration 2018-02-02 11:35:28 +01:00
Andrew Nicols 58f7ad98d7 MDL-61341 theme_boost: Fix usertour zindex calculations 2018-02-02 11:31:55 +08:00
Andrew Nicols 422889d0eb MDL-61341 theme_boost: Modify variables used for calculations
Variables must be of the same type for Math to take place. We cannot
mix REM and EM because they have different relative roots.
2018-02-02 11:31:54 +08:00
Jun Pataleta bb279dc22e MDL-61168 mod_assign: Truncate only the online text submission 2018-02-02 09:21:53 +08:00
Luca Bösch 507ab4cf6b MDL-61251 admin: configenablerssfeedsdisabled2 string more correct. 2018-02-01 22:57:34 +01:00
Luca Bösch 36877227fb MDL-52832 quiz: timeclose in activities block looks after overrides. 2018-02-01 22:52:13 +01:00
David Monllao b08db1daa2 weekly release 3.4.1+ 2018-02-01 14:26:45 +01:00
David Monllao 65970afe4e Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-02-01 14:26:44 +01:00
Jake Dallimore 9cb1ac35c2 Merge branch 'MDL-60077-34-fix' of https://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-02-01 14:56:11 +08:00
Andrew Nicols 9089f50463 MDL-60077 tool_usertours: Pull v0.12.2 of usertours for triangle fix 2018-02-01 14:28:54 +08:00
David Mudrák 4d3651a151 MDL-61242 repository_equella: Fix missing class repository
The call to the class 'repository' introduced in the commit d05c2ac7cc
didn't fully work and threw: "Exception - Class 'repository' not found".
This fixes the missing library inclusion.
2018-02-01 10:34:00 +08:00
Eloy Lafuente (stronk7) d977e539d5 Merge branch 'MDL-61058-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-01 10:33:59 +08:00
Eloy Lafuente (stronk7) 2b89024ea2 Merge branch 'MDL-61023-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-01 10:33:59 +08:00
Andrew Nicols a9bb5dbe8d Merge branch 'MDL-61313_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-02-01 10:33:59 +08:00
Eloy Lafuente (stronk7) 8aa07c75a1 Merge branch 'MDL-44612-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-01 10:33:58 +08:00
Eloy Lafuente (stronk7) ed21686174 Merge branch 'MDL-61281_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2018-02-01 10:33:58 +08:00
David Monllao 60af40cbfd Merge branch 'MDL-60646-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-01 10:33:58 +08:00
David Monllao 17fed89644 Merge branch 'MDL-60997-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-01 10:33:57 +08:00
David Monllao 350e280741 Merge branch 'MDL-61152-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-02-01 10:33:57 +08:00
David Monllao a9c01e8c52 Merge branch 'MDL-61260_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-02-01 10:33:57 +08:00
Jake Dallimore e44cedd104 Merge branch 'MDL-61253-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-02-01 10:33:56 +08:00
Andrew Nicols 82f5d60aa6 Merge branch 'MDL-60077-34' of https://github.com/HuongNV13/moodle into MOODLE_34_STABLE 2018-02-01 10:33:56 +08:00
Andrew Nicols c5910cb7dc Merge branch 'MDL-61250-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2018-02-01 10:33:56 +08:00
Adrian Greeve 9dd8490aa6 MDL-61322 reports: Reformated the display date to include the year. 2018-02-01 08:28:35 +08:00
AMOS bot 3486243420 Automatically generated installer lang files 2018-02-01 00:06:45 +00:00
AMOS bot 79e685233f Automatically generated installer lang files 2018-01-31 00:06:34 +00:00
David Monllao 38c0a5d05f MDL-61313 behat: Move future events further 2018-01-30 18:17:24 +01:00
Juan Leyva 444b165c09 MDL-61312 completion: Return completion for teachers via WS
core_completion_get_activities_completion_status was not returning
completion information for users with the teacher role only (when it
wasn’t a role allowed to track completion).
2018-01-30 12:20:16 +01:00
AMOS bot 060b55064f Automatically generated installer lang files 2018-01-30 00:06:37 +00:00
AMOS bot 05818d70eb Automatically generated installer lang files 2018-01-30 00:06:36 +00:00
Mark Nelson 4c86ca6666 MDL-42764 core: added missing string definition
Also changed the string index so it was not
vague. The index 'emailempty' appears as if it
could belong to a validation method for a form.
2018-01-29 19:08:22 +08:00
Huong Nguyen 718235f569 MDL-60077 User tours: pop-up triangle look bad next to the corners 2018-01-29 10:33:08 +07:00
Mark Nelson 8dcd8b8132 MDL-61260 auth_ldap: require /user/profile/lib.php file 2018-01-29 11:31:24 +08:00
Eloy Lafuente (stronk7) eed3f1a83d Merge branch 'wip-MDL-61242-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-01-29 01:41:14 +01:00
Andrew Nicols 95fab37f66 Merge branch 'MDL-58410_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-01-29 08:19:57 +08:00
Eloy Lafuente (stronk7) 3c7eb5f50c Merge branch 'MDL-61218-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2018-01-29 00:06:15 +01:00
David Monllao 512f9e294f MDL-61281 search_solr: PHP 7.2 compatible counts 2018-01-28 19:00:45 +01:00
Luca Bösch 831b569c5f MDL-61250 questions: Omit leading space in question preview link 2018-01-25 14:25:29 +01:00
Jun Pataleta 34f90c2bdd MDL-60997 core_message: Add replytoname in unit test 2018-01-25 16:48:01 +08:00
Arnaud Trouvé fa72c683bd MDL-60997 messages: add property replytoname 2018-01-25 16:48:00 +08:00
Andrew Nicols 3f8287efe3 weekly release 3.4.1+ 2018-01-25 15:14:41 +08:00
Andrew Nicols 4a086154fa Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-01-25 15:14:38 +08:00
Jake Dallimore 75ba3e39d5 Merge branch 'MDL-60078-34-fix' of https://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-25 14:48:47 +08:00
Andrew Nicols 2b9d5423de MDL-60078 tool_usertours: Adjust accessibility checks for all themes 2018-01-25 12:46:29 +08:00
Eloy Lafuente (stronk7) 5e8961ebe0 MDL-61269 behat-extension: bump to fix some caps & defaults 2018-01-24 22:27:14 +01:00
Jun Pataleta 8737636d72 MDL-44612 mod_glossary: Test importing of glossary entries
* And check that the importing of entries is reflected in the recent
activity block.
2018-01-24 16:39:33 +08:00
Jun Pataleta c9950e69a2 MDL-44612 mod_forum: Confirm forum post listing in recent activity block 2018-01-24 16:39:33 +08:00
Damyon Wiese 0f9cf691a8 MDL-61023 behat: Automate MDLQA-8158
Verify the general section does not appear in the navigation when it is empty.
2018-01-24 16:38:35 +08:00
Damyon Wiese e5e71433c4 MDL-61058 behat: Automate MDLQA-8146
Verify that the keyholder is displayed on the self enrolment page.
2018-01-24 16:36:55 +08:00
Igor Sazonov 3b2e74d33e MDL-58410 user: add support for alternative name search
The solution about searching all external names fields (middlename etc) from course enrolment page (enrolled and enrolling pages)
2018-01-24 11:16:15 +08:00
Andrew Nicols d0d8b19dab MDL-61234 tool_usertours: Rewrite feature to work with all themes 2018-01-24 03:15:41 +01:00
Simey Lameze c4b5d16556 MDL-61218 lib: set chart border color to white 2018-01-23 12:06:00 +08:00
Andrew Nicols 04881b93f1 MDL-61253 repository: Add referenced files to archives 2018-01-23 11:51:55 +08:00
Jun Pataleta 89d0471764 MDL-61152 calendar: Remove usage of undefined variable 2018-01-23 10:50:55 +08:00
Eloy Lafuente (stronk7) 679f5d18ff Merge branch 'MDL-60814_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-01-23 01:55:21 +01:00
Shamim Rezaie 6aa7833c71 MDL-51189 Quiz: Edit overrides when quiz is not available to students
The $active variable should simply be used to dim the text, nothing more.
2018-01-23 10:53:50 +11:00
Eloy Lafuente (stronk7) df4a6bbcc2 Merge branch 'MDL-60918-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2018-01-22 20:17:33 +01:00
Eloy Lafuente (stronk7) 6c375449df Merge branch 'MDL-58006-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-01-22 20:00:10 +01:00
Eloy Lafuente (stronk7) 0555022bc2 Merge branch 'MDL-60812-34' of https://github.com/mwehr/moodle into MOODLE_34_STABLE 2018-01-22 16:33:18 +01:00
Eloy Lafuente (stronk7) 6d05b0db52 Merge branch 'MDL-60181-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-01-22 12:51:29 +01:00
Shamim Rezaie ca40c1f4ee MDL-61027 calendar: Fix datetime profile field issue with non-Gregorian 2018-01-22 19:06:19 +11:00
Mihail Geshoski 1bd8a0a2aa MDL-60181 glossary: Glossary rating is displayed wrongly 2018-01-22 13:58:02 +08:00
Andrew Nicols e4fac0f267 Merge branch 'MDL-61240_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2018-01-22 11:39:33 +08:00
Zig Tan 8be3607c28 MDL-58006 assign: Reset blindmarking assignments to hidden
Fix to reset blindmarking assigments to hidden as part of Course reset with behat test
2018-01-22 11:37:18 +08:00
Andrew Nicols ac7aae0dd2 MDL-60078 behat: Convert ErrorException to DriverException 2018-01-22 11:29:59 +08:00
Andrew Nicols ab4d19f260 Merge branch 'MDL-60078-34' of https://github.com/nashtechdev01/moodle into MOODLE_34_STABLE 2018-01-22 11:29:55 +08:00
Eloy Lafuente (stronk7) f18f4c297d Merge branch 'MDL-61077_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-01-22 02:26:11 +01:00
Eloy Lafuente (stronk7) ee121e7fc3 Merge branch 'MDL-61234-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-22 02:03:40 +01:00
Eloy Lafuente (stronk7) e82f7b14b8 Merge branch 'wip-MDL-61175-MOODLE_34_STABLE' of https://github.com/kwiliarty/moodle into MOODLE_34_STABLE 2018-01-22 01:24:52 +01:00
Eloy Lafuente (stronk7) 3ed13a332c Merge branch 'MDL-61224_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-01-22 01:23:17 +01:00
Adrian Greeve 780fe61954 MDL-61242 repository_equella: Add source key when sending the source.
A thank you to Nelson Cheng for find this issue and suggesting a patch.
2018-01-20 11:01:09 +08:00
Andrew Nicols a588c0f85b MDL-61234 tool_usertours: Wrap library calls in pendingjs 2018-01-19 15:55:24 +08:00
AMOS bot b5e4c94307 Automatically generated installer lang files 2018-01-19 00:07:00 +00:00
Eloy Lafuente (stronk7) 4f5d1c5cbf MDL-61240 dml: php72 compatibility, avoid counting on non-countables
This was not detected earlier because we have been unable to
run sqlsrv + php72 till now (not available).
2018-01-19 01:01:36 +01:00
Kevin Wiliarty a19ee0e707 MDL-61175 mod_assign: roll grade-by reminder on restore 2018-01-18 08:39:49 -05:00
Jun Pataleta f5bb389882 MDL-60646 user_portfolio: Fix action icons in Show / hide column
* Refactor the code to make it look cleaner and easier to read.
* Fixed incorrect alt-text for the configure icon.
* Fixed missing alt-text for show/hide icon.
2018-01-18 15:26:53 +08:00
Andrew Nicols 95bce65a9f weekly release 3.4.1+ 2018-01-18 12:48:03 +08:00
Andrew Nicols 7cdd1a5c8e Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-01-18 12:48:01 +08:00
Mark Nelson c8d028d3f1 MDL-60814 auth_ldap: prevent setting names breaking site upgrades 2018-01-17 14:18:28 +08:00
AMOS bot 961fd545cf Automatically generated installer lang files 2018-01-17 00:06:29 +00:00
Jun Pataleta 6bbcb9c2e5 Merge branch 'MDL-61221-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-16 23:01:14 +08:00
KietLy 93482c3a53 MDL-60078 User tours accessibility: Tab should go back into the pop-up 2018-01-16 17:43:00 +07:00
Mark Nelson f393faa86c MDL-61224 core_role: prevent short name from exceeding 100 chars 2018-01-16 18:17:51 +08:00
David Monllao 69f18d2a63 Merge branch 'MDL-61010-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-16 09:25:23 +01:00
Adam Olley d41b8d3f32 MDL-60918 core_message: update preferences of user behat test 2018-01-16 05:27:09 +00:00
Ryan Wyllie ec40f18efb MDL-60918 message: use current user in message preference update 2018-01-16 05:27:09 +00:00
Andrew Nicols 645bc22468 MDL-61221 badges: Ignore site availabilty for behat
Behat sites should not be available publically, and the check against
the backpack API for site availablity can time out in some situations.

We should be testing as though the site _is_ available, as this is the
standard expectation.
2018-01-16 13:23:17 +08:00
Andrew Nicols 92eb0a6d9c Merge branch 'MDL-60815-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2018-01-16 12:29:59 +08:00
Ryan Wyllie c5098c6704 MDL-60815 theme: fix loading editor styles 2018-01-16 03:41:03 +00:00
David Knuplesch 07dc19ad69 MDL-60549 lti: support for moving embedded lti into separate tab 2018-01-16 10:12:05 +08:00
Eloy Lafuente (stronk7) fbf616e651 Merge branch 'MDL-61204-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-16 02:16:53 +01:00
Andrew Nicols 1ddeb827a3 MDL-61010 mod_forum: Add unread link to blog view 2018-01-16 08:07:31 +08:00
AMOS bot bcd507a3f7 Automatically generated installer lang files 2018-01-16 00:06:38 +00:00
Eloy Lafuente (stronk7) c45b1e62dd Merge branch 'MDL-61081-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-01-16 00:27:53 +01:00
Eloy Lafuente (stronk7) b36c124f3d Merge branch 'MDL-37390-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2018-01-16 00:25:33 +01:00
Eloy Lafuente (stronk7) 43b5384168 Merge branch 'MDL-61162-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2018-01-15 22:58:04 +01:00
Tim Hunt ffb43a83b0 MDL-61077 question stats: make calculations more robust 2018-01-15 16:08:31 +00:00
Eloy Lafuente (stronk7) 3e9d0de501 Merge branch 'MDL-61166-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2018-01-15 10:57:46 +01:00
David Monllao 440989aeab Merge branch 'MDL-55382-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-01-15 10:07:44 +01:00
Andrew Nicols c4107dec84 Merge branch 'MDL-61156-34' of https://github.com/mwehr/moodle into MOODLE_34_STABLE 2018-01-15 13:49:03 +08:00
Shamim Rezaie 3f81c4a322 MDL-61166 Groups: Fixed a typo in PHPDoc 2018-01-14 09:22:48 +11:00
Eloy Lafuente (stronk7) c9236c6860 Moodle release 3.4.1 2018-01-12 20:35:46 +01:00
wehr 960252e17e MDL-60812 enrol_manual: Fixes not working default role 2018-01-12 16:05:52 +01:00
Farhan Karmali 9b55ca16d5 MDL-37390 course: Set startdate and enddate properly for approved course
Once a course is approved the startdate and enddate were not set properly
This patch sets current date as startdate and enddate is startdate +
default duration of the course
2018-01-12 10:03:05 +01:00
Farhan Karmali 17147e5204 MDL-61081 enrol: Start and end date for courses created by external db
Course created by external db enrolment plugin should have start date as current date
and end date is todays date + default course duration
2018-01-12 09:58:37 +01:00
wehr a9369b1941 MDL-61156 enrol_manual: Fixes not working manual quick enrolment in IE11 2018-01-12 08:59:18 +01:00
Andrew Nicols 89fc5ef888 MDL-61204 user: Fix random failure in behat
We need to get into the habit of not using usernames like 'student1'
and 'student10' as our matches are non-strict, and the tests become
dependent upon DB sort order.

This change adds a character after the varying value to act as a
delimter for all of these tests.
2018-01-12 09:52:17 +08:00
Eloy Lafuente (stronk7) 5dcd9c53e3 weekly release 3.4+ 2018-01-12 02:12:44 +01:00
Jake Dallimore 758066eda4 Merge branch 'MDL-61177-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-11 09:22:47 +08:00
Cameron Ball 6a12f2de83 MDL-61143 core_files: Don't append dot when checking domain names or IP addresses.
Previously we appended a dot at the end of IP addresses and domain names in the
cURL security helper, but it causes issues with Google OAuth so this patch removes it.
2018-01-10 15:23:20 +08:00
Andrew Nicols fe8663110a Merge branch 'MDL-61061_hideif_group_34' of git://github.com/davosmith/moodle into MOODLE_34_STABLE 2018-01-10 08:55:24 +08:00
Andrew Nicols 0f6761962a MDL-61177 badges: JS pending checks in connection test 2018-01-10 08:13:45 +08:00
Adrian Greeve bc066df1f6 MDL-61131 repositories: Added a key to verify incoming urls. 2018-01-09 11:34:44 +01:00
Cameron Ball 246b39cba9 MDL-61143 core_files: Update unit tests for curl_security_helper
Previously some of the unit tests were passing "by accident" becuase
we had the security helper letting through domains where the DNS lookup
failed. That behaviour has changed and now such domains are blocked.

Additionally tests for domains with multiple A records and weird Unicode
stuff have been added.

This patch also mocks the DNS resolution in the test, rather than actually
resolving the domain.
2018-01-09 16:54:31 +08:00
Cameron Ball facd24b4c7 MDL-61143 core_files: Block hosts that cannot be determined to be an IP address of domain name
Freaky deaky Unicode/octal/hex domains can be resolved by cURL but are technically not valid.

This patch causes anything that Moodle does not consider to be a valid domain or IP to be blocked
by the cURL security helper.
2018-01-09 16:54:31 +08:00
Cameron Ball b7b3b75b2c MDL-61143 core_files: Check all A records when testing blocked IPs 2018-01-09 16:54:31 +08:00
Juan Leyva 98ac97e2a0 MDL-60908 mod_quiz: Return question state only when configured
The question state should be returned following the quiz review options
settings.
2018-01-09 16:54:31 +08:00
David Monllao 9aa6e8bfa4 Merge branch 'wip-MDL-60742-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2018-01-09 09:52:56 +01:00
Davo Smith 03a65d8916 MDL-61061 formslib: make sure hideIf rules hide labels within groups 2018-01-09 08:48:23 +00:00
Davo Smith 5e430e98cb MDL-61061 formslib: add data-groupname to groups to fix hideIf rules 2018-01-09 08:48:23 +00:00
David Monllao 068f22aee0 Merge branch 'MDL-60079-34' of https://github.com/nashtechdev01/moodle into MOODLE_34_STABLE 2018-01-09 08:10:43 +01:00
Andrew Nicols 99d570fef4 Merge branch 'wip-MDL-60415-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2018-01-09 14:31:01 +08:00
David Knuplesch 4a2bc331fb MDL-60415 mod_lti: avoid confusing error-message 2018-01-09 14:02:09 +08:00
Thinh Pham 3fef39fc68 MDL-60079 User tours: leave unnecessary aria tags in the page 2018-01-09 10:35:57 +07:00
Jun Pataleta 5d434d4d19 Merge branch 'MDL-61068-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-09 09:53:31 +08:00
Andrew Nicols 440113b457 MDL-61068 mod_forum: Fix neighbour test dates 2018-01-09 09:49:14 +08:00
Eloy Lafuente (stronk7) 41ff45a7a7 Merge branch 'MDL-60943-m34' of https://github.com/sammarshallou/moodle into MOODLE_34_STABLE 2018-01-09 00:52:29 +01:00
Eloy Lafuente (stronk7) fa4274319d Merge branch 'MDL-61098-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2018-01-08 21:06:34 +01:00
Eloy Lafuente (stronk7) 06c5a9e6ff Merge branch 'm34_MDL-61050' of https://github.com/danmarsden/moodle into MOODLE_34_STABLE 2018-01-08 20:38:43 +01:00
Eloy Lafuente (stronk7) ca3605500e Merge branch 'MDL-61068-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-08 19:56:33 +01:00
David Monllao 6beb56ba1f Merge branch 'MDL-61169-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-08 14:59:07 +01:00
Andrew Nicols f83fc14e4d MDL-61169 iplookup: Change to github.com IP 2018-01-08 17:15:57 +08:00
Eloy Lafuente (stronk7) 844eae52fb Merge branch 'MDL-61046-34-enfix' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2018-01-08 10:07:30 +01:00
Andrew Nicols cf304a8870 Merge branch 'MDL-57786-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2018-01-08 15:17:25 +08:00
Andrew Nicols 8ec36b0fe2 Merge branch 'MDL-43042-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-01-08 15:13:21 +08:00
Andrew Nicols 31a9ee8172 Merge branch 'MDL-53985-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2018-01-08 12:50:12 +08:00
Jun Pataleta 2787a52470 MDL-61162 mod_forum: Remove unnecessary forum creation step 2018-01-08 10:57:43 +08:00
Andrew Nicols d0308d8d76 MDL-61068 mod_forum: Round timed posts to nearest 60 seconds
This slightly reduces the effectiveness of the DB query cache, but gives
us correct results every time.
2018-01-05 16:43:34 +08:00
Mihail Geshoski 144c240841 MDL-43042 lesson: Confusing feedback order in multiple answer questions 2018-01-05 15:35:27 +08:00
Dan Marsden 434c5f8a56 MDL-61050 auth_ldap: fix regression caused by MDL-42834 2018-01-05 10:42:50 +13:00
sam marshall 0ce4a24888 MDL-60943 core_search: Improve exception for preg_replace errors 2018-01-04 17:28:45 +00:00
Helen Foster bfd1dd07d8 MDL-61046 lang: Merge English strings from the en_fix language pack
Significant string changes:

* pluginname_desc, enrol_category - improved explanation
* pathtopythondesc, core_admin - mentioning Python version
* configdeleteunconfirmed, core_admin - setting applies to more than
  just email-based self-registration
2018-01-04 11:56:43 +01:00
David Monllao 51e05c09c3 weekly release 3.4+ 2018-01-04 11:02:43 +01:00
David Monllao 02990bd6b9 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2018-01-04 11:02:42 +01:00
Mihail Geshoski 6d38596df0 MDL-61153 lesson: Inconsistent column sizing in detailed statistics 2018-01-04 15:47:57 +08:00
Marina Glancy a66195b8b9 MDL-60742 calendar: allow customisation of 12/24h time format strings 2018-01-04 15:15:30 +08:00
Jun Pataleta ae7953ff01 Merge branch 'MDL-40613-34-ldap' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2018-01-04 14:57:50 +08:00
Andrew Nicols e5dc80a10c MDL-40613 auth_ldap: Call update_user_record on create 2018-01-04 14:41:03 +08:00
Jun Pataleta f080964380 Merge branch 'MDL-40613_34-fix' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-01-04 09:58:05 +08:00
AMOS bot 2ea79c66cf Automatically generated installer lang files 2018-01-04 00:07:02 +00:00
Mark Nelson 36b738c185 MDL-40613 auth_ldap: removed usage of profile_load_custom_fields() 2018-01-03 18:08:57 +08:00
AMOS bot 1a89875c36 Automatically generated installer lang files 2018-01-03 00:06:24 +00:00
Eloy Lafuente (stronk7) c29b6e8c15 Merge branch 'MDL-23887-34-2' of https://github.com/snake/moodle into MOODLE_34_STABLE 2018-01-03 00:24:59 +01:00
David Monllao ff710b83c3 Merge branch 'MDL-57727-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2018-01-02 12:33:56 +01:00
Jake Dallimore c619279f5e MDL-23887 database: fix use of deprecated system tables for mssql
Catalog views are available which we should use instead.
2018-01-02 17:20:25 +08:00
Jun Pataleta 5772b0fba2 Merge branch 'MDL-40613_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2018-01-02 16:50:59 +08:00
David Monllao c89d473133 Merge branch 'MDL-61107_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2018-01-02 08:34:48 +01:00
Zig Tan 0e540897e6 MDL-57786 mod_assign: Fix word count for online text submissions 2018-01-02 13:12:34 +08:00
David Monllao 27e2fe6981 weekly release 3.4+ 2017-12-28 12:35:19 +01:00
David Monllao e35bc644de MDL-51089 mod_quiz: Hide first page last node 2017-12-28 11:46:50 +01:00
Eloy Lafuente (stronk7) 5d7d6cb52b Merge branch 'MDL-60363-34' of https://github.com/Kathrin84/moodle into MOODLE_34_STABLE 2017-12-27 17:56:11 +01:00
David Monllao 913abd448b Merge branch 'MDL-51089-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-27 17:56:10 +01:00
David Monllao dfe9aa213b Merge branch 'MDL-58983-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-27 17:56:10 +01:00
David Monllao dc24b81fef Merge branch 'MDL-61056-34-feedbackresponsenav' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2017-12-27 17:56:09 +01:00
David Monllao cff1f1943e Merge branch 'MDL-33886-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2017-12-27 17:56:09 +01:00
David Monllao fe5d17b166 MDL-60439 block_tags: Removing extra var assign 2017-12-27 17:56:09 +01:00
David Monllao cdda22dad7 Merge branch 'MDL-60439-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-27 17:56:08 +01:00
David Monllao 641a281bef Merge branch 'MDL-60942-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2017-12-27 17:56:07 +01:00
David Monllao e70b33b720 Merge branch 'MDL-60359-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-27 17:56:07 +01:00
David Monllao 8578d28631 MDL-61062 analytics: Fix unit test wrong statement 2017-12-26 00:53:12 +01:00
Eloy Lafuente (stronk7) c7a1ecd9f6 Merge branch 'MDL-61055-34-v2' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-12-26 00:45:52 +01:00
Eloy Lafuente (stronk7) 829adb5f21 Merge branch 'MDL-43827-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-12-26 00:25:37 +01:00
Tim Hunt b6e79ab8d8 MDL-61107 quiz editing: handle invalid Maximum grade input 2017-12-22 13:35:48 +00:00
Kathrin Osswald 2ba2d02202 MDL-60363 conditional activities: Dim the icon also in student's view.
The class dimmed_text would only dim the activity's title and not the icon.
The teacher has both, icon and text, dimmed. So I added the class dimmed
to the class dimmed_text, what dims both elements for the students.
2017-12-22 13:11:15 +01:00
Luca Bösch 2d117605b8 MDL-60439 blocks: Tags block title multilang 2017-12-22 09:24:21 +01:00
Luca Bösch 237e1a85ce MDL-51089 quiz: "Add" menu in edit quiz more keyboard accessible 2017-12-22 09:23:00 +01:00
Luca Bösch 5cb64c1faa MDL-60359 theme_boost: have correct mc question check mark not overlap 2017-12-22 09:20:41 +01:00
Zig Tan e714f3cee9 MDL-33886 backup: Add backup filename length < 255 char validation 2017-12-22 13:12:43 +08:00
Jun Pataleta 16deaa8611 weekly release 3.4+ 2017-12-22 14:42:06 +13:00
Jun Pataleta ffa36a4bbe Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2017-12-22 14:42:05 +13:00
Juan Leyva 5ed65e12e1 MDL-61098 repository: Retrieve correct context for repo instance
The repository instance was being retrieved without specifying a valid
context that is required in further API checks.
2017-12-21 11:35:30 +01:00
Mihail Geshoski d1c15a50c9 MDL-43827 filepicker: Multiple actions not accessible using keyboard 2017-12-21 14:08:43 +08:00
Simey Lameze bc121625c3 MDL-61055 calendar: guest user cannot create events 2017-12-20 12:44:35 +08:00
Damyon Wiese 251a824d8e MDL-60567 competencies: test list_competencies 2017-12-19 11:30:35 +01:00
Damyon Wiese efde049bdf MDL-60567 competencies: list_competencies wrong type
"validate_params" returns arrays in external functions.
2017-12-19 11:30:34 +01:00
David Monllao 88498220a1 Merge branch 'MDL-60938-34-2' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2017-12-19 07:53:20 +01:00
Mark Nelson dfdadbdbe2 MDL-40613 auth_ldap: sync user profile fields 2017-12-19 14:22:23 +08:00
David Monllao fb8b947963 Merge branch 'MDL-61045_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2017-12-19 06:43:27 +01:00
David Monllao b844baf8be Merge branch 'MDL-61016_hideif_disabledif_34' of git://github.com/davosmith/moodle into MOODLE_34_STABLE 2017-12-19 06:16:23 +01:00
Simey Lameze 0c794fc199 MDL-57431 mod_quiz: remove unnecessary class from selector 2017-12-19 12:49:45 +08:00
Damyon Wiese 2f4feacac7 Merge branch 'MDL-60767-34-3' of https://github.com/snake/moodle into MOODLE_34_STABLE 2017-12-19 11:26:12 +08:00
Damyon Wiese 7d7edc8820 Merge branch 'MDL-59999-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-12-19 11:04:01 +08:00
Marcus Fabriczy 18c838f586 MDL-59709 mod_assign: Export to portfolio button not working
Changed the button to a text link
2017-12-19 13:29:48 +13:00
Eloy Lafuente (stronk7) 21c63124ab Merge branch 'MDL-59200-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-19 01:10:33 +01:00
Eloy Lafuente (stronk7) 350cefe41e Merge branch 'MDL-58888-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2017-12-19 01:05:01 +01:00
Eloy Lafuente (stronk7) 47c56f3475 Merge branch 'MDL-60750-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-12-19 00:59:36 +01:00
Eloy Lafuente (stronk7) 4b5ac4ceae Merge branch 'wip-MDL-60594-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-19 00:46:05 +01:00
Jun Pataleta 8ed193c3ee Merge branch 'm34_MDL-60793_Mod_Chat_Reserved_Words_In_MySQL8p0p3_And_Above' of https://github.com/scara/moodle into MOODLE_34_STABLE 2017-12-19 12:13:57 +13:00
David Mudrák 40e430e634 MDL-61056 feedback: Fix the response navigation links
Floats are evil and unreliable. Even with the clearfix class added to
the response_navigation wrapper, the Next link would remain unaligned.
We need a proper three columns layout here.

It did not feel necessary to introduce a special template here so I'm
making use of the core one.
2017-12-18 21:54:47 +01:00
David Monllao aaf94b8f75 Merge branch 'MDL-60653-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2017-12-18 17:59:48 +01:00
David Monllao 18e6878f5a Merge branch 'MDL-61042-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2017-12-18 17:26:55 +01:00
David Monllao 1041ccaf2e Merge branch 'MDL-61040-34' of git://github.com/junpataleta/moodle into MOODLE_34_STABLE 2017-12-18 17:25:07 +01:00
Eloy Lafuente (stronk7) fb7b0157c1 Merge branch 'wip-MDL-60161-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2017-12-18 16:11:47 +01:00
Matteo Scaramuccia 8827e7fc3f MDL-60793 mod_chat: Renamed 'system' into 'issystem'
'system' is now a reserved word in MySQL 8.0.3+.
2017-12-18 15:26:20 +01:00
David Monllao b85ec901dd Merge branch 'MDL-31521-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-18 13:14:33 +01:00
Eloy Lafuente (stronk7) 2faa795209 Merge branch 'MDL-56932-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-12-18 12:15:22 +01:00
Damyon Wiese ca5a9de8c5 MDL-61022 recyclebin: Verify groups are restored 2017-12-18 10:22:12 +01:00
David Monllao b9287872eb Merge branch 'wip-MDL-52100-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2017-12-18 10:08:21 +01:00
Davo Smith 8b448de4b0 MDL-61016 form: fix handling disabledIf + hideIf with same dependency 2017-12-18 08:03:31 +00:00
Andrew Nicols 06588b2cc0 Merge branch 'MDL-42676-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2017-12-18 15:32:51 +08:00
Adrian Greeve e8e4566aaa MDL-52100 filelib: Update to unit tests for maxbytes. 2017-12-18 13:16:43 +08:00
Adrian Greeve 94ccf35860 MDL-52100 filelib: Files that are oversized are checked with user.
Files that are oversized could have been uploaded by a user who
can ignore the file size limits. These files should not be deleted
in these situations.
2017-12-18 13:16:14 +08:00
Damyon Wiese cf0386e763 Merge branch 'MDL-34389-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-18 13:00:10 +08:00
Damyon Wiese a603f86d65 Merge branch 'MDL-57431-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-12-18 12:54:03 +08:00
Damyon Wiese 265e374204 Merge branch 'MDL-54967-34' of git://github.com/zig-moodle/moodle into MOODLE_34_STABLE 2017-12-18 12:48:16 +08:00
Damyon Wiese e62e93aa0d Merge branch 'wip-MDL-49995-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-18 12:01:28 +08:00
Andrew Nicols d00a6f52b4 Merge branch 'MDL-57564-34-courseorder' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2017-12-18 11:24:02 +08:00
Jake Dallimore 0c75121648 MDL-60767 admin: fix usage of admin_write_settings
Make sure we always checks for failed validation, before redirecting.
A positive return value does not signal that all settings were able
to be written, only that at least one was - errors still need to be
checked!
2017-12-18 09:23:30 +08:00
Mihail Geshoski 5681222a0b MDL-59999 lesson: Boost grade essays page not indicating grade status
AMOS BEGIN
    CPY [graded,assign],[graded,lesson]
    CPY [notgraded,assign],[notgraded,lesson]
AMOS END
2017-12-18 09:17:06 +08:00
AMOS bot a45b7aa7ee Automatically generated installer lang files 2017-12-18 00:06:19 +00:00
Tim Hunt 3093cc28f1 MDL-61045 quiz settings: add back missing disabledIf
This got broken in Moodle 2.1 by MDL-20636.
2017-12-15 13:15:12 +00:00
Damyon Wiese 60f544f331 MDL-55382 assign: Sort editpdf quick list 2017-12-15 14:57:21 +08:00
Jun Pataleta 0ff581cece MDL-61042 mod_lesson: Initialise pageid variable 2017-12-15 17:42:08 +13:00
Damyon Wiese b93a787b3e MDL-53985 assign: Do not remove annotations
When an assignment submission is reverted to a draft, the timemodified on
the submission should not be modified. Changing the timemodified causes the
editpdf code to assume the pdf is stale, and forces all annotations to be removed.
2017-12-15 11:52:32 +08:00
Jun Pataleta 4ab37af070 MDL-58888 mod_choice: Sort choice_get_my_response() results by optionid 2017-12-15 15:56:28 +13:00
Jun Pataleta f85f002b37 MDL-58888 mod_choice: Verify sorting when testing multiple selections
* Improve test_choice_get_my_response() to verify the sorting of the
  responses returned by choice_get_my_response().
* Fix correct usage of choice_get_my_response().
2017-12-15 15:56:28 +13:00
Zig Tan f7bdcf959f MDL-54967 backup: Fix IMS CC import URL decoding for XML format
HTML encoding special characters to avoid XML compatibility issues during
Course backup restoration and avoid double encoding.
2017-12-15 09:37:31 +08:00
Jun Pataleta 64abea941e MDL-61040 mod_choice: Save my choice button needs some space 2017-12-15 13:07:30 +13:00
Jun Pataleta b9bebd0e36 MDL-60938 mod_choice: Fix rendering of users for choice results 2017-12-15 12:52:54 +13:00
Matteo Scaramuccia de703e70e7 MDL-60793 core_ddl: Added the new MySQL 8 reserved words 2017-12-14 22:58:22 +01:00
Luca Bösch b35acd2249 MDL-31521 questions: Allow more than one unit with multiplier equal to 1 2017-12-14 22:34:01 +01:00
Eloy Lafuente (stronk7) a45c466000 weekly release 3.4+ 2017-12-14 14:47:47 +01:00
Eloy Lafuente (stronk7) 3b7f331372 Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2017-12-14 14:47:46 +01:00
Marina Glancy 3145f21de1 MDL-31436 registration: do not send false in update request 2017-12-14 16:05:45 +13:00
AMOS bot f8550e7982 Automatically generated installer lang files 2017-12-14 00:06:11 +00:00
Simey Lameze ab0847d328 MDL-56932 theme_boost: fix quiz max mark input height 2017-12-13 11:48:53 +08:00
Adrian Greeve 54339683ac MDL-60161 filelib: Unit test for duplicate curl headers. 2017-12-13 11:13:12 +08:00
Carson Tam 65e260281b MDL-60161 class curl in filelib: Cleaned up doc block. 2017-12-13 11:13:00 +08:00
Carson Tam f29bd28d6a MDL-60161 class curl in filelib: Avoid duplicate params in http header 2017-12-13 11:12:37 +08:00
AMOS bot 9654f2cd71 Automatically generated installer lang files 2017-12-13 00:06:16 +00:00
Jun Pataleta 2337078a30 Merge branch 'MDL-58200-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-12 19:13:25 +13:00
Jun Pataleta 29d9535277 Merge branch 'MDL-59970-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-12 18:52:43 +13:00
Andrew Nicols 4b162c766d Merge branch 'M3.4-MDL-59866' of https://github.com/marcusboon/moodle into MOODLE_34_STABLE 2017-12-12 13:47:54 +08:00
Andrew Nicols 606c17e6ef Merge branch 'wip-MDL-56864-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-12 13:39:50 +08:00
Damyon Wiese daf44482e9 Merge branch 'MDL-44660-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-12 12:50:38 +08:00
Marcus Boon 7da0e04ca3 MDL-59866 session: Add retry for redis sessions
There is an edge case whereby redis will fail
to accept connections on the first try but
retrying the connection seems to make it work

Included in this commit:
* Retry functionality in the session init
2017-12-12 14:48:26 +10:00
Damyon Wiese 45c42e01a3 Merge branch 'MDL-60861-34' of git://github.com/ankitagarwal/moodle into MOODLE_34_STABLE 2017-12-12 12:38:39 +08:00
Tyler Bannister 74af3b176d MDL-60653 Navigation: Fixed loose string comparison.
The previous comparison would sometimes evaluate to true when the
navigation key was not a string.
2017-12-12 12:34:57 +08:00
Simey Lameze 7e9f55f138 MDL-60750 mod_quiz: only apply form css rules on clean theme 2017-12-12 12:14:02 +08:00
Damyon Wiese 7354b4ea0e Merge branch 'MDL-58058-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-12-12 12:10:40 +08:00
Damyon Wiese 9f6edf2171 Merge branch 'MDL-60945-m34' of https://github.com/NeillM/moodle into MOODLE_34_STABLE 2017-12-12 11:35:34 +08:00
Damyon Wiese 511c9addfa Merge branch 'MDL-60965-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2017-12-12 11:15:36 +08:00
Damyon Wiese 8616e10e89 Merge branch 'MDL-60969_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2017-12-12 11:08:30 +08:00
Andrew Nicols 91406c9103 Merge branch 'MDL-60983_34' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2017-12-12 10:57:55 +08:00
Damyon Wiese aa383f1b47 Merge branch 'MDL-52538-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-12-12 10:40:35 +08:00
Damyon Wiese 8bb22c4544 Merge branch 'MDL-44667-34' of https://github.com/snake/moodle into MOODLE_34_STABLE 2017-12-12 10:26:18 +08:00
Damyon Wiese ff383cdd57 Merge branch 'MDL-60968-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-12-12 10:19:24 +08:00
Matt Clarkson 23e190ead5 MDL-60976 dml: Optimise replace_all_text()
Avoid updating fields that do not match the search string.
2017-12-12 10:07:40 +08:00
Mathew May d997069c62 MDL-57431 mod_quiz: Quiz editing help icon fix 2017-12-12 09:57:46 +08:00
Mihail Geshoski 96cc77d435 MDL-57727 reports: Activity completion report sorting problem 2017-12-12 09:53:16 +08:00
Brendan Heywood 1daf3fafc0 MDL-60968 auth: Allow more flexibility with mapping attributes 2017-12-12 09:38:20 +08:00
Damyon Wiese 7522b6a2e3 Merge branch 'MDL-60041-m34' of https://github.com/NeillM/moodle into MOODLE_34_STABLE 2017-12-12 09:21:59 +08:00
Zig Tan ece94bb4e2 MDL-42676 mod_assign: Display message fix when using grade override
Logic fix in mod_assign locallib.php to correctly set the submissionlockedstatus,
and added associated unit test in test_grade_submission_override()
2017-12-12 09:04:59 +08:00
Mihail Geshoski cd44d4e463 MDL-52538 lesson: Grade info displayed while ongoing score disabled 2017-12-12 09:03:23 +08:00
Damyon Wiese 395c985759 Merge branch 'MDL-54021-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-12-12 08:59:23 +08:00
Damyon Wiese 684d866e20 Merge branch 'MDL-40790-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE
Conflicts:
	theme/boost/scss/moodle/modules.scss
2017-12-11 16:56:33 +08:00
Damyon Wiese 3b2e8b4a0a Merge branch 'MDL-56197-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-12-11 16:47:40 +08:00
Neill Magill 816e06e809 MDL-60945 Web services: Too many progress records retrieved
The core_completion_get_activities_completion_status was getting the
progress for all users on the course called, and then discarding all
the records but one.

This change ensures that only progress for the user we are interested in
is retrieved from the database.

This has a side benefit of removing a full table scan from the query
finding the users inside the get_progress_all() method.
2017-12-11 08:42:39 +00:00
Neill Magill 6924954471 MDL-60041 dml: MOODLELIB sql file must have Unix line endings
If the file does not have Unix line endings then the regular expression
in oci_native_moodle_database::attempt_oci_package_install() does
not split it correctly.

This leads to an invalid package being created in Oracle.

The .gitattribute file changes for oci_native_moodle_package.sql
force it to have Unix style line endings when the branch is checked
out and the file does not already exist.

The file has been modified so that the Unix style line endings are
applied even if the file already exists, for example when pulling in
this change to an existing branch.
2017-12-11 08:42:24 +00:00
Mihail Geshoski 2875ff2934 MDL-56197 lesson: Multichoice answers not on same line as radio button 2017-12-11 15:52:44 +08:00
Andrew Nicols b1ddacfc8e Merge branch 'MDL-58272-34-2' of https://github.com/snake/moodle into MOODLE_34_STABLE 2017-12-11 15:02:27 +08:00
Marina Glancy 6d353a7918 MDL-60594 xmlrpc: wrapper for buggy xmlrpc_decode 2017-12-11 14:26:29 +08:00
Ankit Agarwal f9e09bd963 MDL-60861 analytics: Remove enable menu, if no timesplitting method 2017-12-11 10:47:44 +05:30
Ankit Agarwal 4f657eeed9 MDL-60861 analytics: Enabling a model requires timesplitting 2017-12-11 10:47:44 +05:30
Damyon Wiese 60e57b8448 Merge branch 'wip-MDL-45500-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-11 13:14:05 +08:00
Damyon Wiese 628f99bf45 Merge branch 'MDL-60948-34' of git://github.com/andrewnicols/moodle into MOODLE_34_STABLE 2017-12-11 12:53:18 +08:00
Andrew Nicols 68e670d8ea MDL-60948 tool_httpsreplace: Correct use of test URLs 2017-12-11 12:06:22 +08:00
Damyon Wiese af9b21a388 Merge branch 'MDL-54106-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-11 11:38:04 +08:00
Damyon Wiese de08d71fc8 Merge branch 'wip-MDL-31436-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-11 11:29:20 +08:00
Luca Bösch 4846674f5c MDL-44660 grade: Typos @package core_grade instead of core_grades 2017-12-08 14:21:28 +01:00
Luca Bösch ac66136751 MDL-54106 task: Deleting unconfirmed users after $CFG->deleteunconfirmed 2017-12-08 14:12:49 +01:00
Tim Hunt 5617f26568 MDL-60983 get_user_capability_course: fix buggy edge cases
There were basically two problems, which are demostrated by
the new test users u7 and u8 in the unit test.

1. There was a problem if a role was overridden in a context above the
one where it was assigned. E.g. User has teacher role in a course, and
there is a role override in the course-category context. That was being
ignored.

2. Problems with the handling of PROHIBITs. It should be the case that
if there is a PROHIBIT in force, then it cannot be overridden by another
role, or by a role override. However, this was not working in all cases.

Also, I had to add comments to the unit test so that I could understand
it. Hopefully these will be hepful to other developers too.
2017-12-08 12:07:27 +00:00
Simey Lameze ad81f22148 MDL-58058 competency: replace other sortorder usages 2017-12-08 16:01:12 +08:00
Frederic Massart aabf264460 MDL-58058 competency: Allow unspecified sortorder for new competencies 2017-12-08 16:01:12 +08:00
Mihail Geshoski c22d3a30a1 MDL-40790 lesson: Lesson content button runs off the edge of the page 2017-12-08 09:57:25 +08:00
Mihail Geshoski 64d3271039 MDL-54021 blocks: Course completion block lang problem 2017-12-08 09:26:11 +08:00
AMOS bot c83c2c0f47 Automatically generated installer lang files 2017-12-08 00:09:50 +00:00
Jun Pataleta 5fdb912a82 weekly release 3.4+ 2017-12-08 09:10:06 +13:00
Mark Nelson 7a06e15952 MDL-60969 auth_ldap: replace hardcoded strings in config settings 2017-12-07 14:04:31 +08:00
Jun Pataleta b64f314662 Merge branch 'MDL-60951-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-07 17:33:30 +13:00
David Mudrák e5994e8c04 MDL-57564 enrol: Fix the course ordering on the dashboard
The list of courses displayed at the user's dashboard - course overview
block, had the sorting hard-coded to order by fullname. This did not
respect the site setting "navsortmycoursessort" and led to inconsistent
behaviour with "My courses" list in the navigation.
2017-12-06 23:51:52 +01:00
Damyon Wiese 1fb4f49cca MDL-60951 travis: Disable redis on travis
Redis unit tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
2017-12-06 11:23:35 +08:00
Andrew Nicols 32b4b57b26 Merge branch 'MDL-59159_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2017-12-06 10:04:42 +08:00
Jun Pataleta fd7e75a8a5 Merge branch 'MDL-32350-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-12-06 11:30:52 +13:00
Luca Bösch abd7d4394b MDL-32350 admin: Sort users by country ASC and DESC 2017-12-05 07:22:56 +01:00
Jun Pataleta e4256cd769 Merge branch 'wip-MDL-60926-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-05 19:03:36 +13:00
David Herney 5a6a4cef8b MDL-60443 dataformat lib: Change a wrong variable name
The variable $type really is $dataformat. I have changed it for
prevent the error and show a correct error message.
2017-12-05 13:52:36 +08:00
Jun Pataleta 8721afb2c6 Merge branch 'wip-MDL-34161-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-05 17:59:53 +13:00
Andrew Nicols 0e199a5aec Merge branch 'MDL-60801_34' of https://github.com/andrewhancox/moodle into MOODLE_34_STABLE 2017-12-05 12:52:25 +08:00
Andrew Nicols 320947908b Merge branch 'MDL-60899-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-05 11:55:16 +08:00
Andrew Nicols 2e55209603 MDL-60965 behat: Correct strlen use 2017-12-05 11:19:42 +08:00
Andrew Nicols f8979fac97 Merge branch 'MDL-47114-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2017-12-05 09:52:42 +08:00
Adrian Greeve 6a33a850fc MDL-37757 repositories: Deleting a repository deletes files.
If the user decides to remove a repository all of the linked
files are now deleted along with file references. This was causing
problems such as the course page displaying an error with no recourse
to fix the problem.
2017-12-05 09:46:31 +08:00
Jake Dallimore 9164ab6e39 MDL-44667 database: fix incorrect usages of $DB->get_field
Some places were passing 5 params, meaning the strictness param was
lost. This fixes those usages.
2017-12-04 18:01:34 +08:00
Damyon Wiese 2af1421e34 Merge branch 'MDL-60219-34' of https://github.com/abias/moodle into MOODLE_34_STABLE 2017-12-04 16:28:39 +08:00
Marina Glancy 5a9fa0fe57 MDL-34161 mod_lti: backup and restore of submissions 2017-12-04 15:05:58 +08:00
Marina Glancy c1db07d55b MDL-34161 mod_lti: backup/restore of lti types
Only course tools are backed up, site tools and registrations
can be matched by id if they are restored to the same site only.

For predefined course tools the secret is backed up encrypted
and can be restored on the same site only.
2017-12-04 15:05:58 +08:00
Tim Lock c5b7a25ee6 MDL-34161 mod_lti: Added Behat tests 2017-12-04 15:05:58 +08:00
Gregory Faller 7cc665e9c7 MDL-34161 mod_lti: Add support for restoring site tool 2017-12-04 15:05:57 +08:00
Jun Pataleta 05fd85142e Merge branch 'wip-MDL-60887-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-12-04 18:23:52 +13:00
Jun Pataleta e62ea2b803 Merge branch 'MDL-60925-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-12-04 14:32:00 +13:00
Eloy Lafuente (stronk7) 972142a9af MDL-59159 environment: 3.1 (LTS) required 2017-12-04 02:03:34 +01:00
Eloy Lafuente (stronk7) b25f3693bb MDL-59159 environment: 3.5 base information
This is a direct copy of the 3.4 branch to
have changes under control easier in next commits.
2017-12-04 02:03:17 +01:00
Jun Pataleta 369caa6183 Merge branch 'MDL-60914_34' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2017-12-04 12:49:48 +13:00
Shamim Rezaie 00268741c2 MDL-47114 core: Improved function description 2017-12-02 07:44:27 +08:00
Ann Adamcik 4c492f8646 MDL-58697: Only get group submission if enabled 2017-12-01 12:53:28 -07:00
Marina Glancy 605b0547de MDL-60926 auth: do not map very long profile fields 2017-12-01 17:51:54 +08:00
Ryan Wyllie eea1aff443 MDL-60942 filters: include filter in format_string cache key 2017-12-01 06:51:58 +00:00
Eloy Lafuente (stronk7) 1bc5a5abe9 weekly release 3.4+ 2017-11-30 17:05:23 +01:00
Marina Glancy be4ea98f29 MDL-31436 hub: never use xmlrpc, always use REST 2017-11-30 11:27:41 +08:00
Damyon Wiese 845215d826 MDL-60925 theme: Fix SCSS precompilation.
There is no point pre-compiling the theme SCSS if it is not stored somewhere that is available
to all webserving nodes. Localcache needs to be backed by the MUC cache.
2017-11-29 17:08:23 +08:00
Alexander Bias 2a9c11965b MDL-60219 lti: Replace pagelayout frametop with incourse 2017-11-29 09:58:45 +01:00
Damyon Wiese 8c3d8a68f7 MDL-58200 competencies: Student can view linked courses 2017-11-29 16:07:42 +08:00
João Umberto Ciocca de Almeida 969010296d MDL-60654 calendar: Clean up lines 140-154
The if+switch code between lines 140 and 154, even though they selected 3 different choices, all of them gave the same result.
Therefore, it'd be cleaner to replace those 16 lines for just two.
2017-11-29 06:56:16 +01:00
Jun Pataleta 87186b9710 Merge branch 'wip-MDL-45068-34-fix' of https://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-11-29 16:59:41 +13:00
Marina Glancy 539ad434cb MDL-45068 groups: corrected check for idnumber '0' 2017-11-29 11:53:56 +08:00
Eloy Lafuente (stronk7) af4fa2a55b Merge branch 'wip-MDL-60591-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-11-28 22:38:37 +01:00
Eloy Lafuente (stronk7) 15aec0b054 Merge branch 'MDL-60738-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2017-11-28 20:59:34 +01:00
Eloy Lafuente (stronk7) 7974bbcaf7 Merge branch 'MDL-60838-m34' of https://github.com/sammarshallou/moodle into MOODLE_34_STABLE 2017-11-28 20:48:27 +01:00
Damyon Wiese b4cbad15de MDL-58983 assign: Hide grade button if no cap
If the current user cannot grade students, don't show them the button.
2017-11-28 15:48:55 +08:00
Marina Glancy fe1eb00c0f MDL-49995 files: delete old file when overwriting 2017-11-28 15:03:29 +08:00
Damyon Wiese 03df75c0de MDL-59200 assign: add feedback when grade locked
We are including a hidden field when the grade is locked in the gradebook for a student. This field fails validation, so
the form cannot be submitted.
2017-11-28 14:37:33 +08:00
Damyon Wiese 21c6513a7c MDL-60899 block_lp: no permissions - empty block
Show an empty block if the current user does not have the capability to see any plans.
2017-11-28 14:33:18 +08:00
Damyon Wiese 8938d826d9 Merge branch 'MDL-53004-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE
Conflicts:
	mod/assign/styles.css
2017-11-28 12:50:57 +08:00
Marina Glancy e71a526011 MDL-45500 gradingform: allow plugin uninstall 2017-11-28 12:27:26 +08:00
Jun Pataleta f3f6960d3e Merge branch 'MDL-46768-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2017-11-28 17:19:00 +13:00
Damyon Wiese 8952d3f100 Merge branch 'MDL-24678-MOODLE_34-chat_get_latest_message' of https://github.com/bozoh/moodle into MOODLE_34_STABLE 2017-11-28 12:14:49 +08:00
Tobias Reischmann 0bb9e2d8d7 MDL-60669 forum: Added duplicate check for restoring forum subscriptions
Before MDL-59854 it was possible to have duplicate forum subscriptions.
Trying to import backups created from back then, caused a DB exception
due to unqiue key constraints. Now only one of multiple identical forum
subscritions is restored.
2017-11-28 12:06:25 +08:00
Mark Nelson 07b6c89868 MDL-60914 mod_lti: ensure grade_update() is defined during upgrade 2017-11-28 11:38:09 +08:00
Marina Glancy ffba0168b1 MDL-60887 registration: allow plugins to register on custom hubs 2017-11-28 11:21:46 +08:00
Eloy Lafuente (stronk7) 26a276cea1 Merge branch 'MDL-60249-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-11-28 00:48:55 +01:00
Damyon Wiese 3e2eb62931 Merge branch 'MDL-60188-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE 2017-11-27 15:56:53 +08:00
Jun Pataleta 62104652c8 Merge branch 'MDL-57569-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2017-11-27 19:43:57 +13:00
Jun Pataleta c950c91696 Merge branch 'wip-MDL-45068-34' of git://github.com/marinaglancy/moodle into MOODLE_34_STABLE 2017-11-27 19:36:10 +13:00
Marina Glancy 73e4f14d1b MDL-60591 mod_forum: inline attachments are not displayed in plain text 2017-11-27 14:29:33 +08:00
Marina Glancy 87d3c32f2e MDL-45068 groups: fixes to group import
- If 'coursename' is specified in the CSV it should match the course short name - thanks Yusuf Yılmaz for the patch
- If 'idnumber' is specified but 'groupidnumber' is not, idnumber should be used for matching the course idnumber only
- If 'groupingname' is not specified, there should be no notices (regression from MDL-42514)
- If 'coursename' or 'idnumber' column is present, it can contain empty values in some/all lines
2017-11-27 14:26:19 +08:00
Shamim Rezaie b8e0488c90 MDL-60188 groups: cache user's groups and groupings
The function groups_get_user_groups is called too often both before rendering the page and after the page is rendered (using ajax).
The function was executing a query joining 3 tables in each call. The plementation of the function has now modified to store the
query result in a request cache.
2017-11-27 10:42:56 +08:00
Jake Dallimore 6c23087aa7 Merge branch 'MDL-60830-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2017-11-27 10:30:24 +08:00
Jun Pataleta a6d9966786 Merge branch 'MDL-58887-34' of git://github.com/ryanwyllie/moodle into MOODLE_34_STABLE 2017-11-27 15:06:11 +13:00
Jake Dallimore 1a8167e781 Merge branch 'MDL-27230-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-11-27 09:44:18 +08:00
Ryan Wyllie 47dd1d85aa MDL-58887 core: fix default title for action menu
Thanks to Michelle Melton <meltonml@appstate.edu> for the original
version of this patch.
2017-11-27 01:28:54 +00:00
Andrew Hancox c29edc7551 MDL-60801 tool_uploaduser: Fix issue with defaults being ignored 2017-11-25 11:40:56 +00:00
Carlos Alexandre S. da Fonseca fdddb80b70 MDL-24678 mod_chat: Fixed race condition on chat module 2017-11-24 10:36:15 -02:00
sam marshall 70a804d98e MDL-60838 core_search: File upload does not honour timeout 2017-11-24 11:02:32 +00:00
Sara Arjona c12caea3d4 MDL-57569 core_files: Fix to let show generated f3 image 2017-11-24 11:51:29 +01:00
Sara Arjona 191a7fd205 MDL-46768 core_badges: changed badge name type from FILE to TEXT 2017-11-24 11:37:59 +01:00
Luca Bösch b0cb0168f4 MDL-34389 course: switch to subcategory w/ course:changecategory perms 2017-11-23 16:50:28 +01:00
Luca Bösch fb762d4e5c MDL-53004 assignment: Separate label and pulldown in grading (Clean) 2017-11-23 16:42:11 +01:00
Luca Bösch ed0e988020 MDL-27230 quiz: remove and update group overrides in calendar 2017-11-23 16:42:05 +01:00
David Monllao 20cb5f4086 weekly release 3.4+ 2017-11-23 13:35:20 +01:00
David Monllao de5d2667ab Merge branch 'install_34_STABLE' of https://git.in.moodle.com/amosbot/moodle-install into MOODLE_34_STABLE 2017-11-23 13:35:18 +01:00
Marina Glancy 4a54efd42a MDL-27886 backup: When setting is unlocked set it to original value 2017-11-23 12:29:59 +08:00
Jake Dallimore 5769d5fc86 Merge branch 'MDL-60831-34' of git://github.com/ankitagarwal/moodle into MOODLE_34_STABLE 2017-11-22 13:25:33 +01:00
Adrian Greeve 0225f34969 MDL-60546 mod_choice: Update to select all functionality. 2017-11-22 13:25:33 +01:00
Marcus Fabriczy 23c69f1ef0 MDL-60546 mod_choice: Fixed select all functionality
Fixed the functionality which ticks or unticks all checkboxes when
clicking the Select all or Deselect all elements when viewing the
responses.

Caused by deprecating checkall and checknone functions in
MDL-57490.
2017-11-22 13:25:32 +01:00
Jun Pataleta 6e6b38e0b5 Merge branch 'MDL-60813-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2017-11-22 13:25:32 +01:00
Jun Pataleta 2e3892e951 Merge branch 'MDL-60526-34-fix1' of http://github.com/damyon/moodle into MOODLE_34_STABLE 2017-11-22 13:25:31 +01:00
Matteo Scaramuccia abe62e33e6 MDL-60745 phpunit: Bump phpunit from 6.4.3 to 6.4.4
$ php composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 3 updates, 0 removals
  - Updating sebastian/comparator (2.0.2 => 2.1.0): Downloading (100%)
  - Updating phpunit/php-code-coverage (5.2.2 => 5.2.3): Downloading (100%)
  - Updating phpunit/phpunit (6.4.3 => 6.4.4): Downloading (100%)
Writing lock file
Generating autoload files
2017-11-22 13:25:31 +01:00
Damyon Wiese 78731d0b96 MDL-60526 forms: Button elements should have type
The mform "buttons" should be of type "button", instead it's not specified so they get
the default of "submit". This is causing behat fails.
2017-11-22 13:25:31 +01:00
David Monllao 56a58d538c MDL-59512 version: Following 2 digits scheme 2017-11-22 13:25:30 +01:00
David Monllao ef1c918973 Merge branch 'MDL-59512-34' of git://github.com/Dagefoerde/moodle into MOODLE_34_STABLE 2017-11-22 13:25:30 +01:00
Jun Pataleta 3b9fce4e1c Merge branch 'mdl58817-moodle34' of https://github.com/tlock/moodle into MOODLE_34_STABLE 2017-11-22 13:25:29 +01:00
Jun Pataleta 7b9e9eb98d Merge branch 'MDL-60637-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-11-22 13:25:29 +01:00
Ankit Agarwal 0456d880f0 MDL-60796 analytics: Fix phpdoc issues 2017-11-22 13:25:29 +01:00
Jun Pataleta 705776211a Merge branch 'MDL-60780_34' of git://github.com/dmonllao/moodle into MOODLE_34_STABLE 2017-11-22 13:25:28 +01:00
Simey Lameze 94b8228ba1 MDL-60751 core_calendar: remove useless NULL_ALLOWED parameter 2017-11-22 13:25:28 +01:00
Sara Arjona 0b7d0d0f79 MDL-60830 core_enrol: Added email when searching users in course enrol 2017-11-22 13:19:49 +01:00
Damyon Wiese c29501c06d MDL-59970 competencies: performance
Remove useless get_records call in get_least_proficient_competencies_for_course function.
On big sites this would cause huge memory usage.
2017-11-22 15:37:19 +08:00
Ankit Agarwal c152025706 MDL-60831 search: add BS classes to block elements 2017-11-22 12:31:56 +05:30
AMOS bot 0444dd2b70 Automatically generated installer lang files 2017-11-22 00:05:56 +00:00
Marina Glancy 15aded1e2a MDL-56864 forms: allow to remove last tag with forced standard tags 2017-11-21 15:21:50 +08:00
Marina Glancy cbff142b8e MDL-56864 forms: boost templates don't allow remove last tag 2017-11-21 15:21:50 +08:00
Simey Lameze ee16cb39bf MDL-60637 core_group: fix unit tests failures 2017-11-21 10:02:16 +08:00
Simey Lameze 7f0eba32de MDL-60637 group: remove useless id number validation on web services 2017-11-21 10:02:16 +08:00
David Monllao 144c9ba7c3 Merge branch 'MDL-60526-34' of git://github.com/damyon/moodle into MOODLE_34_STABLE 2017-11-20 13:44:02 +01:00
David Monllao b676ff39a4 Merge branch 'MDL-60436-m34' of https://github.com/NeillM/moodle into MOODLE_34_STABLE 2017-11-20 13:26:12 +01:00
David Monllao fe709d665d Merge branch 'MDL-56253-34' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-11-20 12:55:39 +01:00
Simey Lameze d692104051 MDL-60823 calendar: use first day of week on prepadding calc 2017-11-20 12:08:30 +01:00
Jake Dallimore 17ebd603e1 Merge branch 'MDL-60708-34' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2017-11-20 17:58:07 +08:00
David Monllao b24eb6c565 Merge branch 'MDL-60842-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-11-20 10:30:28 +01:00
Juan Leyva c449504287 MDL-60708 mod_workshop: Return author feedback for submission
The feedback and grade information for submission should be returned
for teachers in the evaluation and closed phases.
2017-11-20 10:08:20 +01:00
Simey Lameze 8df6b374bb MDL-60842 calendar: do not load all course fields 2017-11-20 16:55:24 +08:00
Juan Leyva e84e1bbff3 MDL-60738 webservice: Clean theme and lang properly
Sometimes the "theme" and "lang" fields in the user and course tables
in the database are set to incorrect values (uninstalled or
non-existent themes and language packs).
This makes Web Services functions to fail because the WS server
validate the returned data using the validate_param function that clean
parameters.
2017-11-20 09:38:03 +01:00
Jakob Ackermann 3cfc322bdf MDL-60187 mod_lti: Do not create a grade item when grades are disabled.
If the privacy option "Accept grades from the tool" is disabled, the
module should not appear in the gradebook when edited inline or when
recover grades is running during enrolment.
2017-11-20 21:33:50 +13:00
Damyon Wiese 6da402bf34 Merge branch 'MDL-60810_master' of git://github.com/markn86/moodle into MOODLE_34_STABLE 2017-11-20 15:58:58 +08:00
Damyon Wiese 126c58ede4 Merge branch 'MDL-60809-34' of git://git.cameron1729.xyz/moodle into MOODLE_34_STABLE 2017-11-20 15:31:08 +08:00
Damyon Wiese 6217d91173 Merge branch 'MDL-60806-34' of git://github.com/lameze/moodle into MOODLE_34_STABLE 2017-11-20 15:25:44 +08:00
Jake Dallimore d28be61fb5 Merge branch 'MDL-60824-34-profilefield' of git://github.com/mudrd8mz/moodle into MOODLE_34_STABLE 2017-11-20 15:07:00 +08:00
Luca Bösch a96ef27857 MDL-56253 grade: have coursemodule name pass filters. 2017-11-20 06:44:25 +01:00
Damyon Wiese 255541d592 Merge branch 'MDL-27886-master' of git://github.com/tobiasreischmann/moodle into MOODLE_34_STABLE 2017-11-20 13:26:06 +08:00
Simey Lameze 19b4c997e9 MDL-60806 core_calendar: return hidden categories 2017-11-20 12:18:24 +08:00
Jake Dallimore 93819366a4 Merge branch 'MDL-60835-34' of git://github.com/crazyserver/moodle into MOODLE_34_STABLE 2017-11-20 11:31:57 +08:00
Jun Pataleta 7726e2e2d6 Merge branch 'master_MDL-60253' of https://github.com/CengageEng/moodle into MOODLE_34_STABLE 2017-11-20 13:21:47 +13:00
AMOS bot d95ccdd4ec Automatically generated installer lang files 2017-11-20 00:05:51 +00:00
Jun Pataleta 5698d90e6a Merge branch 'MDL-55808_master' of git://github.com/juancs/moodle into MOODLE_34_STABLE 2017-11-20 10:35:54 +13:00
Neill Magill 44b87b5d95 MDL-60436 blocks: Unit test for dashboard block positioning 2017-11-17 14:11:01 +00:00
Neill Magill 334412f1cc MDL-60436 blocks: Improve performance of block loading 2017-11-17 14:10:12 +00:00
yair.spielmann afcb4cd69a MDL-59512 tool_oauth2: add option for basic authentication 2017-11-17 10:22:01 +01:00
Damyon Wiese d8a7c52ee6 MDL-60249 assign: resize quickgrade textareas
The Bootstrap CSS reset prevents horizontal resizing of textareas. We want to allow it in the quickgrading ui.
2017-11-17 14:55:46 +08:00
Andrew Nicols 05a70bac38 MDL-60773 core: Add pendingJS checks for autocomplete interactions 2017-11-17 14:11:56 +08:00
David Mudrák 951f10fd3e MDL-60824 profile: Fix handling of to-be-created user id
The script user/editadvanced.php uses special value of userid = -1 for
the case when a new user is being created. Such a value passes the
non-empty check and would lead to "invaliduser" error.
2017-11-16 22:11:13 +01:00
Juan Leyva 10a5e2a8de MDL-60813 calendar: Fix core_calendar_get_calendar_events for categories
Users couldn’t see category events when filtering by categories in the
core_calendar_get_calendar_events WS.
2017-11-16 19:16:46 +01:00
Pau Ferrer Ocaña 82c32f9a80 MDL-60835 completion: Add overrideby field to completion status WS 2017-11-16 16:37:35 +01:00
David Monllao 17ae93679d MDL-60780 analytics: Prevent timing issues 2017-11-16 09:18:31 +01:00
Jake Dallimore 27ffa62131 MDL-58272 core_files: get converters from file extension not mimetype 2017-11-16 15:50:58 +08:00
Cameron Ball 97a4db9c97 MDL-60809 xmlrpc: Include filelib when making xmlrpc call 2017-11-16 14:47:41 +08:00
Jake Dallimore 6f1a49b8b7 weekly release 3.4+ 2017-11-16 11:13:12 +08:00
David Monllao 740807d2e3 Merge branch 'MDL-60789-34' of git://github.com/sarjona/moodle into MOODLE_34_STABLE 2017-11-15 10:37:57 +01:00
Damyon Wiese 066b01a788 Merge branch 'wip-MDL-59876-34' of git://github.com/abgreeve/moodle into MOODLE_34_STABLE 2017-11-15 10:37:56 +01:00
Damyon Wiese e7b4c991ee MDL-60526 forms: Prevent duplicate type attributes
The exporter for mform elements does not skip "type" (which is included as a separate value).
2017-11-15 11:54:21 +08:00
Adrian Greeve 42ee1fc276 MDL-59876 core_user: Add required library for function.
The external service create_users has a function call to
useredit_update_user_preference() that requires editlib.php
2017-11-15 11:49:18 +08:00
Damyon Wiese d56935d66f Merge branch 'MDL-60675-34' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-11-14 17:07:08 +08:00
Mihail Geshoski 9e2565d84d MDL-60675 analytics: Apply strict comparison check 2017-11-14 16:31:13 +08:00
Sara Arjona 73c72b4148 MDL-60789 workshop: Check title submission maxlength 2017-11-14 08:46:46 +01:00
Jake Dallimore 244af9a0da Merge branch 'MDL-60741' of git://github.com/timhunt/moodle into MOODLE_34_STABLE 2017-11-14 15:28:38 +08:00
Jun Pataleta 2eb043fb36 Merge branch 'm34_MDL-59099_MySQL8_InnoDB_Params_Removed' of https://github.com/scara/moodle into MOODLE_34_STABLE 2017-11-14 12:23:09 +13:00
Damyon Wiese 2454da368a Merge branch 'MDL-60693_34-backup-multilang-activities' of https://github.com/lucaboesch/moodle into MOODLE_34_STABLE 2017-11-13 14:38:04 +08:00
Damyon Wiese 8e899e949d Merge branch 'MDL-60675-master' of git://github.com/mihailges/moodle into MOODLE_34_STABLE 2017-11-13 14:11:33 +08:00
Jake Dallimore 6b0b697fb8 Merge branch 'MDL-60707' of git://github.com/aolley/moodle into MOODLE_34_STABLE 2017-11-13 13:27:14 +08:00
Damyon Wiese 9a854a2fc9 Merge branch 'MDL-59876-master' of git://github.com/jleyva/moodle into MOODLE_34_STABLE 2017-11-13 11:07:25 +08:00
Damyon Wiese b6f1cf03e3 Merge branch 'MDL-60784_34' of git://github.com/stronk7/moodle into MOODLE_34_STABLE 2017-11-13 10:41:05 +08:00
Tim Lock d26cdca687 MDL-58817 mod_lti: cartridge: maintain custom icons 2017-11-13 10:18:02 +10:30
Eloy Lafuente (stronk7) dbeee32b59 MDL-60784 upgrade: add 3.4.0 separation line to all upgrade scripts 2017-11-12 18:46:00 +01:00
Luca Bösch 0a8663b425 MDL-60693 backup: Use multilang with course activities
On backup and restore, activities are shown after passing format_string,
supporting multilang.
2017-11-12 14:56:14 +01:00
Eloy Lafuente (stronk7) 665c3ac59c Moodle release 3.4 2017-11-11 19:31:19 +01:00
Eloy Lafuente (stronk7) 07c0bb10fb NOBUG: Change travis.yml to MOODLE_34_STABLE 2017-11-11 19:31:18 +01:00
Eloy Lafuente (stronk7) cf57ee9285 Merge branch 'install_master' of https://git.in.moodle.com/amosbot/moodle-install 2017-11-11 19:31:14 +01:00
Eloy Lafuente (stronk7) d334aea208 Merge branch 'MDL-60779-master' of git://github.com/junpataleta/moodle 2017-11-11 13:03:54 +01:00
Jun Pataleta 0cf288757d MDL-60779 calendar: Pass correct parameters for get_calendar_X_view() 2017-11-11 22:28:38 +13:00
AMOS bot 695cd06817 Automatically generated installer lang files 2017-11-11 00:05:36 +00:00
David Monllao ab9936962e Moodle release 3.4rc3 2017-11-10 15:15:37 +01:00
David Monllao d39fcc420e Merge branch 'install_master' of https://git.in.moodle.com/amosbot/moodle-install 2017-11-10 15:15:35 +01:00
David Monllao 08641175b3 Merge branch 'MDL-60764' of git://github.com/stronk7/moodle 2017-11-10 10:20:25 +01:00
Eloy Lafuente (stronk7) 66aee746e3 MDL-60764 versions: remove some outdated releases in requires 2017-11-10 09:45:56 +01:00
Damyon Wiese f738fc8efd Merge branch 'MDL-60763-master' of git://github.com/andrewnicols/moodle 2017-11-10 13:57:04 +08:00
Andrew Nicols 27973b545c MDL-60763 calendar: Use PHP concat, not JS 2017-11-10 13:56:39 +08:00
Damyon Wiese 3192438075 Merge branch 'MDL-60763-master' of git://github.com/andrewnicols/moodle 2017-11-10 13:47:05 +08:00
Andrew Nicols 41b7375c07 MDL-60763 core_calendar: Deprecate calendar_get_upcoming 2017-11-10 13:45:32 +08:00
Jun Pataleta cb04dcf4ce Merge branch 'MDL-60771-master' of git://github.com/lameze/moodle 2017-11-10 18:03:49 +13:00
Jun Pataleta c3925187ed Merge branch 'MDL-60758_master' of git://github.com/dmonllao/moodle 2017-11-10 17:21:15 +13:00
Damyon Wiese 4ceece6ea1 Merge branch 'MDL-60749-master' of git://github.com/sarjona/moodle 2017-11-10 12:05:46 +08:00
Jun Pataleta cfbc820e1b Merge branch 'MDL-60766-master' of git://github.com/ryanwyllie/moodle 2017-11-10 17:02:41 +13:00
Simey Lameze fbbcf45ef2 MDL-60771 mod_scorm: typecast score to integer 2017-11-10 12:00:17 +08:00
Andrew Nicols 6e2d8c121b Merge branch 'MDL-52838-master' of git://github.com/damyon/moodle 2017-11-10 11:38:13 +08:00
Damyon Wiese 6b2a9a6fb8 Merge branch 'MDL-60765-master' of git://github.com/andrewnicols/moodle 2017-11-10 10:55:09 +08:00
Mihail Geshoski ae4522ff55 MDL-60675 analytics: Error when selecting invalid insight 2017-11-10 10:43:51 +08:00
Andrew Nicols fb5bbf1424 MDL-60765 theme: Make inplace-autocomplete rule more specific
This change was intended to fix an issue with the autocomplete in RTL,
but was applied to all inplace-editables.
2017-11-10 10:29:11 +08:00
Damyon Wiese ce225e1c5e MDL-52838 workshop: Each criterion > 0 levels
Add validation to the edit assessment form so each criterion in a rubric requires at least one level.
2017-11-10 10:22:27 +08:00
Ryan Wyllie 08b7558483 MDL-60766 block_calendar_upcoming: stop summary modal not logged in
Stopped the JS from running on the block when the user is not logged in
because it attempts to load a summary modal when an event is clicked on
which results in a failed call to a webservice.
2017-11-10 02:20:32 +00:00
Andrew Nicols 9dead25fd5 MDL-60763 core_calendar: Revert removal of calendar_get_upcoming
This reverts part of commit 522b84be04.
2017-11-10 10:11:42 +08:00
Ryan Wyllie eac88b955f MDL-60766 block_calendar_month: hide nav when not logged in 2017-11-10 02:07:50 +00:00
Eloy Lafuente (stronk7) 438c98cc98 MDL-60764 versions: main version bump 2017-11-10 02:56:14 +01:00
Eloy Lafuente (stronk7) ba854606e6 MDL-60764 versions: bump all versions and requires near release
version = 2017111300 release version
requires= 2017110800 current rc2 version
2017-11-10 02:52:53 +01:00
Jake Dallimore f5b63fc829 Merge branch 'MDL-60760_master' of git://github.com/dmonllao/moodle 2017-11-10 09:32:17 +08:00
Andrew Nicols 6996fbaa0e MDL-60763 core_calendar: Revert removal of calendar_get_upcoming
Revert "MDL-60092 core_calendar: remove unused calendar_get_upcoming method"

This reverts commit 4259387ebb.
2017-11-10 08:11:36 +08:00
David Monllao 20305a8a8f MDL-60758 tool_analytics: Skip guess start if higher than guess end 2017-11-09 17:11:34 +01:00
David Monllao 5da020169e MDL-60760 tool_analytics: No onlycli link for managers 2017-11-09 17:05:08 +01:00
Sara Arjona 2f673d8b6a MDL-60749 scorm: Remove &nbsp; from files when downloading 2017-11-09 10:15:03 +01:00
Sara Arjona 4bcb0a9a1d MDL-60550 user: Add more restrictions in keyword searches
Original patch provided by Tim Schroeder.
2017-11-09 16:29:29 +08:00
David Monllao a4e0b7468c Merge branch 'MDL-60718-master' of git://github.com/sarjona/moodle 2017-11-09 09:27:01 +01:00
David Monllao 7fdcdc04ff Merge branch 'MDL-60615-master' of git://github.com/damyon/moodle 2017-11-09 08:48:48 +01:00
Damyon Wiese bef5a8ca10 Merge branch 'MDL-60752-master' of git://github.com/andrewnicols/moodle 2017-11-09 15:08:11 +08:00
Damyon Wiese 246698e779 MDL-60615 imscc: string to array fix
Sloppy typing in the imscc converter is causing errors on php7.1

Variable is initialised as a string and then used as an array.
2017-11-09 15:05:36 +08:00
Jake Dallimore 4f3262fede Merge branch 'MDL-60753_master' of git://github.com/markn86/moodle 2017-11-09 14:47:23 +08:00
Andrew Nicols f169f4fd21 MDL-60752 lti: Compare text in types_config properly 2017-11-09 14:25:51 +08:00
Mark Nelson d48d1ba19a MDL-60753 report_competency: fixed dialogue failing to show 2017-11-09 14:11:24 +08:00
Jun Pataleta 7a571b813a Merge branch 'MDL-60628-master' of git://github.com/lameze/moodle 2017-11-09 17:08:46 +13:00
Simey Lameze 754016ab33 MDL-60628 calendar: amend web service unit test 2017-11-09 11:43:49 +08:00
Simey Lameze 10c17dcc10 MDL-60628 calendar: support category events on get_calendar_events ws 2017-11-09 11:29:07 +08:00
Andrew Nicols 5518a32de5 Merge branch 'MDL-60579-master-fix2' of https://github.com/damyon/moodle 2017-11-09 11:18:14 +08:00
Damyon Wiese 56f05f23c6 MDL-60579 user: Don't lose text filters
When replacing a group filter with a different group filter - don't forget all the current text filters that have
been applied.
2017-11-09 11:06:30 +08:00
Damyon Wiese bb869f05e8 MDL-60579 user: Move defines into library
Entry page user/index.php was defining constants that were used by the renderer.
This means the renderer was tied to user/index.php.
2017-11-09 11:06:30 +08:00
Andrew Nicols 7cf4331a6f MDL-60579 user: Correct PARAM type for filters
Damyon pointed out during the integration of this fixset, that the
PARAM type is incorrect.
2017-11-09 10:07:13 +08:00
Andrew Nicols 762f8dc1db MDL-60579 user: Add missing case breaks 2017-11-09 09:07:34 +08:00
Andrew Nicols a997dc9da5 MDL-60579 user: Correct search for strings 2017-11-09 09:07:21 +08:00
Andrew Nicols 446b21b512 MDL-60579 user: Check filter strings have correct part count 2017-11-09 09:07:02 +08:00
Andrew Nicols 3968d2ca7e MDL-60579 user: Prevent behat from interacting til setup complete 2017-11-09 09:05:22 +08:00
Adam Olley 7f83e99e5f MDL-60707 core_search: In tests, use faked time for indexing length
Without this change its possible that the unit tests will fail at any time.
Before this change the indexing time is measured by real-time, not fake time,
making all index timings 0.

This happens as PHP offers no guarantee around the sort-order of an array for
any given two members that equate as equal. It just happens to pass for the
current array of search areas in vanilla Moodle.
2017-11-09 10:49:53 +10:30
AMOS bot 68c580c903 Automatically generated installer lang files 2017-11-09 00:05:00 +00:00
Sara Arjona 0c0d460e8b MDL-60718 analytics: Avoid duplicates for users with 2 enrolments 2017-11-08 19:12:59 +01:00
David Monllao ed0e2cea00 Merge branch 'MDL-60732-master' of git://github.com/damyon/moodle 2017-11-08 17:48:07 +01:00
David Monllao 7effd6dd79 Merge branch 'MDL-60720-master' of https://github.com/sammarshallou/moodle 2017-11-08 17:27:15 +01:00
David Monllao 29adfbc3c8 Merge branch 'MDL-58699-master' of git://github.com/damyon/moodle 2017-11-08 15:56:25 +01:00
Tim Hunt d00007bc45 MDL-60741 purgecaches: did not correctly setup the admin page
Note that, admin_externalpage_setup does the right capability check.
2017-11-08 14:30:27 +00:00
David Monllao 4e73acf3cf Merge branch 'MDL-60579-master' of https://github.com/mihailges/moodle 2017-11-08 12:16:20 +01:00
David Monllao fcafb22c22 MDL-60733 oauth: Remove outdated comment 2017-11-08 12:04:31 +01:00
David Monllao 6463a047a2 Merge branch 'MDL-60733-master' of git://github.com/damyon/moodle 2017-11-08 12:03:43 +01:00
Damyon Wiese a471bc4971 MDL-60732 core_user: Show group filters
Always show the group filters, even if the course is in NO_GROUPS mode.
2017-11-08 16:45:42 +08:00
Damyon Wiese d3882ea4a3 MDL-60733 core: B/C for google_oauth
The google_oauth class extends oauth2client which was modified to send "Accept" headers.

The "Accept" headers break picasa and could break any other plugin that was using google_oauth.
2017-11-08 15:41:53 +08:00
sam marshall 4b0facc984 MDL-60720 core_search: Indexing halts on failed get_document
The recordsets used for search indexing sometimes return results
which are invalid (e.g. cannot be found in database). When this
happens, the result in the iterator for the recordset will be
false. Due to a bug, the iterator used to stop when it encountered
a false value, which prevented indexing from getting past the
problematic record.

In addition, the iterator that skips future data resulted in the
current() function of its parent indicator being called twice per
entry, which meant that search indexing called get_document()
twice as many times.
2017-11-07 16:36:37 +00:00
Juan Leyva abdb8f59a5 MDL-59876 webservice: Fix the user preference name field type
Web Services from user and enrol components has been updated to change
the user preference name field type from PARAM_ALPHANUMEXT to
PARAM_RAW.
The old type was not matching the core functionality.
2017-11-07 16:44:48 +01:00
Mihail Geshoski c835126185 MDL-60579 enrolments: Applied filters lost on certain actions
AMOS BEGIN
    CPY [invalidrequest,enrol_lti],[invalidrequest,enrol]
AMOS END
2017-11-07 16:17:00 +08:00
Damyon Wiese 65c52e05d1 MDL-58699 mod_quiz: Require javascript for popup
If any of the access rules require the attempt to open in a new window, assume we
require javascript to attempt the quiz. This makes it harder to bypass the javascript
pseudo security restrictions.
2017-11-07 12:48:21 +08:00
Tobias Reischmann 34eb2faa0d MDL-27886 backup: Decision if a setting is fixed based on level
Previously, when a during backup/restore the "Schema"-stage is loaded,
some settings are fixed if they are LOCKED_BY_HIERARCHY. However, user
data fields of activities can be locked, when the section they are
contained in has user data set to false. When this setting is changed on
the same screen, the fixed setting of the activity can not be "unfixed"
by javascript.

This patch adds a settings-level to the call of is_changeable. With this
only those dependency_settings are considered, which belong to parent
settings, which are not changeable on the current stage.
2017-11-06 12:07:20 +01:00
Tobias Reischmann 8c067bb86d MDL-27886 backup: Enabled unlocking of backup settings
The function is_locked was changed to determine only, if the
dependency_setting want's the dependent setting to be locked.
In the previous version, is_locked did not only check, if the
dependency_setting want's the setting to be locked, but also if the
setting was already locked. A recursive call to the status of the
dependent setting leaded to problems, when unlocking locked settings.

Also the PHPDOC of the is_locked was adjusted to coincide with the current
usage in backup_ui_settings->is_changeable() and
base_setting->set_status(). In both functions all dependency_settings of
a setting are iterated to check if this setting should be or is LOCKED_BY_HIERARCHY.
The actual state of the setting was therefore either checked beforehand
or is not interesting, since the question is, if it shall be changed.
2017-11-06 12:07:20 +01:00
Tobias Reischmann 77a4d33755 MDL-27886 backup: Added behat tests for user data settings
This new test defines different combinations of global and local user
data settings during the restore process and tests that global defaults
can be overriden.
2017-11-06 12:07:20 +01:00
Matteo Scaramuccia 740a9315c3 MDL-59099 dml: MySQL8 supports only the Barracuda file format.
The following InnoDB file format configuration parameters were deprecated
in MySQL 5.7.7 and are now removed:
- innodb_file_format
- innodb_file_format_check
- innodb_file_format_max
- innodb_large_prefix

File format configuration parameters were necessary for creating tables
compatible with earlier versions of InnoDB in MySQL 5.1.
Now that MySQL 5.1 has reached the end of its product lifecycle,
the parameters are no longer required.

The FILE_FORMAT column was removed from the INNODB_SYS_TABLES and
INNODB_SYS_TABLESPACES Information Schema tables.

Ref: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html
2017-10-27 17:38:36 +02:00
Juan Segarra Montesinos f8c0b9e71f MDL-55808 mod_glossary: Search glossary entries with ratings enabled doesn't work 2017-10-13 17:12:37 +02:00
Vervoort, Claude 18ae59bea1 MDL-60253 lti: also consider securetoolurl for URL match 2017-09-27 13:26:42 -04:00
2720 changed files with 147207 additions and 10105 deletions
+1
View File
@@ -3,6 +3,7 @@
*/**/build/
node_modules/
vendor/
admin/tool/policy/amd/src/jquery-eu-cookie-law-popup.js
admin/tool/usertours/amd/src/tour.js
admin/tool/usertours/amd/src/popper.js
auth/cas/CAS/
+1
View File
@@ -1,4 +1,5 @@
**/yui/build/** -diff
**/amd/build/** -diff
lib/dml/oci_native_moodle_package.sql text eol=lf
theme/bootstrapbase/style/editor.css -diff
theme/bootstrapbase/style/moodle.css -diff
+1
View File
@@ -4,6 +4,7 @@ theme/clean/style/custom.css
theme/more/style/custom.css
node_modules/
vendor/
admin/tool/policy/amd/src/jquery-eu-cookie-law-popup.js
admin/tool/usertours/amd/src/tour.js
admin/tool/usertours/amd/src/popper.js
auth/cas/CAS/
+11 -8
View File
@@ -23,8 +23,9 @@ addons:
- mysql-client-core-5.6
- mysql-client-5.6
services:
- redis-server
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
# services:
# - redis-server
env:
# Although we want to run these jobs and see failures as quickly as possible, we also want to get the slowest job to
@@ -55,7 +56,7 @@ matrix:
include:
# Run grunt/npm install on highest version ('node' is an alias for the latest node.js version.)
- php: 7.2
env: DB=none TASK=GRUNT NVM_VERSION='8.9'
env: DB=none TASK=GRUNT NVM_VERSION='lts/carbon'
exclude:
# MySQL - it's just too slow.
@@ -99,8 +100,9 @@ install:
fi
# Enable Redis.
echo 'extension="redis.so"' > /tmp/redis.ini
phpenv config-add /tmp/redis.ini
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
# echo 'extension="redis.so"' > /tmp/redis.ini
# phpenv config-add /tmp/redis.ini
# Install composer dependencies.
# We need --no-interaction in case we hit API limits for composer. This causes it to fall back to a standard clone.
@@ -171,10 +173,11 @@ before_script:
mkdir -p "$HOME"/roots/phpunit
# The phpunit dataroot and prefix..
# Redis tests are currently failing on php 7.2 due to https://bugs.php.net/bug.php?id=75628
# -e "/require_once/i \\define('TEST_SESSION_REDIS_HOST', '127.0.0.1');" \
sed -i \
-e "/require_once/i \\\$CFG->phpunit_dataroot = '\/home\/travis\/roots\/phpunit';" \
-e "/require_once/i \\\$CFG->phpunit_prefix = 'p_';" \
-e "/require_once/i \\define('TEST_SESSION_REDIS_HOST', '127.0.0.1');" \
config.php ;
# Initialise PHPUnit for Moodle.
@@ -204,7 +207,7 @@ before_script:
# We need the official upstream for comparison
git remote add upstream https://github.com/moodle/moodle.git;
git fetch upstream master;
git fetch upstream MOODLE_34_STABLE;
export GIT_PREVIOUS_COMMIT="`git merge-base FETCH_HEAD $TRAVIS_COMMIT`";
export GIT_COMMIT="$TRAVIS_COMMIT";
export UPSTREAM_FETCH_HEAD=`git rev-parse FETCH_HEAD`
@@ -245,7 +248,7 @@ script:
- >
if [ "$TASK" = 'PHPUNIT' ];
then
vendor/bin/phpunit;
vendor/bin/phpunit --fail-on-risky --disallow-test-output --verbose;
fi
- >
+6
View File
@@ -165,6 +165,12 @@ function print_auth_lock_options($auth, $user_fields, $helptext, $retrieveopts,
// If custom field then pick name from database.
$fieldshortname = str_replace('profile_field_', '', $fieldname);
$fieldname = $customfieldname[$fieldshortname]->name;
if (core_text::strlen($fieldshortname) > 67) {
// If custom profile field name is longer than 67 characters we will not be able to store the setting
// such as 'field_updateremote_profile_field_NOTSOSHORTSHORTNAME' in the database because the character
// limit for the setting name is 100.
continue;
}
} elseif ($fieldname == 'url') {
$fieldname = get_string('webpage');
} else {
+13 -9
View File
@@ -54,14 +54,16 @@ $statusmsg = '';
$errormsg = '';
if ($data = data_submitted() and confirm_sesskey()) {
if (admin_write_settings($data)) {
$statusmsg = get_string('changessaved');
}
$count = admin_write_settings($data);
if (empty($adminroot->errors)) {
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
// No errors. Did we change any setting? If so, then indicate success.
if ($count) {
$statusmsg = get_string('changessaved');
} else {
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
}
}
} else {
$errormsg = get_string('errorwithsettings', 'admin');
@@ -73,7 +75,7 @@ if ($data = data_submitted() and confirm_sesskey()) {
if ($PAGE->user_allowed_editing() && $adminediting != -1) {
$USER->editing = $adminediting;
}
$buttons = null;
if ($PAGE->user_allowed_editing()) {
$url = clone($PAGE->url);
if ($PAGE->user_is_editing()) {
@@ -127,7 +129,9 @@ if ($savebutton) {
$visiblepathtosection = array_reverse($settingspage->visiblepath);
$PAGE->set_title("$SITE->shortname: " . implode(": ",$visiblepathtosection));
$PAGE->set_heading($SITE->fullname);
$PAGE->set_button($buttons);
if ($buttons) {
$PAGE->set_button($buttons);
}
echo $OUTPUT->header();
+41
View File
@@ -0,0 +1,41 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for core_admin.
*
* @package core_admin
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_admin\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for core_admin implementing null_provider.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
+1
View File
@@ -73,6 +73,7 @@ foreach ($rs as $user) {
echo "Redeleting user $user->id: $user->username ($user->email)\n";
delete_user($user);
}
$rs->close();
cli_heading('Deleting all leftovers');
+357
View File
@@ -2259,4 +2259,361 @@
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.5" requires="3.1">
<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.3" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="10.2" />
</DATABASE>
<PHP version="7.0.0" 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="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</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="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" 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_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfileformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfilepertable" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddblargeprefix" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
<FEEDBACK>
<ON_CHECK message="ishttpswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
<FEEDBACK>
<ON_CHECK message="incompleteunicodesupport" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
<MOODLE version="3.6" requires="3.1">
<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.6" />
<VENDOR name="postgres" version="9.4" />
<VENDOR name="mssql" version="10.0" />
<VENDOR name="oracle" version="11.2" />
</DATABASE>
<PHP version="7.0.0" 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="required">
<FEEDBACK>
<ON_ERROR message="opensslrequired" />
</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="required">
<FEEDBACK>
<ON_ERROR message="intlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
<PHP_EXTENSION name="json" level="required">
</PHP_EXTENSION>
<PHP_EXTENSION name="hash" level="required"/>
<PHP_EXTENSION name="fileinfo" 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_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfileformat" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddbfilepertable" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
<FEEDBACK>
<ON_ERROR message="unsupporteddblargeprefix" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
<FEEDBACK>
<ON_CHECK message="ishttpswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
<FEEDBACK>
<ON_CHECK message="incompleteunicodesupport" />
</FEEDBACK>
</CUSTOM_CHECK>
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_sixtyfour_bits" level="optional">
<FEEDBACK>
<ON_CHECK message="sixtyfourbitswarning" />
</FEEDBACK>
</CUSTOM_CHECK>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+3 -4
View File
@@ -29,9 +29,10 @@ require_once($CFG->libdir.'/adminlib.php');
$confirm = optional_param('confirm', 0, PARAM_BOOL);
$returnurl = optional_param('returnurl', null, PARAM_LOCALURL);
admin_externalpage_setup('purgecaches');
// If we have got here as a confirmed aciton, do it.
if ($confirm && isloggedin() && confirm_sesskey()) {
require_capability('moodle/site:config', context_system::instance());
if ($confirm && confirm_sesskey()) {
// Valid request. Purge, and redirect the user back to where they came from.
purge_all_caches();
@@ -45,8 +46,6 @@ if ($confirm && isloggedin() && confirm_sesskey()) {
}
// Otherwise, show a button to actually purge the caches.
admin_externalpage_setup('purgecaches');
$actionurl = new moodle_url('/admin/purgecaches.php', array('sesskey'=>sesskey(), 'confirm'=>1));
if ($returnurl) {
$actionurl->param('returnurl', $returnurl);
@@ -46,6 +46,14 @@ $error = optional_param('error', '', PARAM_ALPHANUM);
admin_externalpage_setup('registrationmoodleorg');
if ($url !== HUB_MOODLEORGHUBURL) {
// Allow other plugins to confirm registration on hubs other than moodle.net . Plugins implementing this
// callback need to redirect or exit. See https://docs.moodle.org/en/Hub_registration .
$callbacks = get_plugins_with_function('hub_registration');
foreach ($callbacks as $plugintype => $plugins) {
foreach ($plugins as $plugin => $callback) {
$callback('confirm');
}
}
throw new moodle_exception('errorotherhubsnotsupported', 'hub');
}
+4 -3
View File
@@ -40,8 +40,9 @@ if ($unregistration && \core\hub\registration::is_registered()) {
if ($siteunregistrationform->is_cancelled()) {
redirect(new moodle_url('/admin/registration/index.php'));
} else if ($data = $siteunregistrationform->get_data()) {
if (\core\hub\registration::unregister($data->unpublishalladvertisedcourses,
$data->unpublishalluploadedcourses)) {
\core\hub\registration::unregister($data->unpublishalladvertisedcourses,
$data->unpublishalluploadedcourses);
if (!\core\hub\registration::is_registered()) {
redirect(new moodle_url('/admin/registration/index.php'));
}
}
@@ -110,7 +111,7 @@ if (\core\hub\registration::is_registered()) {
echo $OUTPUT->heading(get_string('registerwithmoodleorg', 'admin'));
}
$renderer = $PAGE->get_renderer('core', 'register');
$renderer = $PAGE->get_renderer('core', 'admin');
echo $renderer->moodleorg_registration_message();
$siteregistrationform->display();
-41
View File
@@ -1,41 +0,0 @@
<?php
///////////////////////////////////////////////////////////////////////////
// //
// This file is part of Moodle - http://moodle.org/ //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// //
// 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/>. //
// //
///////////////////////////////////////////////////////////////////////////
/**
* Registration renderer.
* @package moodle
* @subpackage registration
* @copyright 2010 Moodle Pty Ltd (http://moodle.com)
* @author Jerome Mouneyrac
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_register_renderer extends plugin_renderer_base {
/**
* Display message about the benefits of registering on Moodle.org
*
* @return string
*/
public function moodleorg_registration_message() {
return format_text(get_string('registermoodlenet', 'admin'), FORMAT_HTML, ['noclean' => true]);
}
}
+8
View File
@@ -40,6 +40,14 @@ $token = optional_param('token', '', PARAM_TEXT);
admin_externalpage_setup('registrationmoodleorg');
if ($url !== HUB_MOODLEORGHUBURL) {
// Allow other plugins to renew registration on hubs other than moodle.net . Plugins implementing this
// callback need to redirect or exit. See https://docs.moodle.org/en/Hub_registration .
$callbacks = get_plugins_with_function('hub_registration');
foreach ($callbacks as $plugintype => $plugins) {
foreach ($plugins as $plugin => $callback) {
$callback('renew');
}
}
throw new moodle_exception('errorotherhubsnotsupported', 'hub');
}
+10 -1
View File
@@ -1990,7 +1990,7 @@ class core_admin_renderer extends plugin_renderer_base {
if (empty($CFG->docroot) or $environment_result->plugin) {
$report = get_string($stringtouse, 'admin', $rec);
} else {
$report = $this->doc_link(join($linkparts, '/'), get_string($stringtouse, 'admin', $rec));
$report = $this->doc_link(join($linkparts, '/'), get_string($stringtouse, 'admin', $rec), true);
}
// Enclose report text in div so feedback text will be displayed underneath it.
$report = html_writer::div($report);
@@ -2084,4 +2084,13 @@ class core_admin_renderer extends plugin_renderer_base {
return $this->warning(get_string('legacylogginginuse'));
}
}
/**
* Display message about the benefits of registering on Moodle.org
*
* @return string
*/
public function moodleorg_registration_message() {
return format_text(get_string('registermoodlenet', 'admin'), FORMAT_HTML, ['noclean' => true]);
}
}
+1 -1
View File
@@ -245,7 +245,7 @@ if ($roleid) {
$select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
$select->label = get_string('assignanotherrole', 'core_role');
echo $OUTPUT->render($select);
echo '<p><a href="' . $PAGE->url . '">' . get_string('backtoallroles', 'core_role') . '</a></p>';
echo '<p><a href="' . $url . '">' . get_string('backtoallroles', 'core_role') . '</a></p>';
echo '</div>';
} else if (empty($assignableroles)) {
@@ -100,6 +100,8 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
$this->role->shortname = core_text::strtolower(clean_param($this->role->shortname, PARAM_ALPHANUMEXT));
if (empty($this->role->shortname)) {
$this->errors['shortname'] = get_string('errorbadroleshortname', 'core_role');
} else if (core_text::strlen($this->role->shortname) > 100) { // Check if it exceeds the max of 100 characters.
$this->errors['shortname'] = get_string('errorroleshortnametoolong', 'core_role');
}
}
if ($DB->record_exists_select('role', 'shortname = ? and id <> ?', array($this->role->shortname, $this->roleid))) {
@@ -476,7 +478,7 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
}
protected function get_shortname_field($id) {
return '<input type="text" id="' . $id . '" name="' . $id . '" maxlength="254" value="' . s($this->role->shortname) . '"' .
return '<input type="text" id="' . $id . '" name="' . $id . '" maxlength="100" value="' . s($this->role->shortname) . '"' .
' class="form-control"/>';
}
+379
View File
@@ -0,0 +1,379 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for core_role.
*
* @package core_role
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace core_role\privacy;
defined('MOODLE_INTERNAL') || die();
use \core_privacy\local\metadata\collection;
use \core_privacy\local\request\contextlist;
use \core_privacy\local\request\approved_contextlist;
use \core_privacy\local\request\transform;
use \core_privacy\local\request\writer;
/**
* Privacy provider for core_role.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements
\core_privacy\local\metadata\provider,
\core_privacy\local\request\subsystem\provider,
\core_privacy\local\request\subsystem\plugin_provider,
\core_privacy\local\request\user_preference_provider {
/**
* Get information about the user data stored by this plugin.
*
* @param collection $collection An object for storing metadata.
* @return collection The metadata.
*/
public static function get_metadata(collection $collection) : collection {
$rolecapabilities = [
'roleid' => 'privacy:metadata:role_capabilities:roleid',
'capability' => 'privacy:metadata:role_capabilities:capability',
'permission' => 'privacy:metadata:role_capabilities:permission',
'timemodified' => 'privacy:metadata:role_capabilities:timemodified',
'modifierid' => 'privacy:metadata:role_capabilities:modifierid'
];
$roleassignments = [
'roleid' => 'privacy:metadata:role_assignments:roleid',
'userid' => 'privacy:metadata:role_assignments:userid',
'timemodified' => 'privacy:metadata:role_assignments:timemodified',
'modifierid' => 'privacy:metadata:role_assignments:modifierid',
'component' => 'privacy:metadata:role_assignments:component',
'itemid' => 'privacy:metadata:role_assignments:itemid'
];
$collection->add_database_table('role_capabilities', $rolecapabilities,
'privacy:metadata:role_capabilities:tableexplanation');
$collection->add_database_table('role_assignments', $roleassignments,
'privacy:metadata:role_assignments:tableexplanation');
$collection->add_user_preference('definerole_showadvanced',
'privacy:metadata:preference:showadvanced');
return $collection;
}
/**
* Export all user preferences for the plugin.
*
* @param int $userid The userid of the user whose data is to be exported.
*/
public static function export_user_preferences(int $userid) {
$showadvanced = get_user_preferences('definerole_showadvanced', null, $userid);
if ($showadvanced !== null) {
writer::export_user_preference('core_role',
'definerole_showadvanced',
transform::yesno($showadvanced),
get_string('privacy:metadata:preference:showadvanced', 'core_role')
);
}
}
/**
* Return all contexts for this userid.
*
* @param int $userid The user ID.
* @return contextlist The list of context IDs.
*/
public static function get_contexts_for_userid(int $userid) : contextlist {
global $DB;
$contextlist = new contextlist();
// The role_capabilities table contains user data.
$contexts = [
CONTEXT_SYSTEM,
CONTEXT_USER,
CONTEXT_COURSECAT,
CONTEXT_COURSE,
CONTEXT_MODULE,
CONTEXT_BLOCK
];
list($insql, $inparams) = $DB->get_in_or_equal($contexts, SQL_PARAMS_NAMED);
$sql = "SELECT ctx.id
FROM {context} ctx
JOIN {role_capabilities} rc
ON rc.contextid = ctx.id
AND ((ctx.contextlevel {$insql} AND rc.modifierid = :modifierid)
OR (ctx.contextlevel = :contextlevel AND ctx.instanceid = :userid))";
$params = [
'modifierid' => $userid,
'contextlevel' => CONTEXT_USER,
'userid' => $userid
];
$params += $inparams;
$contextlist->add_from_sql($sql, $params);
// The role_assignments table contains user data.
$contexts = [
CONTEXT_SYSTEM,
CONTEXT_USER,
CONTEXT_COURSECAT,
CONTEXT_COURSE,
CONTEXT_MODULE,
CONTEXT_BLOCK
];
list($insql, $inparams) = $DB->get_in_or_equal($contexts, SQL_PARAMS_NAMED);
$params = [
'userid' => $userid,
'modifierid' => $userid
];
$params += $inparams;
$sql = "SELECT ctx.id
FROM {role_assignments} ra
JOIN {context} ctx
ON ctx.id = ra.contextid
AND ctx.contextlevel {$insql}
WHERE (ra.userid = :userid
OR ra.modifierid = :modifierid)
AND ra.component != 'tool_cohortroles'";
$contextlist->add_from_sql($sql, $params);
return $contextlist;
}
/**
* Export all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The list of approved contexts for a user.
*/
public static function export_user_data(approved_contextlist $contextlist) {
global $DB;
if (empty($contextlist)) {
return;
}
$rolesnames = self::get_roles_name();
$userid = $contextlist->get_user()->id;
$ctxfields = \context_helper::get_preload_record_columns_sql('ctx');
list($insql, $inparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
// Role Assignments export data.
$contexts = [
CONTEXT_SYSTEM,
CONTEXT_USER,
CONTEXT_COURSECAT,
CONTEXT_COURSE,
CONTEXT_MODULE,
CONTEXT_BLOCK
];
list($inctxsql, $ctxparams) = $DB->get_in_or_equal($contexts, SQL_PARAMS_NAMED);
$sql = "SELECT ra.id, ra.contextid, ra.roleid, ra.userid, ra.timemodified, ra.modifierid, $ctxfields
FROM {role_assignments} ra
JOIN {context} ctx
ON ctx.id = ra.contextid
AND ctx.contextlevel {$inctxsql}
AND (ra.userid = :userid OR ra.modifierid = :modifierid)
AND ra.component != 'tool_cohortroles'
JOIN {role} r
ON r.id = ra.roleid
WHERE ctx.id {$insql}";
$params = ['userid' => $userid, 'modifierid' => $userid];
$params += $inparams;
$params += $ctxparams;
$assignments = $DB->get_recordset_sql($sql, $params);
foreach ($assignments as $assignment) {
\context_helper::preload_from_record($assignment);
$alldata[$assignment->contextid][$rolesnames[$assignment->roleid]][] = (object)[
'timemodified' => transform::datetime($assignment->timemodified),
'userid' => transform::user($assignment->userid),
'modifierid' => transform::user($assignment->modifierid)
];
}
$assignments->close();
if (!empty($alldata)) {
array_walk($alldata, function($roledata, $contextid) {
$context = \context::instance_by_id($contextid);
array_walk($roledata, function($data, $rolename) use ($context) {
writer::with_context($context)->export_data(
[get_string('privacy:metadata:role_assignments', 'core_role'), $rolename],
(object)$data);
});
});
unset($alldata);
}
// Role Capabilities export data.
$strpermissions = self::get_permissions_name();
$contexts = [
CONTEXT_SYSTEM,
CONTEXT_USER,
CONTEXT_COURSECAT,
CONTEXT_COURSE,
CONTEXT_MODULE,
CONTEXT_BLOCK
];
list($inctxsql, $ctxparams) = $DB->get_in_or_equal($contexts, SQL_PARAMS_NAMED);
$sql = "SELECT rc.id, rc.contextid, rc.capability, rc.permission, rc.timemodified, rc.roleid, $ctxfields
FROM {context} ctx
JOIN {role_capabilities} rc
ON rc.contextid = ctx.id
AND ((ctx.contextlevel {$inctxsql} AND rc.modifierid = :modifierid)
OR (ctx.contextlevel = :contextlevel AND ctx.instanceid = :userid))
WHERE ctx.id {$insql}";
$params = [
'modifierid' => $userid,
'contextlevel' => CONTEXT_USER,
'userid' => $userid
];
$params += $inparams;
$params += $ctxparams;
$capabilities = $DB->get_recordset_sql($sql, $params);
foreach ($capabilities as $capability) {
\context_helper::preload_from_record($capability);
$alldata[$capability->contextid][$rolesnames[$capability->roleid]][] = (object)[
'timemodified' => transform::datetime($capability->timemodified),
'capability' => $capability->capability,
'permission' => $strpermissions[$capability->permission]
];
}
$capabilities->close();
if (!empty($alldata)) {
array_walk($alldata, function($capdata, $contextid) {
$context = \context::instance_by_id($contextid);
array_walk($capdata, function($data, $rolename) use ($context) {
writer::with_context($context)->export_data(
[get_string('privacy:metadata:role_capabilities', 'core_role'), $rolename],
(object)$data);
});
});
}
}
/**
* Exports the data relating to tool_cohortroles component on role assignments by
* Assign user roles to cohort feature.
*
* @param int $userid The user ID.
*/
public static function export_user_role_to_cohort(int $userid) {
global $DB;
$rolesnames = self::get_roles_name();
$sql = "SELECT ra.id, ra.contextid, ra.roleid, ra.userid, ra.timemodified, ra.modifierid, r.id as roleid
FROM {role_assignments} ra
JOIN {context} ctx
ON ctx.id = ra.contextid
AND ctx.contextlevel = :contextlevel
AND ra.component = 'tool_cohortroles'
JOIN {role} r
ON r.id = ra.roleid
WHERE ctx.instanceid = :instanceid
OR ra.userid = :userid";
$params = ['userid' => $userid, 'instanceid' => $userid, 'contextlevel' => CONTEXT_USER];
$assignments = $DB->get_recordset_sql($sql, $params);
foreach ($assignments as $assignment) {
$alldata[$assignment->contextid][$rolesnames[$assignment->roleid]][] = (object)[
'timemodified' => transform::datetime($assignment->timemodified),
'userid' => transform::user($assignment->userid),
'modifierid' => transform::user($assignment->modifierid)
];
}
$assignments->close();
if (!empty($alldata)) {
array_walk($alldata, function($roledata, $contextid) {
$context = \context::instance_by_id($contextid);
array_walk($roledata, function($data, $rolename) use ($context) {
writer::with_context($context)->export_related_data(
[get_string('privacy:metadata:role_cohortroles', 'core_role'), $rolename], 'cohortroles',
(object)$data);
});
});
}
}
/**
* Delete all user data for this context.
*
* @param \context $context The context to delete data for.
*/
public static function delete_data_for_all_users_in_context(\context $context) {
global $DB;
// Don't remove data from role_capabilities.
// Because this data affects the whole Moodle, there are override capabilities.
// Don't belong to the modifier user.
// Remove data from role_assignments.
$DB->delete_records('role_assignments', ['contextid' => $context->id]);
}
/**
* Delete all user data for this user only.
*
* @param approved_contextlist $contextlist The list of approved contexts for a user.
*/
public static function delete_data_for_user(approved_contextlist $contextlist) {
global $DB;
// Don't remove data from role_capabilities.
// Because this data affects the whole Moodle, there are override capabilities.
// Don't belong to the modifier user.
// Remove data from role_assignments.
if (empty($contextlist->count())) {
return;
}
$userid = $contextlist->get_user()->id;
foreach ($contextlist->get_contexts() as $context) {
// Only delete the roles assignments where the user is assigned in all contexts.
$DB->delete_records('role_assignments', ['userid' => $userid, 'contextid' => $context->id]);
}
}
/**
* Delete user entries in role_assignments related to the feature
* Assign user roles to cohort feature.
*
* @param int $userid The user ID.
*/
public static function delete_user_role_to_cohort(int $userid) {
global $DB;
// Delete entries where userid is a mentor by tool_cohortroles.
$DB->delete_records('role_assignments', ['userid' => $userid, 'component' => 'tool_cohortroles']);
}
/**
* Get all the localised roles name in a simple array.
*
* @return array Array of name of the roles by roleid.
*/
protected static function get_roles_name() {
$roles = role_fix_names(get_all_roles(), \context_system::instance(), ROLENAME_ORIGINAL);
$rolesnames = array();
foreach ($roles as $role) {
$rolesnames[$role->id] = $role->localname;
}
return $rolesnames;
}
/**
* Get all the permissions name in a simple array.
*
* @return array Array of permissions name.
*/
protected static function get_permissions_name() {
$strpermissions = array(
CAP_INHERIT => get_string('inherit', 'role'),
CAP_ALLOW => get_string('allow', 'role'),
CAP_PREVENT => get_string('prevent', 'role'),
CAP_PROHIBIT => get_string('prohibit', 'role')
);
return $strpermissions;
}
}
+477
View File
@@ -0,0 +1,477 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy test for core_role
*
* @package core_role
* @category test
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
use \core_role\privacy\provider;
use \core_privacy\local\request\approved_contextlist;
use \core_privacy\local\request\writer;
use \core_privacy\tests\provider_testcase;
use \core_privacy\local\request\transform;
use \tool_cohortroles\api;
/**
* Privacy test for core_role
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_role_privacy_testcase extends provider_testcase {
/**
* Test to check export_user_preferences.
* returns user preferences data.
*/
public function test_export_user_preferences() {
$this->resetAfterTest();
$this->setAdminUser();
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
$showadvanced = 1;
set_user_preference('definerole_showadvanced', $showadvanced);
provider::export_user_preferences($user->id);
$writer = writer::with_context(\context_system::instance());
$prefs = $writer->get_user_preferences('core_role');
$this->assertEquals(transform::yesno($showadvanced), transform::yesno($prefs->definerole_showadvanced->value));
$this->assertEquals(get_string('privacy:metadata:preference:showadvanced', 'core_role'),
$prefs->definerole_showadvanced->description);
}
/**
* Check all contexts are returned if there is any user data for this user.
*/
public function test_get_contexts_for_userid() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
$user = $this->getDataGenerator()->create_user();
$this->assertEmpty(provider::get_contexts_for_userid($user->id));
$user2 = $this->getDataGenerator()->create_user();
$usercontext2 = \context_user::instance($user2->id);
$course = $this->getDataGenerator()->create_course();
$course2 = $this->getDataGenerator()->create_course();
$coursecat = $this->getDataGenerator()->create_category();
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
$cmcontext2 = \context_module::instance($page->cmid);
$coursecontext = \context_course::instance($course->id);
$coursecontext2 = \context_course::instance($course2->id);
$coursecatcontext = \context_coursecat::instance($coursecat->id);
$systemcontext = \context_system::instance();
$block = $this->getDataGenerator()->create_block('online_users');
$blockcontext = \context_block::instance($block->id);
$student = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST);
$manager = $DB->get_record('role', array('shortname' => 'manager'), '*', MUST_EXIST);
// Role assignments, where the user is assigned.
role_assign($student->id, $user->id, $cmcontext2->id);
role_assign($student->id, $user->id, $coursecontext2->id);
role_assign($student->id, $user->id, $blockcontext->id);
role_assign($manager->id, $user->id, $usercontext2->id);
// Role assignments, where the user makes assignments.
$this->setUser($user);
role_assign($student->id, $user2->id, $coursecontext->id);
role_assign($manager->id, $user2->id, $coursecatcontext->id);
role_assign($manager->id, $user2->id, $systemcontext->id);
// Role capabilities.
$this->setUser($user);
$result = assign_capability('moodle/backup:backupcourse', CAP_ALLOW, $student->id, $cmcontext->id);
$contextlist = provider::get_contexts_for_userid($user->id)->get_contextids();
$this->assertCount(8, $contextlist);
$this->assertTrue(in_array($cmcontext->id, $contextlist));
}
/**
* Test that user data is exported correctly.
*/
public function test_export_user_data() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
$user = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$usercontext2 = \context_user::instance($user2->id);
$course = $this->getDataGenerator()->create_course();
$course2 = $this->getDataGenerator()->create_course();
$coursecat = $this->getDataGenerator()->create_category();
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
$cmcontext2 = \context_module::instance($page->cmid);
$coursecontext = \context_course::instance($course->id);
$coursecontext2 = \context_course::instance($course2->id);
$coursecatcontext = \context_coursecat::instance($coursecat->id);
$systemcontext = \context_system::instance();
$block = $this->getDataGenerator()->create_block('online_users');
$blockcontext = \context_block::instance($block->id);
$student = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST);
$manager = $DB->get_record('role', array('shortname' => 'manager'), '*', MUST_EXIST);
$rolesnames = self::get_roles_name();
$subcontextstudent = [
get_string('privacy:metadata:role_assignments', 'core_role'),
$rolesnames[$student->id]
];
$subcontextmanager = [
get_string('privacy:metadata:role_assignments', 'core_role'),
$rolesnames[$manager->id]
];
$subcontextrc = [
get_string('privacy:metadata:role_capabilities', 'core_role'),
$rolesnames[$student->id]
];
// Test over role assignments.
// Where the user is assigned.
role_assign($student->id, $user->id, $cmcontext2->id);
role_assign($student->id, $user->id, $coursecontext2->id);
role_assign($student->id, $user->id, $blockcontext->id);
role_assign($manager->id, $user->id, $usercontext2->id);
// Where the user makes assignments.
$this->setUser($user);
role_assign($manager->id, $user2->id, $coursecatcontext->id);
role_assign($manager->id, $user2->id, $systemcontext->id);
// Test overridable roles in module, course, category, user, system and block.
assign_capability('moodle/backup:backupactivity', CAP_ALLOW, $student->id, $cmcontext->id, true);
assign_capability('moodle/backup:backupcourse', CAP_ALLOW, $student->id, $coursecontext->id, true);
assign_capability('moodle/category:manage', CAP_ALLOW, $student->id, $coursecatcontext->id, true);
assign_capability('moodle/backup:backupcourse', CAP_ALLOW, $student->id, $systemcontext->id, true);
assign_capability('moodle/block:edit', CAP_ALLOW, $student->id, $blockcontext->id, true);
assign_capability('moodle/competency:evidencedelete', CAP_ALLOW, $student->id, $usercontext2->id, true);
// Retrieve the user's context ids.
$contextlist = provider::get_contexts_for_userid($user->id);
$approvedcontextlist = new approved_contextlist($user, 'core_role', $contextlist->get_contextids());
$strpermissions = array(
CAP_INHERIT => get_string('inherit', 'role'),
CAP_ALLOW => get_string('allow', 'role'),
CAP_PREVENT => get_string('prevent', 'role'),
CAP_PROHIBIT => get_string('prohibit', 'role')
);
// Retrieve role capabilities and role assignments.
provider::export_user_data($approvedcontextlist);
foreach ($contextlist as $context) {
$writer = writer::with_context($context);
$this->assertTrue($writer->has_any_data());
if ($context->contextlevel == CONTEXT_MODULE) {
if ($data = $writer->get_data($subcontextstudent)) {
$this->assertEquals($user->id, reset($data)->userid);
}
if ($data = $writer->get_data($subcontextrc)) {
$this->assertEquals('moodle/backup:backupactivity', reset($data)->capability);
$this->assertEquals($strpermissions[CAP_ALLOW], reset($data)->permission);
}
}
if ($context->contextlevel == CONTEXT_COURSE) {
if ($data = $writer->get_data($subcontextstudent)) {
$this->assertEquals($user->id, reset($data)->userid);
}
if ($data = $writer->get_data($subcontextrc)) {
$this->assertEquals('moodle/backup:backupcourse', reset($data)->capability);
}
}
if ($context->contextlevel == CONTEXT_COURSECAT) {
if ($data = $writer->get_data($subcontextmanager)) {
$this->assertEquals($user->id, reset($data)->modifierid);
}
if ($data = $writer->get_data($subcontextrc)) {
$this->assertEquals('moodle/category:manage', reset($data)->capability);
}
}
if ($context->contextlevel == CONTEXT_SYSTEM) {
if ($data = $writer->get_data($subcontextmanager)) {
$this->assertEquals($user->id, reset($data)->modifierid);
}
if ($data = $writer->get_data($subcontextrc)) {
$this->assertEquals('moodle/backup:backupcourse', reset($data)->capability);
}
}
if ($context->contextlevel == CONTEXT_BLOCK) {
if ($data = $writer->get_data($subcontextstudent)) {
$this->assertEquals($user->id, reset($data)->userid);
}
if ($data = $writer->get_data($subcontextrc)) {
$this->assertEquals('moodle/block:edit', reset($data)->capability);
}
}
if ($context->contextlevel == CONTEXT_USER) {
if ($data = $writer->get_data($subcontextmanager)) {
$this->assertEquals($user->id, reset($data)->userid);
}
if ($data = $writer->get_data($subcontextrc)) {
$this->assertEquals('moodle/competency:evidencedelete', reset($data)->capability);
}
}
}
}
/**
* Test for provider::delete_data_for_all_users_in_context().
*/
public function test_delete_data_for_all_users_in_context() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
$user = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$usercontext2 = \context_user::instance($user2->id);
$user3 = $this->getDataGenerator()->create_user();
$course = $this->getDataGenerator()->create_course();
$coursecontext = \context_course::instance($course->id);
$coursecat = $this->getDataGenerator()->create_category();
$coursecatcontext = \context_coursecat::instance($coursecat->id);
$systemcontext = \context_system::instance();
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$student = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST);
$manager = $DB->get_record('role', array('shortname' => 'manager'), '*', MUST_EXIST);
$block = $this->getDataGenerator()->create_block('online_users');
$blockcontext = \context_block::instance($block->id);
// Role assignments CONTEXT_COURSE.
role_assign($student->id, $user->id, $coursecontext->id);
role_assign($student->id, $user2->id, $coursecontext->id);
role_assign($student->id, $user3->id, $coursecontext->id);
$count = $DB->count_records('role_assignments', ['contextid' => $coursecontext->id]);
$this->assertEquals(3, $count);
// Role assignments CONTEXT_COURSECAT.
role_assign($student->id, $user2->id, $coursecatcontext->id);
role_assign($student->id, $user3->id, $coursecatcontext->id);
$count = $DB->count_records('role_assignments', ['contextid' => $coursecatcontext->id]);
$this->assertEquals(2, $count);
// Role assignments CONTEXT_SYSTEM.
role_assign($student->id, $user->id, $systemcontext->id);
$count = $DB->count_records('role_assignments', ['contextid' => $systemcontext->id]);
$this->assertEquals(1, $count);
// Role assignments CONTEXT_MODULE.
role_assign($student->id, $user->id, $cmcontext->id);
$count = $DB->count_records('role_assignments', ['contextid' => $cmcontext->id]);
$this->assertEquals(1, $count);
// Role assigments CONTEXT_BLOCK.
role_assign($student->id, $user->id, $blockcontext->id);
$count = $DB->count_records('role_assignments', ['contextid' => $blockcontext->id]);
$this->assertEquals(1, $count);
// Role assigments CONTEXT_USER.
role_assign($manager->id, $user->id, $usercontext2->id);
$count = $DB->count_records('role_assignments', ['contextid' => $usercontext2->id]);
$this->assertEquals(1, $count);
// Delete data based on CONTEXT_COURSE context.
provider::delete_data_for_all_users_in_context($coursecontext);
// After deletion, the role_assignments entries for this context should have been deleted.
$count = $DB->count_records('role_assignments', ['contextid' => $coursecontext->id]);
$this->assertEquals(0, $count);
// Check it is not removing data on other contexts.
$count = $DB->count_records('role_assignments', ['contextid' => $coursecatcontext->id]);
$this->assertEquals(2, $count);
$count = $DB->count_records('role_assignments', ['contextid' => $systemcontext->id]);
$this->assertEquals(1, $count);
$count = $DB->count_records('role_assignments', ['contextid' => $cmcontext->id]);
$this->assertEquals(1, $count);
// Delete data based on CONTEXT_COURSECAT context.
provider::delete_data_for_all_users_in_context($coursecatcontext);
// After deletion, the role_assignments entries for this context should have been deleted.
$count = $DB->count_records('role_assignments', ['contextid' => $coursecatcontext->id]);
$this->assertEquals(0, $count);
// Delete data based on CONTEXT_SYSTEM context.
provider::delete_data_for_all_users_in_context($systemcontext);
// After deletion, the role_assignments entries for this context should have been deleted.
$count = $DB->count_records('role_assignments', ['contextid' => $systemcontext->id]);
$this->assertEquals(0, $count);
// Delete data based on CONTEXT_MODULE context.
provider::delete_data_for_all_users_in_context($cmcontext);
// After deletion, the role_assignments entries for this context should have been deleted.
$count = $DB->count_records('role_assignments', ['contextid' => $cmcontext->id]);
$this->assertEquals(0, $count);
// Delete data based on CONTEXT_BLOCK context.
provider::delete_data_for_all_users_in_context($usercontext2);
// After deletion, the role_assignments entries for this context should have been deleted.
$count = $DB->count_records('role_assignments', ['contextid' => $usercontext2->id]);
$this->assertEquals(0, $count);
}
/**
* Test for provider::delete_data_for_user().
*/
public function test_delete_data_for_user() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
$user = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$usercontext2 = \context_user::instance($user2->id);
$user3 = $this->getDataGenerator()->create_user();
$usercontext3 = \context_user::instance($user3->id);
$course = $this->getDataGenerator()->create_course();
$course2 = $this->getDataGenerator()->create_course();
$course3 = $this->getDataGenerator()->create_course();
$coursecontext = \context_course::instance($course->id);
$coursecontext2 = \context_course::instance($course2->id);
$coursecontext3 = \context_course::instance($course3->id);
$coursecat = $this->getDataGenerator()->create_category();
$coursecatcontext = \context_coursecat::instance($coursecat->id);
$systemcontext = \context_system::instance();
$cm = $this->getDataGenerator()->create_module('chat', ['course' => $course->id]);
$cmcontext = \context_module::instance($cm->cmid);
$student = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST);
$manager = $DB->get_record('role', array('shortname' => 'manager'), '*', MUST_EXIST);
$block = $this->getDataGenerator()->create_block('online_users');
$blockcontext = \context_block::instance($block->id);
// Role assignments, Where the user is assigned.
role_assign($student->id, $user->id, $coursecontext->id);
role_assign($student->id, $user->id, $coursecontext2->id);
role_assign($student->id, $user->id, $coursecatcontext->id);
role_assign($student->id, $user->id, $cmcontext->id);
role_assign($student->id, $user->id, $systemcontext->id);
role_assign($student->id, $user->id, $blockcontext->id);
role_assign($manager->id, $user->id, $usercontext2->id);
role_assign($manager->id, $user->id, $usercontext3->id);
$count = $DB->count_records('role_assignments', ['userid' => $user->id]);
$this->assertEquals(8, $count);
// Role assignments, where the user makes assignments.
$this->setUser($user);
role_assign($student->id, $user2->id, $coursecontext3->id);
role_assign($student->id, $user3->id, $coursecontext3->id);
$count = $DB->count_records('role_assignments', ['modifierid' => $user->id]);
$this->assertEquals(2, $count);
$contextlist = provider::get_contexts_for_userid($user->id);
$approvedcontextlist = new approved_contextlist($user, 'core_role', $contextlist->get_contextids());
provider::delete_data_for_user($approvedcontextlist);
// After deletion, the role_assignments assigned to the user should have been deleted.
$count = $DB->count_records('role_assignments', ['userid' => $user->id]);
$this->assertEquals(0, $count);
// After deletion, the role_assignments assigned by the user should not have been deleted.
$count = $DB->count_records('role_assignments', ['modifierid' => $user->id]);
$this->assertEquals(2, $count);
}
/**
* Export for a user with a key against a script where no instance is specified.
*/
public function test_export_user_role_to_cohort() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
// Assign user roles to cohort.
$user = $this->getDataGenerator()->create_user();
$contextuser = \context_user::instance($user->id);
$teacher = $DB->get_record('role', array('shortname' => 'teacher'), '*', MUST_EXIST);
$cohort = $this->getDataGenerator()->create_cohort();
$userassignover = $this->getDataGenerator()->create_user();
$contextuserassignover = \context_user::instance($userassignover->id);
cohort_add_member($cohort->id, $userassignover->id);
$this->setAdminUser();
$params = (object) array(
'userid' => $user->id,
'roleid' => $teacher->id,
'cohortid' => $cohort->id
);
api::create_cohort_role_assignment($params);
api::sync_all_cohort_roles();
$rolesnames = self::get_roles_name();
$subcontextteacher = [
get_string('privacy:metadata:role_cohortroles', 'core_role'),
$rolesnames[$teacher->id]
];
// Test User is assigned role teacher to cohort.
provider::export_user_role_to_cohort($user->id);
$writer = writer::with_context($contextuserassignover);
$this->assertTrue($writer->has_any_data());
$exported = $writer->get_related_data($subcontextteacher, 'cohortroles');
$this->assertEquals($user->id, reset($exported)->userid);
// Test User is member of a cohort which User2 is assigned to role to this cohort.
$user2 = $this->getDataGenerator()->create_user();
$cohort2 = $this->getDataGenerator()->create_cohort();
cohort_add_member($cohort2->id, $user->id);
$params = (object) array(
'userid' => $user2->id,
'roleid' => $teacher->id,
'cohortid' => $cohort2->id
);
api::create_cohort_role_assignment($params);
api::sync_all_cohort_roles();
provider::export_user_role_to_cohort($user->id);
$writer = writer::with_context($contextuser);
$this->assertTrue($writer->has_any_data());
$exported = $writer->get_related_data($subcontextteacher, 'cohortroles');
$this->assertEquals($user2->id, reset($exported)->userid);
}
/**
* Test for provider::delete_user_role_to_cohort().
*/
public function test_delete_user_role_to_cohort() {
global $DB;
$this->resetAfterTest();
$this->setAdminUser();
// Assign user roles to cohort.
$user = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$user3 = $this->getDataGenerator()->create_user();
$user4 = $this->getDataGenerator()->create_user();
$teacher = $DB->get_record('role', array('shortname' => 'teacher'), '*', MUST_EXIST);
$cohort = $this->getDataGenerator()->create_cohort();
cohort_add_member($cohort->id, $user2->id);
cohort_add_member($cohort->id, $user3->id);
cohort_add_member($cohort->id, $user4->id);
$this->setAdminUser();
$params = (object) array(
'userid' => $user->id,
'roleid' => $teacher->id,
'cohortid' => $cohort->id
);
api::create_cohort_role_assignment($params);
api::sync_all_cohort_roles();
$count = $DB->count_records('role_assignments', ['userid' => $user->id, 'component' => 'tool_cohortroles']);
$this->assertEquals(3, $count);
provider::delete_user_role_to_cohort($user->id);
$count = $DB->count_records('role_assignments', ['userid' => $user->id, 'component' => 'tool_cohortroles']);
$this->assertEquals(0, $count);
}
/**
* Supoort function to get all the localised roles name
* in a simple array for testing.
*
* @return array Array of name of the roles by roleid.
*/
protected static function get_roles_name() {
$roles = role_fix_names(get_all_roles(), \context_system::instance(), ROLENAME_ORIGINAL);
$rolesnames = array();
foreach ($roles as $role) {
$rolesnames[$role->id] = $role->localname;
}
return $rolesnames;
}
}
+5 -4
View File
@@ -32,15 +32,16 @@ $focus = '';
// now we'll deal with the case that the admin has submitted the form with changed settings
if ($data = data_submitted() and confirm_sesskey() and isset($data->action) and $data->action == 'save-settings') {
require_capability('moodle/site:config', $context);
if (admin_write_settings($data)) {
redirect($PAGE->url, get_string('changessaved'), null, \core\output\notification::NOTIFY_SUCCESS);
}
$count = admin_write_settings($data);
if (!empty($adminroot->errors)) {
$errormsg = get_string('errorwithsettings', 'admin');
$firsterror = reset($adminroot->errors);
$focus = $firsterror->id;
} else {
// No errors. Did we change any setting? If so, then redirect with success.
if ($count) {
redirect($PAGE->url, get_string('changessaved'), null, \core\output\notification::NOTIFY_SUCCESS);
}
redirect($PAGE->url);
}
}
+86 -57
View File
@@ -28,85 +28,112 @@ admin_externalpage_setup('searchareas');
$areaid = optional_param('areaid', null, PARAM_ALPHAEXT);
$action = optional_param('action', null, PARAM_ALPHA);
$indexingenabled = \core_search\manager::is_indexing_enabled(); // This restricts many of the actions on this page.
// Get a search manager instance, which we'll need for display and to handle some actions.
try {
$searchmanager = \core_search\manager::instance();
} catch (core_search\engine_exception $searchmanagererror) {
// Continue, we return an error later depending on the requested action.
// In action cases, well throw this exception below. In non-action cases, we produce a lang string error.
}
echo $OUTPUT->header();
// Handle all the actions.
if ($action) {
require_sesskey();
// If dealing with an areaid, we need to check that the area exists.
if ($areaid) {
// We need to check that the area exists.
$area = \core_search\manager::get_search_area($areaid);
if ($area === false) {
throw new moodle_exception('invalidrequest');
}
}
// All actions but enable/disable need the search engine to be ready.
if ($action !== 'enable' && $action !== 'disable') {
if (!empty($searchmanagererror)) {
throw $searchmanagererror;
// All the indexing actions.
if (in_array($action, ['delete', 'indexall', 'reindexall', 'deleteall'])) {
// All of these actions require that indexing is enabled.
if ($indexingenabled) {
// For all of these actions, we strictly need a manager instance.
if (isset($searchmanagererror)) {
throw $searchmanagererror;
}
switch ($action) {
case 'delete':
$searchmanager->delete_index($areaid);
\core\notification::success(get_string('searchindexdeleted', 'admin'));
break;
case 'indexall':
$searchmanager->index();
\core\notification::success(get_string('searchindexupdated', 'admin'));
break;
case 'reindexall':
$searchmanager->index(true);
\core\notification::success(get_string('searchreindexed', 'admin'));
break;
case 'deleteall':
$searchmanager->delete_index();
\core\notification::success(get_string('searchalldeleted', 'admin'));
break;
default:
break;
}
// Redirect back to the main page after taking action.
redirect(new moodle_url('/admin/searchareas.php'));
}
} else if (in_array($action, ['enable', 'disable'])) {
switch ($action) {
case 'enable':
$area->set_enabled(true);
\core\notification::success(get_string('searchareaenabled', 'admin'));
break;
case 'disable':
$area->set_enabled(false);
core\notification::success(get_string('searchareadisabled', 'admin'));
break;
default:
break;
}
}
switch ($action) {
case 'enable':
$area->set_enabled(true);
echo $OUTPUT->notification(get_string('searchareaenabled', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'disable':
$area->set_enabled(false);
echo $OUTPUT->notification(get_string('searchareadisabled', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'delete':
$search = \core_search\manager::instance();
$search->delete_index($areaid);
echo $OUTPUT->notification(get_string('searchindexdeleted', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'indexall':
$searchmanager->index();
echo $OUTPUT->notification(get_string('searchindexupdated', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'reindexall':
$searchmanager->index(true);
echo $OUTPUT->notification(get_string('searchreindexed', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'deleteall':
$searchmanager->delete_index();
echo $OUTPUT->notification(get_string('searchalldeleted', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
default:
throw new moodle_exception('invalidaction');
break;
redirect(new moodle_url('/admin/searchareas.php'));
} else {
// Invalid action.
throw new moodle_exception('invalidaction');
}
}
$searchareas = \core_search\manager::get_search_areas_list();
if (empty($searchmanagererror)) {
$areasconfig = $searchmanager->get_areas_config($searchareas);
// Display.
if (isset($searchmanager) && $indexingenabled) {
\core\notification::info(get_string('indexinginfo', 'admin'));
} else if (isset($searchmanager)) {
$params = (object) [
'url' => (new moodle_url("/admin/settings.php?section=manageglobalsearch#admin-searchindexwhendisabled"))->out(false)
];
\core\notification::error(get_string('indexwhendisabledfullnotice', 'search', $params));
} else {
$areasconfig = false;
}
if (!empty($searchmanagererror)) {
// In non-action cases, init errors are translated and displayed to the user as error notifications.
$errorstr = get_string($searchmanagererror->errorcode, $searchmanagererror->module, $searchmanagererror->a);
echo $OUTPUT->notification($errorstr, \core\output\notification::NOTIFY_ERROR);
} else {
echo $OUTPUT->notification(get_string('indexinginfo', 'admin'), \core\output\notification::NOTIFY_INFO);
\core\notification::error($errorstr);
}
echo $OUTPUT->header();
$table = new html_table();
$table->id = 'core-search-areas';
$table->head = [
get_string('searcharea', 'search'),
get_string('enable'),
get_string('newestdocindexed', 'admin'),
get_string('searchlastrun', 'admin'),
get_string('searchindexactions', 'admin')
];
$table->head = array(get_string('searcharea', 'search'), get_string('enable'), get_string('newestdocindexed', 'admin'),
get_string('searchlastrun', 'admin'), get_string('searchindexactions', 'admin'));
$searchareas = \core_search\manager::get_search_areas_list();
$areasconfig = isset($searchmanager) ? $searchmanager->get_areas_config($searchareas) : false;
foreach ($searchareas as $area) {
$areaid = $area->get_area_id();
$columns = array(new html_table_cell($area->get_visible_name()));
@@ -116,7 +143,7 @@ foreach ($searchareas as $area) {
new pix_icon('t/hide', get_string('disable'), 'moodle', array('title' => '', 'class' => 'iconsmall')),
null, array('title' => get_string('disable')));
if ($areasconfig) {
if ($areasconfig && $indexingenabled) {
$columns[] = $areasconfig[$areaid]->lastindexrun;
if ($areasconfig[$areaid]->indexingstart) {
@@ -135,7 +162,11 @@ foreach ($searchareas as $area) {
$columns[] = html_writer::link(admin_searcharea_action_url('delete', $areaid), 'Delete index');
} else {
$blankrow = new html_table_cell(get_string('searchnotavailable', 'admin'));
if (!$areasconfig) {
$blankrow = new html_table_cell(get_string('searchnotavailable', 'admin'));
} else {
$blankrow = new html_table_cell(get_string('indexwhendisabledshortnotice', 'search'));
}
$blankrow->colspan = 3;
$columns[] = $blankrow;
}
@@ -154,10 +185,7 @@ foreach ($searchareas as $area) {
}
// Cross-search area tasks.
$options = array();
if (!empty($searchmanagererror)) {
$options['disabled'] = true;
}
$options = (isset($searchmanager) && $indexingenabled) ? [] : ['disabled' => true];
echo $OUTPUT->box_start('search-areas-actions');
echo $OUTPUT->single_button(admin_searcharea_action_url('indexall'), get_string('searchupdateindex', 'admin'), 'get', $options);
echo $OUTPUT->single_button(admin_searcharea_action_url('reindexall'), get_string('searchreindexindex', 'admin'), 'get', $options);
@@ -165,6 +193,7 @@ echo $OUTPUT->single_button(admin_searcharea_action_url('deleteall'), get_string
echo $OUTPUT->box_end();
echo html_writer::table($table);
echo $OUTPUT->footer();
/**
+9 -4
View File
@@ -38,12 +38,17 @@ if (!($settingspage->check_access())) {
$statusmsg = '';
$errormsg = '';
if ($data = data_submitted() and confirm_sesskey()) {
if (admin_write_settings($data)) {
redirect($PAGE->url, get_string('changessaved'), null, \core\output\notification::NOTIFY_SUCCESS);
}
// Form is submitted with changed settings. Do not want to execute when modifying a block.
if ($data = data_submitted() and confirm_sesskey() and isset($data->action) and $data->action == 'save-settings') {
$count = admin_write_settings($data);
// Regardless of whether any setting change was written (a positive count), check validation errors for those that didn't.
if (empty($adminroot->errors)) {
// No errors. Did we change any setting? If so, then redirect with success.
if ($count) {
redirect($PAGE->url, get_string('changessaved'), null, \core\output\notification::NOTIFY_SUCCESS);
}
// We didn't change a setting.
switch ($return) {
case 'site': redirect("$CFG->wwwroot/");
case 'admin': redirect("$CFG->wwwroot/$CFG->admin/");
+1 -1
View File
@@ -199,7 +199,7 @@ preferences,moodle|/user/preferences.php|preferences',
// "documentation" settingpage
$temp = new admin_settingpage('documentation', new lang_string('moodledocs'));
$temp->add(new admin_setting_configtext('docroot', new lang_string('docroot', 'admin'), new lang_string('configdocroot', 'admin'), 'http://docs.moodle.org', PARAM_URL));
$temp->add(new admin_setting_configtext('docroot', new lang_string('docroot', 'admin'), new lang_string('configdocroot', 'admin'), 'https://docs.moodle.org', PARAM_URL));
$ltemp = array('' => get_string('forceno'));
$ltemp += get_string_manager()->get_list_of_translations(true);
$temp->add(new admin_setting_configselect('doclang', get_string('doclang', 'admin'), get_string('configdoclang', 'admin'), '', $ltemp));
+3 -1
View File
@@ -28,7 +28,9 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$ADMIN->add('development', $temp);
// "Profiling" settingpage (conditionally if the 'xhprof' extension is available only).
$xhprofenabled = extension_loaded('xhprof') || extension_loaded('tideways');
$xhprofenabled = extension_loaded('tideways_xhprof');
$xhprofenabled = $xhprofenabled || extension_loaded('tideways');
$xhprofenabled = $xhprofenabled || extension_loaded('xhprof');
$temp = new admin_settingpage('profiling', new lang_string('profiling', 'admin'), 'moodle/site:config', !$xhprofenabled);
// Main profiling switch.
$temp->add(new admin_setting_configcheckbox('profilingenabled', new lang_string('profilingenabled', 'admin'), new lang_string('profilingenabled_help', 'admin'), false));
+1 -2
View File
@@ -54,8 +54,7 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
3600 => new lang_string('numminutes', '', 60))));
$temp->add(new admin_setting_configcheckbox('extendedusernamechars', new lang_string('extendedusernamechars', 'admin'), new lang_string('configextendedusernamechars', 'admin'), 0));
$temp->add(new admin_setting_configtext('sitepolicy', new lang_string('sitepolicy', 'admin'), new lang_string('sitepolicy_help', 'admin'), '', PARAM_RAW));
$temp->add(new admin_setting_configtext('sitepolicyguest', new lang_string('sitepolicyguest', 'admin'), new lang_string('sitepolicyguest_help', 'admin'), (isset($CFG->sitepolicy) ? $CFG->sitepolicy : ''), PARAM_RAW));
$temp->add(new admin_setting_configcheckbox('extendedusernamechars', new lang_string('extendedusernamechars', 'admin'), new lang_string('configextendedusernamechars', 'admin'), 0));
$temp->add(new admin_setting_configcheckbox('keeptagnamecase', new lang_string('keeptagnamecase','admin'),new lang_string('configkeeptagnamecase', 'admin'),'1'));
+46
View File
@@ -4,6 +4,7 @@
$ADMIN->add('users', new admin_category('accounts', new lang_string('accounts', 'admin')));
$ADMIN->add('users', new admin_category('roles', new lang_string('permissions', 'role')));
$ADMIN->add('users', new admin_category('privacy', new lang_string('privacyandpolicies', 'admin')));
if ($hassiteconfig
or has_capability('moodle/user:create', $systemcontext)
@@ -209,3 +210,48 @@ if ($hassiteconfig
$ADMIN->add('roles', new admin_externalpage('checkpermissions', new lang_string('checkglobalpermissions', 'role'), "$CFG->wwwroot/$CFG->admin/roles/check.php?contextid=".$systemcontext->id, array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:manage')));
} // end of speedup
// Privacy settings.
if ($hassiteconfig) {
$temp = new admin_settingpage('privacysettings', new lang_string('privacysettings', 'admin'));
$options = array(
0 => get_string('no'),
1 => get_string('yes')
);
$url = new moodle_url('/admin/settings.php?section=supportcontact');
$url = $url->out();
$setting = new admin_setting_configselect('agedigitalconsentverification',
new lang_string('agedigitalconsentverification', 'admin'),
new lang_string('agedigitalconsentverification_desc', 'admin', $url), 0, $options);
$setting->set_force_ltr(true);
$temp->add($setting);
// See {@link https://gdpr-info.eu/art-8-gdpr/}.
$ageofdigitalconsentmap = implode(PHP_EOL, [
'*, 16',
'AT, 14',
'ES, 14',
'US, 13'
]);
$setting = new admin_setting_agedigitalconsentmap('agedigitalconsentmap',
new lang_string('ageofdigitalconsentmap', 'admin'),
new lang_string('ageofdigitalconsentmap_desc', 'admin'),
$ageofdigitalconsentmap,
PARAM_RAW
);
$temp->add($setting);
$ADMIN->add('privacy', $temp);
// Policy settings.
$temp = new admin_settingpage('policysettings', new lang_string('policysettings', 'admin'));
$temp->add(new admin_settings_sitepolicy_handler_select('sitepolicyhandler', new lang_string('sitepolicyhandler', 'core_admin'),
new lang_string('sitepolicyhandler_desc', 'core_admin')));
$temp->add(new admin_setting_configtext('sitepolicy', new lang_string('sitepolicy', 'core_admin'),
new lang_string('sitepolicy_help', 'core_admin'), '', PARAM_RAW));
$temp->add(new admin_setting_configtext('sitepolicyguest', new lang_string('sitepolicyguest', 'core_admin'),
new lang_string('sitepolicyguest_help', 'core_admin'), (isset($CFG->sitepolicy) ? $CFG->sitepolicy : ''), PARAM_RAW));
$ADMIN->add('privacy', $temp);
}
+1
View File
@@ -40,6 +40,7 @@
<div class="settingsform clearfix">
{{#params}}
<input type="hidden" name="{{name}}" value="{{value}}">
<input type="hidden" name="action" value="save-settings">
{{/params}}
<input type="hidden" name="sesskey" value="{{sesskey}}">
<input type="hidden" name="return" value="{{return}}">
@@ -119,6 +119,9 @@ class models_list implements \renderable, \templatable {
debugging("The time splitting method '{$modeldata->timesplitting}' should include a '{$identifier}_help'
string to describe its purpose.", DEBUG_DEVELOPER);
}
} else {
$helpicon = new \help_icon('timesplittingnotdefined', 'tool_analytics');
$modeldata->timesplittinghelp = $helpicon->export_for_template($output);
}
// Has this model generated predictions?.
@@ -207,19 +210,22 @@ class models_list implements \renderable, \templatable {
}
// Enable / disable.
if ($model->is_enabled()) {
$action = 'disable';
$text = get_string('disable');
$icontype = 't/block';
} else {
$action = 'enable';
$text = get_string('enable');
$icontype = 'i/checked';
if ($model->is_enabled() || !empty($modeldata->timesplitting)) {
// If there is no timesplitting method set, the model can not be enabled.
if ($model->is_enabled()) {
$action = 'disable';
$text = get_string('disable');
$icontype = 't/block';
} else {
$action = 'enable';
$text = get_string('enable');
$icontype = 'i/checked';
}
$urlparams['action'] = $action;
$url = new \moodle_url('model.php', $urlparams);
$icon = new \action_menu_link_secondary($url, new \pix_icon($icontype, $text), $text);
$actionsmenu->add($icon);
}
$urlparams['action'] = $action;
$url = new \moodle_url('model.php', $urlparams);
$icon = new \action_menu_link_secondary($url, new \pix_icon($icontype, $text), $text);
$actionsmenu->add($icon);
// Export training data.
if (!$model->is_static() && $model->is_trained()) {
@@ -264,8 +270,13 @@ class models_list implements \renderable, \templatable {
} else {
$url = new \moodle_url('/admin/settings.php', array('section' => 'analyticssettings'),
'id_s_analytics_onlycli');
$langstrid = 'clievaluationandpredictionsnoadmin';
if (is_siteadmin()) {
$langstrid = 'clievaluationandpredictions';
}
$data->infos = array(
(object)array('message' => get_string('clievaluationandpredictions', 'tool_analytics', $url->out()),
(object)array('message' => get_string($langstrid, 'tool_analytics', $url->out()),
'closebutton' => true)
);
}
@@ -0,0 +1,46 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_analytics.
*
* @package tool_analytics
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_analytics\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_analytics implementing null_provider.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
@@ -117,12 +117,21 @@ function tool_analytics_calculate_course_dates($course, $options) {
$notification = $course->shortname . ' (id = ' . $course->id . '): ';
$originalenddate = null;
$guessedstartdate = null;
$guessedenddate = null;
$samestartdate = null;
$lowerenddate = null;
if ($options['guessstart'] || $options['guessall']) {
$originalstartdate = $course->startdate;
$guessedstartdate = $courseman->guess_start();
if ($guessedstartdate == $originalstartdate) {
$samestartdate = ($guessedstartdate == $originalstartdate);
$lowerenddate = ($course->enddate && ($course->enddate < $guessedstartdate));
if ($samestartdate) {
if (!$guessedstartdate) {
$notification .= PHP_EOL . ' ' . get_string('cantguessstartdate', 'tool_analytics');
} else {
@@ -131,6 +140,9 @@ function tool_analytics_calculate_course_dates($course, $options) {
}
} else if (!$guessedstartdate) {
$notification .= PHP_EOL . ' ' . get_string('cantguessstartdate', 'tool_analytics');
} else if ($lowerenddate) {
$notification .= PHP_EOL . ' ' . get_string('cantguessstartdate', 'tool_analytics') . ': ' .
get_string('enddatebeforestartdate', 'error') . ' - ' . userdate($guessedstartdate);
} else {
// Update it to something we guess.
@@ -151,6 +163,10 @@ function tool_analytics_calculate_course_dates($course, $options) {
if ($options['guessend'] || $options['guessall']) {
if (!empty($lowerenddate) && !empty($guessedstartdate)) {
$course->startdate = $guessedstartdate;
}
$originalenddate = $course->enddate;
$format = course_get_format($course);
@@ -196,10 +212,8 @@ function tool_analytics_calculate_course_dates($course, $options) {
$updateit = true;
}
if ($options['update']) {
if ($course->enddate > $course->startdate) {
update_course($course);
}
if ($options['update'] && $updateit) {
update_course($course);
}
}
}
@@ -33,6 +33,7 @@ $string['clearpredictions'] = 'Clear predictions';
$string['clearmodelpredictions'] = 'Are you sure you want to clear all "{$a}" predictions?';
$string['clienablemodel'] = 'You can enable the model by selecting a time-splitting method by its ID. Note that you can also enable it later using the web interface (\'none\' to exit).';
$string['clievaluationandpredictions'] = 'A scheduled task iterates through enabled models and gets predictions. Models evaluation via the web interface is disabled. You can allow these processes to be executed manually via the web interface by disabling the <a href="{$a}">\'onlycli\'</a> analytics setting.';
$string['clievaluationandpredictionsnoadmin'] = 'A scheduled task iterates through enabled models and gets predictions. Models evaluation via the web interface is disabled. It may be enabled by a site administrator.';
$string['editmodel'] = 'Edit "{$a}" model';
$string['edittrainedwarning'] = 'This model has already been trained. Note that changing its indicators or its time-splitting method will delete its previous predictions and start generating new predictions.';
$string['enabled'] = 'Enabled';
@@ -82,6 +83,8 @@ $string['previouspage'] = 'Previous page';
$string['samestartdate'] = 'Current start date is good';
$string['sameenddate'] = 'Current end date is good';
$string['target'] = 'Target';
$string['timesplittingnotdefined'] = 'Time splitting is not defined.';
$string['timesplittingnotdefined_help'] = 'You need to select a time-splitting method before enabling the model.';
$string['trainandpredictmodel'] = 'Training model and calculating predictions';
$string['trainingprocessfinished'] = 'Training process finished';
$string['trainingresults'] = 'Training results';
@@ -89,3 +92,4 @@ $string['trainmodels'] = 'Train models';
$string['viewlog'] = 'Log';
$string['weeksenddateautomaticallyset'] = 'End date automatically set based on start date and the number of sections';
$string['weeksenddatedefault'] = 'End date automatically calculated from the course start date.';
$string['privacy:metadata'] = 'The Analytic models plugin does not store any personal data.';
@@ -160,6 +160,9 @@
{{/timesplitting}}
{{^timesplitting}}
{{#str}}notdefined, tool_analytics{{/str}}
{{#timesplittinghelp}}
{{>core/help_icon}}
{{/timesplittinghelp}}
{{/timesplitting}}
</td>
<td>
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2017050500; // Requires this Moodle version.
$plugin->version = 2017111300; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2017110800; // Requires this Moodle version.
$plugin->component = 'tool_analytics'; // Full name of the plugin (used for diagnostics).
@@ -0,0 +1,73 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_assignmentupgrade.
*
* @package tool_assignmentupgrade
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_assignmentupgrade\privacy;
use core_privacy\local\metadata\collection;
use core_privacy\local\request\writer;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_assignmentupgrade implementing metadata, plugin, and user_preference providers.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements
\core_privacy\local\metadata\provider,
\core_privacy\local\request\user_preference_provider {
/**
* Returns meta data about this system.
*
* @param collection $collection The initialised collection to add items to.
* @return collection A listing of user data stored through this system.
*/
public static function get_metadata(collection $collection) : collection {
$collection->add_user_preference(
'tool_assignmentupgrade_perpage',
'privacy:metadata:preference:perpage'
);
return $collection;
}
/**
* Export all user preferences for the plugin.
*
* @param int $userid The userid of the user whose data is to be exported.
*/
public static function export_user_preferences(int $userid) {
$perpage = get_user_preferences('tool_assignmentupgrade_perpage', null, $userid);
if ($perpage !== null) {
writer::export_user_preference(
'tool_assignmentupgrade',
'perpage',
$perpage,
get_string('privacy:metadata:preference:perpage', 'tool_assignmentupgrade')
);
}
}
}
@@ -58,3 +58,4 @@ $string['upgradeallconfirm'] = 'Upgrade all assignments?';
$string['upgradeprogress'] = 'Upgrade assignment {$a->current} of {$a->total}';
$string['upgradesingle'] = 'Upgrade single assignment';
$string['viewcourse'] = 'View the course with the converted assignment';
$string['privacy:metadata:preference:perpage'] = 'The assignment upgrade records per page preference set for the user.';
@@ -0,0 +1,75 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy tests for tool_assignmentupgrade.
*
* @package tool_assignmentupgrade
* @category test
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
use \core_privacy\tests\provider_testcase;
use \core_privacy\local\request\writer;
use \tool_assignmentupgrade\privacy\provider;
/**
* Unit tests for tool_assignmentupgrade/classes/privacy/policy
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_assignmentupgrade_privacy_testcase extends provider_testcase {
/**
* Overriding setUp() function to always reset after tests.
*/
public function setUp() {
$this->resetAfterTest(true);
}
/**
* Test for provider::test_export_user_preferences().
*/
public function test_export_user_preferences() {
// Test setup.
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
// Add a user home page preference for the User.
set_user_preference('tool_assignmentupgrade_perpage', '100', $user);
// Test the user preference exists.
$params = [
'userid' => $user->id,
'name' => 'tool_assignmentupgrade_perpage'
];
// Test the user preferences export contains 1 user preference record for the User.
provider::export_user_preferences($user->id);
$contextuser = context_user::instance($user->id);
$writer = writer::with_context($contextuser);
$this->assertTrue($writer->has_any_data());
$exportedpreferences = $writer->get_user_preferences('tool_assignmentupgrade');
$this->assertCount(1, (array) $exportedpreferences);
$this->assertEquals('100', $exportedpreferences->perpage->value);
}
}
+3 -3
View File
@@ -24,7 +24,7 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500;
$plugin->requires = 2017050500;
$plugin->version = 2017111300;
$plugin->requires = 2017110800;
$plugin->component = 'tool_assignmentupgrade';
$plugin->dependencies = array('mod_assign' => 2017050500);
$plugin->dependencies = array('mod_assign' => 2017110800);
@@ -0,0 +1,46 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_availabilityconditions.
*
* @package tool_availabilityconditions
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_availabilityconditions\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_availabilityconditions implementing null_provider.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
@@ -24,3 +24,4 @@
$string['manageplugins'] = 'Manage restrictions';
$string['pluginname'] = 'Availability condition management';
$string['privacy:metadata'] = 'The Availability condition management plugin does not store any personal data.';
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500;
$plugin->requires = 2017050500;
$plugin->version = 2017111300;
$plugin->requires = 2017110800;
$plugin->component = 'tool_availabilityconditions';
@@ -0,0 +1,46 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_behat.
*
* @package tool_behat
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_behat\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_behat implementing null_provider.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
+1 -1
View File
@@ -398,7 +398,7 @@ function print_combined_install_output($processes) {
// Show process name in first row.
foreach ($processes as $name => $process) {
// If we don't have enough space to show full run name then show runX.
if ($lengthofprocessline < strlen($name + 2)) {
if ($lengthofprocessline < strlen($name) + 2) {
$name = substr($name, -5);
}
// One extra padding as we are adding | separator for rest of the data.
+1
View File
@@ -50,3 +50,4 @@ $string['wrongbehatsetup'] = 'Something is wrong with the behat setup and so ste
<li>$CFG->behat_dataroot, $CFG->behat_prefix and $CFG->behat_wwwroot are set in config.php with different values from $CFG->dataroot, $CFG->prefix and $CFG->wwwroot.</li>
<li>You ran "{$a->behatinit}" from your Moodle root directory.</li>
<li>Dependencies are installed in vendor/ and {$a->behatcommand} file has execution permissions.</li></ul>';
$string['privacy:metadata'] = 'The Acceptance testing plugin does not store any personal data.';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2017050500; // Requires this Moodle version
$plugin->version = 2017111300; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2017110800; // Requires this Moodle version
$plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
@@ -0,0 +1,46 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_capability.
*
* @package tool_capability
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_capability\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_capability implementing null_provider.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
@@ -34,3 +34,4 @@ $string['pluginname'] = 'Capability overview';
$string['reportforcapability'] = 'Report for capability \'{$a}\'';
$string['reportsettings'] = 'Report settings';
$string['roleslabel'] = 'Roles:';
$string['privacy:metadata'] = 'The Capability overview plugin does not store any personal data.';
+2 -2
View File
@@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2017050500; // Requires this Moodle version.
$plugin->version = 2017111300; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2017110800; // Requires this Moodle version.
$plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
+1 -1
View File
@@ -167,7 +167,7 @@ class api {
$params['roleid'] = $roleid;
$params['userid'] = $userid;
$sql = 'SELECT u.id AS userid, ra.id, ctx.id AS contextid
$sql = 'SELECT DISTINCT u.id AS userid, ra.id, ctx.id AS contextid
FROM {user} u
JOIN {cohort_members} cm ON u.id = cm.userid
JOIN {context} ctx ON u.id = ctx.instanceid AND ctx.contextlevel = :usercontext
@@ -98,7 +98,7 @@ class cohort_role_assignments_table extends table_sql {
);
$context = context_helper::instance_by_id($data->cohortcontextid);
$exporter = new \tool_lp\external\cohort_summary_exporter($record, array('context' => $context));
$exporter = new \core_cohort\external\cohort_summary_exporter($record, array('context' => $context));
$cohort = $exporter->export($OUTPUT);
$html = $OUTPUT->render_from_template('tool_cohortroles/cohort-in-list', $cohort);
@@ -0,0 +1,200 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_cohortroles.
*
* @package tool_cohortroles
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_cohortroles\privacy;
use core_privacy\local\metadata\collection;
use core_privacy\local\request\approved_contextlist;
use core_privacy\local\request\context;
use core_privacy\local\request\contextlist;
use core_privacy\local\request\transform;
use core_privacy\local\request\writer;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_cohortroles implementing metadata and plugin providers.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\provider, \core_privacy\local\request\plugin\provider {
/**
* Returns meta data about this system.
*
* @param collection $collection The initialised collection to add items to.
* @return collection A listing of user data stored through this system.
*/
public static function get_metadata(collection $collection) : collection {
// The tool_cohortroles plugin utilises the mdl_tool_cohortroles table.
$collection->add_database_table(
'tool_cohortroles',
[
'id' => 'privacy:metadata:tool_cohortroles:id',
'cohortid' => 'privacy:metadata:tool_cohortroles:cohortid',
'roleid' => 'privacy:metadata:tool_cohortroles:roleid',
'userid' => 'privacy:metadata:tool_cohortroles:userid',
'timecreated' => 'privacy:metadata:tool_cohortroles:timecreated',
'timemodified' => 'privacy:metadata:tool_cohortroles:timemodified',
'usermodified' => 'privacy:metadata:tool_cohortroles:usermodified'
],
'privacy:metadata:tool_cohortroles'
);
return $collection;
}
/**
* Get the list of contexts that contain user information for the specified user.
*
* @param int $userid The user to search.
* @return contextlist $contextlist The contextlist containing the list of contexts used in this plugin.
*/
public static function get_contexts_for_userid(int $userid) : contextlist {
$contextlist = new contextlist();
// Retrieve the User context associated with tool_cohortroles records.
$sql = "SELECT DISTINCT c.id
FROM {context} c
JOIN {tool_cohortroles} cr ON cr.userid = c.instanceid AND c.contextlevel = :contextuser
WHERE cr.userid = :userid";
$params = [
'contextuser' => CONTEXT_USER,
'userid' => $userid
];
$contextlist->add_from_sql($sql, $params);
return $contextlist;
}
/**
* Export all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The approved contexts to export information for.
*/
public static function export_user_data(approved_contextlist $contextlist) {
global $DB;
// If the user has tool_cohortroles data, then only the User context should be present so get the first context.
$contexts = $contextlist->get_contexts();
if (count($contexts) == 0) {
return;
}
$context = reset($contexts);
// Sanity check that context is at the User context level, then get the userid.
if ($context->contextlevel !== CONTEXT_USER) {
return;
}
$userid = $context->instanceid;
// Retrieve the tool_cohortroles records created for the user.
$sql = 'SELECT cr.id as cohortroleid,
c.name as cohortname,
c.idnumber as cohortidnumber,
c.description as cohortdescription,
r.shortname as roleshortname,
cr.userid as userid,
cr.timecreated as timecreated,
cr.timemodified as timemodified
FROM {tool_cohortroles} cr
JOIN {cohort} c ON c.id = cr.cohortid
JOIN {role} r ON r.id = cr.roleid
WHERE cr.userid = :userid';
$params = [
'userid' => $userid
];
$cohortroles = $DB->get_records_sql($sql, $params);
foreach ($cohortroles as $cohortrole) {
// The tool_cohortroles data export is organised in:
// {User Context}/Cohort roles management/{cohort name}/{role shortname}/data.json.
$subcontext = [
get_string('pluginname', 'tool_cohortroles'),
$cohortrole->cohortname,
$cohortrole->roleshortname
];
$data = (object) [
'cohortname' => $cohortrole->cohortname,
'cohortidnumber' => $cohortrole->cohortidnumber,
'cohortdescription' => $cohortrole->cohortdescription,
'roleshortname' => $cohortrole->roleshortname,
'userid' => transform::user($cohortrole->userid),
'timecreated' => transform::datetime($cohortrole->timecreated),
'timemodified' => transform::datetime($cohortrole->timemodified)
];
writer::with_context($context)->export_data($subcontext, $data);
}
}
/**
* Delete all data for all users in the specified context.
*
* @param context $context The specific context to delete data for.
*/
public static function delete_data_for_all_users_in_context(\context $context) {
global $DB;
// Sanity check that context is at the User context level, then get the userid.
if ($context->contextlevel !== CONTEXT_USER) {
return;
}
$userid = $context->instanceid;
// Delete the tool_cohortroles records created for the userid.
$DB->delete_records('tool_cohortroles', ['userid' => $userid]);
}
/**
* Delete all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The approved contexts and user information to delete information for.
*/
public static function delete_data_for_user(approved_contextlist $contextlist) {
global $DB;
// If the user has tool_cohortroles data, then only the User context should be present so get the first context.
$contexts = $contextlist->get_contexts();
if (count($contexts) == 0) {
return;
}
$context = reset($contexts);
// Sanity check that context is at the User context level, then get the userid.
if ($context->contextlevel !== CONTEXT_USER) {
return;
}
$userid = $context->instanceid;
// Delete the tool_cohortroles records created for the userid.
$DB->delete_records('tool_cohortroles', ['userid' => $userid]);
}
}
@@ -42,3 +42,11 @@ $string['selectrole'] = 'Select role';
$string['selectusers'] = 'Select users to assign role';
$string['taskname'] = 'Sync cohort role assignments';
$string['thisuserroles'] = 'Roles assigned relative to this user';
$string['privacy:metadata:tool_cohortroles'] = 'The Cohort roles management plugin stores user cohort role mappings.';
$string['privacy:metadata:tool_cohortroles:id'] = 'The ID of the cohort role mapping record';
$string['privacy:metadata:tool_cohortroles:cohortid'] = 'The ID of the cohort';
$string['privacy:metadata:tool_cohortroles:roleid'] = 'The ID of the role';
$string['privacy:metadata:tool_cohortroles:userid'] = 'The ID of the user';
$string['privacy:metadata:tool_cohortroles:timecreated'] = 'The time when the cohort role mapping was created';
$string['privacy:metadata:tool_cohortroles:timemodified'] = 'The time when the cohort role mapping was modified';
$string['privacy:metadata:tool_cohortroles:usermodified'] = 'The ID of the user who last modified the cohort role mapping';
@@ -0,0 +1,206 @@
<?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/>.
/**
* Unit tests for the tool_cohortroles implementation of the privacy API.
*
* @package tool_cohortroles
* @category test
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
use \core_privacy\local\request\writer;
use \core_privacy\local\request\approved_contextlist;
use \tool_cohortroles\api;
use \tool_cohortroles\privacy\provider;
/**
* Unit tests for the tool_cohortroles implementation of the privacy API.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class tool_cohortroles_privacy_testcase extends \core_privacy\tests\provider_testcase {
/**
* Overriding setUp() function to always reset after tests.
*/
public function setUp() {
$this->resetAfterTest(true);
}
/**
* Test for provider::get_contexts_for_userid().
*/
public function test_get_contexts_for_userid() {
global $DB;
// Test setup.
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
$this->setAdminUser();
$nocohortroles = 3;
$this->setup_test_scenario_data($user->id, $nocohortroles);
// Test the User's assigned cohortroles matches 3.
$cohortroles = $DB->get_records('tool_cohortroles', ['userid' => $user->id]);
$this->assertCount($nocohortroles, $cohortroles);
// Test the User's retrieved contextlist contains only one context.
$contextlist = provider::get_contexts_for_userid($user->id);
$contexts = $contextlist->get_contexts();
$this->assertCount(1, $contexts);
// Test the User's contexts equal the User's own context.
$context = reset($contexts);
$this->assertEquals(CONTEXT_USER, $context->contextlevel);
$this->assertEquals($user->id, $context->instanceid);
}
/**
* Test for provider::export_user_data().
*/
public function test_export_user_data() {
// Test setup.
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
$this->setAdminUser();
$nocohortroles = 3;
$this->setup_test_scenario_data($user->id, $nocohortroles);
// Test the User's retrieved contextlist contains only one context.
$contextlist = provider::get_contexts_for_userid($user->id);
$contexts = $contextlist->get_contexts();
$this->assertCount(1, $contexts);
// Test the User's contexts equal the User's own context.
$context = reset($contexts);
$this->assertEquals(CONTEXT_USER, $context->contextlevel);
$this->assertEquals($user->id, $context->instanceid);
// Retrieve the User's tool_cohortroles data.
$approvedcontextlist = new approved_contextlist($user, 'tool_cohortroles', $contextlist->get_contextids());
provider::export_user_data($approvedcontextlist);
// Test the tool_cohortroles data is exported at the User context level.
$writer = writer::with_context($context);
$this->assertTrue($writer->has_any_data());
}
/**
* Test for provider::delete_data_for_all_users_in_context().
*/
public function test_delete_data_for_all_users_in_context() {
global $DB;
// Test setup.
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
$this->setAdminUser();
$nocohortroles = 4;
$this->setup_test_scenario_data($user->id, $nocohortroles);
// Test the User's assigned cohortroles matches 4.
$cohortroles = $DB->get_records('tool_cohortroles', ['userid' => $user->id]);
$this->assertCount($nocohortroles, $cohortroles);
// Test the User's retrieved contextlist contains only one context.
$contextlist = provider::get_contexts_for_userid($user->id);
$contexts = $contextlist->get_contexts();
$this->assertCount(1, $contexts);
// Test the User's contexts equal the User's own context.
$context = reset($contexts);
$this->assertEquals(CONTEXT_USER, $context->contextlevel);
$this->assertEquals($user->id, $context->instanceid);
// Delete all the User's records in mdl_tool_cohortroles table by the specified User context.
provider::delete_data_for_all_users_in_context($context);
// Test the cohort roles records in mdl_tool_cohortroles table is equals zero.
$cohortroles = $DB->get_records('tool_cohortroles', ['userid' => $user->id]);
$this->assertCount(0, $cohortroles);
}
/**
* Test for provider::delete_data_for_user().
*/
public function test_delete_data_for_user() {
global $DB;
// Test setup.
$user = $this->getDataGenerator()->create_user();
$this->setUser($user);
$this->setAdminUser();
$nocohortroles = 4;
$this->setup_test_scenario_data($user->id, $nocohortroles);
// Test the User's assigned cohortroles matches 4.
$cohortroles = $DB->get_records('tool_cohortroles', ['userid' => $user->id]);
$this->assertCount($nocohortroles, $cohortroles);
// Test the User's retrieved contextlist contains only one context.
$contextlist = provider::get_contexts_for_userid($user->id);
$contexts = $contextlist->get_contexts();
$this->assertCount(1, $contexts);
// Test the User's contexts equal the User's own context.
$context = reset($contexts);
$this->assertEquals(CONTEXT_USER, $context->contextlevel);
$this->assertEquals($user->id, $context->instanceid);
// Delete all the User's records in mdl_tool_cohortroles table by the specified User approved context list.
$approvedcontextlist = new approved_contextlist($user, 'tool_cohortroles', $contextlist->get_contextids());
provider::delete_data_for_user($approvedcontextlist);
// Test the records in mdl_tool_cohortroles table is equals zero.
$cohortroles = $DB->get_records('tool_cohortroles', ['userid' => $user->id]);
$this->assertCount(0, $cohortroles);
}
/**
* Helper function to setup tool_cohortroles records for testing a specific user.
*
* @param int $userid The ID of the user used for testing.
* @param int $nocohortroles The number of tool_cohortroles to create for the user.
* @throws \core_competency\invalid_persistent_exception
* @throws coding_exception
*/
protected function setup_test_scenario_data($userid, $nocohortroles) {
$roleid = create_role('Sausage Roll', 'sausageroll', 'mmmm');
for ($c = 0; $c < $nocohortroles; $c++) {
$cohort = $this->getDataGenerator()->create_cohort();
$params = (object)array(
'userid' => $userid,
'roleid' => $roleid,
'cohortid' => $cohort->id
);
api::create_cohort_role_assignment($params);
}
}
}
+2 -2
View File
@@ -25,8 +25,8 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2017050500; // Requires this Moodle version.
$plugin->version = 2017111300; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2017110800; // Requires this Moodle version.
$plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = array(
@@ -0,0 +1,46 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for tool_customlang.
*
* @package tool_customlang
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_customlang\privacy;
defined('MOODLE_INTERNAL') || die();
/**
* Privacy Subsystem for tool_customlang implementing null_provider.
*
* @copyright 2018 Zig Tan <zig@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
+3
View File
@@ -38,5 +38,8 @@ function xmldb_tool_customlang_upgrade($oldversion) {
// Automatically generated Moodle v3.3.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.4.0 release upgrade line.
// Put any upgrade step following this.
return true;
}
@@ -30,7 +30,7 @@ $string['checkin'] = 'Save strings to language pack';
$string['checkout'] = 'Open language pack for editing';
$string['checkoutdone'] = 'Language pack loaded';
$string['checkoutinprogress'] = 'Loading language pack';
$string['confirmcheckin'] = 'You are about to save modifications to your local language pack. This will export the customised strings from the translator into you Moodle data directory and Moodle will start using the modified strings. Press \'Continue\' to proceed with saving.';
$string['confirmcheckin'] = 'You are about to save modifications to your local language pack. This will export the customised strings from the translator into your site data directory and your site will start using the modified strings. Press \'Continue\' to proceed with saving.';
$string['customlang:edit'] = 'Edit local translation';
$string['customlang:view'] = 'View local translation';
$string['filter'] = 'Filter strings';
@@ -59,3 +59,4 @@ $string['placeholderwarning'] = 'string contains a placeholder';
$string['pluginname'] = 'Language customisation';
$string['savecheckin'] = 'Save changes to the language pack';
$string['savecontinue'] = 'Apply changes and continue editing';
$string['privacy:metadata'] = 'The Language customisation plugin does not store any personal data.';
+5
View File
@@ -159,6 +159,11 @@ class tool_customlang_utils {
$needsupdate = true;
$current[$stringid]->local = $stringlocal;
$current[$stringid]->timecustomized = $now;
} else if (isset($currentlocal) && $stringlocal !== $currentlocal) {
// If local string has been removed, we need to remove also the old local value from DB.
$needsupdate = true;
$current[$stringid]->local = null;
$current[$stringid]->timecustomized = $now;
}
if ($needsupdate) {
+6 -4
View File
@@ -134,11 +134,13 @@ class tool_customlang_renderer extends plugin_renderer_base {
$output .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'translatorsubmitted', 'value'=>1));
$output .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
$output .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'p', 'value'=>$translator->currentpage));
$save1 = html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savecontinue', 'value'=>get_string('savecontinue', 'tool_customlang')));
$save2 = html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savecheckin', 'value'=>get_string('savecheckin', 'tool_customlang')));
$output .= html_writer::tag('fieldset', $save1.$save2, array('class'=>'buttonsbar'));
$save1 = html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'savecontinue',
'value' => get_string('savecontinue', 'tool_customlang'), 'class' => 'btn btn-secondary'));
$save2 = html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'savecheckin',
'value' => get_string('savecheckin', 'tool_customlang'), 'class' => 'btn btn-secondary'));
$output .= html_writer::tag('fieldset', $save1 . ' ' . $save2, array('class' => 'buttonsbar'));
$output .= html_writer::table($table);
$output .= html_writer::tag('fieldset', $save1.$save2, array('class'=>'buttonsbar'));
$output .= html_writer::tag('fieldset', $save1 . ' ' . $save2, array('class' => 'buttonsbar'));
$output .= html_writer::end_tag('div');
$output .= html_writer::end_tag('form');
+2 -2
View File
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017051500;
$plugin->requires = 2017050500;
$plugin->version = 2017111300;
$plugin->requires = 2017110800;
$plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
+1
View File
@@ -0,0 +1 @@
define(["jquery","core/str","core/ajax","core/notification","core/modal_factory","core/modal_events","core/fragment"],function(a,b,c,d,e,f,g){var h={CATEGORY_LINK:'[data-add-element="category"]'},i=function(a){this.contextId=a;var c=[{key:"addcategory",component:"tool_dataprivacy"},{key:"save",component:"admin"}];this.strings=b.get_strings(c),this.registerEventListeners()};return i.prototype.contextId=0,i.prototype.strings=0,i.prototype.registerEventListeners=function(){var b=a(h.CATEGORY_LINK);b.on("click",function(){return this.strings.then(function(a){e.create({type:e.types.SAVE_CANCEL,title:a[0],body:""},b).done(function(b){this.setupFormModal(b,a[1])}.bind(this))}.bind(this)).fail(d.exception)}.bind(this))},i.prototype.getBody=function(a){var b=null;return"undefined"!=typeof a&&(b={jsonformdata:JSON.stringify(a)}),g.loadFragment("tool_dataprivacy","addcategory_form",this.contextId,b)},i.prototype.setupFormModal=function(a,b){a.setLarge(),a.setSaveButtonText(b),a.getRoot().on(f.hidden,this.destroy.bind(this)),a.setBody(this.getBody()),a.getRoot().on(f.save,this.submitForm.bind(this)),a.getRoot().on("submit","form",this.submitFormAjax.bind(this)),this.modal=a,a.show()},i.prototype.submitForm=function(a){a.preventDefault(),this.modal.getRoot().find("form").submit()},i.prototype.submitFormAjax=function(a){a.preventDefault();var b=this.modal.getRoot().find("form").serialize();c.call([{methodname:"tool_dataprivacy_create_category_form",args:{jsonformdata:JSON.stringify(b)},done:function(a){a.validationerrors?this.modal.setBody(this.getBody(b)):this.close()}.bind(this),fail:d.exception}])},i.prototype.close=function(){this.destroy(),document.location.reload()},i.prototype.destroy=function(){Y.use("moodle-core-formchangechecker",function(){M.core_formchangechecker.reset_form_dirty_state()}),this.modal.destroy()},i.prototype.removeListeners=function(){a(h.CATEGORY_LINK).off("click")},{getInstance:function(a){return new i(a)}}});
+1
View File
@@ -0,0 +1 @@
define(["jquery","core/str","core/ajax","core/notification","core/modal_factory","core/modal_events","core/fragment"],function(a,b,c,d,e,f,g){var h={PURPOSE_LINK:'[data-add-element="purpose"]'},i=function(a){this.contextId=a;var c=[{key:"addpurpose",component:"tool_dataprivacy"},{key:"save",component:"admin"}];this.strings=b.get_strings(c),this.registerEventListeners()};return i.prototype.contextId=0,i.prototype.strings=0,i.prototype.registerEventListeners=function(){var b=a(h.PURPOSE_LINK);b.on("click",function(){return this.strings.then(function(a){e.create({type:e.types.SAVE_CANCEL,title:a[0],body:""},b).done(function(b){this.setupFormModal(b,a[1])}.bind(this))}.bind(this)).fail(d.exception)}.bind(this))},i.prototype.getBody=function(a){var b=null;return"undefined"!=typeof a&&(b={jsonformdata:JSON.stringify(a)}),g.loadFragment("tool_dataprivacy","addpurpose_form",this.contextId,b)},i.prototype.setupFormModal=function(a,b){a.setLarge(),a.setSaveButtonText(b),a.getRoot().on(f.hidden,this.destroy.bind(this)),a.setBody(this.getBody()),a.getRoot().on(f.save,this.submitForm.bind(this)),a.getRoot().on("submit","form",this.submitFormAjax.bind(this)),this.modal=a,a.show()},i.prototype.submitForm=function(a){a.preventDefault(),this.modal.getRoot().find("form").submit()},i.prototype.submitFormAjax=function(a){a.preventDefault();var b=this.modal.getRoot().find("form").serialize();c.call([{methodname:"tool_dataprivacy_create_purpose_form",args:{jsonformdata:JSON.stringify(b)},done:function(a){a.validationerrors?this.modal.setBody(this.getBody(b)):this.close()}.bind(this),fail:d.exception}])},i.prototype.close=function(){this.destroy(),document.location.reload()},i.prototype.destroy=function(){Y.use("moodle-core-formchangechecker",function(){M.core_formchangechecker.reset_form_dirty_state()}),this.modal.destroy()},i.prototype.removeListeners=function(){a(h.PURPOSE_LINK).off("click")},{getInstance:function(a){return new i(a)}}});
@@ -0,0 +1 @@
define(["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events"],function(a,b,c,d,e,f){var g={DELETE:'[data-action="deletecategory"]'},h=function(){this.registerEvents()};return h.prototype.registerEvents=function(){a(g.DELETE).click(function(g){g.preventDefault();var h=a(this).data("id"),i=a(this).data("name"),j=[{key:"deletecategory",component:"tool_dataprivacy"},{key:"deletecategorytext",component:"tool_dataprivacy",param:i},{key:"delete"}];d.get_strings(j).then(function(d){var g=d[0],i=d[1],j=d[2];return e.create({title:g,body:i,type:e.types.SAVE_CANCEL}).then(function(d){return d.setSaveButtonText(j),d.getRoot().on(f.save,function(){var d={methodname:"tool_dataprivacy_delete_category",args:{id:h}};b.call([d])[0].done(function(b){b.result?a('tr[data-categoryid="'+h+'"]').remove():c.addNotification({message:b.warnings[0].message,type:"error"})}).fail(c.exception)}),d.getRoot().on(f.hidden,function(){d.destroy()}),d})}).done(function(a){a.show()}).fail(c.exception)})},{init:function(){return new h}}});
+1
View File
@@ -0,0 +1 @@
define(["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events"],function(a,b,c,d,e,f){function g(a){var g=[{key:"confirm",component:"moodle"},{key:"confirmcontextdeletion",component:"tool_dataprivacy"}],h="tool_dataprivacy_confirm_contexts_for_deletion",i="";d.get_strings(g).then(function(a){i=a[0];var b=a[1];return e.create({title:i,body:b,type:e.types.SAVE_CANCEL})}).then(function(d){return d.setSaveButtonText(i),d.getRoot().on(f.save,function(){var d={ids:a},e={methodname:h,args:d};b.call([e])[0].done(function(a){a.result?window.location.reload():c.addNotification({message:a.warnings[0].message,type:"error"})}).fail(c.exception)}),d.getRoot().on(f.hidden,function(){d.destroy()}),d}).done(function(a){a.show()}).fail(c.exception)}var h={MARK_FOR_DELETION:'[data-action="markfordeletion"]',SELECT_ALL:'[data-action="selectall"]'},i={SELECTCONTEXT:".selectcontext"},j=function(){this.registerEvents()};return j.prototype.registerEvents=function(){a(h.MARK_FOR_DELETION).click(function(b){b.preventDefault();var c=[];a(i.SELECTCONTEXT).each(function(){var b=a(this);b.is(":checked")&&c.push(b.val())}),g(c)}),a(h.SELECT_ALL).change(function(b){b.preventDefault();var c=a(this);c.is(":checked")?a(i.SELECTCONTEXT).attr("checked","checked"):a(i.SELECTCONTEXT).removeAttr("checked")})},j});
+1
View File
@@ -0,0 +1 @@
define(["jquery","core/str","core/ajax","core/notification","core/templates","core/modal_factory","core/modal_events","core/fragment","tool_dataprivacy/add_purpose","tool_dataprivacy/add_category"],function(a,b,c,d,e,f,g,h,i,j){var k={TREE_NODES:"[data-context-tree-node=1]",FORM_CONTAINER:"#context-form-container"},l=function(a,b,c){this.systemContextId=a,this.currentContextLevel=b,this.currentContextId=c,this.init()};return l.prototype.systemContextId=0,l.prototype.currentContextLevel=0,l.prototype.currentContextId=0,l.prototype.addpurpose=null,l.prototype.addcategory=null,l.prototype.init=function(){this.addpurpose=i.getInstance(this.systemContextId),this.addcategory=j.getInstance(this.systemContextId);var a=[{key:"changessaved",component:"moodle"},{key:"contextpurposecategorysaved",component:"tool_dataprivacy"},{key:"noblockstoload",component:"tool_dataprivacy"},{key:"noactivitiestoload",component:"tool_dataprivacy"},{key:"nocoursestoload",component:"tool_dataprivacy"}];this.strings=b.get_strings(a),this.registerEventListeners(),this.currentContextId?this.loadForm("context_form",[this.currentContextId],this.submitContextFormAjax.bind(this)):this.loadForm("contextlevel_form",[this.currentContextLevel],this.submitContextLevelFormAjax.bind(this))},l.prototype.registerEventListeners=function(){a(k.TREE_NODES).on("click",function(b){b.preventDefault();var c=a(b.currentTarget);a(k.TREE_NODES).removeClass("active"),c.addClass("active");var d=c.data("contextlevel"),e=c.data("contextid");if(d)window.history.pushState({},null,"?contextlevel="+d),this.addpurpose.removeListeners(),this.addcategory.removeListeners(),this.currentContextLevel=d,this.loadForm("contextlevel_form",[this.currentContextLevel],this.submitContextLevelFormAjax.bind(this));else if(e)window.history.pushState({},null,"?contextid="+e),this.addpurpose.removeListeners(),this.addcategory.removeListeners(),this.currentContextId=e,this.loadForm("context_form",[this.currentContextId],this.submitContextFormAjax.bind(this));else{var f=c.data("expandcontextid"),g=c.data("expandelement"),h=c.data("expanded");g&&(h?this.collapse(c):!c.data("loaded")&&f&&g?(c.find("> i").removeClass("fa-plus"),c.find("> i").addClass("fa-circle-o-notch fa-spin"),this.loadExtra(c,f,g)):this.expand(c))}}.bind(this))},l.prototype.removeListeners=function(){a(k.TREE_NODES).off("click")},l.prototype.loadForm=function(b,c,f){this.clearForm();var g=h.loadFragment("tool_dataprivacy",b,this.systemContextId,c);g.done(function(b,c){a(k.FORM_CONTAINER).html(b),e.runTemplateJS(c),this.addpurpose.registerEventListeners(),this.addcategory.registerEventListeners(),a(k.FORM_CONTAINER).on("submit","form",f)}.bind(this)).fail(d.exception)},l.prototype.clearForm=function(){Y.use("moodle-core-formchangechecker",function(){M.core_formchangechecker.reset_form_dirty_state()}),a(k.FORM_CONTAINER).off("submit","form")},l.prototype.submitForm=function(b){b.preventDefault(),a(k.FORM_CONTAINER).find("form").submit()},l.prototype.submitContextLevelFormAjax=function(a){this.submitFormAjax(a,"tool_dataprivacy_set_contextlevel_form")},l.prototype.submitContextFormAjax=function(a){this.submitFormAjax(a,"tool_dataprivacy_set_context_form")},l.prototype.submitFormAjax=function(b,e){b.preventDefault();var f=a(k.FORM_CONTAINER).find("form").serialize();return this.strings.then(function(a){c.call([{methodname:e,args:{jsonformdata:JSON.stringify(f)},done:function(){d.alert(a[0],a[1])},fail:d.exception}])})["catch"](d.exception)},l.prototype.loadExtra=function(a,b,f){c.call([{methodname:"tool_dataprivacy_tree_extra_branches",args:{contextid:b,element:f},done:function(b){return 0==b.branches.length?void this.noElements(a,f):void e.render("tool_dataprivacy/context_tree_branches",b).then(function(b){a.after(b),this.removeListeners(),this.registerEventListeners(),this.expand(a),a.data("loaded",1)}.bind(this)).fail(d.exception)}.bind(this),fail:d.exception}])},l.prototype.noElements=function(a,b){a.data("expandcontextid",""),a.data("expandelement",""),this.strings.then(function(c){var d=2;"module"==b?d=3:"course"==b&&(d=4),a.text(c[d])}).fail(d.exception)},l.prototype.collapse=function(a){a.data("expanded",0),a.siblings("nav").addClass("hidden"),a.find("> i").removeClass("fa-minus"),a.find("> i").addClass("fa-plus")},l.prototype.expand=function(a){a.data("expanded",1),a.siblings("nav").removeClass("hidden"),a.find("> i").removeClass("fa-plus"),a.find("> i").removeClass("fa-circle-o-notch fa-spin"),a.find("> i").addClass("fa-minus")},{init:function(a,b,c){return new l(a,b,c)}}});
@@ -0,0 +1 @@
define(["jquery","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","tool_dataprivacy/events"],function(a,b,c,d,e,f){var g=!1,h={APPROVE_BUTTON:'[data-action="approve"]',DENY_BUTTON:'[data-action="deny"]',COMPLETE_BUTTON:'[data-action="complete"]'},i=function(a){d.call(this,a)};return i.TYPE="tool_dataprivacy-data_request",i.prototype=Object.create(d.prototype),i.prototype.constructor=i,i.prototype.registerEventListeners=function(){d.prototype.registerEventListeners.call(this),this.getModal().on(c.events.activate,h.APPROVE_BUTTON,function(b,c){var d=a.Event(f.approve);this.getRoot().trigger(d,this),d.isDefaultPrevented()||(this.hide(),c.originalEvent.preventDefault())}.bind(this)),this.getModal().on(c.events.activate,h.DENY_BUTTON,function(b,c){var d=a.Event(f.deny);this.getRoot().trigger(d,this),d.isDefaultPrevented()||(this.hide(),c.originalEvent.preventDefault())}.bind(this)),this.getModal().on(c.events.activate,h.COMPLETE_BUTTON,function(b,c){var d=a.Event(f.complete);this.getRoot().trigger(d,this),d.isDefaultPrevented()||(this.hide(),c.originalEvent.preventDefault())}.bind(this))},g||(e.register(i.TYPE,i,"tool_dataprivacy/data_request_modal"),g=!0),i});
@@ -0,0 +1 @@
define(["jquery"],function(a){var b={PURPOSE_SELECT:"#id_purposeid",RETENTION_FIELD_BOOST:"#id_error_retention_current",RETENTION_FIELD_CLEAN:"#fitem_id_retention_current [data-fieldtype=static]"},c=function(a){this.purposeRetentionPeriods=a,this.registerEventListeners()},d=function(){a(b.PURPOSE_SELECT).off("change")};return c.prototype.purposeRetentionPeriods=[],c.prototype.registerEventListeners=function(){a(b.PURPOSE_SELECT).on("change",function(c){var d=a(c.currentTarget).val(),e=this.purposeRetentionPeriods[d],f=a(b.RETENTION_FIELD_CLEAN);if(f.length>0)f.text(e);else{var g=a(b.RETENTION_FIELD_BOOST),h=g.siblings();h.length>0&&h.text(e)}}.bind(this))},{init:function(a){return d(),new c(a)}}});
+1
View File
@@ -0,0 +1 @@
define([],function(){return{approve:"tool_dataprivacy-data_request:approve",deny:"tool_dataprivacy-data_request:deny",complete:"tool_dataprivacy-data_request:complete"}});
@@ -0,0 +1 @@
define(["jquery","core/url","core/str"],function(a,b,c){var d=a('<img alt="" src="'+b.imageUrl("t/expanded")+'"/>'),e=a('<img alt="" src="'+b.imageUrl("t/collapsed")+'"/>');return{expandCollapse:function(a,b){a.hasClass("hide")?(a.removeClass("hide"),a.addClass("visible"),a.attr("aria-expanded",!0),b.find(":header i.fa").removeClass("fa-plus-square"),b.find(":header i.fa").addClass("fa-minus-square"),b.find(":header img.icon").attr("src",d.attr("src"))):(a.removeClass("visible"),a.addClass("hide"),a.attr("aria-expanded",!1),b.find(":header i.fa").removeClass("fa-minus-square"),b.find(":header i.fa").addClass("fa-plus-square"),b.find(":header img.icon").attr("src",e.attr("src")))},expandCollapseAll:function(b){var f="visible"==b?"hide":"visible",g="visible"==b,h="visible"==b?"fa-plus-square":"fa-minus-square",i="visible"==b?"fa-minus-square":"fa-plus-square",j="visible"==b?d.attr("src"):e.attr("src");a("."+f).each(function(){a(this).removeClass(f),a(this).addClass(b),a(this).attr("aria-expanded",g)}),a(".tool_dataprivacy-expand-all").data("visibilityState",f),c.get_string(f,"tool_dataprivacy").then(function(b){a(".tool_dataprivacy-expand-all").html(b)})["catch"](Notification.exception),a(":header i.fa").each(function(){a(this).removeClass(h),a(this).addClass(i)}),a(":header img.icon").each(function(){a(this).attr("src",j)})}}});
@@ -0,0 +1 @@
define(["jquery","core/ajax","core/templates"],function(a,b,c){return{processResults:function(b,c){var d=[];return a.each(c,function(a,b){d.push({value:b.id,label:b._label})}),d},transport:function(d,e,f,g){var h;h=b.call([{methodname:"tool_dataprivacy_get_users",args:{query:e}}]),h[0].then(function(b){var d=[],e=0;return a.each(b,function(a,b){d.push(c.render("tool_dataprivacy/form-user-selector-suggestion",b))}),a.when.apply(a.when,d).then(function(){var c=arguments;a.each(b,function(a,b){b._label=c[e],e++}),f(b)})}).fail(g)}}});
@@ -0,0 +1 @@
define(["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events","core/templates"],function(a,b,c,d,e,f,g){function h(a){var e={methodname:"tool_dataprivacy_contact_dpo",args:{message:a}},f="success";b.call([e])[0].then(function(a){return a.result?d.get_string("requestsubmitted","tool_dataprivacy"):(f="error",a.warnings.join("<br>"))}).done(function(a){c.addNotification({message:a,type:f})}).fail(c.exception)}var i={CANCEL_REQUEST:'[data-action="cancel"]',CONTACT_DPO:'[data-action="contactdpo"]'},j=function(){this.registerEvents()};return j.prototype.registerEvents=function(){a(i.CANCEL_REQUEST).click(function(g){g.preventDefault();var h=a(this).data("requestid"),i=[{key:"cancelrequest",component:"tool_dataprivacy"},{key:"cancelrequestconfirmation",component:"tool_dataprivacy"}];d.get_strings(i).then(function(a){var d=a[0],g=a[1];return e.create({title:d,body:g,type:e.types.SAVE_CANCEL}).then(function(a){return a.setSaveButtonText(d),a.getRoot().on(f.save,function(){var a={requestid:h},d={methodname:"tool_dataprivacy_cancel_data_request",args:a};b.call([d])[0].done(function(a){a.result?window.location.reload():c.addNotification({message:a.warnings[0].message,type:"error"})}).fail(c.exception)}),a.getRoot().on(f.hidden,function(){a.destroy()}),a})}).done(function(a){a.show()}).fail(c.exception)}),a(i.CONTACT_DPO).click(function(b){b.preventDefault();var i=a(this).data("replytoemail"),j=[{key:"contactdataprotectionofficer",component:"tool_dataprivacy"},{key:"send",component:"tool_dataprivacy"}],k="";d.get_strings(j).then(function(a){var b=a[0];k=a[1];var c={replytoemail:i};return e.create({title:b,body:g.render("tool_dataprivacy/contact_dpo",c),type:e.types.SAVE_CANCEL,large:!0})}).done(function(b){b.setSaveButtonText(k),b.getRoot().on(f.save,function(b){var c=a("#message").val().trim();0===c.length?(b.preventDefault(),a('[data-region="messageinput"]').addClass("has-danger notifyproblem"),a("#id_error_message").removeAttr("hidden")):h(c)}),b.getRoot().on(f.hidden,function(){b.destroy()}),b.show()}).fail(c.exception)})},{init:function(){return new j}}});
@@ -0,0 +1 @@
define(["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events"],function(a,b,c,d,e,f){var g={DELETE:'[data-action="deletepurpose"]'},h=function(){this.registerEvents()};return h.prototype.registerEvents=function(){a(g.DELETE).click(function(g){g.preventDefault();var h=a(this).data("id"),i=a(this).data("name"),j=[{key:"deletepurpose",component:"tool_dataprivacy"},{key:"deletepurposetext",component:"tool_dataprivacy",param:i},{key:"delete"}];d.get_strings(j).then(function(d){var g=d[0],i=d[1],j=d[2];return e.create({title:g,body:i,type:e.types.SAVE_CANCEL}).then(function(d){return d.setSaveButtonText(j),d.getRoot().on(f.save,function(){var d={methodname:"tool_dataprivacy_delete_purpose",args:{id:h}};b.call([d])[0].done(function(b){b.result?a('tr[data-purposeid="'+h+'"]').remove():c.addNotification({message:b.warnings[0].message,type:"error"})}).fail(c.exception)}),d.getRoot().on(f.hidden,function(){d.destroy()}),d})}).done(function(a){a.show()}).fail(c.exception)})},{init:function(){return new h}}});
@@ -0,0 +1 @@
define(["jquery","core/form-autocomplete","core/str","core/notification"],function(a,b,c,d){var e={REQUEST_FILTERS:"#request-filters"},f=function(){var f=[{key:"filter",component:"moodle"},{key:"nofiltersapplied",component:"moodle"}];c.get_strings(f).then(function(a){var c=a[0],d=a[1];return b.enhance(e.REQUEST_FILTERS,!1,"",c,!1,!0,d,!0)}).fail(d.exception);var g=a(e.REQUEST_FILTERS).val();a(e.REQUEST_FILTERS).on("change",function(){var b=a(this).val();g.join(",")!==b.join(",")&&(0===b.length&&a("#filters-cleared").val(1),a(this.form).submit())})};return{init:function(){f()}}});
@@ -0,0 +1 @@
define(["jquery","core/ajax","core/notification","core/str","core/modal_factory","core/modal_events","core/templates","tool_dataprivacy/data_request_modal","tool_dataprivacy/events"],function(a,b,c,d,e,f,g,h,i){function j(a,b){var g=[],h="",j={requestid:b};switch(a){case i.approve:g=[{key:"approverequest",component:"tool_dataprivacy"},{key:"confirmapproval",component:"tool_dataprivacy"}],h="tool_dataprivacy_approve_data_request";break;case i.deny:g=[{key:"denyrequest",component:"tool_dataprivacy"},{key:"confirmdenial",component:"tool_dataprivacy"}],h="tool_dataprivacy_deny_data_request";break;case i.complete:g=[{key:"markcomplete",component:"tool_dataprivacy"},{key:"confirmcompletion",component:"tool_dataprivacy"}],h="tool_dataprivacy_mark_complete"}var l="";d.get_strings(g).then(function(a){l=a[0];var b=a[1];return e.create({title:l,body:b,type:e.types.SAVE_CANCEL})}).then(function(a){a.setSaveButtonText(l),a.getRoot().on(f.save,function(){k(h,j)}),a.getRoot().on(f.hidden,function(){a.destroy()}),a.show()})["catch"](c.exception)}function k(a,d){var e={methodname:a,args:d};b.call([e])[0].done(function(a){a.result?window.location.reload():c.addNotification({message:a.warnings[0].message,type:"error"})}).fail(c.exception)}var l={APPROVE_REQUEST:'[data-action="approve"]',DENY_REQUEST:'[data-action="deny"]',VIEW_REQUEST:'[data-action="view"]',MARK_COMPLETE:'[data-action="complete"]'},m=function(){this.registerEvents()};return m.prototype.registerEvents=function(){a(l.VIEW_REQUEST).click(function(d){d.preventDefault();var l=a(this).data("requestid"),m={requestid:l},n={methodname:"tool_dataprivacy_get_data_request",args:m},o=b.call([n]);a.when(o[0]).then(function(a){return a.result?a.result:(c.addNotification({message:a.warnings[0].message,type:"error"}),!1)}).then(function(a){var b=g.render("tool_dataprivacy/request_details",a),c={approvedeny:a.approvedeny,canmarkcomplete:a.canmarkcomplete};return e.create({title:a.typename,body:b,type:h.TYPE,large:!0,templateContext:c})}).then(function(a){a.getRoot().on(i.approve,function(){j(i.approve,l)}),a.getRoot().on(i.deny,function(){j(i.deny,l)}),a.getRoot().on(i.complete,function(){var a={requestid:l};k("tool_dataprivacy_mark_complete",a)}),a.getRoot().on(f.hidden,function(){a.destroy()}),a.show()})["catch"](c.exception)}),a(l.APPROVE_REQUEST).click(function(b){b.preventDefault();var c=a(this).data("requestid");j(i.approve,c)}),a(l.DENY_REQUEST).click(function(b){b.preventDefault();var c=a(this).data("requestid");j(i.deny,c)}),a(l.MARK_COMPLETE).click(function(b){b.preventDefault(),j(i.complete,a(this).data("requestid"))})},m});
@@ -0,0 +1,172 @@
// 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/>.
/**
* Module to add categories.
*
* @module tool_dataprivacy/add_category
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/modal_factory', 'core/modal_events', 'core/fragment'],
function($, Str, Ajax, Notification, ModalFactory, ModalEvents, Fragment) {
var SELECTORS = {
CATEGORY_LINK: '[data-add-element="category"]',
};
var AddCategory = function(contextId) {
this.contextId = contextId;
var stringKeys = [
{
key: 'addcategory',
component: 'tool_dataprivacy'
},
{
key: 'save',
component: 'admin'
}
];
this.strings = Str.get_strings(stringKeys);
this.registerEventListeners();
};
/**
* @var {int} contextId
* @private
*/
AddCategory.prototype.contextId = 0;
/**
* @var {Promise}
* @private
*/
AddCategory.prototype.strings = 0;
AddCategory.prototype.registerEventListeners = function() {
var trigger = $(SELECTORS.CATEGORY_LINK);
trigger.on('click', function() {
return this.strings.then(function(strings) {
ModalFactory.create({
type: ModalFactory.types.SAVE_CANCEL,
title: strings[0],
body: '',
}, trigger).done(function(modal) {
this.setupFormModal(modal, strings[1]);
}.bind(this));
}.bind(this))
.fail(Notification.exception);
}.bind(this));
};
/**
* @method getBody
* @param {Object} formdata
* @private
* @return {Promise}
*/
AddCategory.prototype.getBody = function(formdata) {
var params = null;
if (typeof formdata !== "undefined") {
params = {jsonformdata: JSON.stringify(formdata)};
}
// Get the content of the modal.
return Fragment.loadFragment('tool_dataprivacy', 'addcategory_form', this.contextId, params);
};
AddCategory.prototype.setupFormModal = function(modal, saveText) {
modal.setLarge();
modal.setSaveButtonText(saveText);
// We want to reset the form every time it is opened.
modal.getRoot().on(ModalEvents.hidden, this.destroy.bind(this));
modal.setBody(this.getBody());
// We catch the modal save event, and use it to submit the form inside the modal.
// Triggering a form submission will give JS validation scripts a chance to check for errors.
modal.getRoot().on(ModalEvents.save, this.submitForm.bind(this));
// We also catch the form submit event and use it to submit the form with ajax.
modal.getRoot().on('submit', 'form', this.submitFormAjax.bind(this));
this.modal = modal;
modal.show();
};
/**
* This triggers a form submission, so that any mform elements can do final tricks before the form submission is processed.
*
* @method submitForm
* @param {Event} e Form submission event.
* @private
*/
AddCategory.prototype.submitForm = function(e) {
e.preventDefault();
this.modal.getRoot().find('form').submit();
};
AddCategory.prototype.submitFormAjax = function(e) {
// We don't want to do a real form submission.
e.preventDefault();
// Convert all the form elements values to a serialised string.
var formData = this.modal.getRoot().find('form').serialize();
Ajax.call([{
methodname: 'tool_dataprivacy_create_category_form',
args: {jsonformdata: JSON.stringify(formData)},
done: function(data) {
if (data.validationerrors) {
this.modal.setBody(this.getBody(formData));
} else {
this.close();
}
}.bind(this),
fail: Notification.exception
}]);
};
AddCategory.prototype.close = function() {
this.destroy();
document.location.reload();
};
AddCategory.prototype.destroy = function() {
Y.use('moodle-core-formchangechecker', function() {
M.core_formchangechecker.reset_form_dirty_state();
});
this.modal.destroy();
};
AddCategory.prototype.removeListeners = function() {
$(SELECTORS.CATEGORY_LINK).off('click');
};
return /** @alias module:tool_dataprivacy/add_category */ {
getInstance: function(contextId) {
return new AddCategory(contextId);
}
};
}
);
@@ -0,0 +1,173 @@
// 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/>.
/**
* Module to add purposes.
*
* @module tool_dataprivacy/add_purpose
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/modal_factory', 'core/modal_events', 'core/fragment'],
function($, Str, Ajax, Notification, ModalFactory, ModalEvents, Fragment) {
var SELECTORS = {
PURPOSE_LINK: '[data-add-element="purpose"]',
};
var AddPurpose = function(contextId) {
this.contextId = contextId;
var stringKeys = [
{
key: 'addpurpose',
component: 'tool_dataprivacy'
},
{
key: 'save',
component: 'admin'
}
];
this.strings = Str.get_strings(stringKeys);
this.registerEventListeners();
};
/**
* @var {int} contextId
* @private
*/
AddPurpose.prototype.contextId = 0;
/**
* @var {Promise}
* @private
*/
AddPurpose.prototype.strings = 0;
AddPurpose.prototype.registerEventListeners = function() {
var trigger = $(SELECTORS.PURPOSE_LINK);
trigger.on('click', function() {
return this.strings.then(function(strings) {
ModalFactory.create({
type: ModalFactory.types.SAVE_CANCEL,
title: strings[0],
body: '',
}, trigger).done(function(modal) {
this.setupFormModal(modal, strings[1]);
}.bind(this));
}.bind(this))
.fail(Notification.exception);
}.bind(this));
};
/**
* @method getBody
* @param {Object} formdata
* @private
* @return {Promise}
*/
AddPurpose.prototype.getBody = function(formdata) {
var params = null;
if (typeof formdata !== "undefined") {
params = {jsonformdata: JSON.stringify(formdata)};
}
// Get the content of the modal.
return Fragment.loadFragment('tool_dataprivacy', 'addpurpose_form', this.contextId, params);
};
AddPurpose.prototype.setupFormModal = function(modal, saveText) {
modal.setLarge();
modal.setSaveButtonText(saveText);
// We want to reset the form every time it is opened.
modal.getRoot().on(ModalEvents.hidden, this.destroy.bind(this));
modal.setBody(this.getBody());
// We catch the modal save event, and use it to submit the form inside the modal.
// Triggering a form submission will give JS validation scripts a chance to check for errors.
modal.getRoot().on(ModalEvents.save, this.submitForm.bind(this));
// We also catch the form submit event and use it to submit the form with ajax.
modal.getRoot().on('submit', 'form', this.submitFormAjax.bind(this));
this.modal = modal;
modal.show();
};
/**
* This triggers a form submission, so that any mform elements can do final tricks before the form submission is processed.
*
* @method submitForm
* @param {Event} e Form submission event.
* @private
*/
AddPurpose.prototype.submitForm = function(e) {
e.preventDefault();
this.modal.getRoot().find('form').submit();
};
AddPurpose.prototype.submitFormAjax = function(e) {
// We don't want to do a real form submission.
e.preventDefault();
// Convert all the form elements values to a serialised string.
var formData = this.modal.getRoot().find('form').serialize();
Ajax.call([{
methodname: 'tool_dataprivacy_create_purpose_form',
args: {jsonformdata: JSON.stringify(formData)},
done: function(data) {
if (data.validationerrors) {
this.modal.setBody(this.getBody(formData));
} else {
this.close();
}
}.bind(this),
fail: Notification.exception
}]);
};
AddPurpose.prototype.close = function() {
this.destroy();
document.location.reload();
};
AddPurpose.prototype.destroy = function() {
Y.use('moodle-core-formchangechecker', function() {
M.core_formchangechecker.reset_form_dirty_state();
});
this.modal.destroy();
};
AddPurpose.prototype.removeListeners = function() {
$(SELECTORS.PURPOSE_LINK).off('click');
};
return /** @alias module:tool_dataprivacy/add_purpose */ {
getInstance: function(contextId) {
return new AddPurpose(contextId);
}
};
}
);
@@ -0,0 +1,132 @@
// 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/>.
/**
* AMD module for categories actions.
*
* @module tool_dataprivacy/categoriesactions
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([
'jquery',
'core/ajax',
'core/notification',
'core/str',
'core/modal_factory',
'core/modal_events'],
function($, Ajax, Notification, Str, ModalFactory, ModalEvents) {
/**
* List of action selectors.
*
* @type {{DELETE: string}}
*/
var ACTIONS = {
DELETE: '[data-action="deletecategory"]',
};
/**
* CategoriesActions class.
*/
var CategoriesActions = function() {
this.registerEvents();
};
/**
* Register event listeners.
*/
CategoriesActions.prototype.registerEvents = function() {
$(ACTIONS.DELETE).click(function(e) {
e.preventDefault();
var id = $(this).data('id');
var categoryname = $(this).data('name');
var stringkeys = [
{
key: 'deletecategory',
component: 'tool_dataprivacy'
},
{
key: 'deletecategorytext',
component: 'tool_dataprivacy',
param: categoryname
},
{
key: 'delete'
}
];
Str.get_strings(stringkeys).then(function(langStrings) {
var title = langStrings[0];
var confirmMessage = langStrings[1];
var buttonText = langStrings[2];
return ModalFactory.create({
title: title,
body: confirmMessage,
type: ModalFactory.types.SAVE_CANCEL
}).then(function(modal) {
modal.setSaveButtonText(buttonText);
// Handle save event.
modal.getRoot().on(ModalEvents.save, function() {
var request = {
methodname: 'tool_dataprivacy_delete_category',
args: {'id': id}
};
Ajax.call([request])[0].done(function(data) {
if (data.result) {
$('tr[data-categoryid="' + id + '"]').remove();
} else {
Notification.addNotification({
message: data.warnings[0].message,
type: 'error'
});
}
}).fail(Notification.exception);
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
return modal;
});
}).done(function(modal) {
modal.show();
}).fail(Notification.exception);
});
};
return /** @alias module:tool_dataprivacy/categoriesactions */ {
// Public variables and functions.
/**
* Initialise the module.
*
* @method init
* @return {CategoriesActions}
*/
'init': function() {
return new CategoriesActions();
}
};
});
@@ -0,0 +1,156 @@
// 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/>.
/**
* Request actions.
*
* @module tool_dataprivacy/data_deletion
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([
'jquery',
'core/ajax',
'core/notification',
'core/str',
'core/modal_factory',
'core/modal_events'],
function($, Ajax, Notification, Str, ModalFactory, ModalEvents) {
/**
* List of action selectors.
*
* @type {{MARK_FOR_DELETION: string}}
* @type {{SELECT_ALL: string}}
*/
var ACTIONS = {
MARK_FOR_DELETION: '[data-action="markfordeletion"]',
SELECT_ALL: '[data-action="selectall"]',
};
/**
* List of selectors.
*
* @type {{SELECTCONTEXT: string}}
*/
var SELECTORS = {
SELECTCONTEXT: '.selectcontext',
};
/**
* DataDeletionActions class.
*/
var DataDeletionActions = function() {
this.registerEvents();
};
/**
* Register event listeners.
*/
DataDeletionActions.prototype.registerEvents = function() {
$(ACTIONS.MARK_FOR_DELETION).click(function(e) {
e.preventDefault();
var selectedIds = [];
$(SELECTORS.SELECTCONTEXT).each(function() {
var checkbox = $(this);
if (checkbox.is(':checked')) {
selectedIds.push(checkbox.val());
}
});
showConfirmation(selectedIds);
});
$(ACTIONS.SELECT_ALL).change(function(e) {
e.preventDefault();
var selectallnone = $(this);
if (selectallnone.is(':checked')) {
$(SELECTORS.SELECTCONTEXT).attr('checked', 'checked');
} else {
$(SELECTORS.SELECTCONTEXT).removeAttr('checked');
}
});
};
/**
* Show the confirmation dialogue.
*
* @param {Array} ids The array of expired context record IDs.
*/
function showConfirmation(ids) {
var keys = [
{
key: 'confirm',
component: 'moodle'
},
{
key: 'confirmcontextdeletion',
component: 'tool_dataprivacy'
}
];
var wsfunction = 'tool_dataprivacy_confirm_contexts_for_deletion';
var modalTitle = '';
Str.get_strings(keys).then(function(langStrings) {
modalTitle = langStrings[0];
var confirmMessage = langStrings[1];
return ModalFactory.create({
title: modalTitle,
body: confirmMessage,
type: ModalFactory.types.SAVE_CANCEL
});
}).then(function(modal) {
modal.setSaveButtonText(modalTitle);
// Handle save event.
modal.getRoot().on(ModalEvents.save, function() {
// Confirm the request.
var params = {
'ids': ids
};
var request = {
methodname: wsfunction,
args: params
};
Ajax.call([request])[0].done(function(data) {
if (data.result) {
window.location.reload();
} else {
Notification.addNotification({
message: data.warnings[0].message,
type: 'error'
});
}
}).fail(Notification.exception);
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
return modal;
}).done(function(modal) {
modal.show();
}).fail(Notification.exception);
}
return DataDeletionActions;
});
@@ -0,0 +1,318 @@
// 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/>.
/**
* Request actions.
*
* @module tool_dataprivacy/data_registry
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/templates', 'core/modal_factory',
'core/modal_events', 'core/fragment', 'tool_dataprivacy/add_purpose', 'tool_dataprivacy/add_category'],
function($, Str, Ajax, Notification, Templates, ModalFactory, ModalEvents, Fragment, AddPurpose, AddCategory) {
var SELECTORS = {
TREE_NODES: '[data-context-tree-node=1]',
FORM_CONTAINER: '#context-form-container',
};
var DataRegistry = function(systemContextId, initContextLevel, initContextId) {
this.systemContextId = systemContextId;
this.currentContextLevel = initContextLevel;
this.currentContextId = initContextId;
this.init();
};
/**
* @var {int} systemContextId
* @private
*/
DataRegistry.prototype.systemContextId = 0;
/**
* @var {int} currentContextLevel
* @private
*/
DataRegistry.prototype.currentContextLevel = 0;
/**
* @var {int} currentContextId
* @private
*/
DataRegistry.prototype.currentContextId = 0;
/**
* @var {AddPurpose} addpurpose
* @private
*/
DataRegistry.prototype.addpurpose = null;
/**
* @var {AddCategory} addcategory
* @private
*/
DataRegistry.prototype.addcategory = null;
DataRegistry.prototype.init = function() {
// Add purpose and category modals always at system context.
this.addpurpose = AddPurpose.getInstance(this.systemContextId);
this.addcategory = AddCategory.getInstance(this.systemContextId);
var stringKeys = [
{
key: 'changessaved',
component: 'moodle'
}, {
key: 'contextpurposecategorysaved',
component: 'tool_dataprivacy'
}, {
key: 'noblockstoload',
component: 'tool_dataprivacy'
}, {
key: 'noactivitiestoload',
component: 'tool_dataprivacy'
}, {
key: 'nocoursestoload',
component: 'tool_dataprivacy'
}
];
this.strings = Str.get_strings(stringKeys);
this.registerEventListeners();
// Load the default context level form.
if (this.currentContextId) {
this.loadForm('context_form', [this.currentContextId], this.submitContextFormAjax.bind(this));
} else {
this.loadForm('contextlevel_form', [this.currentContextLevel], this.submitContextLevelFormAjax.bind(this));
}
};
DataRegistry.prototype.registerEventListeners = function() {
$(SELECTORS.TREE_NODES).on('click', function(ev) {
ev.preventDefault();
var trigger = $(ev.currentTarget);
// Active node.
$(SELECTORS.TREE_NODES).removeClass('active');
trigger.addClass('active');
var contextLevel = trigger.data('contextlevel');
var contextId = trigger.data('contextid');
if (contextLevel) {
// Context level level.
window.history.pushState({}, null, '?contextlevel=' + contextLevel);
// Remove previous add purpose and category listeners to avoid memory leaks.
this.addpurpose.removeListeners();
this.addcategory.removeListeners();
// Load the context level form.
this.currentContextLevel = contextLevel;
this.loadForm('contextlevel_form', [this.currentContextLevel], this.submitContextLevelFormAjax.bind(this));
} else if (contextId) {
// Context instance level.
window.history.pushState({}, null, '?contextid=' + contextId);
// Remove previous add purpose and category listeners to avoid memory leaks.
this.addpurpose.removeListeners();
this.addcategory.removeListeners();
// Load the context level form.
this.currentContextId = contextId;
this.loadForm('context_form', [this.currentContextId], this.submitContextFormAjax.bind(this));
} else {
// Expandable nodes.
var expandContextId = trigger.data('expandcontextid');
var expandElement = trigger.data('expandelement');
var expanded = trigger.data('expanded');
// Extra checking that there is an expandElement because we remove it after loading 0 branches.
if (expandElement) {
if (!expanded) {
if (trigger.data('loaded') || !expandContextId || !expandElement) {
this.expand(trigger);
} else {
trigger.find('> i').removeClass('fa-plus');
trigger.find('> i').addClass('fa-circle-o-notch fa-spin');
this.loadExtra(trigger, expandContextId, expandElement);
}
} else {
this.collapse(trigger);
}
}
}
}.bind(this));
};
DataRegistry.prototype.removeListeners = function() {
$(SELECTORS.TREE_NODES).off('click');
};
DataRegistry.prototype.loadForm = function(fragmentName, fragmentArgs, formSubmitCallback) {
this.clearForm();
var fragment = Fragment.loadFragment('tool_dataprivacy', fragmentName, this.systemContextId, fragmentArgs);
fragment.done(function(html, js) {
$(SELECTORS.FORM_CONTAINER).html(html);
Templates.runTemplateJS(js);
this.addpurpose.registerEventListeners();
this.addcategory.registerEventListeners();
// We also catch the form submit event and use it to submit the form with ajax.
$(SELECTORS.FORM_CONTAINER).on('submit', 'form', formSubmitCallback);
}.bind(this)).fail(Notification.exception);
};
DataRegistry.prototype.clearForm = function() {
// For the previously loaded form.
Y.use('moodle-core-formchangechecker', function() {
M.core_formchangechecker.reset_form_dirty_state();
});
// Remove previous listeners.
$(SELECTORS.FORM_CONTAINER).off('submit', 'form');
};
/**
* This triggers a form submission, so that any mform elements can do final tricks before the form submission is processed.
*
* @method submitForm
* @param {Event} e Form submission event.
* @private
*/
DataRegistry.prototype.submitForm = function(e) {
e.preventDefault();
$(SELECTORS.FORM_CONTAINER).find('form').submit();
};
DataRegistry.prototype.submitContextLevelFormAjax = function(e) {
this.submitFormAjax(e, 'tool_dataprivacy_set_contextlevel_form');
};
DataRegistry.prototype.submitContextFormAjax = function(e) {
this.submitFormAjax(e, 'tool_dataprivacy_set_context_form');
};
DataRegistry.prototype.submitFormAjax = function(e, saveMethodName) {
// We don't want to do a real form submission.
e.preventDefault();
// Convert all the form elements values to a serialised string.
var formData = $(SELECTORS.FORM_CONTAINER).find('form').serialize();
return this.strings.then(function(strings) {
Ajax.call([{
methodname: saveMethodName,
args: {jsonformdata: JSON.stringify(formData)},
done: function() {
Notification.alert(strings[0], strings[1]);
},
fail: Notification.exception
}]);
return;
}).catch(Notification.exception);
};
DataRegistry.prototype.loadExtra = function(parentNode, expandContextId, expandElement) {
Ajax.call([{
methodname: 'tool_dataprivacy_tree_extra_branches',
args: {
contextid: expandContextId,
element: expandElement,
},
done: function(data) {
if (data.branches.length == 0) {
this.noElements(parentNode, expandElement);
return;
}
Templates.render('tool_dataprivacy/context_tree_branches', data)
.then(function(html) {
parentNode.after(html);
this.removeListeners();
this.registerEventListeners();
this.expand(parentNode);
parentNode.data('loaded', 1);
return;
}.bind(this))
.fail(Notification.exception);
}.bind(this),
fail: Notification.exception
}]);
};
DataRegistry.prototype.noElements = function(node, expandElement) {
node.data('expandcontextid', '');
node.data('expandelement', '');
this.strings.then(function(strings) {
// 2 = blocks, 3 = activities, 4 = courses (although courses is not likely really).
var key = 2;
if (expandElement == 'module') {
key = 3;
} else if (expandElement == 'course') {
key = 4;
}
node.text(strings[key]);
return;
}).fail(Notification.exception);
};
DataRegistry.prototype.collapse = function(node) {
node.data('expanded', 0);
node.siblings('nav').addClass('hidden');
node.find('> i').removeClass('fa-minus');
node.find('> i').addClass('fa-plus');
};
DataRegistry.prototype.expand = function(node) {
node.data('expanded', 1);
node.siblings('nav').removeClass('hidden');
node.find('> i').removeClass('fa-plus');
// Also remove the spinning one if data was just loaded.
node.find('> i').removeClass('fa-circle-o-notch fa-spin');
node.find('> i').addClass('fa-minus');
};
return /** @alias module:tool_dataprivacy/data_registry */ {
/**
* Initialise the page.
*
* @param {Number} systemContextId
* @param {Number} initContextLevel
* @param {Number} initContextId
* @return {DataRegistry}
*/
init: function(systemContextId, initContextLevel, initContextId) {
return new DataRegistry(systemContextId, initContextLevel, initContextId);
}
};
}
);
@@ -0,0 +1,96 @@
// 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/>.
/**
* Request actions.
*
* @module tool_dataprivacy/data_request_modal
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/notification', 'core/custom_interaction_events', 'core/modal', 'core/modal_registry',
'tool_dataprivacy/events'],
function($, Notification, CustomEvents, Modal, ModalRegistry, DataPrivacyEvents) {
var registered = false;
var SELECTORS = {
APPROVE_BUTTON: '[data-action="approve"]',
DENY_BUTTON: '[data-action="deny"]',
COMPLETE_BUTTON: '[data-action="complete"]'
};
/**
* Constructor for the Modal.
*
* @param {object} root The root jQuery element for the modal
*/
var ModalDataRequest = function(root) {
Modal.call(this, root);
};
ModalDataRequest.TYPE = 'tool_dataprivacy-data_request';
ModalDataRequest.prototype = Object.create(Modal.prototype);
ModalDataRequest.prototype.constructor = ModalDataRequest;
/**
* Set up all of the event handling for the modal.
*
* @method registerEventListeners
*/
ModalDataRequest.prototype.registerEventListeners = function() {
// Apply parent event listeners.
Modal.prototype.registerEventListeners.call(this);
this.getModal().on(CustomEvents.events.activate, SELECTORS.APPROVE_BUTTON, function(e, data) {
var approveEvent = $.Event(DataPrivacyEvents.approve);
this.getRoot().trigger(approveEvent, this);
if (!approveEvent.isDefaultPrevented()) {
this.hide();
data.originalEvent.preventDefault();
}
}.bind(this));
this.getModal().on(CustomEvents.events.activate, SELECTORS.DENY_BUTTON, function(e, data) {
var denyEvent = $.Event(DataPrivacyEvents.deny);
this.getRoot().trigger(denyEvent, this);
if (!denyEvent.isDefaultPrevented()) {
this.hide();
data.originalEvent.preventDefault();
}
}.bind(this));
this.getModal().on(CustomEvents.events.activate, SELECTORS.COMPLETE_BUTTON, function(e, data) {
var completeEvent = $.Event(DataPrivacyEvents.complete);
this.getRoot().trigger(completeEvent, this);
if (!completeEvent.isDefaultPrevented()) {
this.hide();
data.originalEvent.preventDefault();
}
}.bind(this));
};
// Automatically register with the modal registry the first time this module is imported so that you can create modals
// of this type using the modal factory.
if (!registered) {
ModalRegistry.register(ModalDataRequest.TYPE, ModalDataRequest, 'tool_dataprivacy/data_request_modal');
registered = true;
}
return ModalDataRequest;
});
@@ -0,0 +1,92 @@
// 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/>.
/**
* Module to update the displayed retention period.
*
* @module tool_dataprivacy/effective_retention_period
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery'],
function($) {
var SELECTORS = {
PURPOSE_SELECT: '#id_purposeid',
RETENTION_FIELD_BOOST: '#id_error_retention_current',
RETENTION_FIELD_CLEAN: '#fitem_id_retention_current [data-fieldtype=static]',
};
/**
* Constructor for the retention period display.
*
* @param {Array} purposeRetentionPeriods Associative array of purposeids with effective retention period at this context
*/
var EffectiveRetentionPeriod = function(purposeRetentionPeriods) {
this.purposeRetentionPeriods = purposeRetentionPeriods;
this.registerEventListeners();
};
/**
* Removes the current 'change' listeners.
*
* Useful when a new form is loaded.
*/
var removeListeners = function() {
$(SELECTORS.PURPOSE_SELECT).off('change');
};
/**
* @var {Array} purposeRetentionPeriods
* @private
*/
EffectiveRetentionPeriod.prototype.purposeRetentionPeriods = [];
/**
* Add purpose change listeners.
*
* @method registerEventListeners
*/
EffectiveRetentionPeriod.prototype.registerEventListeners = function() {
$(SELECTORS.PURPOSE_SELECT).on('change', function(ev) {
var selected = $(ev.currentTarget).val();
var selectedPurpose = this.purposeRetentionPeriods[selected];
var cleanSelector = $(SELECTORS.RETENTION_FIELD_CLEAN);
if (cleanSelector.length > 0) {
cleanSelector.text(selectedPurpose);
} else {
var boostSelector = $(SELECTORS.RETENTION_FIELD_BOOST);
var retentionField = boostSelector.siblings();
if (retentionField.length > 0) {
retentionField.text(selectedPurpose);
}
}
}.bind(this));
};
return /** @alias module:tool_dataprivacy/effective_retention_period */ {
init: function(purposeRetentionPeriods) {
// Remove previously attached listeners.
removeListeners();
return new EffectiveRetentionPeriod(purposeRetentionPeriods);
}
};
}
);
+31
View File
@@ -0,0 +1,31 @@
// 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/>.
/**
* Contain the events the data privacy tool can fire.
*
* @module tool_dataprivacy/events
* @class events
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([], function() {
return {
approve: 'tool_dataprivacy-data_request:approve',
deny: 'tool_dataprivacy-data_request:deny',
complete: 'tool_dataprivacy-data_request:complete'
};
});
@@ -0,0 +1,88 @@
// 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/>.
/**
* Potential user selector module.
*
* @module tool_dataprivacy/expand_contract
* @class page-expand-contract
* @package tool_dataprivacy
* @copyright 2018 Adrian Greeve
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/url', 'core/str'], function($, url, str) {
var expandedImage = $('<img alt="" src="' + url.imageUrl('t/expanded') + '"/>');
var collapsedImage = $('<img alt="" src="' + url.imageUrl('t/collapsed') + '"/>');
return /** @alias module:tool_dataprivacy/expand-collapse */ {
/**
* Expand or collapse a selected node.
*
* @param {object} targetnode The node that we want to expand / collapse
* @param {object} thisnode The node that was clicked.
*/
expandCollapse: function(targetnode, thisnode) {
if (targetnode.hasClass('hide')) {
targetnode.removeClass('hide');
targetnode.addClass('visible');
targetnode.attr('aria-expanded', true);
thisnode.find(':header i.fa').removeClass('fa-plus-square');
thisnode.find(':header i.fa').addClass('fa-minus-square');
thisnode.find(':header img.icon').attr('src', expandedImage.attr('src'));
} else {
targetnode.removeClass('visible');
targetnode.addClass('hide');
targetnode.attr('aria-expanded', false);
thisnode.find(':header i.fa').removeClass('fa-minus-square');
thisnode.find(':header i.fa').addClass('fa-plus-square');
thisnode.find(':header img.icon').attr('src', collapsedImage.attr('src'));
}
},
/**
* Expand or collapse all nodes on this page.
*
* @param {string} nextstate The next state to change to.
*/
expandCollapseAll: function(nextstate) {
var currentstate = (nextstate == 'visible') ? 'hide' : 'visible';
var ariaexpandedstate = (nextstate == 'visible') ? true : false;
var iconclassnow = (nextstate == 'visible') ? 'fa-plus-square' : 'fa-minus-square';
var iconclassnext = (nextstate == 'visible') ? 'fa-minus-square' : 'fa-plus-square';
var imagenow = (nextstate == 'visible') ? expandedImage.attr('src') : collapsedImage.attr('src');
$('.' + currentstate).each(function() {
$(this).removeClass(currentstate);
$(this).addClass(nextstate);
$(this).attr('aria-expanded', ariaexpandedstate);
});
$('.tool_dataprivacy-expand-all').data('visibilityState', currentstate);
str.get_string(currentstate, 'tool_dataprivacy').then(function(langString) {
$('.tool_dataprivacy-expand-all').html(langString);
return;
}).catch(Notification.exception);
$(':header i.fa').each(function() {
$(this).removeClass(iconclassnow);
$(this).addClass(iconclassnext);
});
$(':header img.icon').each(function() {
$(this).attr('src', imagenow);
});
}
};
});
@@ -0,0 +1,76 @@
// 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/>.
/**
* Potential user selector module.
*
* @module tool_dataprivacy/form-user-selector
* @class form-user-selector
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {
return /** @alias module:tool_dataprivacy/form-user-selector */ {
processResults: function(selector, results) {
var users = [];
$.each(results, function(index, user) {
users.push({
value: user.id,
label: user._label
});
});
return users;
},
transport: function(selector, query, success, failure) {
var promise;
promise = Ajax.call([{
methodname: 'tool_dataprivacy_get_users',
args: {
query: query
}
}]);
promise[0].then(function(results) {
var promises = [],
i = 0;
// Render the label.
$.each(results, function(index, user) {
promises.push(Templates.render('tool_dataprivacy/form-user-selector-suggestion', user));
});
// Apply the label to the results.
return $.when.apply($.when, promises).then(function() {
var args = arguments;
$.each(results, function(index, user) {
user._label = args[i];
i++;
});
success(results);
return;
});
}).fail(failure);
}
};
});
@@ -0,0 +1,221 @@
// 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/>.
/**
* AMD module to enable users to manage their own data requests.
*
* @module tool_dataprivacy/myrequestactions
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([
'jquery',
'core/ajax',
'core/notification',
'core/str',
'core/modal_factory',
'core/modal_events',
'core/templates'],
function($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates) {
/**
* List of action selectors.
*
* @type {{CANCEL_REQUEST: string}}
* @type {{CONTACT_DPO: string}}
*/
var ACTIONS = {
CANCEL_REQUEST: '[data-action="cancel"]',
CONTACT_DPO: '[data-action="contactdpo"]',
};
/**
* MyRequestActions class.
*/
var MyRequestActions = function() {
this.registerEvents();
};
/**
* Register event listeners.
*/
MyRequestActions.prototype.registerEvents = function() {
$(ACTIONS.CANCEL_REQUEST).click(function(e) {
e.preventDefault();
var requestId = $(this).data('requestid');
var stringkeys = [
{
key: 'cancelrequest',
component: 'tool_dataprivacy'
},
{
key: 'cancelrequestconfirmation',
component: 'tool_dataprivacy'
}
];
Str.get_strings(stringkeys).then(function(langStrings) {
var title = langStrings[0];
var confirmMessage = langStrings[1];
return ModalFactory.create({
title: title,
body: confirmMessage,
type: ModalFactory.types.SAVE_CANCEL
}).then(function(modal) {
modal.setSaveButtonText(title);
// Handle save event.
modal.getRoot().on(ModalEvents.save, function() {
// Cancel the request.
var params = {
'requestid': requestId
};
var request = {
methodname: 'tool_dataprivacy_cancel_data_request',
args: params
};
Ajax.call([request])[0].done(function(data) {
if (data.result) {
window.location.reload();
} else {
Notification.addNotification({
message: data.warnings[0].message,
type: 'error'
});
}
}).fail(Notification.exception);
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
return modal;
});
}).done(function(modal) {
// Show the modal!
modal.show();
}).fail(Notification.exception);
});
$(ACTIONS.CONTACT_DPO).click(function(e) {
e.preventDefault();
var replyToEmail = $(this).data('replytoemail');
var keys = [
{
key: 'contactdataprotectionofficer',
component: 'tool_dataprivacy'
},
{
key: 'send',
component: 'tool_dataprivacy'
},
];
var sendButtonText = '';
Str.get_strings(keys).then(function(langStrings) {
var modalTitle = langStrings[0];
sendButtonText = langStrings[1];
var context = {
'replytoemail': replyToEmail
};
return ModalFactory.create({
title: modalTitle,
body: Templates.render('tool_dataprivacy/contact_dpo', context),
type: ModalFactory.types.SAVE_CANCEL,
large: true
});
}).done(function(modal) {
modal.setSaveButtonText(sendButtonText);
// Handle send event.
modal.getRoot().on(ModalEvents.save, function(e) {
var message = $('#message').val().trim();
if (message.length === 0) {
e.preventDefault();
// Show validation error when the message is empty.
$('[data-region="messageinput"]').addClass('has-danger notifyproblem');
$('#id_error_message').removeAttr('hidden');
} else {
// Send the message.
sendMessageToDPO(message);
}
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
// Show the modal!
modal.show();
}).fail(Notification.exception);
});
};
/**
* Send message to the Data Protection Officer.
*
* @param {String} message The message to send.
*/
function sendMessageToDPO(message) {
var request = {
methodname: 'tool_dataprivacy_contact_dpo',
args: {
message: message
}
};
var requestType = 'success';
Ajax.call([request])[0].then(function(data) {
if (data.result) {
return Str.get_string('requestsubmitted', 'tool_dataprivacy');
}
requestType = 'error';
return data.warnings.join('<br>');
}).done(function(message) {
Notification.addNotification({
message: message,
type: requestType
});
}).fail(Notification.exception);
}
return /** @alias module:tool_dataprivacy/myrequestactions */ {
// Public variables and functions.
/**
* Initialise the unified user filter.
*
* @method init
* @return {MyRequestActions}
*/
'init': function() {
return new MyRequestActions();
}
};
});
@@ -0,0 +1,132 @@
// 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/>.
/**
* AMD module for purposes actions.
*
* @module tool_dataprivacy/purposesactions
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([
'jquery',
'core/ajax',
'core/notification',
'core/str',
'core/modal_factory',
'core/modal_events'],
function($, Ajax, Notification, Str, ModalFactory, ModalEvents) {
/**
* List of action selectors.
*
* @type {{DELETE: string}}
*/
var ACTIONS = {
DELETE: '[data-action="deletepurpose"]',
};
/**
* PurposesActions class.
*/
var PurposesActions = function() {
this.registerEvents();
};
/**
* Register event listeners.
*/
PurposesActions.prototype.registerEvents = function() {
$(ACTIONS.DELETE).click(function(e) {
e.preventDefault();
var id = $(this).data('id');
var purposename = $(this).data('name');
var stringkeys = [
{
key: 'deletepurpose',
component: 'tool_dataprivacy'
},
{
key: 'deletepurposetext',
component: 'tool_dataprivacy',
param: purposename
},
{
key: 'delete'
}
];
Str.get_strings(stringkeys).then(function(langStrings) {
var title = langStrings[0];
var confirmMessage = langStrings[1];
var buttonText = langStrings[2];
return ModalFactory.create({
title: title,
body: confirmMessage,
type: ModalFactory.types.SAVE_CANCEL
}).then(function(modal) {
modal.setSaveButtonText(buttonText);
// Handle save event.
modal.getRoot().on(ModalEvents.save, function() {
var request = {
methodname: 'tool_dataprivacy_delete_purpose',
args: {'id': id}
};
Ajax.call([request])[0].done(function(data) {
if (data.result) {
$('tr[data-purposeid="' + id + '"]').remove();
} else {
Notification.addNotification({
message: data.warnings[0].message,
type: 'error'
});
}
}).fail(Notification.exception);
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
return modal;
});
}).done(function(modal) {
modal.show();
}).fail(Notification.exception);
});
};
return /** @alias module:tool_dataprivacy/purposesactions */ {
// Public variables and functions.
/**
* Initialise the module.
*
* @method init
* @return {PurposesActions}
*/
'init': function() {
return new PurposesActions();
}
};
});
@@ -0,0 +1,84 @@
// 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/>.
/**
* JS module for the data requests filter.
*
* @module tool_dataprivacy/request_filter
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/form-autocomplete', 'core/str', 'core/notification'], function($, Autocomplete, Str, Notification) {
/**
* Selectors.
*
* @access private
* @type {{REQUEST_FILTERS: string}}
*/
var SELECTORS = {
REQUEST_FILTERS: '#request-filters'
};
/**
* Init function.
*
* @method init
* @private
*/
var init = function() {
var stringkeys = [
{
key: 'filter',
component: 'moodle'
},
{
key: 'nofiltersapplied',
component: 'moodle'
}
];
Str.get_strings(stringkeys).then(function(langstrings) {
var placeholder = langstrings[0];
var noSelectionString = langstrings[1];
return Autocomplete.enhance(SELECTORS.REQUEST_FILTERS, false, '', placeholder, false, true, noSelectionString, true);
}).fail(Notification.exception);
var last = $(SELECTORS.REQUEST_FILTERS).val();
$(SELECTORS.REQUEST_FILTERS).on('change', function() {
var current = $(this).val();
// Prevent form from submitting unnecessarily, eg. on blur when no filter is selected.
if (last.join(',') !== current.join(',')) {
// If we're submitting without filters, set the hidden input 'filters-cleared' to 1.
if (current.length === 0) {
$('#filters-cleared').val(1);
}
$(this.form).submit();
}
});
};
return /** @alias module:core/form-autocomplete */ {
/**
* Initialise the unified user filter.
*
* @method init
*/
init: function() {
init();
}
};
});
@@ -0,0 +1,270 @@
// 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/>.
/**
* Request actions.
*
* @module tool_dataprivacy/requestactions
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([
'jquery',
'core/ajax',
'core/notification',
'core/str',
'core/modal_factory',
'core/modal_events',
'core/templates',
'tool_dataprivacy/data_request_modal',
'tool_dataprivacy/events'],
function($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates, ModalDataRequest, DataPrivacyEvents) {
/**
* List of action selectors.
*
* @type {{APPROVE_REQUEST: string}}
* @type {{DENY_REQUEST: string}}
* @type {{VIEW_REQUEST: string}}
* @type {{MARK_COMPLETE: string}}
*/
var ACTIONS = {
APPROVE_REQUEST: '[data-action="approve"]',
DENY_REQUEST: '[data-action="deny"]',
VIEW_REQUEST: '[data-action="view"]',
MARK_COMPLETE: '[data-action="complete"]'
};
/**
* RequestActions class.
*/
var RequestActions = function() {
this.registerEvents();
};
/**
* Register event listeners.
*/
RequestActions.prototype.registerEvents = function() {
$(ACTIONS.VIEW_REQUEST).click(function(e) {
e.preventDefault();
var requestId = $(this).data('requestid');
// Cancel the request.
var params = {
'requestid': requestId
};
var request = {
methodname: 'tool_dataprivacy_get_data_request',
args: params
};
var promises = Ajax.call([request]);
$.when(promises[0]).then(function(data) {
if (data.result) {
return data.result;
}
// Fail.
Notification.addNotification({
message: data.warnings[0].message,
type: 'error'
});
return false;
}).then(function(data) {
var body = Templates.render('tool_dataprivacy/request_details', data);
var templateContext = {
approvedeny: data.approvedeny,
canmarkcomplete: data.canmarkcomplete
};
return ModalFactory.create({
title: data.typename,
body: body,
type: ModalDataRequest.TYPE,
large: true,
templateContext: templateContext
});
}).then(function(modal) {
// Handle approve event.
modal.getRoot().on(DataPrivacyEvents.approve, function() {
showConfirmation(DataPrivacyEvents.approve, requestId);
});
// Handle deny event.
modal.getRoot().on(DataPrivacyEvents.deny, function() {
showConfirmation(DataPrivacyEvents.deny, requestId);
});
// Handle send event.
modal.getRoot().on(DataPrivacyEvents.complete, function() {
var params = {
'requestid': requestId
};
handleSave('tool_dataprivacy_mark_complete', params);
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
// Show the modal!
modal.show();
return;
}).catch(Notification.exception);
});
$(ACTIONS.APPROVE_REQUEST).click(function(e) {
e.preventDefault();
var requestId = $(this).data('requestid');
showConfirmation(DataPrivacyEvents.approve, requestId);
});
$(ACTIONS.DENY_REQUEST).click(function(e) {
e.preventDefault();
var requestId = $(this).data('requestid');
showConfirmation(DataPrivacyEvents.deny, requestId);
});
$(ACTIONS.MARK_COMPLETE).click(function(e) {
e.preventDefault();
showConfirmation(DataPrivacyEvents.complete, $(this).data('requestid'));
});
};
/**
* Show the confirmation dialogue.
*
* @param {String} action The action name.
* @param {Number} requestId The request ID.
*/
function showConfirmation(action, requestId) {
var keys = [];
var wsfunction = '';
var params = {
'requestid': requestId
};
switch (action) {
case DataPrivacyEvents.approve:
keys = [
{
key: 'approverequest',
component: 'tool_dataprivacy'
},
{
key: 'confirmapproval',
component: 'tool_dataprivacy'
}
];
wsfunction = 'tool_dataprivacy_approve_data_request';
break;
case DataPrivacyEvents.deny:
keys = [
{
key: 'denyrequest',
component: 'tool_dataprivacy'
},
{
key: 'confirmdenial',
component: 'tool_dataprivacy'
}
];
wsfunction = 'tool_dataprivacy_deny_data_request';
break;
case DataPrivacyEvents.complete:
keys = [
{
key: 'markcomplete',
component: 'tool_dataprivacy'
},
{
key: 'confirmcompletion',
component: 'tool_dataprivacy'
}
];
wsfunction = 'tool_dataprivacy_mark_complete';
break;
}
var modalTitle = '';
Str.get_strings(keys).then(function(langStrings) {
modalTitle = langStrings[0];
var confirmMessage = langStrings[1];
return ModalFactory.create({
title: modalTitle,
body: confirmMessage,
type: ModalFactory.types.SAVE_CANCEL
});
}).then(function(modal) {
modal.setSaveButtonText(modalTitle);
// Handle save event.
modal.getRoot().on(ModalEvents.save, function() {
handleSave(wsfunction, params);
});
// Handle hidden event.
modal.getRoot().on(ModalEvents.hidden, function() {
// Destroy when hidden.
modal.destroy();
});
modal.show();
return;
}).catch(Notification.exception);
}
/**
* Calls a web service function and reloads the page on success and shows a notification.
* Displays an error notification, otherwise.
*
* @param {String} wsfunction The web service function to call.
* @param {Object} params The parameters for the web service functoon.
*/
function handleSave(wsfunction, params) {
// Confirm the request.
var request = {
methodname: wsfunction,
args: params
};
Ajax.call([request])[0].done(function(data) {
if (data.result) {
// On success, reload the page so that the data request table will be updated.
// TODO: Probably in the future, better to reload the table or the target data request via AJAX.
window.location.reload();
} else {
// Add the notification.
Notification.addNotification({
message: data.warnings[0].message,
type: 'error'
});
}
}).fail(Notification.exception);
}
return RequestActions;
});
+41
View File
@@ -0,0 +1,41 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This page lets users manage categories.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . '/../../../config.php');
require_login(null, false);
$url = new moodle_url("/admin/tool/dataprivacy/categories.php");
$title = get_string('editcategories', 'tool_dataprivacy');
\tool_dataprivacy\page_helper::setup($url, $title, 'dataregistry');
$output = $PAGE->get_renderer('tool_dataprivacy');
echo $output->header();
$categories = \tool_dataprivacy\api::get_categories();
$renderable = new \tool_dataprivacy\output\categories($categories);
echo $output->render($renderable);
echo $output->footer();
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,91 @@
<?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/>.
/**
* Class for loading/storing data categories from the DB.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot . '/' . $CFG->admin . '/tool/dataprivacy/lib.php');
/**
* Class for loading/storing data categories from the DB.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class category extends \core\persistent {
/**
* Database table.
*/
const TABLE = 'tool_dataprivacy_category';
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return array(
'name' => array(
'type' => PARAM_TEXT,
'description' => 'The category name.',
),
'description' => array(
'type' => PARAM_RAW,
'description' => 'The category description.',
'null' => NULL_ALLOWED,
'default' => '',
),
'descriptionformat' => array(
'choices' => array(FORMAT_HTML, FORMAT_MOODLE, FORMAT_PLAIN, FORMAT_MARKDOWN),
'type' => PARAM_INT,
'default' => FORMAT_HTML
),
);
}
/**
* Is this category used?.
*
* @return null
*/
public function is_used() {
if (\tool_dataprivacy\contextlevel::is_category_used($this->get('id')) ||
\tool_dataprivacy\context_instance::is_category_used($this->get('id'))) {
return true;
}
$pluginconfig = get_config('tool_dataprivacy');
$levels = \context_helper::get_all_levels();
foreach ($levels as $level => $classname) {
list($unused, $categoryvar) = \tool_dataprivacy\data_registry::var_names_from_context($classname);
if (!empty($pluginconfig->{$categoryvar}) && $pluginconfig->{$categoryvar} == $this->get('id')) {
return true;
}
}
return false;
}
}
@@ -0,0 +1,116 @@
<?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/>.
/**
* Class for loading/storing context instances data from the DB.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
/**
* Class for loading/storing context instances data from the DB.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class context_instance extends \core\persistent {
/**
* Database table.
*/
const TABLE = 'tool_dataprivacy_ctxinstance';
/**
* Not set value.
*/
const NOTSET = 0;
/**
* Inherit value.
*/
const INHERIT = -1;
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return array(
'contextid' => array(
'type' => PARAM_INT,
'description' => 'The context id.',
),
'purposeid' => array(
'type' => PARAM_INT,
'description' => 'The purpose id.',
'null' => NULL_ALLOWED,
),
'categoryid' => array(
'type' => PARAM_INT,
'description' => 'The category id.',
'null' => NULL_ALLOWED,
),
);
}
/**
* Returns an instance by contextid.
*
* @param mixed $contextid
* @param mixed $exception
* @return null
*/
public static function get_record_by_contextid($contextid, $exception = true) {
global $DB;
if (!$record = $DB->get_record(self::TABLE, array('contextid' => $contextid))) {
if (!$exception) {
return false;
} else {
throw new \dml_missing_record_exception(self::TABLE);
}
}
return new static(0, $record);
}
/**
* Is the provided purpose used by any context instance?
*
* @param int $purposeid
* @return bool
*/
public static function is_purpose_used($purposeid) {
global $DB;
return $DB->record_exists(self::TABLE, array('purposeid' => $purposeid));
}
/**
* Is the provided category used by any context instance?
*
* @param int $categoryid
* @return bool
*/
public static function is_category_used($categoryid) {
global $DB;
return $DB->record_exists(self::TABLE, array('categoryid' => $categoryid));
}
}
@@ -0,0 +1,140 @@
<?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/>.
/**
* Class for loading/storing context level data from the DB.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
/**
* Class for loading/storing context level data from the DB.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class contextlevel extends \core\persistent {
/**
* Database table.
*/
const TABLE = 'tool_dataprivacy_ctxlevel';
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return array(
'contextlevel' => array(
'type' => PARAM_INT,
'description' => 'The context level.',
),
'purposeid' => array(
'type' => PARAM_INT,
'description' => 'The purpose id.',
),
'categoryid' => array(
'type' => PARAM_INT,
'description' => 'The category id.',
),
);
}
/**
* Returns an instance by contextlevel.
*
* @param mixed $contextlevel
* @param mixed $exception
* @return null
*/
public static function get_record_by_contextlevel($contextlevel, $exception = true) {
global $DB;
$cache = \cache::make('tool_dataprivacy', 'contextlevel');
if ($data = $cache->get($contextlevel)) {
return new static(0, $data);
}
if (!$record = $DB->get_record(self::TABLE, array('contextlevel' => $contextlevel))) {
if (!$exception) {
return false;
} else {
throw new \dml_missing_record_exception(self::TABLE);
}
}
return new static(0, $record);
}
/**
* Is the provided purpose used by any contextlevel?
*
* @param int $purposeid
* @return bool
*/
public static function is_purpose_used($purposeid) {
global $DB;
return $DB->record_exists(self::TABLE, array('purposeid' => $purposeid));
}
/**
* Is the provided category used by any contextlevel?
*
* @param int $categoryid
* @return bool
*/
public static function is_category_used($categoryid) {
global $DB;
return $DB->record_exists(self::TABLE, array('categoryid' => $categoryid));
}
/**
* Adds the new record to the cache.
*
* @return null
*/
protected function after_create() {
$cache = \cache::make('tool_dataprivacy', 'contextlevel');
$cache->set($this->get('contextlevel'), $this->to_record());
}
/**
* Updates the cache record.
*
* @param bool $result
* @return null
*/
protected function after_update($result) {
$cache = \cache::make('tool_dataprivacy', 'contextlevel');
$cache->set($this->get('contextlevel'), $this->to_record());
}
/**
* Removes unnecessary stuff from db.
*
* @return null
*/
protected function before_delete() {
$cache = \cache::make('tool_dataprivacy', 'contextlevel');
$cache->delete($this->get('contextlevel'));
}
}
@@ -0,0 +1,64 @@
<?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/>.
/**
* Contains the contextlist persistent.
*
* @package tool_dataprivacy
* @copyright 2018 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
use core\persistent;
/**
* The contextlist persistent.
*
* @copyright 2018 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class contextlist extends persistent {
/** The table name this persistent object maps to. */
const TABLE = 'tool_dataprivacy_contextlist';
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return [
'component' => [
'type' => PARAM_TEXT
]
];
}
/**
* Create a new contextlist persistent from an instance of \core_privacy\local\request\contextlist.
*
* @param \core_privacy\local\request\contextlist $contextlist the core privacy contextlist.
* @return contextlist a contextlist persistent.
*/
public static function from_contextlist(\core_privacy\local\request\contextlist $contextlist) : contextlist {
$contextlistpersistent = new contextlist();
return $contextlistpersistent->set('component', $contextlist->get_component());
}
}
@@ -0,0 +1,74 @@
<?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/>.
/**
* Contains the contextlist_context persistent.
*
* @package tool_dataprivacy
* @copyright 2018 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
use core\persistent;
/**
* The contextlist_context persistent.
*
* @copyright 2018 Jake Dallimore <jrhdallimore@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class contextlist_context extends persistent {
/** The table name this persistent object maps to. */
const TABLE = 'tool_dataprivacy_ctxlst_ctx';
/** This context is pending approval. */
const STATUS_PENDING = 0;
/** This context has been approved. */
const STATUS_APPROVED = 1;
/** This context has been rejected. */
const STATUS_REJECTED = 2;
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return [
'contextid' => [
'type' => PARAM_INT
],
'contextlistid' => [
'type' => PARAM_INT
],
'status' => [
'choices' => [
self::STATUS_PENDING,
self::STATUS_APPROVED,
self::STATUS_REJECTED,
],
'default' => self::STATUS_PENDING,
'type' => PARAM_INT
]
];
}
}
@@ -0,0 +1,356 @@
<?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/>.
/**
* Data registry business logic methods. Mostly internal stuff.
*
* All methods should be considered part of the internal tool_dataprivacy API
* unless something different is specified.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use coding_exception;
use tool_dataprivacy\purpose;
use tool_dataprivacy\category;
use tool_dataprivacy\contextlevel;
use tool_dataprivacy\context_instance;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/coursecatlib.php');
/**
* Data registry business logic methods. Mostly internal stuff.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class data_registry {
/**
* @var array Inheritance between context levels.
*/
private static $contextlevelinheritance = [
CONTEXT_USER => [CONTEXT_SYSTEM],
CONTEXT_COURSECAT => [CONTEXT_SYSTEM],
CONTEXT_COURSE => [CONTEXT_COURSECAT, CONTEXT_SYSTEM],
CONTEXT_MODULE => [CONTEXT_COURSE, CONTEXT_COURSECAT, CONTEXT_SYSTEM],
CONTEXT_BLOCK => [CONTEXT_COURSE, CONTEXT_COURSECAT, CONTEXT_SYSTEM],
];
/**
* Returns purpose and category var names from a context class name
*
* @param string $classname
* @return string[]
*/
public static function var_names_from_context($classname) {
return [
$classname . '_purpose',
$classname . '_category',
];
}
/**
* Returns the default purpose id and category id for the provided context level.
*
* The caller code is responsible of checking that $contextlevel is an integer.
*
* @param int $contextlevel
* @return int|false[]
*/
public static function get_defaults($contextlevel) {
$classname = \context_helper::get_class_for_level($contextlevel);
list($purposevar, $categoryvar) = self::var_names_from_context($classname);
$purposeid = get_config('tool_dataprivacy', $purposevar);
$categoryid = get_config('tool_dataprivacy', $categoryvar);
if (empty($purposeid)) {
$purposeid = false;
}
if (empty($categoryid)) {
$categoryid = false;
}
return [$purposeid, $categoryid];
}
/**
* Are data registry defaults set?
*
* At least the system defaults need to be set.
*
* @return bool
*/
public static function defaults_set() {
list($purposeid, $categoryid) = self::get_defaults(CONTEXT_SYSTEM);
if (empty($purposeid) || empty($categoryid)) {
return false;
}
return true;
}
/**
* Returns all site categories that are visible to the current user.
*
* @return \coursecat[]
*/
public static function get_site_categories() {
global $DB;
if (method_exists('\coursecat', 'get_all')) {
$categories = \coursecat::get_all(['returnhidden' => true]);
} else {
// Fallback (to be removed once this gets integrated into master).
$ids = $DB->get_fieldset_select('course_categories', 'id', '');
$categories = \coursecat::get_many($ids);
}
foreach ($categories as $key => $category) {
if (!$category->is_uservisible()) {
unset($categories[$key]);
}
}
return $categories;
}
/**
* Returns the roles assigned to the provided level.
*
* Important to note that it returns course-level assigned roles
* if the provided context level is below course.
*
* @param \context $context
* @return array
*/
public static function get_subject_scope(\context $context) {
if ($contextcourse = $context->get_course_context(false)) {
// Below course level we look at module or block level roles + course-assigned roles.
$courseroles = get_roles_with_assignment_on_context($contextcourse);
$roles = $courseroles + get_roles_with_assignment_on_context($context);
} else {
// We list category + system for others (we don't work with user instances so no need to work about them).
$roles = get_roles_used_in_context($context);
}
return array_map(function($role) {
if ($role->name) {
return $role->name;
} else {
return $role->shortname;
}
}, $roles);
}
/**
* Returns the effective value given a context instance
*
* @param \context $context
* @param string $element 'category' or 'purpose'
* @param int|false $forcedvalue Use this value as if this was this context instance value.
* @return persistent|false It return a 'purpose' instance or a 'category' instance, depending on $element
*/
public static function get_effective_context_value(\context $context, $element, $forcedvalue=false) {
if ($element !== 'purpose' && $element !== 'category') {
throw new coding_exception('Only \'purpose\' and \'category\' are supported.');
}
$fieldname = $element . 'id';
if ($forcedvalue === false) {
$instance = context_instance::get_record_by_contextid($context->id, false);
if (!$instance) {
// If the instance does not have a value defaults to not set, so we grab the context level default as its value.
$instancevalue = context_instance::NOTSET;
} else {
$instancevalue = $instance->get($fieldname);
}
} else {
$instancevalue = $forcedvalue;
}
// Not set.
if ($instancevalue == context_instance::NOTSET) {
// The effective value varies depending on the context level.
if ($context->contextlevel == CONTEXT_USER) {
// Use the context level value as we don't allow people to set specific instances values.
return self::get_effective_contextlevel_value($context->contextlevel, $element);
} else {
// Use the default context level value.
list($purposeid, $categoryid) = self::get_effective_default_contextlevel_purpose_and_category(
$context->contextlevel
);
return self::get_element_instance($element, $$fieldname);
}
}
// Specific value for this context instance.
if ($instancevalue != context_instance::INHERIT) {
return self::get_element_instance($element, $instancevalue);
}
// This context is using inherited so let's return the parent effective value.
$parentcontext = $context->get_parent_context();
if (!$parentcontext) {
return false;
}
// The forced value should not be transmitted to parent contexts.
return self::get_effective_context_value($parentcontext, $element);
}
/**
* Returns the effective value for a context level.
*
* Note that this is different from the effective default context level
* (see get_effective_default_contextlevel_purpose_and_category) as this is returning
* the value set in the data registry, not in the defaults page.
*
* @param int $contextlevel
* @param string $element 'category' or 'purpose'
* @param int $forcedvalue Use this value as if this was this context level purpose.
* @return \tool_dataprivacy\purpose|false
*/
public static function get_effective_contextlevel_value($contextlevel, $element, $forcedvalue = false) {
if ($element !== 'purpose' && $element !== 'category') {
throw new coding_exception('Only \'purpose\' and \'category\' are supported.');
}
$fieldname = $element . 'id';
if ($contextlevel != CONTEXT_SYSTEM && $contextlevel != CONTEXT_USER) {
throw new \coding_exception('Only context_system and context_user values can be retrieved, no other context levels ' .
'have a purpose or a category.');
}
if ($forcedvalue === false) {
$instance = contextlevel::get_record_by_contextlevel($contextlevel, false);
if (!$instance) {
// If the context level does not have a value defaults to not set, so we grab the context level default as
// its value.
$instancevalue = context_instance::NOTSET;
} else {
$instancevalue = $instance->get($fieldname);
}
} else {
$instancevalue = $forcedvalue;
}
// Not set -> Use the default context level value.
if ($instancevalue == context_instance::NOTSET) {
list($purposeid, $categoryid) = self::get_effective_default_contextlevel_purpose_and_category($contextlevel);
return self::get_element_instance($element, $$fieldname);
}
// Specific value for this context instance.
if ($instancevalue != context_instance::INHERIT) {
return self::get_element_instance($element, $instancevalue);
}
if ($contextlevel == CONTEXT_SYSTEM) {
throw new coding_exception('Something went wrong, system defaults should be set and we should already have a value.');
}
// If we reach this point is that we are inheriting so get the parent context level and repeat.
$parentcontextlevel = reset(self::$contextlevelinheritance[$contextlevel]);
// Forced value are intentionally not passed as the force value should only affect the immediate context level.
return self::get_effective_contextlevel_value($parentcontextlevel, $element);
}
/**
* Returns the effective default purpose and category for a context level.
*
* @param int $contextlevel
* @param int $forcedpurposevalue Use this value as if this was this context level purpose.
* @param int $forcedcategoryvalue Use this value as if this was this context level category.
* @return int[]
*/
public static function get_effective_default_contextlevel_purpose_and_category($contextlevel, $forcedpurposevalue = false,
$forcedcategoryvalue = false) {
list($purposeid, $categoryid) = self::get_defaults($contextlevel);
// Honour forced values.
if ($forcedpurposevalue) {
$purposeid = $forcedpurposevalue;
}
if ($forcedcategoryvalue) {
$categoryid = $forcedcategoryvalue;
}
// Not set == INHERIT for defaults.
if ($purposeid == context_instance::INHERIT || $purposeid == context_instance::NOTSET) {
$purposeid = false;
}
if ($categoryid == context_instance::INHERIT || $categoryid == context_instance::NOTSET) {
$categoryid = false;
}
if ($contextlevel != CONTEXT_SYSTEM && ($purposeid === false || $categoryid === false)) {
foreach (self::$contextlevelinheritance[$contextlevel] as $parent) {
list($parentpurposeid, $parentcategoryid) = self::get_defaults($parent);
// Not set == INHERIT for defaults.
if ($parentpurposeid == context_instance::INHERIT || $parentpurposeid == context_instance::NOTSET) {
$parentpurposeid = false;
}
if ($parentcategoryid == context_instance::INHERIT || $parentcategoryid == context_instance::NOTSET) {
$parentcategoryid = false;
}
if ($purposeid === false && $parentpurposeid) {
$purposeid = $parentpurposeid;
}
if ($categoryid === false && $parentcategoryid) {
$categoryid = $parentcategoryid;
}
}
}
// They may still be false, but we return anyway.
return [$purposeid, $categoryid];
}
/**
* Returns an instance of the provided element.
*
* @throws \coding_exception
* @param string $element The element name 'purpose' or 'category'
* @param int $id The element id
* @return \core\persistent
*/
private static function get_element_instance($element, $id) {
if ($element !== 'purpose' && $element !== 'category') {
throw new coding_exception('No other elements than purpose and category are allowed');
}
$classname = '\tool_dataprivacy\\' . $element;
return new $classname($id);
}
}
@@ -0,0 +1,213 @@
<?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/>.
/**
* Class for loading/storing data requests from the DB.
*
* @package tool_dataprivacy
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
defined('MOODLE_INTERNAL') || die();
use core\persistent;
/**
* Class for loading/storing competencies from the DB.
*
* @copyright 2018 Jun Pataleta
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class data_request extends persistent {
/** The table name this persistent object maps to. */
const TABLE = 'tool_dataprivacy_request';
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return [
'type' => [
'choices' => [
api::DATAREQUEST_TYPE_EXPORT,
api::DATAREQUEST_TYPE_DELETE,
api::DATAREQUEST_TYPE_OTHERS,
],
'type' => PARAM_INT
],
'comments' => [
'type' => PARAM_TEXT,
'default' => ''
],
'commentsformat' => [
'choices' => [
FORMAT_HTML,
FORMAT_MOODLE,
FORMAT_PLAIN,
FORMAT_MARKDOWN
],
'type' => PARAM_INT,
'default' => FORMAT_PLAIN
],
'userid' => [
'default' => 0,
'type' => PARAM_INT
],
'requestedby' => [
'default' => 0,
'type' => PARAM_INT
],
'status' => [
'default' => api::DATAREQUEST_STATUS_PENDING,
'choices' => [
api::DATAREQUEST_STATUS_PENDING,
api::DATAREQUEST_STATUS_PREPROCESSING,
api::DATAREQUEST_STATUS_AWAITING_APPROVAL,
api::DATAREQUEST_STATUS_APPROVED,
api::DATAREQUEST_STATUS_PROCESSING,
api::DATAREQUEST_STATUS_COMPLETE,
api::DATAREQUEST_STATUS_CANCELLED,
api::DATAREQUEST_STATUS_REJECTED,
api::DATAREQUEST_STATUS_DOWNLOAD_READY,
api::DATAREQUEST_STATUS_EXPIRED,
api::DATAREQUEST_STATUS_DELETED,
],
'type' => PARAM_INT
],
'dpo' => [
'default' => 0,
'type' => PARAM_INT,
'null' => NULL_ALLOWED
],
'dpocomment' => [
'default' => '',
'type' => PARAM_TEXT,
'null' => NULL_ALLOWED
],
'dpocommentformat' => [
'choices' => [
FORMAT_HTML,
FORMAT_MOODLE,
FORMAT_PLAIN,
FORMAT_MARKDOWN
],
'type' => PARAM_INT,
'default' => FORMAT_PLAIN
],
];
}
/**
* Determines whether a completed data export request has expired.
* The response will be valid regardless of the expiry scheduled task having run.
*
* @param data_request $request the data request object whose expiry will be checked.
* @return bool true if the request has expired.
*/
public static function is_expired(data_request $request) {
$result = false;
// Only export requests expire.
if ($request->get('type') == api::DATAREQUEST_TYPE_EXPORT) {
switch ($request->get('status')) {
// Expired requests are obviously expired.
case api::DATAREQUEST_STATUS_EXPIRED:
$result = true;
break;
// Complete requests are expired if the expiry time has elapsed.
case api::DATAREQUEST_STATUS_DOWNLOAD_READY:
$expiryseconds = get_config('tool_dataprivacy', 'privacyrequestexpiry');
if ($expiryseconds > 0 && time() >= ($request->get('timemodified') + $expiryseconds)) {
$result = true;
}
break;
}
}
return $result;
}
/**
* Fetch completed data requests which are due to expire.
*
* @param int $userid Optional user ID to filter by.
*
* @return array Details of completed requests which are due to expire.
*/
public static function get_expired_requests($userid = 0) {
global $DB;
$expiryseconds = get_config('tool_dataprivacy', 'privacyrequestexpiry');
$expirytime = strtotime("-{$expiryseconds} second");
$table = self::TABLE;
$sqlwhere = 'type = :export_type AND status = :completestatus AND timemodified <= :expirytime';
$params = array(
'export_type' => api::DATAREQUEST_TYPE_EXPORT,
'completestatus' => api::DATAREQUEST_STATUS_DOWNLOAD_READY,
'expirytime' => $expirytime,
);
$sort = 'id';
$fields = 'id, userid';
// Filter by user ID if specified.
if ($userid > 0) {
$sqlwhere .= ' AND (userid = :userid OR requestedby = :requestedby)';
$params['userid'] = $userid;
$params['requestedby'] = $userid;
}
return $DB->get_records_select_menu($table, $sqlwhere, $params, $sort, $fields, 0, 2000);
}
/**
* Expire a given set of data requests.
* Update request status and delete the files.
*
* @param array $expiredrequests [requestid => userid]
*
* @return void
*/
public static function expire($expiredrequests) {
global $DB;
$ids = array_keys($expiredrequests);
if (count($ids) > 0) {
list($insql, $inparams) = $DB->get_in_or_equal($ids);
$initialparams = array(api::DATAREQUEST_STATUS_EXPIRED, time());
$params = array_merge($initialparams, $inparams);
$update = "UPDATE {" . self::TABLE . "}
SET status = ?, timemodified = ?
WHERE id $insql";
if ($DB->execute($update, $params)) {
$fs = get_file_storage();
foreach ($expiredrequests as $id => $userid) {
$usercontext = \context_user::instance($userid);
$fs->delete_area_files($usercontext->id, 'tool_dataprivacy', 'export', $id);
}
}
}
}
}
@@ -0,0 +1,162 @@
<?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/>.
/**
* Class that represents an expired context.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use dml_exception;
defined('MOODLE_INTERNAL') || die();
/**
* Class that represents an expired context.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class expired_context extends \core\persistent {
/**
* Database table.
*/
const TABLE = 'tool_dataprivacy_ctxexpired';
/**
* Expired contexts with no delete action scheduled.
*/
const STATUS_EXPIRED = 0;
/**
* Expired contexts approved for deletion.
*/
const STATUS_APPROVED = 1;
/**
* Already processed expired contexts.
*/
const STATUS_CLEANED = 2;
/**
* Return the definition of the properties of this model.
*
* @return array
*/
protected static function define_properties() {
return array(
'contextid' => array(
'type' => PARAM_INT,
'description' => 'The context id.',
),
'status' => array(
'choices' => [
self::STATUS_EXPIRED,
self::STATUS_APPROVED,
self::STATUS_CLEANED,
],
'type' => PARAM_INT,
'description' => 'The deletion status of the context.',
),
);
}
/**
* Returns expired_contexts instances that match the provided level and status.
*
* @param int $contextlevel The context level filter criterion.
* @param bool $status The expired context record's status.
* @param string $sort The sort column. Must match the column name in {tool_dataprivacy_ctxexpired} table
* @param int $offset The query offset.
* @param int $limit The query limit.
* @return expired_context[]
* @throws dml_exception
*/
public static function get_records_by_contextlevel($contextlevel = null, $status = false, $sort = 'timecreated',
$offset = 0, $limit = 0) {
global $DB;
$sql = "SELECT expiredctx.*
FROM {" . self::TABLE . "} expiredctx
JOIN {context} ctx
ON ctx.id = expiredctx.contextid";
$params = [];
$conditions = [];
if (!empty($contextlevel)) {
$conditions[] = "ctx.contextlevel = :contextlevel";
$params['contextlevel'] = intval($contextlevel);
}
if ($status !== false) {
$conditions[] = "expiredctx.status = :status";
$params['status'] = intval($status);
}
if (!empty($conditions)) {
$sql .= ' WHERE ' . implode(' AND ', $conditions);
}
$sql .= " ORDER BY expiredctx.{$sort}";
$records = $DB->get_records_sql($sql, $params, $offset, $limit);
// We return class instances.
$instances = array();
foreach ($records as $key => $record) {
$instances[$key] = new static(0, $record);
}
return $instances;
}
/**
* Returns the number of expired_contexts instances that match the provided level and status.
*
* @param int $contextlevel
* @param bool $status
* @return int
* @throws dml_exception
*/
public static function get_record_count_by_contextlevel($contextlevel = null, $status = false) {
global $DB;
$sql = "SELECT COUNT(1)
FROM {" . self::TABLE . "} expiredctx
JOIN {context} ctx
ON ctx.id = expiredctx.contextid";
$conditions = [];
$params = [];
if (!empty($contextlevel)) {
$conditions[] = "ctx.contextlevel = :contextlevel";
$params['contextlevel'] = intval($contextlevel);
}
if ($status !== false) {
$sql .= " AND expiredctx.status = :status";
$params['status'] = intval($status);
}
if (!empty($conditions)) {
$sql .= ' WHERE ' . implode(' AND ', $conditions);
}
return $DB->count_records_sql($sql, $params);
}
}
@@ -0,0 +1,154 @@
<?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/>.
/**
* Expired contexts manager.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use core_privacy\manager;
use tool_dataprivacy\expired_context;
defined('MOODLE_INTERNAL') || die();
/**
* Expired contexts manager.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
abstract class expired_contexts_manager {
/**
* Number of deleted contexts for each scheduled task run.
*/
const DELETE_LIMIT = 200;
/**
* Returns the list of expired context instances.
*
* @return \stdClass[]
*/
abstract protected function get_expired_contexts();
/**
* Specify with context levels this expired contexts manager is deleting.
*
* @return int[]
*/
abstract protected function get_context_levels();
/**
* Flag expired contexts as expired.
*
* @return int The number of contexts flagged as expired.
*/
public function flag_expired() {
if (!$this->check_requirements()) {
return 0;
}
$contexts = $this->get_expired_contexts();
foreach ($contexts as $context) {
api::create_expired_context($context->id);
}
return count($contexts);
}
/**
* Deletes the expired contexts.
*
* @return int The number of deleted contexts.
*/
public function delete() {
$numprocessed = 0;
if (!$this->check_requirements()) {
return $numprocessed;
}
$privacymanager = new manager();
$privacymanager->set_observer(new \tool_dataprivacy\manager_observer());
foreach ($this->get_context_levels() as $level) {
$expiredcontexts = expired_context::get_records_by_contextlevel($level, expired_context::STATUS_APPROVED);
foreach ($expiredcontexts as $expiredctx) {
if (!$this->delete_expired_context($privacymanager, $expiredctx)) {
continue;
}
$numprocessed += 1;
if ($numprocessed == self::DELETE_LIMIT) {
// Close the recordset.
$expiredcontexts->close();
break 2;
}
}
}
return $numprocessed;
}
/**
* Deletes user data from the provided context.
*
* @param manager $privacymanager
* @param expired_context $expiredctx
* @return \context|false
*/
protected function delete_expired_context(manager $privacymanager, expired_context $expiredctx) {
$context = \context::instance_by_id($expiredctx->get('contextid'), IGNORE_MISSING);
if (!$context) {
api::delete_expired_context($expiredctx->get('contextid'));
return false;
}
if (!PHPUNIT_TEST) {
mtrace('Deleting context ' . $context->id . ' - ' .
shorten_text($context->get_context_name(true, true)));
}
$privacymanager->delete_data_for_all_users_in_context($context);
api::set_expired_context_status($expiredctx, expired_context::STATUS_CLEANED);
return $context;
}
/**
* Check that the requirements to start deleting contexts are satisified.
*
* @return bool
*/
protected function check_requirements() {
api::check_can_manage_data_registry(\context_system::instance()->id);
if (!data_registry::defaults_set()) {
return false;
}
return true;
}
}
@@ -0,0 +1,135 @@
<?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/>.
/**
* Expired contexts manager for CONTEXT_COURSE, CONTEXT_MODULE and CONTEXT_BLOCK.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use tool_dataprivacy\purpose;
defined('MOODLE_INTERNAL') || die();
/**
* Expired contexts manager for CONTEXT_COURSE, CONTEXT_MODULE and CONTEXT_BLOCK.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class expired_course_related_contexts extends \tool_dataprivacy\expired_contexts_manager {
/**
* Course-related context levels.
*
* @return int[]
*/
protected function get_context_levels() {
return [CONTEXT_MODULE, CONTEXT_BLOCK, CONTEXT_COURSE];
}
/**
* Returns a recordset with user context instances that are possibly expired (to be confirmed by get_recordset_callback).
*
* @return \stdClass[]
*/
protected function get_expired_contexts() {
global $DB;
// Including context info + course end date + purposeid (this last one only if defined).
$fields = 'ctx.id AS id, ctxcourse.enddate AS courseenddate, dpctx.purposeid AS purposeid, ' .
\context_helper::get_preload_record_columns_sql('ctx');
// We want all contexts at course-dependant levels.
$parentpath = $DB->sql_concat('ctxcourse.path', "'/%'");
// This SQL query returns all course-dependant contexts (including the course context)
// which course end date already passed.
$sql = "SELECT $fields
FROM {context} ctx
JOIN (
SELECT c.enddate, subctx.path
FROM {context} subctx
JOIN {course} c
ON subctx.contextlevel = ? AND subctx.instanceid = c.id
WHERE c.enddate < ? AND c.enddate > 0
) ctxcourse
ON ctx.path LIKE {$parentpath} OR ctx.path = ctxcourse.path
LEFT JOIN {tool_dataprivacy_ctxinstance} dpctx
ON dpctx.contextid = ctx.id
LEFT JOIN {tool_dataprivacy_ctxexpired} expiredctx
ON ctx.id = expiredctx.contextid
WHERE expiredctx.id IS NULL
ORDER BY ctx.contextlevel DESC, ctx.path";
$possiblyexpired = $DB->get_recordset_sql($sql, [CONTEXT_COURSE, time()]);
$expiredcontexts = [];
$excludedcontextids = [];
foreach ($possiblyexpired as $record) {
\context_helper::preload_from_record($record);
// No strict checking as the context may already be deleted (e.g. we just deleted a course,
// module contexts below it will not exist).
$context = \context::instance_by_id($record->id, false);
if (!$context) {
continue;
}
// We pass the value we just got from SQL so get_effective_context_purpose don't need to query
// the db again to retrieve it. If there is no tool_dataprovider_ctxinstance record
// $record->purposeid will be null which is ok as it would force get_effective_context_purpose
// to return the default purpose for the context context level (no db queries involved).
$purposevalue = $record->purposeid !== null ? $record->purposeid : context_instance::NOTSET;
// It should be cheap as system purposes and context level purposes will be retrieved from a cache most of the time.
$purpose = api::get_effective_context_purpose($context, $purposevalue);
$dt = new \DateTime();
$dt->setTimestamp($record->courseenddate);
$di = new \DateInterval($purpose->get('retentionperiod'));
$dt->add($di);
if (time() < $dt->getTimestamp()) {
// Exclude this context ID as it has not reached the retention period yet.
$excludedcontextids[] = $context->id;
continue;
}
// Check if this context has children that have not yet expired.
$hasunexpiredchildren = false;
$children = $context->get_child_contexts();
foreach ($children as $child) {
if (in_array($child->id, $excludedcontextids)) {
$hasunexpiredchildren = true;
break;
}
}
if ($hasunexpiredchildren) {
// Exclude this context ID as it has children that have not yet expired.
$excludedcontextids[] = $context->id;
continue;
}
$expiredcontexts[$context->id] = $context;
}
return $expiredcontexts;
}
}
@@ -0,0 +1,150 @@
<?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/>.
/**
* Expired contexts manager for CONTEXT_USER.
*
* @package tool_dataprivacy
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_dataprivacy;
use core_privacy\manager;
defined('MOODLE_INTERNAL') || die();
/**
* Expired contexts manager for CONTEXT_USER.
*
* @copyright 2018 David Monllao
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class expired_user_contexts extends \tool_dataprivacy\expired_contexts_manager {
/**
* Only user level.
*
* @return int[]
*/
protected function get_context_levels() {
return [CONTEXT_USER];
}
/**
* Returns the user context instances that are expired.
*
* @return \stdClass[]
*/
protected function get_expired_contexts() {
global $DB;
// Including context info + last login timestamp.
$fields = 'ctx.id AS id, ' . \context_helper::get_preload_record_columns_sql('ctx');
$purpose = api::get_effective_contextlevel_purpose(CONTEXT_USER);
// Calculate what is considered expired according to the context level effective purpose (= now + retention period).
$expiredtime = new \DateTime();
$retention = new \DateInterval($purpose->get('retentionperiod'));
$expiredtime->sub($retention);
$sql = "SELECT $fields FROM {context} ctx
JOIN {user} u ON ctx.contextlevel = ? AND ctx.instanceid = u.id
LEFT JOIN {tool_dataprivacy_ctxexpired} expiredctx ON ctx.id = expiredctx.contextid
WHERE u.lastaccess <= ? AND u.lastaccess > 0 AND expiredctx.id IS NULL
ORDER BY ctx.path, ctx.contextlevel ASC";
$possiblyexpired = $DB->get_recordset_sql($sql, [CONTEXT_USER, $expiredtime->getTimestamp()]);
$expiredcontexts = [];
foreach ($possiblyexpired as $record) {
\context_helper::preload_from_record($record);
// No strict checking as the context may already be deleted (e.g. we just deleted a course,
// module contexts below it will not exist).
$context = \context::instance_by_id($record->id, false);
if (!$context) {
continue;
}
if (is_siteadmin($context->instanceid)) {
continue;
}
$courses = enrol_get_users_courses($context->instanceid, false, ['enddate']);
foreach ($courses as $course) {
if (!$course->enddate) {
// We can not know it what is going on here, so we prefer to be conservative.
continue 2;
}
if ($course->enddate >= time()) {
// Future or ongoing course.
continue 2;
}
}
$expiredcontexts[$context->id] = $context;
}
return $expiredcontexts;
}
/**
* Deletes user data from the provided context.
*
* Overwritten to delete the user.
*
* @param manager $privacymanager
* @param expired_context $expiredctx
* @return \context|false
*/
protected function delete_expired_context(manager $privacymanager, expired_context $expiredctx) {
$context = \context::instance_by_id($expiredctx->get('contextid'), IGNORE_MISSING);
if (!$context) {
api::delete_expired_context($expiredctx->get('contextid'));
return false;
}
if (!PHPUNIT_TEST) {
mtrace('Deleting context ' . $context->id . ' - ' .
shorten_text($context->get_context_name(true, true)));
}
// To ensure that all user data is deleted, instead of deleting by context, we run through and collect any stray
// contexts for the user that may still exist and call delete_data_for_user().
$user = \core_user::get_user($context->instanceid, '*', MUST_EXIST);
$approvedlistcollection = new \core_privacy\local\request\contextlist_collection($user->id);
$contextlistcollection = $privacymanager->get_contexts_for_userid($user->id);
foreach ($contextlistcollection as $contextlist) {
$approvedlistcollection->add_contextlist(new \core_privacy\local\request\approved_contextlist(
$user,
$contextlist->get_component(),
$contextlist->get_contextids()
));
}
$privacymanager->delete_data_for_user($approvedlistcollection);
api::set_expired_context_status($expiredctx, expired_context::STATUS_CLEANED);
// Delete the user.
delete_user($user);
return $context;
}
}

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