示例#1
0
        public ActionResult Find(ReleaseEventFindResultContract model, string query, string EventTarget)
        {
            bool skipSeries = false;

            if (EventTarget != "Series")
            {
                skipSeries = true;

                if (string.IsNullOrEmpty(model.EventName))
                {
                    ModelState.AddModelError("EventName", "Name must be specified");
                }
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var contract = new ReleaseEventDetailsContract {
                Name         = model.EventName,
                Series       = (skipSeries ? null : model.Series),
                SeriesNumber = model.SeriesNumber,
                SeriesSuffix = string.Empty                     // TODO: add support for entering this
            };

            var ev = queries.Update(contract);

            return(RedirectToAction("Edit", new { id = ev.Id }));
        }
示例#2
0
        public ActionResult Find(ReleaseEventFindResultContract model, string query, string EventTarget)
        {
            bool skipSeries = false;

            if (EventTarget != "Series")
            {
                skipSeries = true;

                if (string.IsNullOrEmpty(model.EventName))
                {
                    ModelState.AddModelError("EventName", "Name must be specified");
                }
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var contract = new ReleaseEventDetailsContract {
                Name = model.EventName, Series = (skipSeries ? null : model.Series), SeriesNumber = model.SeriesNumber
            };

            var ev = Service.UpdateEvent(contract);

            if (query != ev.Name)
            {
                Services.Albums.UpdateAllReleaseEventNames(query, ev.Name);
            }

            return(RedirectToAction("Edit", new { id = ev.Id }));
        }
示例#3
0
        public void Update_ChangeName_Duplicate()
        {
            var contract = new ReleaseEventDetailsContract(existingEvent, ContentLanguagePreference.Default);

            contract.Id = 0;             // Simulate new event

            queries.Update(contract, null);
        }
示例#4
0
        public void CopyNonEditableProperties(ReleaseEventDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            AllSeries = contract.AllSeries;

            CopyNonEditableProperties(contract.Series);
        }
示例#5
0
        public void CopyNonEditableProperties(ReleaseEventDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            OldName     = contract.Name;
            PictureMime = contract.PictureMime;
            UrlSlug     = contract.UrlSlug;
            Version     = contract.Version;
        }
示例#6
0
        public EventEdit(ReleaseEventDetailsContract contract)
            : this()
        {
            ParamIs.NotNull(() => contract);

            Date         = contract.Date;
            Description  = contract.Description;
            Id           = contract.Id;
            Name         = contract.Name;
            SeriesNumber = contract.SeriesNumber;

            CopyNonEditableProperties(contract);
        }
示例#7
0
        public void Create_NoSeries()
        {
            var contract = new ReleaseEventDetailsContract {
                Description = string.Empty,
                Name        = "Vocaloid Paradise",
            };

            var result = CallUpdate(contract);

            Assert.IsTrue(repository.Contains(result), "Event was saved to repository");
            Assert.AreEqual("Vocaloid Paradise", result.Name, "Name");
            Assert.IsNull(result.Series, "Series");
        }
示例#8
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;
            }
        }
示例#9
0
        public void Update_ChangeSeriesSuffix()
        {
            var contract = new ReleaseEventDetailsContract(existingEvent, ContentLanguagePreference.Default);

            contract.SeriesSuffix = "Fall";

            var result = CallUpdate(contract);

            Assert.AreEqual(2013, contract.SeriesNumber, "SeriesNumber");
            Assert.AreEqual("Fall", contract.SeriesSuffix, "SeriesSuffix");
            Assert.AreEqual("M3 2013 Fall", result.Name, "Name");
            Assert.AreEqual("M3 2013 Fall", album.OriginalReleaseEventName, "OriginalReleaseEventName for album");
        }
