Skip to content
Snippets Groups Projects
Select Git revision
  • aeadb66c6d0dad0f3bff78acbb0c79ea05d061d4
  • master default protected
  • 2018ws
  • 2017ws
  • 2016ws
5 results

blink-0.c

Blame
  • Forked from Peter Gerwinski / hp
    Source project has a limited visibility.
    admins.js 10.28 KiB
    // BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
    //
    // Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
    //
    // This program is free software; you can redistribute it and/or modify it under the
    // terms of the GNU Lesser General Public License as published by the Free Software
    // Foundation; either version 3.0 of the License, or (at your option) any later
    // version.
    //
    // BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
    // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
    // PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    //
    // You should have received a copy of the GNU Lesser General Public License along
    // with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
    
    $(document).on('turbolinks:load', function(){
      var controller = $("body").data('controller');
      var action = $("body").data('action');
    
      // Only run on the admins page.
      if (controller == "admins") {
        if(action == "index") {
          //clear the role filter if user clicks on the x
          $(".clear-role").click(function() {
            var search = new URL(location.href).searchParams.get('search')
    
            var url = window.location.pathname + "?page=1"
          
            if (search) {
              url += "&search=" + search
            }  
          
            window.location.replace(url);
          })
    
          // Handle selected user tags
          $(".manage-users-tab").click(function() {
            $(".manage-users-tab").removeClass("selected")
            $(this).addClass("selected")
    
            updateTabParams(this.id)
          })
    
          $('.selectpicker').selectpicker({
            liveSearchPlaceholder: getLocalizedString('javascript.search.start')
          });
          // Fixes turbolinks issue with bootstrap select
          $(window).trigger('load.bs.select.data-api');
          
          // Display merge accounts modal with correct info
          $(".merge-user").click(function() {
            // Update the path of save button
            $("#merge-save-access").attr("data-path", $(this).data("path"))
            let userInfo = $(this).data("info")
            $("#merge-to").html("") // Clear current inputs
    
            let spanName = document.createElement("span"),
            spanEmail = document.createElement("span"),
            spanUid = document.createElement("span");
            spanName.innerText = userInfo.name
            spanEmail.setAttribute('class', 'text-muted d-block')
            spanEmail.innerText = userInfo.email
            spanUid.setAttribute('class', 'text-muted d-block')
            spanUid.innerText = userInfo.uid
    
            $("#merge-to").append(spanName, spanEmail, spanUid)
          })
    
          $("#mergeUserModal").on("show.bs.modal", function() {
            $(".selectpicker").selectpicker('val','')
          })
      
          $(".bootstrap-select").on("click", function() {
            $(".bs-searchbox").siblings().hide()
          })
    
          $("#merge-user-select ~ button").on("click", function() {
            $(".bs-searchbox").siblings().hide()
          })
      
          $(".bs-searchbox input").on("input", function() {
            if ($(".bs-searchbox input").val() == '' || $(".bs-searchbox input").val().length < 3) {
              $(".select-options").remove()
              $(".bs-searchbox").siblings().hide()
            } else {
              // Manually populate the dropdown
              $.get($("#merge-user-select").data("path"), { search: $(".bs-searchbox input").val() }, function(users) {
                $(".select-options").remove()
                if (users.length > 0) {
                  users.forEach(function(user) {
                    let opt = document.createElement("option")
                    $(opt).val(JSON.stringify({uid: user.uid, email: user.email, name: user.name}))
                    $(opt).text(user.name)
                    $(opt).addClass("select-options")
                    $(opt).attr("data-subtext", user.email)
                    $("#merge-user-select").append(opt)
                  })
                  // Only refresh the select dropdown if there are results to show
                  $('#merge-user-select').selectpicker('refresh');
                } 
                $(".bs-searchbox").siblings().show()
              })     
            }
          })
    
          // User selects an option from the Room Access dropdown
          $(".bootstrap-select").on("changed.bs.select", function(){
            // Get the uid of the selected user
            let user = $(".selectpicker").selectpicker('val')
            if (user != "") {
              let userInfo = JSON.parse(user)
              $("#merge-from").html("") // Clear current input
    
              let spanName = document.createElement("span"),
              spanEmail = document.createElement("span"),
              spanUid = document.createElement("span");
              spanName.innerText = userInfo.name
              spanEmail.setAttribute('class', 'text-muted d-block')
              spanEmail.innerText = userInfo.email
              spanUid.setAttribute('class', 'text-muted d-block')
              spanUid.id = 'from-uid'
              spanUid.innerText = userInfo.uid
    
              $("#merge-from").append(spanName, spanEmail, spanUid)
            }
          })
        }
        else if(action == "site_settings"){
          var urlParams = new URLSearchParams(window.location.search);
          // Only load the colour selectors if on the appearance tab
          if (urlParams.get("tab") == null || urlParams.get("tab") == "appearance") {
            loadColourSelectors()
          }
        }
        else if (action == "roles"){
          // Refreshes the new role modal
          $("#newRoleButton").click(function(){
            $("#createRoleName").val("")
          })
    
          // Updates the colour picker to the correct colour
          let role_colour = $("#role-colorinput-regular").data("colour")
          $("#role-colorinput-regular").css("background-color", role_colour);
          $("#role-colorinput-regular").css("border-color", role_colour);
    
          loadRoleColourSelector(role_colour, $("#role-colorinput-regular").data("disabled"));
        }
      }
    });
    
    // Change the branding image to the image provided
    function changeBrandingImage(path) {
      var url = $("#branding-url").val()
      $.post(path, {value: url, tab: "appearance"})
    }
    
    // Change the Legal URL to the one provided
    function changeLegalURL(path) {
      var url = $("#legal-url").val()
      $.post(path, {value: url, tab: "administration"})
    }
    
    // Change the Privacy Policy URL to the one provided
    function changePrivacyPolicyURL(path) {
      var url = $("#privpolicy-url").val()
      $.post(path, {value: url, tab: "administration"})
    }
    
    // Display the maintenance Banner
    function displayMaintenanceBanner(path) {
      var message = $("#maintenance-banner").val()
      $.post(path, {value: message, tab: "administration"})
    }
    
    // Clear the maintenance Banner
    function clearMaintenanceBanner(path) {
      $.post(path, {value: "", tab: "administration"})
    }
    
    // Change the email mapping to the string provided
    function changeEmailMapping(path) {
      var url = $("#email-mapping").val()
      $.post(path, {value: url, tab: "registration"})
    }
    
    function mergeUsers() {
      let userToMerge = $("#from-uid").text()
      $.post($("#merge-save-access").data("path"), {merge: userToMerge})
    }
    
    // Filters by role
    function filterRole(role) {
      var search = new URL(location.href).searchParams.get('search')
    
      var url = window.location.pathname + "?page=1" + "&role=" + role
    
      if (search) {
        url += "&search=" + search
      }  
    
      window.location.replace(url);
    }
    
    function updateTabParams(tab) {
      var search_params = new URLSearchParams(window.location.search)
    
      if (window.location.href.includes("tab=")) {
        search_params.set("tab", tab)
      } else {
        search_params.append("tab", tab)
      }
    
      search_params.delete("page")
    
      window.location.search = search_params.toString()
    }
    
    function loadColourSelectors() {
      const pickrRegular = new Pickr({
        el: '#colorinput-regular',
        theme: 'monolith',
        useAsButton: true,
        lockOpacity: true,
        defaultRepresentation: 'HEX',
        closeWithKey: 'Enter',
        default: $("#colorinput-regular").css("background-color"),
    
        components: {
            palette: true,
            preview: true,
            hue: true,
            interaction: {
                input: true,
                save: true,
            },
        },
      });
    
      const pickrLighten = new Pickr({
        el: '#colorinput-lighten',
        theme: 'monolith',
        useAsButton: true,
        lockOpacity: true,
        defaultRepresentation: 'HEX',
        closeWithKey: 'Enter',
        default: $("#colorinput-lighten").css("background-color"),
    
        components: {
            palette: true,
            preview: true,
            hue: true,
            interaction: {
                input: true,
                save: true,
            },
        },
      });
    
      const pickrDarken = new Pickr({
        el: '#colorinput-darken',
        theme: 'monolith',
        useAsButton: true,
        lockOpacity: true,
        defaultRepresentation: 'HEX',
        closeWithKey: 'Enter',
        default: $("#colorinput-darken").css("background-color"),
    
        components: {
            palette: true,
            preview: true,
            hue: true,
            interaction: {
                input: true,
                save: true,
            },
        },
      });
    
      pickrRegular.on("save", (color, instance) => {
        $.post($("#coloring-path-regular").val(), {value: color.toHEXA().toString()}).done(function() {
          location.reload()
        });
      })
    
      pickrLighten.on("save", (color, instance) => {
        $.post($("#coloring-path-lighten").val(), {value: color.toHEXA().toString(), tab: "appearance"}).done(function() {
          location.reload()
        });
      })
    
      pickrDarken.on("save", (color, instance) => {
        $.post($("#coloring-path-darken").val(), {value: color.toHEXA().toString(), tab: "appearance"}).done(function() {
          location.reload()
        });
      })
    }
    
    function loadRoleColourSelector(role_colour, disabled) { 
      if (!disabled) {
        const pickrRoleRegular = new Pickr({
          el: '#role-colorinput-regular',
          theme: 'monolith',
          useAsButton: true,
          lockOpacity: true,
          defaultRepresentation: 'HEX',
          closeWithKey: 'Enter',
          default: role_colour,
      
          components: {
              palette: true,
              preview: true,
              hue: true,
              interaction: {
                  input: true,
                  save: true,
              },
          },
        });
      
        // On save update the colour input's background colour and update the role colour input
        pickrRoleRegular.on("save", (color, instance) => {
          $("#role-colorinput-regular").css("background-color", color.toHEXA().toString());
          $("#role-colorinput-regular").css("border-color", color.toHEXA().toString());
          $("#role-colour").val(color.toHEXA().toString());
        });
      }
    }