DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:superacl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
plugin:superacl [2011-02-10 12:00]
94.69.81.2 [Code] fixed a typo and tampered the code formatting
plugin:superacl [2013-10-24 17:57]
qianhd
Line 1: Line 1:
 +
 ====== DokuWiki Plugin: superacl ====== ====== DokuWiki Plugin: superacl ======
  
Line 7: Line 8:
 type       : admin type       : admin
 lastupdate : 2008-05-25 lastupdate : 2008-05-25
-compatible : 2006-11-06, 2007-06-26, 2008-05-05+compatible : 2010-11-07, ​2006-11-06, 2007-06-26, 2008-05-05
 depends ​   :  depends ​   : 
 conflicts ​ :  conflicts ​ : 
Line 24: Line 25:
 ==== Download / Installation ==== ==== Download / Installation ====
  
-Download the plugin here (manually or via Plugin Manager): http://​pb.wh4f.de/​dokuwiki/​superacl2.zip //:!: Use this download only for DokuWiki 2008-05-05!//​+Download the plugin here (manually or via Plugin Manager): http://​pb.wh4f.de/​dokuwiki/​superacl2.zip //:!: Use this download only for DokuWiki 2008-05-05 ​and newer!//
  
 ===== Former edition ===== ===== Former edition =====
Line 730: Line 731:
  
 **ajax.php:​** **ajax.php:​**
 +
 +FIXME move this to action.php where it can hook the [[devel:​event:​ajax_call_unknown]] event.
  
 <code php ajax.php>​ <code php ajax.php>​
Line 741: Line 744:
 //fix for Opera XMLHttpRequests //fix for Opera XMLHttpRequests
 if(!count($_POST) && $HTTP_RAW_POST_DATA){ if(!count($_POST) && $HTTP_RAW_POST_DATA){
-  ​parse_str($HTTP_RAW_POST_DATA,​ $_POST);+    ​parse_str($HTTP_RAW_POST_DATA,​ $_POST);
 } }
 + 
 if(!defined('​DOKU_INC'​)) define('​DOKU_INC',​realpath(dirname(__FILE__).'/​../​../​../'​).'/'​);​ if(!defined('​DOKU_INC'​)) define('​DOKU_INC',​realpath(dirname(__FILE__).'/​../​../​../'​).'/'​);​
 require_once(DOKU_INC.'​inc/​init.php'​);​ require_once(DOKU_INC.'​inc/​init.php'​);​
Line 752: Line 755:
 //close session //close session
 session_write_close();​ session_write_close();​
 + 
 // check, if user is admin (or at least manager) // check, if user is admin (or at least manager)
 if (! auth_ismanager()) { if (! auth_ismanager()) {
- exit;+    ​exit;
 } }
 + 
 if ($_POST["​q"​] == "​namespaces"​) { if ($_POST["​q"​] == "​namespaces"​) {
-   get_namespace_list();​+    ​get_namespace_list();​
 } elseif ($_POST["​q"​] == "​pages"​) { } elseif ($_POST["​q"​] == "​pages"​) {
-   get_pages_list();​+    ​get_pages_list();​
 } }
 + 
 function get_namespace_list() { function get_namespace_list() {
-  ​ 
- $ID = $_POST["​pageid"​];​ 
- $selid = $_POST["​selid"​];​ 
  
-      $opt = array(); +    $ID = $_POST["​pageid"​]; 
-       +    $selid = $_POST["selid"];
-  // all namespace +
-     ​$namespaces = get_namespaces();​ +
-      +
-      // add namespaces of current page to the list of namespaces (even if the namespaces doesn'​t exist yet +
-      for($ns_id = getNS($ID); $ns_id !== false; $ns_id = getNS($ns_id)){ +
-          if (!in_array($ns_id,​$namespaces)) +
-             $namespaces[] = $ns_id+
-      } +
-      sort($namespaces);​ +
-       +
-      $namespaces ​array_reverse($namespaces);​ +
-      foreach ($namespaces as $ns_id) { +
-          $opt[] = array('​value'​=>​ $ns_id, '​text'​=>​ $ns_id.':​*'​);​ +
-          if ($ns_id == $selid) // set sel on current selected namespcase  +
-      $opt[count($opt)-1]['​sel'​] = true;  +
-      } +
-       +
-      $opt[] = array('​value'​=>​ '​*',​ '​text'​=>​ '​*'​);+
  
 +    $opt = array();
  
-      ​// flip options +    ​// all namespace 
-      $opt array_reverse($opt); +    $namespaces ​get_namespaces();
  
 +    // add namespaces of current page to the list of namespaces (even if the namespaces doesn'​t exist yet
 +    for($ns_id = getNS($ID); $ns_id !== false; $ns_id = getNS($ns_id)){
 +        if (!in_array($ns_id,​$namespaces)) $namespaces[] = $ns_id;
 +    }
 +    sort($namespaces);​
  
- /now construct a json */ +    $namespaces = array_reverse($namespaces);​ 
-  $json new JSON();+    foreach ($namespaces as $ns_id) { 
 +        $opt[] = array('​value'​=>​ $ns_id, '​text'​=>​ $ns_id.':​*'); 
 +        if ($ns_id == $selid) { // set sel on current selected namespcase  
 +            $opt[count($opt)-1]['​sel'​] = true; 
 +        } 
 +    }
  
-   +    $opt[] = array('value'=> '​*', ​'​text'​='​*'​);
-  //header('Content-Type:​ application/​json'); +
-  header('Content-Type: ​text/javascript'); +
-  print $json->encode($opt); +
-}+
  
  
 +    // flip options
 +    $opt = array_reverse($opt); ​
 +
 +
 +    /* now construct a json */
 +    $json = new JSON();
 +
 +
 +    //​header('​Content-Type:​ application/​json'​);​
 +    header('​Content-Type:​ text/​javascript'​);​
 +    print $json->​encode($opt);​
 +}
 + 
 + 
 function get_pages_list() { function get_pages_list() {
  
- $id = $_POST["​aclid"​];​ +    ​$id = $_POST["​aclid"​];​ 
- $selected_id = $_POST["​selid"​];​ +    $selected_id = $_POST["​selid"​];​ 
- +
     $opt = array();     $opt = array();
-  
- $pages = array_reverse(get_pages($id));​ 
  
-      ​// add pages in list +    $pages = array_reverse(get_pages($id));​ 
-      foreach ($pages as $page_id) { + 
-          $page_id = ($id != '​*'​ ? $id . ':'​ : ''​) . $page_id; +    ​// add pages in list 
-          $opt[] = array('​value'​=>​ $page_id,  +    foreach ($pages as $page_id) { 
-                         ​'​text'​=>​ $page_id.'​ ('​.$_POST['​page_text'​].'​)'​);​ +        $page_id = ($id != '​*'​ ? $id . ':'​ : ''​) . $page_id; 
-          if ($page_id ==  $selected_id) +        $opt[] = array( 
-            ​$opt[count($opt)-1]['​sel'​] = true; +            ​'​value'​=>​ $page_id,  
-      }       +            '​text'​=>​ $page_id.'​ ('​.$_POST['​page_text'​].'​)'​ 
-       +        ​); 
-      // additional namespaces +        if ($page_id ==  $selected_id) $opt[count($opt)-1]['​sel'​] = true; 
-      for(; $id !== false && $id != '​*';​ $id=getNS($id)){+    }       
 + 
 +    // additional namespaces 
 +    for(; $id !== false && $id != '​*';​ $id=getNS($id)){
         $opt[] = array('​value'​=>​ $id.':​*',​ '​text'​=>​ $id.':​* ('​.$_POST['​ns_text'​].'​)'​);​         $opt[] = array('​value'​=>​ $id.':​*',​ '​text'​=>​ $id.':​* ('​.$_POST['​ns_text'​].'​)'​);​
-        if ($id.':​*'​ ==  $selected_id) +        if ($id.':​*'​ ==  $selected_id) $opt[count($opt)-1]['​sel'​] = true; 
-          ​$opt[count($opt)-1]['​sel'​] = true; +    }
-       +
-      ​}+
  
-      ​// the top namespace +    ​// the top namespace 
-      $opt[] = array('​value'​=>​ '​*',​ '​text'​=>​ '* ('​.$_POST['​ns_text'​].'​)'​);​+    $opt[] = array('​value'​=>​ '​*',​ '​text'​=>​ '* ('​.$_POST['​ns_text'​].'​)'​);​
  
-      ​+    // flip options 
 +    $opt = array_reverse($opt);​
  
-      // flip options +    ​/* now construct a json */ 
-      $opt = array_reverse($opt);​ +    $json = new JSON(); 
-  + 
-  +    //​header('​Content-Type:​ application/​json'​);​ 
-  /* now construct a json */ +    header('​Content-Type:​ text/​javascript'​);​ 
-   ​$json = new JSON(); +    print $json->​encode($opt);​
-  +
-    +
-   ​//​header('​Content-Type:​ application/​json'​);​ +
-   ​header('​Content-Type:​ text/​javascript'​);​ +
-   ​print $json->​encode($opt);​+
 } }
  
