private void ContentService_Saving(IContentService sender, ContentSavingEventArgs e) { contentService = sender; using (var scope = scopeProvider.CreateScope()) { foreach (var node in e.SavedEntities) { var parentNodeId = node.ParentId; // If the document type is a resourceItem if (node.ContentType.Alias == BlogPage.ModelTypeAlias) { string parentModelTypeAlias = String.Empty; string modelTypeAlias = String.Empty; string datePropertyTypeAlias = String.Empty; switch (node.ContentType.Alias) { case BlogPage.ModelTypeAlias: modelTypeAlias = BlogPage.ModelTypeAlias; parentModelTypeAlias = Section.ModelTypeAlias; datePropertyTypeAlias = BlogPage.GetModelPropertyType(r => r.PublishedDate).Alias; break; default: throw new Exception("Error setting Model/Prop alias"); } IContent monthFolder; if (parentNodeId <= 0 && e.CanCancel) { e.CancelOperation(new EventMessage("Error", "Something went wrong with publishing the resource", EventMessageType.Error)); } var currentParent = GetCurrentParent(parentNodeId); var date = node.GetValue <DateTime>(datePropertyTypeAlias); if (date == DateTime.MinValue) { date = DateTime.Today; node.SetValue(datePropertyTypeAlias, date); } var dateYear = date.ToString("yyyy"); var dateMonth = date.ToString("MMMM"); if (currentParent.ContentType.Alias == DateFolder.ModelTypeAlias) { bool moveNode = VerifyOrMoveToCorrectLocation(scope, currentParent, dateYear, dateMonth, out monthFolder); if (moveNode) { node.SetParent(monthFolder); } } else if (currentParent.ContentType.Alias == parentModelTypeAlias) { monthFolder = MoveToCorrectLocation(scope, currentParent, dateYear, dateMonth); node.SetParent(monthFolder); } } } scope.Complete(); } }