void Dispose(bool fromfinalize)
    {
        if (disposed)
        {
            return;
        }
        disposed = true;
        if (!fromfinalize)
        {
            GC.SuppressFinalize(this);
        }

        CultureSwitcher.Try(OnDisposing);
        if (obj != null)
        {
            while (Marshal.ReleaseComObject(obj) > 0)
            {
            }
            obj = default(T);
        }
        if (cultswitch != null)
        {
            cultswitch.Dispose();
            cultswitch = null;
        }
        SetOwner(null);
    }
Ejemplo n.º 2
0
        private void Check_Selected_Location_Copied_To_Fields_And_Resets_Validation(Action raiseEvent)
        {
            foreach (var culture in new string[] { "en-GB", "en-US", "de-DE", "fr-FR", "ru-RU" })
            {
                TestCleanup();
                TestInitialise();

                using (var cultureSwitcher = new CultureSwitcher(culture)) {
                    _Presenter.Initialise(_View.Object);
                    var selectedLocation = SetupSelectedLocation(new ReceiverLocation()
                    {
                        Name = "A", Latitude = 1.123, Longitude = -2.678
                    });
                    SetupExpectedValidationFields(new ValidationResult[] { });

                    raiseEvent();

                    Assert.AreEqual("A", _View.Object.Location);
                    Assert.AreEqual(1.123, double.Parse(_View.Object.Latitude));
                    Assert.AreEqual(-2.678, double.Parse(_View.Object.Longitude));

                    _View.Verify(v => v.ShowValidationResults(It.IsAny <IEnumerable <ValidationResult> >()), Times.Once());
                }
            }
        }
Ejemplo n.º 3
0
        public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            if (Parameters.Email is null || Parameters.NewEmail is null || Parameters.CallbackUrl is null ||
                Parameters.DeadlineUtc is null)
            {
                throw new ArgumentNullException(nameof(Parameters), "One or more required parameters are null");
            }

            {
                using var cs = new CultureSwitcher(Parameters.CultureInfo, Parameters.CultureInfo);

                // First email goes to the new email address

                var model = new ChangeUserAccountModel()
                {
                    Email       = Parameters.NewEmail,
                    CallbackUrl = Parameters.CallbackUrl,
                    Deadline    = Parameters.DeadlineUtc
                };

                var mailMergeMessage = mailMergeService.CreateStandardMessage();
                mailMergeMessage.EnableFormatter = false;
                mailMergeMessage.Subject         = localizer["Please confirm your new primary email"].Value;

                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.GeneralFrom.DisplayName, tenantContext.SiteContext.Email.GeneralFrom.Address));
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To, Parameters.NewEmail));

                mailMergeMessage.PlainText = await renderer.RenderAsync(TemplateName.ConfirmNewPrimaryEmailTxt, model,
                                                                        Parameters.CultureInfo.TwoLetterISOLanguageName);

                mailMergeMessage.HtmlText = await renderer.RenderAsync(TemplateName.ConfirmNewPrimaryEmailHtml, model,
                                                                       Parameters.CultureInfo.TwoLetterISOLanguageName);

                yield return(mailMergeMessage);

                // Second email goes to the current email address

                model = new ChangeUserAccountModel()
                {
                    Email       = Parameters.NewEmail,
                    CallbackUrl = string.Empty, // not used in the template
                    Deadline    = null          // not used in the template
                };

                mailMergeMessage = mailMergeService.CreateStandardMessage();
                mailMergeMessage.EnableFormatter = false;
                mailMergeMessage.Subject         = localizer["Your primary email is about to be changed"].Value;

                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.GeneralFrom.DisplayName, tenantContext.SiteContext.Email.GeneralFrom.Address));
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To, Parameters.Email));

                mailMergeMessage.PlainText = await renderer.RenderAsync(TemplateName.NotifyCurrentPrimaryEmailTxt, model,
                                                                        Parameters.CultureInfo.TwoLetterISOLanguageName);

                mailMergeMessage.HtmlText = await renderer.RenderAsync(TemplateName.NotifyCurrentPrimaryEmailHtml, model,
                                                                       Parameters.CultureInfo.TwoLetterISOLanguageName);

                yield return(mailMergeMessage);
            }
        }
        public void JsonSerialiser_WriteObject_Writes_ValueTypes_Correctly_For_Non_UK_Cultures()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            foreach (var culture in new string[] { "en-US", "de-DE", "fr-FR", "ru-RU" })
            {
                using (var cultureSwitcher = new CultureSwitcher(culture)) {
                    TestCleanup();
                    TestInitialise();

                    var obj = new ValueTypes()
                    {
                        BoolValue        = worksheet.Bool("BoolValue"),
                        UnusedBool       = worksheet.Bool("UnusedBool"),
                        NullableBool     = worksheet.NBool("NullableBool"),
                        Int              = worksheet.Int("Int"),
                        NullableInt      = worksheet.NInt("NullableInt"),
                        Long             = worksheet.Long("Long"),
                        NullableLong     = worksheet.NLong("NullableLong"),
                        Float            = worksheet.Float("Float"),
                        NullableFloat    = worksheet.NFloat("NullableFloat"),
                        Double           = worksheet.Double("Double"),
                        NullableDouble   = worksheet.NDouble("NullableDouble"),
                        DateTime         = worksheet.DateTime("DateTime"),
                        NullableDateTime = worksheet.NDateTime("NullableDateTime"),
                    };

                    _JsonSerialiser.Initialise(typeof(ValueTypes));
                    _JsonSerialiser.WriteObject(_Stream, obj);

                    var message = String.Format("when culture is {0}", culture);
                    Assert.AreEqual(worksheet.EString("Json"), GetJson(), message);
                }
            }
        }
