508214f29b0368649b9fae6f81a722493bd5fa95
[moodle.git] / admin / tool / dataprivacy / classes / expiry_info.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  * Expiry Data.
19  *
20  * @package    tool_dataprivacy
21  * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 namespace tool_dataprivacy;
26 use core_privacy\manager;
28 defined('MOODLE_INTERNAL') || die();
30 /**
31  * Expiry Data.
32  *
33  * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
34  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35  */
36 class expiry_info {
38     /** @var bool Whether this context is fully expired */
39     protected $isexpired = false;
41     /**
42      * Constructor for the expiry_info class.
43      *
44      * @param   bool    $isexpired Whether the retention period for this context has expired yet.
45      */
46     public function __construct(bool $isexpired) {
47         $this->isexpired = $isexpired;
48     }
50     /**
51      * Whether this context has 'fully' expired.
52      * That is to say that the default retention period has been reached, and that there are no unexpired roles.
53      *
54      * @return  bool
55      */
56     public function is_fully_expired() : bool {
57         return $this->isexpired;
58     }
60     /**
61      * Whether any part of this context has expired.
62      *
63      * @return  bool
64      */
65     public function is_any_expired() : bool {
66         if ($this->is_fully_expired()) {
67             return true;
68         }
70         return false;
71     }
73     /**
74      * Merge this expiry_info object with another belonging to a child context in order to set the 'safest' heritage.
75      *
76      * It is not possible to delete any part of a context that is not deleted by a parent.
77      * So if a course's retention policy has been reached, then only parts where the children have also expired can be
78      * deleted.
79      *
80      * @param   expiry_info $child The child record to merge with.
81      * @return  $this
82      */
83     public function merge_with_child(expiry_info $child) : expiry_info {
84         if ($child->is_fully_expired()) {
85             return $this;
86         }
88         // If the child is not fully expired, then none of the parents can be either.
89         $this->isexpired = false;
91         return $this;
92     }
93 }