示例#10
0
        public void Update_ChangeName_UseSeriesName()
        {
            var contract = new ReleaseEventDetailsContract(existingEvent, ContentLanguagePreference.Default);

            contract.Name = "New name";

            var result = CallUpdate(contract);

            Assert.AreEqual("M3 2013 Spring", result.Name, "Name was not updated");

            var archivedVersions = repository.List <ArchivedReleaseEventVersion>();

            Assert.AreEqual(1, archivedVersions.Count, "Archived version was created");
            Assert.AreEqual(ReleaseEventEditableFields.Nothing, archivedVersions[0].Diff.ChangedFields.Value, "Changed fields in diff");
        }
示例#11
0
        public EventEdit(ReleaseEventDetailsContract contract)
            : this()
        {
            ParamIs.NotNull(() => contract);

            CustomName   = contract.CustomName = contract.CustomName;
            Date         = contract.Date;
            Description  = contract.Description;
            Id           = contract.Id;
            Name         = OldName = contract.Name;
            Series       = contract.Series;
            SeriesNumber = contract.SeriesNumber;
            SeriesSuffix = contract.SeriesSuffix;
            WebLinks     = contract.WebLinks;
        }
示例#12
0
        public void Create_WithSeriesNoSuffix()
        {
            var contract = new ReleaseEventDetailsContract {
                Description  = string.Empty,
                Series       = new ReleaseEventSeriesContract(series),
                SeriesNumber = 2014,
                SeriesSuffix = string.Empty,
            };

            var result = CallUpdate(contract);

            Assert.IsTrue(repository.Contains(result), "Event was saved to repository");
            Assert.AreEqual("M3 2014", result.Name, "Name");
            Assert.AreEqual(2014, result.SeriesNumber, "SeriesNumber");
            Assert.AreEqual(string.Empty, result.SeriesSuffix, "SeriesSuffix");
            Assert.AreSame(series, result.Series, "Series");
        }
示例#13
0
        public void Update_ChangeSeriesSuffix()
        {
            var contract = new ReleaseEventDetailsContract(existingEvent, ContentLanguagePreference.Default);

            contract.SeriesSuffix = "Fall";

            var result = CallUpdate(contract);

            Assert.AreEqual(2013, contract.SeriesNumber, "SeriesNumber");
            Assert.AreEqual("Fall", contract.SeriesSuffix, "SeriesSuffix");
            Assert.AreEqual("M3 2013 Fall", result.Name, "Name");
            Assert.AreEqual("M3 2013 Fall", album.OriginalReleaseEvent?.Name, "OriginalReleaseEventName for album");

            var archivedVersions = repository.List <ArchivedReleaseEventVersion>();

            Assert.AreEqual(1, archivedVersions.Count, "Archived version was created");
            Assert.AreEqual(ReleaseEventEditableFields.SeriesSuffix, archivedVersions[0].Diff.ChangedFields.Value, "Changed fields in diff");
        }
示例#14
0
        public EventEdit(ReleaseEventDetailsContract contract)
            : this()
        {
            ParamIs.NotNull(() => contract);

            CustomName   = contract.CustomName = contract.CustomName;
            Date         = contract.Date;
            Description  = contract.Description;
            Id           = contract.Id;
            Name         = OldName = contract.Name;
            Series       = contract.Series;
            SeriesNumber = contract.SeriesNumber;
            SeriesSuffix = contract.SeriesSuffix;
            SongList     = contract.SongList;
            Venue        = contract.Venue;
            WebLinks     = contract.WebLinks;

            CopyNonEditableProperties(contract);
        }
示例#15
0
        public void CopyNonEditableProperties(ReleaseEventDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            OldName = contract.Name;
        }
示例#16
0
        private ReleaseEvent CallUpdate(ReleaseEventDetailsContract contract)
        {
            var result = queries.Update(contract, null);

            return(repository.Load(result.Id));
        }
