From ead1b7ce136e9116288698a2ee3364c80456fd2f Mon Sep 17 00:00:00 2001 From: Pedro Ferreira Date: Mon, 13 Jul 2020 09:47:03 +0200 Subject: [PATCH] VC/Zoom: Add proper password visibility option --- indico_vc_zoom/forms.py | 20 +++++++-------- indico_vc_zoom/plugin.py | 23 ++++++----------- indico_vc_zoom/templates/buttons.html | 25 +++++++++++++++---- indico_vc_zoom/templates/event_buttons.html | 2 +- indico_vc_zoom/templates/info_box.html | 11 +++----- .../templates/management_buttons.html | 2 +- .../templates/vc_room_timetable_buttons.html | 2 +- 7 files changed, 43 insertions(+), 42 deletions(-) diff --git a/indico_vc_zoom/forms.py b/indico_vc_zoom/forms.py index 3a3fa62..2e3934e 100644 --- a/indico_vc_zoom/forms.py +++ b/indico_vc_zoom/forms.py @@ -18,15 +18,13 @@ from indico_vc_zoom import _ class ZoomAdvancedFormMixin(object): # Advanced options (per event) - show_password = BooleanField(_('Show Password'), - widget=SwitchWidget(), - description=_("Show the Zoom Room Password on the event page")) - show_autojoin = BooleanField(_('Show Auto-join URL'), - widget=SwitchWidget(), - description=_("Show the auto-join URL on the event page")) - show_phone_numbers = BooleanField(_('Show Phone Access numbers'), - widget=SwitchWidget(), - description=_("Show a link to the list of phone access numbers")) + password_visibility = IndicoRadioField(_("Password visibility"), + description=_("Who should be able to know this meeting's password"), + orientation='horizontal', + choices=[ + ('everyone', _('Everyone')), + ('logged_in', _('Logged-in users')), + ('no_one', _("No one"))]) class VCRoomAttachForm(VCRoomAttachFormBase, ZoomAdvancedFormMixin): @@ -36,13 +34,15 @@ class VCRoomAttachForm(VCRoomAttachFormBase, ZoomAdvancedFormMixin): class VCRoomForm(VCRoomFormBase, ZoomAdvancedFormMixin): """Contains all information concerning a Zoom booking.""" - advanced_fields = {'show_password', 'show_autojoin', 'show_phone_numbers'} | VCRoomFormBase.advanced_fields + advanced_fields = {'mute_audio', 'mute_host_video', 'mute_participant_video'} | VCRoomFormBase.advanced_fields + skip_fields = advanced_fields | VCRoomFormBase.conditional_fields description = TextAreaField(_('Description'), description=_('The description of the room')) owner_choice = IndicoRadioField(_("Owner of Room"), [DataRequired()], choices=[('myself', _("Myself")), ('someone_else', _("Someone else"))]) + owner_user = PrincipalField(_("User"), [HiddenUnless('owner_choice', 'someone_else'), DataRequired()]) diff --git a/indico_vc_zoom/plugin.py b/indico_vc_zoom/plugin.py index d31b676..5ebda0b 100644 --- a/indico_vc_zoom/plugin.py +++ b/indico_vc_zoom/plugin.py @@ -194,12 +194,7 @@ class ZoomPlugin(VCPluginMixin, IndicoPlugin): if new_schedule_args != current_schedule_args: _update_zoom_meeting(vc_room.data['zoom_id'], new_schedule_args) - room_assoc.data.update({key: data.pop(key) for key in [ - 'show_password', - 'show_autojoin', - 'show_phone_numbers' - ]}) - + room_assoc.data['password_visibility'] = data.pop('password_visibility') flag_modified(room_assoc, 'data') def update_data_vc_room(self, vc_room, data): @@ -272,6 +267,7 @@ class ZoomPlugin(VCPluginMixin, IndicoPlugin): vc_room.data.update({ 'zoom_id': unicode(meeting_obj['id']), 'url': meeting_obj['join_url'], + 'public_url': meeting_obj['join_url'].split('?')[0], 'start_url': meeting_obj['start_url'], 'password': meeting_obj['password'], 'owner': owner.identifier @@ -324,7 +320,8 @@ class ZoomPlugin(VCPluginMixin, IndicoPlugin): zoom_meeting = _fetch_zoom_meeting(vc_room) vc_room.name = zoom_meeting['topic'] vc_room.data.update({ - 'url': zoom_meeting['start_url'], + 'url': zoom_meeting['join_url'], + 'public_url': zoom_meeting['join_url'].split('?')[0], 'zoom_id': zoom_meeting['id'] }) flag_modified(vc_room, 'data') @@ -350,21 +347,15 @@ class ZoomPlugin(VCPluginMixin, IndicoPlugin): 'mute_host_video': self.settings.get('mute_host_video'), 'mute_participant_video': self.settings.get('mute_participant_video'), 'waiting_room': self.settings.get('waiting_room'), - 'show_autojoin': True, - 'show_phone_numbers': True, - 'show_password': True, 'owner_choice': 'myself', - 'owner_user': None + 'owner_user': None, + 'password_visibility': 'logged_in' }) return defaults def get_vc_room_attach_form_defaults(self, event): defaults = super(ZoomPlugin, self).get_vc_room_attach_form_defaults(event) - defaults.update({ - 'show_autojoin': True, - 'show_phone_numbers': True, - 'show_password': True - }) + defaults['password_visibility'] = 'logged_in' return defaults def can_manage_vc_room(self, user, room): diff --git a/indico_vc_zoom/templates/buttons.html b/indico_vc_zoom/templates/buttons.html index 2814528..c5cef9a 100644 --- a/indico_vc_zoom/templates/buttons.html +++ b/indico_vc_zoom/templates/buttons.html @@ -1,6 +1,21 @@ -{% macro render_join_button(vc_room, extra_classes="") %} - - {% trans %}Join{% endtrans %} - +{% macro render_join_button(vc_room, event_vc_room, extra_classes="", is_manager=false) %} + {% if event_vc_room.data.password_visibility == 'everyone' or is_manager or + (session.user and event_vc_room.data.password_visibility == 'logged_in') %} + + {% trans %}Join{% endtrans %} + + {% elif event_vc_room.data.password_visibility == 'no_one' %} + + {% trans %}Join{% endtrans %} + + {% else %} + + {% trans %}Please log in{% endtrans %} + + {% endif %} {% endmacro %} diff --git a/indico_vc_zoom/templates/event_buttons.html b/indico_vc_zoom/templates/event_buttons.html index c30f4cc..fd9fcf1 100644 --- a/indico_vc_zoom/templates/event_buttons.html +++ b/indico_vc_zoom/templates/event_buttons.html @@ -2,5 +2,5 @@ {% from 'vc_zoom:buttons.html' import render_join_button %} {% block buttons %} - {{ render_join_button(vc_room, "i-button-small event-service-right-button join-button") }} + {{ render_join_button(vc_room, event_vc_room, "i-button-small event-service-right-button join-button") }} {% endblock %} diff --git a/indico_vc_zoom/templates/info_box.html b/indico_vc_zoom/templates/info_box.html index 72c7f7d..56df0d3 100644 --- a/indico_vc_zoom/templates/info_box.html +++ b/indico_vc_zoom/templates/info_box.html @@ -2,22 +2,17 @@ {% set owner = vc_room.data.owner %} {% set phone_link = settings.get('zoom_phone_link') %}
-
{% trans %}Name{% endtrans %}
-
{{ vc_room.name }}
-
{% trans %}Zoom Meeting ID{% endtrans %}
+
{% trans %}Meeting ID{% endtrans %}
{{ vc_room.data.zoom_id }}
{% if owner %}
{% trans %}Owner{% endtrans %}
{{ (owner|decodeprincipal).full_name }}
{% endif %} - {% if vc_room.data.password %} + {% if event_vc_room.data.password_visibility == 'everyone' or is_manager or + (session.user and event_vc_room.data.password_visibility == 'logged_in') %}
{% trans %}Password{% endtrans %}
{{ vc_room.data.password }}
{% endif %} - {% if event_vc_room.data.show_pin and vc_room.data.room_pin %} -
{% trans %}Room PIN{% endtrans %}
-
{{ vc_room.data.room_pin }}
- {% endif %} {% if event_vc_room.data.show_autojoin %}
{% trans %}Zoom URL{% endtrans %}
diff --git a/indico_vc_zoom/templates/management_buttons.html b/indico_vc_zoom/templates/management_buttons.html index 93b9f5c..ac8a8b6 100644 --- a/indico_vc_zoom/templates/management_buttons.html +++ b/indico_vc_zoom/templates/management_buttons.html @@ -2,5 +2,5 @@ {% from 'vc_zoom:buttons.html' import render_join_button %} {% block buttons %} - {{ render_join_button(vc_room, extra_classes="icon-play") }} + {{ render_join_button(vc_room, event_vc_room, extra_classes="icon-play", is_manager=true) }} {% endblock %} diff --git a/indico_vc_zoom/templates/vc_room_timetable_buttons.html b/indico_vc_zoom/templates/vc_room_timetable_buttons.html index 8b70551..c1db6a8 100644 --- a/indico_vc_zoom/templates/vc_room_timetable_buttons.html +++ b/indico_vc_zoom/templates/vc_room_timetable_buttons.html @@ -3,5 +3,5 @@ {% set vc_room = event_vc_room.vc_room %} {% block buttons %} - {{ render_join_button(vc_room, "i-button-small event-service-right-button join-button") }} + {{ render_join_button(vc_room, event_vc_room, "i-button-small event-service-right-button join-button") }} {% endblock %}