internal static void SyncOptionalTagsFromPrimaryToArchive(ADUser user)
		{
			if (user == null || !StoreRetentionPolicyTagHelper.HasOnPremArchiveMailbox(user))
			{
				return;
			}
			using (StoreRetentionPolicyTagHelper storeRetentionPolicyTagHelper = StoreRetentionPolicyTagHelper.FromADUser(user, false))
			{
				if (storeRetentionPolicyTagHelper.configItemExists)
				{
					using (StoreRetentionPolicyTagHelper storeRetentionPolicyTagHelper2 = StoreRetentionPolicyTagHelper.FromADUser(user, true))
					{
						List<StoreTagData> list = (from x in storeRetentionPolicyTagHelper.tagData.Values
						where !x.Tag.IsArchiveTag
						select x).ToList<StoreTagData>();
						if (!storeRetentionPolicyTagHelper2.configItemExists || storeRetentionPolicyTagHelper2.tagData == null || storeRetentionPolicyTagHelper2.tagData.Count == 0)
						{
							if (storeRetentionPolicyTagHelper2.tagData == null)
							{
								storeRetentionPolicyTagHelper2.tagData = new Dictionary<Guid, StoreTagData>(list.Count);
							}
							foreach (StoreTagData storeTagData in list)
							{
								if (!storeRetentionPolicyTagHelper2.tagData.Values.Contains(storeTagData))
								{
									storeRetentionPolicyTagHelper2.tagData.Add(storeTagData.Tag.RetentionId, storeTagData);
								}
							}
							storeRetentionPolicyTagHelper2.Save();
						}
					}
				}
			}
		}
		internal static bool HasOnPremArchiveMailbox(ADUser user)
		{
			if (user.ArchiveState == ArchiveState.Local)
			{
				ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromADUser(user, RemotingOptions.AllowCrossSite);
				return StoreRetentionPolicyTagHelper.HasOnPremArchiveMailbox(exchangePrincipal);
			}
			return false;
		}
Пример #3
0
        protected override void InternalProcessRecord()
        {
            TaskLogger.LogEnter();
            string mailboxAddress = this.Identity.ToString();
            ADUser dataObject     = this.DataObject;

            ELCTaskHelper.VerifyIsInScopes(dataObject, base.ScopeSet, new Task.TaskErrorLoggingDelegate(base.WriteError));
            if (dataObject.ExchangeGuid != Guid.Empty && dataObject.RecipientType != RecipientType.MailUser && dataObject.Database != null)
            {
                MailboxDatabase mailboxDatabase = base.GlobalConfigSession.Read <MailboxDatabase>(dataObject.Database);
                if (mailboxDatabase == null)
                {
                    base.WriteError(new ArgumentException(Strings.ElcMdbNotFound(mailboxAddress), "Mailbox"), ErrorCategory.InvalidArgument, null);
                }
                this.InternalProcessOneMailbox(dataObject.ExchangeGuid, mailboxDatabase.Guid);
            }
            if (dataObject.ArchiveState == ArchiveState.Local)
            {
                ADObjectId      entryId          = dataObject.ArchiveDatabase ?? dataObject.Database;
                MailboxDatabase mailboxDatabase2 = base.GlobalConfigSession.Read <MailboxDatabase>(entryId);
                if (mailboxDatabase2 == null)
                {
                    base.WriteError(new ArgumentException(Strings.ElcMdbNotFound(mailboxAddress), "Archive Mailbox"), ErrorCategory.InvalidArgument, null);
                }
                if (StoreRetentionPolicyTagHelper.HasOnPremArchiveMailbox(dataObject))
                {
                    try
                    {
                        StoreRetentionPolicyTagHelper.SyncOptionalTagsFromPrimaryToArchive(dataObject);
                    }
                    catch (ElcUserConfigurationException)
                    {
                        this.WriteWarning(Strings.WarningArchiveMailboxNotReachable(mailboxAddress));
                    }
                }
                this.InternalProcessOneMailbox(dataObject.ArchiveGuid, mailboxDatabase2.Guid);
            }
            if (!this.processed)
            {
                this.WriteWarning(Strings.ElcNoLocalMbxOrArchive(mailboxAddress));
            }
            TaskLogger.LogExit();
        }
Пример #4
0
 protected override void InternalProcessRecord()
 {
     TaskLogger.LogEnter();
     if (this.DataObject != null && SharedConfiguration.IsSharedConfiguration(this.DataObject.OrganizationId) && !base.ShouldContinue(Strings.ConfirmSharedConfiguration(this.DataObject.OrganizationId.OrganizationalUnit.Name)))
     {
         TaskLogger.LogExit();
         return;
     }
     if (this.Mailbox != null)
     {
         ExchangePrincipal exchangePrincipal = this.ProcessPrimaryMailbox();
         IRecipientSession recipientSession;
         ADUser            user = StoreRetentionPolicyTagHelper.FetchRecipientFromMailboxId(base.DomainController, this.Mailbox, out recipientSession, exchangePrincipal.MailboxInfo.OrganizationId);
         if (exchangePrincipal != null && StoreRetentionPolicyTagHelper.HasOnPremArchiveMailbox(user))
         {
             this.ProcessArchiveMailbox();
         }
     }
     else
     {
         bool flag = this.DataObject.IsChanged(ADObjectSchema.Name);
         if (this.DataObject.IsChanged(RetentionPolicyTagSchema.RetentionId) && !this.Force && !base.ShouldContinue(Strings.WarningRetentionTagIdChange(this.DataObject.Identity.ToString())))
         {
             return;
         }
         base.InternalProcessRecord();
         if (this.contentSettingsObject.ObjectState == ObjectState.Changed)
         {
             if (flag)
             {
                 ElcContentSettings elcContentSettings = this.DataObject.GetELCContentSettings().FirstOrDefault <ElcContentSettings>();
                 elcContentSettings.CopyChangesFrom(this.contentSettingsObject);
                 this.contentSettingsObject = elcContentSettings;
             }
             base.DataSession.Save(this.contentSettingsObject);
         }
     }
     TaskLogger.LogExit();
 }