private Task <HttpResponseMessage> HandleListViewStartNodes(HttpRequestMessage request, CancellationToken cancellationToken) { // do at root in the media section or in the picker when it should be limited if (request.RequestUri.Query.Contains("id=-1") && (request.RequestUri.Query.Contains("pageNumber=1") || Settings.LimitPickersToStartNodes)) { IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser; ApplicationContext appContext = ContextHelpers.EnsureApplicationContext(); int[] startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id, appContext, appContext.DatabaseContext).Media; if (user.UserType.Alias == "admin" || startNodes == null) { return(base.SendAsync(request, cancellationToken)); } return(base.SendAsync(request, cancellationToken) .ContinueWith(task => { HttpResponseMessage response = task.Result; if (!response.IsSuccessStatusCode) { return response; } try { HttpContent data = response.Content; ObjectContent dataContent = ((ObjectContent)(data)); int itemCount = startNodes.Length; IMedia[] startIMedia = appContext.Services.MediaService.GetByIds(startNodes).ToArray(); var pagedResult = new PagedResult <ContentItemBasic <ContentPropertyBasic, IMedia> >(itemCount, 1, itemCount); pagedResult.Items = startIMedia .Select(Mapper.Map <IMedia, ContentItemBasic <ContentPropertyBasic, IMedia> >); dataContent.Value = pagedResult; } catch (Exception ex) { LogHelper.Error <WebApiHandler>("Could not replace start nodes.", ex); } return response; } )); } return(base.SendAsync(request, cancellationToken)); }
public bool Undo(string packageName, XmlNode xmlData) { try { ApplicationContext appContext = ContextHelpers.EnsureApplicationContext(); DatabaseSchemaHelper databaseSchemaHelper = new DatabaseSchemaHelper(appContext.DatabaseContext.Database, ContextHelpers.EnsureApplicationContext().ProfilingLogger.Logger, appContext.DatabaseContext.SqlSyntax); databaseSchemaHelper.DropTable <UserStartNodes>(); return(true); } catch (Exception ex) { var message = string.Concat("Error at undo ", this.Alias(), " package action: ", ex); LogHelper.Error(typeof(CreateDatabase), message, ex); } return(false); }
private Task <HttpResponseMessage> HandleRootChildFolders(HttpRequestMessage request, CancellationToken cancellationToken) { if (request.RequestUri.Query.Contains("id=-1")) { IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser; ApplicationContext appContext = ContextHelpers.EnsureApplicationContext(); int[] startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id, appContext, appContext.DatabaseContext).Media; if (user.UserType.Alias == "admin" || startNodes == null) { return(base.SendAsync(request, cancellationToken)); } return(base.SendAsync(request, cancellationToken) .ContinueWith(task => { HttpResponseMessage response = task.Result; if (!response.IsSuccessStatusCode) { return response; } try { HttpContent data = response.Content; ObjectContent dataContent = ((ObjectContent)(data)); IEnumerable <int> folderTypes = appContext.Services.ContentTypeService.GetAllMediaTypes().ToArray().Where(x => x.Alias.EndsWith("Folder")).Select(x => x.Id); IMedia[] children = appContext.Services.MediaService.GetByIds(startNodes).ToArray(); dataContent.Value = children.Where(x => folderTypes.Contains(x.ContentTypeId)).Select(Mapper.Map <IMedia, ContentItemBasic <ContentPropertyBasic, IMedia> >); } catch (Exception ex) { LogHelper.Error <WebApiHandler>("Could not replace start nodes.", ex); } return response; } )); } return(base.SendAsync(request, cancellationToken)); }
public static StartNodeCollection GetCachedStartNodesByUserId(int userId) { ApplicationContext appContext = ContextHelpers.EnsureApplicationContext(); return(GetCachedStartNodesByUserId(userId, appContext, appContext.DatabaseContext)); }
private Task <HttpResponseMessage> RemoveInacessibleNodesFromPathPostMoveAndCopy(HttpRequestMessage request, CancellationToken cancellationToken) { ApplicationContext appContext = ContextHelpers.EnsureApplicationContext(); IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser; int[] startNodes; if (request.RequestUri.AbsolutePath.ToLower().Contains("/content/")) { startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id, appContext, appContext.DatabaseContext).Content; } else if (request.RequestUri.AbsolutePath.ToLower().Contains("/media/")) { startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id, appContext, appContext.DatabaseContext).Media; } else { return(base.SendAsync(request, cancellationToken)); } if (user.UserType.Alias == "admin" || startNodes == null) { return(base.SendAsync(request, cancellationToken)); } //// prevent moving/copying into inaccessible locations // do some hackery to read the post data more than once - http://stackoverflow.com/questions/12007689/cannot-read-body-data-from-web-api-post MediaTypeHeaderValue contentType = request.Content.Headers.ContentType; MoveOrCopy postModel = request.Content.ReadAsAsync <MoveOrCopy>().Result; string contentInString = JsonConvert.SerializeObject(postModel); request.Content = new StringContent(contentInString); request.Content.Headers.ContentType = contentType; IUmbracoEntity parent = appContext.Services.EntityService.Get(postModel.ParentId); if (!PathContainsAStartNode(parent.Path, startNodes)) { // take error notification from https://github.com/umbraco/Umbraco-CMS/blob/a2a4ad39476f4a18c8fe2c04d42f6fa635551b63/src/Umbraco.Web/Editors/MediaController.cs#L656 SimpleNotificationModel notificationModel = new SimpleNotificationModel(); notificationModel.AddErrorNotification(appContext.Services.TextService.Localize("moveOrCopy/notValid", CultureInfo.CurrentCulture), ""); throw new HttpResponseException(request.CreateValidationErrorResponse(notificationModel)); } else { // perform default request return(base.SendAsync(request, cancellationToken) .ContinueWith(task => { HttpResponseMessage response = task.Result; if (!response.IsSuccessStatusCode) { return response; } try { string path = response.Content.ReadAsStringAsync().Result; path = RemoveStartNodeAncestors(path, startNodes); response.Content = new StringContent(path, Encoding.UTF8, "application/json"); } catch (Exception ex) { LogHelper.Error <WebApiHandler>("Could not update path.", ex); } return response; } )); } }