/// <summary>
        /// Executes this command.
        /// </summary>
        /// <param name="request">A filter to search for specific media items/folders.</param>
        /// <returns>A list of tags.</returns>
        public MediaManagerItemsViewModel Execute(MediaManagerViewModel request)
        {
            request.SetDefaultSortingOptions("Title");

            var items = GetAllItemsList(request);
            var model = new MediaManagerItemsViewModel(items.Item1, request, items.Item2);

            model.Path = LoadMediaFolder(request);

            return(model);
        }
Пример #2
0
        private Tuple <IEnumerable <MediaViewModel>, int> ToResponse(MediaManagerViewModel request, IQueryable <Media> query, bool forceToFuture = false)
        {
            var count = query.ToRowCountFutureValue();

            query = AddOrder(query, request).AddPaging(request);

            var items = forceToFuture
                            ? NHibernate.Linq.LinqExtensionMethods.ToFuture(query).ToList().Select(SelectItem).ToList()
                            : query.Select(SelectItem).ToList();
            var totalCount = count.Value;

            return(new Tuple <IEnumerable <MediaViewModel>, int>(items, totalCount));
        }
Пример #3
0
        /// <summary>
        /// Executes this command.
        /// </summary>
        /// <param name="request">A filter to search for specific media items/folders.</param>
        /// <returns>A list of tags.</returns>
        public MediaManagerItemsViewModel Execute(MediaManagerViewModel request)
        {
            request.SetDefaultSortingOptions("Title");

            var items = GetAllItemsList(request);
            var model = new MediaManagerItemsViewModel(items.Item1, request, items.Item2);

            model.Path                 = LoadMediaFolder(request);
            model.Tags                 = request.Tags;
            model.Categories           = request.Categories;
            model.CategoriesLookupList = CategoryService.GetCategoriesLookupList(MediaFile.CategorizableItemKeyForFiles);
            return(model);
        }
