diff --git a/README.md b/README.md index f41afc667..64fb27c19 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ addon | version | maintainers | summary [website_event_membership_restriction](website_event_membership_restriction/) | 18.0.1.0.0 | | Restrict event registration to members only [website_event_questions_by_ticket](website_event_questions_by_ticket/) | 18.0.1.0.0 | | Events Questions conditional to the chosen ticket [website_event_require_legal](website_event_require_legal/) | 18.0.1.0.0 | | Website Event Require Legal +[website_event_require_login](website_event_require_login/) | 18.0.1.0.0 | mathben | Website Event Require login [//]: # (end addons) diff --git a/website_event_require_login/README.rst b/website_event_require_login/README.rst new file mode 100644 index 000000000..aa0e5f9c4 --- /dev/null +++ b/website_event_require_login/README.rst @@ -0,0 +1,110 @@ +=========================== +Website Event Require Login +=========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:363a745d898a4c188d6745c3ba3893619e53c43b46d151476442727b254a5cf6 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github + :target: https://github.com/OCA/event/tree/18.0/website_event_require_login + :alt: OCA/event +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/event-18-0/event-18-0-website_event_require_login + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/event&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Require login for event registration from the website. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +1. Go to an event and set the Website Require option on. + +Usage +===== + +In the website go to an event that requires login and try to register +being logged out. + +If the event is set up to require login, a pop up will be shown +requiring the user to do so. + +Known issues / Roadmap +====================== + +- An interesting option could be to be able to hide events to + unregistered users. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa +* TechnoLibre + +Contributors +------------ + +- `Tecnativa `__: + + - David Vidal + - Rafael Blasco + +- `Sygel `__: + + - Manuel Regidor + +- `TechnoLibre `__: + + - Mathieu Benoit + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/event `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/website_event_require_login/__init__.py b/website_event_require_login/__init__.py new file mode 100644 index 000000000..91c5580fe --- /dev/null +++ b/website_event_require_login/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/website_event_require_login/__manifest__.py b/website_event_require_login/__manifest__.py new file mode 100644 index 000000000..fe5982ba4 --- /dev/null +++ b/website_event_require_login/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2019 Tecnativa - David Vidal +# Copyright 2026 TechnoLibre - Mathieu Benoit +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Website Event Require Login", + "version": "18.0.1.0.0", + "author": "Tecnativa, " "Odoo Community Association (OCA), " "TechnoLibre", + "website": "https://github.com/OCA/event", + "category": "Event", + "depends": ["website_event"], + "data": ["views/event_views.xml", "views/website_event_templates.xml"], + "assets": { + "web.assets_frontend": [ + "website_event_require_login/static/src/js/registration_login_required.esm.js", + ], + "web.assets_tests": [ + "/website_event_require_login/static/tests/tours/*", + ], + }, + "installable": True, + "license": "AGPL-3", +} diff --git a/website_event_require_login/controllers/__init__.py b/website_event_require_login/controllers/__init__.py new file mode 100644 index 000000000..12a7e529b --- /dev/null +++ b/website_event_require_login/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/website_event_require_login/controllers/main.py b/website_event_require_login/controllers/main.py new file mode 100644 index 000000000..2474b9bbc --- /dev/null +++ b/website_event_require_login/controllers/main.py @@ -0,0 +1,19 @@ +# Copyright 2019 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.http import request, route + +from odoo.addons.website_event.controllers.main import WebsiteEventController + + +class RequireLoginToRegister(WebsiteEventController): + @route() + def registration_new(self, event, **post): + public_user = request.env.user == request.website.user_id + if public_user and event.website_require_login: + return request.env["ir.ui.view"]._render_template( + "website_event_require_login" + ".modal_attendees_registration_login_required", + {"event_url": event.website_url}, + ) + return super().registration_new(event, **post) diff --git a/website_event_require_login/i18n/ca.po b/website_event_require_login/i18n/ca.po new file mode 100644 index 000000000..1d4b9b6e7 --- /dev/null +++ b/website_event_require_login/i18n/ca.po @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-23 15:37+0000\n" +"Last-Translator: Eugeni Chafer \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Tancar" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Esdeveniment" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Si està establert, l'usuari ha d'estar registrat per a poder inscriure " +"assistents des del portal." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Registre" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Registre obligatori" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Registre obligatori per a inscripcions des del portal" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "Has d'estar registrat per a poder inscriure't en aquest esdeveniment." + +#~ msgid "×" +#~ msgstr "&vegades;" diff --git a/website_event_require_login/i18n/de.po b/website_event_require_login/i18n/de.po new file mode 100644 index 000000000..f62a418d4 --- /dev/null +++ b/website_event_require_login/i18n/de.po @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-07-03 12:49+0000\n" +"Last-Translator: André Volksdorf \n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Schließen" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Veranstaltung" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Wenn diese Option aktiviert ist, muss ein Benutzer angemeldet sein, um " +"Teilnehmer über die Website registrieren zu können." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Anmelden" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Anmeldung erforderlich" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Anmeldung für Website-Registrierungen erforderlich" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "" +"Sie müssen eingeloggt sein, um sich für diese Veranstaltung anzumelden." + +#~ msgid "×" +#~ msgstr "×" diff --git a/website_event_require_login/i18n/es.po b/website_event_require_login/i18n/es.po new file mode 100644 index 000000000..469ebc89f --- /dev/null +++ b/website_event_require_login/i18n/es.po @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-23 14:23+0000\n" +"PO-Revision-Date: 2023-07-22 20:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Cerrar" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Evento" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Si está establecido, el usuario deberá iniciar sesión para registrar " +"asistentes desde el sito web." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Iniciar sesión" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Inicio de sesión requerido" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Requerir inicio de sesión para registros desde la página web" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "Debe iniciar sesión para poder regitrase en este evento." + +#~ msgid "×" +#~ msgstr "&tiempos;" diff --git a/website_event_require_login/i18n/fi.po b/website_event_require_login/i18n/fi.po new file mode 100644 index 000000000..3a36c0fd0 --- /dev/null +++ b/website_event_require_login/i18n/fi.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-09-02 11:42+0000\n" +"Last-Translator: Timo Talvitie \n" +"Language-Team: none\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Sulje" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Tapahtuma" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Jos asetettu, käyttäjän pitää olla kirjautunut sisään voidakseen ilmoittaa " +"tapahtumaan osallistujia verkkosivulla." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Kirjaudu sisään" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Kirjautuminen vaaditaan" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Vaadi kirjautuminen verkkosivuilmoittautumisille" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "" +"Sinun pitää olla kirjautunut sisään rekisteröityäksesi tähän tapahtumaan." diff --git a/website_event_require_login/i18n/fi_FI.po b/website_event_require_login/i18n/fi_FI.po new file mode 100644 index 000000000..f82bee83d --- /dev/null +++ b/website_event_require_login/i18n/fi_FI.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fi_FI\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "" diff --git a/website_event_require_login/i18n/fr.po b/website_event_require_login/i18n/fr.po new file mode 100644 index 000000000..8fdec14da --- /dev/null +++ b/website_event_require_login/i18n/fr.po @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-07-03 16:47+0000\n" +"Last-Translator: Rémi \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Fermer" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Évènement" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Si coché, l'utilisateur doit être connecté pour inscrire des participant " +"depuis le site web." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Se connecter" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Connexion requise" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Connexion requise pour les inscriptions sur le site web" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "Vous devez être connecté pour vous inscrire à cet évènement." + +#~ msgid "×" +#~ msgstr "& ; fois ;" diff --git a/website_event_require_login/i18n/it.po b/website_event_require_login/i18n/it.po new file mode 100644 index 000000000..cf516d295 --- /dev/null +++ b/website_event_require_login/i18n/it.po @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-23 14:25+0000\n" +"PO-Revision-Date: 2023-12-31 18:39+0000\n" +"Last-Translator: mymage \n" +"Language-Team: \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Chiudi" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Evento" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Se selezionata, un utente deve accedere per poter iscrivere partecipanti dal " +"sito web." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Login" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Richiesto il login" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Richiede login per le iscrizioni dal sito web" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "Bisogna aver effettuato il login per registrarsi all'evento." + +#~ msgid "×" +#~ msgstr "&volte;" diff --git a/website_event_require_login/i18n/pt.po b/website_event_require_login/i18n/pt.po new file mode 100644 index 000000000..11a3bfe98 --- /dev/null +++ b/website_event_require_login/i18n/pt.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-06-23 14:25+0000\n" +"PO-Revision-Date: 2023-06-23 14:25+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "Fechar" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "Evento" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" +"Se definido, um utilizador deve ter sessão iniciada para poder registar os " +"participantes através do website." + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "Início de Sessão" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "Login Obrigatório" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "Exigir login para registos através do website" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "Tem que ter sessão iniciada para se poder registar neste evento." diff --git a/website_event_require_login/i18n/website_event_require_login.pot b/website_event_require_login/i18n/website_event_require_login.pot new file mode 100644 index 000000000..4eaa914b5 --- /dev/null +++ b/website_event_require_login/i18n/website_event_require_login.pot @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_event_require_login +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Close" +msgstr "" + +#. module: website_event_require_login +#: model:ir.model,name:website_event_require_login.model_event_event +msgid "Event" +msgstr "" + +#. module: website_event_require_login +#: model:ir.model.fields,help:website_event_require_login.field_event_event__website_require_login +msgid "" +"If set, a user must be logged in to be able to register attendees from the " +"website." +msgstr "" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login" +msgstr "" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "Login required" +msgstr "" + +#. module: website_event_require_login +#: model:ir.model.fields,field_description:website_event_require_login.field_event_event__website_require_login +msgid "Require login for website registrations" +msgstr "" + +#. module: website_event_require_login +#: model_terms:ir.ui.view,arch_db:website_event_require_login.modal_attendees_registration_login_required +msgid "You must be logged in to register for this event." +msgstr "" diff --git a/website_event_require_login/models/__init__.py b/website_event_require_login/models/__init__.py new file mode 100644 index 000000000..44ad1cba0 --- /dev/null +++ b/website_event_require_login/models/__init__.py @@ -0,0 +1 @@ +from . import event diff --git a/website_event_require_login/models/event.py b/website_event_require_login/models/event.py new file mode 100644 index 000000000..dca60bd57 --- /dev/null +++ b/website_event_require_login/models/event.py @@ -0,0 +1,13 @@ +# Copyright 2019 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class EventEvent(models.Model): + _inherit = "event.event" + + website_require_login = fields.Boolean( + string="Require login for website registrations", + help="If set, a user must be logged in to be able to register " + "attendees from the website.", + ) diff --git a/website_event_require_login/pyproject.toml b/website_event_require_login/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/website_event_require_login/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/website_event_require_login/readme/CONFIGURE.md b/website_event_require_login/readme/CONFIGURE.md new file mode 100644 index 000000000..8fdff9317 --- /dev/null +++ b/website_event_require_login/readme/CONFIGURE.md @@ -0,0 +1,3 @@ +To configure this module, you need to: + +1. Go to an event and set the Website Require option on. diff --git a/website_event_require_login/readme/CONTRIBUTORS.md b/website_event_require_login/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..03de9bc23 --- /dev/null +++ b/website_event_require_login/readme/CONTRIBUTORS.md @@ -0,0 +1,7 @@ +- [Tecnativa](https://www.tecnativa.com): + - David Vidal + - Rafael Blasco +- [Sygel](https://www.sygel.es/): + - Manuel Regidor +- [TechnoLibre](https://technolibre.ca): + - Mathieu Benoit diff --git a/website_event_require_login/readme/DESCRIPTION.md b/website_event_require_login/readme/DESCRIPTION.md new file mode 100644 index 000000000..7defe0138 --- /dev/null +++ b/website_event_require_login/readme/DESCRIPTION.md @@ -0,0 +1 @@ +Require login for event registration from the website. diff --git a/website_event_require_login/readme/ROADMAP.md b/website_event_require_login/readme/ROADMAP.md new file mode 100644 index 000000000..41b7cd724 --- /dev/null +++ b/website_event_require_login/readme/ROADMAP.md @@ -0,0 +1,2 @@ +- An interesting option could be to be able to hide events to + unregistered users. diff --git a/website_event_require_login/readme/USAGE.md b/website_event_require_login/readme/USAGE.md new file mode 100644 index 000000000..eab524b49 --- /dev/null +++ b/website_event_require_login/readme/USAGE.md @@ -0,0 +1,5 @@ +In the website go to an event that requires login and try to register +being logged out. + +If the event is set up to require login, a pop up will be shown +requiring the user to do so. diff --git a/website_event_require_login/static/description/icon.png b/website_event_require_login/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/website_event_require_login/static/description/icon.png differ diff --git a/website_event_require_login/static/description/index.html b/website_event_require_login/static/description/index.html new file mode 100644 index 000000000..ded19ea2b --- /dev/null +++ b/website_event_require_login/static/description/index.html @@ -0,0 +1,460 @@ + + + + + +Website Event Require Login + + + +
+

Website Event Require Login

+ + +

Beta License: AGPL-3 OCA/event Translate me on Weblate Try me on Runboat

+

Require login for event registration from the website.

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to an event and set the Website Require option on.
  2. +
+
+
+

Usage

+

In the website go to an event that requires login and try to register +being logged out.

+

If the event is set up to require login, a pop up will be shown +requiring the user to do so.

+
+
+

Known issues / Roadmap

+
    +
  • An interesting option could be to be able to hide events to +unregistered users.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
  • TechnoLibre
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/event project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/website_event_require_login/static/src/js/registration_login_required.esm.js b/website_event_require_login/static/src/js/registration_login_required.esm.js new file mode 100644 index 000000000..96550eb87 --- /dev/null +++ b/website_event_require_login/static/src/js/registration_login_required.esm.js @@ -0,0 +1,41 @@ +/* global DOMParser, Modal */ +import EventRegistrationForm from "@website_event/js/website_event"; +import {patch} from "@web/core/utils/patch"; +import {rpc} from "@web/core/network/rpc"; + +patch(EventRegistrationForm.prototype, { + async _onClick(ev) { + const formEl = ev.currentTarget.closest("form"); + + if (formEl.dataset.requireLogin !== "1") { + // Standard registration flow + return super._onClick(ev); + } + + // Login required: support custom modal + ev.preventDefault(); + ev.stopPropagation(); + const buttonEl = ev.currentTarget.closest("[type='submit']"); + buttonEl.disabled = true; + + const post = this._getPost(); + const modal = await rpc(formEl.action, post); + const modalEl = new DOMParser().parseFromString(modal, "text/html").body + .firstChild; + + const _onClose = () => { + buttonEl.disabled = false; + modalEl.remove(); + }; + const closeBtn = modalEl.querySelector(".btn-close"); + const gotoBtn = modalEl.querySelector(".js_goto_event"); + if (closeBtn) closeBtn.addEventListener("click", _onClose); + if (gotoBtn) gotoBtn.addEventListener("click", _onClose); + + const formModal = Modal.getOrCreateInstance(modalEl, { + backdrop: "static", + keyboard: false, + }); + formModal.show(); + }, +}); diff --git a/website_event_require_login/static/tests/tours/website_event_require_login_tour.esm.js b/website_event_require_login/static/tests/tours/website_event_require_login_tour.esm.js new file mode 100644 index 000000000..832f7c4a4 --- /dev/null +++ b/website_event_require_login/static/tests/tours/website_event_require_login_tour.esm.js @@ -0,0 +1,71 @@ +/* Copyright 2026 TechnoLibre - Mathieu Benoit + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ +import {registry} from "@web/core/registry"; + +// Tour 1: Public (anonymous) user on an event with require_login enabled. +// Expected: the login-required modal appears instead of the registration form. +registry.category("web_tour.tours").add("website_event_require_login_public", { + url: "/event", + test: true, + steps: () => [ + { + content: "Go to the event requiring login", + trigger: + 'a[href*="/event/test-event-require-login-tour-"][href$="/register"]', + run: "click", + }, + { + content: "Open ticket registration modal", + trigger: 'button[data-bs-target="#modal_ticket_registration"]', + run: "click", + }, + { + content: "Click Register (ticket defaults to 1)", + trigger: "button.a-submit:enabled", + run: "click", + }, + { + content: "Login-required modal body is visible", + trigger: "#modal_attendees_registration_login_required .modal-body", + }, + { + content: "Login link points to /web/login", + trigger: + '#modal_attendees_registration_login_required a.btn-primary[href*="/web/login"]', + }, + { + content: "Close the login-required modal", + trigger: "#modal_attendees_registration_login_required .js_goto_event", + run: "click", + }, + ], +}); + +// Tour 2: Authenticated (portal) user on the same event. +// Expected: the normal attendee registration form appears, NOT the login modal. +registry.category("web_tour.tours").add("website_event_require_login_auth", { + url: "/event", + test: true, + steps: () => [ + { + content: "Go to the event requiring login", + trigger: + 'a[href*="/event/test-event-require-login-tour-"][href$="/register"]', + run: "click", + }, + { + content: "Open ticket registration modal", + trigger: 'button[data-bs-target="#modal_ticket_registration"]', + run: "click", + }, + { + content: "Click Register (ticket defaults to 1)", + trigger: "button.a-submit:enabled", + run: "click", + }, + { + content: "Attendee registration form appears (normal flow, no login modal)", + trigger: "form#attendee_registration", + }, + ], +}); diff --git a/website_event_require_login/tests/__init__.py b/website_event_require_login/tests/__init__.py new file mode 100644 index 000000000..6dab214ac --- /dev/null +++ b/website_event_require_login/tests/__init__.py @@ -0,0 +1 @@ +from . import test_ui diff --git a/website_event_require_login/tests/test_ui.py b/website_event_require_login/tests/test_ui.py new file mode 100644 index 000000000..36974532a --- /dev/null +++ b/website_event_require_login/tests/test_ui.py @@ -0,0 +1,58 @@ +# Copyright 2026 TechnoLibre - Mathieu Benoit +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from datetime import date, timedelta + +from odoo import fields +from odoo.tests import new_test_user, tagged +from odoo.tests.common import HttpCase + + +@tagged("post_install", "-at_install") +class TestWebsiteEventRequireLoginUI(HttpCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.event = cls.env["event.event"].create( + { + "name": "Test Event Require Login Tour", + "date_begin": fields.Date.to_string(date.today()), + "date_end": fields.Date.to_string(date.today() + timedelta(days=7)), + "website_published": True, + "website_require_login": True, + } + ) + cls.ticket = cls.env["event.event.ticket"].create( + { + "name": "Standard", + "event_id": cls.event.id, + "seats_max": 100, + } + ) + cls.portal_user = new_test_user( + cls.env, + login="portal_event_login", + groups="base.group_portal", + password="portal_event_login", + name="Portal Event User", + ) + + def test_public_user_sees_login_modal(self): + """Public user clicks Register and the login-required modal + appears instead of the attendee form.""" + self.start_tour( + "/event", + "website_event_require_login_public", + step_delay=100, + ) + + def test_authenticated_user_normal_flow(self): + """Authenticated portal user clicks Register and the normal + attendee registration form appears (no login modal).""" + self.start_tour( + "/event", + "website_event_require_login_auth", + login="portal_event_login", + step_delay=100, + ) diff --git a/website_event_require_login/views/event_views.xml b/website_event_require_login/views/event_views.xml new file mode 100644 index 000000000..d7fdf0300 --- /dev/null +++ b/website_event_require_login/views/event_views.xml @@ -0,0 +1,12 @@ + + + + event.event + + + + + + + + diff --git a/website_event_require_login/views/website_event_templates.xml b/website_event_require_login/views/website_event_templates.xml new file mode 100644 index 000000000..4337522f4 --- /dev/null +++ b/website_event_require_login/views/website_event_templates.xml @@ -0,0 +1,53 @@ + + + + + +