Ejemplo n.º 5
0
        public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            if (Parameters.Email is null || Parameters.Subject is null || Parameters.CallbackUrl is null ||
                Parameters.TemplateNameTxt is null || Parameters.TemplateNameHtml is null ||
                Parameters.DeadlineUtc is null)
            {
                throw new ArgumentNullException(nameof(Parameters), "One or more required parameters are null");
            }

            var model = new ChangeUserAccountModel()
            {
                Email       = Parameters.Email,
                CallbackUrl = Parameters.CallbackUrl,
                Deadline    = Parameters.DeadlineUtc
            };

            {
                using var cs = new CultureSwitcher(Parameters.CultureInfo, Parameters.CultureInfo);

                var mailMergeMessage = mailMergeService.CreateStandardMessage();
                mailMergeMessage.EnableFormatter = false;
                mailMergeMessage.Subject         = Parameters.Subject; // already localized

                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.GeneralFrom.DisplayName, tenantContext.SiteContext.Email.GeneralFrom.Address));
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To, Parameters.Email));

                mailMergeMessage.PlainText = await renderer.RenderAsync(Parameters.TemplateNameTxt, model,
                                                                        Parameters.CultureInfo.TwoLetterISOLanguageName);

                mailMergeMessage.HtmlText = await renderer.RenderAsync(Parameters.TemplateNameHtml, model,
                                                                       Parameters.CultureInfo.TwoLetterISOLanguageName);

                yield return(mailMergeMessage);
            }
        }
Ejemplo n.º 6
0
        public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            if (Parameters.ContactForm is null)
            {
                throw new ArgumentNullException(nameof(Parameters.ContactForm), "One or more required parameters are null");
            }

            var model = new { Form = Parameters.ContactForm };

            {
                using var cs = new CultureSwitcher(Parameters.CultureInfo, Parameters.CultureInfo);

                var mailMergeMessage = mailMergeService.CreateStandardMessage();
                mailMergeMessage.EnableFormatter = false;
                mailMergeMessage.Subject         = model.Form.Subject; // user-generated, cannot localize!

                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.ContactFrom.Address));
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To, tenantContext.SiteContext.Email.ContactTo.Address));

                mailMergeMessage.PlainText = await renderer.RenderAsync(Templates.Email.TemplateName.ContactFormTxt, model,
                                                                        Parameters.CultureInfo.TwoLetterISOLanguageName);

                yield return(mailMergeMessage);
            }
        }
        private void Check_Selected_Server_Copied_To_Fields_And_Resets_Validation(Action raiseEvent)
        {
            foreach (var culture in new string[] { "en-GB", "en-US", "de-DE", "fr-FR", "ru-RU" })
            {
                TestCleanup();
                TestInitialise();

                using (var cultureSwitcher = new CultureSwitcher(culture)) {
                    _Presenter.Initialise(_View.Object);
                    var selectedLocation = SetupSelectedRebroadcastSettings(new RebroadcastSettings()
                    {
                        Enabled = true, Format = RebroadcastFormat.Port30003, Name = "AW", Port = 8000
                    });
                    SetupExpectedValidationFields(new ValidationResult[] { });

                    raiseEvent();

                    Assert.AreEqual(true, _View.Object.ServerEnabled);
                    Assert.AreEqual(RebroadcastFormat.Port30003, _View.Object.ServerFormat);
                    Assert.AreEqual("AW", _View.Object.ServerName);
                    Assert.AreEqual(8000, _View.Object.ServerPort);

                    _View.Verify(v => v.ShowValidationResults(It.IsAny <IEnumerable <ValidationResult> >()), Times.Once());
                }
            }
        }
Ejemplo n.º 8
0
        public void Describe_RebroadcastSettingsCollection_Correctly_Describes_Collection()
        {
            foreach (var culture in new string[] { "en-GB", "fr-FR" })
            {
                using (var cultureSwitcher = new CultureSwitcher(culture)) {
                    Assert.AreEqual(Strings.RebroadcastServersNoneConfigured, Describe.RebroadcastSettingsCollection(null));

                    var settings = new List <RebroadcastSettings>();
                    Assert.AreEqual(Strings.RebroadcastServersNoneConfigured, Describe.RebroadcastSettingsCollection(settings));

                    settings.Add(new RebroadcastSettings()
                    {
                        Enabled = false
                    });
                    Assert.AreEqual(String.Format(Strings.RebroadcastServersDescribeSingle, 0), Describe.RebroadcastSettingsCollection(settings));

                    settings[0].Enabled = true;
                    Assert.AreEqual(String.Format(Strings.RebroadcastServersDescribeSingle, 1), Describe.RebroadcastSettingsCollection(settings));

                    settings.Add(new RebroadcastSettings()
                    {
                        Enabled = false
                    });
                    Assert.AreEqual(String.Format(Strings.RebroadcastServersDescribeMany, 2, 1), Describe.RebroadcastSettingsCollection(settings));

                    settings[1].Enabled = true;
                    Assert.AreEqual(String.Format(Strings.RebroadcastServersDescribeMany, 2, 2), Describe.RebroadcastSettingsCollection(settings));
                }
            }
        }
        /// <summary>
        /// process localize tag helper
        /// </summary>
        /// <param name="context"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            var content = await output.GetChildContentAsync();

            if (!string.IsNullOrWhiteSpace(content.GetContent()))
            {
                var str = content.GetContent().ReplaceWhitespace(" ");

                LocalizedHtmlString _localStr;

                if (string.IsNullOrWhiteSpace(Culture))
                {
                    _localStr = GetLocalizedHtmlString(str);
                }
                else
                {
                    using (var cs = new CultureSwitcher(Culture))
                    {
                        _localStr = GetLocalizedHtmlString(str);
                    }
                }

                output.Content.SetHtmlContent(_localStr.Value);
            }
        }
Ejemplo n.º 10
0
        public void Describe_Bytes_Formats_Bytes_Correctly()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            using (var switcher = new CultureSwitcher(worksheet.String("Region"))) {
                Assert.AreEqual(worksheet.String("Description"), Describe.Bytes(worksheet.Long("Bytes")));
            }
        }
        public void JsonSerialiser_WriteObject_Does_Not_Leave_Current_Culture_Set_To_Invariant()
        {
            using (var cultureSwitcher = new CultureSwitcher("de-DE")) {
                _JsonSerialiser.Initialise(typeof(SmallClass));
                _JsonSerialiser.WriteObject(_Stream, new SmallClass());

                Assert.AreEqual("de-DE", Thread.CurrentThread.CurrentCulture.Name);
                Assert.AreEqual("de-DE", Thread.CurrentThread.CurrentUICulture.Name);
            }
        }
Ejemplo n.º 12
0
 public void BaseStationMessage_ToBaseStationString_Builds_Valid_BaseStation_Messages_From_A_BaseStationMessage_Object_For_Different_Cultures()
 {
     foreach (var cultureName in new string[] { "en-GB", "fr-FR", "de-DE", "ru-RU" })
     {
         using (var cultureSwitcher = new CultureSwitcher(cultureName)) {
             try {
                 Do_BaseStationMessage_ToBaseStationString_Builds_Valid_BaseStation_Messages_From_A_BaseStationMessage_Object();
             } catch (Exception ex) {
                 Assert.Fail("Failed to correctly translate a BaseStation message when culture was {0} - {1}", cultureName, ex.ToString());
             }
         }
     }
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Generates the <see cref="JavaScript"/> string.
        /// </summary>
        private void GenerateJavaScript()
        {
            var hasNamespace = !String.IsNullOrEmpty(Namespace);
            var objectName   = !hasNamespace ? "VRS.$$" : String.Format("VRS.{0}.$$", Namespace);
            var builder      = new StringBuilder();

            using (var cultureSwitcher = new CultureSwitcher()) {
                var cultureInfo      = Thread.CurrentThread.CurrentCulture;
                var localisedStrings = HtmlLocaliser.LocalisedStringsMap;

                builder.AppendLine(@"(function(VRS, undefined)");      // Note that this can be loaded before jQuery, so the usual parameter set is inappropriate
                builder.AppendLine(@"{");
                if (hasNamespace)
                {
                    builder.AppendLine(String.Format(@"    VRS.{0} = VRS.{0} || {{}}", Namespace));
                }
                builder.AppendLine(String.Format(@"    {0} = {0} || {{}};", objectName));
                builder.AppendLine();
                foreach (var name in localisedStrings.GetStringNames().OrderBy(r => r))
                {
                    var value = localisedStrings.GetLocalisedString(name);
                    value = HtmlLocaliser.ConvertResourceStringToJavaScriptString(value, '\'');
                    builder.AppendLine(String.Format("    {0}.{1} = '{2}';",
                                                     objectName,
                                                     name,
                                                     value
                                                     ));
                }
                builder.AppendLine();

                if (IncludesGlobalize)
                {
                    builder.AppendLine(@"    Globalize = {");
                    builder.AppendLine(@"        culture: function() {");
                    builder.AppendLine(@"            return {");
                    builder.AppendLine(@"                numberFormat: {");
                    builder.AppendLine(String.Format(@"                    name: '{0}',", cultureInfo.Name));
                    builder.AppendLine(String.Format(@"                    groupSizes: [{0}],", String.Join(", ", cultureInfo.NumberFormat.NumberGroupSizes.Select(r => r.ToString(CultureInfo.InvariantCulture)).ToArray())));
                    builder.AppendLine(String.Format(@"                    ',': '{0}',", cultureInfo.NumberFormat.CurrencyGroupSeparator));
                    builder.AppendLine(String.Format(@"                    '.': '{0}',", cultureInfo.NumberFormat.CurrencyDecimalSeparator));
                    builder.AppendLine(String.Format(@"                    pattern: ['{0}']", NegativePattern(cultureInfo.NumberFormat.NumberNegativePattern)));
                    builder.AppendLine(@"                }");
                    builder.AppendLine(@"            };");
                    builder.AppendLine(@"        }");
                    builder.AppendLine(@"    };");
                }

                builder.AppendLine(@"}(window.VRS = window.VRS || {}));");
                JavaScript = builder.ToString();
            }
        }
Ejemplo n.º 14
0
        public void LogDatabase_UpdateClient_Updates_Existing_Client_Records_In_Different_Cultures()
        {
            foreach (var culture in _Cultures)
            {
                using (var switcher = new CultureSwitcher(culture)) {
                    TestCleanup();
                    TestInitialise();

                    try {
                        LogDatabase_UpdateClient_Updates_Existing_Client_Records();
                    } catch (Exception ex) {
                        throw new InvalidOperationException($"Exception thrown when culture was {culture}", ex);
                    }
                }
            }
        }
Ejemplo n.º 15
0
        public void LogDatabase_EstablishSession_Writes_Session_Record_In_Different_Cultures()
        {
            foreach (var culture in _Cultures)
            {
                using (var switcher = new CultureSwitcher(culture)) {
                    TestCleanup();
                    TestInitialise();

                    try {
                        LogDatabase_EstablishSession_Writes_Session_Record();
                    } catch (Exception ex) {
                        throw new InvalidOperationException($"Exception thrown when culture was {culture}", ex);
                    }
                }
            }
        }
        public void LogDatabase_UpdateSession_Updates_Existing_Session_Record_In_Different_Cultures()
        {
            foreach (var culture in _Cultures)
            {
                using (var switcher = new CultureSwitcher(culture)) {
                    TestCleanup();
                    TestInitialise();

                    try {
                        LogDatabase_UpdateSession_Updates_Existing_Session_Record();
                    } catch (Exception ex) {
                        throw new InvalidOperationException(String.Format("Exception thrown when culture was {0}", culture), ex);
                    }
                }
            }
        }
Ejemplo n.º 17
0
        public void ProximityGadgetClosestAircraftJson_ToModel_Handles_Regional_Settings_Correctly()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            using (var switcher = new CultureSwitcher("de-DE")) {
                var aircraft = TestUtilities.CreateMockInstance <IAircraft>();
                aircraft.Object.Latitude  = 1;
                aircraft.Object.Longitude = 1;

                var aircraftProperty = typeof(IAircraft).GetProperty(worksheet.String("AircraftProperty"));
                var aircraftValue    = TestUtilities.ChangeType(worksheet.EString("AircraftValue"), aircraftProperty.PropertyType, new CultureInfo("en-GB"));
                aircraftProperty.SetValue(aircraft.Object, aircraftValue, null);

                var model = ProximityGadgetClosestAircraftJson.ToModel(aircraft.Object, 1.0, 1.0);

                var modelProperty = typeof(ProximityGadgetClosestAircraftJson).GetProperty(worksheet.String("JsonProperty"));
                var expected      = TestUtilities.ChangeType(worksheet.EString("JsonValue"), modelProperty.PropertyType, new CultureInfo("en-GB"));
                var actual        = modelProperty.GetValue(model, null);

                Assert.AreEqual(expected, actual, modelProperty.Name);
            }
        }
