diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccountConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccountConfigurationController.java index d76bd38bf434a8647641a3c98b784ad38b3b5065..7f3ca48fa0974bc0ead4a130211bc473036ca010 100644 --- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccountConfigurationController.java +++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/PaypalCheckoutAccountConfigurationController.java @@ -22,10 +22,13 @@ package org.olat.resource.accesscontrol.provider.paypalcheckout.ui; import java.util.List; import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.components.util.KeyValues; import org.olat.core.gui.control.Controller; @@ -44,9 +47,12 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class PaypalCheckoutAccountConfigurationController extends FormBasicController { + private static final String[] onKeys = new String[] { "on" }; + private TextElement clientIdEl; private TextElement clientSecretEl; private SingleSelection currencyEl; + private MultipleSelectionElement enableEl; private final List<String> paypalCurrencies; @@ -59,6 +65,7 @@ public class PaypalCheckoutAccountConfigurationController extends FormBasicContr super(ureq, wControl); paypalCurrencies = paypalModule.getPaypalCurrencies(); initForm(ureq); + updateUI(); } @Override @@ -69,41 +76,90 @@ public class PaypalCheckoutAccountConfigurationController extends FormBasicContr @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { setFormTitle("checkout.config.title"); + setFormDescription("checkout.config.description"); + + String[] onValues = new String[] { translate("on") }; + enableEl = uifactory.addCheckboxesHorizontal("enable", "paypal.enable", formLayout, onKeys, onValues); + enableEl.select(onKeys[0], acModule.isPaypalCheckoutEnabled()); + enableEl.addActionListener(FormEvent.ONCHANGE); + + KeyValues currencies = new KeyValues(); + paypalCurrencies.forEach(currency -> currencies.add(KeyValues.entry(currency, currency))); + currencyEl = uifactory.addDropdownSingleselect("currency", "currency", formLayout, currencies.keys(), currencies.values(), null); + if(StringHelper.containsNonWhitespace(paypalModule.getPaypalCurrency())) { + currencyEl.select(paypalModule.getPaypalCurrency(), true); + } else { + currencyEl.select("CHF", true); + } + + String clientId = paypalModule.getClientId(); + clientIdEl = uifactory.addTextElement("checkout.client.id", 128, clientId, formLayout); + String clientSecret = paypalModule.getClientSecret(); + clientSecretEl = uifactory.addTextElement("checkout.client.secret", 128, clientSecret, formLayout); - if(acModule.isPaypalEnabled()) { - setFormDescription("checkout.config.description"); - setFormContextHelp("PayPal Configuration"); - - KeyValues currencies = new KeyValues(); - paypalCurrencies.forEach(currency -> currencies.add(KeyValues.entry(currency, currency))); - currencyEl = uifactory.addDropdownSingleselect("currency", "currency", formLayout, currencies.keys(), currencies.values(), null); - if(StringHelper.containsNonWhitespace(paypalModule.getPaypalCurrency())) { - currencyEl.select(paypalModule.getPaypalCurrency(), true); - } else { - currencyEl.select("CHF", true); - } - - String clientId = paypalModule.getClientId(); - clientIdEl = uifactory.addTextElement("checkout.client.id", 128, clientId, formLayout); - String clientSecret = paypalModule.getClientSecret(); - clientSecretEl = uifactory.addTextElement("checkout.client.secret", 128, clientSecret, formLayout); + final FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator()); + formLayout.add(buttonGroupLayout); + + uifactory.addFormSubmitButton("save", buttonGroupLayout); + } + + private void updateUI() { + boolean enabled = enableEl.isAtLeastSelected(1); + currencyEl.setVisible(enabled); + clientIdEl.setVisible(enabled); + clientSecretEl.setVisible(enabled); + } + + @Override + protected boolean validateFormLogic(UserRequest ureq) { + boolean allOk = super.validateFormLogic(ureq); - final FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator()); - formLayout.add(buttonGroupLayout); + currencyEl.clearError(); + if(enableEl.isAtLeastSelected(1) && !currencyEl.isOneSelected()) { + currencyEl.setErrorKey("form.legende.mandatory", null); + allOk &= false; + } + + allOk &= validateId(clientIdEl); + allOk &= validateId(clientSecretEl); + return allOk; + } + + private boolean validateId(TextElement element) { + boolean allOk = true; + + element.clearError(); + if(enableEl.isAtLeastSelected(1) + && !StringHelper.containsNonWhitespace(element.getValue())) { + element.setErrorKey("form.legende.mandatory", null); + allOk &= false; - uifactory.addFormSubmitButton("save", buttonGroupLayout); - } else { - String fxSupport = "contact@frentix.com"; - setFormWarning("config.disabled.warning", new String[]{fxSupport}); } + + return allOk; + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if(source == enableEl) { + updateUI(); + } + super.formInnerEvent(ureq, source, event); } @Override protected void formOK(UserRequest ureq) { - paypalModule.setClientId(clientIdEl.getValue()); - paypalModule.setClientSecret(clientSecretEl.getValue()); - if(currencyEl.isOneSelected() && paypalCurrencies.contains(currencyEl.getSelectedKey())) { - paypalModule.setPaypalCurrency(currencyEl.getSelectedKey()); + boolean enabled = enableEl.isAtLeastSelected(1); + acModule.setPaypalCheckoutEnabled(enabled); + if(enabled) { + paypalModule.setClientId(clientIdEl.getValue()); + paypalModule.setClientSecret(clientSecretEl.getValue()); + if(currencyEl.isOneSelected() && paypalCurrencies.contains(currencyEl.getSelectedKey())) { + paypalModule.setPaypalCurrency(currencyEl.getSelectedKey()); + } + } else { + paypalModule.setClientId(null); + paypalModule.setClientSecret(null); } showInfo("saved"); } diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties index eb7ce8b9eafe7e558c51ee807eb6bb805c68c2b1..f1fc8b276e78f1d22ebce26c185a57533912ea1a 100644 --- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_de.properties @@ -6,7 +6,7 @@ checkout.client.id=Client ID checkout.client.secret=Client secret checkout.config.description=Konfigurieren Sie die PayPal API-Berechtigung f\u00FCr den PayPal Zugang mit den Elementen Client ID und Client Secret. Diese zwei Sicherheitselemente m\u00FCssen Sie zuerst in Ihrem PayPal Businesskonto erstellen. <strong>OpenOlat unterst\u00FCtzt nicht nachtr\u00E4gliche Anderungen am Bestellungen von Ihrem Paypal Konto.</strong> checkout.config.title=Paypal Checkout konfigurieren -config.disabled.warning=Warning +config.disabled.warning=Das PayPal Bezahlungsmodul ist f\u00FCr dieses System nicht freigeschaltet. Um Buchungen \u00FCber PayPal abwickeln zu k\u00F6nnen nehmen Sie bitte Kontakt auf mit <a href="mailto:{0}">{0}</a>. currency=W\u00E4hrung currency.error=Fehler in der W\u00E4hrungsauswahl delivery=Einka\u00FCfer @@ -14,13 +14,16 @@ filter.canceled=Abgebrochen filter.completed=Erfolgreich abgeschlossen filter.created=Neue Paypal Bestellung filter.error=Fehler +filter.inprocess=In Bearbeitung filter.new=Neu (OpenOlat) +filter.pending=Schwenbend offer.description=$org.olat.resource.accesscontrol.ui\:offer.description offer.price=Preis oo.order.nr=Bestellung ID (in OpenOlat) paypal.before.redirect.error=Unerwarteter Fehler paypal.capture.id=Capture ID paypal.checkout.method=Paypal Checkout v2 +paypal.enable=Paypal einschalten paypal.invoice.id=Invoice ID paypal.menu.title=Paypal paypal.menu.title.alt=Paypal Checkout konfigurieren diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties index ac5533ca817497c2e614140749472485f84653e0..de4ee5d67c9f7a384ed1e34c0431a980fefa3921 100644 --- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_en.properties @@ -6,7 +6,7 @@ checkout.client.id=Client ID checkout.client.secret=Client secret checkout.config.description=Configure your authorisation to use your Paypal count with the Client ID and Client Secret. These two security elements must be created in your Paypal Business Account. <strong>OpenOlat doesn't support subsequent changes in order from your Paypal Account (yet).</strong> checkout.config.title=Configure Paypal Checkout -config.disabled.warning=config.disabled.warning +config.disabled.warning=The PayPal payment module is not activated for this system. To handle bookings via PayPal can you please contact <a href="mailto:{0}">{0}</a>. currency=Currency currency.error=Currency error delivery=Buyer @@ -14,13 +14,16 @@ filter.canceled=Cancelled filter.completed=Closed successfully filter.created=New Paypal order filter.error=Error +filter.inprocess=In process filter.new=New order (OpenOlat) +filter.pending=Pending offer.description=$org.olat.resource.accesscontrol.ui\:offer.description offer.price=Price oo.order.nr=Order ID (in OpenOlat) paypal.before.redirect.error=Unexpected error paypal.capture.id=Capture ID paypal.checkout.method=Paypal Checkout v2 +paypal.enable=Enable Paypal paypal.invoice.id=Invoice ID paypal.menu.title=Paypal paypal.menu.title.alt=Configure Paypal Checkout diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties index 72fc4a731513d244df34da58bca21c93f4ac31ec..5e14391fa4563b7c2bfe1bd6b6c9733a364c2342 100644 --- a/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypalcheckout/ui/_i18n/LocalStrings_fr.properties @@ -5,6 +5,7 @@ access.paypal.title=Payer avec Paypal checkout.client.id=Client ID checkout.client.secret=Client secret checkout.config.title=Configurer Paypal Checkout +config.disabled.warning=Le module de paiement PayPal n'est pas activ\u00E9 pour ce syst\u00E8me. Afin de traiter les r\u00E9servations via PayPal, veuillez entrer en contact avec <a href="mailto:{0}">{0}</a>. currency=Monnaie currency.error=Erreur, monnaie incorrecte delivery=Acheteur @@ -12,7 +13,9 @@ filter.canceled=Annul\u00E9 filter.completed=Compl\u00E9t\u00E9 avec succ\u00E8s filter.created=Nouvelle commande Paypal filter.error=Erreur +filter.inprocess=En cours filter.new=Nouvelle commande (OpenOlat) +filter.pending=Pendant offer.description=$org.olat.resource.accesscontrol.ui\:offer.description offer.price=Prix oo.order.nr=ID commande (OpenOlat) @@ -20,6 +23,7 @@ paypal.before.redirect.error=Erreur inattendue paypal.capture.id=Capture ID paypal.checkout.method=Paypal Checkout v2 paypal.config.description=Configurez l'autorisation d'acc\u00E8s \u00E0 l'API PayPal\: Client ID et Client Secret. Ce sont les deux \u00E9l\u00E9ments de s\u00E9curit\u00E9 dont vous avez besoin pour cr\u00E9er votre compte PayPal Business. +paypal.enable=Activ\u00E8 Paypal paypal.invoice.id=Facture ID paypal.menu.title=Paypal paypal.menu.title.alt=Configurer Paypal Checkout