This functionality allows you to use the Relation Type functionality in Umbraco to automatically copy new documents to parents that were related previously. This is most useful for language specific versions of your site where it will copy and relate new documents that are created after your original copy. Click here to download the source First define constants for the Relate Documents on Copy relation type alias
// define relation types public class RelationTypes { public const string RelateDocumentOnCopy = “relateDocumentOnCopy”; }Next, create a class to attach to Umbraco eventing for Publish and Copied content events
// events public class Events: ApplicationEventHandler { // construtor public Events() { // content publish ContentService.Published += ContentService_Published; // content copied ContentService.Copied += ContentService_Copied; } // we will define these below void ContentService_Copied(IContentService sender, CopyEventArgsDefine the event to add the relation on when a new document is created and the user selects to relate to originale) { } void ContentService_Published(IPublishingStrategy sender, PublishEventArgs e) { } }
void ContentService_Copied(IContentService sender, CopyEventArgsDefine the vent to copy a newly published document over to it’s parent’s relatione) { // check if relating to original if (e.RelateToOriginal) { // relate on copy var rs = ApplicationContext.Current.Services.RelationService; rs.Relate(e.Original, e.Copy, RelationTypes.RelateDocumentOnCopy); } }
void ContentService_Published(IPublishingStrategy sender, PublishEventArgse) { // get the services var rs = ApplicationContext.Current.Services.RelationService; var cs = ApplicationContext.Current.Services.ContentService; // go through each document published foreach (var c in e.PublishedEntities) { // check if not the first level if (c.Level > 1 && !rs.GetByParentId(c.Id).Any()) { // get the parent foreach (var parentRelation in rs.GetByParentId(c.ParentId).Where(x => x.RelationType.Alias == RelationTypes.RelateDocumentOnCopy)) { // copy the item if not already a relation cs.Copy(c, parentRelation.ChildId, true); } } } }