Ejemplo n.º 18
0
        public void ProximityGadgetClosestAircraftJson_ToModel_Fills_Calculated_Details_Correctly_For_Non_UK_Regions()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            using (var switcher = new CultureSwitcher("de-DE")) {
                var originLatitude  = worksheet.NDouble("GadgetLat");
                var originLongitude = worksheet.NDouble("GadgetLng");

                var aircraft = TestUtilities.CreateMockInstance <IAircraft>();

                bool hasPosition = worksheet.String("AircraftLat") != null;
                if (hasPosition)
                {
                    aircraft.Object.Latitude  = worksheet.NFloat("AircraftLat");
                    aircraft.Object.Longitude = worksheet.NFloat("AircraftLng");
                }

                var model = ProximityGadgetClosestAircraftJson.ToModel(aircraft.Object, originLatitude, originLongitude);

                Assert.AreEqual(worksheet.EString("Bearing"), model.BearingFromHere);
                Assert.AreEqual(worksheet.EString("Distance"), model.DistanceFromHere);
            }
        }
Ejemplo n.º 19
0
        public void PluginSettings_Read_Write_Works_In_Different_Regions()
        {
            using (var switcher = new CultureSwitcher("de-DE")) {
                _PluginSettings.Write(_Plugin, "int", 1234567890);
                Assert.AreEqual("1234567890", _PluginSettings.Values["x.int"]);
                Assert.AreEqual(1234567890, _PluginSettings.ReadInt(_Plugin, "int"));

                _PluginSettings.Write(_Plugin, "long", 1234567890987654321L);
                Assert.AreEqual("1234567890987654321", _PluginSettings.Values["x.long"]);
                Assert.AreEqual(1234567890987654321L, _PluginSettings.ReadLong(_Plugin, "long"));

                _PluginSettings.Write(_Plugin, "double", 1.2345);
                Assert.AreEqual("1.2345", _PluginSettings.Values["x.double"]);
                Assert.AreEqual(1.2345, _PluginSettings.ReadDouble(_Plugin, "double"));

                var dateTime = new DateTime(2010, 07, 31, 23, 22, 21, DateTimeKind.Local);
                _PluginSettings.Write(_Plugin, "dateTime", dateTime);
                Assert.AreEqual("2010-07-31 22:22:21Z", _PluginSettings.Values["x.dateTime"]);  // This assumes that the test is running under a timezone where 31/07/2010 is subject to daylight saving time
                var readBackDate = _PluginSettings.ReadDateTime(_Plugin, "dateTime");
                Assert.AreEqual(DateTimeKind.Local, readBackDate.Value.Kind);
                Assert.AreEqual(dateTime, readBackDate);
            }
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Handle when a message is addressed to the bot.
        /// </summary>
        /// <param name="turnContext">The turn context.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>A Task resolving to either a login card or the adaptive card of the Reddit post.</returns>
        /// <remarks>
        /// For more information on bot messaging in Teams, see the documentation
        /// https://docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/conversation-basics?tabs=dotnet#receive-a-message .
        /// </remarks>
        protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            turnContext = turnContext ?? throw new ArgumentNullException(nameof(turnContext));

            // Switch to user's locale for personal messages
            CultureSwitcher cultureSwitcher  = null;
            var             conversationType = turnContext.Activity.Conversation.ConversationType.ToEnum <ConversationType>();

            if (conversationType == ConversationType.Personal)
            {
                cultureSwitcher = new CultureSwitcher(turnContext.Activity.Locale, turnContext.Activity.Locale);
            }

            // The bot doesn't respond to direct message activities, so send the user a friendly error message
            string message;

            using (cultureSwitcher)
            {
                message = this.localizer.GetString("MessageDirectMessageError");
            }

            var activity = MessageFactory.Text(message);
            await turnContext.SendActivityAsync(activity, cancellationToken);
        }
