Пример #1
0
        public void MoveToTrash(int listId)
        {
            PermissionContext.VerifyPermission(PermissionToken.EditProfile);

            HandleTransaction(ctx =>
            {
                var user = GetLoggedUser(ctx);
                var list = ctx.Load <SongList>(listId);

                ctx.AuditLogger.SysLog($"deleting {list.ToString()}");

                EntryPermissionManager.VerifyEdit(PermissionContext, list);

                var archivedVersions = list.ArchivedVersionsManager.Versions;
                ctx.DeleteAll(archivedVersions);
                list.ArchivedVersionsManager.Versions.Clear();

                var activityEntries = ctx.Query <SongListActivityEntry>().Where(a => a.Entry.Id == listId).ToArray();
                ctx.DeleteAll(activityEntries);

                ctx.Delete(list);

                ctx.AuditLogger.AuditLog($"deleted {list.ToString()}", user);
            });
        }
Пример #2
0
        private SongList CreateSongList(IRepositoryContext <SongList> ctx, SongListForEditContract contract, UploadedFileContract uploadedFile)
        {
            var user    = GetLoggedUser(ctx);
            var newList = new SongList(contract.Name, user);

            newList.Description = contract.Description;

            if (EntryPermissionManager.CanManageFeaturedLists(permissionContext))
            {
                newList.FeaturedCategory = contract.FeaturedCategory;
            }

            ctx.Save(newList);

            var songDiff = newList.SyncSongs(contract.SongLinks, c => ctx.OfType <Song>().Load(c.SongId));

            ctx.OfType <SongInList>().Sync(songDiff);

            SetThumb(newList, uploadedFile);

            ctx.Update(newList);

            ctx.AuditLogger.AuditLog(string.Format("created song list {0}", entryLinkFactory.CreateEntryLink(newList)), user);
            Archive(ctx, newList, new SongListDiff(), EntryEditEvent.Created);

            return(newList);
        }
Пример #3
0
        private SongList CreateSongList(IDatabaseContext <SongList> ctx, SongListForEditContract contract, UploadedFileContract uploadedFile)
        {
            var user    = GetLoggedUser(ctx);
            var newList = new SongList(contract.Name, user);

            newList.Description = contract.Description ?? string.Empty;
            newList.EventDate   = contract.EventDate;

            if (EntryPermissionManager.CanManageFeaturedLists(permissionContext))
            {
                newList.FeaturedCategory = contract.FeaturedCategory;
            }

            ctx.Save(newList);

            var songDiff = newList.SyncSongs(contract.SongLinks, c => ctx.OfType <Song>().Load(c.Song.Id));

            ctx.OfType <SongInList>().Sync(songDiff);

            SetThumb(newList, uploadedFile);

            ctx.Update(newList);

            ctx.AuditLogger.AuditLog(string.Format("created song list {0}", entryLinkFactory.CreateEntryLink(newList)), user);
            var archived = Archive(ctx, newList, new SongListDiff(), EntryEditEvent.Created, contract.UpdateNotes);

            if (newList.FeaturedList)
            {
                AddEntryEditedEntry(ctx.OfType <ActivityEntry>(), newList, EntryEditEvent.Created, archived);
            }

            return(newList);
        }
