From f66168635d60c697d1a57dc0468cd3be7fbb2261 Mon Sep 17 00:00:00 2001 From: Andreas <andreasv@fsmpi.rwth-aachen.de> Date: Sat, 14 Oct 2017 18:31:26 +0200 Subject: [PATCH] redid perm editor. closes #308 --- static/moderator.js | 192 +++++++++++++++++++++++------------------- templates/course.html | 36 ++++++++ templates/macros.html | 6 +- 3 files changed, 143 insertions(+), 91 deletions(-) diff --git a/static/moderator.js b/static/moderator.js index 78d3cba..3a9a96b 100644 --- a/static/moderator.js +++ b/static/moderator.js @@ -141,121 +141,136 @@ var moderator = { } }, init: function () { - $('.modmoderator_permissioneditor').popover( - { - title: "Zugriffsrechte", - html: true, - placement: "left", - trigger: 'click', - container: 'body', - content: function () { - var html = ''; - var id = $(this).data('id'); - var type = $(this).data('type'); - html += '<div width="300px" class="row" data-id="'+id+'" data-type="'+type+'">'; - html += '<select onchange="moderator.permissioneditor.selectpermission(this)" size="6" class="col-xs-12 permissionlist">'; - var idlist = []; - for (i in moderator.permissioneditor.permissions) { - if ((moderator.permissioneditor.permissions[i][type+'_id'] == id)) { - var perm = {}; - perm.type = moderator.permissioneditor.permissions[i]['type']; - perm.param1 = moderator.permissioneditor.permissions[i]['param1']; - perm.param2 = moderator.permissioneditor.permissions[i]['param2']; - perm.id = moderator.permissioneditor.permissions[i]['id']; - idlist[idlist.length] = perm.id; + $('#editperm').on('show.bs.modal', function (e) { + var srcel = e.relatedTarget; + if (!srcel) { + return 0; + } + var id = $(srcel).data('id'); + var type = $(srcel).data('type'); + $('#editpermdiv').data('id',id); + $('#editpermdiv').data('type',type); + var html = '' + for (i in moderator.permissioneditor.permissions) { + if ((moderator.permissioneditor.permissions[i][type+'_id'] == id)) { + var perm = {}; + perm.type = moderator.permissioneditor.permissions[i]['type']; + perm.param1 = moderator.permissioneditor.permissions[i]['param1']; + perm.param2 = moderator.permissioneditor.permissions[i]['param2']; + perm.id = moderator.permissioneditor.permissions[i]['id']; + permstring = ''; + switch (perm.type) { + case 'password': + permstring = '("'+perm.param1+'":"'+perm.param2+'")' + break; + case 'public': permstring = ''; - switch (perm.type) { - case 'password': - permstring = '("'+perm.param1+'":"'+perm.param2+'")' - break; - case 'public': - permstring = ''; - break; - case 'none': - permstring = '(Kein Zugriff)'; - break; - case 'rwth': - permstring = '(RWTH-intern)' - break; - case 'fsmpi': - permstring = '(FS-intern)' - break; - case 'l2p': - permstring = '(' + perm.param1 + ')' - break; - } - html += '<option data-auth_id="'+perm.id+'">#'+perm.id+' '+perm.type+' '+ permstring +'</option>'; - } + break; + case 'none': + permstring = '(Kein Zugriff)'; + break; + case 'rwth': + permstring = '(RWTH-intern)' + break; + case 'fsmpi': + permstring = '(FS-intern)' + break; + case 'l2p': + permstring = '(' + perm.param1 + ')' + break; } - html += '</select>'; - html += '<select class="col-xs-12 authtype" onchange="moderator.permissioneditor.typechange(this)">'; - html += '<option value="public">Öffentlich</option>'; - html += '<option selected value="password">Passwort</option>'; - html += '<option value="rwth">RWTH intern</option>'; - html += '<option value="fsmpi">FSMPI intern</option>'; - html += '<option value="l2p">L2P Lernraum</option>'; - html += '<option value="none">Kein Zugriff</option>'; - html += '</select>'; - html += '<input class="col-xs-12 passwordinput authuser" type="text" placeholder="Benutzername">'; - html += '<input class="col-xs-10 passwordinput authpassword" type="text" placeholder="Passwort">' - html += '<button class="col-xs-2 passwordinput authpgen" type="button" onclick="$(\'.authpassword\',this.parentNode).val(moderator.permissioneditor.randompw());"><span class="fa fa-plus" aria-hidden="true"></span></button>' - - html += '<input class="col-xs-12 authl2p" type="text" placeholder="Lernraum" style="display: none;">'; - - html += '<button class="col-xs-6" onclick="moderator.permissioneditor.addbtnclick(this)">Add</button>'; - //html += '<button class="col-xs-4" onclick="moderator.permissionedior.updatebtnclick(this)">Update</button>'; - html += '<button class="col-xs-6" onclick="moderator.permissioneditor.delbtnclick(this)">Delete</button>'; - html += '</div>'; - return html; + html += '<option data-id="'+perm.id+'" data-type="'+perm.type+'" data-param1="'+perm.param1+'" data-param2="'+perm.param2+'">#'+perm.id+' '+perm.type+' '+ permstring +'</option>'; } - } - ); - }, - selectpermission: function (element) { + } + $('#permissionlist').html(html); + }); }, - delbtnclick: function (element) { - moderator.api.set("perm."+$(".permissionlist option:selected", element.parentElement).data('auth_id')+".deleted",1,true); - }, - addbtnclick: function (element) { - var perm = {}; - perm.type = $(".authtype", element.parentElement).val(); + selectpermission: function (element) { + var perm = $('#permissionlist option:selected').data(); + if (!perm) { + return; + } + var container = $('#editpermdiv'); + moderator.permissioneditor.typechangehandler(perm.type, container); switch(perm.type) { case 'password': - perm.param1 = $(".authuser", element.parentElement).val(); - perm.param2 = $(".authpassword", element.parentElement).val(); + $(".authuser", container).val(perm.param1); + $(".authpassword", container).val(perm.param2); break case 'l2p': - perm.param1 = $(".authl2p", element.parentElement).val(); + $(".authl2p", container).val(perm.param1); break } + $(".authtype option[value="+perm.type+"]").prop("selected", true); + }, + delbtnclick: function (element) { + moderator.api.set("perm."+$("#permissionlist option:selected", element.parentElement).data('id')+".deleted",1,true); + }, + addbtnclick: function (element) { + var container = element.parentElement; + var perm = moderator.permissioneditor.getpermform(container); dict = {} dict['type'] = perm.type; dict['param1'] = perm.param1; dict['param2'] = perm.param2; - dict[$(element.parentElement).data('type')+'_id'] = $(element.parentElement).data('id'); - + dict[$(container).data('type')+'_id'] = $(container).data('id'); moderator.api.add_new(dict,'perm',true); var option = $('<option>', { "text": perm.type+' '+( perm.type == "password" ? ' ("'+perm.param1+'":"'+perm.param2+'")' : '' ) , "data-auth": JSON.stringify(perm) }); - $(".permissionlist",element.parentElement).append(option); + $("#permissionlist",element.parentElement).append(option); + }, + updatebtnclick: function (element) { + var container = element.parentElement + var perm = moderator.permissioneditor.getpermform(container); + var id = $("#permissionlist option:selected", element.parentElement).data('id'); + if (!id) { + return; + } + var dict = {}; + for (i in perm) { + dict['perm.'+id+'.'+i] = perm[i]; + } + console.log(dict); + moderator.api.set_multi(dict,true) + }, + getpermform: function (container) { + var perm = {}; + perm.type = $(".authtype", container).val(); + switch(perm.type) { + case 'password': + perm.param1 = $(".authuser", container).val(); + perm.param2 = $(".authpassword", container).val(); + break + case 'l2p': + perm.param1 = $(".authl2p", container).val(); + break + } + return perm; }, typechange: function (element) { - switch ($(element).val()) { + $("#permissionlist option:selected").prop("selected", false); + moderator.permissioneditor.typechangehandler($(element).val(),element.parentElement); + }, + typechangehandler: function (type, container) { + $(".authuser", container).val(''); + $(".authpassword", container).val(''); + $(".authl2p", container).val(''); + switch (type) { case 'password': - $(".passwordinput",element.parentElement).show(); - $(".authl2p",element.parentElement).hide(); + $(".passwordinput",container).show(); + $(".authl2p",container).hide(); break; case 'l2p': - $(".passwordinput",element.parentElement).hide(); - $(".authl2p",element.parentElement).show(); + $(".passwordinput",container).hide(); + $(".authl2p",container).show(); break; default: - $(".passwordinput",element.parentElement).hide(); - $(".authl2p",element.parentElement).hide(); + $(".passwordinput",container).hide(); + $(".authl2p",container).hide(); break; } }, @@ -263,8 +278,9 @@ var moderator = { var array = new Uint8Array(10); window.crypto.getRandomValues(array); var result = ''; + var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; for (var i = 0; i< array.length; i++) { - result += String.fromCharCode(48+ (array[i]/255.0)*74); + result += chars.charAt(array[i] % chars.length); } return result; } diff --git a/templates/course.html b/templates/course.html index 6dec013..a9175a0 100644 --- a/templates/course.html +++ b/templates/course.html @@ -98,6 +98,42 @@ </ul> </div> {% if ismod() %} +<div class="modal fade" id="editperm" tabindex="-1" role="dialog"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> + <h4 class="modal-title">Zugriffsrechte</h4> + </div> + <div class="modal-body"> + <div class="row" style="padding-left: 10px; padding-right: 10px;" data-id="-1" data-type="-1" id="editpermdiv"> + <span>Es existieren folgende Zugriffsrechte:</span> + <select onchange="moderator.permissioneditor.selectpermission(this)" size="6" class="col-xs-12" id="permissionlist"> + </select> + <select class="col-xs-12 authtype" onchange="moderator.permissioneditor.typechange(this)"> + <option value="public">Öffentlich</option> + <option selected value="password">Passwort</option> + <option value="rwth">RWTH intern</option> + <option value="fsmpi">FSMPI intern</option> + <option value="l2p">L2P Lernraum</option> + <option value="none">Kein Zugriff</option> + </select> + <input class="col-xs-12 passwordinput authuser" type="text" placeholder="Benutzername"> + <input class="col-xs-10 passwordinput authpassword" type="text" placeholder="Passwort"> + <button class="col-xs-2 passwordinput authpgen" type="button" onclick="$('.authpassword',this.parentNode).val(moderator.permissioneditor.randompw());"><span class="fa fa-refresh" aria-hidden="true"></span></button> + + <input class="col-xs-12 authl2p" type="text" placeholder="Lernraum" style="display: none;"> + + <button class="col-xs-4" onclick="moderator.permissioneditor.addbtnclick(this)">Add</button> + <button class="col-xs-4" onclick="moderator.permissioneditor.updatebtnclick(this)">Update</button> + <button class="col-xs-4" onclick="moderator.permissioneditor.delbtnclick(this)">Delete</button> + + + </div> + </div> + </div> + </div> +</div> <script> $.ajax({ method: "GET", diff --git a/templates/macros.html b/templates/macros.html index 1d5af1a..060b061 100644 --- a/templates/macros.html +++ b/templates/macros.html @@ -323,12 +323,12 @@ $('#embedcodebtn').popover( {% endif %} {% if ismod() %} - <button class="btn btn-default modmoderator_permissioneditor" data-type="{{ type }}" data-id="{{ id }}"> - {{ permlogos|safe }} + <button class="btn btn-default" data-toggle="modal" data-target="#editperm" data-type="{{ type }}" data-id="{{ id }}"> + {{ permlogos|safe }} </button> {% else %} <span title="{{permdescription[1]}}"> - {{ permlogos|safe }} + {{ permlogos|safe }} </span> {% endif %} -- GitLab