-    ​function get_pages($tns=''​) { +function get_pages($tns=''​) { 
-        return _getlist($tns,​false,​false,​true);​ +    return _getlist($tns,​false,​false,​true);​ 
-    } +}
-     +
-   +
-   ​function get_namespaces($tns=''​) { +
-        return _getlist($tns,​true,​true,​false);​ +
-    } +
-    // inspired from addnewpageplugin:​  +
-     ​function _getlist ($tns='',​$recursive = true, $namespaces=true,​$pages=false) { +
- require_once(DOKU_INC.'​inc/​search.php'​);​ +
- global $conf; +
-  +
-        if ($tns == '​*'​) $tns = '';​+
    
- if (!is_dir($tns)) +  
- $tns  = str_replace(':','/',​$tns);​ +function get_namespaces($tns=''​) { 
-  +    return _getlist($tns,​true,​true,​false);​ 
- $data = array(); +
-  + 
-  +// inspired from addnewpageplugin:​  
- search($data,​$conf['​datadir'​] ."/"​ . $tns,'​search_index',​array('​ns'​ => ''​));​ +function _getlist ($tns='',​$recursive = true, $namespaces=true,​$pages=false) { 
-   +    require_once(DOKU_INC.'​inc/​search.php'​);​ 
- $data2 = array(); +    global $conf; 
- foreach($data as $k => $v) { + 
- if ($v['​type'​]=='​d'​) { //​Namespace +    if ($tns == '​*'​) $tns = '';​ 
-     ​if ($namespaces) + 
-     ​array_push($data2,​$v['​id'​]);​ +    ​if (!is_dir($tns)) $tns  = str_replace(':','/',​$tns);​ 
- if ($recursive) { + 
- $r=_getlist($tns.'/'​.$v['​id'​],​$recursive,​$namespaces,​$pages);​ +    $data = array(); 
- foreach ($r as $vv) { + 
- array_push($data2,​$v['​id'​].':'​.$vv);​ +    search($data,​$conf['​datadir'​] ."/"​ . $tns,'​search_index',​array('​ns'​ => ''​));​ 
- + 
- +    $data2 = array(); 
- } elseif ($v['​type'​]=='​f'​) { //Page +    foreach($data as $k => $v) { 
-     ​if ($pages) +        if ($v['​type'​]=='​d'​) { //​Namespace 
-     ​array_push($data2,​$v['​id'​]);​ +            if ($namespaces) array_push($data2,​$v['​id'​]);​ 
- +             
- +            ​if ($recursive) { 
- return $data2; +                $r=_getlist($tns.'/'​.$v['​id'​],​$recursive,​$namespaces,​$pages);​ 
-+                foreach ($r as $vv) { 
 +                    array_push($data2,​$v['​id'​].':'​.$vv);​ 
 +                
 +            
 +        } elseif ($v['​type'​]=='​f'​) { //Page 
 +            if ($pages) array_push($data2,​$v['​id'​]);​ 
 +        
 +    
 +    return $data2; 
 +
 ?> ?>
 </​code>​ </​code>​
Line 907: Line 903:
      if (!id || id.length<​4 || id.substring(0,​4) != baseLabel) continue;      if (!id || id.length<​4 || id.substring(0,​4) != baseLabel) continue;
      label = parseInt(id.substring(4));​      label = parseInt(id.substring(4));​
-     ​if (caller.checked && label < callerLabel) ​ //​check lower rights, too + //check lower rights, too 
-         ​e.checked = true; +     ​if (caller.checked && label < callerLabel) e.checked = true; 
-     else if (! caller.checked && label > callerLabel) ​//uncheck upper rights too + //uncheck upper rights too 
-         ​e.checked = false;+     else if (! caller.checked && label > callerLabel) e.checked = false;
  }  }
 } }
Line 926: Line 922:
  // fill namespace selector  // fill namespace selector
  if ($('​superacl__nsselid'​)) {  if ($('​superacl__nsselid'​)) {
-  
  var ajax_superaclns = new ajax_superacl_class();​  var ajax_superaclns = new ajax_superacl_class();​
-  
  ajax_superaclns.sack = new sack(DOKU_BASE + '​lib/​plugins/​superacl/​ajax.php'​);​  ajax_superaclns.sack = new sack(DOKU_BASE + '​lib/​plugins/​superacl/​ajax.php'​);​
  ajax_superaclns.sack.AjaxFailedAlert = '';​  ajax_superaclns.sack.AjaxFailedAlert = '';​
  ajax_superaclns.sack.encodeURIString = false;  ajax_superaclns.sack.encodeURIString = false;
- 
  ajax_superaclns.exec = function() {  ajax_superaclns.exec = function() {
  pageid = $("​superacl__pageid"​).value;​  pageid = $("​superacl__pageid"​).value;​
Line 938: Line 931:
  ajax_superaclns.sack.runAJAX('​q=namespaces&​pageid='​ + encodeURI(pageid) + '&​selid='​ + encodeURI(ns_selid));​  ajax_superaclns.sack.runAJAX('​q=namespaces&​pageid='​ + encodeURI(pageid) + '&​selid='​ + encodeURI(ns_selid));​
  };  };
-  
  ajax_superaclns.sack.onCompletion = function() {  ajax_superaclns.sack.onCompletion = function() {
  var data = eval(ajax_superaclns.sack.response);​  var data = eval(ajax_superaclns.sack.response);​
- if(data === ''​) ​+ if(data === ''​) return;​  ​  
-    return; +
-    } +
-     +
-   ​+
  // add namespaces to select box  // add namespaces to select box
  select = $('​superacl__nsselect'​);​  select = $('​superacl__nsselect'​);​
  for(i = 0; i < data.length;​ ++i) {  for(i = 0; i < data.length;​ ++i) {
-   ​option = new Option(data[i].text,​ data[i].value,​ data[i].sel,​ data[i].sel);​ + option = new Option(data[i].text,​ data[i].value,​ data[i].sel,​ data[i].sel);​ 
-   ​select.options[i] = option; + select.options[i] = option;
  }  }
  };  };
- 
         ajax_superaclns.exec();​         ajax_superaclns.exec();​
     }     }
Line 960: Line 947:
     if ($('​superacl__aclid'​)) {     if ($('​superacl__aclid'​)) {
       var ajax_superaclpage = new ajax_superacl_class();​       var ajax_superaclpage = new ajax_superacl_class();​
-  
  ajax_superaclpage.sack = new sack(DOKU_BASE + '​lib/​plugins/​superacl/​ajax.php'​);​  ajax_superaclpage.sack = new sack(DOKU_BASE + '​lib/​plugins/​superacl/​ajax.php'​);​
  ajax_superaclpage.sack.AjaxFailedAlert = '';​  ajax_superaclpage.sack.AjaxFailedAlert = '';​
  ajax_superaclpage.sack.encodeURIString = false;  ajax_superaclpage.sack.encodeURIString = false;
- 
  ajax_superaclpage.exec = function() {  ajax_superaclpage.exec = function() {
  acl_id = $("​superacl__aclid"​).value;​  acl_id = $("​superacl__aclid"​).value;​
Line 970: Line 955:
  page_text = $("​superacl__page_text"​).value;​  page_text = $("​superacl__page_text"​).value;​
  ns_text = $("​superacl__namespace_text"​).value;​  ns_text = $("​superacl__namespace_text"​).value;​
- ajax_superaclpage.sack.runAJAX('​q=pages&​aclid='​ + encodeURI(acl_id) + + ajax_superaclpage.sack.runAJAX( 
-                                '&​selid='​ + encodeURI(page_selid) + + '​q=pages&​aclid='​ + encodeURI(acl_id) + 
-                                '&​page_text='​ + encodeURI(page_text) + + '&​selid='​ + encodeURI(page_selid) + 
-                                '&​ns_text='​ + encodeURI(ns_text) );+ '&​page_text='​ + encodeURI(page_text) + 
 + '&​ns_text='​ + encodeURI(ns_text) ​ 
 + );
  };  };
-  
  ajax_superaclpage.sack.onCompletion = function() {  ajax_superaclpage.sack.onCompletion = function() {
  var data = eval(ajax_superaclpage.sack.response);​  var data = eval(ajax_superaclpage.sack.response);​
- if(data === ''​) ​+ if(data === ''​) return;
-    return; +
-    } +
-     +
-   ​+
  // add namespaces to select box  // add namespaces to select box
  select = $('​superacl__pageselect'​);​  select = $('​superacl__pageselect'​);​
  for(i = 0; i < data.length;​ ++i) {  for(i = 0; i < data.length;​ ++i) {
-   ​option = new Option(data[i].text,​ data[i].value,​ data[i].sel,​ data[i].sel);​ + option = new Option(data[i].text,​ data[i].value,​ data[i].sel,​ data[i].sel);​ 
-   ​select.options[i] = option; + select.options[i] = option;
  
  };  };
- 
         ajax_superaclpage.exec();​         ajax_superaclpage.exec();​
     }     }
Line 999: Line 980:
  
 ==== Patches ==== ==== Patches ====
 +
 +=== Incompatible with "​WeatherWax"​ ====
 +https://​www.dokuwiki.org/​changes#​release_candidate_weatherwax
  
  
Line 1019: Line 1003:
  
 <​del>​$idpage</​del>​ $ispage ​ = $this->​is_page($id);​ <​del>​$idpage</​del>​ $ispage ​ = $this->​is_page($id);​
 +> Ok, fixed
 +
 +
 +=== Overriding the ACL Admin Task ===
  
 +Would it be possible to override the ACL task item in the first section of the Administration screen (the list with the big icons) ? --- [[user>​petsagouris|George Petsagourakis]] //​2011/​02/​13 13:05//
plugin/superacl.txt · Last modified: 2014-03-20 18:23 by Aleksandr