mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
Merge branch 'MDL-61407-master' of git://github.com/andrewnicols/moodle
This commit is contained in:
commit
209f6e1eda
123 changed files with 5000 additions and 33 deletions
46
question/behaviour/adaptive/classes/privacy/provider.php
Normal file
46
question/behaviour/adaptive/classes/privacy/provider.php
Normal file
|
@ -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 qbehaviour_adaptive.
|
||||
*
|
||||
* @package qbehaviour_adaptive
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_adaptive\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_adaptive implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -32,6 +32,7 @@ $string['gradingdetailswithpenalty'] = 'Marks for this submission: {$a->raw}/{$a
|
|||
$string['gradingdetailswithtotalpenalty'] = 'Marks for this submission: {$a->raw}/{$a->max}. This submission attracted a penalty of {$a->penalty}. Total penalties so far: {$a->totalpenalty}.';
|
||||
$string['notcomplete'] = 'Not complete';
|
||||
$string['pluginname'] = 'Adaptive mode';
|
||||
$string['privacy:metadata'] = 'The Adaptive mode question behaviour plugin does not store any personal data.';
|
||||
|
||||
// Old strings these are currently only used in the unit tests, to verify that the new
|
||||
// strings give the same results as the old strings.
|
||||
|
|
|
@ -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 qbehaviour_adaptivenopenalty.
|
||||
*
|
||||
* @package qbehaviour_adaptivenopenalty
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_adaptivenopenalty\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_adaptivenopenalty implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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['pluginname'] = 'Adaptive mode (no penalties)';
|
||||
$string['privacy:metadata'] = 'The Adaptive mode (no penalties) question behaviour plugin does not store any personal data.';
|
||||
|
|
46
question/behaviour/deferredcbm/classes/privacy/provider.php
Normal file
46
question/behaviour/deferredcbm/classes/privacy/provider.php
Normal file
|
@ -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 qbehaviour_deferredcbm.
|
||||
*
|
||||
* @package qbehaviour_deferredcbm
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_deferredcbm\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_deferredcbm implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -66,6 +66,7 @@ $string['howcertainareyou'] = 'Certainty{$a->help}: {$a->choices}';
|
|||
$string['noquestions'] = 'No responses';
|
||||
$string['overconfident'] = 'over-confident';
|
||||
$string['pluginname'] = 'Deferred feedback with CBM';
|
||||
$string['privacy:metadata'] = 'The Deferred feedback with CBM question behaviour plugin does not store any personal data.';
|
||||
$string['slightlyoverconfident'] = 'a bit over-confident';
|
||||
$string['slightlyunderconfident'] = 'a bit under-confident';
|
||||
$string['underconfident'] = 'under-confident';
|
||||
|
|
|
@ -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 qbehaviour_deferredfeedback.
|
||||
*
|
||||
* @package qbehaviour_deferredfeedback
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_deferredfeedback\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_deferredfeedback implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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['pluginname'] = 'Deferred feedback';
|
||||
$string['privacy:metadata'] = 'The Deferred feedback behaviour plugin does not store any personal data.';
|
||||
|
|
46
question/behaviour/immediatecbm/classes/privacy/provider.php
Normal file
46
question/behaviour/immediatecbm/classes/privacy/provider.php
Normal file
|
@ -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 qbehaviour_immediatecbm.
|
||||
*
|
||||
* @package qbehaviour_immediatecbm
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_immediatecbm\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_immediatecbm implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -25,3 +25,4 @@
|
|||
|
||||
$string['pleaseselectacertainty'] = 'Please select a certainty.';
|
||||
$string['pluginname'] = 'Immediate feedback with CBM';
|
||||
$string['privacy:metadata'] = 'The Immediate feedback with CBM question behaviour plugin does not store any personal data.';
|
||||
|
|
|
@ -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 qbehaviour_immediatefeedback.
|
||||
*
|
||||
* @package qbehaviour_immediatefeedback
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_immediatefeedback\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_immediatefeedback implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -25,3 +25,4 @@
|
|||
|
||||
$string['notcomplete'] = 'Not complete';
|
||||
$string['pluginname'] = 'Immediate feedback';
|
||||
$string['privacy:metadata'] = 'The Immediate feedback question behaviour plugin does not store any personal data.';
|
||||
|
|
|
@ -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 qbehaviour_informationitem.
|
||||
*
|
||||
* @package qbehaviour_informationitem
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_informationitem\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_informationitem implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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,4 +24,5 @@
|
|||
*/
|
||||
|
||||
$string['pluginname'] = 'Behaviour for information items';
|
||||
$string['seen'] = 'Seen';
|
||||
$string['privacy:metadata'] = 'The Information items question behaviour plugin does not store any personal data.';
|
||||
$string['seen'] = 'Seen';
|
||||
|
|
46
question/behaviour/interactive/classes/privacy/provider.php
Normal file
46
question/behaviour/interactive/classes/privacy/provider.php
Normal file
|
@ -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 qbehaviour_interactive.
|
||||
*
|
||||
* @package qbehaviour_interactive
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_interactive\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_interactive implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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,5 +24,6 @@
|
|||
*/
|
||||
|
||||
$string['pluginname'] = 'Interactive with multiple tries';
|
||||
$string['privacy:metadata'] = 'The Interactive with multiple tries question behaviour plugin does not store any personal data.';
|
||||
$string['triesremaining'] = 'Tries remaining: {$a}';
|
||||
$string['tryagain'] = 'Try again';
|
||||
|
|
|
@ -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 qbehaviour_interactivecountback.
|
||||
*
|
||||
* @package qbehaviour_interactivecountback
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_interactivecountback\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_interactivecountback implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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['pluginname'] = 'Interactive with multiple tries (credit for earlier tries)';
|
||||
$string['privacy:metadata'] = 'The Interactive with multiple tries (credit for earlier tries) question behaviour plugin does not store any personal data.';
|
||||
|
|
46
question/behaviour/manualgraded/classes/privacy/provider.php
Normal file
46
question/behaviour/manualgraded/classes/privacy/provider.php
Normal file
|
@ -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 qbehaviour_manualgraded.
|
||||
*
|
||||
* @package qbehaviour_manualgraded
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_manualgraded\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_manualgraded implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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['pluginname'] = 'Manually graded';
|
||||
$string['privacy:metadata'] = 'The Manually graded question behaviour plugin does not store any personal data.';
|
||||
|
|
46
question/behaviour/missing/classes/privacy/provider.php
Normal file
46
question/behaviour/missing/classes/privacy/provider.php
Normal file
|
@ -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 qbehaviour_missing.
|
||||
*
|
||||
* @package qbehaviour_missing
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qbehaviour_missing\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qbehaviour_missing implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -25,3 +25,4 @@
|
|||
|
||||
$string['pluginname'] = 'Missing behaviour';
|
||||
$string['questionusedunknownmodel'] = 'This question was attempted with a behaviour that is not currently available. The question is being displayed as well as possible, but some parts may be missing or wrong.';
|
||||
$string['privacy:metadata'] = 'The Missing question behaviour plugin does not store any personal data.';
|
||||
|
|
467
question/classes/privacy/provider.php
Normal file
467
question/classes/privacy/provider.php
Normal file
|
@ -0,0 +1,467 @@
|
|||
<?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_question.
|
||||
*
|
||||
* @package core_question
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace core_question\privacy;
|
||||
|
||||
use \core_privacy\local\metadata\collection;
|
||||
use \core_privacy\local\request\writer;
|
||||
use \core_privacy\local\request\transform;
|
||||
use \core_privacy\local\request\contextlist;
|
||||
use \core_privacy\local\request\approved_contextlist;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
require_once($CFG->libdir . '/questionlib.php');
|
||||
require_once($CFG->dirroot . '/question/format.php');
|
||||
require_once($CFG->dirroot . '/question/editlib.php');
|
||||
require_once($CFG->dirroot . '/question/engine/datalib.php');
|
||||
|
||||
/**
|
||||
* Privacy Subsystem implementation for core_question.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class provider implements
|
||||
// This component has data.
|
||||
// We need to return all question information where the user is
|
||||
// listed in either the question.createdby or question.modifiedby fields.
|
||||
// We may also need to fetch this informtion from individual plugins in some cases.
|
||||
// e.g. to fetch the full and other question-specific meta-data.
|
||||
\core_privacy\local\metadata\provider,
|
||||
|
||||
// This is a subsysytem which provides information to core.
|
||||
\core_privacy\local\request\subsystem\provider,
|
||||
|
||||
// This is a subsysytem which provides information to plugins.
|
||||
\core_privacy\local\request\subsystem\plugin_provider
|
||||
{
|
||||
|
||||
/**
|
||||
* Describe the types of data stored by the question subsystem.
|
||||
*
|
||||
* @param collection $items The collection to add metadata to.
|
||||
* @return collection The array of metadata
|
||||
*/
|
||||
public static function get_metadata(collection $items) : collection {
|
||||
// Other tables link against it.
|
||||
|
||||
// The 'question_usages' table does not contain any user data.
|
||||
// The table links the but doesn't store itself.
|
||||
|
||||
// The 'question_attempts' table contains data about question attempts.
|
||||
// It does not contain any user ids - these are stored by the caller.
|
||||
$items->add_database_table('question_attempts', [
|
||||
'flagged' => 'privacy:metadata:database:question_attempts:flagged',
|
||||
'responsesummary' => 'privacy:metadata:database:question_attempts:responsesummary',
|
||||
'timemodified' => 'privacy:metadata:database:question_attempts:timemodified',
|
||||
], 'privacy:metadata:database:question_attempts');;
|
||||
|
||||
// The 'question_attempt_steps' table contains data about changes to the state of a question attempt.
|
||||
$items->add_database_table('question_attempt_steps', [
|
||||
'state' => 'privacy:metadata:database:question_attempt_steps:state',
|
||||
'timecreated' => 'privacy:metadata:database:question_attempt_steps:timecreated',
|
||||
'fraction' => 'privacy:metadata:database:question_attempt_steps:fraction',
|
||||
'userid' => 'privacy:metadata:database:question_attempt_steps:userid',
|
||||
], 'privacy:metadata:database:question_attempt_steps');
|
||||
|
||||
// The 'question_attempt_step_data' table contains specific all metadata for each state.
|
||||
$items->add_database_table('question_attempt_step_data', [
|
||||
'name' => 'privacy:metadata:database:question_attempt_step_data:name',
|
||||
'value' => 'privacy:metadata:database:question_attempt_step_data:value',
|
||||
], 'privacy:metadata:database:question_attempt_step_data');
|
||||
|
||||
// These are all part of the set of the question definition
|
||||
// The 'question' table is used to store instances of each question.
|
||||
// It contains a createdby and modifiedby which related to specific users.
|
||||
$items->add_database_table('question', [
|
||||
'name' => 'privacy:metadata:database:question:name',
|
||||
'questiontext' => 'privacy:metadata:database:question:questiontext',
|
||||
'generalfeedback' => 'privacy:metadata:database:question:generalfeedback',
|
||||
'timecreated' => 'privacy:metadata:database:question:timecreated',
|
||||
'timemodified' => 'privacy:metadata:database:question:timemodified',
|
||||
'createdby' => 'privacy:metadata:database:question:createdby',
|
||||
'modifiedby' => 'privacy:metadata:database:question:modifiedby',
|
||||
], 'privacy:metadata:database:question');
|
||||
|
||||
// The 'question_answers' table is used to store the set of answers, with appropriate feedback for each question.
|
||||
// It does not contain user data.
|
||||
|
||||
// The 'question_hints' table is used to store hints about the correct answer for a question.
|
||||
// It does not contain user data.
|
||||
|
||||
// The 'question_categories' table contains structural information about how questions are presented in the UI.
|
||||
// It does not contain user data.
|
||||
|
||||
// The 'question_statistics' table contains aggregated statistics about responses.
|
||||
// It does not contain any identifiable user data.
|
||||
|
||||
// The question subsystem makes use of the qtype, qformat, and qbehaviour plugin types.
|
||||
$items->add_plugintype_link('qtype', [], 'privacy:metadata:link:qtype');
|
||||
$items->add_plugintype_link('qformat', [], 'privacy:metadata:link:qformat');
|
||||
$items->add_plugintype_link('qbehaviour', [], 'privacy:metadata:link:qbehaviour');
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Export the data for all question attempts on this question usage.
|
||||
*
|
||||
* Where a user is the owner of the usage, then the full detail of that usage will be included.
|
||||
* Where a user has been involved in the usage, but it is not their own usage, then only their specific
|
||||
* involvement will be exported.
|
||||
*
|
||||
* @param int $userid The userid to export.
|
||||
* @param \context $context The context that the question was used within.
|
||||
* @param array $usagecontext The subcontext of this usage.
|
||||
* @param int $usage The question usage ID.
|
||||
* @param \question_display_options $options The display options used for formatting.
|
||||
* @param bool $isowner Whether the user being exported is the user who used the question.
|
||||
*/
|
||||
public static function export_question_usage(
|
||||
int $userid,
|
||||
\context $context,
|
||||
array $usagecontext,
|
||||
int $usage,
|
||||
\question_display_options $options,
|
||||
bool $isowner
|
||||
) {
|
||||
// Determine the questions in this usage.
|
||||
$quba = \question_engine::load_questions_usage_by_activity($usage);
|
||||
|
||||
$basepath = $usagecontext;
|
||||
$questionscontext = array_merge($usagecontext, [
|
||||
get_string('questions', 'core_question'),
|
||||
]);
|
||||
|
||||
foreach ($quba->get_attempt_iterator() as $qa) {
|
||||
$question = $qa->get_question();
|
||||
$slotno = $qa->get_slot();
|
||||
$questionnocontext = array_merge($questionscontext, [$slotno]);
|
||||
|
||||
if ($isowner) {
|
||||
// This user is the overal owner of the question attempt and all data wil therefore be exported.
|
||||
//
|
||||
// Respect _some_ of the question_display_options to ensure that they don't have access to
|
||||
// generalfeedback and mark if the display options prevent this.
|
||||
// This is defensible because they can submit questions without completing a quiz and perform an SAR to
|
||||
// get prior access to the feedback and mark to improve upon it.
|
||||
// Export the response.
|
||||
$data = (object) [
|
||||
'name' => $question->name,
|
||||
'question' => $qa->get_question_summary(),
|
||||
'answer' => $qa->get_response_summary(),
|
||||
'timemodified' => transform::datetime($qa->timemodified),
|
||||
];
|
||||
|
||||
if ($options->marks >= \question_display_options::MARK_AND_MAX) {
|
||||
$data->mark = $qa->format_mark($options->markdp);
|
||||
}
|
||||
|
||||
if ($options->flags != \question_display_options::HIDDEN) {
|
||||
$data->flagged = transform::yesno($qa->is_flagged());
|
||||
}
|
||||
|
||||
if ($options->generalfeedback != \question_display_options::HIDDEN) {
|
||||
$data->generalfeedback = $question->format_generalfeedback($qa);
|
||||
}
|
||||
|
||||
if ($options->manualcomment != \question_display_options::HIDDEN) {
|
||||
$behaviour = $qa->get_behaviour();
|
||||
if ($qa->has_manual_comment()) {
|
||||
// Note - the export of the step data will ensure that the files are exported.
|
||||
// No need to do it again here.
|
||||
list($comment, $commentformat, $step) = $qa->get_manual_comment();
|
||||
|
||||
$comment = writer::with_context($context)
|
||||
->rewrite_pluginfile_urls(
|
||||
$questionnocontext,
|
||||
'question',
|
||||
'response_bf_comment',
|
||||
$step->get_id(),
|
||||
$comment
|
||||
);
|
||||
$data->comment = $behaviour->format_comment($comment, $commentformat);
|
||||
}
|
||||
}
|
||||
|
||||
writer::with_context($context)
|
||||
->export_data($questionnocontext, $data);
|
||||
|
||||
// Export the step data.
|
||||
static::export_question_attempt_steps($userid, $context, $questionnocontext, $qa, $options, $isowner);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export the data for each step transition for each question in each question attempt.
|
||||
*
|
||||
* Where a user is the owner of the usage, then all steps in the question usage will be exported.
|
||||
* Where a user is not the owner, but has been involved in the usage, then only their specific
|
||||
* involvement will be exported.
|
||||
*
|
||||
* @param int $userid The user to export for
|
||||
* @param \context $context The context that the question was used within.
|
||||
* @param array $questionnocontext The subcontext of this question number.
|
||||
* @param \question_attempt $qa The attempt being checked
|
||||
* @param \question_display_options $options The display options used for formatting.
|
||||
* @param bool $isowner Whether the user being exported is the user who used the question.
|
||||
*/
|
||||
public static function export_question_attempt_steps(
|
||||
int $userid,
|
||||
\context $context,
|
||||
array $questionnocontext,
|
||||
\question_attempt $qa,
|
||||
\question_display_options $options,
|
||||
$isowner
|
||||
) {
|
||||
$attemptdata = (object) [
|
||||
'steps' => [],
|
||||
];
|
||||
$stepno = 0;
|
||||
foreach ($qa->get_step_iterator() as $i => $step) {
|
||||
$stepno++;
|
||||
|
||||
if ($isowner || ($step->get_user_id() != $userid)) {
|
||||
// The user is the owner, or the author of the step.
|
||||
|
||||
$restrictedqa = new \question_attempt_with_restricted_history($qa, $i, null);
|
||||
$stepdata = (object) [
|
||||
// Note: Do not include the user here.
|
||||
'time' => transform::datetime($step->get_timecreated()),
|
||||
'action' => $qa->summarise_action($step),
|
||||
];
|
||||
|
||||
if ($options->marks >= \question_display_options::MARK_AND_MAX) {
|
||||
$stepdata->mark = $qa->format_fraction_as_mark($step->get_fraction(), $options->markdp);
|
||||
}
|
||||
|
||||
if ($options->correctness != \question_display_options::HIDDEN) {
|
||||
$stepdata->state = $restrictedqa->get_state_string($options->correctness);
|
||||
}
|
||||
|
||||
if ($step->has_behaviour_var('comment')) {
|
||||
$behaviour = $qa->get_behaviour();
|
||||
$comment = $step->get_behaviour_var('comment');
|
||||
$commentformat = $step->get_behaviour_var('commentformat');
|
||||
|
||||
if (empty(trim($comment))) {
|
||||
// Skip empty comments.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Format the comment.
|
||||
$comment = writer::with_context($context)
|
||||
->rewrite_pluginfile_urls(
|
||||
$questionnocontext,
|
||||
'question',
|
||||
'response_bf_comment',
|
||||
$step->get_id(),
|
||||
$comment
|
||||
);
|
||||
|
||||
writer::with_context($context)
|
||||
->export_area_files(
|
||||
$questionnocontext,
|
||||
'question',
|
||||
"response_bf_comment",
|
||||
$step->get_id()
|
||||
);
|
||||
|
||||
$stepdata->comment = $behaviour->format_comment($comment, $commentformat);
|
||||
}
|
||||
|
||||
$attemptdata->steps[$stepno] = $stepdata;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($attemptdata->steps)) {
|
||||
writer::with_context($context)
|
||||
->export_related_data($questionnocontext, 'steps', $attemptdata);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of contexts where the specified user has either created, or edited a question.
|
||||
*
|
||||
* To export usage of a question, please call {@link provider::export_question_usage()} from the module which
|
||||
* instantiated the usage of the question.
|
||||
*
|
||||
* @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();
|
||||
|
||||
// A user may have created or updated a question.
|
||||
// Questions are linked against a question category, which has a contextid field.
|
||||
$sql = "SELECT cat.contextid
|
||||
FROM {question} q
|
||||
INNER JOIN {question_categories} cat ON cat.id = q.category
|
||||
WHERE
|
||||
q.createdby = :useridcreated OR
|
||||
q.modifiedby = :useridmodified";
|
||||
$params = [
|
||||
'useridcreated' => $userid,
|
||||
'useridmodified' => $userid,
|
||||
];
|
||||
$contextlist->add_from_sql($sql, $params);
|
||||
|
||||
return $contextlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine related question usages for a user.
|
||||
*
|
||||
* @param string $prefix A unique prefix to add to the table alias
|
||||
* @param string $component The name of the component to fetch usages for.
|
||||
* @param string $joinfield The SQL field name to use in the JOIN ON - e.g. q.usageid
|
||||
* @param int $userid The user to search.
|
||||
* @return \qubaid_join
|
||||
*/
|
||||
public static function get_related_question_usages_for_user(string $prefix, string $component, string $joinfield, int $userid) : \qubaid_join {
|
||||
return new \qubaid_join("
|
||||
JOIN {question_usages} {$prefix}_qu ON {$prefix}_qu.id = {$joinfield}
|
||||
AND {$prefix}_qu.component = :{$prefix}_usagecomponent
|
||||
JOIN {question_attempts} {$prefix}_qa ON {$prefix}_qa.questionusageid = {$prefix}_qu.id
|
||||
JOIN {question_attempt_steps} {$prefix}_qas ON {$prefix}_qas.questionattemptid = {$prefix}_qa.id",
|
||||
"{$prefix}_qu.id",
|
||||
"{$prefix}_qas.userid = :{$prefix}_stepuserid",
|
||||
[
|
||||
"{$prefix}_stepuserid" => $userid,
|
||||
"{$prefix}_usagecomponent" => $component,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 $CFG, $DB, $SITE;
|
||||
if (empty($contextlist)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Use the Moodle XML Data format.
|
||||
// It is the only lossless format that we support.
|
||||
$format = "xml";
|
||||
require_once($CFG->dirroot . "/question/format/{$format}/format.php");
|
||||
|
||||
// THe export system needs questions in a particular format.
|
||||
// The easiest way to fetch these is with get_questions_category() which takes the details of a question
|
||||
// category.
|
||||
// We fetch the root question category for each context and the get_questions_category function recurses to
|
||||
// After fetching them, we filter out any not created or modified by the requestor.
|
||||
$user = $contextlist->get_user();
|
||||
$userid = $user->id;
|
||||
|
||||
list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
|
||||
$categories = $DB->get_records_select('question_categories', "contextid {$contextsql} AND parent = 0", $contextparams);
|
||||
|
||||
$classname = "qformat_{$format}";
|
||||
foreach ($categories as $category) {
|
||||
$context = \context::instance_by_id($category->contextid);
|
||||
|
||||
$questions = get_questions_category($category, true);
|
||||
$questions = array_filter($questions, function($question) use ($userid) {
|
||||
return ($question->createdby == $userid) || ($question->modifiedby == $userid);
|
||||
}, ARRAY_FILTER_USE_BOTH);
|
||||
|
||||
if (empty($questions)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$qformat = new $classname();
|
||||
$qformat->setQuestions($questions);
|
||||
|
||||
$qformat->setContexts([$context]);
|
||||
$qformat->setContexttofile(true);
|
||||
|
||||
// We do not know which course this belongs to, and it's not actually used except in error, so use Site.
|
||||
$qformat->setCourse($SITE);
|
||||
$content = '';
|
||||
if ($qformat->exportpreprocess()) {
|
||||
$content = $qformat->exportprocess(false);
|
||||
}
|
||||
|
||||
$subcontext = [
|
||||
get_string('questionbank', 'core_question'),
|
||||
];
|
||||
writer::with_context($context)->export_custom_file($subcontext, 'questions.xml', $content);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
// Questions are considered to be 'owned' by the institution, even if they were originally written by a specific
|
||||
// user. They are still exported in the list of a users data, but they are not removed.
|
||||
// The userid is instead anonymised.
|
||||
|
||||
$DB->set_field_select('question', 'createdby', 0,
|
||||
'category IN (SELECT id FROM {question_categories} WHERE contextid = :contextid)',
|
||||
[
|
||||
'contextid' => $context->id,
|
||||
]);
|
||||
|
||||
$DB->set_field_select('question', 'modifiedby', 0,
|
||||
'category IN (SELECT id FROM {question_categories} WHERE contextid = :contextid)',
|
||||
[
|
||||
'contextid' => $context->id,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
|
||||
// Questions are considered to be 'owned' by the institution, even if they were originally written by a specific
|
||||
// user. They are still exported in the list of a users data, but they are not removed.
|
||||
// The userid is instead anonymised.
|
||||
|
||||
list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
|
||||
$contextparams['createdby'] = $contextlist->get_user()->id;
|
||||
$DB->set_field_select('question', 'createdby', 0, "
|
||||
category IN (SELECT id FROM {question_categories} WHERE contextid {$contextsql})
|
||||
AND createdby = :createdby", $contextparams);
|
||||
|
||||
list($contextsql, $contextparams) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
|
||||
$contextparams['modifiedby'] = $contextlist->get_user()->id;
|
||||
$DB->set_field_select('question', 'modifiedby', 0, "
|
||||
category IN (SELECT id FROM {question_categories} WHERE contextid {$contextsql})
|
||||
AND modifiedby = :modifiedby", $contextparams);
|
||||
}
|
||||
}
|
|
@ -793,11 +793,13 @@ class qformat_default {
|
|||
}
|
||||
|
||||
/**
|
||||
* Do the export
|
||||
* For most types this should not need to be overrided
|
||||
* @return stored_file
|
||||
* Perform the export.
|
||||
* For most types this should not need to be overrided.
|
||||
*
|
||||
* @param bool $checkcapabilities Whether to check capabilities when exporting the questions.
|
||||
* @return string The content of the export.
|
||||
*/
|
||||
public function exportprocess() {
|
||||
public function exportprocess($checkcapabilities = true) {
|
||||
global $CFG, $OUTPUT, $DB, $USER;
|
||||
|
||||
// get the questions (from database) in this category
|
||||
|
@ -857,7 +859,7 @@ class qformat_default {
|
|||
// export the question displaying message
|
||||
$count++;
|
||||
|
||||
if (question_has_capability_on($question, 'view')) {
|
||||
if (!$checkcapabilities || question_has_capability_on($question, 'view')) {
|
||||
$expout .= $this->writequestion($question, $contextid) . "\n";
|
||||
}
|
||||
}
|
||||
|
|
46
question/format/aiken/classes/privacy/provider.php
Normal file
46
question/format/aiken/classes/privacy/provider.php
Normal file
|
@ -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 qformat_aiken.
|
||||
*
|
||||
* @package qformat_aiken
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_aiken\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_aiken implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -25,3 +25,4 @@
|
|||
$string['pluginname'] = 'Aiken format';
|
||||
$string['pluginname_help'] = 'This is a simple format for importing multiple choice questions from a text file.';
|
||||
$string['pluginname_link'] = 'qformat/aiken';
|
||||
$string['privacy:metadata'] = 'The Aiken question format plugin does not store any personal data.';
|
||||
|
|
46
question/format/blackboard_six/classes/privacy/provider.php
Normal file
46
question/format/blackboard_six/classes/privacy/provider.php
Normal file
|
@ -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 qformat_blackboard_six.
|
||||
*
|
||||
* @package qformat_blackboard_six
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_blackboard_six\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_blackboard_six implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -31,4 +31,5 @@ $string['importedcategory'] = 'Imported category {$a}';
|
|||
$string['notenoughtsubans'] = 'Unable to import matching question \'{$a}\' because a matching question must comprise at least two questions and three answers.';
|
||||
$string['pluginname'] = 'Blackboard';
|
||||
$string['pluginname_help'] = 'Blackboard format enables questions saved in all Blackboard export formats to be imported via a dat or zip file. For zip files, images import is supported.';
|
||||
$string['privacy:metadata'] = 'The Blackbard question format plugin does not store any personal data.';
|
||||
$string['unhandledpresblock'] = 'Unhandled presentation block';
|
||||
|
|
46
question/format/examview/classes/privacy/provider.php
Normal file
46
question/format/examview/classes/privacy/provider.php
Normal file
|
@ -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 qformat_examview.
|
||||
*
|
||||
* @package qformat_examview
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_examview\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_examview implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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['pluginname'] = 'Examview';
|
||||
$string['pluginname_help'] = 'Examview format enables the import of questions from Examview 4 XML files. For newer versions of Examview, Blackboard format may be used.';
|
||||
$string['privacy:metadata'] = 'The Examview question format plugin does not store any personal data.';
|
||||
|
|
46
question/format/gift/classes/privacy/provider.php
Normal file
46
question/format/gift/classes/privacy/provider.php
Normal file
|
@ -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 qformat_gift.
|
||||
*
|
||||
* @package qformat_gift
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_gift\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_gift implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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['nohandler'] = 'No handler for question type {$a}';
|
|||
$string['pluginname'] = 'Gift format';
|
||||
$string['pluginname_help'] = 'Gift format enables multiple-choice, true-false, short answer, matching, missing word, numerical and essay questions to be imported or exported via text file.';
|
||||
$string['pluginname_link'] = 'qformat/gift';
|
||||
$string['privacy:metadata'] = 'The Gift question format plugin does not store any personal data.';
|
||||
|
|
46
question/format/missingword/classes/privacy/provider.php
Normal file
46
question/format/missingword/classes/privacy/provider.php
Normal file
|
@ -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 qformat_missingword.
|
||||
*
|
||||
* @package qformat_missingword
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_missingword\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_missingword implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -28,3 +28,4 @@ $string['pluginname_link'] = 'Missing word format';
|
|||
$string['beginanswernotfound'] = 'Could not find a required "{" character in imported file content.';
|
||||
$string['endanswernotfound'] = 'Could not find a required "}" character in imported file content.';
|
||||
$string['noanswerfound'] = 'No answers found in question';
|
||||
$string['privacy:metadata'] = 'The Missing word question format plugin does not store any personal data.';
|
||||
|
|
46
question/format/multianswer/classes/privacy/provider.php
Normal file
46
question/format/multianswer/classes/privacy/provider.php
Normal file
|
@ -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 qformat_multianswer.
|
||||
*
|
||||
* @package qformat_multianswer
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_multianswer\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_multianswer implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -25,3 +25,4 @@
|
|||
$string['pluginname'] = 'Embedded answers (Cloze)';
|
||||
$string['pluginname_help'] = 'Embedded answers (Cloze) format enables the import of a passage of text with questions such as multiple-choice and short answer embedded within it.';
|
||||
$string['pluginname_link'] = 'question/type/multianswer';
|
||||
$string['privacy:metadata'] = 'The Embedded answers question plugin does not store any personal data.';
|
||||
|
|
46
question/format/webct/classes/privacy/provider.php
Normal file
46
question/format/webct/classes/privacy/provider.php
Normal file
|
@ -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 qformat_webct.
|
||||
*
|
||||
* @package qformat_webct
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_webct\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_webct implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ $string['missingquestion'] = 'Missing question label after line {$a}';
|
|||
$string['pluginname'] = 'WebCT format';
|
||||
$string['pluginname_help'] = 'WebCT format enables multiple-choice and short answer questions saved in WebCT\'s text-based format to be imported.';
|
||||
$string['pluginname_link'] = 'qformat/webct';
|
||||
$string['privacy:metadata'] = 'The WebCT question format plugin does not store any personal data.';
|
||||
$string['questionnametoolong'] = 'Question name too long at line {$a} (255 char. max). It has been truncated.';
|
||||
$string['unknowntype'] = 'Unknown question type after line {$a}';
|
||||
$string['warningsdetected'] = '{$a} warning(s) detected';
|
||||
|
|
46
question/format/xhtml/classes/privacy/provider.php
Normal file
46
question/format/xhtml/classes/privacy/provider.php
Normal file
|
@ -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 qformat_xhtml.
|
||||
*
|
||||
* @package qformat_xhtml
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_xhtml\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_xhtml implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -25,3 +25,4 @@
|
|||
$string['pluginname'] = 'XHTML format';
|
||||
$string['pluginname_help'] = 'XHTML format enables all questions in the category to be exported to a single page of strict XHTML for possible use in another application.';
|
||||
$string['pluginname_link'] = 'qformat/xhtml';
|
||||
$string['privacy:metadata'] = 'The XHTML question format plugin does not store any personal data.';
|
||||
|
|
46
question/format/xml/classes/privacy/provider.php
Normal file
46
question/format/xml/classes/privacy/provider.php
Normal file
|
@ -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 qformat_xml.
|
||||
*
|
||||
* @package qformat_xml
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qformat_xml\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qformat_xml implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -26,6 +26,7 @@ $string['invalidxml'] = 'Invalid XML file - string expected (use CDATA?)';
|
|||
$string['pluginname'] = 'Moodle XML format';
|
||||
$string['pluginname_help'] = 'This is a Moodle-specific format for importing and exporting questions.';
|
||||
$string['pluginname_link'] = 'qformat/xml';
|
||||
$string['privacy:metadata'] = 'The XML question format plugin does not store any personal data.';
|
||||
$string['truefalseimporterror'] = '<b>Warning</b>: The true/false question \'{$a->questiontext}\' could not be imported properly. It was not clear whether the correct answer is true or false. The question has been imported assuming that the answer is \'{$a->answer}\'. If this is not correct, you will need to edit the question.';
|
||||
$string['unsupportedexport'] = 'Question type {$a} is not supported by XML export';
|
||||
$string['xmlimportnoname'] = 'Missing question name in XML file';
|
||||
|
|
|
@ -87,6 +87,30 @@ class core_question_generator extends component_generator_base {
|
|||
$question->category = $fromform->category;
|
||||
$question->qtype = $qtype;
|
||||
$question->createdby = 0;
|
||||
|
||||
return $this->update_question($question, $which, $overrides);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing question.
|
||||
*
|
||||
* @param stdClass $question the question data to update.
|
||||
* @param string $which as for the corresponding argument of
|
||||
* {@link question_test_helper::get_question_form_data}. null for the default one.
|
||||
* @param array|stdClass $overrides any fields that should be different from the base example.
|
||||
*/
|
||||
public function update_question($question, $which = null, $overrides = null) {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . '/question/engine/tests/helpers.php');
|
||||
|
||||
$qtype = $question->qtype;
|
||||
|
||||
$fromform = test_question_maker::get_question_form_data($qtype, $which);
|
||||
$fromform = (object) $this->datagenerator->combine_defaults_and_record(
|
||||
(array) $question, $fromform);
|
||||
$fromform = (object) $this->datagenerator->combine_defaults_and_record(
|
||||
(array) $fromform, $overrides);
|
||||
|
||||
return question_bank::get_qtype($qtype)->save_question($question, $fromform);
|
||||
}
|
||||
|
||||
|
|
103
question/tests/privacy_helper.php
Normal file
103
question/tests/privacy_helper.php
Normal file
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Helper for privacy tests.
|
||||
*
|
||||
* @package core_question
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
use \core_privacy\local\request\writer;
|
||||
|
||||
/**
|
||||
* Helper for privacy tests.
|
||||
*
|
||||
* @package core_question
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
trait core_question_privacy_helper {
|
||||
/**
|
||||
* Assert that the question usage in the supplied slot matches the expected format
|
||||
* and usage for a question.
|
||||
*
|
||||
* @param \question_usage_by_activity $quba The Question Usage to test against.
|
||||
* @param int $slotno The slot number to compare
|
||||
* @param \question_display_options $options The display options used for formatting.
|
||||
* @param \stdClass $data The data to check.
|
||||
*/
|
||||
public function assert_question_slot_equals(
|
||||
\question_usage_by_activity $quba,
|
||||
$slotno,
|
||||
\question_display_options $options,
|
||||
$data
|
||||
) {
|
||||
$attempt = $quba->get_question_attempt($slotno);
|
||||
$question = $attempt->get_question();
|
||||
|
||||
// Check the question data exported.
|
||||
$this->assertEquals($data->name, $question->name);
|
||||
$this->assertEquals($data->question, $question->questiontext);
|
||||
|
||||
// Check the answer exported.
|
||||
$this->assertEquals($attempt->get_response_summary(), $data->answer);
|
||||
|
||||
if ($options->marks != \question_display_options::HIDDEN) {
|
||||
$this->assertEquals($attempt->get_mark(), $data->mark);
|
||||
} else {
|
||||
$this->assertFalse(isset($data->mark));
|
||||
}
|
||||
|
||||
if ($options->flags != \question_display_options::HIDDEN) {
|
||||
$this->assertEquals($attempt->is_flagged(), (int) $data->flagged);
|
||||
} else {
|
||||
$this->assertFalse(isset($data->flagged));
|
||||
}
|
||||
|
||||
if ($options->generalfeedback != \question_display_options::HIDDEN) {
|
||||
$this->assertEquals($question->format_generalfeedback($attempt), $data->generalfeedback);
|
||||
} else {
|
||||
$this->assertFalse(isset($data->generalfeedback));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that a question attempt was exported.
|
||||
*
|
||||
* @param \context $context The context which the attempt should be in
|
||||
* @param array $subcontext The base of the export
|
||||
* @param question_usage_by_activity $quba The question usage expected
|
||||
* @param \question_display_options $options The display options used for formatting.
|
||||
* @param \stdClass $user The user exported
|
||||
*/
|
||||
public function assert_question_attempt_exported(\context $context, array $subcontext, $quba, $options, $user) {
|
||||
$usagecontext = array_merge(
|
||||
$subcontext,
|
||||
[get_string('questions', 'core_question')]
|
||||
);
|
||||
|
||||
$writer = writer::with_context($context);
|
||||
|
||||
foreach ($quba->get_slots() as $slotno) {
|
||||
$data = $writer->get_data(array_merge($usagecontext, [$slotno]));
|
||||
$this->assert_question_slot_equals($quba, $slotno, $options, $data);
|
||||
}
|
||||
}
|
||||
}
|
420
question/tests/privacy_provider_test.php
Normal file
420
question/tests/privacy_provider_test.php
Normal file
|
@ -0,0 +1,420 @@
|
|||
<?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 provider tests.
|
||||
*
|
||||
* @package core_question
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
use core_privacy\local\metadata\collection;
|
||||
use core_privacy\local\request\deletion_criteria;
|
||||
use core_privacy\local\request\writer;
|
||||
use core_question\privacy\provider;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
global $CFG;
|
||||
require_once($CFG->libdir . '/xmlize.php');
|
||||
require_once(__DIR__ . '/privacy_helper.php');
|
||||
require_once(__DIR__ . '/../engine/tests/helpers.php');
|
||||
|
||||
/**
|
||||
* Privacy provider tests class.
|
||||
*
|
||||
* @package core_question
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class core_question_privacy_provider_testcase extends \core_privacy\tests\provider_testcase {
|
||||
|
||||
// Include the privacy helper which has assertions on it.
|
||||
use core_question_privacy_helper;
|
||||
|
||||
/**
|
||||
* Prepare a question attempt.
|
||||
*
|
||||
* @return question_usage_by_activity
|
||||
*/
|
||||
protected function prepare_question_attempt() {
|
||||
// Create a question with a usage from the current user.
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$cat = $questiongenerator->create_question_category();
|
||||
$quba = question_engine::make_questions_usage_by_activity('core_question_preview', context_system::instance());
|
||||
$quba->set_preferred_behaviour('deferredfeedback');
|
||||
$questiondata = $questiongenerator->create_question('numerical', null, ['category' => $cat->id]);
|
||||
$question = question_bank::load_question($questiondata->id);
|
||||
$quba->add_question($question);
|
||||
$quba->start_all_questions();
|
||||
|
||||
question_engine::save_questions_usage_by_activity($quba);
|
||||
|
||||
return $quba;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that calling export_question_usage on a usage belonging to a
|
||||
* different user does not export any data.
|
||||
*/
|
||||
public function test_export_question_usage_no_usage() {
|
||||
$this->resetAfterTest();
|
||||
|
||||
$quba = $this->prepare_question_attempt();
|
||||
|
||||
// Create a question with a usage from the current user.
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$cat = $questiongenerator->create_question_category();
|
||||
$quba = question_engine::make_questions_usage_by_activity('core_question_preview', context_system::instance());
|
||||
$quba->set_preferred_behaviour('deferredfeedback');
|
||||
$questiondata = $questiongenerator->create_question('numerical', null, ['category' => $cat->id]);
|
||||
$question = question_bank::load_question($questiondata->id);
|
||||
$quba->add_question($question);
|
||||
$quba->start_all_questions();
|
||||
|
||||
question_engine::save_questions_usage_by_activity($quba);
|
||||
|
||||
// Set the user.
|
||||
$testuser = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($testuser);
|
||||
$context = $quba->get_owning_context();
|
||||
$options = new \question_display_options();
|
||||
|
||||
provider::export_question_usage($testuser->id, $context, [], $quba->get_id(), $options, false);
|
||||
$writer = writer::with_context($context);
|
||||
|
||||
$this->assertFalse($writer->has_any_data_in_any_context());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that calling export_question_usage on a usage belonging to a
|
||||
* different user but ignoring the user match
|
||||
*/
|
||||
public function test_export_question_usage_with_usage() {
|
||||
$this->resetAfterTest();
|
||||
|
||||
$quba = $this->prepare_question_attempt();
|
||||
|
||||
// Create a question with a usage from the current user.
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$cat = $questiongenerator->create_question_category();
|
||||
$quba = question_engine::make_questions_usage_by_activity('core_question_preview', context_system::instance());
|
||||
$quba->set_preferred_behaviour('deferredfeedback');
|
||||
|
||||
$questiondata = $questiongenerator->create_question('truefalse', 'true', ['category' => $cat->id]);
|
||||
$quba->add_question(question_bank::load_question($questiondata->id));
|
||||
$questiondata = $questiongenerator->create_question('shortanswer', null, ['category' => $cat->id]);
|
||||
$quba->add_question(question_bank::load_question($questiondata->id));
|
||||
|
||||
// Set the user and answer the questions.
|
||||
$testuser = $this->getDataGenerator()->create_user();
|
||||
$this->setUser($testuser);
|
||||
|
||||
$quba->start_all_questions();
|
||||
$quba->process_action(1, ['answer' => 1]);
|
||||
$quba->process_action(2, ['answer' => 'cat']);
|
||||
$quba->finish_all_questions();
|
||||
|
||||
question_engine::save_questions_usage_by_activity($quba);
|
||||
|
||||
$context = $quba->get_owning_context();
|
||||
|
||||
// Export all questions for this attempt.
|
||||
$options = new \question_display_options();
|
||||
provider::export_question_usage($testuser->id, $context, [], $quba->get_id(), $options, true);
|
||||
$writer = writer::with_context($context);
|
||||
|
||||
$this->assertTrue($writer->has_any_data_in_any_context());
|
||||
$this->assertTrue($writer->has_any_data());
|
||||
|
||||
$slots = $quba->get_slots();
|
||||
$this->assertCount(2, $slots);
|
||||
|
||||
foreach ($slots as $slotno) {
|
||||
$data = $writer->get_data([get_string('questions', 'core_question'), $slotno]);
|
||||
$this->assertNotNull($data);
|
||||
$this->assert_question_slot_equals($quba, $slotno, $options, $data);
|
||||
}
|
||||
|
||||
$this->assertEmpty($writer->get_data([get_string('questions', 'core_question'), $quba->next_slot_number()]));
|
||||
|
||||
// Disable some options and re-export.
|
||||
writer::reset();
|
||||
$options = new \question_display_options();
|
||||
$options->hide_all_feedback();
|
||||
$options->flags = \question_display_options::HIDDEN;
|
||||
$options->marks = \question_display_options::HIDDEN;
|
||||
|
||||
provider::export_question_usage($testuser->id, $context, [], $quba->get_id(), $options, true);
|
||||
$writer = writer::with_context($context);
|
||||
|
||||
$this->assertTrue($writer->has_any_data_in_any_context());
|
||||
$this->assertTrue($writer->has_any_data());
|
||||
|
||||
$slots = $quba->get_slots();
|
||||
$this->assertCount(2, $slots);
|
||||
|
||||
foreach ($slots as $slotno) {
|
||||
$data = $writer->get_data([get_string('questions', 'core_question'), $slotno]);
|
||||
$this->assertNotNull($data);
|
||||
$this->assert_question_slot_equals($quba, $slotno, $options, $data);
|
||||
}
|
||||
|
||||
$this->assertEmpty($writer->get_data([get_string('questions', 'core_question'), $quba->next_slot_number()]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that questions owned by a user are exported and never deleted.
|
||||
*/
|
||||
public function test_question_owned_is_handled() {
|
||||
global $DB;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
|
||||
// Create the two test users.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$otheruser = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Create one question as each user in diferent contexts.
|
||||
$this->setUser($user);
|
||||
$userdata = $questiongenerator->setup_course_and_questions();
|
||||
$expectedcontext = \context_course::instance($userdata[1]->id);
|
||||
|
||||
$this->setUser($otheruser);
|
||||
$otheruserdata = $questiongenerator->setup_course_and_questions();
|
||||
$unexpectedcontext = \context_course::instance($otheruserdata[1]->id);
|
||||
|
||||
// And create another one where we'll update a question as the test user.
|
||||
$moreotheruserdata = $questiongenerator->setup_course_and_questions();
|
||||
$otherexpectedcontext = \context_course::instance($moreotheruserdata[1]->id);
|
||||
$morequestions = $moreotheruserdata[3];
|
||||
|
||||
// Update the third set of questions.
|
||||
$this->setUser($user);
|
||||
|
||||
foreach ($morequestions as $question) {
|
||||
$questiongenerator->update_question($question);
|
||||
}
|
||||
|
||||
// Run the get_contexts_for_userid as default user.
|
||||
$this->setUser();
|
||||
|
||||
// There should be two contexts returned - the first course, and the third.
|
||||
$contextlist = provider::get_contexts_for_userid($user->id);
|
||||
$this->assertCount(2, $contextlist);
|
||||
|
||||
$expectedcontexts = [
|
||||
$expectedcontext->id,
|
||||
$otherexpectedcontext->id,
|
||||
];
|
||||
$this->assertEquals($expectedcontexts, $contextlist->get_contextids(), 'Contexts not equal', 0.0, 10, true);
|
||||
|
||||
// Run the export_user_Data as the test user.
|
||||
$this->setUser($user);
|
||||
|
||||
$approvedcontextlist = new \core_privacy\tests\request\approved_contextlist(
|
||||
\core_user::get_user($user->id),
|
||||
'core_question',
|
||||
$expectedcontexts
|
||||
);
|
||||
provider::export_user_data($approvedcontextlist);
|
||||
|
||||
// There should be data for the user's question context.
|
||||
$writer = writer::with_context($expectedcontext);
|
||||
$this->assertTrue($writer->has_any_data());
|
||||
|
||||
// And for the course we updated.
|
||||
$otherwriter = writer::with_context($otherexpectedcontext);
|
||||
$this->assertTrue($otherwriter->has_any_data());
|
||||
|
||||
// But not for the other user's course.
|
||||
$otherwriter = writer::with_context($unexpectedcontext);
|
||||
$this->assertFalse($otherwriter->has_any_data());
|
||||
|
||||
// The question data is exported as an XML export in custom files.
|
||||
$writer = writer::with_context($expectedcontext);
|
||||
$subcontext = [get_string('questionbank', 'core_question')];
|
||||
|
||||
$exportfile = $writer->get_custom_file($subcontext, 'questions.xml');
|
||||
$this->assertNotEmpty($exportfile);
|
||||
|
||||
$xmlized = xmlize($exportfile);
|
||||
$xmlquestions = $xmlized['quiz']['#']['question'];
|
||||
|
||||
$this->assertCount(2, $xmlquestions);
|
||||
|
||||
// Run the delete functions as default user.
|
||||
$this->setUser();
|
||||
|
||||
// The delete functions should do nothing here.
|
||||
$this->assertCount(6, $DB->get_records('question'));
|
||||
|
||||
// Delete for all users in context.
|
||||
provider::delete_data_for_all_users_in_context($expectedcontext);
|
||||
$this->assertCount(6, $DB->get_records('question'));
|
||||
|
||||
provider::delete_data_for_user($approvedcontextlist);
|
||||
$this->assertCount(6, $DB->get_records('question'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deleting questions should only unset their created and modified user.
|
||||
*/
|
||||
public function test_question_delete_data_for_user_anonymised() {
|
||||
global $DB;
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$user = \core_user::get_user_by_username('admin');
|
||||
$otheruser = $this->getDataGenerator()->create_user();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$context = \context_course::instance($course->id);
|
||||
$othercourse = $this->getDataGenerator()->create_course();
|
||||
$othercontext = \context_course::instance($othercourse->id);
|
||||
|
||||
// Create a couple of questions.
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$cat = $questiongenerator->create_question_category([
|
||||
'contextid' => $context->id,
|
||||
]);
|
||||
$othercat = $questiongenerator->create_question_category([
|
||||
'contextid' => $othercontext->id,
|
||||
]);
|
||||
|
||||
// Create questions:
|
||||
// Q1 - Created by the UUT, Modified by UUT.
|
||||
// Q2 - Created by the UUT, Modified by the other user.
|
||||
// Q3 - Created by the other user, Modified by UUT
|
||||
// Q4 - Created by the other user, Modified by the other user.
|
||||
// Q5 - Created by the UUT, Modified by the UUT, but in a different context.
|
||||
$this->setUser($user);
|
||||
$q1 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
$q2 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
|
||||
$this->setUser($otheruser);
|
||||
$questiongenerator->update_question($q2);
|
||||
$q3 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
$q4 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
|
||||
$this->setUser($user);
|
||||
$questiongenerator->update_question($q3);
|
||||
$q5 = $questiongenerator->create_question('shortanswer', null, array('category' => $othercat->id));
|
||||
|
||||
$approvedcontextlist = new \core_privacy\tests\request\approved_contextlist(
|
||||
$user,
|
||||
'core_question',
|
||||
[$context->id]
|
||||
);
|
||||
|
||||
// Delete the data and check it is removed.
|
||||
$this->setUser();
|
||||
provider::delete_data_for_user($approvedcontextlist);
|
||||
|
||||
$this->assertCount(5, $DB->get_records('question'));
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q1->id]);
|
||||
$this->assertEquals(0, $qrecord->createdby);
|
||||
$this->assertEquals(0, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q2->id]);
|
||||
$this->assertEquals(0, $qrecord->createdby);
|
||||
$this->assertEquals($otheruser->id, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q3->id]);
|
||||
$this->assertEquals($otheruser->id, $qrecord->createdby);
|
||||
$this->assertEquals(0, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q4->id]);
|
||||
$this->assertEquals($otheruser->id, $qrecord->createdby);
|
||||
$this->assertEquals($otheruser->id, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q5->id]);
|
||||
$this->assertEquals($user->id, $qrecord->createdby);
|
||||
$this->assertEquals($user->id, $qrecord->modifiedby);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deleting questions should only unset their created and modified user for all questions in a context.
|
||||
*/
|
||||
public function test_question_delete_data_for_all_users_in_context_anonymised() {
|
||||
global $DB;
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$user = \core_user::get_user_by_username('admin');
|
||||
$otheruser = $this->getDataGenerator()->create_user();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$context = \context_course::instance($course->id);
|
||||
$othercourse = $this->getDataGenerator()->create_course();
|
||||
$othercontext = \context_course::instance($othercourse->id);
|
||||
|
||||
// Create a couple of questions.
|
||||
$questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
|
||||
$cat = $questiongenerator->create_question_category([
|
||||
'contextid' => $context->id,
|
||||
]);
|
||||
$othercat = $questiongenerator->create_question_category([
|
||||
'contextid' => $othercontext->id,
|
||||
]);
|
||||
|
||||
// Create questions:
|
||||
// Q1 - Created by the UUT, Modified by UUT.
|
||||
// Q2 - Created by the UUT, Modified by the other user.
|
||||
// Q3 - Created by the other user, Modified by UUT
|
||||
// Q4 - Created by the other user, Modified by the other user.
|
||||
// Q5 - Created by the UUT, Modified by the UUT, but in a different context.
|
||||
$this->setUser($user);
|
||||
$q1 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
$q2 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
|
||||
$this->setUser($otheruser);
|
||||
$questiongenerator->update_question($q2);
|
||||
$q3 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
$q4 = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
|
||||
|
||||
$this->setUser($user);
|
||||
$questiongenerator->update_question($q3);
|
||||
$q5 = $questiongenerator->create_question('shortanswer', null, array('category' => $othercat->id));
|
||||
|
||||
// Delete the data and check it is removed.
|
||||
$this->setUser();
|
||||
provider::delete_data_for_all_users_in_context($context);
|
||||
|
||||
$this->assertCount(5, $DB->get_records('question'));
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q1->id]);
|
||||
$this->assertEquals(0, $qrecord->createdby);
|
||||
$this->assertEquals(0, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q2->id]);
|
||||
$this->assertEquals(0, $qrecord->createdby);
|
||||
$this->assertEquals(0, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q3->id]);
|
||||
$this->assertEquals(0, $qrecord->createdby);
|
||||
$this->assertEquals(0, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q4->id]);
|
||||
$this->assertEquals(0, $qrecord->createdby);
|
||||
$this->assertEquals(0, $qrecord->modifiedby);
|
||||
|
||||
$qrecord = $DB->get_record('question', ['id' => $q5->id]);
|
||||
$this->assertEquals($user->id, $qrecord->createdby);
|
||||
$this->assertEquals($user->id, $qrecord->modifiedby);
|
||||
}
|
||||
}
|
46
question/type/calculated/classes/privacy/provider.php
Normal file
46
question/type/calculated/classes/privacy/provider.php
Normal file
|
@ -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 qtype_calculated.
|
||||
*
|
||||
* @package qtype_calculated
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_calculated\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_calculated implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -115,6 +115,7 @@ $string['pluginname_link'] = 'question/type/calculated';
|
|||
$string['pluginnameadding'] = 'Adding a Calculated question';
|
||||
$string['pluginnameediting'] = 'Editing a Calculated question';
|
||||
$string['pluginnamesummary'] = 'Calculated questions are like numerical questions but with the numbers used selected randomly from a set when the quiz is taken.';
|
||||
$string['privacy:metadata'] = 'The Calculated question type plugin does not store any personal data.';
|
||||
$string['possiblehdr'] = 'Possible wild cards present only in the question text';
|
||||
$string['questiondatasets'] = 'Question datasets';
|
||||
$string['questiondatasets_help'] = 'Question datasets of wild cards that will be used in each individual question';
|
||||
|
|
46
question/type/calculatedmulti/classes/privacy/provider.php
Normal file
46
question/type/calculatedmulti/classes/privacy/provider.php
Normal file
|
@ -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 qtype_calculatedmulti.
|
||||
*
|
||||
* @package qtype_calculatedmulti
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_calculatedmulti\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_calculatedmulti implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -30,3 +30,4 @@ $string['pluginname_link'] = 'question/type/calculatedmulti';
|
|||
$string['pluginnameadding'] = 'Adding a Calculated multichoice question';
|
||||
$string['pluginnameediting'] = 'Editing a Calculated multichoice question';
|
||||
$string['pluginnamesummary'] = 'Calculated multichoice questions are like multichoice questions which choice elements can include formula results from numeric values that are selected randomly from a set when the quiz is taken.';
|
||||
$string['privacy:metadata'] = 'The Calculated multichoice question type plugin does not store any personal data.';
|
||||
|
|
46
question/type/calculatedsimple/classes/privacy/provider.php
Normal file
46
question/type/calculatedsimple/classes/privacy/provider.php
Normal file
|
@ -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 qtype_calculatedsimple.
|
||||
*
|
||||
* @package qtype_calculatedsimple
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_calculatedsimple\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_calculatedsimple implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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,6 +34,7 @@ $string['pluginname_link'] = 'question/type/calculatedsimple';
|
|||
$string['pluginnameadding'] = 'Adding a Simple calculated question';
|
||||
$string['pluginnameediting'] = 'Editing a Simple calculated question';
|
||||
$string['pluginnamesummary'] = 'A simpler version of calculated questions which are like numerical questions but with the numbers used selected randomly from a set when the quiz is taken.';
|
||||
$string['privacy:metadata'] = 'The Calculated simple question type plugin does not store any personal data.';
|
||||
$string['setno'] = 'Set {$a}';
|
||||
$string['setwildcardvalues'] = 'set(s) of wild card(s) values';
|
||||
$string['showitems'] = 'Display';
|
||||
|
|
46
question/type/ddimageortext/classes/privacy/provider.php
Normal file
46
question/type/ddimageortext/classes/privacy/provider.php
Normal file
|
@ -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 qtype_ddimageortext.
|
||||
*
|
||||
* @package qtype_ddimageortext
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_ddimageortext\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_ddimageortext implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -61,6 +61,7 @@ $string['pluginnameediting'] = 'Editing drag and drop onto image';
|
|||
$string['pluginnamesummary'] = 'Images or text labels are dragged and dropped into drop zones on a background image.';
|
||||
$string['previewareaheader'] = 'Preview';
|
||||
$string['previewareamessage'] = 'Select a background image, specify draggable items and define drop zones on the background image into which they must be dragged.';
|
||||
$string['privacy:metadata'] = 'The Drag and drop onto image question type does not store any personal data.';
|
||||
$string['refresh'] = 'Refresh preview';
|
||||
$string['shuffleimages'] = 'Shuffle drag items each time question is attempted';
|
||||
$string['summarisechoice'] = '{$a->no}. {$a->text}';
|
||||
|
|
46
question/type/ddmarker/classes/privacy/provider.php
Normal file
46
question/type/ddmarker/classes/privacy/provider.php
Normal file
|
@ -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 qtype_ddmarker.
|
||||
*
|
||||
* @package qtype_ddmarker
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_ddmarker\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_ddmarker implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -69,6 +69,7 @@ $string['pluginnameediting'] = 'Editing drag and drop markers';
|
|||
$string['pluginnamesummary'] = 'Markers are dragged and dropped onto a background image.';
|
||||
$string['previewareaheader'] = 'Preview';
|
||||
$string['previewareamessage'] = 'Select a background image file, enter text labels for markers and define the drop zones on the background image to which they must be dragged.';
|
||||
$string['privacy:metadata'] = 'The Drag and drop markers question type does not store any personal data.';
|
||||
$string['refresh'] = 'Refresh preview';
|
||||
$string['clearwrongparts'] = 'Move incorrectly placed markers back to default start position below image';
|
||||
$string['shape'] = 'Shape';
|
||||
|
|
46
question/type/ddwtos/classes/privacy/provider.php
Normal file
46
question/type/ddwtos/classes/privacy/provider.php
Normal file
|
@ -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 qtype_ddwtos.
|
||||
*
|
||||
* @package qtype_ddwtos
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_ddwtos\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_ddwtos implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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_link'] = 'question/type/ddwtos';
|
|||
$string['pluginnameadding'] = 'Adding a drag and drop into text';
|
||||
$string['pluginnameediting'] = 'Editing a drag and drop into text';
|
||||
$string['pluginnamesummary'] = 'Missing words in the question text are filled in using drag and drop.';
|
||||
$string['privacy:metadata'] = 'The Drag and drop into text question type does not store any personal data.';
|
||||
|
|
46
question/type/description/classes/privacy/provider.php
Normal file
46
question/type/description/classes/privacy/provider.php
Normal file
|
@ -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 qtype_description.
|
||||
*
|
||||
* @package qtype_description
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_description\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_description implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -31,3 +31,4 @@ The question text is displayed both during the attempt and on the review page. A
|
|||
$string['pluginnameadding'] = 'Adding a description';
|
||||
$string['pluginnameediting'] = 'Editing a Description';
|
||||
$string['pluginnamesummary'] = 'This is not actually a question. Instead it is a way to add some instructions, rubric or other content to the activity. This is similar to the way that labels can be used to add content to the course page.';
|
||||
$string['privacy:metadata'] = 'The Description question type plugin does not store any personal data.';
|
||||
|
|
46
question/type/essay/classes/privacy/provider.php
Normal file
46
question/type/essay/classes/privacy/provider.php
Normal file
|
@ -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 qtype_essay.
|
||||
*
|
||||
* @package qtype_essay
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_essay\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_essay implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -47,6 +47,7 @@ $string['pluginname_link'] = 'question/type/essay';
|
|||
$string['pluginnameadding'] = 'Adding an Essay question';
|
||||
$string['pluginnameediting'] = 'Editing an Essay question';
|
||||
$string['pluginnamesummary'] = 'Allows a response of a file upload and/or online text. This must then be graded manually.';
|
||||
$string['privacy:metadata'] = 'The Essay question type does not store any personal data.';
|
||||
$string['responsefieldlines'] = 'Input box size';
|
||||
$string['responseformat'] = 'Response format';
|
||||
$string['responseoptions'] = 'Response Options';
|
||||
|
|
46
question/type/gapselect/classes/privacy/provider.php
Normal file
46
question/type/gapselect/classes/privacy/provider.php
Normal file
|
@ -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 qtype_gapselect.
|
||||
*
|
||||
* @package qtype_gapselect
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_gapselect\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_gapselect implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -41,6 +41,7 @@ $string['pluginname_link'] = 'question/type/gapselect';
|
|||
$string['pluginnameadding'] = 'Adding a select missing words question';
|
||||
$string['pluginnameediting'] = 'Editing a select missing words question';
|
||||
$string['pluginnamesummary'] = 'Missing words in the question text are filled in using dropdown menus.';
|
||||
$string['privacy:metadata'] = 'The Select missing words plugin does not store any personal data.';
|
||||
$string['shuffle'] = 'Shuffle';
|
||||
$string['tagsnotallowed'] = '{$a->tag} is not allowed. (Only {$a->allowed} are permitted.)';
|
||||
$string['tagsnotallowedatall'] = '{$a->tag} is not allowed. (No HTML is allowed here.)';
|
||||
|
|
46
question/type/match/classes/privacy/provider.php
Normal file
46
question/type/match/classes/privacy/provider.php
Normal file
|
@ -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 qtype_match.
|
||||
*
|
||||
* @package qtype_match
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_match\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_match implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -42,3 +42,4 @@ $string['pluginname_link'] = 'question/type/match';
|
|||
$string['pluginnameadding'] = 'Adding a Matching question';
|
||||
$string['pluginnameediting'] = 'Editing a Matching question';
|
||||
$string['pluginnamesummary'] = 'The answer to each of a number of sub-question must be selected from a list of possibilities.';
|
||||
$string['privacy:metadata'] = 'The Matching question type does not store any personal data.';
|
||||
|
|
46
question/type/missingtype/classes/privacy/provider.php
Normal file
46
question/type/missingtype/classes/privacy/provider.php
Normal file
|
@ -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 qtype_missingtype.
|
||||
*
|
||||
* @package qtype_missingtype
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_missingtype\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_missingtype implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -32,4 +32,5 @@ $string['missing'] = 'Question of a type that is not installed on this system';
|
|||
$string['pluginname'] = 'Missing type';
|
||||
$string['pluginnameadding'] = 'Adding a question of a type that is not installed on this system';
|
||||
$string['pluginnameediting'] = 'Editing a question of a type that is not installed on this system';
|
||||
$string['privacy:metadata'] = 'The Missing type question type does not store any personal data.';
|
||||
$string['warningmissingtype'] = '<b>This question is of a type that has not been installed on your Moodle yet.<br />Please alert your Moodle administrator.</b>';
|
||||
|
|
46
question/type/multianswer/classes/privacy/provider.php
Normal file
46
question/type/multianswer/classes/privacy/provider.php
Normal file
|
@ -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 qtype_multianswer.
|
||||
*
|
||||
* @package qtype_multianswer
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_multianswer\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_multianswer implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -44,6 +44,7 @@ $string['pluginname_link'] = 'question/type/multianswer';
|
|||
$string['pluginnameadding'] = 'Adding an Embedded answers (Cloze) question';
|
||||
$string['pluginnameediting'] = 'Editing an Embedded answers (Cloze) question';
|
||||
$string['pluginnamesummary'] = 'Questions of this type are very flexible, but can only be created by entering text containing special codes that create embedded multiple-choice, short answers and numerical questions.';
|
||||
$string['privacy:metadata'] = 'The Embedded answers (Cloze) question type plugin does not store any personal data.';
|
||||
$string['qtypenotrecognized'] = 'questiontype {$a} not recognized';
|
||||
$string['questiondefinition'] = 'Question definition';
|
||||
$string['questiondeleted'] = 'Question deleted';
|
||||
|
|
46
question/type/multichoice/classes/privacy/provider.php
Normal file
46
question/type/multichoice/classes/privacy/provider.php
Normal file
|
@ -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 qtype_multichoice.
|
||||
*
|
||||
* @package qtype_multichoice
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_multichoice\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_multichoice implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -64,6 +64,7 @@ $string['pluginname_link'] = 'question/type/multichoice';
|
|||
$string['pluginnameadding'] = 'Adding a Multiple choice question';
|
||||
$string['pluginnameediting'] = 'Editing a Multiple choice question';
|
||||
$string['pluginnamesummary'] = 'Allows the selection of a single or multiple responses from a pre-defined list.';
|
||||
$string['privacy:metadata'] = 'The Multiple choice question type does not store any personal data.';
|
||||
$string['selectmulti'] = 'Select one or more:';
|
||||
$string['selectone'] = 'Select one:';
|
||||
$string['shuffleanswers'] = 'Shuffle the choices?';
|
||||
|
|
46
question/type/numerical/classes/privacy/provider.php
Normal file
46
question/type/numerical/classes/privacy/provider.php
Normal file
|
@ -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 qtype_numerical.
|
||||
*
|
||||
* @package qtype_numerical
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_numerical\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_numerical implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -67,6 +67,7 @@ $string['pluginname_link'] = 'question/type/numerical';
|
|||
$string['pluginnameadding'] = 'Adding a Numerical question';
|
||||
$string['pluginnameediting'] = 'Editing a Numerical question';
|
||||
$string['pluginnamesummary'] = 'Allows a numerical response, possibly with units, that is graded by comparing against various model answers, possibly with tolerances.';
|
||||
$string['privacy:metadata'] = 'The Numerical question type plugin does not store any personal data.';
|
||||
$string['relative'] = 'Relative';
|
||||
$string['rightexample'] = 'on the right, for example 1.00cm or 1.00km';
|
||||
$string['selectunits'] = 'Select units';
|
||||
|
|
46
question/type/random/classes/privacy/provider.php
Normal file
46
question/type/random/classes/privacy/provider.php
Normal file
|
@ -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 qtype_random.
|
||||
*
|
||||
* @package qtype_random
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_random\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_random implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ $string['includingsubcategories'] = 'Including subcategories';
|
|||
$string['pluginname'] = 'Random';
|
||||
$string['pluginname_help'] = 'A random question is not a question type as such, but is a way of inserting a randomly-chosen question from a specified category into an activity.';
|
||||
$string['pluginnameediting'] = 'Editing a random question';
|
||||
$string['privacy:metadata'] = 'The Random question type plugin does not store any personal data.';
|
||||
$string['randomqname'] = 'Random ({$a})';
|
||||
$string['randomqnamefromtop'] = 'Faulty random question! Please delete this question.';
|
||||
$string['randomqnamefromtoptags'] = 'Faulty random question! Please delete this question.';
|
||||
|
|
46
question/type/randomsamatch/classes/privacy/provider.php
Normal file
46
question/type/randomsamatch/classes/privacy/provider.php
Normal file
|
@ -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 qtype_randomsamatch.
|
||||
*
|
||||
* @package qtype_randomsamatch
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_randomsamatch\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_randomsamatch implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -32,6 +32,7 @@ $string['pluginname_link'] = 'question/type/randomsamatch';
|
|||
$string['pluginnameadding'] = 'Adding a Random short-answer matching question';
|
||||
$string['pluginnameediting'] = 'Editing a Random short-answer matching question';
|
||||
$string['pluginnamesummary'] = 'Like a Matching question, but created randomly from the short answer questions in a particular category.';
|
||||
$string['privacy:metadata'] = 'The Random short-answer matching question type does not store any personal data.';
|
||||
$string['randomsamatchnumber'] = 'Number of questions to select';
|
||||
$string['randomsamatch'] = 'Random short-answer matching';
|
||||
$string['randomsamatchintro'] = 'For each of the following questions, select the matching answer from the menu.';
|
||||
|
|
46
question/type/shortanswer/classes/privacy/provider.php
Normal file
46
question/type/shortanswer/classes/privacy/provider.php
Normal file
|
@ -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 qtype_shortanswer.
|
||||
*
|
||||
* @package qtype_shortanswer
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_shortanswer\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_shortanswer implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -41,3 +41,4 @@ $string['pluginname_link'] = 'question/type/shortanswer';
|
|||
$string['pluginnameadding'] = 'Adding a short answer question';
|
||||
$string['pluginnameediting'] = 'Editing a Short answer question';
|
||||
$string['pluginnamesummary'] = 'Allows a response of one or a few words that is graded by comparing against various model answers, which may contain wildcards.';
|
||||
$string['privacy:metadata'] = 'The Short answer question type does not store any personal data.';
|
||||
|
|
46
question/type/truefalse/classes/privacy/provider.php
Normal file
46
question/type/truefalse/classes/privacy/provider.php
Normal file
|
@ -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 qtype_truefalse.
|
||||
*
|
||||
* @package qtype_truefalse
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace qtype_truefalse\privacy;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Privacy Subsystem for qtype_truefalse implementing null_provider.
|
||||
*
|
||||
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @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';
|
||||
}
|
||||
}
|
|
@ -38,3 +38,4 @@ $string['pluginname_link'] = 'question/type/truefalse';
|
|||
$string['pluginnameadding'] = 'Adding a True/False question';
|
||||
$string['pluginnameediting'] = 'Editing a True/False question';
|
||||
$string['pluginnamesummary'] = 'A simple form of multiple choice question with just the two choices \'True\' and \'False\'.';
|
||||
$string['privacy:metadata'] = 'The True/False question type plugin does not store any personal data.';
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
This files describes API changes for code that uses the question API.
|
||||
|
||||
=== 3.5 ===
|
||||
|
||||
1) The question format exportprocess function now adds a
|
||||
$checkcapabilities boolean to allow questions to be exported in
|
||||
certain circumstances.
|
||||
|
||||
=== 3.2 ===
|
||||
|
||||
1) The following renderers have been deprecated in favour of the renderable
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue