private void SetMediaPickerStartNode(HttpRequestMessage request, int nodeId, string contentTypeAlias, IEnumerable <ContentPropertyDisplay> properties) { //Get the media pickers which we want to change the start node from. var mediaPickers = properties.Where(x => Constants.PropertyEditors.MediaPickerAlias.InvariantEquals(x.Editor) || Constants.PropertyEditors.MultipleMediaPickerAlias.InvariantEquals(x.Editor) ).ToList(); if (mediaPickers.Any()) { //Get the override values for this content type. var contentOverrides = ContentOverrideLogic.GetContentOverrides(contentTypeAlias, configAlias: "startNodeId"); foreach (var mediaPicker in mediaPickers) { //Get the content override for this media picker. //First check if there is a content override for this specific node and property. var contentOverride = contentOverrides.Where(x => x.NodeId == nodeId && x.PropertyTypeAlias == mediaPicker.Alias ).FirstOrDefault(); if (contentOverride == null) { //If no content override is found for a specific node check if there is an override for just the property. contentOverride = contentOverrides.Where(x => x.PropertyTypeAlias == mediaPicker.Alias && x.NodeId == null).FirstOrDefault(); } if (contentOverride != null) { //Set the start node id. if (mediaPicker.Config.ContainsKey(contentOverride.ConfigAlias)) { mediaPicker.Config[contentOverride.ConfigAlias] = contentOverride.Value; } else { mediaPicker.Config.Add(contentOverride.ConfigAlias, contentOverride.Value); } } } } }
private void ContentService_Saved(IContentService sender, SaveEventArgs <IContent> e) { foreach (var entity in e.SavedEntities) { try { if (entity.ContentType.Alias == "Gallery") { //Check if a media folder is already linked to the gallery. bool hasContentOverride = ContentOverrideLogic.HasContentOverride( "Gallery", "images", nodeId: entity.Id, configAlias: "startNodeId" ); if (!hasContentOverride) { //Create a media folder for the gallery. var mediaFolder = Services.MediaService.CreateMedia(entity.Name, -1, "Folder"); Services.MediaService.Save(mediaFolder); //Set the media folder as the start node for the Gallery images media picker. ContentOverrideLogic.CreateContentOverride( mediaFolder.Id.ToString(), "Gallery", "images", nodeId: entity.Id, configAlias: "startNodeId" ); } } } catch (Exception ex) { Umbraco.LogException <UmbracoEvents>(ex); } } ClearCache(); }
private Task <HttpResponseMessage> SetArchetypeMediaPickerStartNode(HttpRequestMessage request, CancellationToken cancellationToken) { return(base.SendAsync(request, cancellationToken) .ContinueWith(task => { var response = task.Result; try { //Get the content that we want to modify. var data = response.Content; var value = ((ObjectContent)(data)).Value; //Use reflection to get the values of the anonymous type that the Archetype WebAPI returns. Type type = value.GetType(); var selectedEditor = (string)type.GetProperty("selectedEditor").GetValue(value, null); //Check if the property editor in Archetype is a media picker. if (Constants.PropertyEditors.MediaPickerAlias.InvariantEquals(selectedEditor) || Constants.PropertyEditors.MultipleMediaPickerAlias.InvariantEquals(selectedEditor)) { //Get the start node prevalue. var prevalues = (IEnumerable <PreValueFieldDisplay>)type.GetProperty("preValues").GetValue(value, null); var prevalue = prevalues.Where(x => x.Key == "startNodeId").FirstOrDefault(); if (prevalue != null) { //Get the properties we need to find the correct content override. var contentTypeAlias = (string)type.GetProperty("contentTypeAlias").GetValue(value, null); var propertyTypeAlias = (string)type.GetProperty("propertyTypeAlias").GetValue(value, null); var archetypeAlias = (string)type.GetProperty("archetypeAlias").GetValue(value, null); var nodeId = (int)type.GetProperty("nodeId").GetValue(value, null); //Get the override values for this content type. var contentOverrides = ContentOverrideLogic.GetContentOverrides(contentTypeAlias, configAlias: "startNodeId"); //Get the content override for this media picker. //First check if there is a content override for this specific node, property and archetype. var contentOverride = contentOverrides.Where(x => x.NodeId == nodeId && HasArchetypePropertyTypeAlias(x.PropertyTypeAlias, propertyTypeAlias) && x.ArchetypeAlias == archetypeAlias ).FirstOrDefault(); if (contentOverride == null) { //If no content override is found for a specific node check if there is an override for just the property and archetype. contentOverride = contentOverrides.Where(x => HasArchetypePropertyTypeAlias(x.PropertyTypeAlias, propertyTypeAlias) && x.ArchetypeAlias == archetypeAlias && x.NodeId == null ).FirstOrDefault(); } if (contentOverride != null) { //Set the start node. prevalue.Value = contentOverride.Value; } } } } catch (Exception ex) { LogHelper.Error <WebApiHandler>("Could not change the media picker start node.", ex); } return response; } )); }