Ejemplo n.º 21
0
        public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken)
        {
            var roundWithType = (await tenantContext.DbContext.AppDb.RoundRepository.GetRoundsWithTypeAsync(
                                     new PredicateExpression(
                                         RoundFields.TournamentId == tenantContext.TournamentContext.ApplicationTournamentId &
                                         RoundFields.Id == Parameters.RoundId), cancellationToken)).First();

            var teamUserRoundInfos = await tenantContext.DbContext.AppDb.TeamRepository.GetTeamUserRoundInfosAsync(
                new PredicateExpression(TeamUserRoundFields.TeamId == Parameters.TeamId &
                                        TeamUserRoundFields.TournamentId ==
                                        tenantContext.TournamentContext.ApplicationTournamentId), cancellationToken);

            var tournament =
                await tenantContext.DbContext.AppDb.TournamentRepository.GetTournamentAsync(new PredicateExpression(TournamentFields.Id ==
                                                                                                                    tenantContext.TournamentContext.ApplicationTournamentId), cancellationToken);

            var registeredBy = teamUserRoundInfos.First(tur => tur.UserId == Parameters.RegisteredByUserId);

            var model = new ConfirmTeamApplicationModel
            {
                IsNewApplication     = Parameters.IsNewApplication,
                RegisteredByName     = registeredBy.CompleteName,
                RegisteredByEmail    = registeredBy.Email,
                TeamName             = teamUserRoundInfos.First(tur => tur.TeamId == Parameters.TeamId).TeamNameForRound,
                TournamentName       = tournament !.Name,
                RoundDescription     = roundWithType.Description,
                RoundTypeDescription = roundWithType.RoundType.Description,
                UrlToEditApplication = Parameters.UrlToEditApplication
            };

            foreach (var tur in teamUserRoundInfos)
            {
                using var cs = new CultureSwitcher(Parameters.CultureInfo, Parameters.CultureInfo);

                model.IsRegisteringUser = Parameters.RegisteredByUserId == tur.UserId;

                var mailMergeMessage = mailMergeService.CreateStandardMessage();
                mailMergeMessage.EnableFormatter = false;
                mailMergeMessage.Subject         = model.IsNewApplication
                    ? localizer["Confirmation of the team registration"].Value
                    : localizer["Update of team registration"].Value;

                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.GeneralFrom.DisplayName, tenantContext.SiteContext.Email.GeneralFrom.Address));
                mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To,
                                                                             $"{tur.CompleteName}, Team '{tur.TeamName}'", tur.Email));
                if (!string.IsNullOrEmpty(tur.Email2))
                {
                    mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.CC,
                                                                                 $"{tur.CompleteName}, Team '{tur.TeamName}'", tur.Email2));
                }

                if (model.IsRegisteringUser)
                {
                    // Send registration info also to league administration
                    mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.Bcc,
                                                                                 tenantContext.SiteContext.Email.GeneralBcc.DisplayName,
                                                                                 tenantContext.SiteContext.Email.GeneralBcc.Address));
                }

                mailMergeMessage.PlainText = await renderer.RenderAsync(Templates.Email.TemplateName.ConfirmTeamApplicationTxt, model,
                                                                        Parameters.CultureInfo.TwoLetterISOLanguageName);

                yield return(mailMergeMessage);
            }
        }
