MDL-61692 core_privacy: add privacyfields to link_ methods
[moodle.git] / privacy / classes / local / metadata / collection.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * This file defines the core_privacy\local\metadata\collection class object.
19  *
20  * The collection class is used to organize a collection of types
21  * objects, which contains the privacy field details of a component.
22  *
23  * @package core_privacy
24  * @copyright 2018 Jake Dallimore <jrhdallimore@gmail.com>
25  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26  */
27 namespace core_privacy\local\metadata;
29 use core_privacy\local\metadata\types\type;
31 defined('MOODLE_INTERNAL') || die();
33 /**
34  * A collection of metadata items.
35  *
36  * @copyright 2018 Jake Dallimore <jrhdallimore@gmail.com>
37  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class collection {
41     /**
42      * @var string The component that the items in the collection belong to.
43      */
44     protected $component;
46     /**
47      * @var array   The collection of metadata items.
48      */
49     protected $collection = [];
51     /**
52      * Constructor for a component's privacy collection class.
53      *
54      * @param string $component component name.
55      */
56     public function __construct($component) {
57         $this->component = $component;
58     }
60     /**
61      * Function to add an object that implements type interface to the current collection.
62      *
63      * @param   type    $type to add to collection.
64      * @return  $this
65      */
66     public function add_type(type $type) {
67         $this->collection[] = $type;
69         return $this;
70     }
72     /**
73      * Function to add a database table which contains user data to this collection.
74      *
75      * @param   string  $name the name of the database table.
76      * @param   array   $privacyfields An associative array of fieldname to description.
77      * @param   string  $summary A description of what the table is used for.
78      * @return  $this
79      */
80     public function add_database_table($name, array $privacyfields, $summary = '') {
81         $this->add_type(new types\database_table($name, $privacyfields, $summary));
83         return $this;
84     }
86     /**
87      * Function to link a subsystem to the component.
88      *
89      * @param   string $name the name of the subsystem to link.
90      * @param   array $privacyfields An optional associative array of fieldname to description.
91      * @param   string $summary A description of what is stored within this subsystem.
92      * @return  $this
93      */
94     public function add_subsystem_link($name, array $privacyfields = [], $summary = '') {
95         $this->add_type(new types\subsystem_link($name, $privacyfields, $summary));
97         return $this;
98     }
100     /**
101      * Old function to link a subsystem to the component.
102      *
103      * This function is legacy and is not recommended. Please use add_subsystem_link() instead.
104      *
105      * @param   string $name the name of the subsystem to link.
106      * @param   string $summary A description of what is stored within this subsystem.
107      * @return  $this
108      */
109     public function link_subsystem($name, $summary = '') {
110         $this->add_type(new types\subsystem_link($name, [], $summary));
112         return $this;
113     }
115     /**
116      * Function to link a plugin to the component.
117      *
118      * @param   string  $name the name of the plugin to link.
119      * @param   array $privacyfields An optional associative array of fieldname to description.
120      * @param   string  $summary A description of what is stored within this plugin.
121      * @return  $this
122      */
123     public function add_plugintype_link($name, array $privacyfields = [], $summary = '') {
124         $this->add_type(new types\plugintype_link($name, $privacyfields, $summary));
126         return $this;
127     }
129     /**
130      * Old function to link a plugin to the component.
131      *
132      * This function is legacy and is not recommended. Please use add_plugintype_link() instead.
133      *
134      * @param   string  $name the name of the plugin to link.
135      * @param   string  $summary A description of what is stored within this plugin.
136      * @return  $this
137      */
138     public function link_plugintype($name, $summary = '') {
139         $this->add_type(new types\plugintype_link($name, [], $summary));
141         return $this;
142     }
144     /**
145      * Function to indicate that data may be exported to an external location.
146      *
147      * @param   string  $name A name for the type of data exported.
148      * @param   array   $privacyfields A list of fields with their description.
149      * @param   string  $summary A description of what the table is used for. This is a language string identifier
150      *                           within the component.
151      * @return  $this
152      */
153     public function add_external_location_link($name, array $privacyfields, $summary = '') {
154         $this->add_type(new types\external_location($name, $privacyfields, $summary));
156         return $this;
157     }
159     /**
160      * Old function to indicate that data may be exported to an external location.
161      *
162      * This function is legacy and is not recommended. Please use add_external_location_link() instead.
163      *
164      * @param   string  $name A name for the type of data exported.
165      * @param   array   $privacyfields A list of fields with their description.
166      * @param   string  $summary A description of what the table is used for. This is a language string identifier
167      *                           within the component.
168      * @return  $this
169      */
170     public function link_external_location($name, array $privacyfields, $summary = '') {
171         $this->add_type(new types\external_location($name, $privacyfields, $summary));
173         return $this;
174     }
176     /**
177      * Add a type of user preference to the collection.
178      *
179      * Typically this is a single user preference, but in some cases the
180      * name of a user preference fits a particular format.
181      *
182      * @param   string  $name The name of the user preference.
183      * @param   string  $summary A description of what the preference is used for.
184      * @return  $this
185      */
186     public function add_user_preference($name, $summary = '') {
187         $this->add_type(new types\user_preference($name, $summary));
189         return $this;
190     }
192     /**
193      * Function to return the current component name.
194      *
195      * @return string
196      */
197     public function get_component() {
198         return $this->component;
199     }
201     /**
202      * The content of this collection.
203      *
204      * @return  types\type[]
205      */
206     public function get_collection() {
207         return $this->collection;
208     }