diff --git a/inc/acl_admin.php b/inc/acl_admin.php deleted file mode 100644 index f7cd7fbd7d9beb4d7826e4203e0ed86079e624a1..0000000000000000000000000000000000000000 --- a/inc/acl_admin.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php -/** - * $ID is pagename, reads matching lines from $AUTH_ACL, - * also reads acls from namespace - * returns multi-array with key=pagename and value=array(user, acl) - * - * @author Frank Schubert <frank@schokilade.de> - */ -function get_acl_config($ID){ - global $AUTH_ACL; - - $acl_config=array(); - - // match exact name - $matches = preg_grep('/^'.$ID.'\s+.*/',$AUTH_ACL); - if(count($matches)){ - foreach($matches as $match){ - $match = preg_replace('/#.*$/','',$match); //ignore comments - $acl = preg_split('/\s+/',$match); - //0 is pagename, 1 is user, 2 is acl - $acl_config["$acl[0]"][]=array($acl[1],$acl[2]); - } - } - - $specific_found=array(); - // match ns - if(($ID=getNS($ID)) !== false){ - $matches = preg_grep('/^'.$ID.':\*\s+.*/',$AUTH_ACL); - if(count($matches)){ - foreach($matches as $match){ - $match = preg_replace('/#.*$/','',$match); //ignore comments - $acl = preg_split('/\s+/',$match); - //0 is pagename, 1 is user, 2 is acl - $acl_config["$acl[0]"][]=array($acl[1],$acl[2]); - $specific_found[]=$acl[1]; - } - } - } - - //include *-config - $matches = preg_grep('/^\*\s+.*/',$AUTH_ACL); - if(count($matches)){ - foreach($matches as $match){ - $match = preg_replace('/#.*$/','',$match); //ignore comments - $acl = preg_split('/\s+/',$match); - // only include * for this user if not already found in ns - if(!in_array($acl[1], $specific_found)){ - //0 is pagename, 1 is user, 2 is acl - $acl_config["$acl[0]"][]=array($acl[1],$acl[2]); - } - } - } - - //sort - //FIXME: better sort algo: first sort by key, then sort by first value - krsort($acl_config, SORT_STRING); - - return($acl_config); -} - -/** - * adds new acl-entry to conf/acl.auth - * - * @author Frank Schubert <frank@schokilade.de> - */ -function acl_admin_add($acl_scope, $acl_user, $acl_level){ - if($acl_scope === '' || $acl_user === '' || $acl_level === '') { return false; } - - $acl_config = join("",file('conf/acl.auth')); - - // max level for pagenames is 2 - if(strpos("*", $acl_scope) === false) { - if($acl_level > 2) { $acl_level = 2; } - } - - $new_acl = "$acl_scope\t$acl_user\t$acl_level\n"; - - $new_config = $acl_config.$new_acl; - - return io_saveFile("conf/acl.auth", $new_config); -} - -/** - * remove acl-entry from conf/acl.auth - * - * @author Frank Schubert <frank@schokilade.de> - */ -function acl_admin_del($acl_scope, $acl_user, $acl_level){ - if($acl_scope === '' || $acl_user === '' || $acl_level === '') { return false; } - - $acl_pattern = preg_quote($acl_scope)."\s+".$acl_user."\s+".$acl_level."\n"; - - $acl_config = file('conf/acl.auth'); - - // save all non!-matching - $new_config = preg_grep("/$acl_pattern/", $acl_config, PREG_GREP_INVERT); - - return io_saveFile("conf/acl.auth", join("",$new_config)); -} - -/** - * change existing acl entries - * - * @author Frank Schubert <frank@schokilade.de> - */ -function acl_admin_change($acl_scope, $acl_user, $acl_level, $acl_checkbox){ - - $new_level = 0; - if(is_array($acl_checkbox)) { - foreach($acl_checkbox as $acl_num => $value){ - if( ($value == "on") && - ($acl_num > $new_level)) { - $new_level = $acl_num; - } - } - } - - acl_admin_del($acl_scope, $acl_user, $acl_level); - acl_admin_add($acl_scope, $acl_user, $new_level); -} -?> diff --git a/inc/actions.php b/inc/actions.php index e660c136b1008c1c1186a821b135ee2edeb4bda3..282d36ae7f7b37aa954d36c40d817ccc16139a52 100644 --- a/inc/actions.php +++ b/inc/actions.php @@ -59,9 +59,19 @@ function act_dispatch(){ $ACT = 'show'; } + //handle admin tasks + if($ACT == 'admin'){ + if($_REQUEST['page'] == 'acl'){ + require_once(DOKU_INC.'inc/admin_acl.php'); + admin_acl_handler(); + } + } + //call template FIXME: all needed vars available? header('Content-Type: text/html; charset=utf-8'); include(DOKU_INC.'tpl/'.$conf['template'].'/main.php'); + // output for the commands is now handled in inc/templates.php + // in function tpl_content() } /** @@ -85,7 +95,7 @@ function act_clean($act){ if(!array_search($act,array('login','logout','register','save','edit', 'preview','export_raw','export_html', 'search','show','check','index','revisions', - 'diff','recent','backlink',))){ + 'diff','recent','backlink','admin',))){ msg('Unknown command: '.htmlspecialchars($act),-1); return 'show'; } @@ -108,6 +118,8 @@ function act_permcheck($act){ } }elseif(in_array($act,array('login','register','search','recent'))){ $permneed = AUTH_NONE; + }elseif($act == 'admin'){ + $permneed = AUTH_ADMIN; }else{ $permneed = AUTH_READ; } diff --git a/inc/admin_acl.php b/inc/admin_acl.php new file mode 100644 index 0000000000000000000000000000000000000000..9732318f0804fb44bf87959ff16280a74610ca7e --- /dev/null +++ b/inc/admin_acl.php @@ -0,0 +1,388 @@ +<?php +/** + * ACL administration functions + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Frank Schubert <frank@schokilade.de> + */ + +function admin_acl_handler(){ + $cmd = $_REQUEST['acl_cmd']; + $scope = $_REQUEST['acl_scope']; + $type = $_REQUEST['acl_type']; + $user = $_REQUEST['acl_user']; + $perm = $_REQUEST['acl_perm']; + if(is_array($perm)){ + $perm = array_pop(sort($perm)); //use the maximum + }else{ + $perm = 0; + } + + //sanitize + $user = cleanID($user); + if($type == '@') $user = '@'.$user; + if($perm > AUTH_UPLOAD) $perm = AUTH_UPLOAD; + //FIXME sanitize scope!!! + + + //FIXME add should delete if nessary, too + if($cmd == 'add'){ + admin_acl_add($scope, $user, $perm); //add feedback? + }elseif($cmd == 'update'){ + admin_acl_del($scope, $user, $perm); + admin_acl_add($scope, $user, $perm); + }elseif($cmd == 'delete'){ + admin_acl_del($scope, $user, $perm); + } + +} + +/** + * Get matching ACL lines for a page + * + * $ID is pagename, reads matching lines from $AUTH_ACL, + * also reads acls from namespace + * returns multi-array with key=pagename and value=array(user, acl) + * + * @todo Fix comment to make sense + * @todo should this moved to auth.php? + * @todo can this be combined with auth_aclcheck to avoid duplicate code? + * @author Frank Schubert <frank@schokilade.de> + */ +function get_acl_config($ID){ + global $AUTH_ACL; + + $acl_config=array(); + + // match exact name + $matches = preg_grep('/^'.$ID.'\s+.*/',$AUTH_ACL); + if(count($matches)){ + foreach($matches as $match){ + $match = preg_replace('/#.*$/','',$match); //ignore comments + $acl = preg_split('/\s+/',$match); + //0 is pagename, 1 is user, 2 is acl + $acl_config[$acl[0]][] = array( 'name' => $acl[1], 'perm' => $acl[2]); + } + } + + $specific_found=array(); + // match ns + if(($ID=getNS($ID)) !== false){ + $matches = preg_grep('/^'.$ID.':\*\s+.*/',$AUTH_ACL); + if(count($matches)){ + foreach($matches as $match){ + $match = preg_replace('/#.*$/','',$match); //ignore comments + $acl = preg_split('/\s+/',$match); + //0 is pagename, 1 is user, 2 is acl + $acl_config[$acl[0]][] = array( 'name' => $acl[1], 'perm' => $acl[2]); + $specific_found[]=$acl[1]; + } + } + } + + //include *-config + $matches = preg_grep('/^\*\s+.*/',$AUTH_ACL); + if(count($matches)){ + foreach($matches as $match){ + $match = preg_replace('/#.*$/','',$match); //ignore comments + $acl = preg_split('/\s+/',$match); + // only include * for this user if not already found in ns + if(!in_array($acl[1], $specific_found)){ + //0 is pagename, 1 is user, 2 is acl + $acl_config[$acl[0]][] = array( 'name' => $acl[1], 'perm' => $acl[2]); + } + } + } + + //sort + //FIXME: better sort algo: first sort by key, then sort by first value + krsort($acl_config, SORT_STRING); + + return($acl_config); +} + + +/** + * adds new acl-entry to conf/acl.auth + * + * @author Frank Schubert <frank@schokilade.de> + */ +function admin_acl_add($acl_scope, $acl_user, $acl_level){ + if($acl_scope === '' || $acl_user === '' || $acl_level === '') return false; + + $acl_config = join("",file('conf/acl.auth')); + + // max level for pagenames is edit + if(strpos("*", $acl_scope) === false) { + if($acl_level > AUTH_EDIT) $acl_level = AUTH_EDIT; + } + + $new_acl = "$acl_scope\t$acl_user\t$acl_level\n"; + + $new_config = $acl_config.$new_acl; + + return io_saveFile("conf/acl.auth", $new_config); +} + +/** + * remove acl-entry from conf/acl.auth + * + * @author Frank Schubert <frank@schokilade.de> + */ +function admin_acl_del($acl_scope, $acl_user, $acl_level){ + if($acl_scope === '' || $acl_user === '' || $acl_level === '') return false; + + $acl_pattern = preg_quote($acl_scope)."\s+".$acl_user."\s+".$acl_level."\n"; + + $acl_config = file('conf/acl.auth'); + + // save all non!-matching + $new_config = preg_grep("/$acl_pattern/", $acl_config, PREG_GREP_INVERT); + + return io_saveFile("conf/acl.auth", join("",$new_config)); +} + +// --- HTML OUTPUT FUNCTIONS BELOW --- // + +/** + * ACL Output function + * + * print a table with all significant permissions for the + * current id + * + * @author Frank Schubert <frank@schokilade.de> + * @author Andreas Gohr <andi@splitbrain.org> + */ +function admin_acl_html(){ + global $ID; + + print parsedLocale('admin_acl'); + + ptln('<div class="acladmin"'); + ptln('<table class="inline">'); + + //new + admin_acl_html_new(); + + //current config + $acls = get_acl_config($ID); + foreach ($acls as $id => $acl){ + admin_acl_html_current($id,$acl); + } + + ptln('</table>'); + ptln('</div>'); +} + +/** + * print tablerows with the current permissions for one id + * + * @author Frank Schubert <frank@schokilade.de> + * @author Andreas Gohr <andi@splitbrain.org> + */ +function admin_acl_html_dropdown($id){ + global $lang; + $cur = $id; + $ret = ''; + $opt = array(); + + //prepare all options + + // current page + $opt[] = array('key'=> $id, 'val'=> $id.' ('.$lang['page'].')'); + + // additional namespaces + while(($id=getNS($id)) !== false){ + $opt[] = array('key'=> $id.':*', 'val'=> $id.':* ('.$lang['namespace'].')'); + } + + // the top namespace + $opt[] = array('key'=> '*', 'val'=> '* ('.$lang['namespace'].')'); + + // set sel on second entry (current namespace) + $opt[1]['sel'] = ' selected="selected"'; + + // flip options + $opt = array_reverse($opt); + + // create HTML + $att = array( 'name' => 'acl_scope', + 'class' => 'edit', + 'title' => $lang['page'].'/'.$lang['namespace']); + $ret .= '<select '.html_attbuild($att).' />'; + foreach($opt as $o){ + $ret .= '<option value="'.$o['key'].'"'.$o['sel'].'>'.$o['val'].'</option>'; + } + $ret .= '</select>'; + + return $ret; +} + +/** + * print tablerows with the current permissions for one id + * + * @author Frank Schubert <frank@schokilade.de> + * @author Andreas Gohr <andi@splitbrain.org> + */ +function admin_acl_html_new(){ + global $lang; + global $ID; + + // table headers + ptln('<tr>',2); + ptln(' <th class="leftalign" colspan="3">'.$lang['acl_new'].'</th>',2); + ptln('</tr>',2); + + ptln('<tr>',2); + + ptln('<td class="centeralign" colspan="3">',4); + + ptln(' <form method="post" action="'.wl($ID).'">',4); + ptln(' <input type="hidden" name="do" value="admin" />',4); + ptln(' <input type="hidden" name="page" value="acl" />',4); + ptln(' <input type="hidden" name="acl_cmd" value="add" />',4); + + //scope select + ptln($lang['acl_perms'],4); + ptln(admin_acl_html_dropdown($ID),4); + + $att = array( 'name' => 'acl_type', + 'class' => 'edit', + 'title' => $lang['acl_user'].'/'.$lang['acl_group']); + ptln(' <select '.html_attbuild($att).'>',4); + ptln(' <option value="@">'.$lang['acl_group'].'</option>',4); + ptln(' <option value="">'.$lang['acl_user'].'</option>',4); + ptln(' </select>',4); + + $att = array( 'name' => 'acl_user', + 'type' => 'text', + 'class' => 'edit', + 'title' => $lang['acl_user'].'/'.$lang['acl_group']); + ptln(' <input '.html_attbuild($att).' />',4); + ptln(' <br />'); + + ptln( admin_acl_html_checkboxes(0,false,false),8); + + ptln(' <input type="submit" class="edit" value="'.$lang['btn_save'].'" \>',4); + ptln(' </form>'); + + + + + ptln('</tr>',2); + +} + +/** + * print tablerows with the current permissions for one id + * + * @author Frank Schubert <frank@schokilade.de> + * @author Andreas Gohr <andi@splitbrain.org> + */ +function admin_acl_html_current($id,$permissions){ + global $lang; + global $ID; + + //is it a page? + if(substr($id,-1) == '*'){ + $ispage = false; + }else{ + $ispage = true; + } + + // table headers + ptln(' <tr>'); + ptln(' <th class="leftalign" colspan="3">'); + ptln($lang['acl_perms'],6); + if($ispage){ + ptln($lang['page'],6); + }else{ + ptln($lang['namespace'],6); + } + ptln('<em>'.$id.'</em>',6); + ptln(' </th>'); + ptln(' </tr>'); + + foreach ($permissions as $conf){ + //userfriendly group/user display + if(substr($conf['name'],0,1)=="@"){ + $group = $lang['acl_group']; + $name = substr($conf['name'],1); + }else{ + $group = $lang['acl_user']; + $name = $conf['name']; + } + + ptln('<tr>',2); + ptln('<td class="leftalign">'.$group.' '.$name.'</th>',4); + + // update form + ptln('<td class="centeralign">',4); + ptln(' <form method="post" action="'.wl($ID).'">',4); + ptln(' <input type="hidden" name="do" value="admin" />',4); + ptln(' <input type="hidden" name="page" value="acl" />',4); + ptln(' <input type="hidden" name="acl_cmd" value="update" />',4); + ptln(' <input type="hidden" name="acl_scope" value="'.formtext($id).'" />',4); + ptln(' <input type="hidden" name="acl_user" value="'.formtext($conf['name']).'" />',4); + ptln( admin_acl_html_checkboxes($conf['perm'],$ispage),8); + ptln(' <input type="submit" class="edit" value="'.$lang['btn_update'].'" \>',4); + ptln(' </form>'); + ptln('</td>',4); + + + // deletion form + + $ask = $lang['del_confirm'].'\\n'; + $ask .= $id.' '.$conf['name'].' '.$conf['perm']; + ptln('<td class="centeralign">',4); + ptln(' <form method="post" action="'.wl($ID).'" onsubmit="return confirm(\''.$ask.'\')">',4); + ptln(' <input type="hidden" name="do" value="admin" />',4); + ptln(' <input type="hidden" name="page" value="acl" />',4); + ptln(' <input type="hidden" name="acl_cmd" value="delete" />',4); + ptln(' <input type="hidden" name="acl_scope" value="'.formtext($id).'" />',4); + ptln(' <input type="hidden" name="acl_user" value="'.formtext($conf['name']).'" />',4); + ptln(' <input type="submit" class="edit" value="'.$lang['btn_delete'].'" \>',4); + ptln(' </form>',4); + ptln('</td>',4); + + ptln('</tr>',2); + } + +} + + +/** + * print the permission checkboxes + * + * @author Frank Schubert <frank@schokilade.de> + * @author Andreas Gohr <andi@splitbrain.org> + */ +function admin_acl_html_checkboxes($setperm,$ispage,$submit=false){ + global $lang; + + static $label = 0; //number labels + $ret = ''; + + foreach(array(AUTH_READ,AUTH_EDIT,AUTH_CREATE,AUTH_UPLOAD) as $perm){ + $label += 1; + + //general checkbox attributes + $atts = array( 'type' => 'checkbox', + 'id' => 'pbox'.$label, + 'name' => 'aclperm[]', + 'value' => $perm ); + //dynamic attributes + if($setperm >= $perm) $atts['checked'] = 'checked'; + if($submit) $atts['onchange'] = 'submit()'; + if($ispage && $perm > AUTH_EDIT) $atts['disabled'] = 'disabled'; + + //build code + $ret .= '<label for="pbox'.$label.'" title="'.$lang['acl_perm'.$perm].'">'; + $ret .= '<input '.html_attbuild($atts).' />'; + $ret .= $lang['acl_perm'.$perm]; + $ret .= "</label>\n"; + } + return $ret; +} + +?> diff --git a/inc/html.php b/inc/html.php index df3f446b5cae9eca699c686f436f69df9bb830cc..3b31c96ff8b32f7a94b08f5dc182aaaa58e68794 100644 --- a/inc/html.php +++ b/inc/html.php @@ -29,6 +29,19 @@ function html_wikilink($url,$name='',$search=''){ return format_link_build($link); } +/** + * Helps building long attribute lists + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +function html_attbuild($attributes){ + $ret = ''; + foreach ( $attributes as $key => $value ) { + $ret .= $key.'="'.formtext($value).'" '; + } + return trim($ret); +} + /** * The loginform * @@ -1208,6 +1221,9 @@ function html_acl_admin(){ ?> <fieldset style="float:left; text-align:left; white-space:nowrap; width:320px;"> <legend><?=$lang['acl_admin']?></legend> + + +<!-- XXXXXXXXXXXXX --> <form name="acl_admin_add" method="post" action="<?=wl($ID)?>" accept-charset="<?=$lang['encoding']?>"> <input type="hidden" name="do" value="acl_admin_add" /> @@ -1241,17 +1257,20 @@ function html_acl_admin(){ </tr> </table> </form> +<!-- XXXXXXXXXXXXX --> </fieldset> <div style="float:right;"> <fieldset> <legend><?=$lang['acl_current']?></legend> <div style="text-align:left"> + +<!-- XXXXXXXXXXXXX --> <?php $acl_config=get_acl_config($ID); foreach($acl_config as $pagename => $value){ if($pagename != '*') { - $ID_cur=$pagename; + $ID_cur=$pagename; while(($piece=getNS($ID_cur)) !== false){ $url="<a href='".wl($piece,'do=acl_admin')."'>".noNS($piece)."</a>:".$url;; $ID_cur=$piece; @@ -1262,6 +1281,8 @@ function html_acl_admin(){ }else{ print $pagename; } ?> + + <!-- XXXXXXXXXXXXX --> <table class="inline"> <tr> <th class="inline"></th> @@ -1270,7 +1291,7 @@ function html_acl_admin(){ <th class="inline">W</th> <th class="inline">C</th> <th class="inline">U</th> - <th class="inline">UPDATE</th> + <th class="inline">UPDATE</th> <th class="inline">DELETE</th> </tr> <?php @@ -1337,4 +1358,24 @@ function html_acl_admin(){ </div> <? } + +/** + * Print the admin overview page + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +function html_admin(){ + global $ID; + global $lang; + + print parsedLocale('admin'); + + ptln('<ul class="admin">'); + + // currently ACL only - more to come + ptln('<li><a href="'.wl($ID,'do=admin&page=acl').'">'.$lang['admin_acl'].'</a></li>'); + + ptln('</ul>'); +} + ?> diff --git a/inc/template.php b/inc/template.php index d52d5c7a00940b74815aa57d8f8a0fad38d2ca23..8047a33d07c61677262994475e84e96efb31e4df 100644 --- a/inc/template.php +++ b/inc/template.php @@ -99,11 +99,28 @@ function tpl_content(){ case 'denied': print parsedLocale('denied'); break; + case 'admin': + tpl_admin(); + break; default: msg("Failed to handle command: ".hsc($ACT),-1); } } +/** + * Handle the admin page contents + * + * @author Andreas Gohr <andi@splitbrain.org> + */ +function tpl_admin(){ + switch($_REQUEST['page']){ + case 'acl': + admin_acl_html(); + break; + default: + html_admin(); + } +} /** * Print the correct HTML meta headers @@ -184,12 +201,14 @@ function tpl_link($url,$name,$more=''){ * recent - recent changes * login - login/logout button - if ACL enabled * index - The index + * admin - admin page - if enough rights * top - a back to top button * * @author Andreas Gohr <andi@splitbrain.org> */ function tpl_button($type){ global $ID; + global $INFO; global $conf; switch($type){ @@ -217,6 +236,12 @@ function tpl_button($type){ } } break; + case 'admin': + if($INFO['perm'] == AUTH_ADMIN) + print html_btn(admin,$ID,'',array('do' => 'admin')); + break; + default: + print '[unknown button type]'; } } diff --git a/lang/de/acl_admin.txt b/lang/de/acl_admin.txt deleted file mode 100644 index 3693f82c7d016556e361436ea17e61637b45eb2e..0000000000000000000000000000000000000000 --- a/lang/de/acl_admin.txt +++ /dev/null @@ -1,3 +0,0 @@ -====== ACL-Administration ====== - -Ansicht der vorhandenen ACL-Einstellungen und Konfiguration. diff --git a/lang/de/lang.php b/lang/de/lang.php index 1980c34b6ec4e5fe8ecd7b48b1c2d38fa0b62aa4..ce4a665c4195edea31f6c1e50874a7e65a91e358 100644 --- a/lang/de/lang.php +++ b/lang/de/lang.php @@ -25,7 +25,7 @@ $lang['btn_index'] = 'Übersicht'; $lang['btn_secedit']= 'Bearbeiten'; $lang['btn_login'] = 'Einloggen'; $lang['btn_logout'] = 'Ausloggen'; -$lang['btn_acl_admin'] = 'ACL'; +$lang['btn_admin'] = 'Admin'; $lang['loggedinas'] = 'Eingeloggt als'; $lang['user'] = 'Benutzername'; @@ -101,21 +101,5 @@ $lang['qb_ul'] = 'Listenpunkt'; $lang['qb_media'] = 'Bilder und andere Dateien hinzufügen'; $lang['qb_sig'] = 'Unterschrift einfügen'; -$lang['acl_admin'] = 'Hinzufügen'; -$lang['acl_current']= 'Aktuelle Access Control Konfiguration'; -$lang['acl_user'] = 'Benutzer/Gruppe'; -$lang['acl_scope'] = 'Pagename/Namespace'; -$lang['acl_level'] = 'Zugriffslevel'; -$lang['acl_none'] = 'Keine'; -$lang['acl_read'] = 'Lesen'; -$lang['acl_edit'] = 'Bearbeiten'; -$lang['acl_create'] = 'Anlegen'; -$lang['acl_upload'] = 'Upload'; -$lang['acl_commit'] = 'Ausführen'; -$lang['acl_input_request'] = 'bitte wählen'; -$lang['acl_group'] = 'Gruppe'; -$lang['acl_user'] = 'Benutzer'; -$lang['acl_confirm_delete'] = 'Diesen Eintrag entfernen?'; - //Setup VIM: ex: et ts=2 enc=utf-8 : ?> diff --git a/lang/en/acl_admin.txt b/lang/en/acl_admin.txt deleted file mode 100644 index e8a112619330827f93fc7dde597ece47c6180269..0000000000000000000000000000000000000000 --- a/lang/en/acl_admin.txt +++ /dev/null @@ -1,3 +0,0 @@ -=== ACL-adminstration === - -View current acl-configuration and change it. diff --git a/lang/en/lang.php b/lang/en/lang.php index f98e0d20d6428a122d9f78a8fb17f7d2ec38f6f3..206d82cafafe4036ffe2ae570c01ab16d8cd42c9 100644 --- a/lang/en/lang.php +++ b/lang/en/lang.php @@ -24,7 +24,9 @@ $lang['btn_index'] = 'Index'; $lang['btn_secedit']= 'Edit'; $lang['btn_login'] = 'Login'; $lang['btn_logout'] = 'Logout'; -$lang['btn_acl_admin'] = 'ACL'; +$lang['btn_admin'] = 'Admin'; +$lang['btn_update'] = 'Update'; +$lang['btn_delete'] = 'Delete'; $lang['loggedinas'] = 'Logged in as'; $lang['user'] = 'Username'; @@ -99,21 +101,21 @@ $lang['qb_ul'] = 'Unordered List Item'; $lang['qb_media'] = 'Add Images and other files'; $lang['qb_sig'] = 'Insert Signature'; -$lang['acl_admin'] = 'New'; -$lang['acl_current']= 'Current Access Control Configuration'; -$lang['acl_user'] = 'User/Group'; -$lang['acl_scope'] = 'Pagename/Namespace'; -$lang['acl_level'] = 'Access Level'; -$lang['acl_none'] = 'None'; -$lang['acl_read'] = 'Read'; -$lang['acl_edit'] = 'Edit'; -$lang['acl_create'] = 'Create'; -$lang['acl_upload'] = 'Upload'; -$lang['acl_commit'] = 'Commit'; -$lang['acl_input_request'] = 'please select'; +$lang['del_confirm']= 'Delete this entry?'; + +$lang['admin_acl'] = 'Access Control List Management...'; + $lang['acl_group'] = 'Group'; $lang['acl_user'] = 'User'; -$lang['acl_confirm_delete'] = 'Delete this entry?'; +$lang['acl_perms'] = 'Permissions for'; +$lang['page'] = 'Page'; +$lang['namespace'] = 'Namespace'; + +$lang['acl_perm1'] = 'Read'; +$lang['acl_perm2'] = 'Edit'; +$lang['acl_perm4'] = 'Create'; +$lang['acl_perm8'] = 'Upload'; +$lang['acl_new'] = 'Add new Entry'; //Setup VIM: ex: et ts=2 enc=utf-8 : ?> diff --git a/tpl/default/design.css b/tpl/default/design.css index 2bf7903ea1f783fbeb3dd31e5244159c9081a3fd..f25c889359cc57fb96faf094f7adf88d06616733 100644 --- a/tpl/default/design.css +++ b/tpl/default/design.css @@ -87,7 +87,7 @@ textarea.edit { width:100%; } -input.edit { +input.edit,select.edit { font-size: 100%; border: 1px solid #8cacbb; height: 22px !important; @@ -565,3 +565,16 @@ div.search_quickhits { .footerinc a:hover img { opacity: 1; } + +/* ---- Admin --- */ + +div.acladmin label { + text-align: left; + font-weight: normal; + display: inline; +} + +div.acladmin table{ + margin-left: 10%; + width: 80%; +} diff --git a/images/interwiki.png b/tpl/default/images/interwiki.png similarity index 100% rename from images/interwiki.png rename to tpl/default/images/interwiki.png diff --git a/tpl/default/main.php b/tpl/default/main.php index a19ee32171875f3431780c9033a272bf3ce0f2dc..09171714260b1f169fee13721db4078aac4a15f6 100644 --- a/tpl/default/main.php +++ b/tpl/default/main.php @@ -98,6 +98,7 @@ <?tpl_button('history')?> </div> <div class="bar-right" id="bar_bottomright"> + <?tpl_button('admin')?> <?tpl_button('login')?> <?tpl_button('index')?> <?tpl_button('top')?>