Commit 28114b1a3ae531de4a427bcd1c07f26993aad962

Authored by Jailson Dias
1 parent 85fd085c

Criando a tela de configuração do servidor Jitsi

amadeus/templates/base.html
... ... @@ -176,6 +176,7 @@
176 176 <li><a href="{% url 'mailsender:update' %}">{% trans 'Mail Sender' %}</a></li>
177 177 <li><a href="{% url 'security:update' %}">{% trans 'Security' %}</a></li>
178 178 <li><a href="{% url 'themes:manage' %}">{% trans 'Theme' %}</a></li>
  179 + <li><a href="{% url 'webconferences:settings' %}">{% trans 'Conference Settings' %}</a></li>
179 180 </ul>
180 181 </div>
181 182 </div>
... ...
webconference/forms.py
... ... @@ -6,7 +6,7 @@ import datetime
6 6  
7 7 from subjects.models import Tag
8 8  
9   -from .models import Webconference
  9 +from .models import Webconference, ConferenceSettings
10 10  
11 11 class WebconferenceForm(forms.ModelForm):
12 12 subject = None
... ... @@ -104,3 +104,19 @@ class WebconferenceForm(forms.ModelForm):
104 104 self.instance.tags.add(new_tag)
105 105  
106 106 return self.instance
  107 +
  108 +
  109 +
  110 +class SettingsForm(forms.ModelForm):
  111 +
  112 + class Meta:
  113 + model = ConferenceSettings
  114 + fields = ['domain']
  115 +
  116 + labels = {
  117 + 'domain': _('Domain'),
  118 + }
  119 +
  120 + help_texts = {
  121 + 'domain': _('The domain of the jitsi server, e.g. meet.jit.si'),
  122 + }
... ...
webconference/migrations/0002_conferencesettings.py 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10.4 on 2017-03-22 19:31
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations, models
  6 +
  7 +
  8 +class Migration(migrations.Migration):
  9 +
  10 + dependencies = [
  11 + ('webconference', '0001_initial'),
  12 + ]
  13 +
  14 + operations = [
  15 + migrations.CreateModel(
  16 + name='ConferenceSettings',
  17 + fields=[
  18 + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  19 + ('domain', models.CharField(max_length=100, verbose_name='Domain')),
  20 + ],
  21 + options={
  22 + 'verbose_name': 'Conference Setting',
  23 + 'verbose_name_plural': 'Conferences Setting',
  24 + },
  25 + ),
  26 + ]
... ...
webconference/models.py
... ... @@ -30,3 +30,13 @@ class Webconference(Resource):
30 30  
31 31 def delete_message(self):
32 32 return _('Are you sure you want delete the web conference')
  33 +
  34 +class ConferenceSettings(models.Model):
  35 + domain = models.CharField(_("Domain"), max_length = 100, blank=False, null = False)
  36 +
  37 + class Meta:
  38 + verbose_name = _("Conference Setting")
  39 + verbose_name_plural = _("Conferences Setting")
  40 +
  41 + def __str__(self):
  42 + return self.domain
... ...
webconference/templates/webconference/config.html 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +{% extends 'base.html' %}
  2 +
  3 +{% load static i18n %}
  4 +{% load widget_tweaks %}
  5 +{% load django_bootstrap_breadcrumbs %}
  6 +
  7 +{% block breadcrumbs %}
  8 + {{ block.super }}
  9 + {% trans 'Settings: Conference' as bread %}
  10 + {% breadcrumb bread 'webconferences:settings' %}
  11 +{% endblock %}
  12 +
  13 +{% block content %}
  14 + <div class="card">
  15 + <div class="card-content">
  16 + <div class="card-body">
  17 + <form method="post" action="" enctype="multipart/form-data">
  18 + {% csrf_token %}
  19 + {% for field in form %}
  20 + <div class="form-group{% if form.has_error %} has-error {% endif %}">
  21 + <label for="{{ field.auto_id }}">{{ field.label }} <span>*</span></label>
  22 + {% render_field field class='form-control' %}
  23 +
  24 + <span id="helpBlock" class="help-block">{{ field.help_text }}</span>
  25 +
  26 + {% if field.errors %}
  27 + <div class="alert alert-danger alert-dismissible" role="alert">
  28 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  29 + <span aria-hidden="true">&times;</span>
  30 + </button>
  31 + <ul>
  32 + {% for error in field.errors %}
  33 + <li>{{ error }}</li>
  34 + {% endfor %}
  35 + </ul>
  36 + </div>
  37 + {% endif %}
  38 + </div>
  39 + {% endfor %}
  40 + <div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">
  41 + <div class="text-center">
  42 + <input type="submit" value="{% trans 'Save' %}" class="btn btn-raised btn-success" />
  43 + </div>
  44 + </div>
  45 + </form>
  46 + </div>
  47 + </div>
  48 + </div>
  49 + <br clear="all" />
  50 + <br clear="all" />
  51 +{% endblock %}