Пример #4
0
        public SongDetailsContract(Song song, ContentLanguagePreference languagePreference,
                                   SongListBaseContract[] pools, ISpecialTags specialTags, IUserPermissionContext userContext, IEntryThumbPersister thumbPersister)
        {
            Song = new SongContract(song, languagePreference);

            AdditionalNames            = song.Names.GetAdditionalNamesStringForLanguage(languagePreference);
            Albums                     = song.OnAlbums.OrderBy(a => a.OriginalReleaseDate.SortableDateTime).Select(a => new AlbumContract(a, languagePreference)).ToArray();
            AlternateVersions          = song.AlternateVersions.Select(s => new SongContract(s, languagePreference, getThumbUrl: false)).OrderBy(s => s.PublishDate).ToArray();
            Artists                    = song.Artists.Select(a => new ArtistForSongContract(a, languagePreference)).OrderBy(a => a.Name).ToArray();
            ArtistString               = song.ArtistString[languagePreference];
            CanEditPersonalDescription = EntryPermissionManager.CanEditPersonalDescription(userContext, song);
            CanRemoveTagUsages         = EntryPermissionManager.CanRemoveTagUsages(userContext, song);
            CreateDate                 = song.CreateDate;
            Deleted                    = song.Deleted;
            LikeCount                  = song.UserFavorites.Count(f => f.Rating == SongVoteRating.Like);
            LyricsFromParents          = song.GetLyricsFromParents(specialTags).Select(l => new LyricsForSongContract(l, false)).ToArray();
            Notes           = song.Notes;
            OriginalVersion = (song.OriginalVersion != null && !song.OriginalVersion.Deleted ?
                               new SongForApiContract(song.OriginalVersion, null, languagePreference, SongOptionalFields.AdditionalNames | SongOptionalFields.ThumbUrl) : null);

            PVs                     = song.PVs.Select(p => new PVContract(p)).ToArray();
            ReleaseEvent            = song.ReleaseEvent != null && !song.ReleaseEvent.Deleted ? new ReleaseEventForApiContract(song.ReleaseEvent, languagePreference, ReleaseEventOptionalFields.None, thumbPersister, true) : null;
            PersonalDescriptionText = song.PersonalDescriptionText;
            var author = song.PersonalDescriptionAuthor;

            PersonalDescriptionAuthor = author != null ? new ArtistForApiContract(author, languagePreference, thumbPersister, true, ArtistOptionalFields.MainPicture) : null;
            SubjectsFromParents       = song.GetCharactersFromParents().Select(c => new ArtistForSongContract(c, languagePreference)).ToArray();
            Tags           = song.Tags.ActiveUsages.Select(u => new TagUsageForApiContract(u, languagePreference)).OrderByDescending(t => t.Count).ToArray();
            TranslatedName = new TranslatedStringContract(song.TranslatedName);
            WebLinks       = song.WebLinks.Select(w => new WebLinkContract(w)).OrderBy(w => w.DescriptionOrUrl).ToArray();

            Pools = pools;
        }
Пример #5
0
        public AlbumDetailsContract(Album album, ContentLanguagePreference languagePreference, IUserPermissionContext userContext, IAggregatedEntryImageUrlFactory thumbPersister,
                                    Func <Song, SongVoteRating?> getSongRating = null, Tag discTypeTag = null)
            : base(album, languagePreference)
        {
            ArtistLinks = album.Artists.Select(a => new ArtistForAlbumContract(a, languagePreference)).OrderBy(a => a.Name).ToArray();
            CanEditPersonalDescription = EntryPermissionManager.CanEditPersonalDescription(userContext, album);
            CanRemoveTagUsages         = EntryPermissionManager.CanRemoveTagUsages(userContext, album);
            Description     = album.Description;
            Discs           = album.Songs.Any(s => s.DiscNumber > 1) ? album.Discs.Select(d => new AlbumDiscPropertiesContract(d)).ToDictionary(a => a.DiscNumber) : new Dictionary <int, AlbumDiscPropertiesContract>(0);
            DiscTypeTypeTag = discTypeTag != null ? new TagBaseContract(discTypeTag, languagePreference) : null;
            OriginalRelease = (album.OriginalRelease != null ? new AlbumReleaseContract(album.OriginalRelease, languagePreference) : null);
            Pictures        = album.Pictures.Select(p => new EntryPictureFileContract(p, thumbPersister)).ToArray();
            PVs             = album.PVs.Select(p => new PVContract(p)).ToArray();
            Songs           = album.Songs
                              .OrderBy(s => s.DiscNumber).ThenBy(s => s.TrackNumber)
                              .Select(s => new SongInAlbumContract(s, languagePreference, false, rating: getSongRating?.Invoke(s.Song)))
                              .ToArray();
            Tags     = album.Tags.ActiveUsages.Select(u => new TagUsageForApiContract(u, languagePreference)).OrderByDescending(t => t.Count).ToArray();
            WebLinks = album.WebLinks.Select(w => new WebLinkContract(w)).OrderBy(w => w.DescriptionOrUrl).ToArray();

            PersonalDescriptionText = album.PersonalDescriptionText;
            var author = album.PersonalDescriptionAuthor;

            PersonalDescriptionAuthor = author != null ? new ArtistForApiContract(author, languagePreference, thumbPersister, ArtistOptionalFields.MainPicture) : null;

            TotalLength = Songs.All(s => s.Song != null && s.Song.LengthSeconds > 0) ? TimeSpan.FromSeconds(Songs.Sum(s => s.Song.LengthSeconds)) : TimeSpan.Zero;
        }