示例#17
0
        public ReleaseEventContract UpdateEvent(ReleaseEventDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            PermissionContext.VerifyPermission(PermissionToken.ManageDatabase);

            return(HandleTransaction(session => {
                ReleaseEvent ev;

                if (contract.Id == 0)
                {
                    if (contract.Series != null)
                    {
                        var series = session.Load <ReleaseEventSeries>(contract.Series.Id);
                        ev = new ReleaseEvent(contract.Description, contract.Date, series, contract.SeriesNumber);
                        series.Events.Add(ev);
                    }
                    else
                    {
                        ev = new ReleaseEvent(contract.Description, contract.Date, contract.Name);
                    }

                    session.Save(ev);

                    Archive(session, ev, new ReleaseEventDiff(), EntryEditEvent.Created);

                    AuditLog("created " + ev, session);
                }
                else
                {
                    ev = session.Load <ReleaseEvent>(contract.Id);
                    var diff = new ReleaseEventDiff();

                    if (ev.Date != contract.Date)
                    {
                        diff.Date = true;
                    }

                    if (ev.Description != contract.Description)
                    {
                        diff.Description = true;
                    }

                    if (ev.Name != contract.Name)
                    {
                        diff.Name = true;
                    }

                    if (ev.SeriesNumber != contract.SeriesNumber)
                    {
                        diff.SeriesNumber = true;
                    }

                    ev.Date = contract.Date;
                    ev.Description = contract.Description;
                    ev.Name = contract.Name;
                    ev.SeriesNumber = contract.SeriesNumber;

                    session.Update(ev);

                    Archive(session, ev, diff, EntryEditEvent.Updated);

                    var logStr = string.Format("updated properties for {0} ({1})", CreateEntryLink(ev), diff.ChangedFieldsString);
                    AuditLog(logStr, session);
                }

                return new ReleaseEventContract(ev);
            }));
        }
示例#18
0
        /// <summary>
        /// Updates or creates release event.
        ///
        /// Album release event names will be updated as well if the name changed.
        /// </summary>
        /// <param name="contract">Updated contract. Cannot be null.</param>
        /// <returns>Updated release event data. Cannot be null.</returns>
        public ReleaseEventContract Update(ReleaseEventDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            PermissionContext.VerifyManageDatabase();

            return(repository.HandleTransaction(session => {
                ReleaseEvent ev;

                if (contract.Id == 0)
                {
                    if (contract.Series != null)
                    {
                        var series = session.OfType <ReleaseEventSeries>().Load(contract.Series.Id);
                        ev = new ReleaseEvent(contract.Description, contract.Date, series, contract.SeriesNumber, contract.SeriesSuffix);
                        series.Events.Add(ev);
                    }
                    else
                    {
                        ev = new ReleaseEvent(contract.Description, contract.Date, contract.Name);
                    }

                    session.Save(ev);

                    Archive(session, ev, new ReleaseEventDiff(), EntryEditEvent.Created);

                    session.AuditLogger.AuditLog("created " + ev);
                }
                else
                {
                    ev = session.Load(contract.Id);
                    var diff = new ReleaseEventDiff();

                    if (ev.Date != contract.Date)
                    {
                        diff.Date = true;
                    }

                    if (ev.Description != contract.Description)
                    {
                        diff.Description = true;
                    }

                    if (ev.Name != contract.Name)
                    {
                        diff.Name = true;
                    }

                    if (ev.SeriesNumber != contract.SeriesNumber)
                    {
                        diff.SeriesNumber = true;
                    }

                    if (ev.SeriesSuffix != contract.SeriesSuffix)
                    {
                        diff.SeriesSuffix = true;
                    }

                    var oldName = ev.Name;

                    ev.Date = contract.Date;
                    ev.Description = contract.Description;
                    ev.Name = contract.Name;
                    ev.SeriesNumber = contract.SeriesNumber;
                    ev.SeriesSuffix = contract.SeriesSuffix;
                    ev.UpdateNameFromSeries();

                    UpdateAllReleaseEventNames(session, oldName, ev.Name);

                    session.Update(ev);

                    Archive(session, ev, diff, EntryEditEvent.Updated);

                    var logStr = string.Format("updated properties for {0} ({1})", entryLinkFactory.CreateEntryLink(ev), diff.ChangedFieldsString);
                    session.AuditLogger.AuditLog(logStr);
                }

                return new ReleaseEventContract(ev);
            }));
        }