... ...
webconference/templates/webconference/jitsi.html
... ... @@ -27,15 +27,13 @@
27 27  
28 28 <script>
29 29 // code to start jitsi api
30   - var domain = "meet.jit.si"; // domain that jitsi will itself connect
  30 + var domain = "{{domain}}"; // domain that jitsi will itself connect
31 31 var room = "{{name_room}}"; // name of the room to be created
32 32 var width = $("body").width(); // width of the window to be created
33 33 var height = $("body").height(); // height of the window to be created
34 34 var html = document.getElementById("jitsi");
35   - var configOverwrite = {disableSimulcast: false};
36   - var interfaceConfigOverwrite = {filmStripOnly: false};
37   - var jwt = "Amadeus_Token";
38   - var api = new JitsiMeetExternalAPI(domain, room, width, height,html,configOverwrite, interfaceConfigOverwrite, false, jwt);
  35 + var api = new JitsiMeetExternalAPI(domain, room, width, height,html);
  36 + // window.onload = initpage;
39 37 window.onload = initpage;
40 38 function initpage(){
41 39 api.executeCommand('displayName', '{{user}}');
... ... @@ -59,6 +57,28 @@
59 57 });
60 58 });
61 59 }
  60 + // callfunction();
  61 + var callCount = 1;
  62 + var repeater = setInterval(function () {
  63 + console.log(callCount);
  64 + if (callCount < 10) {
  65 +
  66 + var doc = document.getElementById('jitsiConferenceFrame0').document;
  67 + // var iframe = document.getElementById('jitsiConferenceFrame0');
  68 + // var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
  69 +
  70 + // var ls = doc.getElementById('toolbar_button_link');
  71 + console.log(doc);
  72 + // $("#jitsiConferenceFrame0").contents().find("#toolbar_button_link").remove();
  73 + // $("a#toolbar_button_link.button.icon-link").remove();
  74 + // console.log($("#toolbar_contact_list").remove());
  75 + // $("#toolbar_button_link").remove(); //utilizandos para retirar o botão de compartilhar do jitsi
  76 + callCount += 1;
  77 + console.log("aqui");
  78 + } else {
  79 + clearInterval(repeater);
  80 + }
  81 + }, 1000);
62 82  
63 83 // api.executeCommands({displayName: ['Jailson']});
64 84 </script>
... ...
webconference/urls.py
... ... @@ -12,4 +12,5 @@ urlpatterns = [
12 12 url(r'^view/(?P<slug>[\w_-]+)/$', views.InsideView.as_view(), name = 'view'),
13 13 url(r'^conference/(?P<slug>[\w_-]+)/$',views.Conference.as_view(), name = 'conference'),
14 14 url(r'^saiu/$',views.saiu, name = 'saiu'),
  15 + url(r'^settings/$', views.ConferenceSettings.as_view(), name = 'settings'),
15 16 ]
... ...
webconference/views.py
... ... @@ -15,9 +15,10 @@ from log.mixins import LogMixin
15 15 from topics.models import Topic
16 16  
17 17 from pendencies.forms import PendenciesForm
  18 +from braces import views as braces_mixins
18 19  
19   -from .forms import WebconferenceForm
20   -from .models import Webconference
  20 +from .forms import WebconferenceForm, SettingsForm
  21 +from .models import Webconference, ConferenceSettings as Settings
21 22  
22 23 class NewWindowView(LoginRequiredMixin,
23 24 # '''LogMixin,'''
... ... @@ -78,6 +79,11 @@ class Conference(LoginRequiredMixin,generic.TemplateView):
78 79 context = super(Conference, self).get_context_data(**kwargs)
79 80 context['name_room'] = kwargs.get('slug')
80 81 context['user_image'] = 'http://localhost:8000'+str(self.request.user.image.url)
  82 + try:
  83 + context['domain'] = Settings.objects.last().domain
  84 + except AttributeError:
  85 + context['domain'] = 'meet.jit.si'
  86 +
81 87 return context
82 88  
83 89 def saiu(request):
... ... @@ -428,3 +434,30 @@ generic.DeleteView):
428 434 # super(DeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
429 435  
430 436 return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
  437 +
  438 +class ConferenceSettings(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequiredMixin, generic.UpdateView):
  439 + login_url = reverse_lazy("users:login")
  440 + redirect_field_name = 'next'
  441 +
  442 + template_name = 'webconference/config.html'
  443 + model = Settings
  444 + form_class = SettingsForm
  445 + success_url = reverse_lazy("subjects:home")
  446 +
  447 + def get_object(self, queryset = None):
  448 + return Settings.objects.last()
  449 +
  450 + def form_valid(self, form):
  451 + form.save()
  452 +
  453 + messages.success(self.request, _("Conference settings updated successfully!"))
  454 +
  455 + return super(ConferenceSettings, self).form_valid(form)
  456 +
  457 + def get_context_data(self, **kwargs):
  458 + context = super(ConferenceSettings, self).get_context_data(**kwargs)
  459 +
  460 + context['title'] = _('Conference Settings')
  461 + # context['settings_menu_active'] = "settings_menu_active"
  462 +
  463 + return context
... ...