public static void ValidateLinkedAutoAttendant(IConfigDataProvider session, string autoAttendantName, bool checkEnabled, UMAutoAttendant referringAutoAttendant) { if (session == null) { throw new ArgumentNullException("session"); } if (autoAttendantName == null) { throw new ArgumentNullException("autoAttendantName"); } if (referringAutoAttendant == null) { throw new ArgumentNullException("referringAutoAttendant"); } QueryFilter filter = new AndFilter(new QueryFilter[] { new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, autoAttendantName), new ComparisonFilter(ComparisonOperator.Equal, UMAutoAttendantSchema.UMDialPlan, referringAutoAttendant.UMDialPlan) }); UMAutoAttendant umautoAttendant = null; UMAutoAttendant[] array = (UMAutoAttendant[])session.Find <UMAutoAttendant>(filter, referringAutoAttendant.Id.Parent, false, null); if (array != null && array.Length == 1) { umautoAttendant = array[0]; } if (umautoAttendant == null) { throw new InvalidAutoAttendantException(Strings.InvalidAutoAttendantInDialPlan(autoAttendantName, referringAutoAttendant.UMDialPlan.Name)); } if (checkEnabled && umautoAttendant.Status != StatusEnum.Enabled) { throw new InvalidAutoAttendantException(Strings.DisabledLinkedAutoAttendant(autoAttendantName, referringAutoAttendant.Id.ToString())); } }
private IConfigDataProvider CreateSessionForAA() { IConfigurationSession configurationSession = (IConfigurationSession)base.CreateSession(); this.AutoAttendant = (UMAutoAttendant)base.GetDataObject <UMAutoAttendant>(this.UMAutoAttendant, configurationSession, null, new LocalizedString?(Strings.NonExistantAutoAttendant(this.UMAutoAttendant.ToString())), new LocalizedString?(Strings.MultipleAutoAttendantsWithSameId(this.UMAutoAttendant.ToString()))); configurationSession = (IConfigurationSession)TaskHelper.UnderscopeSessionToOrganization(configurationSession, this.AutoAttendant.OrganizationId, true); base.VerifyIsWithinScopes(configurationSession, this.AutoAttendant, true, new DataAccessTask <UMDialPlan> .ADObjectOutOfScopeString(Strings.ScopeErrorOnAutoAttendant)); this.Identity = (TIdentity)((object)new UMDialPlanIdParameter(this.AutoAttendant.UMDialPlan)); return(configurationSession); }
public static void ValidateDtmfFallbackAA(UMAutoAttendant dataObject, UMDialPlan aaDialPlan, UMAutoAttendant dtmfFallbackAA) { if (dtmfFallbackAA.Guid.Equals(dataObject.Guid)) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.InvalidDtmfFallbackAutoAttendantSelf(dtmfFallbackAA.Identity.ToString())); } if (!dtmfFallbackAA.UMDialPlan.ObjectGuid.Equals(aaDialPlan.Guid)) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.InvalidDtmfFallbackAutoAttendantDialPlan(dtmfFallbackAA.Identity.ToString())); } if (dtmfFallbackAA.SpeechEnabled) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.InvalidDtmfFallbackAutoAttendant(dtmfFallbackAA.Identity.ToString())); } if (dataObject.SpeechEnabled && dataObject.Status == StatusEnum.Enabled && dtmfFallbackAA.Status == StatusEnum.Disabled) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.InvalidDtmfFallbackAutoAttendant_Disabled(dtmfFallbackAA.Identity.ToString())); } }
public static bool IsFallbackAAInDialPlan(IConfigDataProvider dataSession, UMAutoAttendant dataObject, out ADObjectId targetAA) { bool result = false; targetAA = null; IEnumerable <UMAutoAttendant> autoAttendantsInSameDialPlan = ValidationHelper.GetAutoAttendantsInSameDialPlan(dataSession, dataObject, dataObject.UMDialPlan); if (autoAttendantsInSameDialPlan == null) { return(false); } foreach (UMAutoAttendant umautoAttendant in autoAttendantsInSameDialPlan) { if (!umautoAttendant.Id.ObjectGuid.Equals(dataObject.Id.ObjectGuid) && umautoAttendant.DTMFFallbackAutoAttendant != null && umautoAttendant.DTMFFallbackAutoAttendant.ObjectGuid.Equals(dataObject.Guid)) { result = true; targetAA = umautoAttendant.Id; break; } } return(result); }
public static void OnPostGetObject(DataRow inputRow, DataTable dataTable, DataObjectStore store) { if (dataTable.Rows.Count == 0 || store == null) { return; } DataRow dataRow = dataTable.Rows[0]; UMAutoAttendant umautoAttendant = (UMAutoAttendant)store.GetDataObject("UMAutoAttendant"); if (umautoAttendant != null) { UMDialPlan dialPlan = umautoAttendant.GetDialPlan(); dataRow["ExtensionLength"] = dialPlan.NumberOfDigitsInExtension; dataRow["IsTelex"] = (dialPlan.URIType == UMUriType.TelExtn); List <UMAAMenuKeyMapping> value; List <UMAAMenuKeyMapping> value2; UMAAMenuKeyMapping.CreateMappings((MultiValuedProperty <CustomMenuKeyMapping>)dataRow["BusinessHoursKeyMapping"], (MultiValuedProperty <CustomMenuKeyMapping>)dataRow["AfterHoursKeyMapping"], out value, out value2); dataRow["BusinessHoursKeyMapping"] = value; dataRow["AfterHoursKeyMapping"] = value2; dataRow["BusinessHoursSchedule"] = new ScheduleBuilder(new Schedule(umautoAttendant.BusinessHoursSchedule)).GetEntireState(); } }
private static IEnumerable <UMAutoAttendant> GetAutoAttendantsInSameDialPlan(IConfigDataProvider session, UMAutoAttendant autoAttendant, ADObjectId dialPlanId) { if (session == null) { throw new ArgumentNullException("session"); } if (autoAttendant == null) { throw new ArgumentNullException("autoAttendant"); } if (dialPlanId == null) { throw new ArgumentNullException("dialPlanId"); } ComparisonFilter filter = new ComparisonFilter(ComparisonOperator.Equal, UMAutoAttendantSchema.UMDialPlan, dialPlanId); ADObjectId parent = autoAttendant.Id.Parent; return(session.FindPaged <UMAutoAttendant>(filter, parent, false, null, 0)); }
private static void CheckLinkWithOtherAAsInDialPlan(IConfigDataProvider dataSession, UMAutoAttendant dataObject) { IEnumerable <UMAutoAttendant> autoAttendantsInSameDialPlan = ValidationHelper.GetAutoAttendantsInSameDialPlan(dataSession, dataObject, dataObject.UMDialPlan); if (autoAttendantsInSameDialPlan == null) { return; } foreach (UMAutoAttendant umautoAttendant in autoAttendantsInSameDialPlan) { if (umautoAttendant != null && !umautoAttendant.Guid.Equals(dataObject.Guid)) { if (umautoAttendant.DTMFFallbackAutoAttendant != null && umautoAttendant.DTMFFallbackAutoAttendant.ObjectGuid.Equals(dataObject.Guid)) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.CannotDisableAutoAttendant(umautoAttendant.Id.ToString())); } if (umautoAttendant.BusinessHoursKeyMapping != null && umautoAttendant.BusinessHoursKeyMapping.Count > 0) { foreach (CustomMenuKeyMapping customMenuKeyMapping in umautoAttendant.BusinessHoursKeyMapping) { if (!string.IsNullOrEmpty(customMenuKeyMapping.AutoAttendantName) && string.Equals(dataObject.Name, customMenuKeyMapping.AutoAttendantName, StringComparison.OrdinalIgnoreCase)) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.CannotDisableAutoAttendant_KeyMapping(umautoAttendant.Id.ToString())); } } } if (umautoAttendant.AfterHoursKeyMapping != null && umautoAttendant.AfterHoursKeyMapping.Count > 0) { foreach (CustomMenuKeyMapping customMenuKeyMapping2 in umautoAttendant.AfterHoursKeyMapping) { if (!string.IsNullOrEmpty(customMenuKeyMapping2.AutoAttendantName) && string.Equals(dataObject.Name, customMenuKeyMapping2.AutoAttendantName, StringComparison.OrdinalIgnoreCase)) { throw new InvalidDtmfFallbackAutoAttendantException(Strings.CannotDisableAutoAttendant_KeyMapping(umautoAttendant.Id.ToString())); } } } } } }
internal static void ValidateDisabledAA(IConfigDataProvider dataSession, UMDialPlan dialPlanConfig, UMAutoAttendant disabledAutoAttendant) { if (dialPlanConfig.ContactScope == CallSomeoneScopeEnum.AutoAttendantLink) { ADObjectId umautoAttendant = dialPlanConfig.UMAutoAttendant; if (umautoAttendant != null && umautoAttendant.ObjectGuid.Equals(disabledAutoAttendant.Guid)) { throw new DefaultAutoAttendantInDialPlanException(dialPlanConfig.Id.ToString()); } } ValidationHelper.CheckLinkWithOtherAAsInDialPlan(dataSession, disabledAutoAttendant); }
internal static void ValidateCustomMenu(LocalizedString setting, IConfigurationSession session, string property, MultiValuedProperty <CustomMenuKeyMapping> customMenu, int numberOfDigitsInExtension, UMAutoAttendant containingAutoAttendant, DataAccessHelper.GetDataObjectDelegate getUniqueObject, out bool serializeAgain) { serializeAgain = false; new List <string>(); IRecipientSession recipientSessionScopedToOrganization = Utility.GetRecipientSessionScopedToOrganization(containingAutoAttendant.OrganizationId, true); foreach (CustomMenuKeyMapping customMenuKeyMapping in customMenu) { if (!string.IsNullOrEmpty(customMenuKeyMapping.AutoAttendantName)) { ValidationHelper.ValidateLinkedAutoAttendant(session, customMenuKeyMapping.AutoAttendantName, containingAutoAttendant.Status == StatusEnum.Enabled, containingAutoAttendant); } string text = Utils.TrimSpaces(customMenuKeyMapping.PromptFileName); if (text != null) { ValidationHelper.ValidateWavFile(text); } if (!string.IsNullOrEmpty(customMenuKeyMapping.LeaveVoicemailFor)) { string legacyDNToUseForLeaveVoicemailFor; ValidationHelper.ValidateMailbox(setting, customMenuKeyMapping.LeaveVoicemailFor, containingAutoAttendant.UMDialPlan, recipientSessionScopedToOrganization, getUniqueObject, out legacyDNToUseForLeaveVoicemailFor); customMenuKeyMapping.LegacyDNToUseForLeaveVoicemailFor = legacyDNToUseForLeaveVoicemailFor; serializeAgain = true; } if (!string.IsNullOrEmpty(customMenuKeyMapping.TransferToMailbox)) { string legacyDNToUseForTransferToMailbox; ValidationHelper.ValidateMailbox(setting, customMenuKeyMapping.TransferToMailbox, containingAutoAttendant.UMDialPlan, recipientSessionScopedToOrganization, getUniqueObject, out legacyDNToUseForTransferToMailbox); customMenuKeyMapping.LegacyDNToUseForTransferToMailbox = legacyDNToUseForTransferToMailbox; serializeAgain = true; } } CustomMenuKeyMapping[] array = customMenu.ToArray(); Dictionary <string, int> dictionary = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase); Dictionary <CustomMenuKey, bool> dictionary2 = new Dictionary <CustomMenuKey, bool>(); for (int i = 0; i < array.Length; i++) { CustomMenuKeyMapping customMenuKeyMapping2 = array[i]; try { dictionary.Add(customMenuKeyMapping2.Description, i); } catch (ArgumentException) { throw new InvalidCustomMenuException(Strings.DuplicateMenuName(customMenuKeyMapping2.Description)); } if (!string.IsNullOrEmpty(customMenuKeyMapping2.AsrPhrases) && customMenuKeyMapping2.AsrPhrases.Length > 256) { throw new InvalidCustomMenuException(Strings.MaxAsrPhraseLengthExceeded(customMenuKeyMapping2.Description)); } string[] asrPhraseList = customMenuKeyMapping2.AsrPhraseList; if (asrPhraseList != null) { if (asrPhraseList.Length > 9) { throw new InvalidCustomMenuException(Strings.MaxAsrPhraseCountExceeded(customMenuKeyMapping2.Description)); } for (int j = 0; j < asrPhraseList.Length; j++) { if (string.IsNullOrEmpty(asrPhraseList[j])) { throw new InvalidCustomMenuException(Strings.EmptyASRPhrase(customMenuKeyMapping2.Description)); } try { dictionary.Add(asrPhraseList[j], -1); } catch (ArgumentException) { if (dictionary[asrPhraseList[j]] != i) { throw new InvalidCustomMenuException(Strings.DuplicateASRPhrase(asrPhraseList[j])); } } } } try { if (customMenuKeyMapping2.MappedKey != CustomMenuKey.NotSpecified) { dictionary2.Add(customMenuKeyMapping2.MappedKey, true); } } catch (ArgumentException) { throw new InvalidCustomMenuException(Strings.DuplicateKeys(customMenuKeyMapping2.Key)); } } }
protected override IConfigurable PrepareDataObject() { TaskLogger.LogEnter(); UMDialPlan umdialPlan = (UMDialPlan)base.PrepareDataObject(); if (base.HasErrors) { return(null); } if (base.Fields.IsModified("ContactRecipientContainer") && base.Fields.IsModified("ContactAddressList")) { base.WriteError(new InvalidALParameterException(), ErrorCategory.NotSpecified, null); TaskLogger.LogExit(); return(null); } if (base.Fields.IsModified("CountryOrRegionCode")) { if (string.IsNullOrEmpty(this.CountryOrRegionCode)) { base.WriteError(new InvalidParameterException(Strings.EmptyCountryOrRegionCode), ErrorCategory.InvalidArgument, null); } else { umdialPlan.CountryOrRegionCode = this.CountryOrRegionCode; } } if (base.Fields.IsModified("ContactRecipientContainer")) { OrganizationalUnitIdParameter contactRecipientContainer = this.ContactRecipientContainer; if (contactRecipientContainer != null) { bool useConfigNC = this.ConfigurationSession.UseConfigNC; this.ConfigurationSession.UseConfigNC = false; ADConfigurationObject adconfigurationObject = (ADConfigurationObject)base.GetDataObject <ExchangeOrganizationalUnit>(contactRecipientContainer, this.ConfigurationSession, null, new LocalizedString?(Strings.ErrorOrganizationalUnitNotFound(this.ContactRecipientContainer.ToString())), new LocalizedString?(Strings.ErrorOrganizationalUnitNotUnique(this.ContactRecipientContainer.ToString()))); this.ConfigurationSession.UseConfigNC = useConfigNC; if (!base.HasErrors) { umdialPlan.ContactAddressList = adconfigurationObject.Id; } } else { umdialPlan.ContactAddressList = null; } } if (base.Fields.IsModified("ContactAddressList")) { AddressListIdParameter contactAddressList = this.ContactAddressList; if (contactAddressList != null) { IEnumerable <AddressBookBase> objects = contactAddressList.GetObjects <AddressBookBase>(null, this.ConfigurationSession); using (IEnumerator <AddressBookBase> enumerator = objects.GetEnumerator()) { if (enumerator.MoveNext()) { umdialPlan.ContactAddressList = (ADObjectId)enumerator.Current.Identity; } goto IL_19C; } } umdialPlan.ContactAddressList = null; } IL_19C: if (umdialPlan.ContactScope != CallSomeoneScopeEnum.AddressList) { umdialPlan.ContactAddressList = null; } if (base.Fields.IsModified("UMAutoAttendant")) { UMAutoAttendantIdParameter umautoAttendant = this.UMAutoAttendant; if (umautoAttendant != null) { UMAutoAttendant umautoAttendant2 = (UMAutoAttendant)base.GetDataObject <UMAutoAttendant>(umautoAttendant, this.ConfigurationSession, null, new LocalizedString?(Strings.NonExistantAutoAttendant(umautoAttendant.ToString())), new LocalizedString?(Strings.MultipleAutoAttendantsWithSameId(umautoAttendant.ToString()))); if (!base.HasErrors) { umdialPlan.UMAutoAttendant = umautoAttendant2.Id; } } else { umdialPlan.UMAutoAttendant = null; } } TaskLogger.LogExit(); return(umdialPlan); }