示例#19
0
        /// <summary>
        /// Updates or creates release event.
        ///
        /// Album release event names will be updated as well if the name changed.
        /// </summary>
        /// <param name="contract">Updated contract. Cannot be null.</param>
        /// <returns>Updated release event data. Cannot be null.</returns>
        public ReleaseEventContract Update(ReleaseEventDetailsContract contract)
        {
            ParamIs.NotNull(() => contract);

            PermissionContext.VerifyManageDatabase();

            return(repository.HandleTransaction(session => {
                ReleaseEvent ev;

                if (contract.Id == 0)
                {
                    var diff = new ReleaseEventDiff();

                    if (!contract.Series.IsNullOrDefault())
                    {
                        var series = session.OfType <ReleaseEventSeries>().Load(contract.Series.Id);
                        ev = new ReleaseEvent(contract.Description, contract.Date, series, contract.SeriesNumber, contract.SeriesSuffix,
                                              contract.Name, contract.CustomName);
                        series.Events.Add(ev);
                    }
                    else
                    {
                        ev = new ReleaseEvent(contract.Description, contract.Date, contract.Name);
                    }

                    var weblinksDiff = WebLink.Sync(ev.WebLinks, contract.WebLinks, ev);

                    if (weblinksDiff.Changed)
                    {
                        diff.WebLinks.Set();
                    }

                    CheckDuplicateName(session, ev);

                    session.Save(ev);

                    var archived = Archive(session, ev, diff, EntryEditEvent.Created, string.Empty);
                    AddEntryEditedEntry(session.OfType <ActivityEntry>(), archived);

                    session.AuditLogger.AuditLog(string.Format("created {0}", entryLinkFactory.CreateEntryLink(ev)));
                }
                else
                {
                    ev = session.Load(contract.Id);
                    var diff = new ReleaseEventDiff(DoSnapshot(ev, session));

                    if (!ev.Date.Equals(contract.Date))
                    {
                        diff.Date.Set();
                    }

                    if (ev.Description != contract.Description)
                    {
                        diff.Description.Set();
                    }

                    if (ev.Name != contract.Name && (contract.Series == null || contract.CustomName))
                    {
                        diff.Name.Set();
                    }

                    if (!ev.Series.NullSafeIdEquals(contract.Series))
                    {
                        diff.Series.Set();
                    }

                    if (ev.SeriesNumber != contract.SeriesNumber)
                    {
                        diff.SeriesNumber.Set();
                    }

                    if (ev.SeriesSuffix != contract.SeriesSuffix)
                    {
                        diff.SeriesSuffix.Set();
                    }

                    var oldName = ev.Name;

                    ev.Series = session.OfType <ReleaseEventSeries>().NullSafeLoad(contract.Series);
                    ev.CustomName = contract.CustomName;
                    ev.Date = contract.Date;
                    ev.Description = contract.Description;
                    ev.Name = contract.Name;
                    ev.SeriesNumber = contract.SeriesNumber;
                    ev.SeriesSuffix = contract.SeriesSuffix;
                    ev.UpdateNameFromSeries();

                    var weblinksDiff = WebLink.Sync(ev.WebLinks, contract.WebLinks, ev);

                    if (weblinksDiff.Changed)
                    {
                        diff.WebLinks.Set();
                        session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff);
                    }

                    CheckDuplicateName(session, ev);

                    session.Update(ev);

                    var archived = Archive(session, ev, diff, EntryEditEvent.Updated, string.Empty);
                    AddEntryEditedEntry(session.OfType <ActivityEntry>(), archived);

                    var logStr = string.Format("updated properties for {0} ({1})", entryLinkFactory.CreateEntryLink(ev), diff.ChangedFieldsString);
                    session.AuditLogger.AuditLog(logStr);
                }

                return new ReleaseEventContract(ev);
            }));
        }