Index: openacs-4/packages/dotlrn/dotlrn.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/dotlrn.info,v diff -u -r1.147 -r1.148 --- openacs-4/packages/dotlrn/dotlrn.info 5 Aug 2018 21:59:31 -0000 1.147 +++ openacs-4/packages/dotlrn/dotlrn.info 18 Sep 2018 17:27:14 -0000 1.148 @@ -7,15 +7,15 @@ f f - + OpenACS A Course Management System 2017-08-06 DotLRN Consortium 2 Course Management - + Index: openacs-4/packages/dotlrn/tcl/applets-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/applets-procs.tcl,v diff -u -r1.30 -r1.31 --- openacs-4/packages/dotlrn/tcl/applets-procs.tcl 10 Jul 2018 16:26:16 -0000 1.30 +++ openacs-4/packages/dotlrn/tcl/applets-procs.tcl 18 Sep 2018 17:27:14 -0000 1.31 @@ -123,7 +123,9 @@ ad_proc -public list_applets {} { List the applet_keys for all dotlrn applets. } { - return [util_memoize {dotlrn_applet::list_applets_not_cached}] + ::dotlrn::dotlrn_cache eval applets_list { + dotlrn_applet::list_applets_not_cached + } } ad_proc -private list_applets_not_cached {} { @@ -159,7 +161,9 @@ } { Get the package key associated with the given applet. } { - return [util_memoize "dotlrn_applet::get_package_key_not_cached -applet_key $applet_key"] + ::dotlrn::dotlrn_cache eval applet-package_key-$applet_key { + dotlrn_applet::get_package_key_not_cached -applet_key $applet_key + } } ad_proc -private get_package_key_not_cached { Index: openacs-4/packages/dotlrn/tcl/community-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/community-procs.tcl,v diff -u -r1.233 -r1.234 --- openacs-4/packages/dotlrn/tcl/community-procs.tcl 26 Jul 2018 14:53:25 -0000 1.233 +++ openacs-4/packages/dotlrn/tcl/community-procs.tcl 18 Sep 2018 17:27:14 -0000 1.234 @@ -393,7 +393,9 @@ } { db_dml update_package_id {} db_dml update_application_group_package_id {} - util_memoize_flush "dotlrn_community::get_package_id_not_cached $community_id" + + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id \ + $community_id-package_id } ad_proc -public get_url { @@ -429,7 +431,10 @@ } set community_type [get_community_type_from_community_id $community_id] - return [util_memoize "dotlrn_community::get_default_roles_not_cached -community_type $community_type"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-default_roles { + dotlrn_community::get_default_roles_not_cached -community_type $community_type + } } ad_proc -private get_default_roles_not_cached { @@ -523,7 +528,10 @@ ad_proc -public get_all_roles {} { Return the list of roles used in dotLRN. } { - return [util_memoize {dotlrn_community::get_all_roles_not_cached}] + + ::dotlrn::dotlrn_cache eval get_all_roles { + dotlrn_community::get_all_roles_not_cached + } } ad_proc -private get_all_roles_not_cached {} { @@ -771,7 +779,12 @@ } { Check membership. } { - return [db_string select_count_membership {} -default 0] + + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-member-$user_id { + db_string select_count_membership {} -default 0 + } + } ad_proc -public member_pending_p { @@ -817,23 +830,9 @@ -member_state $member_state } - util_memoize_flush "dotlrn_community::list_users_not_cached -rel_type $rel_type -community_id $community_id" - - # - # Flush all permission checks pertaining to this user. - # - permission::cache_flush -party_id $user_id - - # - # It is not clear, what the original - # - # util_memoize_flush_regexp $user_id - # - # was intended just to flush, just permissions or more. To - # improve latencies, the following flush command should be - # more precise (or removed) - # - util_memoize_flush_pattern -log *$user_id* + # there is no such entry in the util_memoize cache + # we keep it as a reminder to add caching for it later + #util_memoize_flush "dotlrn_community::list_users_not_cached -rel_type $rel_type -community_id $community_id" } ad_proc -public add_user_to_community { @@ -883,6 +882,14 @@ membership_approve -user_id $user_id -community_id $community_id } } + # + # Flush all permission checks pertaining to this user. + # + permission::cache_flush -party_id $user_id + + # Remove record of this membership in the cache + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id \ + $community_id-member-$user_id } @@ -951,24 +958,18 @@ # Remove it relation_remove $rel_id - # flush the list_users cache - util_memoize_flush "dotlrn_community::list_users_not_cached -rel_type $rel_type -community_id $community_id" + # there is no such entry in the util_memoize cache + # we keep it as a reminder to add caching for it later + # util_memoize_flush "dotlrn_community::list_users_not_cached -rel_type $rel_type -community_id $community_id" } # # Flush all permission checks pertaining to this user. # permission::cache_flush -party_id $user_id - # - # It is not clear, what the original - # - # util_memoize_flush_regexp $user_id - # - # was intended just to flush, just permissions or more. To - # improve latencies, the following flush command should be - # more precise (or removed) - # - util_memoize_flush_pattern -log *$user_id* + # Remove record of this membership in the cache + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id \ + $community_id-member-$user_id } ad_proc -public remove_user_from_all { @@ -1043,7 +1044,10 @@ } { Returns the community type from community_id. } { - return [util_memoize "dotlrn_community::get_community_type_from_community_id_not_cached -community_id $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-community_type { + dotlrn_community::get_community_type_from_community_id_not_cached -community_id $community_id + } } ad_proc -private get_community_type_from_community_id_not_cached { @@ -1059,7 +1063,10 @@ Returns the community type key depending on the node we're at. } { set package_id [ad_conn package_id] - return [util_memoize "dotlrn_community::get_community_type_not_cached -package_id $package_id"] + + ::dotlrn::dotlrn_cache eval pkg_id-$package_id-community_type { + dotlrn_community::get_community_type_not_cached -package_id $package_id + } } ad_proc -private get_community_type_not_cached { @@ -1138,7 +1145,9 @@ set package_id [ad_conn package_id] } - return [util_memoize "dotlrn_community::get_parent_community_id_not_cached -package_id $package_id"] + ::dotlrn::dotlrn_cache eval pkg_id-$package_id-parent_community_id { + dotlrn_community::get_parent_community_id_not_cached -package_id $package_id + } } ad_proc -private get_parent_community_id_not_cached { @@ -1159,7 +1168,10 @@ } { Returns the parent community's id or null. } { - return [util_memoize "dotlrn_community::get_parent_id_not_cached -community_id $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-parent_id { + dotlrn_community::get_parent_id_not_cached -community_id $community_id + } } ad_proc -private get_parent_id_not_cached { @@ -1235,7 +1247,10 @@ } { Returns 1 if the community has a subcommunity, memoized for 1 min. } { - return [util_memoize "dotlrn_community::has_subcommunity_p_not_cached -community_id $community_id" 60] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-has_subcommunity_p { + dotlrn_community::has_subcommunity_p_not_cached -community_id $community_id + } } ad_proc -private has_subcommunity_p_not_cached { @@ -1411,7 +1426,10 @@ Get the package ID for a particular community. This is cached as the package ID is not going to change. } { - return [util_memoize [list dotlrn_community::get_package_id_not_cached $community_id]] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-package_id { + dotlrn_community::get_package_id_not_cached $community_id + } } ad_proc -public get_package_id_not_cached { @@ -1455,7 +1473,7 @@ set package_id [dotlrn_community::get_package_id $community_id] apm_package_rename -package_id $package_id -instance_name $pretty_name - util_memoize_flush "dotlrn_community::get_community_name_not_cached $community_id" + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id $community_id-name # generate "rename" event raise_change_event \ @@ -1474,7 +1492,10 @@ } { Get the name for a community. } { - return [util_memoize "dotlrn_community::get_community_name_not_cached $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-name { + dotlrn_community::get_community_name_not_cached $community_id + } } ad_proc -private get_community_name_not_cached { @@ -1581,8 +1602,10 @@ if {$community_id eq ""} { set community_id [get_community_id] } - - return [util_memoize "dotlrn_community::get_portal_id_not_cached -community_id $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-portal_id { + dotlrn_community::get_portal_id_not_cached -community_id $community_id + } } ad_proc -private get_portal_id_not_cached { @@ -1601,8 +1624,10 @@ if {$community_id eq ""} { set community_id [get_community_id] } - - return [util_memoize "dotlrn_community::get_non_member_portal_id_not_cached -community_id $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-non_member_portal_id { + dotlrn_community::get_non_member_portal_id_not_cached -community_id $community_id + } } ad_proc -private get_non_member_portal_id_not_cached { @@ -1621,8 +1646,10 @@ if {$community_id eq ""} { set community_id [get_community_id] } - - return [util_memoize "dotlrn_community::get_admin_portal_id_not_cached -community_id $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-admin_portal_id { + dotlrn_community::get_admin_portal_id_not_cached -community_id $community_id + } } ad_proc -private get_admin_portal_id_not_cached { @@ -2093,7 +2120,10 @@ Is this applet active in this community? Does it do voulunteer work? Helps its neighbors? returns 1 or 0 } { - return [db_0or1row select_active_applet_p {}] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-applet_active-$applet_key { + db_0or1row select_active_applet_p {} + } } ad_proc -public applets_dispatch { @@ -2122,15 +2152,18 @@ ad_proc -public get_available_attributes {} { Get a list of the attributes that we can get/set for dotLRN communities. } { - return [util_memoize {dotlrn_community::get_available_attributes_not_cached}] + # candidate general cache + ::dotlrn::dotlrn_cache eval available_attributes { + dotlrn_community::get_available_attributes_not_cached + } } ad_proc -private get_available_attributes_not_cached {} { return [db_list_of_lists select_available_attributes {}] } ad_proc -private get_available_attributes_flush {} { - util_memoize_flush {dotlrn_community::get_available_attributes_not_cached} + ::dotlrn::dotlrn_cache flush available_attributes } ad_proc -public get_attributes { @@ -2141,8 +2174,10 @@ if {$community_id eq ""} { set community_id [get_community_id] } - - return [util_memoize "dotlrn_community::get_attributes_not_cached -community_id $community_id"] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-attributes { + dotlrn_community::get_attributes_not_cached -community_id $community_id + } } ad_proc -private get_attributes_not_cached { @@ -2215,7 +2250,7 @@ db_dml update_attribute_value {} } - util_memoize_flush "dotlrn_community::get_attributes_not_cached -community_id $community_id" + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id $community_id-attributes } ad_proc -public unset_attribute { @@ -2237,8 +2272,7 @@ # remove the row db_dml delete_attribute_value {} - util_memoize_flush \ - "dotlrn_community::get_attributes_not_cached -community_id $community_id" + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id $community_id-attributes } ad_proc -public unset_attributes { @@ -2248,8 +2282,7 @@ } { db_dml delete_attributes {} - util_memoize_flush \ - "dotlrn_community::get_attributes_not_cached -community_id $community_id" + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id $community_id-attributes } ad_proc -public get_attribute_id { @@ -2446,8 +2479,7 @@ db_dml update_portal_theme {} set portal_id [get_admin_portal_id -community_id $community_id] db_dml update_portal_theme {} - util_memoize_flush [list dotlrn_community::get_site_template_id_not_cached -community_id $community_id] - util_memoize_flush [list dotlrn_community::get_dotlrn_master_not_cached -community_id $community_id] + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id $community_id-site_template } ad_proc -public get_dotlrn_master { @@ -2480,7 +2512,10 @@ @return The id of the Site Template assigned to the Community } { - return [util_memoize [list dotlrn_community::get_site_template_id_not_cached -community_id $community_id]] + ::dotlrn::dotlrn_community_cache eval -partition_key $community_id \ + $community_id-site_template { + dotlrn_community::get_site_template_id_not_cached -community_id $community_id + } } ad_proc -private get_site_template_id_not_cached { @@ -2518,8 +2553,10 @@ set new_theme_id [db_string select_portal_theme {}] db_dml update_portal_themes {} db_dml update_portal_admin_themes {} - - util_memoize_flush_regexp "dotlrn_community::get_site_template_id_not_cached *" + + foreach community_id [db_list affected_portals {}] { + ::dotlrn::dotlrn_community_cache flush -partition_key $community_id $community_id-site_template + } } } Index: openacs-4/packages/dotlrn/tcl/community-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/community-procs.xql,v diff -u -r1.99 -r1.100 --- openacs-4/packages/dotlrn/tcl/community-procs.xql 27 Jan 2018 17:58:19 -0000 1.99 +++ openacs-4/packages/dotlrn/tcl/community-procs.xql 18 Sep 2018 17:27:14 -0000 1.100 @@ -254,7 +254,7 @@ select community_id as subcomm_id from dotlrn_communities where parent_community_id = :community_id - order by pretty_name + order by pretty_name @@ -586,7 +586,14 @@ - + + + select + portal_id + from dotlrn_communities_all + + + select site_template_id Index: openacs-4/packages/dotlrn/tcl/dotlrn-init.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-init.tcl,v diff -u -r1.44 -r1.45 --- openacs-4/packages/dotlrn/tcl/dotlrn-init.tcl 7 Apr 2018 08:59:39 -0000 1.44 +++ openacs-4/packages/dotlrn/tcl/dotlrn-init.tcl 18 Sep 2018 17:27:14 -0000 1.45 @@ -29,6 +29,36 @@ # if installed if {[dotlrn::is_instantiated]} { + # + # Create the caches. The sizes can be + # tailored in the config file like the following: + # + # ns_section ns/server/${server}/acs/dotlrn + # ns_param DotlrnCache 2000000 + # ns_param DotlrnCommunityCache 2000000 + # ns_param DotlrnUserCache 2000000 + # + # dotlrn-cache: general purpose cache + ::acs::Cache create ::dotlrn::dotlrn_cache \ + -package_key dotlrn \ + -parameter DotlrnCache \ + -default_size 2000000 + + # dotlrn-user_cache: user specific stuff + ::acs::KeyPartitionedCache create ::dotlrn::dotlrn_user_cache \ + -package_key dotlrn \ + -parameter DotlrnUserCache \ + -default_size 2000000 + + # dotlrn_community_cache: holds community specfic stuff like + # "package_id", "name", "portal_id" etc + ::acs::KeyPartitionedCache create ::dotlrn::dotlrn_community_cache \ + -package_key dotlrn \ + -parameter DotlrnCommunityCache \ + -default_size 2000000 + + + set package_id [dotlrn::get_package_id] # make sure we aren't inheriting permissions from dotlrn's parent object @@ -76,7 +106,7 @@ # init of each applet NOTE: this applet_add proc _must_ be able to be # called repeatedly since this script is eval'd at every server startup foreach applet [db_list select_not_installed_applets {}] { - if {[catch {dotlrn_applet::applet_call $applet AddApplet [list]} errMsg]} { + if {[catch {dotlrn_applet::applet_call $applet AddApplet [list]} errMsg]} { ns_log warning "dotlrn-init: AddApplet $applet failed\n$errMsg" } } @@ -106,7 +136,6 @@ ns_log notice "dotlrn-init: done" } - # Local variables: # mode: tcl # tcl-indent-level: 4 Index: openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl,v diff -u -r1.85 -r1.86 --- openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl 26 Jul 2018 15:12:22 -0000 1.85 +++ openacs-4/packages/dotlrn/tcl/dotlrn-procs.tcl 18 Sep 2018 17:27:14 -0000 1.86 @@ -179,7 +179,11 @@ } { Return the user default theme } { - return [util_memoize "dotlrn::get_user_theme_not_cached $user_id"] + + ::dotlrn::dotlrn_user_cache eval -partition_key $user_id \ + $user_id-theme_id { + dotlrn::get_user_theme_not_cached $user_id + } } ad_proc -private get_user_theme_not_cached { @@ -204,7 +208,10 @@ } { Get the portal_id for a particular user } { - return [util_memoize "dotlrn::get_portal_id_not_cached -user_id $user_id"] + ::dotlrn::dotlrn_user_cache eval -partition_key $user_id \ + $user_id-portal_id { + dotlrn::get_portal_id_not_cached -user_id $user_id + } } ad_proc -private get_portal_id_not_cached { @@ -417,8 +424,8 @@ set new_theme_id [db_string select_portal_theme {}] db_dml update_portal_theme {} db_dml update_user_site_template {} - util_memoize_flush [list dotlrn::get_site_template_id_not_cached -user_id $user_id] - util_memoize_flush [list dotlrn::get_dotlrn_master_not_cached -user_id $user_id] + + ::dotlrn::dotlrn_user_cache flush -partition_key $user_id $user_id-site_template_id } ad_proc -public get_dotlrn_master { @@ -451,7 +458,10 @@ @return The id of the Site Template assigned to the User } { - return [util_memoize [list dotlrn::get_site_template_id_not_cached -user_id $user_id] ] + ::dotlrn::dotlrn_user_cache eval -partition_key $user_id \ + $user_id-site_template_id { + dotlrn::get_site_template_id_not_cached -user_id $user_id + } } ad_proc -private get_site_template_id_not_cached { @@ -486,7 +496,9 @@ @return The path of the master template associated to the Site Template } { - return [util_memoize [list dotlrn::get_master_from_site_template_id_not_cached -site_template_id $site_template_id]] + ::dotlrn::dotlrn_cache eval master_from_site_template_id-${site_template_id} { + dotlrn::get_master_from_site_template_id_not_cached -site_template_id $site_template_id + } } ad_proc -private get_master_from_site_template_id_not_cached { @@ -515,7 +527,10 @@ set new_theme_id [db_string select_portal_theme {}] db_dml update_portal_themes {update } - util_memoize_flush_regexp "dotlrn::get_site_template_id_not_cached *" + + foreach user_id [db_list affected_users {}] { + ::dotlrn::dotlrn_user_cache flush -partition_key $user_id $user_id-site_template_id + } } } Index: openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql,v diff -u -r1.18 -r1.19 --- openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql 8 Aug 2006 21:26:23 -0000 1.18 +++ openacs-4/packages/dotlrn/tcl/dotlrn-procs.xql 18 Sep 2018 17:27:14 -0000 1.19 @@ -89,6 +89,14 @@ + + + select + user_id + from dotlrn_users + + + update portals Index: openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl,v diff -u -r1.63 -r1.64 --- openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl 27 Mar 2018 14:32:16 -0000 1.63 +++ openacs-4/packages/dotlrn/tcl/dotlrn-security-procs.tcl 18 Sep 2018 17:27:14 -0000 1.64 @@ -160,7 +160,7 @@ } # always flush when creating a new user - util_memoize_flush "dotlrn::get_portal_id_not_cached -user_id $user_id" + ::dotlrn::dotlrn_user_cache flush -partition_key $user_id $user_id-portal_id #Site Template Customization dotlrn::set_site_template_id -user_id $user_id \ Index: openacs-4/packages/dotlrn/tcl/user-type-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/user-type-procs.tcl,v diff -u -r1.6 -r1.7 --- openacs-4/packages/dotlrn/tcl/user-type-procs.tcl 7 Aug 2017 23:48:09 -0000 1.6 +++ openacs-4/packages/dotlrn/tcl/user-type-procs.tcl 18 Sep 2018 17:27:14 -0000 1.7 @@ -31,7 +31,9 @@ } { get the user type info for the given dotlrn_user_type (cached) } { - return [util_memoize "dotlrn::user::type::get_not_cached -type $type"] + ::dotlrn::dotlrn_cache eval usertype-$type { + dotlrn::user::type::get_not_cached -type $type + } } ad_proc -public get_not_cached { Index: openacs-4/packages/dotlrn/www/member-add-3.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/member-add-3.tcl,v diff -u -r1.17 -r1.18 --- openacs-4/packages/dotlrn/www/member-add-3.tcl 29 Jun 2018 17:27:19 -0000 1.17 +++ openacs-4/packages/dotlrn/www/member-add-3.tcl 18 Sep 2018 17:27:15 -0000 1.18 @@ -49,7 +49,6 @@ # so we do not want to call remove_user # as that removes subgroup rels as well relation_remove $rel_id - util_memoize_flush "dotlrn_community::list_users_not_cached -rel_type $rel_type -community_id $community_id" set change_rel_p 1 } } else { @@ -78,7 +77,6 @@ $rel_type \ $community_id \ $member_id - util_memoize_flush "dotlrn_community::list_users_not_cached -rel_type $rel_type -community_id $community_id" } else { dotlrn_community::add_user -rel_type $rel_type $community_id $member_id } Index: openacs-4/packages/dotlrn/www/spam-policy-toggle.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/spam-policy-toggle.tcl,v diff -u -r1.7 -r1.8 --- openacs-4/packages/dotlrn/www/spam-policy-toggle.tcl 29 Jun 2018 17:27:19 -0000 1.7 +++ openacs-4/packages/dotlrn/www/spam-policy-toggle.tcl 18 Sep 2018 17:27:15 -0000 1.8 @@ -44,9 +44,6 @@ permission::$action -party_id [dotlrn_community::get_members_rel_id -community_id $community_id] \ -object_id $community_id -privilege dotlrn_spam_community -# Make sure we flush everything that references this community and the spam privilege -util_memoize_flush_regexp "${community_id}(.*)dotlrn_spam_community" - ad_returnredirect $referer ad_script_abort Index: openacs-4/packages/dotlrn/www/admin/add-edit-site-template.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/add-edit-site-template.tcl,v diff -u -r1.6 -r1.7 --- openacs-4/packages/dotlrn/www/admin/add-edit-site-template.tcl 15 Aug 2018 16:43:08 -0000 1.6 +++ openacs-4/packages/dotlrn/www/admin/add-edit-site-template.tcl 18 Sep 2018 17:27:15 -0000 1.7 @@ -50,7 +50,7 @@ db_dml insert_site_template {} } -edit_data { db_dml update_site_template {} - util_memoize_flush [list dotlrn::get_master_from_site_template_id_not_cached -site_template_id $site_template_id] + ::dotlrn::dotlrn_cache flush master_from_site_template_id-${site_template_id} } -new_request { set pretty_name "" set site_master ""