public static ArchivedEventContract GetAllProperties(ArchivedReleaseEventVersion version) { var data = new ArchivedEventContract(); var xmlCache = new XmlCache <ArchivedEventContract>(); var thisVersion = version.Data != null?xmlCache.Deserialize(version.Version, version.Data) : new ArchivedEventContract(); data.Category = thisVersion.Category; data.Date = thisVersion.Date; data.Description = thisVersion.Description; data.Id = thisVersion.Id; data.MainPictureMime = thisVersion.MainPictureMime; data.Series = thisVersion.Series; data.SeriesNumber = thisVersion.SeriesNumber; data.SongList = thisVersion.SongList; data.TranslatedName = thisVersion.TranslatedName; data.Venue = thisVersion.Venue; data.VenueName = thisVersion.VenueName; DoIfExists(version, ReleaseEventEditableFields.Artists, xmlCache, v => data.Artists = v.Artists); DoIfExists(version, ReleaseEventEditableFields.Names, xmlCache, v => data.Names = v.Names); DoIfExists(version, ReleaseEventEditableFields.PVs, xmlCache, v => data.PVs = v.PVs); DoIfExists(version, ReleaseEventEditableFields.WebLinks, xmlCache, v => data.WebLinks = v.WebLinks); return(data); }
private ArchivedReleaseEventVersion Archive(IDatabaseContext <ReleaseEvent> ctx, ReleaseEvent releaseEvent, ReleaseEventDiff diff, EntryEditEvent reason, string notes) { var agentLoginData = ctx.OfType <User>().CreateAgentLoginData(permissionContext); var archived = ArchivedReleaseEventVersion.Create(releaseEvent, diff, agentLoginData, reason, notes); ctx.Save(archived); return(archived); }
private static void DoIfExists(ArchivedReleaseEventVersion version, ReleaseEventEditableFields field, XmlCache <ArchivedEventContract> xmlCache, Action <ArchivedEventContract> func) { var versionWithField = version.GetLatestVersionWithField(field); if (versionWithField?.Data != null) { var data = xmlCache.Deserialize(versionWithField.Version, versionWithField.Data); func(data); } }
/// <summary> /// Returns a release event if it can be uniquely identified (by either name or ID). /// Otherwise attempts to create a new event based on given name. /// Makes an intelligent guess to create either standalone event or series event. /// This also makes sure no event with a duplicate name is created. /// </summary> /// <param name="ctx">Database context.</param> /// <param name="userContext">User context.</param> /// <param name="contract">Release event data.</param> /// <param name="forEntry">Which entry the release event will be created for. Optional, can be null.</param> /// <returns>The release event. Can be null if no name or ID is specified. Returned event can be either a new event or existing event.</returns> public ReleaseEvent FindOrCreate(IDatabaseContext ctx, IUserPermissionContext userContext, IReleaseEvent contract, IEntryBase forEntry) { if (contract == null || (contract.Id == 0 && string.IsNullOrWhiteSpace(contract.Name))) { return(null); } var existing = ctx.NullSafeLoad <ReleaseEvent>(contract); if (existing != null) { return(existing); } var searchResult = new ReleaseEventSearch(ctx).Find(contract.Name, userContext.LanguagePreference); if (searchResult.IsKnownEvent) { return(ctx.Load <ReleaseEvent>(searchResult.EventId)); } var series = ctx.NullSafeLoad <ReleaseEventSeries>(searchResult.Series); ReleaseEvent newEvent; LocalizedStringContract[] names; if (series == null) { var nameValue = searchResult.EventName.EmptyToNull() ?? contract.Name; var name = new LocalizedStringContract(nameValue, ContentLanguageSelection.English); names = new[] { name }; newEvent = new ReleaseEvent(string.Empty, null, ContentLanguageSelection.English); } else { names = new LocalizedStringContract[0]; newEvent = new ReleaseEvent(string.Empty, null, series, searchResult.SeriesNumber, searchResult.SeriesSuffix, ContentLanguageSelection.Unspecified, false); } ctx.Save(newEvent); new UpdateEventNamesQuery().UpdateNames(ctx, newEvent, series, false, searchResult.SeriesNumber, searchResult.SeriesSuffix, names); var eventDiff = new ReleaseEventDiff(ReleaseEventEditableFields.OriginalName | ReleaseEventEditableFields.Names); var archivedVersion = ArchivedReleaseEventVersion.Create(newEvent, eventDiff, ctx.OfType <User>().CreateAgentLoginData(userContext), EntryEditEvent.Created, "Created for " + forEntry); ctx.Save(archivedVersion); return(newEvent); }
/// <summary> /// Returns a release event if it can be uniquely identified (by either name or ID). /// Otherwise attempts to create a new event based on given name. /// Makes an intelligent guess to create either standalone event or series event. /// This also makes sure no event with a duplicate name is created. /// </summary> /// <param name="ctx">Database context.</param> /// <param name="userContext">User context.</param> /// <param name="contract">Release event data.</param> /// <param name="forEntry">Which entry the release event will be created for. Optional, can be null.</param> /// <returns>The release event. Can be null if no name or ID is specified. Returned event can be either a new event or existing event.</returns> public ReleaseEvent FindOrCreate(IDatabaseContext ctx, IUserPermissionContext userContext, IReleaseEvent contract, IEntryBase forEntry) { if (contract == null || (contract.Id == 0 && string.IsNullOrWhiteSpace(contract.Name))) { return(null); } var existing = ctx.NullSafeLoad <ReleaseEvent>(contract); if (existing != null) { return(existing); } var searchResult = new ReleaseEventSearch(ctx).Find(contract.Name); if (searchResult.IsKnownEvent) { return(ctx.Load <ReleaseEvent>(searchResult.EventId)); } var series = ctx.NullSafeLoad <ReleaseEventSeries>(searchResult.Series); ReleaseEvent newEvent; if (series == null) { newEvent = new ReleaseEvent(string.Empty, null, searchResult.EventName.EmptyToNull() ?? contract.Name); } else { newEvent = new ReleaseEvent(string.Empty, null, series, searchResult.SeriesNumber, searchResult.SeriesSuffix, null, false); } ctx.Save(newEvent); var eventDiff = new ReleaseEventDiff(ReleaseEventEditableFields.Name); eventDiff.Name.Set(); var archivedVersion = ArchivedReleaseEventVersion.Create(newEvent, eventDiff, ctx.OfType <User>().CreateAgentLoginData(userContext), EntryEditEvent.Created, "Created for " + forEntry); ctx.Save(archivedVersion); return(newEvent); }
public ArchivedEventVersionDetailsContract(ArchivedReleaseEventVersion archived, ArchivedReleaseEventVersion comparedVersion, IUserPermissionContext permissionContext) { ParamIs.NotNull(() => archived); ArchivedVersion = new ArchivedEventVersionContract(archived); ComparedVersion = comparedVersion != null ? new ArchivedEventVersionContract(comparedVersion) : null; ReleaseEvent = new ReleaseEventContract(archived.ReleaseEvent, permissionContext.LanguagePreference); Name = ReleaseEvent.Name; ComparableVersions = archived.ReleaseEvent.ArchivedVersionsManager .GetPreviousVersions(archived, permissionContext) .Select(a => ArchivedObjectVersionWithFieldsContract.Create(a, a.Diff.ChangedFields.Value, a.CommonEditEvent)) .ToArray(); Versions = ComparedEventsContract.Create(archived, comparedVersion); ComparedVersionId = Versions.SecondId; }
public static ComparedEventsContract Create(ArchivedReleaseEventVersion firstData, ArchivedReleaseEventVersion secondData) { return(new ComparedEventsContract(Create(firstData, secondData, ArchivedEventContract.GetAllProperties, d => d.Id))); }
public ArchivedEventVersionContract(ArchivedReleaseEventVersion archivedVersion) : base(archivedVersion) { ChangedFields = archivedVersion.Diff.ChangedFields; Reason = archivedVersion.CommonEditEvent; }
public virtual ArchivedReleaseEventVersion CreateArchivedVersion(ReleaseEventDiff diff, AgentLoginData author, EntryEditEvent reason) { var archived = new ArchivedReleaseEventVersion(this, diff, author, reason); ArchivedVersionsManager.Add(archived); return archived; }
protected async Task AddEntryEditedEntryAsync(IDatabaseContext <ActivityEntry> ctx, ArchivedReleaseEventVersion archivedVersion) { await AddActivityfeedEntryAsync(ctx, user => new ReleaseEventActivityEntry(archivedVersion.ReleaseEvent, archivedVersion.EditEvent, user, archivedVersion)); }
public ArchivedEventVersionContract(ArchivedReleaseEventVersion archivedVersion, IUserIconFactory userIconFactory) : base(archivedVersion, userIconFactory, archivedVersion.Diff.ChangedFields.Value, archivedVersion.CommonEditEvent) { }
public ArchivedEventVersionContract(ArchivedReleaseEventVersion archivedVersion) : base(archivedVersion) { ChangedFields = archivedVersion.Diff.ChangedFields; Reason = archivedVersion.CommonEditEvent; }
protected void AddEntryEditedEntry(IDatabaseContext <ActivityEntry> ctx, ArchivedReleaseEventVersion archivedVersion) { AddActivityfeedEntry(ctx, user => new ReleaseEventActivityEntry(archivedVersion.ReleaseEvent, archivedVersion.EditEvent, user, archivedVersion)); }
public ArchivedEventVersionContract(ArchivedReleaseEventVersion archivedVersion) : base(archivedVersion, archivedVersion.Diff.ChangedFields.Value, archivedVersion.CommonEditEvent) { }