01 Apr 2016
In Umbraco, you may want to perform certain actions when a content item or member is being saved or created. This post shows you how to do that.
This is relevant for Umbraco projects that use MVC.
using System.Linq;
using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Services; using Umbraco.Core.Models; using Umbraco.Web;
namespace CodeShare.Web.EventHandlers
{
public class ContentEventHandler : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
ContentService.Saving += ContentService_Saving;
}
private void ContentService_Saving(IContentService sender, SaveEventArgs<IContent> e)
{
foreach (IContent contentItem in e.SavedEntities.Where(x => x.ContentType.Alias == "aliasFoo"))
{
if (contentItem.Id <= 0) //new record
{
e.CancelOperation(new EventMessage("Foo permissions", "You cannot create foo items", EventMessageType.Error));
}
else //existing record
{
if (contentItem.IsDirty())
{
e.CancelOperation(new EventMessage("Foo permissions", "You cannot edit foo records", EventMessageType.Error));
}
}
}
}
}
}
When it finds a new record it cancels the save event and returns an error message
e.CancelOperation(new EventMessage("Foo permissions", "You cannot create foo items", EventMessageType.Error));
You could instead just cancel the event like this
e.Cancel = true;
using System.Linq;
using Umbraco.Core;
using Umbraco.Core.Events;
using Umbraco.Core.Services;
using Umbraco.Core.Models;
using Umbraco.Web;
using CodeShare.Library;
namespace CodeShare.Web.Helpers
{
public class ContentEventHandler : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
ContentService.Saved += ContentService_Saved; }
private void ContentService_Saved(IContentService sender, SaveEventArgs<IContent> e) { foreach (IContent contentItem in e.SavedEntities) { if (contentItem.ContentType.Alias == "aliasBar") { EmailService.SendEmailToAdmin(contentItem.Id); } } } } }
using System.Linq; using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Services; using Umbraco.Core.Models; using Umbraco.Web; using CodeShare.Library;
namespace CodeShare.Web.Helpers { public class MemberEventHandler : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
MemberService.Saving += MemberService_Saving;
}
private void MemberService_Saving(IMemberService sender, SaveEventArgs<IMember> e)
{
foreach (IMember member in e.SavedEntities)
{
//Check user is approved and the approve status has only just been changed (isdirty)
if (member.IsApproved && member.HasProperty("umbracoMemberApproved") && member.Properties["umbracoMemberApproved"].IsDirty())
{
EmailService.SendApprovalEmailToMember(member);
}
}
}
}
}
I hope you find this post useful. As always, please feel free to share with your friends and colleagues.