protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true) { var pluginModel = pluginDescriptor.ToModel(); pluginModel.LogoUrl = pluginDescriptor.GetLogUrl(_webHelper); //logo //pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); //if (prepareLocales) //{ // //locales // AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => // { // locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); // }); //} if (pluginDescriptor.Installed) { var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; } return(pluginModel); }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); } if (prepareStores) { //stores pluginModel.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); pluginModel.SelectedStoreIds = pluginDescriptor.LimitedToStores.ToArray(); pluginModel.LimitedToStores = pluginDescriptor.LimitedToStores.Count > 0; } //configuration URL return pluginModel; }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor) { var pluginModel = pluginDescriptor.ToModel(); if (pluginDescriptor.Installed) { pluginModel.ConfigurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } return(pluginModel); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var model = pluginDescriptor.ToModel(); // Using GetResource because T could fallback to NullLocalizer here. model.Group = Services.Localization.GetResource("Admin.Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { model.FriendlyName = pluginDescriptor.GetLocalizedValue(Services.Localization, "FriendlyName"); model.Description = pluginDescriptor.GetLocalizedValue(Services.Localization, "Description"); } // Locales AddLocales(_languageService, model.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.GetLocalizedValue(Services.Localization, "FriendlyName", languageId, false); locale.Description = pluginDescriptor.GetLocalizedValue(Services.Localization, "Description", languageId, false); }); // Stores model.SelectedStoreIds = Services.Settings.GetSettingByKey <string>(pluginDescriptor.GetSettingKey("LimitedToStores")).ToIntArray(); // Icon model.IconUrl = _pluginMediator.GetIconUrl(pluginDescriptor); if (pluginDescriptor.Installed) { // specify configuration URL only when a plugin is already installed if (pluginDescriptor.IsConfigurable) { model.ConfigurationUrl = Url.Action("ConfigurePlugin", new { systemName = pluginDescriptor.SystemName }); if (!forList) { var configurable = pluginDescriptor.Instance() as IConfigurable; string actionName; string controllerName; RouteValueDictionary routeValues; configurable.GetConfigurationRoute(out actionName, out controllerName, out routeValues); if (actionName.HasValue() && controllerName.HasValue()) { model.ConfigurationRoute = new RouteInfo(actionName, controllerName, routeValues); } } } // License label PrepareLicenseLabelModel(model.LicenseLabel, pluginDescriptor); } return(model); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor) { var pluginModel = pluginDescriptor.ToModel(); //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; } return(pluginModel); }
private PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor) { var pluginModel = pluginDescriptor.ToModel(); if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is ISmsProvider) { //SMS provider configurationUrl = Url.Action("ConfigureProvider", "Sms", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IPromotionFeed) { //promotion feed configurationUrl = Url.Action("ConfigureMethod", "PromotionFeed", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }, "http"); } pluginModel.ConfigurationUrl = configurationUrl; } return(pluginModel); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var model = pluginDescriptor.ToModel(); // Using GetResource because T could fallback to NullLocalizer here. model.Group = _services.Localization.GetResource("Admin.Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { model.FriendlyName = pluginDescriptor.FriendlyName; model.Description = pluginDescriptor.Description; } // Icon //model.IconUrl = _pluginMediator.GetIconUrl(pluginDescriptor); if (pluginDescriptor.Installed) { // specify configuration URL only when a plugin is already installed if (pluginDescriptor.IsConfigurable) { //model.ConfigurationUrl = Url.Action("ConfigurePlugin", new { systemName = pluginDescriptor.SystemName }); if (!forList) { var configurable = pluginDescriptor.Instance() as IConfigurable; configurable.GetConfigurationRoute(out var actionName, out var controllerName, out _); if (actionName.HasValue() && controllerName.HasValue()) { //model.ConfigurationRoute = new RouteInfo(actionName, controllerName, routeValues); } } } } return(model); }
/// <summary> /// Prepare plugin model /// </summary> /// <param name="model">Plugin model</param> /// <param name="pluginDescriptor">Plugin descriptor</param> /// <param name="excludeProperties">Whether to exclude populating of some properties of model</param> /// <returns>Plugin model</returns> public virtual PluginModel PreparePluginModel(PluginModel model, PluginDescriptor pluginDescriptor, bool excludeProperties = false) { Action <PluginLocalizedModel, int> localizedModelConfiguration = null; if (pluginDescriptor != null) { //fill in model values from the entity model = model ?? pluginDescriptor.ToModel(); model.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); model.SelectedStoreIds = pluginDescriptor.LimitedToStores; model.SelectedCustomerRoleIds = pluginDescriptor.LimitedToCustomerRoles; if (pluginDescriptor.Installed) { PrepareInstalledPluginModel(model, pluginDescriptor.Instance()); } //define localized model configuration action localizedModelConfiguration = (locale, languageId) => { var plugin = pluginDescriptor.Instance(); locale.FriendlyName = plugin.GetLocalizedFriendlyName(_localizationService, languageId, false); }; } //prepare localized models if (!excludeProperties) { model.Locales = _localizedModelFactory.PrepareLocalizedModels(localizedModelConfiguration); } //prepare model customer roles _aclSupportedModelFactory.PrepareModelCustomerRoles(model); //prepare available stores _storeMappingSupportedModelFactory.PrepareModelStores(model); return(model); }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance() .GetLocalizedFriendlyName(_localizationService, languageId, false); }); } //configuration URLs if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; //enabled/disabled (only for some plugin types) if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return(pluginModel); }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true, bool prepareAcl = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); } if (prepareStores) { //stores pluginModel.SelectedStoreIds = pluginDescriptor.LimitedToStores; var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { pluginModel.AvailableStores.Add(new SelectListItem { Text = store.Name, Value = store.Id.ToString(), Selected = pluginModel.SelectedStoreIds.Contains(store.Id) }); } } if (prepareAcl) { //acl pluginModel.SelectedCustomerRoleIds = pluginDescriptor.LimitedToCustomerRoles; foreach (var role in _customerService.GetAllCustomerRoles(true)) { pluginModel.AvailableCustomerRoles.Add(new SelectListItem { Text = role.Name, Value = role.Id.ToString(), Selected = pluginModel.SelectedCustomerRoleIds.Contains(role.Id) }); } } //configuration URLs if (pluginDescriptor.Installed) { //display configuration URL only when a plugin is already installed var pluginInstance = pluginDescriptor.Instance(); pluginModel.ConfigurationUrl = pluginInstance.GetConfigurationPageUrl(); //enabled/disabled (only for some plugin types) if (pluginInstance is IPaymentMethod) { //payment plugin pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is IPickupPointProvider) { //pickup point provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPickupPointProvider)pluginInstance).IsPickupPointProviderActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.InvariantCultureIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return(pluginModel); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor) { var pluginModel = pluginDescriptor.ToModel(); //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; //enabled/disabled (only for some plugin types) if (pluginInstance is IPaymentMethod) { //payment plugin pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.InvariantCultureIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return pluginModel; }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var pluginModel = pluginDescriptor.ToModel(); pluginModel.Group = _localizationService.GetResource("Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { pluginModel.FriendlyName = pluginDescriptor.GetLocalizedValue(_localizationService, "FriendlyName"); pluginModel.Description = pluginDescriptor.GetLocalizedValue(_localizationService, "Description"); } //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.GetLocalizedValue(_localizationService, "FriendlyName", languageId, false); locale.Description = pluginDescriptor.GetLocalizedValue(_localizationService, "Description", languageId, false); }); //stores pluginModel.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); pluginModel.SelectedStoreIds = _settingService.GetSettingByKey<string>(pluginDescriptor.GetSettingKey("LimitedToStores")).ToIntArray(); pluginModel.LimitedToStores = pluginModel.SelectedStoreIds.Count() > 0; // codehint: sm-add if (System.IO.File.Exists(Path.Combine(pluginDescriptor.PhysicalPath, "icon.png"))) { pluginModel.IconUrl = "~/Plugins/{0}/icon.png".FormatInvariant(pluginDescriptor.SystemName); } else { pluginModel.IconUrl = GetDefaultPluginUrl(pluginDescriptor); } if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; bool canChangeEnabled = false; bool isEnabled = false; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.InvariantCultureIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { // Widgets plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; pluginModel.CanChangeEnabled = canChangeEnabled; pluginModel.IsEnabled = isEnabled; } return pluginModel; }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); } if (prepareStores) { //stores pluginModel.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); pluginModel.SelectedStoreIds = pluginDescriptor.LimitedToStores.ToArray(); pluginModel.LimitedToStores = pluginDescriptor.LimitedToStores.Count > 0; } //configuration URLs if (pluginDescriptor.Installed) { //display configuration URL only when a plugin is already installed var pluginInstance = pluginDescriptor.Instance(); pluginModel.ConfigurationUrl = pluginInstance.GetConfigurationPageUrl(); //enabled/disabled (only for some plugin types) if (pluginInstance is IPaymentMethod) { //payment plugin pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.OrdinalIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return(pluginModel); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor) { var pluginModel = pluginDescriptor.ToModel(); //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; } return pluginModel; }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var model = pluginDescriptor.ToModel(); model.Group = T("Admin.Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { model.FriendlyName = pluginDescriptor.GetLocalizedValue(_services.Localization, "FriendlyName"); model.Description = pluginDescriptor.GetLocalizedValue(_services.Localization, "Description"); } //locales AddLocales(_languageService, model.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.GetLocalizedValue(_services.Localization, "FriendlyName", languageId, false); locale.Description = pluginDescriptor.GetLocalizedValue(_services.Localization, "Description", languageId, false); }); // Stores model.SelectedStoreIds = _services.Settings.GetSettingByKey<string>(pluginDescriptor.GetSettingKey("LimitedToStores")).ToIntArray(); // Icon model.IconUrl = _pluginMediator.GetIconUrl(pluginDescriptor); if (pluginDescriptor.Installed) { // specify configuration URL only when a plugin is already installed if (pluginDescriptor.IsConfigurable) { model.ConfigurationUrl = Url.Action("ConfigurePlugin", new { systemName = pluginDescriptor.SystemName }); if (!forList) { var configurable = pluginDescriptor.Instance() as IConfigurable; string actionName; string controllerName; RouteValueDictionary routeValues; configurable.GetConfigurationRoute(out actionName, out controllerName, out routeValues); if (actionName.HasValue() && controllerName.HasValue()) { model.ConfigurationRoute = new RouteInfo(actionName, controllerName, routeValues); } } } if (LicenseChecker.IsLicensablePlugin(pluginDescriptor)) { // we always show license button to serve ability to delete a key model.IsLicensable = true; model.LicenseUrl = Url.Action("LicensePlugin", new { systemName = pluginDescriptor.SystemName }); var license = LicenseChecker.GetLicense(pluginDescriptor.SystemName); if (license != null) // license\plugin has been used { model.LicenseState = license.State; model.TruncatedLicenseKey = license.TruncatedLicenseKey; model.RemainingDemoUsageDays = license.RemainingDemoDays; } } } return model; }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); } if (prepareStores) { //stores pluginModel.SelectedStoreIds = pluginDescriptor.LimitedToStores.ToList(); var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { pluginModel.AvailableStores.Add(new SelectListItem { Text = store.Name, Value = store.Id.ToString(), Selected = pluginModel.SelectedStoreIds.Contains(store.Id) }); } } //configuration URLs if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IPickupPointProvider) { //pickup point provider configurationUrl = Url.Action("ConfigurePickupPointProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; //enabled/disabled (only for some plugin types) if (pluginInstance is IPaymentMethod) { //payment plugin pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is IPickupPointProvider) { //pickup point provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPickupPointProvider)pluginInstance).IsPickupPointProviderActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.InvariantCultureIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return pluginModel; }
private PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor) { var pluginModel = pluginDescriptor.ToModel(); if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is ISmsProvider) { //SMS provider configurationUrl = Url.Action("ConfigureProvider", "Sms", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IPromotionFeed) { //promotion feed configurationUrl = Url.Action("ConfigureMethod", "PromotionFeed", new { systemName = pluginDescriptor.SystemName }, "http"); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }, "http"); } pluginModel.ConfigurationUrl = configurationUrl; } return pluginModel; }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var pluginModel = pluginDescriptor.ToModel(); pluginModel.Group = _localizationService.GetResource("Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { pluginModel.FriendlyName = pluginDescriptor.GetLocalizedValue(_localizationService, "FriendlyName"); pluginModel.Description = pluginDescriptor.GetLocalizedValue(_localizationService, "Description"); } //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.GetLocalizedValue(_localizationService, "FriendlyName", languageId, false); locale.Description = pluginDescriptor.GetLocalizedValue(_localizationService, "Description", languageId, false); }); //stores pluginModel.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); pluginModel.SelectedStoreIds = _settingService.GetSettingByKey <string>(pluginDescriptor.GetSettingKey("LimitedToStores")).ToIntArray(); pluginModel.LimitedToStores = pluginModel.SelectedStoreIds.Count() > 0; // codehint: sm-add if (System.IO.File.Exists(Path.Combine(pluginDescriptor.PhysicalPath, "icon.png"))) { pluginModel.IconUrl = "~/Plugins/{0}/icon.png".FormatInvariant(pluginDescriptor.SystemName); } else { pluginModel.IconUrl = GetDefaultPluginUrl(pluginDescriptor); } if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; bool canChangeEnabled = false; bool isEnabled = false; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.InvariantCultureIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { // Widgets plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); canChangeEnabled = true; isEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; pluginModel.CanChangeEnabled = canChangeEnabled; pluginModel.IsEnabled = isEnabled; } return(pluginModel); }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true, bool prepareAcl = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); } if (prepareStores) { //stores pluginModel.SelectedStoreIds = pluginDescriptor.LimitedToStores; var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { pluginModel.AvailableStores.Add(new SelectListItem { Text = store.Name, Value = store.Id.ToString(), Selected = pluginModel.SelectedStoreIds.Contains(store.Id) }); } } if (prepareAcl) { //acl pluginModel.SelectedCustomerRoleIds = pluginDescriptor.LimitedToCustomerRoles; foreach (var role in _customerService.GetAllCustomerRoles(true)) { pluginModel.AvailableCustomerRoles.Add(new SelectListItem { Text = role.Name, Value = role.Id.ToString(), Selected = pluginModel.SelectedCustomerRoleIds.Contains(role.Id) }); } } //configuration URLs if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; //enabled/disabled (only for some plugin types) if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return(pluginModel); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var model = pluginDescriptor.ToModel(); model.Group = T("Admin.Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { model.FriendlyName = pluginDescriptor.GetLocalizedValue(_services.Localization, "FriendlyName"); model.Description = pluginDescriptor.GetLocalizedValue(_services.Localization, "Description"); } //locales AddLocales(_languageService, model.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.GetLocalizedValue(_services.Localization, "FriendlyName", languageId, false); locale.Description = pluginDescriptor.GetLocalizedValue(_services.Localization, "Description", languageId, false); }); // Stores model.SelectedStoreIds = _services.Settings.GetSettingByKey <string>(pluginDescriptor.GetSettingKey("LimitedToStores")).ToIntArray(); // Icon model.IconUrl = _pluginMediator.GetIconUrl(pluginDescriptor); if (pluginDescriptor.Installed) { // specify configuration URL only when a plugin is already installed if (pluginDescriptor.IsConfigurable) { model.ConfigurationUrl = Url.Action("ConfigurePlugin", new { systemName = pluginDescriptor.SystemName }); if (!forList) { var configurable = pluginDescriptor.Instance() as IConfigurable; string actionName; string controllerName; RouteValueDictionary routeValues; configurable.GetConfigurationRoute(out actionName, out controllerName, out routeValues); if (actionName.HasValue() && controllerName.HasValue()) { model.ConfigurationRoute = new RouteInfo(actionName, controllerName, routeValues); } } } if (LicenseChecker.IsLicensablePlugin(pluginDescriptor)) { // we always show license button to serve ability to delete a key model.IsLicensable = true; model.LicenseUrl = Url.Action("LicensePlugin", new { systemName = pluginDescriptor.SystemName }); var license = LicenseChecker.GetLicense(pluginDescriptor.SystemName); if (license != null) // license\plugin has been used { model.LicenseState = license.State; model.TruncatedLicenseKey = license.TruncatedLicenseKey; model.RemainingDemoUsageDays = license.RemainingDemoDays; } } } return(model); }
protected virtual PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool prepareLocales = true, bool prepareStores = true) { var pluginModel = pluginDescriptor.ToModel(); //logo pluginModel.LogoUrl = pluginDescriptor.GetLogoUrl(_webHelper); if (prepareLocales) { //locales AddLocales(_languageService, pluginModel.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.Instance().GetLocalizedFriendlyName(_localizationService, languageId, false); }); } if (prepareStores) { //stores pluginModel.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); pluginModel.SelectedStoreIds = pluginDescriptor.LimitedToStores.ToArray(); pluginModel.LimitedToStores = pluginDescriptor.LimitedToStores.Count > 0; } //configuration URLs if (pluginDescriptor.Installed) { //specify configuration URL only when a plugin is already installed //plugins do not provide a general URL for configuration //because some of them have some custom URLs for configuration //for example, discount requirement plugins require additional parameters and attached to a certain discount var pluginInstance = pluginDescriptor.Instance(); string configurationUrl = null; if (pluginInstance is IPaymentMethod) { //payment plugin configurationUrl = Url.Action("ConfigureMethod", "Payment", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method configurationUrl = Url.Action("ConfigureProvider", "Shipping", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is ITaxProvider) { //tax provider configurationUrl = Url.Action("ConfigureProvider", "Tax", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method configurationUrl = Url.Action("ConfigureMethod", "ExternalAuthentication", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureWidget", "Widget", new { systemName = pluginDescriptor.SystemName }); } else if (pluginInstance is IMiscPlugin) { //Misc plugins configurationUrl = Url.Action("ConfigureMiscPlugin", "Plugin", new { systemName = pluginDescriptor.SystemName }); } pluginModel.ConfigurationUrl = configurationUrl; //enabled/disabled (only for some plugin types) if (pluginInstance is IPaymentMethod) { //payment plugin pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IPaymentMethod)pluginInstance).IsPaymentMethodActive(_paymentSettings); } else if (pluginInstance is IShippingRateComputationMethod) { //shipping rate computation method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IShippingRateComputationMethod)pluginInstance).IsShippingRateComputationMethodActive(_shippingSettings); } else if (pluginInstance is ITaxProvider) { //tax provider pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = pluginDescriptor.SystemName.Equals(_taxSettings.ActiveTaxProviderSystemName, StringComparison.OrdinalIgnoreCase); } else if (pluginInstance is IExternalAuthenticationMethod) { //external auth method pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IExternalAuthenticationMethod)pluginInstance).IsMethodActive(_externalAuthenticationSettings); } else if (pluginInstance is IWidgetPlugin) { //Misc plugins pluginModel.CanChangeEnabled = true; pluginModel.IsEnabled = ((IWidgetPlugin)pluginInstance).IsWidgetActive(_widgetSettings); } } return(pluginModel); }
protected PluginModel PreparePluginModel(PluginDescriptor pluginDescriptor, bool forList = true) { var model = pluginDescriptor.ToModel(); model.Group = _localizationService.GetResource("Admin.Plugins.KnownGroup." + pluginDescriptor.Group); if (forList) { model.FriendlyName = pluginDescriptor.GetLocalizedValue(_localizationService, "FriendlyName"); model.Description = pluginDescriptor.GetLocalizedValue(_localizationService, "Description"); } //locales AddLocales(_languageService, model.Locales, (locale, languageId) => { locale.FriendlyName = pluginDescriptor.GetLocalizedValue(_localizationService, "FriendlyName", languageId, false); locale.Description = pluginDescriptor.GetLocalizedValue(_localizationService, "Description", languageId, false); }); // Stores model.SelectedStoreIds = _settingService.GetSettingByKey<string>(pluginDescriptor.GetSettingKey("LimitedToStores")).ToIntArray(); // Icon model.IconUrl = _pluginMediator.GetIconUrl(pluginDescriptor); if (pluginDescriptor.Installed) { // specify configuration URL only when a plugin is already installed if (pluginDescriptor.IsConfigurable) { model.ConfigurationUrl = Url.Action("ConfigurePlugin", new { systemName = pluginDescriptor.SystemName }); if (!forList) { var configurable = pluginDescriptor.Instance() as IConfigurable; string actionName; string controllerName; RouteValueDictionary routeValues; configurable.GetConfigurationRoute(out actionName, out controllerName, out routeValues); if (actionName.HasValue() && controllerName.HasValue()) { model.ConfigurationRoute = new RouteInfo(actionName, controllerName, routeValues); } } } } return model; }