Пример #6
0
        public void CopyNonEditableProperties(TagForEditContract contract, IUserPermissionContext permissionContext)
        {
            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext).ToArray();
            CanDelete            = contract.CanDelete;
            CurrentName          = contract.Name;
            Deleted = contract.Deleted;
            Id      = contract.Id;
            IsEmpty = contract.IsEmpty;
            Thumb   = contract.Thumb;
            UrlSlug = contract.UrlSlug;

            string GetTagTargetTypeName(TagTargetTypes t)
            {
                switch (t)
                {
                case TagTargetTypes.Nothing:
                    return("Nothing");

                case TagTargetTypes.All:
                    return("Anything");
                }
                return(string.Join(", ", EnumVal <EntryType> .Values.Where(e => e != EntryType.Undefined).Where(e => t.HasFlag((TagTargetTypes)e)).Select(e => Translate.EntryTypeNames[e])));
            }

            AllTagTargetTypes = new[] { TagTargetTypes.Album, TagTargetTypes.Artist, TagTargetTypes.Song, TagTargetTypes.Event }
            .ToDictionary(t => t, GetTagTargetTypeName);
        }
Пример #7
0
        public EventEdit(ReleaseEventSeriesContract seriesContract, IUserPermissionContext userContext)
            : this()
        {
            Series = seriesContract;

            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(userContext).ToArray();
        }
Пример #8
0
        public ActionResult EditSeries(SeriesEdit model, HttpPostedFileBase pictureUpload = null)
        {
            ActionResult RenderEdit()
            {
                model.AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(PermissionContext).ToArray();
                return(View("EditSeries", model));
            }

            // Note: name is allowed to be whitespace, but not empty.
            if (model.Names == null || model.Names.All(n => string.IsNullOrEmpty(n?.Value)))
            {
                ModelState.AddModelError("Names", "Name cannot be empty");
            }

            if (!ModelState.IsValid)
            {
                return(RenderEdit());
            }

            var pictureData = ParsePicture(pictureUpload, "Picture", ImagePurpose.Main);

            int id;

            try {
                id = queries.UpdateSeries(model.ToContract(), pictureData);
            } catch (DuplicateEventNameException x) {
                ModelState.AddModelError("Names", x.Message);
                return(RenderEdit());
            }

            return(RedirectToAction("SeriesDetails", new { id }));
        }
Пример #9
0
        public void UpdateUser(UserWithPermissionsContract contract)
        {
            ParamIs.NotNull(() => contract);

            UpdateEntity <User>(contract.Id, (session, user) => {
                if (!EntryPermissionManager.CanEditUser(PermissionContext, user.GroupId))
                {
                    var loggedUser = GetLoggedUser(session);
                    var msg        = string.Format("{0} (level {1}) not allowed to edit {2}", loggedUser, loggedUser.GroupId, user);
                    log.Error(msg);
                    throw new NotAllowedException(msg);
                }

                if (EntryPermissionManager.CanEditGroupTo(PermissionContext, contract.GroupId))
                {
                    user.GroupId = contract.GroupId;
                }

                if (EntryPermissionManager.CanEditAdditionalPermissions(PermissionContext))
                {
                    user.AdditionalPermissions = new PermissionCollection(contract.AdditionalPermissions.Select(p => PermissionToken.GetById(p.Id)));
                }

                var diff = OwnedArtistForUser.Sync(user.AllOwnedArtists, contract.OwnedArtistEntries, a => user.AddOwnedArtist(session.Load <Artist>(a.Artist.Id)));
                SessionHelper.Sync(session, diff);

                user.Active = contract.Active;

                AuditLog(string.Format("updated {0}", EntryLinkFactory.CreateEntryLink(user)), session);
            }, PermissionToken.ManageUserPermissions, skipLog: true);
        }
