From 9e217d8441d916fdf52ec1d2500dad9ccd782592 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Thu, 18 Oct 2018 14:16:57 +0800 Subject: [PATCH] MDL-62560 tool_dataprivacy: Add a purpose override cache --- .../dataprivacy/classes/purpose_override.php | 48 ++++++++++++++++++- admin/tool/dataprivacy/db/caches.php | 7 +++ .../dataprivacy/lang/en/tool_dataprivacy.php | 1 + admin/tool/dataprivacy/version.php | 2 +- 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/admin/tool/dataprivacy/classes/purpose_override.php b/admin/tool/dataprivacy/classes/purpose_override.php index b3ee4182198..5b022ab8633 100644 --- a/admin/tool/dataprivacy/classes/purpose_override.php +++ b/admin/tool/dataprivacy/classes/purpose_override.php @@ -89,11 +89,55 @@ class purpose_override extends \core\persistent { * @return array */ public static function get_overrides_for_purpose(purpose $purpose) : array { + $cache = \cache::make('tool_dataprivacy', 'purpose_overrides'); + $overrides = []; - foreach (self::get_records(['purposeid' => $purpose->get('id')]) as $override) { - $overrides[$override->get('roleid')] = $override; + $alldata = $cache->get($purpose->get('id')); + if (false === $alldata) { + $tocache = []; + foreach (self::get_records(['purposeid' => $purpose->get('id')]) as $override) { + $tocache[] = $override->to_record(); + $overrides[$override->get('roleid')] = $override; + } + $cache->set($purpose->get('id'), $tocache); + } else { + foreach ($alldata as $data) { + $override = new self(0, $data); + $overrides[$override->get('roleid')] = $override; + } } return $overrides; } + + /** + * Adds the new record to the cache. + * + * @return null + */ + protected function after_create() { + $cache = \cache::make('tool_dataprivacy', 'purpose_overrides'); + $cache->delete($this->get('purposeid')); + } + + /** + * Updates the cache record. + * + * @param bool $result + * @return null + */ + protected function after_update($result) { + $cache = \cache::make('tool_dataprivacy', 'purpose_overrides'); + $cache->delete($this->get('purposeid')); + } + + /** + * Removes unnecessary stuff from db. + * + * @return null + */ + protected function before_delete() { + $cache = \cache::make('tool_dataprivacy', 'purpose_overrides'); + $cache->delete($this->get('purposeid')); + } } diff --git a/admin/tool/dataprivacy/db/caches.php b/admin/tool/dataprivacy/db/caches.php index 00124bb34c0..a07db1a11bd 100644 --- a/admin/tool/dataprivacy/db/caches.php +++ b/admin/tool/dataprivacy/db/caches.php @@ -33,6 +33,13 @@ $definitions = array( 'staticacceleration' => true, 'staticaccelerationsize' => 30, ), + 'purpose_overrides' => array( + 'mode' => cache_store::MODE_APPLICATION, + 'simplekeys' => true, + 'simpledata' => false, + 'staticacceleration' => true, + 'staticaccelerationsize' => 50, + ), 'contextlevel' => array( 'mode' => cache_store::MODE_APPLICATION, 'simplekeys' => true, diff --git a/admin/tool/dataprivacy/lang/en/tool_dataprivacy.php b/admin/tool/dataprivacy/lang/en/tool_dataprivacy.php index 5206d2261dc..448435f69da 100644 --- a/admin/tool/dataprivacy/lang/en/tool_dataprivacy.php +++ b/admin/tool/dataprivacy/lang/en/tool_dataprivacy.php @@ -35,6 +35,7 @@ $string['approverequest'] = 'Approve request'; $string['bulkapproverequests'] = 'Approve requests'; $string['bulkdenyrequests'] = 'Deny requests'; $string['cachedef_purpose'] = 'Data purposes'; +$string['cachedef_purpose_overrides'] = 'Purpose overrides in the Data Privacy tool'; $string['cachedef_contextlevel'] = 'Context levels purpose and category'; $string['cancelrequest'] = 'Cancel request'; $string['cancelrequestconfirmation'] = 'Do you really want cancel this data request?'; diff --git a/admin/tool/dataprivacy/version.php b/admin/tool/dataprivacy/version.php index bb982419edb..3efc437a0ce 100644 --- a/admin/tool/dataprivacy/version.php +++ b/admin/tool/dataprivacy/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die; -$plugin->version = 2018100401; +$plugin->version = 2018100403; $plugin->requires = 2018050800; // Moodle 3.5dev (Build 2018031600) and upwards. $plugin->component = 'tool_dataprivacy';