2013-03-16 08:47:55 +06:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using Umbraco.Core;
|
|
|
|
|
|
using Umbraco.Core.Cache;
|
2014-02-17 17:45:59 +11:00
|
|
|
|
using Umbraco.Core.Events;
|
2013-03-16 08:47:55 +06:00
|
|
|
|
using Umbraco.Core.Models;
|
2013-03-19 23:49:20 +06:00
|
|
|
|
using Umbraco.Core.Models.EntityBase;
|
2014-02-17 17:45:59 +11:00
|
|
|
|
using Umbraco.Core.Models.Membership;
|
|
|
|
|
|
using Umbraco.Core.Persistence.Repositories;
|
2013-02-06 09:53:13 +06:00
|
|
|
|
using Umbraco.Core.Services;
|
|
|
|
|
|
using umbraco;
|
2013-02-12 04:13:29 +06:00
|
|
|
|
using umbraco.BusinessLogic;
|
2013-02-06 09:53:13 +06:00
|
|
|
|
using umbraco.cms.businesslogic;
|
|
|
|
|
|
using umbraco.cms.businesslogic.member;
|
|
|
|
|
|
using System.Linq;
|
2013-03-22 00:49:07 +06:00
|
|
|
|
using umbraco.cms.businesslogic.web;
|
2013-07-09 11:47:46 +10:00
|
|
|
|
using Content = Umbraco.Core.Models.Content;
|
2014-02-17 17:45:59 +11:00
|
|
|
|
using DeleteEventArgs = umbraco.cms.businesslogic.DeleteEventArgs;
|
2013-03-16 08:47:55 +06:00
|
|
|
|
using Macro = umbraco.cms.businesslogic.macro.Macro;
|
2013-08-31 19:09:29 +02:00
|
|
|
|
using Member = umbraco.cms.businesslogic.member.Member;
|
2013-03-16 08:47:55 +06:00
|
|
|
|
using Template = umbraco.cms.businesslogic.template.Template;
|
2013-02-06 09:53:13 +06:00
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Web.Cache
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
2013-02-07 04:45:05 +06:00
|
|
|
|
/// Class which listens to events on business level objects in order to invalidate the cache amongst servers when data changes
|
2013-02-06 09:53:13 +06:00
|
|
|
|
/// </summary>
|
2013-02-07 04:45:05 +06:00
|
|
|
|
public class CacheRefresherEventHandler : ApplicationEventHandler
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
|
|
|
|
|
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
|
2013-04-04 21:57:41 +06:00
|
|
|
|
{
|
|
|
|
|
|
//bind to application tree events
|
|
|
|
|
|
ApplicationTree.Deleted += ApplicationTreeDeleted;
|
|
|
|
|
|
ApplicationTree.Updated += ApplicationTreeUpdated;
|
|
|
|
|
|
ApplicationTree.New += ApplicationTreeNew;
|
|
|
|
|
|
|
|
|
|
|
|
//bind to application events
|
|
|
|
|
|
Application.Deleted += ApplicationDeleted;
|
|
|
|
|
|
Application.New += ApplicationNew;
|
|
|
|
|
|
|
2014-01-28 12:13:27 +11:00
|
|
|
|
//bind to user / user type events
|
2014-01-28 09:22:01 +11:00
|
|
|
|
UserService.SavedUserType += UserServiceSavedUserType;
|
|
|
|
|
|
UserService.DeletedUserType += UserServiceDeletedUserType;
|
2014-01-28 12:13:27 +11:00
|
|
|
|
UserService.SavedUser += UserServiceSavedUser;
|
|
|
|
|
|
UserService.DeletedUser += UserServiceDeletedUser;
|
2013-03-22 05:04:32 +06:00
|
|
|
|
|
2013-03-23 01:59:25 +06:00
|
|
|
|
//Bind to dictionary events
|
|
|
|
|
|
//NOTE: we need to bind to legacy and new API events currently: http://issues.umbraco.org/issue/U4-1979
|
|
|
|
|
|
|
|
|
|
|
|
global::umbraco.cms.businesslogic.Dictionary.DictionaryItem.New += DictionaryItemNew;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.Dictionary.DictionaryItem.Saving +=DictionaryItemSaving;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.Dictionary.DictionaryItem.Deleted +=DictionaryItemDeleted;
|
|
|
|
|
|
LocalizationService.DeletedDictionaryItem += LocalizationServiceDeletedDictionaryItem;
|
|
|
|
|
|
LocalizationService.SavedDictionaryItem += LocalizationServiceSavedDictionaryItem;
|
|
|
|
|
|
|
2013-03-22 05:04:32 +06:00
|
|
|
|
//Bind to data type events
|
|
|
|
|
|
//NOTE: we need to bind to legacy and new API events currently: http://issues.umbraco.org/issue/U4-1979
|
|
|
|
|
|
|
2013-03-22 22:10:24 +06:00
|
|
|
|
global::umbraco.cms.businesslogic.datatype.DataTypeDefinition.AfterDelete += DataTypeDefinitionDeleting;
|
2013-03-22 05:04:32 +06:00
|
|
|
|
global::umbraco.cms.businesslogic.datatype.DataTypeDefinition.Saving += DataTypeDefinitionSaving;
|
|
|
|
|
|
DataTypeService.Deleted += DataTypeServiceDeleted;
|
|
|
|
|
|
DataTypeService.Saved += DataTypeServiceSaved;
|
|
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
//Bind to stylesheet events
|
|
|
|
|
|
//NOTE: we need to bind to legacy and new API events currently: http://issues.umbraco.org/issue/U4-1979
|
|
|
|
|
|
|
|
|
|
|
|
global::umbraco.cms.businesslogic.web.StylesheetProperty.AfterSave += StylesheetPropertyAfterSave;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.web.StylesheetProperty.AfterDelete += StylesheetPropertyAfterDelete;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.web.StyleSheet.AfterDelete += StyleSheetAfterDelete;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.web.StyleSheet.AfterSave += StyleSheetAfterSave;
|
|
|
|
|
|
FileService.SavedStylesheet += FileServiceSavedStylesheet;
|
|
|
|
|
|
FileService.DeletedStylesheet += FileServiceDeletedStylesheet;
|
2013-03-16 08:47:55 +06:00
|
|
|
|
|
2013-03-22 00:49:07 +06:00
|
|
|
|
//Bind to domain events
|
|
|
|
|
|
|
|
|
|
|
|
Domain.AfterSave += DomainAfterSave;
|
|
|
|
|
|
Domain.AfterDelete += DomainAfterDelete;
|
|
|
|
|
|
Domain.New += DomainNew;
|
|
|
|
|
|
|
2013-03-22 00:35:15 +06:00
|
|
|
|
//Bind to language events
|
|
|
|
|
|
//NOTE: we need to bind to legacy and new API events currently: http://issues.umbraco.org/issue/U4-1979
|
|
|
|
|
|
|
|
|
|
|
|
global::umbraco.cms.businesslogic.language.Language.AfterDelete += LanguageAfterDelete;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.language.Language.New += LanguageNew;
|
|
|
|
|
|
global::umbraco.cms.businesslogic.language.Language.AfterSave += LanguageAfterSave;
|
|
|
|
|
|
LocalizationService.SavedLanguage += LocalizationServiceSavedLanguage;
|
|
|
|
|
|
LocalizationService.DeletedLanguage += LocalizationServiceDeletedLanguage;
|
|
|
|
|
|
|
2013-03-16 08:47:55 +06:00
|
|
|
|
//Bind to content type events
|
|
|
|
|
|
|
|
|
|
|
|
ContentTypeService.SavedContentType += ContentTypeServiceSavedContentType;
|
|
|
|
|
|
ContentTypeService.SavedMediaType += ContentTypeServiceSavedMediaType;
|
2013-03-21 01:04:27 +06:00
|
|
|
|
ContentTypeService.DeletedContentType += ContentTypeServiceDeletedContentType;
|
|
|
|
|
|
ContentTypeService.DeletedMediaType += ContentTypeServiceDeletedMediaType;
|
2014-01-23 13:33:58 +11:00
|
|
|
|
MemberTypeService.Saved += MemberTypeServiceSaved;
|
|
|
|
|
|
MemberTypeService.Deleted += MemberTypeServiceDeleted;
|
2013-03-12 22:58:21 +04:00
|
|
|
|
|
2013-04-04 00:30:28 +06:00
|
|
|
|
//Bind to permission events
|
|
|
|
|
|
|
|
|
|
|
|
Permission.New += PermissionNew;
|
|
|
|
|
|
Permission.Updated += PermissionUpdated;
|
|
|
|
|
|
Permission.Deleted += PermissionDeleted;
|
2014-02-17 17:45:59 +11:00
|
|
|
|
PermissionRepository<IContent>.AssignedPermissions += CacheRefresherEventHandler_AssignedPermissions;
|
2013-04-04 00:30:28 +06:00
|
|
|
|
|
2013-02-07 05:26:53 +06:00
|
|
|
|
//Bind to template events
|
2013-03-22 02:08:55 +06:00
|
|
|
|
//NOTE: we need to bind to legacy and new API events currently: http://issues.umbraco.org/issue/U4-1979
|
2013-02-07 05:26:53 +06:00
|
|
|
|
|
|
|
|
|
|
Template.AfterSave += TemplateAfterSave;
|
|
|
|
|
|
Template.AfterDelete += TemplateAfterDelete;
|
2013-03-22 02:08:55 +06:00
|
|
|
|
FileService.SavedTemplate += FileServiceSavedTemplate;
|
|
|
|
|
|
FileService.DeletedTemplate += FileServiceDeletedTemplate;
|
2013-02-07 05:26:53 +06:00
|
|
|
|
|
2013-02-07 04:45:05 +06:00
|
|
|
|
//Bind to macro events
|
|
|
|
|
|
|
|
|
|
|
|
Macro.AfterSave += MacroAfterSave;
|
2013-02-07 05:26:53 +06:00
|
|
|
|
Macro.AfterDelete += MacroAfterDelete;
|
2013-02-07 04:45:05 +06:00
|
|
|
|
|
|
|
|
|
|
//Bind to member events
|
2013-02-06 09:53:13 +06:00
|
|
|
|
|
2014-01-23 14:55:41 +11:00
|
|
|
|
MemberService.Saved += MemberServiceSaved;
|
|
|
|
|
|
MemberService.Deleted += MemberServiceDeleted;
|
2014-02-12 17:14:16 +11:00
|
|
|
|
MemberGroupService.Saved += MemberGroupService_Saved;
|
|
|
|
|
|
MemberGroupService.Deleted += MemberGroupService_Deleted;
|
2013-02-06 09:53:13 +06:00
|
|
|
|
|
2013-02-07 04:45:05 +06:00
|
|
|
|
//Bind to media events
|
|
|
|
|
|
|
2013-02-06 09:53:13 +06:00
|
|
|
|
MediaService.Saved += MediaServiceSaved;
|
2013-02-07 02:19:51 +06:00
|
|
|
|
//We need to perform all of the 'before' events here because we need a reference to the
|
|
|
|
|
|
//media item's Path before it is moved/deleting/trashed
|
|
|
|
|
|
//see: http://issues.umbraco.org/issue/U4-1653
|
2013-02-06 09:53:13 +06:00
|
|
|
|
MediaService.Deleting += MediaServiceDeleting;
|
2013-02-07 02:19:51 +06:00
|
|
|
|
MediaService.Moving += MediaServiceMoving;
|
|
|
|
|
|
MediaService.Trashing += MediaServiceTrashing;
|
2013-07-09 11:47:46 +10:00
|
|
|
|
|
|
|
|
|
|
ContentService.Created += ContentServiceCreated;
|
|
|
|
|
|
ContentService.Copied += ContentServiceCopied;
|
|
|
|
|
|
}
|
2014-01-28 12:13:27 +11:00
|
|
|
|
|
2013-07-09 11:47:46 +10:00
|
|
|
|
#region Content service event handlers
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// When an entity is copied new permissions may be assigned to it based on it's parent, if that is the
|
|
|
|
|
|
/// case then we need to clear all user permissions cache.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void ContentServiceCopied(IContentService sender, Core.Events.CopyEventArgs<IContent> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
//check if permissions have changed
|
|
|
|
|
|
var permissionsChanged = ((Content)e.Copy).WasPropertyDirty("PermissionsChanged");
|
|
|
|
|
|
if (permissionsChanged)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllUserPermissionsCache();
|
|
|
|
|
|
}
|
2013-02-06 09:53:13 +06:00
|
|
|
|
}
|
2013-04-04 03:43:05 +06:00
|
|
|
|
|
2013-07-09 11:47:46 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// When an entity is created new permissions may be assigned to it based on it's parent, if that is the
|
|
|
|
|
|
/// case then we need to clear all user permissions cache.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void ContentServiceCreated(IContentService sender, Core.Events.NewEventArgs<IContent> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
//check if permissions have changed
|
|
|
|
|
|
var permissionsChanged = ((Content)e.Entity).WasPropertyDirty("PermissionsChanged");
|
|
|
|
|
|
if (permissionsChanged)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllUserPermissionsCache();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2013-04-04 21:57:41 +06:00
|
|
|
|
#region ApplicationTree event handlers
|
|
|
|
|
|
static void ApplicationTreeNew(ApplicationTree sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllApplicationTreeCache();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void ApplicationTreeUpdated(ApplicationTree sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllApplicationTreeCache();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void ApplicationTreeDeleted(ApplicationTree sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllApplicationTreeCache();
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Application event handlers
|
|
|
|
|
|
static void ApplicationNew(Application sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllApplicationCache();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void ApplicationDeleted(Application sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshAllApplicationCache();
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2013-04-04 03:43:05 +06:00
|
|
|
|
#region UserType event handlers
|
2014-01-28 09:22:01 +11:00
|
|
|
|
static void UserServiceDeletedUserType(IUserService sender, Core.Events.DeleteEventArgs<Core.Models.Membership.IUserType> e)
|
2013-04-04 03:43:05 +06:00
|
|
|
|
{
|
2014-01-28 09:22:01 +11:00
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveUserTypeCache(x.Id));
|
2013-04-04 03:43:05 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-01-28 09:22:01 +11:00
|
|
|
|
static void UserServiceSavedUserType(IUserService sender, Core.Events.SaveEventArgs<Core.Models.Membership.IUserType> e)
|
2013-04-04 03:43:05 +06:00
|
|
|
|
{
|
2014-01-28 09:22:01 +11:00
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshUserTypeCache(x.Id));
|
2013-04-04 03:43:05 +06:00
|
|
|
|
}
|
2014-01-28 09:22:01 +11:00
|
|
|
|
|
2013-04-04 03:43:05 +06:00
|
|
|
|
#endregion
|
2013-04-04 00:30:28 +06:00
|
|
|
|
|
2013-03-23 01:59:25 +06:00
|
|
|
|
#region Dictionary event handlers
|
|
|
|
|
|
|
|
|
|
|
|
static void LocalizationServiceSavedDictionaryItem(ILocalizationService sender, Core.Events.SaveEventArgs<IDictionaryItem> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshDictionaryCache(x.Id));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void LocalizationServiceDeletedDictionaryItem(ILocalizationService sender, Core.Events.DeleteEventArgs<IDictionaryItem> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveDictionaryCache(x.Id));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DictionaryItemDeleted(global::umbraco.cms.businesslogic.Dictionary.DictionaryItem sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveDictionaryCache(sender.id);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DictionaryItemSaving(global::umbraco.cms.businesslogic.Dictionary.DictionaryItem sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshDictionaryCache(sender.id);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DictionaryItemNew(global::umbraco.cms.businesslogic.Dictionary.DictionaryItem sender, System.EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshDictionaryCache(sender.id);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2013-03-22 05:04:32 +06:00
|
|
|
|
#region DataType event handlers
|
|
|
|
|
|
static void DataTypeServiceSaved(IDataTypeService sender, Core.Events.SaveEventArgs<IDataTypeDefinition> e)
|
|
|
|
|
|
{
|
2013-05-07 19:37:57 -10:00
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshDataTypeCache(x));
|
2013-03-22 05:04:32 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DataTypeServiceDeleted(IDataTypeService sender, Core.Events.DeleteEventArgs<IDataTypeDefinition> e)
|
|
|
|
|
|
{
|
2013-05-07 19:37:57 -10:00
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveDataTypeCache(x));
|
2013-03-22 05:04:32 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DataTypeDefinitionSaving(global::umbraco.cms.businesslogic.datatype.DataTypeDefinition sender, System.EventArgs e)
|
|
|
|
|
|
{
|
2013-05-07 19:37:57 -10:00
|
|
|
|
DistributedCache.Instance.RefreshDataTypeCache(sender);
|
2013-03-22 05:04:32 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DataTypeDefinitionDeleting(global::umbraco.cms.businesslogic.datatype.DataTypeDefinition sender, System.EventArgs e)
|
|
|
|
|
|
{
|
2013-05-07 19:37:57 -10:00
|
|
|
|
DistributedCache.Instance.RemoveDataTypeCache(sender);
|
2013-03-22 05:04:32 +06:00
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#region Stylesheet and stylesheet property event handlers
|
|
|
|
|
|
static void StylesheetPropertyAfterSave(global::umbraco.cms.businesslogic.web.StylesheetProperty sender, SaveEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshStylesheetPropertyCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void StylesheetPropertyAfterDelete(global::umbraco.cms.businesslogic.web.StylesheetProperty sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveStylesheetPropertyCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void FileServiceDeletedStylesheet(IFileService sender, Core.Events.DeleteEventArgs<Stylesheet> e)
|
|
|
|
|
|
{
|
2013-03-23 01:59:25 +06:00
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveStylesheetCache(x));
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void FileServiceSavedStylesheet(IFileService sender, Core.Events.SaveEventArgs<Stylesheet> e)
|
|
|
|
|
|
{
|
2013-03-23 01:59:25 +06:00
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshStylesheetCache(x));
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void StyleSheetAfterSave(StyleSheet sender, SaveEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshStylesheetCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void StyleSheetAfterDelete(StyleSheet sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveStylesheetCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region Domain event handlers
|
2013-03-22 00:49:07 +06:00
|
|
|
|
static void DomainNew(Domain sender, NewEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshDomainCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DomainAfterDelete(Domain sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveDomainCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DomainAfterSave(Domain sender, SaveEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshDomainCache(sender);
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2013-03-22 00:49:07 +06:00
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#region Language event handlers
|
2013-03-22 00:35:15 +06:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a langauge is deleted
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void LocalizationServiceDeletedLanguage(ILocalizationService sender, Core.Events.DeleteEventArgs<ILanguage> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveLanguageCache(x));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a langauge is saved
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void LocalizationServiceSavedLanguage(ILocalizationService sender, Core.Events.SaveEventArgs<ILanguage> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshLanguageCache(x));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a langauge is saved
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void LanguageAfterSave(global::umbraco.cms.businesslogic.language.Language sender, SaveEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshLanguageCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a langauge is created
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void LanguageNew(global::umbraco.cms.businesslogic.language.Language sender, NewEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshLanguageCache(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a langauge is deleted
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void LanguageAfterDelete(global::umbraco.cms.businesslogic.language.Language sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveLanguageCache(sender);
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2013-03-22 00:35:15 +06:00
|
|
|
|
|
2014-01-23 13:33:58 +11:00
|
|
|
|
#region Content/media/member Type event handlers
|
2013-03-21 01:04:27 +06:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a media type is deleted
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void ContentTypeServiceDeletedMediaType(IContentTypeService sender, Core.Events.DeleteEventArgs<IMediaType> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveMediaTypeCache(x));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a content type is deleted
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void ContentTypeServiceDeletedContentType(IContentTypeService sender, Core.Events.DeleteEventArgs<IContentType> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DeletedEntities.ForEach(contentType => DistributedCache.Instance.RemoveContentTypeCache(contentType));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-01-23 13:33:58 +11:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a member type is deleted
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void MemberTypeServiceDeleted(IMemberTypeService sender, Core.Events.DeleteEventArgs<IMemberType> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DeletedEntities.ForEach(contentType => DistributedCache.Instance.RemoveMemberTypeCache(contentType));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2013-03-16 08:47:55 +06:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a media type is saved
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void ContentTypeServiceSavedMediaType(IContentTypeService sender, Core.Events.SaveEventArgs<IMediaType> e)
|
|
|
|
|
|
{
|
2013-03-21 08:38:18 +06:00
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshMediaTypeCache(x));
|
2013-03-16 08:47:55 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a content type is saved
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void ContentTypeServiceSavedContentType(IContentTypeService sender, Core.Events.SaveEventArgs<IContentType> e)
|
2013-03-12 22:58:21 +04:00
|
|
|
|
{
|
2013-03-22 01:49:34 +06:00
|
|
|
|
e.SavedEntities.ForEach(contentType => DistributedCache.Instance.RefreshContentTypeCache(contentType));
|
2014-01-23 13:33:58 +11:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Fires when a member type is saved
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void MemberTypeServiceSaved(IMemberTypeService sender, Core.Events.SaveEventArgs<IMemberType> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshMemberTypeCache(x));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
2014-02-17 17:45:59 +11:00
|
|
|
|
#region User/permissions event handlers
|
|
|
|
|
|
|
|
|
|
|
|
static void CacheRefresherEventHandler_AssignedPermissions(PermissionRepository<IContent> sender, SaveEventArgs<EntityPermission> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
var userIds = e.SavedEntities.Select(x => x.UserId).Distinct();
|
|
|
|
|
|
userIds.ForEach(x => DistributedCache.Instance.RefreshUserPermissionsCache(x));
|
|
|
|
|
|
}
|
2013-04-04 00:30:28 +06:00
|
|
|
|
|
|
|
|
|
|
static void PermissionDeleted(UserPermission sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
InvalidateCacheForPermissionsChange(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void PermissionUpdated(UserPermission sender, SaveEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
InvalidateCacheForPermissionsChange(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void PermissionNew(UserPermission sender, NewEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
InvalidateCacheForPermissionsChange(sender);
|
|
|
|
|
|
}
|
2014-01-28 12:13:27 +11:00
|
|
|
|
|
|
|
|
|
|
void UserServiceSavedUser(IUserService sender, Core.Events.SaveEventArgs<Core.Models.Membership.IUser> e)
|
2013-02-12 04:13:29 +06:00
|
|
|
|
{
|
2014-01-28 12:13:27 +11:00
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshUserCache(x.Id));
|
2013-02-12 04:13:29 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-01-28 12:13:27 +11:00
|
|
|
|
void UserServiceDeletedUser(IUserService sender, Core.Events.DeleteEventArgs<Core.Models.Membership.IUser> e)
|
2013-02-12 04:13:29 +06:00
|
|
|
|
{
|
2014-01-28 12:13:27 +11:00
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveUserCache(x.Id));
|
2013-04-04 00:30:28 +06:00
|
|
|
|
}
|
2014-01-28 12:13:27 +11:00
|
|
|
|
|
2013-04-04 00:30:28 +06:00
|
|
|
|
private static void InvalidateCacheForPermissionsChange(UserPermission sender)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (sender.User != null)
|
|
|
|
|
|
{
|
2013-07-09 11:47:46 +10:00
|
|
|
|
DistributedCache.Instance.RefreshUserPermissionsCache(sender.User.Id);
|
2013-04-04 00:30:28 +06:00
|
|
|
|
}
|
2013-07-09 11:47:46 +10:00
|
|
|
|
else if (sender.UserId > -1)
|
2013-04-04 00:30:28 +06:00
|
|
|
|
{
|
2013-07-09 11:47:46 +10:00
|
|
|
|
DistributedCache.Instance.RefreshUserPermissionsCache(sender.UserId);
|
2013-04-04 00:30:28 +06:00
|
|
|
|
}
|
2013-07-09 11:47:46 +10:00
|
|
|
|
else if (sender.NodeIds.Any())
|
2013-04-04 00:30:28 +06:00
|
|
|
|
{
|
2013-07-09 11:47:46 +10:00
|
|
|
|
DistributedCache.Instance.RefreshAllUserPermissionsCache();
|
2013-04-04 00:30:28 +06:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#endregion
|
2013-02-12 04:13:29 +06:00
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#region Template event handlers
|
2013-03-22 02:08:55 +06:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Removes cache for template
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void FileServiceDeletedTemplate(IFileService sender, Core.Events.DeleteEventArgs<ITemplate> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.DeletedEntities.ForEach(x => DistributedCache.Instance.RemoveTemplateCache(x.Id));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Refresh cache for template
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void FileServiceSavedTemplate(IFileService sender, Core.Events.SaveEventArgs<ITemplate> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.SavedEntities.ForEach(x => DistributedCache.Instance.RefreshTemplateCache(x.Id));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2013-02-07 05:26:53 +06:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Removes cache for template
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void TemplateAfterDelete(Template sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveTemplateCache(sender.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Refresh cache for template
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void TemplateAfterSave(Template sender, SaveEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshTemplateCache(sender.Id);
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2013-02-07 05:26:53 +06:00
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#region Macro event handlers
|
2013-02-07 05:26:53 +06:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Flush macro from cache
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void MacroAfterDelete(Macro sender, DeleteEventArgs e)
|
|
|
|
|
|
{
|
2013-03-12 03:00:42 +04:00
|
|
|
|
DistributedCache.Instance.RemoveMacroCache(sender);
|
2013-02-07 05:26:53 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2013-02-07 04:45:05 +06:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Flush macro from cache
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender"></param>
|
|
|
|
|
|
/// <param name="e"></param>
|
|
|
|
|
|
static void MacroAfterSave(Macro sender, SaveEventArgs e)
|
2013-03-22 01:49:34 +06:00
|
|
|
|
{
|
2013-03-12 03:00:42 +04:00
|
|
|
|
DistributedCache.Instance.RefreshMacroCache(sender);
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2013-02-07 04:45:05 +06:00
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#region Media event handlers
|
2014-01-23 14:55:41 +11:00
|
|
|
|
static void MediaServiceTrashing(IMediaService sender, Core.Events.MoveEventArgs<IMedia> e)
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
2013-03-22 01:49:34 +06:00
|
|
|
|
DistributedCache.Instance.RemoveMediaCache(e.Entity);
|
2013-02-06 09:53:13 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-01-23 14:55:41 +11:00
|
|
|
|
static void MediaServiceMoving(IMediaService sender, Core.Events.MoveEventArgs<IMedia> e)
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
2013-02-12 07:35:47 +06:00
|
|
|
|
DistributedCache.Instance.RefreshMediaCache(e.Entity);
|
2013-02-06 09:53:13 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-01-23 14:55:41 +11:00
|
|
|
|
static void MediaServiceDeleting(IMediaService sender, Core.Events.DeleteEventArgs<IMedia> e)
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
2013-02-12 07:35:47 +06:00
|
|
|
|
DistributedCache.Instance.RemoveMediaCache(e.DeletedEntities.ToArray());
|
2013-02-06 09:53:13 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-01-23 14:55:41 +11:00
|
|
|
|
static void MediaServiceSaved(IMediaService sender, Core.Events.SaveEventArgs<IMedia> e)
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
2013-02-12 07:35:47 +06:00
|
|
|
|
DistributedCache.Instance.RefreshMediaCache(e.SavedEntities.ToArray());
|
2013-03-22 01:49:34 +06:00
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2013-02-06 09:53:13 +06:00
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#region Member event handlers
|
2014-01-23 14:55:41 +11:00
|
|
|
|
|
2014-02-12 17:14:16 +11:00
|
|
|
|
static void MemberServiceDeleted(IMemberService sender, Core.Events.DeleteEventArgs<IMember> e)
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
2014-01-23 14:55:41 +11:00
|
|
|
|
foreach (var m in e.DeletedEntities.ToArray())
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveMemberCache(m.Id);
|
|
|
|
|
|
}
|
2013-02-06 09:53:13 +06:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-02-12 17:14:16 +11:00
|
|
|
|
static void MemberServiceSaved(IMemberService sender, Core.Events.SaveEventArgs<IMember> e)
|
2013-02-06 09:53:13 +06:00
|
|
|
|
{
|
2014-01-23 14:55:41 +11:00
|
|
|
|
foreach (var m in e.SavedEntities.ToArray())
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RefreshMemberCache(m.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2013-03-22 01:49:34 +06:00
|
|
|
|
#endregion
|
2014-02-12 17:14:16 +11:00
|
|
|
|
|
|
|
|
|
|
#region Member group event handlers
|
|
|
|
|
|
|
|
|
|
|
|
static void MemberGroupService_Deleted(IMemberGroupService sender, Core.Events.DeleteEventArgs<IMemberGroup> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var m in e.DeletedEntities.ToArray())
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveMemberGroupCache(m.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void MemberGroupService_Saved(IMemberGroupService sender, Core.Events.SaveEventArgs<IMemberGroup> e)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var m in e.SavedEntities.ToArray())
|
|
|
|
|
|
{
|
|
|
|
|
|
DistributedCache.Instance.RemoveMemberGroupCache(m.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2013-02-06 09:53:13 +06:00
|
|
|
|
}
|
|
|
|
|
|
}
|