Пример #10
0
        public void AddSongToList(int listId, int songId, string notes)
        {
            PermissionContext.VerifyPermission(PermissionToken.EditProfile);

            HandleTransaction(session =>
            {
                var list  = session.Load <SongList>(listId);
                var items = session.Query <SongInList>().Where(s => s.List.Id == listId);
                int order = 1;

                if (items.Any())
                {
                    order = items.Max(s => s.Order) + 1;
                }

                EntryPermissionManager.VerifyEdit(PermissionContext, list);

                var song = session.Load <Song>(songId);

                var link = list.AddSong(song, order, notes);
                session.Save(link);

                SysLog($"added {song} to {list}");
            });
        }
Пример #11
0
        public UserEdit()
        {
            var groups = EnumVal <UserGroupId> .Values.Where(g => EntryPermissionManager.CanEditGroupTo(Login.Manager, g)).ToArray();

            EditableGroups = new TranslateableEnum <UserGroupId>(() => global::Resources.UserGroupNames.ResourceManager, groups);
            OwnedArtists   = new List <ArtistForUserContract>();
            Permissions    = new List <PermissionFlagEntry>();
        }
Пример #12
0
        public AlbumDetails(AlbumDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            AdditionalNames = contract.AdditionalNames;
            ArtistString    = contract.ArtistString;
            CanEdit         = EntryPermissionManager.CanEdit(MvcApplication.LoginManager, contract);
            CommentCount    = contract.CommentCount;
            CreateDate      = contract.CreateDate;
            Description     = contract.Description;
            Deleted         = contract.Deleted;
            DiscType        = contract.DiscType;
            Draft           = contract.Status == EntryStatus.Draft;
            Hits            = contract.Hits;
            Id             = contract.Id;
            LatestComments = contract.LatestComments;
            MergedTo       = contract.MergedTo;
            Name           = contract.Name;
            OwnedBy        = contract.OwnedCount;
            Pictures       = contract.Pictures;
            PVs            = contract.PVs;
            RatingAverage  = contract.RatingAverage;
            RatingCount    = contract.RatingCount;
            Songs          = contract.Songs.GroupBy(s => s.DiscNumber).ToArray();
            Status         = contract.Status;
            Tags           = contract.Tags;
            UserHasAlbum   = contract.AlbumForUser != null;
            Version        = contract.Version;
            WebLinks       = contract.WebLinks;
            WishlistedBy   = contract.WishlistCount;
            mime           = contract.CoverPictureMime;

            if (contract.AlbumForUser != null)
            {
                AlbumMediaType      = contract.AlbumForUser.MediaType;
                AlbumPurchaseStatus = contract.AlbumForUser.PurchaseStatus;
                CollectionRating    = contract.AlbumForUser.Rating;
            }

            if (contract.OriginalRelease != null)
            {
                CatNum          = contract.OriginalRelease.CatNum;
                ReleaseEvent    = contract.OriginalRelease.EventName;
                ReleaseDate     = contract.OriginalRelease.ReleaseDate;
                FullReleaseDate = ReleaseDate.Year.HasValue && ReleaseDate.Month.HasValue && ReleaseDate.Day.HasValue ? (DateTime?)new DateTime(ReleaseDate.Year.Value, ReleaseDate.Month.Value, ReleaseDate.Day.Value) : null;
            }

            var artists = contract.ArtistLinks;

            Bands        = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Band)).ToArray();
            Circles      = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Circle)).ToArray();
            Labels       = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Label)).ToArray();
            Producers    = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Producer)).ToArray();
            Vocalists    = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Vocalist)).ToArray();
            OtherArtists = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Other) || a.Categories.HasFlag(ArtistCategories.Animator)).ToArray();

            PrimaryPV = PVHelper.PrimaryPV(PVs);
        }
