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; }
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(); }
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(); }