Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

permissions.js

Zuletzt modifiziert: 09.10.2024, 12:52 - Dateigröße: 6.70 KiB


 001  /**
 002  * Hide and show all checkboxes
 003  * status = true (show boxes), false (hide boxes)
 004  */
 005  function display_checkboxes(status) {
 006      var form = document.getElementById('set-permissions');
 007      var cb = document.getElementsByTagName('input');
 008      var display;
 009   
 010      //show
 011      if (status) {
 012          display = 'inline';
 013      }
 014      //hide
 015      else {
 016          display = 'none';
 017      }
 018   
 019      for (var i = 0; i < cb.length; i++ ) {
 020          if (cb[i].className === 'permissions-checkbox') {
 021              cb[i].style.display = display;
 022          }
 023      }
 024  }
 025   
 026  /**
 027  * Change opacity of element
 028  * e = element
 029  * value = 0 (hidden) till 10 (fully visible)
 030  */
 031  function set_opacity(e, value) {
 032      e.style.opacity = value/10;
 033   
 034      //IE opacity currently turned off, because of its astronomical stupidity
 035      //e.style.filter = 'alpha(opacity=' + value*10 + ')';
 036  }
 037   
 038  /**
 039  * Reset the opacity and checkboxes
 040  * block_id = id of the element that needs to be toggled
 041  */
 042  function toggle_opacity(block_id) {
 043      var cb = document.getElementById('checkbox' + block_id);
 044      var fs = document.getElementById('perm' + block_id);
 045   
 046      if (cb.checked) {
 047          set_opacity(fs, 5);
 048      } else {
 049          set_opacity(fs, 10);
 050      }
 051  }
 052   
 053  /**
 054  * Reset the opacity and checkboxes
 055  * value = 0 (checked) and 1 (unchecked)
 056  * except_id = id of the element not to hide
 057  */
 058  function reset_opacity(status, except_id) {
 059      var perm = document.getElementById('set-permissions');
 060      var fs = perm.getElementsByTagName('fieldset');
 061      var opacity = 5;
 062   
 063      if (status) {
 064          opacity = 10;
 065      }
 066   
 067      for (var i = 0; i < fs.length; i++ ) {
 068          if (fs[i].className !== 'quick') {
 069              set_opacity(fs[i], opacity);
 070          }
 071      }
 072   
 073      if (typeof(except_id) !== 'undefined') {
 074          set_opacity(document.getElementById('perm' + except_id), 10);
 075      }
 076   
 077      //reset checkboxes too
 078      marklist('set-permissions', 'inherit', !status);
 079  }
 080   
 081  /**
 082  * Check whether we have a full radiobutton row of true
 083  * index = offset for the row of inputs (0 == first row, 1 == second, 2 == third),
 084  * rb = array of radiobuttons
 085  */
 086  function get_radio_status(index, rb) {
 087      for (var i = index; i < rb.length; i = i + 3 ) {
 088          if (rb[i].checked !== true) {
 089              if (i > index) {
 090                  //at least one is true, but not all (custom)
 091                  return 2;
 092              }
 093              //first one is not true
 094              return 0;
 095          }
 096      }
 097   
 098      // all radiobuttons true
 099      return 1;
 100  }
 101   
 102  /**
 103  * Set tab colours
 104  * id = panel the tab needs to be set for,
 105  * init = initialising on open,
 106  * quick = If no calculation needed, this contains the colour
 107  */
 108  function set_colours(id, init, quick) {
 109      var table = document.getElementById('table' + id);
 110      var tab = document.getElementById('tab' + id);
 111   
 112      if (typeof(quick) !== 'undefined') {
 113          tab.className = 'permissions-preset-' + quick + ' activetab';
 114          return;
 115      }
 116   
 117      var rb = table.getElementsByTagName('input');
 118      var colour = 'custom';
 119   
 120      var status = get_radio_status(0, rb);
 121   
 122      if (status === 1) {
 123          colour = 'yes';
 124      } else if (status === 0) {
 125          // We move on to No
 126          status = get_radio_status(1, rb);
 127   
 128          if (status === 1) {
 129              colour = 'no';
 130          } else if (status === 0) {
 131              // We move on to Never
 132              status = get_radio_status(2, rb);
 133   
 134              if (status === 1) {
 135                  colour = 'never';
 136              }
 137          }
 138      }
 139   
 140      if (init) {
 141          tab.className = 'permissions-preset-' + colour;
 142      } else {
 143          tab.className = 'permissions-preset-' + colour + ' activetab';
 144      }
 145  }
 146   
 147  /**
 148  * Initialise advanced tab colours on first load
 149  * block_id = block that is opened
 150  */
 151  function init_colours(block_id) {
 152      var block = document.getElementById('advanced' + block_id);
 153      var panels = block.getElementsByTagName('div');
 154      var tab = document.getElementById('tab' + id);
 155   
 156      for (var i = 0; i < panels.length; i++) {
 157          if (panels[i].className === 'permissions-panel') {
 158              set_colours(panels[i].id.replace(/options/, ''), true);
 159          }
 160      }
 161   
 162      tab.className = tab.className + ' activetab';
 163  }
 164   
 165  /**
 166  * Show/hide option panels
 167  * value = suffix for ID to show
 168  * adv = we are opening advanced permissions
 169  * view = called from view permissions
 170  */
 171  function swap_options(pmask, fmask, cat, adv, view) {
 172      id = pmask + fmask + cat;
 173      active_option = active_pmask + active_fmask + active_cat;
 174   
 175      var    old_tab = document.getElementById('tab' + active_option);
 176      var new_tab = document.getElementById('tab' + id);
 177      var adv_block = document.getElementById('advanced' + pmask + fmask);
 178   
 179      if (adv_block.style.display === 'block' && adv === true) {
 180          phpbb.toggleDisplay('advanced' + pmask + fmask, -1);
 181          reset_opacity(1);
 182          display_checkboxes(false);
 183          return;
 184      }
 185   
 186      // no need to set anything if we are clicking on the same tab again
 187      if (new_tab === old_tab && !adv) {
 188          return;
 189      }
 190   
 191      // init colours
 192      if (adv && (pmask + fmask) !== (active_pmask + active_fmask)) {
 193          init_colours(pmask + fmask);
 194          display_checkboxes(true);
 195          reset_opacity(1);
 196      } else if (adv) {
 197          //Checkbox might have been clicked, but we need full visibility
 198          display_checkboxes(true);
 199          reset_opacity(1);
 200      }
 201   
 202      // set active tab
 203      old_tab.className = old_tab.className.replace(/\ activetab/g, '');
 204      new_tab.className = new_tab.className + ' activetab';
 205   
 206      if (id === active_option && adv !== true) {
 207          return;
 208      }
 209   
 210      phpbb.toggleDisplay('options' + active_option, -1);
 211   
 212      //hiding and showing the checkbox
 213      if (document.getElementById('checkbox' + active_pmask + active_fmask)) {
 214          phpbb.toggleDisplay('checkbox' + pmask + fmask, -1);
 215   
 216          if ((pmask + fmask) !== (active_pmask + active_fmask)) {
 217              document.getElementById('checkbox' + active_pmask + active_fmask).style.display = 'inline';
 218          }
 219      }
 220   
 221      if (!view) {
 222          phpbb.toggleDisplay('advanced' + active_pmask + active_fmask, -1);
 223      }
 224   
 225      if (!view) {
 226          phpbb.toggleDisplay('advanced' + pmask + fmask, 1);
 227      }
 228      phpbb.toggleDisplay('options' + id, 1);
 229   
 230      active_pmask = pmask;
 231      active_fmask = fmask;
 232      active_cat = cat;
 233  }
 234   
 235  /**
 236  * Mark all radio buttons in one panel
 237  * id = table ID container, s = status ['y'/'u'/'n']
 238  */
 239  function mark_options(id, s) {
 240      var t = document.getElementById(id);
 241   
 242      if (!t) {
 243          return;
 244      }
 245   
 246      var rb = t.getElementsByTagName('input');
 247   
 248      for (var r = 0; r < rb.length; r++) {
 249          if (rb[r].id.substr(rb[r].id.length-1) === s) {
 250              rb[r].checked = true;
 251          }
 252      }
 253  }
 254   
 255  function mark_one_option(id, field_name, s) {
 256      var t = document.getElementById(id);
 257   
 258      if (!t) {
 259          return;
 260      }
 261   
 262      var rb = t.getElementsByTagName('input');
 263   
 264      for (var r = 0; r < rb.length; r++) {
 265          if (rb[r].id.substr(rb[r].id.length-field_name.length-3, field_name.length) === field_name && rb[r].id.substr(rb[r].id.length-1) === s) {
 266              rb[r].checked = true;
 267          }
 268      }
 269  }
 270   
 271  /**
 272  * Reset role dropdown field to Select role... if an option gets changed
 273  */
 274  function reset_role(id) {
 275      var t = document.getElementById(id);
 276   
 277      if (!t) {
 278          return;
 279      }
 280   
 281      t.options[0].selected = true;
 282  }
 283   
 284  /**
 285  * Load role and set options accordingly
 286  */
 287  function set_role_settings(role_id, target_id) {
 288      settings = role_options[role_id];
 289   
 290      if (!settings) {
 291          return;
 292      }
 293   
 294      // Mark all options to no (unset) first...
 295      mark_options(target_id, 'u');
 296   
 297      for (var r in settings) {
 298          mark_one_option(target_id, r, (settings[r] === 1) ? 'y' : 'n');
 299      }
 300  }
 301