Пример #13
0
        public void CopyNonEditableFields(ArtistForEditContract artist)
        {
            ParamIs.NotNull(() => artist);

            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(MvcApplication.LoginManager);
            Deleted          = artist.Deleted;
            Draft            = artist.Status == EntryStatus.Draft;
            ValidationResult = artist.ValidationResult;
        }
Пример #14
0
        private void TestCanEdit(bool expected, EntryStatus entryStatus = EntryStatus.Finished, UserGroupId userGroup = UserGroupId.Regular)
        {
            _artist.Status = entryStatus;
            _user.GroupId  = userGroup;

            var result = EntryPermissionManager.CanEdit(new FakePermissionContext(_user), _artist);

            result.Should().Be(expected, "result");
        }
Пример #15
0
        public void CopyNonEditableProperties(ReleaseEventSeriesForEditContract contract, IUserPermissionContext userContext)
        {
            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(userContext).ToArray();

            if (contract != null)
            {
                Deleted = contract.Deleted;
            }
        }
Пример #16
0
        private void TestCanEdit(bool expected, EntryStatus entryStatus = EntryStatus.Finished, UserGroupId userGroup = UserGroupId.Regular)
        {
            artist.Status = entryStatus;
            user.GroupId  = userGroup;

            var result = EntryPermissionManager.CanEdit(new FakePermissionContext(user), artist);

            Assert.AreEqual(expected, result, "result");
        }
Пример #17
0
        public SongEditViewModel(SongContract song, IUserPermissionContext permissionContext,
                                 SongForEditContract editedSong = null)
            : this()
        {
            ParamIs.NotNull(() => song);

            Song = song;
            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext);
            EditedSong           = editedSong;
        }
Пример #18
0
        public void CopyNonEditableFields(SongForEditContract song)
        {
            ParamIs.NotNull(() => song);

            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(MvcApplication.LoginManager);
            Deleted          = song.Deleted;
            Draft            = song.Song.Status == EntryStatus.Draft;
            Name             = song.Song.Name;
            ValidationResult = song.ValidationResult;
        }
Пример #19
0
        public SongListContract(SongList list, IUserPermissionContext permissionContext)
            : base(list)
        {
            ParamIs.NotNull(() => list);

            Author           = new UserContract(list.Author);
            CanEdit          = EntryPermissionManager.CanEdit(permissionContext, list);
            Description      = list.Description;
            FeaturedCategory = list.FeaturedCategory;
        }
Пример #20
0
        public ArtistEditViewModel(ArtistContract artist, IUserPermissionContext permissionContext,
                                   ArtistForEditContract editedArtist = null)
            : this()
        {
            ParamIs.NotNull(() => artist);

            Artist = artist;
            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext);
            EditedArtist         = editedArtist;
        }
Пример #21
0
        public SongListContract(SongList list, IUserPermissionContext permissionContext)
            : base(list)
        {
            ParamIs.NotNull(() => list);

            Author           = new UserWithEmailContract(list.Author);
            CanEdit          = EntryPermissionManager.CanEdit(permissionContext, list);
            Description      = list.Description;
            FeaturedCategory = list.FeaturedCategory;
            Thumb            = (list.Thumb != null ? new EntryThumbContract(list.Thumb) : null);
        }
Пример #22
0
 public void CopyNonEditableProperties(TagForEditContract contract, IUserPermissionContext permissionContext)
 {
     AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext).ToArray();
     CanDelete            = contract.CanDelete;
     CurrentName          = contract.Name;
     Deleted = contract.Deleted;
     Id      = contract.Id;
     IsEmpty = contract.IsEmpty;
     Thumb   = contract.Thumb;
     UrlSlug = contract.UrlSlug;
 }
Пример #23
0
        public AlbumEditViewModel(AlbumContract album, IUserPermissionContext permissionContext,
                                  AlbumForEditContract editedAlbum = null)
            : this()
        {
            ParamIs.NotNull(() => album);

            Album       = album;
            EditedAlbum = editedAlbum;

            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(permissionContext);
        }