Пример #4
0
        private bool HasTaggedSubItems(MediaFolder folder, MediaManagerViewModel request)
        {
            if (folder == null)
            {
                return(false);
            }

            var query = Repository
                        .AsQueryable <Media>()
                        .Where(m => !m.IsDeleted &&
                               m.Original == null &&
                               m.Type == MediaType &&
                               m.Folder != null && m.Folder.Id == folder.Id &&
                               (m is MediaFolder || m is TEntity && !((TEntity)m).IsTemporary));

            if (!request.IncludeArchivedItems)
            {
                query = query.Where(m => !m.IsArchived);
            }

            if (request.Tags != null)
            {
                foreach (var tagKeyValue in request.Tags)
                {
                    var id = tagKeyValue.Key.ToGuidOrDefault();
                    query = query.Where(m => m is MediaFolder || m.MediaTags.Any(mt => mt.Tag.Id == id));
                }
            }

            var medias = query.ToList();

            if (medias.Any(m => m is TEntity))
            {
                return(true);
            }


            foreach (var media in medias)
            {
                if (HasTaggedSubItems(media as MediaFolder, request))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #5
0
        /// <summary>
        /// Loads the media folder.
        /// </summary>
        /// <returns>Media folder view model</returns>
        private MediaPathViewModel LoadMediaFolder(MediaManagerViewModel request)
        {
            var emptyFolderViewModel = new MediaFolderViewModel {
                Id = Guid.Empty, Type = MediaType
            };
            var model = new MediaPathViewModel
            {
                CurrentFolder = emptyFolderViewModel
            };
            var folders = new List <MediaFolderViewModel> {
                emptyFolderViewModel
            };

            if (!request.CurrentFolderId.HasDefaultValue())
            {
                var mediaFolder = Repository.FirstOrDefault <MediaFolder>(e => e.Id == request.CurrentFolderId && e.Original == null);
                model.CurrentFolder = mediaFolder != null
                    ? new MediaFolderViewModel
                {
                    Id             = mediaFolder.Id,
                    Name           = mediaFolder.Title,
                    Version        = mediaFolder.Version,
                    Type           = mediaFolder.Type,
                    ParentFolderId = mediaFolder.Folder != null ? mediaFolder.Folder.Id : Guid.Empty
                }
                    : new MediaFolderViewModel();
                while (mediaFolder != null)
                {
                    folders.Insert(
                        1,
                        new MediaFolderViewModel
                    {
                        Id             = mediaFolder.Id,
                        Name           = mediaFolder.Title,
                        Type           = mediaFolder.Type,
                        ParentFolderId = mediaFolder.Folder != null ? mediaFolder.Folder.Id : Guid.Empty
                    });
                    mediaFolder = mediaFolder.Folder;
                }
            }

            model.Folders = folders;
            return(model);
        }
Пример #6
0
        public ActionResult GetFilesList(MediaManagerViewModel options)
        {
            var success = true;

            if (options == null)
            {
                options = new MediaManagerViewModel();
            }
            options.SetDefaultPaging();

            var model = GetCommand <GetFilesCommand>().ExecuteCommand(options);

            if (model == null)
            {
                success = false;
            }

            return(WireJson(success, model));
        }
Пример #7
0
        /// <summary>
        /// Loads the media folder.
        /// </summary>
        /// <returns>Media folder view model</returns>
        private MediaPathViewModel LoadMediaFolder(MediaManagerViewModel request)
        {
            var emptyFolderViewModel = new MediaFolderViewModel {
                Id = Guid.Empty, Type = MediaType
            };
            var model = new MediaPathViewModel
            {
                CurrentFolder = emptyFolderViewModel
            };
            var folders = new List <MediaFolderViewModel> {
                emptyFolderViewModel
            };

            if (!request.CurrentFolderId.HasDefaultValue())
            {
                MediaFolder          folderAlias      = null;
                MediaFolderViewModel folderModelAlias = null;

                var folder = UnitOfWork.Session
                             .QueryOver(() => folderAlias)
                             .Where(() => !folderAlias.IsDeleted && folderAlias.Id == request.CurrentFolderId)
                             .SelectList(select => select
                                         .Select(() => folderAlias.Id).WithAlias(() => folderModelAlias.Id)
                                         .Select(() => folderAlias.Title).WithAlias(() => folderModelAlias.Name)
                                         .Select(() => folderAlias.Version).WithAlias(() => folderModelAlias.Version)
                                         .Select(() => folderAlias.Type).WithAlias(() => folderModelAlias.Type))
                             .TransformUsing(Transformers.AliasToBean <MediaFolderViewModel>())
                             .First <MediaFolderViewModel, MediaFolder>();

                model.CurrentFolder = folder ?? new MediaFolderViewModel();

                if (folder != null)
                {
                    folders.Add(new MediaFolderViewModel {
                        Id = folder.Id, Name = folder.Name, Type = folder.Type
                    });
                }
            }

            model.Folders = folders;
            return(model);
        }
Пример #8
0
        public ActionResult GetFilesList(MediaManagerViewModel options)
        {
            var success = true;

            if (options == null)
            {
                options = new MediaManagerViewModel();
            }

            var model = GetCommand <GetFilesCommand>().ExecuteCommand(options);

            if (model == null)
            {
                success = false;
            }

            return(Json(new WireJson {
                Success = success, Data = model
            }));
        }
Пример #9
0
        /// <summary>
        /// Gets the folders.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// The list with folder view models
        /// </returns>
        private IList <MediaFolderViewModel> GetFolders(MediaManagerViewModel request)
        {
            MediaFolder          folderAlias      = null;
            MediaFolderViewModel folderModelAlias = null;

            var query = UnitOfWork.Session
                        .QueryOver(() => folderAlias)
                        .Where(() => !folderAlias.IsDeleted && folderAlias.Type == MediaType);

            if (!string.IsNullOrWhiteSpace(request.SearchQuery))
            {
                var searchQuery = string.Format("%{0}%", request.SearchQuery);
                query = query.Where(Restrictions.InsensitiveLike(Projections.Property(() => folderAlias.Title), searchQuery));
            }
            if (!request.CurrentFolderId.HasDefaultValue())
            {
                query = query.Where(() => folderAlias.Folder.Id == request.CurrentFolderId);
            }
            else
            {
                query = query.Where(() => folderAlias.Folder == null);
            }

            query = query.SelectList(select => select
                                     .Select(() => folderAlias.Id).WithAlias(() => folderModelAlias.Id)
                                     .Select(() => folderAlias.Title).WithAlias(() => folderModelAlias.Name)
                                     .Select(() => folderAlias.Version).WithAlias(() => folderModelAlias.Version)
                                     .Select(() => folderAlias.Type).WithAlias(() => folderModelAlias.Type))
                    .TransformUsing(Transformers.AliasToBean <MediaFolderViewModel>());

            var options = new SearchableGridOptions()
            {
                Direction = request.Direction, Column = "Title"
            };

            query.AddSortingAndPaging(options);

            var folders = query.List <MediaFolderViewModel>();

            return(folders);
        }
Пример #10
0
        /// <summary>
        /// Gets the media items list.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Media items list</returns>
        private IList <TModel> GetItemsList(MediaManagerViewModel request)
        {
            var query = UnitOfWork.Session
                        .QueryOver(() => alias)
                        .Where(() => !alias.IsDeleted && alias.Type == MediaType && !alias.IsTemporary);

            if (!string.IsNullOrWhiteSpace(request.SearchQuery))
            {
                var searchQuery = string.Format("%{0}%", request.SearchQuery);
                query = query.Where(Restrictions.InsensitiveLike(Projections.Property(() => alias.Title), searchQuery));
            }
            if (!request.CurrentFolderId.HasDefaultValue())
            {
                query = query.Where(() => alias.Folder.Id == request.CurrentFolderId);
            }
            else
            {
                query = query.Where(() => alias.Folder == null);
            }

            query = query
                    .SelectList(SelectItems)
                    .TransformUsing(Transformers.AliasToBean <TModel>());

            query.AddSortingAndPaging(request);

            var items = query.List <TModel>();

            // Set processed items as failed, if file processing lasts more than specified timeout
            var timeout = Configuration.Storage.ProcessTimeout;
            var now     = DateTime.Now;

            items
            .Where(m => m.IsProcessing && m.CreatedOn.Add(timeout) < now)
            .ToList()
            .ForEach(item => { item.IsProcessing = false; item.IsFailed = true; });

            return(items);
        }
Пример #11
0
        /// <summary>
        /// Executes this command.
        /// </summary>
        /// <param name="request">A filter to search for specific media items/folders.</param>
        /// <returns>A list of tags.</returns>
        public MediaManagerItemsViewModel Execute(MediaManagerViewModel request)
        {
            request.SetDefaultSortingOptions("Title");

            IEnumerable <MediaViewModel> results;
            var folders = GetFolders(request);
            var items   = GetItemsList(request);

            if (request.Direction == SortDirection.Descending)
            {
                results = items.Cast <MediaViewModel>().Concat(folders);
            }
            else
            {
                results = folders.Cast <MediaViewModel>().Concat(items);
            }

            var model = new MediaManagerItemsViewModel(results, request, results.Count());

            model.Path = LoadMediaFolder(request);

            return(model);
        }
Пример #12
0
        private Tuple <IEnumerable <MediaViewModel>, int> RemoveEmptyFolders(IQueryable <Media> query, MediaManagerViewModel request)
        {
            var mediaList = query.ToList();

            var result = new List <Media>();

            foreach (var media in mediaList)
            {
                var folder = media as MediaFolder;
                if (folder == null)
                {
                    result.Add(media);
                }
                else
                {
                    if (HasTaggedSubItems(folder, request))
                    {
                        result.Add(media);
                    }
                }
            }

            return(ToResponse(request, result.AsQueryable()));
        }
Пример #13
0
        private IQueryable <Media> AttachDeniedMediasFilterIfEnabled(IQueryable <Media> query, MediaManagerViewModel request)
        {
            if (Configuration.Security.AccessControlEnabled)
            {
                IEnumerable <Guid> deniedMedias = GetDeniedMedias(request);
                if (deniedMedias != null)
                {
                    foreach (var deniedFileId in deniedMedias)
                    {
                        var id = deniedFileId;
                        query = query.Where(f => f.Id != id);
                    }
                }
            }

            return(query);
        }
Пример #14
0
        /// <summary>
        /// Gets all items list.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Media items list</returns>
        private Tuple <IEnumerable <MediaViewModel>, int> GetAllItemsList(MediaManagerViewModel request)
        {
            var query = Repository
                        .AsQueryable <Media>()
                        .Where(m => !m.IsDeleted &&
                               m.Original == null &&
                               m.Type == MediaType &&
                               (m is MediaFolder || m is TEntity && !((TEntity)m).IsTemporary));

            if (!request.IncludeArchivedItems)
            {
                query = query.Where(m => !m.IsArchived);
            }

            var removeEmptyFolders = false;

            if (request.Tags != null)
            {
                foreach (var tagKeyValue in request.Tags)
                {
                    var id = tagKeyValue.Key.ToGuidOrDefault();
                    query = query.Where(m => m is MediaFolder || m.MediaTags.Any(mt => mt.Tag.Id == id));
                    removeEmptyFolders = true;
                }
            }

            query = AttachDeniedMediasFilterIfEnabled(query, request);

            if (!string.IsNullOrWhiteSpace(request.SearchQuery))
            {
                var searchQuery = string.Format("%{0}%", request.SearchQuery);
                query = query.Where(m => m.Title.Contains(searchQuery) || m.Description.Contains(searchQuery) || m.MediaTags.Any(mt => mt.Tag.Name.Contains(searchQuery)));
                query = query.Fetch(f => f.Folder);

                var mediaList = query.ToList();

                var result = new List <Media>();
                foreach (var media in mediaList)
                {
                    if (IsChild(media, request.CurrentFolderId, request.IncludeArchivedItems))
                    {
                        result.Add(media);
                    }
                }

                return(ToResponse(request, result.AsQueryable()));
            }

            if (!request.CurrentFolderId.HasDefaultValue())
            {
                query = query.Where(m => m.Folder.Id == request.CurrentFolderId);
            }
            else
            {
                query = query.Where(m => m.Folder == null);
            }


            return(removeEmptyFolders
                ? RemoveEmptyFolders(query, request)
                : ToResponse(request, query, true));
        }
Пример #15
0
 /// <summary>
 /// Gets the denied medias for the current principal.
 /// </summary>
 /// <param name="request">The request.</param>
 /// <returns></returns>
 protected virtual IEnumerable <Guid> GetDeniedMedias(MediaManagerViewModel request)
 {
     return(null);
 }
Пример #16
0
        /// <summary>
        /// Gets all items list.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Media items list</returns>
        private Tuple <IEnumerable <MediaViewModel>, int> GetAllItemsList(MediaManagerViewModel request)
        {
            var query = Repository
                        .AsQueryable <Media>()
                        .Where(m => !m.IsDeleted &&
                               m.Original == null &&
                               m.Type == MediaType &&
                               (m is MediaFolder || m is TEntity && !((TEntity)m).IsTemporary));

            if (!request.IncludeArchivedItems)
            {
                query = query.Where(m => !m.IsArchived);
            }

            var removeEmptyFolders = false;

            if (request.Tags != null)
            {
                foreach (var tagKeyValue in request.Tags)
                {
                    var id = tagKeyValue.Key.ToGuidOrDefault();
                    query = query.Where(m => m is MediaFolder || m.MediaTags.Any(mt => mt.Tag.Id == id));
                    removeEmptyFolders = true;
                }
            }

            if (request.Categories != null)
            {
                var categories = request.Categories.Select(c => new Guid(c.Key)).Distinct().ToList();

                foreach (var category in categories)
                {
                    var childCategories = CategoryService.GetChildCategoriesIds(category).ToArray();
                    query = query.Where(m => m is MediaFolder || m.Categories.Any(cat => childCategories.Contains(cat.Category.Id) && !cat.IsDeleted && !cat.Category.IsDeleted));
                    removeEmptyFolders = true;
                }
            }

            query = AttachDeniedMediasFilterIfEnabled(query, request);

            if (!string.IsNullOrWhiteSpace(request.SearchQuery))
            {
                var          searchQuery  = request.SearchQuery;
                const string escapeFormat = "[{0}]";
                foreach (var escapeChar in escapeChars)
                {
                    searchQuery = searchQuery.Replace(escapeChar, string.Format(escapeFormat, escapeChar));
                }

                var predicate = PredicateBuilder.False <Media>();
                predicate = predicate.Or(m => m.Title.Contains(searchQuery));
                predicate = predicate.Or(m => m.Description.Contains(searchQuery));
                predicate = predicate.Or(m => m.MediaTags.Any(mt => mt.Tag.Name.Contains(searchQuery)));
                predicate = predicate.Or(m => m.Categories.Any(mt => mt.Category.Name.Contains(searchQuery)));
                predicate = AppendSearchFilter(predicate, searchQuery);

                if (request.SearchInHistory)
                {
                    query = query.Where(m => m.History.AsQueryable().Any(predicate));
                }
                else
                {
                    query = query.Where(predicate);
                }

                query = query.Fetch(f => f.Folder);

                var mediaList = query.ToList();

                var result = new List <Media>();
                foreach (var media in mediaList)
                {
                    if (IsChild(media, request.CurrentFolderId, request.IncludeArchivedItems))
                    {
                        result.Add(media);
                    }
                }

                return(ToResponse(request, result.AsQueryable()));
            }

            if (!request.CurrentFolderId.HasDefaultValue())
            {
                query = query.Where(m => m.Folder.Id == request.CurrentFolderId);
            }
            else
            {
                query = query.Where(m => m.Folder == null);
            }


            return(removeEmptyFolders
                ? RemoveEmptyFolders(query, request)
                : ToResponse(request, query, true));
        }