VC/Zoom: Add proper password visibility option

This commit is contained in:
Pedro Ferreira 2020-07-13 09:47:03 +02:00
parent 80214c2a57
commit ead1b7ce13
7 changed files with 43 additions and 42 deletions

View File

@ -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()])

View File

@ -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):

View File

@ -1,6 +1,21 @@
{% macro render_join_button(vc_room, extra_classes="") %}
<a class="i-button highlight {{ extra_classes }}"
href="{{ vc_room.data.url }}" target="_blank">
{% trans %}Join{% endtrans %}
</a>
{% 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') %}
<a class="i-button icon-play highlight {{ extra_classes }}"
href="{{ vc_room.data.url }}" target="_blank">
{% trans %}Join{% endtrans %}
</a>
{% elif event_vc_room.data.password_visibility == 'no_one' %}
<a class="i-button icon-lock-center warning {{ extra_classes }}"
title="{% trans %}You will need a password to join this Zoom meeting{% endtrans %}"
href="{{ vc_room.data.public_url }}">
{% trans %}Join{% endtrans %}
</a>
{% else %}
<a class="i-button icon-lock-center {{ extra_classes }}"
title="{% trans %}This Zoom Meeting can only be seen by logged in users{% endtrans %}"
href="{{ url_for_login(request.relative_url) }}">
{% trans %}Please log in{% endtrans %}
</a>
{% endif %}
{% endmacro %}

View File

@ -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 %}

View File

@ -2,22 +2,17 @@
{% set owner = vc_room.data.owner %}
{% set phone_link = settings.get('zoom_phone_link') %}
<dl>
<dt>{% trans %}Name{% endtrans %}</dt>
<dd>{{ vc_room.name }}</dd>
<dt>{% trans %}Zoom Meeting ID{% endtrans %}</dt>
<dt>{% trans %}Meeting ID{% endtrans %}</dt>
<dd>{{ vc_room.data.zoom_id }}</dd>
{% if owner %}
<dt>{% trans %}Owner{% endtrans %}</dt>
<dd>{{ (owner|decodeprincipal).full_name }}</dd>
{% 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') %}
<dt>{% trans %}Password{% endtrans %}</dt>
<dd>{{ vc_room.data.password }}</dd>
{% endif %}
{% if event_vc_room.data.show_pin and vc_room.data.room_pin %}
<dt>{% trans %}Room PIN{% endtrans %}</dt>
<dd>{{ vc_room.data.room_pin }}</dd>
{% endif %}
{% if event_vc_room.data.show_autojoin %}
<dt class="large-row">{% trans %}Zoom URL{% endtrans %}</dt>
<dd class="large-row">

View File

@ -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 %}

View File

@ -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 %}