예제 #1
0
 internal async Task OnSaved(ReplicateDataMessage message, IEntity entity, SaveMode mode)
 {
     if (Saved.IsHandled())
     {
         await Saved.Raise(new ReplicationSaveMessageProcessedEventArgs(message, entity, mode));
     }
 }
예제 #2
0
 internal async Task OnDeleted(ReplicateDataMessage message, IEntity entity)
 {
     if (Deleted.IsHandled())
     {
         await Deleted.Raise(new ReplicationDeleteMessageProcessedEventArgs(message, entity));
     }
 }
예제 #3
0
        public virtual async Task RecordSave(IEntity entity, SaveMode saveMode)
        {
            if (!LogEventsAttribute.ShouldLog(entity.GetType()))
            {
                return;
            }

            var eventInfo = CreateApplicationEvent();

            if (eventInfo == null)
            {
                return;
            }

            eventInfo.ItemType = entity.GetType().FullName;
            eventInfo.ItemKey  = entity.GetId().ToString();
            eventInfo.Event    = saveMode.ToString();
            eventInfo.IP       = GetCurrentUserIP();
            eventInfo.UserId   = GetCurrentUserId();

            if (saveMode == SaveMode.Update)
            {
                var changes = await GetChangesXml(entity);

                if (changes.IsEmpty()) // No changes have happened, ignore recording the action:
                {
                    return;
                }

                eventInfo.Data = changes;
            }
            else
            {
                if (!ShouldSkipInsertData)
                {
                    eventInfo.Data = GetDataXml(entity);
                }
            }

            if (OnRecordingSave.IsHandled())
            {
                var args = new AuditSaveEventArgs
                {
                    SaveMode         = saveMode,
                    ApplicationEvent = eventInfo,
                    Entity           = entity
                };

                await OnRecordingSave.Raise(args);

                if (args.Cancel)
                {
                    return;
                }
            }

            await Save(eventInfo);

            ProcessContext <UndoContext> .Current.Perform(c => c.Append(eventInfo, entity));
        }
예제 #4
0
        public async Task NotifyExternalLoginAuthenticated(ExternalLoginInfo info)
        {
            if (!ExternalLoginAuthenticated.IsHandled())
            {
                throw new InvalidOperationException("ExternalLogin requested but no handler found for ExternalLoginAuthenticated event");
            }

            await ExternalLoginAuthenticated.Raise(info);
        }
예제 #5
0
        internal async Task <bool> OnSaving(ReplicateDataMessage message, IEntity entity, SaveMode mode)
        {
            if (!Saving.IsHandled())
            {
                return(true);
            }
            var args = new ReplicationSaveMessageReceivedEventArgs(message, entity, mode);
            await Saving.Raise(args);

            return(!args.Cancel);
        }
예제 #6
0
        internal async Task <bool> OnDeleting(ReplicateDataMessage message, IEntity entity)
        {
            if (!Deleting.IsHandled())
            {
                return(true);
            }
            var args = new ReplicationDeleteMessageReceivedEventArgs(message, entity);
            await Deleting.Raise(args);

            return(!args.Cancel);
        }
예제 #7
0
        public virtual async Task RecordDelete(IEntity entity)
        {
            if (!LogEventsAttribute.ShouldLog(entity.GetType()))
            {
                return;
            }

            var eventInfo = CreateApplicationEvent();

            if (eventInfo == null)
            {
                return;
            }

            eventInfo.ItemType = entity.GetType().FullName;
            eventInfo.ItemKey  = entity.GetId().ToString();
            eventInfo.Event    = "Delete";
            eventInfo.IP       = GetCurrentUserIP();
            eventInfo.UserId   = GetCurrentUserId();

            var changes = Entity.Database.GetProvider(entity.GetType()).GetUpdatedValues(entity, null);

            eventInfo.Data = ToChangeXml(changes);

            if (OnRecordingDelete.IsHandled())
            {
                var args = new AuditDeleteEventArgs {
                    ApplicationEvent = eventInfo, Entity = entity
                };
                await OnRecordingDelete.Raise(args);

                if (args.Cancel)
                {
                    return;
                }
            }

            await Save(eventInfo);

            ProcessContext <UndoContext> .Current.Perform(c => c.Append(eventInfo, entity));
        }
예제 #8
0
        static async Task <Tuple <bool, string> > TryTranslateUsingTheEvent(string phraseInDefaultLanguage, ILanguage language)
        {
            if (TranslationRequested.IsHandled())
            {
                var args = new TranslationRequestedEventArgs {
                    PhraseInDefaultLanguage = phraseInDefaultLanguage, Language = language
                };

                await TranslationRequested.Raise(args);

                if (args.Cancel)
                {
                    return(Tuple.Create(true, phraseInDefaultLanguage));
                }

                if (args.TranslationProvider != null)
                {
                    return(Tuple.Create(true, args.TranslationProvider()));
                }
            }

            return(Tuple.Create(false, default(string)));
        }