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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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;
        }
Beispiel #7
0
 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;
 }
Beispiel #9
0
		public virtual ArchivedReleaseEventVersion CreateArchivedVersion(ReleaseEventDiff diff, AgentLoginData author, EntryEditEvent reason) {

			var archived = new ArchivedReleaseEventVersion(this, diff, author, reason);
			ArchivedVersionsManager.Add(archived);

			return archived;

		}
Beispiel #10
0
 protected async Task AddEntryEditedEntryAsync(IDatabaseContext <ActivityEntry> ctx, ArchivedReleaseEventVersion archivedVersion)
 {
     await AddActivityfeedEntryAsync(ctx, user => new ReleaseEventActivityEntry(archivedVersion.ReleaseEvent, archivedVersion.EditEvent, user, archivedVersion));
 }
Beispiel #11
0
 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;
 }
Beispiel #13
0
 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)
 {
 }