From: cajus Date: Fri, 7 Jul 2006 14:31:42 +0000 (+0000) Subject: Updated for first version of (very incomplete) acl editing. X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=7da25a45fb3d621ea7257f9faefa10cd48c62e04;p=gosa.git Updated for first version of (very incomplete) acl editing. 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 --- diff --git a/TODO b/TODO index 3018b6517..0884d9ddc 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,8 @@ 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 and tags in translations diff --git a/include/class_plugin.inc b/include/class_plugin.inc index 1cab881b4..419446592 100644 --- a/include/class_plugin.inc +++ b/include/class_plugin.inc @@ -111,15 +111,6 @@ class plugin /* 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 @@ -1359,6 +1350,22 @@ class plugin 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: ?> diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc index 42f729db8..4cd8786c4 100644 --- a/include/class_pluglist.inc +++ b/include/class_pluglist.inc @@ -28,6 +28,7 @@ class pluglist { var $dirlist= array(); var $ui= NULL; var $current= ""; + var $info= array(); var $headlines = array(); function pluglist($config, $ui) @@ -52,6 +53,10 @@ class pluglist { } 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); @@ -131,7 +136,7 @@ class pluglist { $href= "main.php?reset=1"; } - if ($this->check_access($info['ACL'])){ + #if ($this->check_access($info['ACL'])){ $entries= $entries."

". @@ -144,7 +149,7 @@ class pluglist { if(!isset($_SESSION['maxC'])){ $_SESSION['maxC'] = "RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP"; } - } + #} } /* Append to menu */ @@ -232,7 +237,7 @@ class pluglist { } - if ($this->check_access($info['ACL'])){ + #if ($this->check_access($info['ACL'])){ /* Hm this looks doubled */ $image= get_template_path('images/'.$info['ICON']); @@ -247,7 +252,7 @@ class pluglist { _($plHeadline)."\n"; $col++ ; - } + #} } /* Append to menu */ diff --git a/plugins/addons/notifications/class_msgplug.inc b/plugins/addons/notifications/class_msgplug.inc index c42840d40..08a239568 100644 --- a/plugins/addons/notifications/class_msgplug.inc +++ b/plugins/addons/notifications/class_msgplug.inc @@ -33,7 +33,7 @@ class msgplug extends plugin /* Preset values */ $this->targets= array("user" => _("Users"), "group" => _("Groups")); - ksort($this->targets); + asort($this->targets); /* Users */ $ldap= $config->get_ldap_link(); @@ -41,7 +41,7 @@ class msgplug extends plugin 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].']'; diff --git a/plugins/addons/notifications/contents.tpl b/plugins/addons/notifications/contents.tpl index a4d9d6882..a7abd2cf4 100644 --- a/plugins/addons/notifications/contents.tpl +++ b/plugins/addons/notifications/contents.tpl @@ -9,7 +9,7 @@ {html_options options=$targets selected=$target} -

+ {if $javascript eq 'false'}{/if}

diff --git a/plugins/admin/acl/class_acl.inc b/plugins/admin/acl/class_acl.inc index 49b1cdf56..c2e7245c6 100644 --- a/plugins/admin/acl/class_acl.inc +++ b/plugins/admin/acl/class_acl.inc @@ -7,14 +7,124 @@ class acl extends plugin 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; + } + } } @@ -23,12 +133,558 @@ class acl extends plugin /* 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= ""; + $action.= ""; + $action.= ""; + $action.= ""; + + $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= ""; + $action.= ""; + $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.= ""; + + /* 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.= ""; + + /* 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.= ""; + } + + /* Close table row */ + if ($cnt == $cols){ + $cnt= 1; + $rb= ""; + $end= ""; + } else { + $cnt++; + $rb= "border-right:1px solid #A0A0A0;"; + $end= ""; + } + + /* Collect list of attributes */ + $state= ""; + if (isset($currentAcl[$attr])){ + $state= $currentAcl[$attr]; + } + $display.= "$end"; + } + + /* Fill missing td's if needed */ + if (--$cnt != $cols){ + $display.= str_repeat("", $cols-$cnt); + } + + $display.= "
"._("Object").": $name
$options
$dsc ($attr)
".$this->mkrwbx($key."_".$attr, $state)."
 

"; + } + + return ($display); + } + + + function mkchkbx($name, $text, $state= FALSE) + { + $state= $state?"checked":""; + return ""; + } + + + function mkrwbx($name, $state= "") + { + $rstate= preg_match('/r/', $state)?'checked':''; + $wstate= preg_match('/w/', $state)?'checked':''; + return ("". + ""); + } + + + 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: diff --git a/plugins/admin/acl/contents.tpl b/plugins/admin/acl/contents.tpl index 3f5c1ab3b..d33905909 100644 --- a/plugins/admin/acl/contents.tpl +++ b/plugins/admin/acl/contents.tpl @@ -1,3 +1,96 @@ -Hard coded DN for testing +This plugin is only simulating the interface. Therefore it's not functional. Please don't use.
-Some acl stuff here... + +{if $dialogState eq 'head'} +

{t}Assigned ACLs for current entry{/t}

+{$aclList} + +

 

+
+ +   + +
+{/if} + +{if $dialogState eq 'create'} +

{t}ACL type{/t}  {if $javascript eq 'false'}{/if}

+ +

 

+ + + + + + + + + + + + +
+ {t}Use members from{/t} + + {if $javascript eq 'false'}{/if}

+
+ +
+ {t}Available members{/t}
+ +
+ +

+ +
+ {t}Members{/t}
+ +
+ +{if $aclType ne 'reset'} +{if $aclType ne 'role'} +{if $aclType ne 'base'} +

 

+ +

{t}List of available ACL categories{/t}

+{$aclList} +{/if} +{/if} +{/if} + +{if $aclType eq 'base'} +

 

+

{t}ACLs for this object{/t}

+{$aclSelector} +{/if} + +

 

+
+ +   + +
+{/if} + +{if $dialogState eq 'edit'} + +

{$headline}

+ +{$aclSelector} + +

 

+
+ +   + +
+{/if} diff --git a/plugins/admin/acl/main.inc b/plugins/admin/acl/main.inc index 97235bbb9..bb40d6ce7 100644 --- a/plugins/admin/acl/main.inc +++ b/plugins/admin/acl/main.inc @@ -35,6 +35,9 @@ if (!$remove_lock){ } /* Execute formular */ + if ($aclplug->aclPostHandler()){ + echo "Saved... But this is not the way it goes normally!"; + } $display= $aclplug->execute(); $display.= "\n"; diff --git a/plugins/admin/departments/class_departmentGeneric.inc b/plugins/admin/departments/class_departmentGeneric.inc index c1ef6e11d..35923c401 100644 --- a/plugins/admin/departments/class_departmentGeneric.inc +++ b/plugins/admin/departments/class_departmentGeneric.inc @@ -511,6 +511,7 @@ class department extends plugin 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 9bb51d375..d622df9e7 100644 --- a/plugins/admin/departments/class_departmentManagement.inc +++ b/plugins/admin/departments/class_departmentManagement.inc @@ -400,6 +400,19 @@ class departmentManagement extends plugin $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: diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc index 2d67d8d59..679a06355 100644 --- a/plugins/personal/generic/class_user.inc +++ b/plugins/personal/generic/class_user.inc @@ -1284,6 +1284,17 @@ class user extends plugin } } } + + + 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 a924ebf58..2e01d2882 100644 --- a/plugins/personal/posix/class_posixAccount.inc +++ b/plugins/personal/posix/class_posixAccount.inc @@ -1207,6 +1207,17 @@ class posixAccount extends plugin 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: