moodle/lib/db/caches.php

600 lines
21 KiB
PHP
Raw Normal View History

<?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/>.
/**
* Core cache definitions.
*
* This file is part of Moodle's cache API, affectionately called MUC.
* It contains the components that are requried in order to use caching.
*
* @package core
* @category cache
* @copyright 2012 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$definitions = array(
// Used to store processed lang files.
// The keys used are the revision, lang and component of the string file.
// The static acceleration size has been based upon student access of the site.
'string' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 30,
2016-02-29 14:14:01 +08:00
'canuselocalstore' => true,
),
// Used to store cache of all available translations.
'langmenu' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
2016-02-29 14:14:01 +08:00
'canuselocalstore' => true,
),
// Used to store database meta information.
// The database meta information includes information about tables and there columns.
// Its keys are the table names.
// When creating an instance of this definition you must provide the database family that is being used.
'databasemeta' => array(
'mode' => cache_store::MODE_APPLICATION,
'requireidentifiers' => array(
'dbfamily'
),
'simpledata' => true, // This is a read only class, so leaving references in place is safe.
'staticacceleration' => true,
'staticaccelerationsize' => 15
),
// Event invalidation cache.
// This cache is used to manage event invalidation, its keys are the event names.
// Whenever something is invalidated it is both purged immediately and an event record created with the timestamp.
// When a new cache is initialised all timestamps are looked at and if past data is once more invalidated.
// Data guarantee is required in order to ensure invalidation always occurs.
// Persistence has been turned on as normally events are used for frequently used caches and this event invalidation
// cache will likely be used either lots or never.
'eventinvalidation' => array(
'mode' => cache_store::MODE_APPLICATION,
'staticacceleration' => true,
'requiredataguarantee' => true,
'simpledata' => true,
),
// Hook callbacks cache.
// There is a static cache in hook manager, data is fetched once per page on first hook execution.
// This cache needs to be invalidated during upgrades when code changes and when callbacks
// overrides are updated.
'hookcallbacks' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => false,
// WARNING: Manual cache purge may be required when overriding hook callbacks.
'canuselocalstore' => true,
),
// Cache for question definitions. This is used by the question_bank class.
// Users probably do not need to know about this cache. They will just call
// question_bank::load_question.
'questiondata' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true, // The id of the question is used.
'requiredataguarantee' => false,
'datasource' => 'question_finder',
'datasourcefile' => 'question/engine/bank.php',
),
// HTML Purifier cache
// This caches the html purifier cleaned text. This is done because the text is usually cleaned once for every user
// and context combo. Text caching handles caching for the combination, this cache is responsible for caching the
// cleaned text which is shareable.
'htmlpurifier' => array(
'mode' => cache_store::MODE_APPLICATION,
2016-02-29 14:14:01 +08:00
'canuselocalstore' => true,
),
// Used to store data from the config + config_plugins table in the database.
// The key used is the component:
// - core for all core config settings
// - plugin component for all plugin settings.
// Persistence is used because normally several settings within a script.
'config' => array(
'mode' => cache_store::MODE_APPLICATION,
'staticacceleration' => true,
'simpledata' => true
),
// Groupings belonging to a course.
// A simple cache designed to replace $GROUPLIB_CACHE->groupings.
// Items are organised by course id and are essentially course records.
'groupdata' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true, // The course id the groupings exist for.
'simpledata' => true, // Array of stdClass objects containing only strings.
'staticacceleration' => true, // Likely there will be a couple of calls to this.
'staticaccelerationsize' => 2, // The original cache used 1, we've increased that to two.
),
MDL-68093 groups: Add visibility and participation settings These new settings are designed to enchance user privacy surrounding groups. They allow groups to be configured so that users outside the group cannot see the group, so that users in the group cannot see each other, or so that users cannot see the group at all, even if they are in it. This avoids issues where a group may be assigned based on sensitive personal information (such as a person requiring special arrangements due to a disability). By default, groups are visible to all and available for participation in activities, which maintains the current behaviour. For performance, a new cache has been added to track the number of groups on a course that are not visible to non-members. This allows us to revert to the existing behaviour if the new features are not being used at all on a course, and only apply the new visibility conditions if they are. Users who have the moodle/course:viewhiddengroups capability should be concious of exposing hidden groups when showing their screen to other users. The "Switch role to..." feature can be used to show a course page on screen without exposing private availability conditions, for example. The changes cover several specific areas: * grouplib functions, which most code should use to get lists of groups and members (this includes the participants page). * Activities supporting group overrides will not allow overrides for groups that are hidden from all users. * Activities supporting separate/visible groups modes will only allow groups with the new "participation" flag enabled to be selected. * Group messaging will be disabled for groups where members cannot see each other, or cannot see the group at all.
2022-09-06 09:14:24 +01:00
// Whether a course currently has hidden groups.
'coursehiddengroups' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true, // The course id the groupings exist for.
'simpledata' => true, // Booleans.
'staticacceleration' => true, // Likely there will be a couple of calls to this.
),
// Used to cache calendar subscriptions.
'calendar_subscriptions' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
),
// Cache the course categories where the user has any enrolment and all categories that this user can manage.
'calendar_categories' => array(
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true,
'invalidationevents' => array(
'changesincoursecat',
'changesincategoryenrolment',
),
'ttl' => 900,
),
// Cache the capabilities list DB table. See get_all_capabilities in accesslib.
'capabilities' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 1,
'ttl' => 3600, // Just in case.
),
// Cache the deprecated capabilities list. See get_deprecated_capability_info in accesslib.
'deprecatedcapabilities' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => false, // We need to hash the key.
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 1,
'ttl' => 3600, // Just in case.
),
// YUI Module cache.
// This stores the YUI module metadata for Shifted YUI modules in Moodle.
'yuimodules' => array(
'mode' => cache_store::MODE_APPLICATION,
),
// Cache for the list of event observers.
'observers' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 2,
),
// Cache used by the {@link core_plugin_manager} class.
// NOTE: this must be a shared cache.
'plugin_manager' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
),
// Used to store the full tree of course categories.
'coursecattree' => array(
'mode' => cache_store::MODE_APPLICATION,
'staticacceleration' => true,
'invalidationevents' => array(
'changesincoursecat',
)
),
// Used to store data for course categories visible to current user. Helps to browse list of categories.
'coursecat' => array(
'mode' => cache_store::MODE_SESSION,
'invalidationevents' => array(
'changesincoursecat',
'changesincourse',
),
'ttl' => 600,
),
// Used to store data for course categories visible to current user. Helps to browse list of categories.
'coursecatrecords' => array(
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'invalidationevents' => array(
'changesincoursecat',
),
),
// Used to store state of sections in course (collapsed or not).
'coursesectionspreferences' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'simpledata' => false,
'staticacceleration' => true,
],
// Cache course contacts for the courses.
'coursecontacts' => array(
'mode' => cache_store::MODE_APPLICATION,
'staticacceleration' => true,
'simplekeys' => true,
'ttl' => 3600,
),
// Course reactive state cache.
'courseeditorstate' => [
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true,
],
// Used to store data for repositories to avoid repetitive DB queries within one request.
2013-04-03 14:03:24 +11:00
'repositories' => array(
'mode' => cache_store::MODE_REQUEST,
),
// Used to store external badges.
'externalbadges' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'ttl' => 3600,
),
// Accumulated information about course modules and sections used to print course view page (user-independent).
// Used in functions:
// - course_modinfo::build_course_section_cache()
// - course_modinfo::inner_build_course_cache()
// - get_array_of_activities()
// Reset/update in functions:
// - rebuild_course_cache()
// - course_modinfo::purge_module_cache()
// - course_modinfo::purge_section_cache()
// - remove_course_contents().
'coursemodinfo' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
2016-02-29 14:14:01 +08:00
'canuselocalstore' => true,
'requirelockingbeforewrite' => true
),
// This is the session user selections cache.
// It's a special cache that is used to record user selections that should persist for the lifetime of the session.
// Things such as which categories the user has expanded can be stored here.
// It uses simple keys and simple data, please ensure all uses conform to those two constraints.
'userselections' => array(
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true
),
// Used to cache activity completion status.
'completion' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'ttl' => 3600,
'staticacceleration' => true,
'staticaccelerationsize' => 2, // Should be current course and site course.
),
// Used to cache course completion status.
'coursecompletion' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'ttl' => 3600,
'staticacceleration' => true,
'staticaccelerationsize' => 30, // Will be users list of current courses in nav.
),
// A simple cache that stores whether a user can expand a course in the navigation.
// The key is the course ID and the value will either be 1 or 0 (cast to bool).
// The cache isn't always up to date, it should only ever be used to save a costly call to
// can_access_course on the first page request a user makes.
'navigation_expandcourse' => array(
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true
),
// Caches suspended userids by course.
// The key is the courseid, the value is an array of user ids.
'suspended_userids' => array(
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'simpledata' => true,
),
// Cache system-wide role definitions.
'roledefs' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 30,
),
// Caches plugins existing functions by function name and file.
// Set static acceleration size to 5 to load a few functions.
'plugin_functions' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'canuselocalstore' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 5
),
// Caches data about tag collections and areas.
'tags' => array(
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'staticacceleration' => true,
),
// Grade categories. Stored at session level as invalidation is very aggressive.
'grade_categories' => array(
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'invalidationevents' => array(
'changesingradecategories',
)
),
// Store temporary tables information.
'temp_tables' => array(
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'simpledata' => true
),
// Caches tag index builder results.
'tagindexbuilder' => array(
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simplevalues' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 10,
'ttl' => 900, // 15 minutes.
'invalidationevents' => array(
'resettagindexbuilder',
),
),
// Caches contexts with insights.
'contextwithinsights' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 1
),
// Caches message processors.
'message_processors_enabled' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 3
),
// Caches the time of the last message in a conversation.
'message_time_last_message_between_users' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true, // The conversation id is used.
'simplevalues' => true,
'datasource' => '\core_message\time_last_message_between_users',
),
// Caches font awesome icons.
'fontawesomeiconmapping' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 1
),
// Caches processed CSS.
'postprocessedcss' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => false,
),
// Caches grouping and group ids of a user.
'user_group_groupings' => array(
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
),
// This is the user's pre sign-up session cache.
// This cache is used to record the user's pre sign-up data such as
// age of digital consent (minor) status, accepted policies, etc.
'presignup' => array(
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true,
'ttl' => 1800
),
// Caches the first time we analysed models' analysables.
'modelfirstanalyses' => array(
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'simpledata' => true,
),
// Cache the list of portfolio instances for the logged in user
// in the portfolio_add_button constructor to avoid loading the
// same data multiple times.
'portfolio_add_button_portfolio_instances' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'staticacceleration' => true
],
// Cache the user dates for courses set to relative dates mode.
'course_user_dates' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true
],
// Information generated during the calculation of indicators.
'calculablesinfo' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => false,
'simpledata' => false,
],
// The list of content items (activities, resources and their subtypes) that can be added to a course for a user.
'user_course_content_items' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
],
// The list of favourited content items (activities, resources and their subtypes) for a user.
'user_favourite_course_content_items' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
],
\core_course\local\service\content_item_service::RECOMMENDATION_CACHE => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
],
// Caches contentbank extensions management.
'contentbank_enabled_extensions' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
],
'contentbank_context_extensions' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
],
// Language strings for H5P content-type libraries.
// Key "{$libraryname}/{$language}"" contains translations for a given library and language.
// Key "$libraryname" has a list of all of the available languages for the library.
'h5p_content_type_translations' => [
'mode' => cache_store::MODE_APPLICATION,
'simpledata' => true,
],
// File cache for H5P Library ids.
'h5p_libraries' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'canuselocalstore' => true
],
// File cache for H5P Library files.
'h5p_library_files' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'canuselocalstore' => true
],
// Cache the grade letters for faster retrival.
'grade_letters' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 100
],
// Cache for licenses.
'license' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => false,
],
// Cache the grade setting for faster retrieval.
'gradesetting' => [
'mode' => cache_store::MODE_REQUEST,
'simplekeys' => true,
'staticacceleration' => true,
'staticaccelerationsize' => 100
],
// Course image cache.
'course_image' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'datasource' => '\core_course\cache\course_image',
],
// Cache the course categories where the user has access the content bank.
'contentbank_allowed_categories' => [
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true,
'invalidationevents' => [
'changesincoursecat',
'changesincategoryenrolment',
],
],
// Cache the courses where the user has access the content bank.
'contentbank_allowed_courses' => [
'mode' => cache_store::MODE_SESSION,
'simplekeys' => true,
'simpledata' => true,
'invalidationevents' => [
'changesincoursecat',
'changesincategoryenrolment',
'changesincourse',
],
],
// Users allowed reports according to audience.
'reportbuilder_allowed_reports' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'ttl' => 1800,
],
// Cache image dimensions.
'file_imageinfo' => [
'mode' => cache_store::MODE_APPLICATION,
'simplekeys' => true,
'simpledata' => true,
'staticacceleration' => true,
'canuselocalstore' => true,
'staticaccelerationsize' => 100,
],
);