Ejemplo n.º 22
0
 public string L(string toTranslate, string cultureName)
 {
     using var cs = new CultureSwitcher(new CultureInfo(cultureName), new CultureInfo(cultureName));
     return(_localizer[toTranslate]);
 }
Ejemplo n.º 23
0
        public void ServerConfigJson_ToModel_Fills_Model_Correctly()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            var isLocalAddress = true;

            using (var cultureSwitcher = new CultureSwitcher(worksheet.String("Culture"))) {
                var configProperty = worksheet.String("ConfigProperty");
                var isMono         = worksheet.Bool("IsMono");
                _RuntimeEnvironment.Setup(r => r.IsMono).Returns(isMono);

                switch (configProperty)
                {
                case "VrsVersion":                  _ApplicationInformation.Setup(r => r.ShortVersion).Returns(worksheet.String("Value")); break;

                case "IsLocalAddress":              isLocalAddress = worksheet.Bool("Value"); break;

                case "IsMono":                      break;

                case "InitialMapLatitude":          _Configuration.GoogleMapSettings.InitialMapLatitude = worksheet.Double("Value"); break;

                case "InitialMapLongitude":         _Configuration.GoogleMapSettings.InitialMapLongitude = worksheet.Double("Value"); break;

                case "InitialMapType":              _Configuration.GoogleMapSettings.InitialMapType = worksheet.EString("Value"); break;

                case "InitialMapZoom":              _Configuration.GoogleMapSettings.InitialMapZoom = worksheet.Int("Value"); break;

                case "InitialRefreshSeconds":       _Configuration.GoogleMapSettings.InitialRefreshSeconds = worksheet.Int("Value"); break;

                case "InitialSettings":             _Configuration.GoogleMapSettings.InitialSettings = worksheet.EString("Value"); break;

                case "MinimumRefreshSeconds":       _Configuration.GoogleMapSettings.MinimumRefreshSeconds = worksheet.Int("Value"); break;

                case "InitialDistanceUnit":         _Configuration.GoogleMapSettings.InitialDistanceUnit = worksheet.ParseEnum <DistanceUnit>("Value"); break;

                case "InitialHeightUnit":           _Configuration.GoogleMapSettings.InitialHeightUnit = worksheet.ParseEnum <HeightUnit>("Value"); break;

                case "InitialSpeedUnit":            _Configuration.GoogleMapSettings.InitialSpeedUnit = worksheet.ParseEnum <SpeedUnit>("Value"); break;

                case "CanRunReports":               _Configuration.InternetClientSettings.CanRunReports = worksheet.Bool("Value"); break;

                case "CanShowPinText":              _Configuration.InternetClientSettings.CanShowPinText = worksheet.Bool("Value"); break;

                case "TimeoutMinutes":              _Configuration.InternetClientSettings.TimeoutMinutes = worksheet.Int("Value"); break;

                case "CanPlayAudio":                _Configuration.InternetClientSettings.CanPlayAudio = worksheet.Bool("Value"); break;

                case "CanSubmitRoutes":             _Configuration.InternetClientSettings.CanSubmitRoutes = worksheet.Bool("Value"); break;

                case "CanShowPictures":             _Configuration.InternetClientSettings.CanShowPictures = worksheet.Bool("Value"); break;

                case "AudioEnabled":                _Configuration.AudioSettings.Enabled = worksheet.Bool("Value"); break;

                case "CanShowPolarPlots":           _Configuration.InternetClientSettings.CanShowPolarPlots = worksheet.Bool("Value"); break;

                case "UseMarkerLabels":             _Configuration.MonoSettings.UseMarkerLabels = worksheet.Bool("Value"); break;

                case "UseSvgGraphicsOnDesktop":     _Configuration.GoogleMapSettings.UseSvgGraphicsOnDesktop = worksheet.Bool("Value"); break;

                case "UseSvgGraphicsOnMobile":      _Configuration.GoogleMapSettings.UseSvgGraphicsOnMobile = worksheet.Bool("Value"); break;

                case "UseSvgGraphicsOnReports":     _Configuration.GoogleMapSettings.UseSvgGraphicsOnReports = worksheet.Bool("Value"); break;

                case "OpenStreetMapTileServerUrl":  _Configuration.GoogleMapSettings.OpenStreetMapTileServerUrl = worksheet.EString("Value"); break;

                default:                            throw new NotImplementedException();
                }
            }

            var model = ServerConfigJson.ToModel(isLocalAddress);

            var propertyName = worksheet.String("ConfigProperty");

            switch (propertyName)
            {
            case "VrsVersion":                      Assert.AreEqual(worksheet.EString("JsonValue"), model.VrsVersion); break;

            case "IsLocalAddress":                  Assert.AreEqual(worksheet.Bool("JsonValue"), model.IsLocalAddress); break;

            case "IsMono":                          Assert.AreEqual(worksheet.Bool("JsonValue"), model.IsMono); break;

            case "InitialMapLatitude":              Assert.AreEqual(worksheet.Double("JsonValue"), model.InitialLatitude); break;

            case "InitialMapLongitude":             Assert.AreEqual(worksheet.Double("JsonValue"), model.InitialLongitude); break;

            case "InitialMapType":                  Assert.AreEqual(worksheet.EString("JsonValue"), model.InitialMapType); break;

            case "InitialMapZoom":                  Assert.AreEqual(worksheet.Int("JsonValue"), model.InitialZoom); break;

            case "InitialRefreshSeconds":           Assert.AreEqual(worksheet.Int("JsonValue"), model.RefreshSeconds); break;

            case "InitialSettings":                 Assert.AreEqual(worksheet.EString("JsonValue"), model.InitialSettings); break;

            case "MinimumRefreshSeconds":           Assert.AreEqual(worksheet.Int("JsonValue"), model.MinimumRefreshSeconds); break;

            case "InitialDistanceUnit":             Assert.AreEqual(worksheet.String("JsonValue"), model.InitialDistanceUnit); break;

            case "InitialHeightUnit":               Assert.AreEqual(worksheet.String("JsonValue"), model.InitialHeightUnit); break;

            case "InitialSpeedUnit":                Assert.AreEqual(worksheet.String("JsonValue"), model.InitialSpeedUnit); break;

            case "CanRunReports":                   Assert.AreEqual(worksheet.Bool("JsonValue"), model.InternetClientCanRunReports); break;

            case "CanShowPinText":                  Assert.AreEqual(worksheet.Bool("JsonValue"), model.InternetClientCanShowPinText); break;

            case "TimeoutMinutes":                  Assert.AreEqual(worksheet.Int("JsonValue"), model.InternetClientTimeoutMinutes); break;

            case "CanPlayAudio":                    Assert.AreEqual(worksheet.Bool("JsonValue"), model.InternetClientsCanPlayAudio); break;

            case "CanSubmitRoutes":                 Assert.AreEqual(worksheet.Bool("JsonValue"), model.InternetClientsCanSubmitRoutes); break;

            case "CanShowPictures":                 Assert.AreEqual(worksheet.Bool("JsonValue"), model.InternetClientsCanSeeAircraftPictures); break;

            case "AudioEnabled":                    Assert.AreEqual(worksheet.Bool("JsonValue"), model.IsAudioEnabled); break;

            case "CanShowPolarPlots":               Assert.AreEqual(worksheet.Bool("JsonValue"), model.InternetClientsCanSeePolarPlots); break;

            case "UseMarkerLabels":                 Assert.AreEqual(worksheet.Bool("JsonValue"), model.UseMarkerLabels); break;

            case "UseSvgGraphicsOnDesktop":         Assert.AreEqual(worksheet.Bool("JsonValue"), model.UseSvgGraphicsOnDesktop); break;

            case "UseSvgGraphicsOnMobile":          Assert.AreEqual(worksheet.Bool("JsonValue"), model.UseSvgGraphicsOnMobile); break;

            case "UseSvgGraphicsOnReports":         Assert.AreEqual(worksheet.Bool("JsonValue"), model.UseSvgGraphicsOnReports); break;

            case "OpenStreetMapTileServerUrl":      Assert.AreEqual(worksheet.EString("JsonValue"), model.OpenStreetMapTileServerUrl); break;

            default:                                throw new NotImplementedException();
            }
        }