summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 474750b)
raw | patch | inline | side by side (parent: 474750b)
author | cajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 7 Jul 2006 14:31:42 +0000 (14:31 +0000) | ||
committer | cajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 7 Jul 2006 14:31:42 +0000 (14:31 +0000) |
There's no save yet, there's no interpretation of acl's yet.
Old ACLs may not work anymore.
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@4052 594d385d-05f5-0310-b6e9-bd551577e9d8
Old ACLs may not work anymore.
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@4052 594d385d-05f5-0310-b6e9-bd551577e9d8
12 files changed:
index 3018b6517bb7560d4baa6727192818965b585127..0884d9ddcdca8ce0da32844827195d220aa68a55 100644 (file)
--- a/TODO
+++ b/TODO
Target for 2.6:
===============
+* {if $javascript eq 'false'} for all refresh buttons that are not in filter
+
* Add new smarty gettext plugin -> requires fixing of <b> and <i> tags in
translations
index 1cab881b410202f1926c35ce4d7c3e048c2a21d3..419446592c24640539633e7b269c4e550da13e99 100644 (file)
--- a/include/class_plugin.inc
+++ b/include/class_plugin.inc
/* Plugin identifier */
var $plHeadline= "";
var $plDescription= "";
- var $plObject_name= "";
- var $plProvided_acls= array();
- var $plSelf_modify= FALSE;
- var $plOptions= array();
- var $plSection= "";
- var $plTask= array();
- var $plPriority= 0;
- var $plDepends= array();
- var $plConflicts= array();
/*! \brief plugin constructor
return($this->snapDialog->execute());
}
}
+
+
+ function plInfo()
+ {
+ #var $plObject_name= "";
+ #var $plProvidedAcls= array();
+ #var $plSelfModify= FALSE;
+ #var $plOptions= array();
+ #var $plSection= "";
+ #var $plTask= array();
+ #var $plPriority= 0;
+ #var $plDepends= array();
+ #var $plConflicts= array();
+ return array();
+ }
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>
index 42f729db8992deab90bdb9f049bb8ab3fb9a4fc0..4cd8786c472a98dc3c6c3368c4cc1a8ef3d445e3 100644 (file)
var $dirlist= array();
var $ui= NULL;
var $current= "";
+ var $info= array();
var $headlines = array();
function pluglist($config, $ui)
} else {
if (isset ($config['PATH']) && is_array($config)){
$list[$this->index++]= $config['PATH'];
+ if (isset($config['CLASS'])){
+ $class= $config['CLASS'];
+ $this->info[$class]= call_user_func(array($class, 'plInfo'));
+ }
}
}
error_reporting(E_ALL);
$href= "main.php?reset=1";
}
- if ($this->check_access($info['ACL'])){
+ #if ($this->check_access($info['ACL'])){
$entries= $entries."<p class=\"menuitem\" ".
"onClick='return question(\""._("You are currently editing a database entry. Do you want to dismiss the changes?")."\", \"$href\");'>".
if(!isset($_SESSION['maxC'])){
$_SESSION['maxC'] = "RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP";
}
- }
+ #}
}
/* Append to menu */
}
- if ($this->check_access($info['ACL'])){
+ #if ($this->check_access($info['ACL'])){
/* Hm this looks doubled */
$image= get_template_path('images/'.$info['ICON']);
_($plHeadline)."</a></td>\n";
$col++ ;
- }
+ #}
}
/* Append to menu */
diff --git a/plugins/addons/notifications/class_msgplug.inc b/plugins/addons/notifications/class_msgplug.inc
index c42840d4015dfe51127cd3157803c9022a662b52..08a2395680029baaef209a5ec5f82b6062666250 100644 (file)
/* Preset values */
$this->targets= array("user" => _("Users"), "group" => _("Groups"));
- ksort($this->targets);
+ asort($this->targets);
/* Users */
$ldap= $config->get_ldap_link();
if ($tag == ""){
$ldap->search('(objectClass=gosaAccount)', array('uid', 'cn'));
} else {
- $ldap->search('(&(objectClass=gosaAccount)(gosaUnitTag)'.$tag.'))', array('uid', 'cn'));
+ $ldap->search('(&(objectClass=gosaAccount)(gosaUnitTag='.$tag.'))', array('uid', 'cn'));
}
while ($attrs= $ldap->fetch()){
$this->users['U:'.$attrs['uid'][0]]= $attrs['cn'][0].' ['.$attrs['uid'][0].']';
index a4d9d68821410f5276d86a992a69f34c4fb6d259..a7abd2cf49b541776609537b77ed74e8036d6da6 100644 (file)
{html_options options=$targets selected=$target}
<option disabled> </option>
</select>
- <input type="submit" value="{t}Apply{/t}" name="refresh"><br><br>
+ {if $javascript eq 'false'}<input type="submit" value="{t}Apply{/t}" name="refresh">{/if}<br><br>
</td>
<td>
</td>
index 49b1cdf561157692fcac227da82742b38fba29a3..c2e7245c66e6b8b770f611a7e19fe3337d6727a6 100644 (file)
var $plDescription= "This does something";
/* attribute list for save action */
- var $attributes= array("target", "nmessage");
+ var $attributes= array('gosaAclEntry');
var $objectclasses= array();
+ /* Helpers */
+ var $dialogState= "head";
+ var $gosaAclEntry= array();
+ var $aclType= "";
+ var $aclObject= "";
+ var $aclContents= array();
+ var $target= "group";
+ var $aclTypes= array();
+ var $aclObjects= array();
+ var $aclMyObjects= array();
+ var $users= array();
+ var $groups= array();
+ var $recipients= array();
+ var $isContainer= FALSE;
+ var $currentIndex= 0;
+ var $wasNewEntry= FALSE;
+ var $ocMapping= array();
+ var $savedAclContents= array();
+
function acl ($config, $dn= NULL)
{
/* Include config object */
- $this->config= $config;
+ plugin::plugin($config, $dn);
+
+ /* Load ACL's */
+ $this->gosaAclEntry= array();
+ if (isset($this->attrs['gosaAclEntry'])){
+ for ($i= 0; $i<$this->attrs['gosaAclEntry']['count']; $i++){
+ $acl= $this->attrs['gosaAclEntry'][$i];
+ $this->gosaAclEntry= array_merge($this->gosaAclEntry, $this->explodeACL($acl));
+ }
+ }
+ ksort($this->gosaAclEntry);
+
+ /* Container? */
+ if (preg_match('/^(ou|c|l|dc)=/i', $dn)){
+ $this->isContainer= TRUE;
+ }
+
+ /* Fill acl types */
+ if ($this->isContainer){
+ $this->aclTypes= array("reset" => _("Reset ACLs"),
+ "one" => _("One level"),
+ "base" => _("Current object"),
+ "sub" => _("Complete subtree"),
+ "psub" => _("Complete subtree (permanent)"),
+ "role" => _("Use ACL defined in role"));
+ } else {
+ $this->aclTypes= array("base" => _("Current object"),
+ "role" => _("Use ACL defined in role"));
+ }
+ asort($this->aclTypes);
+ $this->targets= array("user" => _("Users"), "group" => _("Groups"));
+ asort($this->targets);
+
+ /* Users */
+ $ui= get_userinfo();
+ $tag= $ui->gosaUnitTag;
+ $ldap= $config->get_ldap_link();
+ $ldap->cd($config->current['BASE']);
+ if ($tag == ""){
+ $ldap->search('(objectClass=gosaAccount)', array('uid', 'cn'));
+ } else {
+ $ldap->search('(&(objectClass=gosaAccount)(gosaUnitTag='.$tag.'))', array('uid', 'cn'));
+ }
+ while ($attrs= $ldap->fetch()){
+ $this->users['U:'.$attrs['dn']]= $attrs['cn'][0].' ['.$attrs['uid'][0].']';
+ }
+ ksort($this->users);
+
+ /* Groups */
+ $ldap->cd($config->current['BASE']);
+ if ($tag == ""){
+ $ldap->search('(objectClass=posixGroup)', array('cn', 'description'));
+ } else {
+ $ldap->search('(&(objectClass=posixGroup)(gosaUnitTag='.$tag.'))', array('cn', 'description'));
+ }
+ while ($attrs= $ldap->fetch()){
+ $dsc= "";
+ if (isset($attrs['description'][0])){
+ $dsc= $attrs['description'][0];
+ }
+ $this->groups['G:'.$attrs['dn']]= $attrs['cn'][0].' ['.$dsc.']';
+ }
+ ksort($this->groups);
+
+ /* Objects */
+ $tmp= get_global('plist');
+ $plist= $tmp->info;
+ foreach ($plist as $class => $acls){
+ if (isset($acls['plDescription'])){
+ /* Only feed categories */
+ if (isset($acls['plDepends']['description'])){
+ $this->aclObjects[$acls['plDepends']['objectClass']]= $acls['plDepends']['description'];
+ }
+
+ /* Additionally filter the classes we're interested in in "self edit" mode */
+ if (in_array_ics($acls['plDepends']['objectClass'], $this->attrs['objectClass'])){
+ $this->myAclObjects[$class]= $acls['plDescription'];
+ }
+ }
+ }
+ asort($this->aclObjects);
+
+ /* Generate mapping object */
+ foreach ($plist as $oc => $pl){
+ if (isset($pl['plDepends']['objectClass'])){
+ $class= $pl['plDepends']['objectClass'];
+ if (!isset($this->ocMapping[$class])){
+ $this->ocMapping[$class]= array();
+ }
+ $this->ocMapping[$class][]= $oc;
+ }
+ }
}
/* Call parent execute */
plugin::execute();
+ $tmp= get_global('plist');
+ $plist= $tmp->info;
+
+ /* Handle posts */
+ if (isset($_POST['new_acl'])){
+ $this->dialogState= 'create';
+ $this->currentIndex= count($this->gosaAclEntry);
+ $this->loadAclEntry(TRUE);
+ }
+
+ $new_acl= array();
+ $aclDialog= FALSE;
+ foreach($_POST as $name => $post){
+
+ /* Actions... */
+ if (preg_match('/^acl_edit_.*_x/', $name)){
+ $this->dialogState= 'create';
+ $this->currentIndex= preg_replace('/^acl_edit_([0-9]+).*$/', '\1', $name);
+ $this->loadAclEntry();
+ continue;
+ }
+ if (preg_match('/^acl_del_.*_x/', $name)){
+ unset($this->gosaAclEntry[preg_replace('/^acl_del_([0-9]+).*$/', '\1', $name)]);
+ continue;
+ }
+
+ if (preg_match('/^cat_edit_.*_x/', $name)){
+ $this->aclObject= preg_replace('/^cat_edit_([^_]+)_.*$/', '\1', $name);
+ $this->dialogState= 'edit';
+ foreach ($this->ocMapping[$this->aclObject] as $oc){
+ if (isset($this->aclContents[$oc])){
+ $this->savedAclContents[$oc]= $this->aclContents[$oc];
+ }
+ }
+ continue;
+ }
+ if (preg_match('/^cat_del_.*_x/', $name)){
+ $idx= preg_replace('/^cat_del_([^_]+)_.*$/', '\1', $name);
+ foreach ($this->ocMapping[$idx] as $key){
+ unset($this->aclContents[$key]);
+ }
+ continue;
+ }
+
+ /* Sorting... */
+ if (preg_match('/^sortup_.*_x/', $name)){
+ $index= preg_replace('/^sortup_([0-9]+).*$/', '\1', $name);
+ if ($index > 0){
+ $tmp= $this->gosaAclEntry[$index];
+ $this->gosaAclEntry[$index]= $this->gosaAclEntry[$index-1];
+ $this->gosaAclEntry[$index-1]= $tmp;
+ }
+ continue;
+ }
+ if (preg_match('/^sortdown_.*_x/', $name)){
+ $index= preg_replace('/^sortdown_([0-9]+).*$/', '\1', $name);
+ if ($index < count($this->gosaAclEntry)-1){
+ $tmp= $this->gosaAclEntry[$index];
+ $this->gosaAclEntry[$index]= $this->gosaAclEntry[$index+1];
+ $this->gosaAclEntry[$index+1]= $tmp;
+ }
+ continue;
+ }
+
+ /* ACL saving... */
+ if (preg_match('/^acl_.*_[^xy]$/', $name)){
+ $aclDialog= TRUE;
+ list($dummy, $object, $attribute, $value)= split('_', $name);
+
+ /* Ordinary ACLs */
+ if (!isset($new_acl[$object])){
+ $new_acl[$object]= array();
+ }
+ if (isset($new_acl[$object][$attribute])){
+ $new_acl[$object][$attribute].= $value;
+ } else {
+ $new_acl[$object][$attribute]= $value;
+ }
+ }
+
+ }
+
+ /* Only be interested in new acl's, if we're in the right _POST place */
+ if ($aclDialog && isset($this->ocMapping[$this->aclObject])){
+ foreach ($this->ocMapping[$this->aclObject] as $oc){
+ unset($this->aclContents[$oc]);
+ if (isset($new_acl[$oc])){
+ $this->aclContents[$oc]= $new_acl[$oc];
+ }
+ }
+ }
+
+ /* Cancel new acl? */
+ if (isset($_POST['cancel_new_acl'])){
+ $this->dialogState= 'head';
+ if ($this->wasNewEntry){
+ unset ($this->gosaAclEntry[$this->currentIndex]);
+ }
+ }
+
+ /* Store ACL in mail object? */
+ if (isset($_POST['submit_new_acl'])){
+ $this->gosaAclEntry[$this->currentIndex]['type']= $this->aclType;
+ $this->gosaAclEntry[$this->currentIndex]['members']= $this->recipients;
+ $this->gosaAclEntry[$this->currentIndex]['acl']= $this->aclContents;
+ $this->dialogState= 'head';
+ }
+
+ /* Cancel edit acl? */
+ if (isset($_POST['cancel_edit_acl'])){
+ $this->dialogState= 'create';
+ foreach ($this->ocMapping[$this->aclObject] as $oc){
+ if (isset($this->savedAclContents[$oc])){
+ $this->aclContents[$oc]= $this->savedAclContents[$oc];
+ }
+ }
+ }
+
+ /* Save edit acl? */
+ if (isset($_POST['submit_edit_acl'])){
+ $this->dialogState= 'create';
+ }
+
+ /* Add acl? */
+ if (isset($_POST['add_acl']) && $_POST['aclObject'] != ""){
+ $this->dialogState= 'edit';
+ $this->savedAclContents= array();
+ foreach ($this->ocMapping[$this->aclObject] as $oc){
+ if (isset($this->aclContents[$oc])){
+ $this->savedAclContents[$oc]= $this->aclContents[$oc];
+ }
+ }
+ }
+
+ /* Add to list? */
+ if (isset($_POST['add']) && isset($_POST['source'])){
+ foreach ($_POST['source'] as $key){
+ if ($this->target == 'user'){
+ $this->recipients[$key]= $this->users[$key];
+ }
+ if ($this->target == 'group'){
+ $this->recipients[$key]= $this->groups[$key];
+ }
+ }
+ ksort($this->recipients);
+ }
+
+ /* Remove from list? */
+ if (isset($_POST['del']) && isset($_POST['recipient'])){
+ foreach ($_POST['recipient'] as $key){
+ unset($this->recipients[$key]);
+ }
+ }
+
+ /* Save common values */
+ foreach (array("aclType", "aclObject", "target") as $key){
+ if (isset($_POST[$key])){
+ $this->$key= validate($_POST[$key]);
+ }
+ }
+
+ /* Create templating instance */
$smarty= get_smarty();
+ if ($this->dialogState == 'head'){
+ /* Draw list */
+ $aclList= new DivSelectBox("aclList");
+ $aclList->SetHeight(450);
+
+ /* Fill in entries */
+ foreach ($this->gosaAclEntry as $key => $entry){
+ $field1= array("string" => $this->aclTypes[$entry['type']], "attach" => "style='width:100px'");
+ $field2= array("string" => $this->assembleAclSummary($entry));
+ $action= "<input type='image' name='sortup_$key' alt='up' title='"._("Up")."' src='images/sort_up.png' align='top'>";
+ $action.= "<input type='image' name='sortdown_$key' alt='down' title='"._("Down")."' src='images/sort_down.png'>";
+ $action.= "<input class='center' type='image' src='images/edit.png' alt='"._("edit")."' name='acl_edit_$key' title='"._("Edit ACL")."'>";
+ $action.= "<input class='center' type='image' src='images/edittrash.png' alt='"._("delete")."' name='acl_del_$key' title='"._("Delete ACL")."'>";
+
+ $field3= array("string" => $action, "attach" => "style='border-right:0px;width:50px';text-align:right");
+ $aclList->AddEntry(array($field1, $field2, $field3));
+ }
+
+ $smarty->assign("aclList", $aclList->DrawList());
+ }
+
+ if ($this->dialogState == 'create'){
+ /* Draw list */
+ $aclList= new DivSelectBox("aclList");
+ $aclList->SetHeight(150);
+
+ /* Add settings for all categories to the (permanent) list */
+ foreach ($this->aclObjects as $oc => $dsc){
+ $summary= "";
+ foreach ($plist as $key => $plugin){
+ if (isset($plugin['plDepends']['objectClass']) && $plugin['plDepends']['objectClass'] == $oc &&
+ isset($this->aclContents[$key])){
+ if (count($this->aclContents[$key]) && isset($this->aclContents[$key][0]) &&
+ $this->aclContents[$key][0] != ""){
+ $summary.= "$key, ";
+ }
+ }
+ }
+
+ /* Set summary... */
+ if ($summary == ""){
+ $summary= _("No ACL settings for this category");
+ } else {
+ $summary= sprintf(_("Contains ACLs for these objects: %s"), preg_replace('/, $/', '', $summary));
+ }
+
+ $field1= array("string" => $dsc, "attach" => "style='width:100px'");
+ $field2= array("string" => $summary);
+ $action= "<input class='center' type='image' src='images/edit.png' alt='"._("edit")."' name='cat_edit_$oc' title='"._("Edit categories ACLs")."'>";
+ $action.= "<input class='center' type='image' src='images/edittrash.png' alt='"._("delete")."' name='cat_del_$oc' title='"._("Clear categories ACLs")."'>";
+ $field3= array("string" => $action, "attach" => "style='border-right:0px;width:50px'");
+ $aclList->AddEntry(array($field1, $field2, $field3));
+ }
+
+ $smarty->assign("aclList", $aclList->DrawList());
+ $smarty->assign("aclType", $this->aclType);
+ $smarty->assign("aclTypes", $this->aclTypes);
+ $smarty->assign("target", $this->target);
+ $smarty->assign("targets", $this->targets);
+
+ /* Assign possible target types */
+ $smarty->assign("targets", $this->targets);
+ foreach ($this->attributes as $attr){
+ $smarty->assign($attr, $this->$attr);
+ }
+
+
+ /* Generate list */
+ $tmp= array();
+ foreach (array("user" => "users", "group" => "groups") as $field => $arr){
+ if ($this->target == $field){
+ foreach ($this->$arr as $key => $value){
+ if (!isset($this->recipients[$key])){
+ $tmp[$key]= $value;
+ }
+ }
+ }
+ }
+ $smarty->assign('sources', $tmp);
+ $smarty->assign('recipients', $this->recipients);
+
+ /* Acl selector if scope is base */
+ if ($this->aclType == 'base'){
+ $smarty->assign('aclSelector', $this->buildAclSelector($this->myAclObjects));
+ }
+ }
+
+ if ($this->dialogState == 'edit'){
+ $smarty->assign('headline', sprintf(_("Edit ACL for '%s', scope is '%s'"), $this->aclObjects[$this->aclObject], $this->aclTypes[$this->aclType]));
+
+ /* Collect objects for selected category */
+ $aclObjects= array();
+ foreach ($plist as $class => $acls){
+ if (isset($acls['plDepends']['objectClass']) && $acls['plDepends']['objectClass'] == $this->aclObject){
+ $aclObjects[$class]= $acls['plDescription'];
+ }
+ }
+
+ $smarty->assign('aclSelector', $this->buildAclSelector($aclObjects));
+ }
+
/* Show main page */
+ $smarty->assign("dialogState", $this->dialogState);
return ($smarty->fetch (get_template_path('contents.tpl', TRUE)));
}
+
+ function buildAclSelector($list)
+ {
+ $display= "";
+ $cols= 4;
+ $tmp= get_global('plist');
+ $plist= $tmp->info;
+ asort($plist);
+
+ foreach ($list as $key => $name){
+
+ /* Create sub acl if it does not exist */
+ if (!isset($this->aclContents[$key])){
+ $this->aclContents[$key]= array();
+ }
+ if (!isset($this->aclContents[$key][0])){
+ $this->aclContents[$key][0]= '';
+ }
+ $currentAcl= $this->aclContents[$key];
+
+ /* Object header */
+ $display.= "<table style='width:100%;border:1px solid #A0A0A0' cellspacing=0 cellpadding=2><tr><td style='background-color:#C8C8C8;height:1.8em' colspan=$cols><b>"._("Object").":</b> $name</td></tr>";
+
+ /* Generate options */
+ $spc= " ";
+ if ($this->isContainer && $this->aclType != 'base'){
+ $options= $this->mkchkbx($key."_0_c", _("Create objects"), preg_match('/c/', $currentAcl[0])).$spc;
+ $options.= $this->mkchkbx($key."_0_m", _("Move objects"), preg_match('/m/', $currentAcl[0])).$spc;
+ $options.= $this->mkchkbx($key."_0_d", _("Remove objects"), preg_match('/d/', $currentAcl[0])).$spc;
+ if ($plist[$key]['plSelfModify']){
+ $options.= $this->mkchkbx($key."_0_s", _("Modifyable by owner"), preg_match('/s/', $currentAcl[0])).$spc;
+ }
+ } else {
+ $options= $this->mkchkbx($key."_0_m", _("Move object"), preg_match('/m/', $currentAcl[0])).$spc;
+ $options.= $this->mkchkbx($key."_0_d", _("Remove object"), preg_match('/d/', $currentAcl[0])).$spc;
+ if ($plist[$key]['plSelfModify']){
+ $options.= $this->mkchkbx($key."_0_s", _("Modifyable by owner"), preg_match('/s/', $currentAcl[0])).$spc;
+ }
+ }
+
+ $display.= "<tr><td style='background-color:#E0E0E0' colspan=$cols>$options</td></tr>";
+
+ /* Walk through the list of attributes */
+ $cnt= 1;
+ $splist= $plist[$key];
+ asort($splist);
+ foreach($splist as $attr => $dsc){
+
+ /* Skip pl* attributes, they are internal... */
+ if (preg_match('/^pl[A-Z]+.*$/', $attr)){
+ continue;
+ }
+
+ /* Open table row */
+ if ($cnt == 1){
+ $display.= "<tr>";
+ }
+
+ /* Close table row */
+ if ($cnt == $cols){
+ $cnt= 1;
+ $rb= "";
+ $end= "</tr>";
+ } else {
+ $cnt++;
+ $rb= "border-right:1px solid #A0A0A0;";
+ $end= "";
+ }
+
+ /* Collect list of attributes */
+ $state= "";
+ if (isset($currentAcl[$attr])){
+ $state= $currentAcl[$attr];
+ }
+ $display.= "<td style='border-top:1px solid #A0A0A0;${rb}width:".(int)(100/$cols)."%'><b>$dsc</b> ($attr)<br>".$this->mkrwbx($key."_".$attr, $state)."</td>$end";
+ }
+
+ /* Fill missing td's if needed */
+ if (--$cnt != $cols){
+ $display.= str_repeat("<td style='border-top:1px solid #A0A0A0'> </td>", $cols-$cnt);
+ }
+
+ $display.= "</table><br>";
+ }
+
+ return ($display);
+ }
+
+
+ function mkchkbx($name, $text, $state= FALSE)
+ {
+ $state= $state?"checked":"";
+ return "<input id='acl_$name' type=checkbox name='acl_$name' $state><label for='acl_$name'>$text</label>";
+ }
+
+
+ function mkrwbx($name, $state= "")
+ {
+ $rstate= preg_match('/r/', $state)?'checked':'';
+ $wstate= preg_match('/w/', $state)?'checked':'';
+ return ("<input id='acl_${name}_r' type=checkbox name='acl_${name}_r' $rstate><label for='acl_${name}_r'>"._("read")."</label>".
+ "<input id='acl_${name}_w' type=checkbox name='acl_${name}_w' $wstate><label for='acl_${name}_w'>"._("write")."</label>");
+ }
+
+
+ function explodeACL($acl)
+ {
+ list($index, $type)= split(':', $acl);
+ $a= array( $index => array("type" => $type,
+ "members" => $this->extractMembers($acl)));
+
+ /* Handle different types */
+ switch ($type){
+
+ case 'psub':
+ case 'sub':
+ case 'one':
+ case 'base':
+ $a[$index]['acl']= $this->extractACL($acl);
+ break;
+
+ case 'role':
+ echo "Role";
+ break;
+
+ case 'reset':
+ break;
+
+ default:
+ print_red(sprintf(_("Unkown ACL type '%s'. Don't know how to handle it."), $type));
+ $a= array();
+ }
+
+ return ($a);
+ }
+
+
+ function extractMembers($acl)
+ {
+ $a= array();
+
+ /* Rip acl off the string, seperate by ',' and place it in an array */
+ $ms= preg_replace('/^[^:]+:[^:]+:([^:]+).*$/', '\1', $acl);
+ $ma= split(',', $ms);
+
+ /* Decode dn's, fill with informations from LDAP */
+ $ldap= $this->config->get_ldap_link();
+ foreach ($ma as $memberdn){
+ $dn= base64_decode($memberdn);
+ $ldap->cat($dn, array('cn', 'objectClass', 'description', 'uid'));
+
+ /* Found entry... */
+ if ($ldap->count()){
+ $attrs= $ldap->fetch();
+ if (in_array_ics('gosaAccount', $attrs['objectClass'])){
+ $a['U:'.$dn]= $attrs['cn'][0]." [".$attrs['uid'][0]."]";
+ } else {
+ $a['G:'.$dn]= $attrs['cn'][0];
+ if (isset($attrs['description'][0])){
+ $a['G:'.$dn].= " [".$attrs['description'][0]."]";
+ }
+ }
+
+ /* ... or not */
+ } else {
+ $a['U:'.$dn]= sprintf(_("Unknown entry '%s'!"), $dn);
+ }
+ }
+
+ return ($a);
+ }
+
+
+ function extractACL($acl)
+ {
+ /* Rip acl off the string, seperate by ',' and place it in an array */
+ $as= preg_replace('/^[^:]+:[^:]+:[^:]+:(.*)$/', '\1', $acl);
+ $aa= split(',', $as);
+ $a= array();
+
+ /* Dis-assemble single ACLs */
+ foreach($aa as $sacl){
+
+ /* Dis-assemble field ACLs */
+ $ao= split('#', $sacl);
+ $gobject= "";
+ foreach($ao as $idx => $ssacl){
+
+ /* First is department with global acl */
+ $object= preg_replace('/^([^;]+);.*$/', '\1', $ssacl);
+ $gacl= preg_replace('/^[^;]+;(.*)$/', '\1', $ssacl);
+ if ($idx == 0){
+ /* Create hash for this object */
+ $gobject= $object;
+ $a[$gobject]= array();
+
+ /* Append ACL if set */
+ if ($gacl != ""){
+ $a[$gobject]= array($gacl);
+ }
+ } else {
+
+ /* All other entries get appended... */
+ list($field, $facl)= split(';', $ssacl);
+ $a[$gobject][$field]= $facl;
+ }
+
+ }
+ }
+
+ return ($a);
+ }
+
+
+ function assembleAclSummary($entry)
+ {
+ $summary= "";
+
+ /* Summarize ACL */
+ if (isset($entry['acl'])){
+ $acl= "";
+ foreach ($entry['acl'] as $name => $object){
+ $acl.= "$name, ";
+ }
+ $summary.= sprintf(_("Contains settings for these objects: %s"), preg_replace('/, $/', '', $acl));
+ }
+
+ /* Summarize members */
+ if ($summary != ""){
+ $summary.= ", ";
+ }
+ $summary.= _("Members:")." ";
+ foreach ($entry['members'] as $cn){
+ $cn= preg_replace('/ \[.*$/', '', $cn);
+ $summary.= $cn.", ";
+ }
+
+ return (preg_replace('/, $/', '', $summary));
+ }
+
+
+ function loadAclEntry($new= FALSE)
+ {
+ /* New entry gets presets... */
+ if ($new){
+ $this->aclType= 'base';
+ $this->recipients= array();
+ $this->aclContents= array();
+ } else {
+ $acl= $this->gosaAclEntry[$this->currentIndex];
+ $this->aclType= $acl['type'];
+ $this->recipients= $acl['members'];
+ $this->aclContents= $acl['acl'];
+ }
+
+ $this->wasNewEntry= $new;
+ }
+
+
+ function aclPostHandler()
+ {
+ if (isset($_POST['save_acl'])){
+ $this->save();
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+
+ function save()
+ {
+ /* Assemble ACL's */
+ print_a($this->gosaAclEntry);
+
+ /* Call main method */
+ plugin::save();
+
+ /* Do LDAP modifications */
+
+ }
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
index 3f5c1ab3b4019a482c61c2504586130dda552a0a..d33905909facffa9e7fa97140994dbcdce654a60 100644 (file)
-<b>Hard coded DN for testing</b>
+<b><font style="color:red">This plugin is only simulating the interface. Therefore it's not functional. Please don't use.</font></b>
<br>
-Some acl stuff here...
+
+{if $dialogState eq 'head'}
+<h1>{t}Assigned ACLs for current entry{/t}</h1>
+{$aclList}
+<input type="submit" name="new_acl" value="{t}New ACL{/t}">
+<p class="seperator"> </p>
+<div style='text-align:right;margin-top:5px'>
+ <input type="submit" name="save_acl" value="{t}Ok{/t}">
+
+ <input type="submit" name="cancel_acl" value="{t}Cancel{/t}">
+</div>
+{/if}
+
+{if $dialogState eq 'create'}
+<h1>{t}ACL type{/t} <select size="1" name="aclType" title="{t}Select an acl type{/t}" onChange="document.mainform.submit()"> </option>{html_options options=$aclTypes selected=$aclType}<option disabled></select> {if $javascript eq 'false'}<input type="submit" value="{t}Apply{/t}" name="refresh">{/if}</h1>
+
+<p class="seperator"> </p>
+
+<table style="width:100%">
+ <tr>
+ <td style="width:48%; vertical-align:top;">
+ {t}Use members from{/t}
+ <select name="target" onChange="document.mainform.submit()">
+ {html_options options=$targets selected=$target}
+ <option disabled> </option>
+ </select>
+ {if $javascript eq 'false'}<input type="submit" value="{t}Apply{/t}" name="refresh">{/if}<br><br>
+ </td>
+ <td>
+ </td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td style="width:48%">
+ {t}Available members{/t}<br>
+ <select style="width:100%;height:180px;" name="source[]" size="20" multiple title="{t}List message possible targets{/t}">
+ {html_options options=$sources}
+ <option disabled> </option>
+ </select>
+ </td>
+ <td style="vertical-align:center; text-align:center">
+ <input type="submit" value=">" name="add">
+ <br><br>
+ <input type="submit" value="<" name="del">
+ </td>
+ <td style="width:48%; vertical-align:top;">
+ {t}Members{/t}<br>
+ <select style="width:100%;height:180px;" name="recipient[]" size="20" multiple title="{t}List message recipients{/t}">
+ {html_options options=$recipients}
+ <option disabled> </option>
+ </select>
+ </td>
+ </tr>
+</table>
+
+{if $aclType ne 'reset'}
+{if $aclType ne 'role'}
+{if $aclType ne 'base'}
+<p class="seperator"> </p>
+
+<h1>{t}List of available ACL categories{/t}</h1>
+{$aclList}
+{/if}
+{/if}
+{/if}
+
+{if $aclType eq 'base'}
+<p class="seperator"> </p>
+<h1>{t}ACLs for this object{/t}</h1>
+{$aclSelector}
+{/if}
+
+<p class="seperator"> </p>
+<div style='text-align:right;margin-top:5px'>
+ <input type="submit" name="submit_new_acl" value="{t}Apply{/t}">
+
+ <input type="submit" name="cancel_new_acl" value="{t}Cancel{/t}">
+</div>
+{/if}
+
+{if $dialogState eq 'edit'}
+
+<h1>{$headline}</h1>
+
+{$aclSelector}
+
+<p class="seperator"> </p>
+<div style='text-align:right;margin-top:5px'>
+ <input type="submit" name="submit_edit_acl" value="{t}Apply{/t}">
+
+ <input type="submit" name="cancel_edit_acl" value="{t}Cancel{/t}">
+</div>
+{/if}
index 97235bbb950a24b2ddc21916063ccf76c2661332..bb40d6ce717a180cc3d95b893a7ceb4999c194a4 100644 (file)
}
/* Execute formular */
+ if ($aclplug->aclPostHandler()){
+ echo "Saved... But this is not the way it goes normally!";
+ }
$display= $aclplug->execute();
$display.= "<input type=\"hidden\" name=\"ignore\">\n";
diff --git a/plugins/admin/departments/class_departmentGeneric.inc b/plugins/admin/departments/class_departmentGeneric.inc
index c1ef6e11d3f79cbe72d45c8c033c54e1bf3be0cc..35923c401c1f1b9607ca9bf81e4e4aa3729ff175 100644 (file)
return (TRUE);
}
}
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>
diff --git a/plugins/admin/departments/class_departmentManagement.inc b/plugins/admin/departments/class_departmentManagement.inc
index 9bb51d3755ed233395f9e600d411000697e92cd9..d622df9e7fe52eb0a0ac38e49bda60573e24a5f8 100644 (file)
$this->config->make_idepartments();
$this->DivListDepartment->save_object();
}
+
+ function plInfo()
+ {
+ return (array("plDescription" => _("Departments"),
+ "plSelfModify" => FALSE,
+ "plDepends" => array("objectClass" => "gosaDepartment", "description" => _("Departments")),
+ "description" => _("Description"),
+ "c" => _("Country"),
+ "l" => _("Location"),
+ "telephoneNumber" => _("Telephone"),
+ "ou" => _("Department name") ));
+ }
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
index 2d67d8d59d807c3d946f04ca6b090effd792d6b3..679a06355bcefd8065b2a57b669c5f58fcd44bd3 100644 (file)
}
}
}
+
+
+ function plInfo()
+ {
+ return (array("plDescription" => _("Generic user settings"),
+ "plSelfModify" => TRUE,
+ "plDepends" => array("objectClass" => "gosaAccount", "description" => _("Users")),
+ "userPassword" => _("Set password"), "sn" => _("Surename"),
+ "givenName" => _("Given name")));
+ }
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
diff --git a/plugins/personal/posix/class_posixAccount.inc b/plugins/personal/posix/class_posixAccount.inc
index a924ebf58335cc08690ed1a4b1af3b0df36f3a35..2e01d28828288caedfcee0a551ca1ad3d71c464b 100644 (file)
return($ret);
}
+
+ function plInfo()
+ {
+ return (array("plDescription" => _("POSIX account"),
+ "plSelfModify" => TRUE,
+ "plDepends" => array("objectClass" => "gosaAccount"),
+ "homeDirectory" => _("Home directory"), "uidNumber" => _("User ID"),
+ "gidNumber" => _("Group ID")));
+ }
+
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: