public ArchivedEventSeriesContract(ReleaseEventSeries series, ReleaseEventSeriesDiff diff) { ParamIs.NotNull(() => series); Aliases = series.Aliases.Select(a => a.Name).ToArray(); Description = series.Description; Id = series.Id; Name = series.Name; WebLinks = diff.IsIncluded(ReleaseEventSeriesEditableFields.WebLinks) ? series.WebLinks.Select(l => new ArchivedWebLinkContract(l)).ToArray() : null; }
public ArchivedEventSeriesContract(ReleaseEventSeries series, ReleaseEventSeriesDiff diff) { ParamIs.NotNull(() => series); Category = series.Category; Description = series.Description; Id = series.Id; MainPictureMime = series.PictureMime; Names = diff.IncludeNames ? series.Names.Names.Select(n => new LocalizedStringContract(n)).ToArray() : null; TranslatedName = new ArchivedTranslatedStringContract(series.TranslatedName); WebLinks = diff.IncludeWebLinks ? series.WebLinks.Select(l => new ArchivedWebLinkContract(l)).ToArray() : null; }
public int UpdateSeries(ReleaseEventSeriesForEditContract contract, EntryPictureFileContract pictureData) { ParamIs.NotNull(() => contract); PermissionContext.VerifyManageDatabase(); return(HandleTransaction(session => { ReleaseEventSeries series; if (contract.Id == 0) { series = new ReleaseEventSeries(contract.DefaultNameLanguage, contract.Names, contract.Description) { Category = contract.Category, Status = contract.Status }; session.Save(series); var diff = new ReleaseEventSeriesDiff(ReleaseEventSeriesEditableFields.OriginalName | ReleaseEventSeriesEditableFields.Names); diff.Description.Set(!string.IsNullOrEmpty(contract.Description)); var weblinksDiff = WebLink.Sync(series.WebLinks, contract.WebLinks, series); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } if (pictureData != null) { diff.Picture.Set(); SaveImage(series, pictureData); session.Update(series); } session.Update(series); Archive(session, series, diff, EntryEditEvent.Created, string.Empty); AuditLog(string.Format("created {0}", entryLinkFactory.CreateEntryLink(series)), session); } else { series = session.Load <ReleaseEventSeries>(contract.Id); permissionContext.VerifyEntryEdit(series); var diff = new ReleaseEventSeriesDiff(ReleaseEventSeriesEditableFields.Nothing); if (series.TranslatedName.DefaultLanguage != contract.DefaultNameLanguage) { series.TranslatedName.DefaultLanguage = contract.DefaultNameLanguage; diff.OriginalName.Set(); } var nameDiff = series.Names.Sync(contract.Names, series); session.Sync(nameDiff); if (nameDiff.Changed) { diff.Names.Set(); } if (series.Category != contract.Category) { diff.Category.Set(); series.Category = contract.Category; } if (series.Description != contract.Description) { diff.Description.Set(); series.Description = contract.Description; } if (series.Status != contract.Status) { diff.Status.Set(); series.Status = contract.Status; } if (pictureData != null) { diff.Picture.Set(); SaveImage(series, pictureData); } var weblinksDiff = WebLink.Sync(series.WebLinks, contract.WebLinks, series); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } session.Update(series); if (diff.Names.IsChanged || diff.OriginalName.IsChanged) { var eventNamesQuery = new UpdateEventNamesQuery(); foreach (var ev in series.Events.Where(e => !e.CustomName)) { eventNamesQuery.UpdateNames(session, ev, series, ev.CustomName, ev.SeriesNumber, ev.SeriesSuffix, ev.Names); session.Update(ev); } } Archive(session, series, diff, EntryEditEvent.Updated, string.Empty); AuditLog(string.Format("updated {0}", entryLinkFactory.CreateEntryLink(series)), session); } return series.Id; })); }
private ArchivedReleaseEventSeriesVersion Archive(IDatabaseContext <ReleaseEvent> ctx, ReleaseEventSeries releaseEvent, ReleaseEventSeriesDiff diff, EntryEditEvent reason, string notes) { var agentLoginData = ctx.OfType <User>().CreateAgentLoginData(permissionContext); var archived = ArchivedReleaseEventSeriesVersion.Create(releaseEvent, diff, agentLoginData, reason, notes); ctx.Save(archived); return(archived); }
public int UpdateSeries(ReleaseEventSeriesForEditContract contract, EntryPictureFileContract pictureData) { ParamIs.NotNull(() => contract); PermissionContext.VerifyPermission(PermissionToken.ManageEventSeries); return(HandleTransaction(session => { ReleaseEventSeries series; if (contract.Id == 0) { series = new ReleaseEventSeries(contract.Name, contract.Description, contract.Aliases); session.Save(series); var diff = new ReleaseEventSeriesDiff(ReleaseEventSeriesEditableFields.Name); diff.Description.Set(!string.IsNullOrEmpty(contract.Description)); diff.Names.Set(contract.Aliases.Any()); var weblinksDiff = WebLink.Sync(series.WebLinks, contract.WebLinks, series); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } if (pictureData != null) { diff.Picture.Set(); SaveImage(series, pictureData); session.Update(series); } session.Update(series); Archive(session, series, diff, EntryEditEvent.Created, string.Empty); AuditLog(string.Format("created {0}", entryLinkFactory.CreateEntryLink(series)), session); } else { series = session.Load <ReleaseEventSeries>(contract.Id); var diff = new ReleaseEventSeriesDiff(ReleaseEventSeriesEditableFields.Name); if (series.Name != contract.Name) { diff.Name.Set(); series.Name = contract.Name; } if (series.Description != contract.Description) { diff.Description.Set(); series.Description = contract.Description; } if (series.UpdateAliases(contract.Aliases)) { diff.Names.Set(); } if (pictureData != null) { diff.Picture.Set(); SaveImage(series, pictureData); } var weblinksDiff = WebLink.Sync(series.WebLinks, contract.WebLinks, series); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } session.Update(series); Archive(session, series, diff, EntryEditEvent.Updated, string.Empty); AuditLog(string.Format("updated {0}", entryLinkFactory.CreateEntryLink(series)), session); } return series.Id; })); }