Пример #24
0
        public void Delete(int id, string notes)
        {
            UpdateEntity <Song>(id, (session, song) => {
                EntryPermissionManager.VerifyDelete(PermissionContext, song);

                AuditLog(string.Format("deleting song {0}", EntryLinkFactory.CreateEntryLink(song)), session);

                song.Delete();

                Archive(session, song, new SongDiff(false), SongArchiveReason.Deleted, notes);
            }, PermissionToken.Nothing, skipLog: true);
        }
Пример #25
0
        public SongListContract(SongList list, IUserPermissionContext permissionContext)
            : base(list)
        {
            ParamIs.NotNull(() => list);

            Author      = new UserWithEmailContract(list.Author);
            CanEdit     = EntryPermissionManager.CanEdit(permissionContext, list);
            Description = list.Description;
            EventDate   = list.EventDate;
            Status      = list.Status;
            Thumb       = (list.Thumb != null ? new EntryThumbContract(list.Thumb) : null);
            Version     = list.Version;
        }
Пример #26
0
        public void Delete(int id, string notes)
        {
            UpdateEntity <Album>(id, (session, a) => {
                EntryPermissionManager.VerifyDelete(PermissionContext, a);

                AuditLog(string.Format("deleting album {0}", EntryLinkFactory.CreateEntryLink(a)), session);

                NHibernateUtil.Initialize(a.CoverPictureData);
                a.Delete();

                Archive(session, a, new AlbumDiff(false), AlbumArchiveReason.Deleted, notes);
            }, PermissionToken.Nothing, skipLog: true);
        }
Пример #27
0
        public void Delete(int id, string notes)
        {
            UpdateEntity <Artist>(id, (session, a) => {
                EntryPermissionManager.VerifyDelete(PermissionContext, a);

                AuditLog(string.Format("deleting artist {0}{1}", EntryLinkFactory.CreateEntryLink(a), !string.IsNullOrEmpty(notes) ? " " + notes : string.Empty), session);

                NHibernateUtil.Initialize(a.Picture);
                a.Delete();

                Archive(session, a, new ArtistDiff(false), ArtistArchiveReason.Deleted, notes);
            }, PermissionToken.Nothing, skipLog: true);
        }
Пример #28
0
        public void CopyNonEditableProperties(ReleaseEventDetailsContract contract, IUserPermissionContext userContext)
        {
            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(userContext).ToArray();

            if (contract != null)
            {
                Deleted     = contract.Deleted;
                OldName     = contract.Name;
                PictureMime = contract.PictureMime;
                UrlSlug     = contract.UrlSlug;
                Version     = contract.Version;
            }
        }
Пример #29
0
 public TagForEditContract(Tag tag, bool isEmpty, IUserPermissionContext userContext)
     : base(tag, userContext.LanguagePreference)
 {
     CanDelete           = EntryPermissionManager.CanDelete(userContext, tag);
     DefaultNameLanguage = tag.TranslatedName.DefaultLanguage;
     Description         = new EnglishTranslatedStringContract(tag.Description);
     IsEmpty             = isEmpty;
     Names       = tag.Names.Select(n => new LocalizedStringWithIdContract(n)).ToArray();
     RelatedTags = tag.RelatedTags.Select(t => new TagBaseContract(t.LinkedTag, userContext.LanguagePreference, false)).ToArray();
     Thumb       = (tag.Thumb != null ? new EntryThumbContract(tag.Thumb) : null);
     UpdateNotes = string.Empty;
     WebLinks    = tag.WebLinks.Links.Select(w => new WebLinkContract(w)).OrderBy(w => w.DescriptionOrUrl).ToArray();
 }
Пример #30
0
        public void CopyNonEditableFields(AlbumForEditContract album)
        {
            ParamIs.NotNull(() => album);

            AllowedEntryStatuses = EntryPermissionManager.AllowedEntryStatuses(MvcApplication.LoginManager);
            ArtistLinks          = album.ArtistLinks;
            Deleted          = album.Deleted;
            Draft            = album.Status == EntryStatus.Draft;
            NameEnglish      = album.TranslatedName.English;
            NameJapanese     = album.TranslatedName.Japanese;
            NameRomaji       = album.TranslatedName.Romaji;
            ValidationResult = album.ValidationResult;
        }