steffen: server/kolab-webadmin/kolab-webadmin/php/admin/include form.class.php, 1.20, 1.21 ldap.class.php, 1.24, 1.25 menu.php, 1.12, 1.13
cvs at intevation.de
cvs at intevation.de
Tue Jul 5 12:31:53 CEST 2005
Author: steffen
Update of /kolabrepository/server/kolab-webadmin/kolab-webadmin/php/admin/include
In directory doto:/tmp/cvs-serv9721/kolab-webadmin/php/admin/include
Modified Files:
form.class.php ldap.class.php menu.php
Log Message:
multi-domain config (working) + per-domain maintainer config (not working yet)
Index: form.class.php
===================================================================
RCS file: /kolabrepository/server/kolab-webadmin/kolab-webadmin/php/admin/include/form.class.php,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- form.class.php 20 Jun 2005 11:35:43 -0000 1.20
+++ form.class.php 5 Jul 2005 10:31:51 -0000 1.21
@@ -84,6 +84,34 @@
$str .= '<td>'.$value['comment'].'</td>';
$str .= '</tr>'."\n";
break;
+ case 'email':
+ $str .= '<tr>';
+ $str .= '<td>'.$value['name'].'</td>';
+ list($uname,$domain) = split('@',$value['value']);
+ if( ereg( 'readonly', $value['attrs'] ) ) {
+ $str .= '<td><p class="ctrl">'.$value['value'].'</p><input name="user_'.$key.'" type="hidden" value="'.
+ htmlentities($uname).'" /><input name="domain_'.$key.'" type="hidden" value="'.
+ htmlentities($domain).'" /></td>';
+ } else {
+ $str .= '<td><input name="user_'.$key.'" type="text" value="'.htmlentities($uname).'" '
+ .$value['attrs'].' size="'.($size-40).'" />';
+ if( count($value['domains']) == 1 ) {
+ $str .= '<input name="domain_'.$key.'" type="hidden" value="'.htmlentities($value['domains'][0]).'" />';
+ $str .= '<span class="ctrl">@'.htmlentities($value['domains'][0]).'</span></td>';
+ } else {
+ $str .= '@<select name="domain_'.$key.'" '.$value['attrs']." >\n";
+ foreach( $value['domains'] as $dom ) {
+ if( $dom == $domain ) $s = 'selected';
+ else $s = '';
+ $str .= '<option value="'.htmlentities($dom).'" '.$s.'>'.htmlentities($dom).'</option>'."\n";
+ }
+ $str .= '</select>';
+ $str .= '</td>';
+ }
+ }
+ $str .= '<td>'.$value['comment'].'</td>';
+ $str .= '</tr>'."\n";
+ break;
case 'comment':
$str .= '<tr>';
$str .= '<td>'.$value['name'].'</td>';
@@ -113,6 +141,24 @@
$str .= '<td>'.$value['comment'].'</td>';
$str .= '</tr>'."\n";
break;
+ case 'checklist':
+ $str .= '<tr>';
+ $str .= '<td>'.$value['name'].'</td>';
+ if( ereg( 'readonly', $value['attrs'] ) ) {
+ $str .= '<td><span class="ctrl">'.(join('<br/>',$value['options'])).'</span></td>';
+ } else {
+ $str .= '<td><table class="contentform">';
+ foreach( $value['options'] as $opt ) {
+ $checked = ( in_array($opt ,$value['value'] ))?"checked":"";
+ debug("Checking if $opt is in ".join(",",$value['value'])." :$checked");
+ $str .= '<tr><td><input name="'.$key.'[]" type="checkbox" value="'.htmlentities($opt).'" '.$value['attrs']." $checked /></td><td>"
+ .htmlentities($opt).'</td></tr>';
+ }
+ $str .= '</table></td>';
+ }
+ $str .= '<td>'.$value['comment'].'</td>';
+ $str .= '</tr>'."\n";
+ break;
case 'select':
$str .= '<tr>';
$str .= '<td>'.$value['name'].'</td>';
@@ -241,15 +287,22 @@
foreach( $va as $v ) {
//print "validating using $v <br/>";
if( $v == 'notempty' ) {
- //print "checking nonemptiness of $key: ".$_REQUEST[$key]." len=".strlen(trim($_REQUEST[$key]))."<br/>";
+ debug("checking nonemptiness of $key: ".$_REQUEST[$key]." len=".strlen(trim($_REQUEST[$key])));
if( $value['type'] == 'aclselect' ) {
// ignore
+ } else if( $value['type'] == 'email' ) {
+ debug('Checking '.$value['name'].': '.$_REQUEST['user_'.$key]);
+ if( strlen(trim($_REQUEST['user_'.$key])) == 0 ) {
+ $this->errors[] = _('Required field ').$value['name']._(' is empty');
+ }
} else if( strlen( trim($_REQUEST[$key]) ) == 0 ) {
$this->errors[] = _('Required field ').$value['name']._(' is empty');
}
} else {
if( $value['type'] == 'aclselect' ) {
$data = $_REQUEST['user_'.$key].' '.$_REQUEST['perm_'.$key];
+ } else if( $value['type'] == 'email' ) {
+ $data = trim($_REQUEST['user_'.$key]).'@'.trim($_REQUEST['domain_'.$key]);
} else if( $value['type'] == 'resourcepolicy' ) {
$i = 0;
$data = array();
@@ -299,8 +352,12 @@
$this->entries[$k]['policies'] = $pols;
} else if( $this->entries[$k]['type'] == 'checkbox' ) {
$this->entries[$k]['value'] = isset( $_REQUEST[$k] );
+ } else if( $this->entries[$k]['type'] == 'checklist' ) {
+ $this->entries[$k]['value'] = $_REQUEST[$k];
} else if( $this->entries[$k]['type'] == 'password' ) {
$this->entries[$k]['value'] = $this->value($k);
+ } else if( $this->entries[$k]['type'] == 'email' ) {
+ $this->entries[$k]['value'] = trim($this->value('user_'.$k)).'@'.trim($this->value('domain_'.$k));
} else {
$this->entries[$k]['value'] = trim($this->value($k));
}
Index: ldap.class.php
===================================================================
RCS file: /kolabrepository/server/kolab-webadmin/kolab-webadmin/php/admin/include/ldap.class.php,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- ldap.class.php 16 Jun 2005 00:32:10 -0000 1.24
+++ ldap.class.php 5 Jul 2005 10:31:51 -0000 1.25
@@ -1,6 +1,6 @@
<?php
/*
- * Copyright (c) 2004 Klarälvdalens Datakonsult AB
+ * Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB
*
* Written by Steffen Hansen <steffen at klaralvdalens-datakonsult.se>
*
@@ -45,6 +45,7 @@
$this->is_bound = false;
$this->bind_dn = false;
$this->search_result = false;
+ $this->cached_domains = false;
// Always connect to master server
$this->connection=ldap_connect($_SESSION['ldap_master_uri']);
if (ldap_set_option($this->connection, LDAP_OPT_PROTOCOL_VERSION, 3)) {
@@ -128,19 +129,14 @@
function read( $dn ) {
$result = ldap_read($this->connection, $dn, "(objectclass=*)");
if( !$result ) {
- print $this->error();
return false;
}
$entry = ldap_first_entry($this->connection,$result);
if( !$entry ) {
- print $this->error();
ldap_free_result($result);
return false;
}
$ldap_object = ldap_get_attributes($this->connection,$entry);
- if( !$ldap_object ) {
- print $this->error();
- }
ldap_free_result($result);
return $ldap_object;
}
@@ -288,6 +284,8 @@
if ($dn) {
$group = 'user';
$filter = '(member='.$this->escape($dn).')';
+ $result = $this->search( 'cn=domain-maintainer,cn=internal,'.$_SESSION['base_dn'], $filter);
+ if (ldap_count_entries($this->connection, $result) > 0) $group = 'domain-maintainer';
$result = $this->search( 'cn=maintainer,cn=internal,'.$_SESSION['base_dn'], $filter);
if (ldap_count_entries($this->connection, $result) > 0) $group = 'maintainer';
$result = $this->search( 'cn=admin,cn=internal,'.$_SESSION["base_dn"], $filter);
@@ -297,6 +295,35 @@
return $group;
}
+ function domainsForMaintainerDn( $dn ) {
+ if( !$this->is_bound ) {
+ return false;
+ }
+ debug("\tdn=$dn");
+ $domains = array();
+ $filter = '(member='.$this->escape($dn).')';
+ debug("filter:$filter");
+ $result = $this->search( 'cn=domains,cn=internal,'.$_SESSION['base_dn'], $filter);
+ $entries = $this->getEntries();
+ unset($entries['count']);
+ if( count($entries) > 0) {
+ foreach( $entries as $val ) {
+ debug("\tdomain=".$val['cn'][0]);
+ $domains[] = $val['cn'][0];
+ }
+ }
+ return $domains;
+ }
+
+ function domainsForMaintainerUid( $uid ) {
+ debug("domainsForMaintainer( $uid ):");
+ $dn = $this->dnForUid($uid);
+ if($dn) {
+ return $this->domainsForMaintainerDn($dn);
+ }
+ return false;
+ }
+
// Get members of a group as an array of DNs
function groupMembers( $base, $group ) {
global $errors;
@@ -374,6 +401,66 @@
return $count;
}
+ function domains( $reload = false ) {
+ if( $reload || !$this->cached_domains ) {
+ $kolab_obj = $this->read( 'k=kolab,'.$_SESSION['base_dn'] );
+ if( !$kolab_obj ) return false;
+ $this->cached_domains = $kolab_obj['postfix-mydestination'];
+ unset($this->cached_domains['count']);
+ debug("loading domains");
+ }
+ debug("ldap->domains() returns ".join(", ", $this->cached_domains));
+ return $this->cached_domains;
+ }
+
+ function addToDomainGroups( $member, $domains ) {
+ foreach( $domains as $domain ) {
+ $domgrpdn = 'cn='.$this->dn_escape($domain).',cn=domains,cn=internal,'.$_SESSION['base_dn'];
+ $dom_obj = $this->read( $domgrpdn );
+ if( !$dom_obj ) {
+ debug("+Adding group $domgrpdn with member $member");
+ if( !ldap_add($this->connection, $domgrpdn,
+ array( 'objectClass' => array('top', 'kolabGroupOfNames'),
+ 'cn' => $domain,
+ 'member' => $member ) ) ) {
+ debug("Error adding domain group: ".ldap_error($this->connection));
+ return false;
+ }
+ } else {
+ if( !in_array( $member, $dom_obj['member'] ) ) {
+ debug("+Adding member $member to $domgrpdn");
+ if( !ldap_mod_add( $this->connection, $domgrpdn, array( 'member' => $member ) ) ) {
+ debug("Error adding $member to domain $domgrpdn: ".ldap_error($this->connection));
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ function removeFromDomainGroups( $member, $domains ) {
+ foreach( $domains as $domain ) {
+ $domgrpdn = 'cn='.$this->dn_escape($domain).',cn=domains,cn=internal,'.$_SESSION['base_dn'];
+ $dom_obj = $this->read( $domgrpdn );
+ if( $dom_obj ) {
+ if( count( $dom_obj['member'] == 1 ) ) {
+ debug("-Removing group $domgrpdn");
+ if( !ldap_delete( $this->connection, $domgrpdn ) ) {
+ debug("Error deleting domain group $domgrpdn: ".ldap_error($this->connection));
+ return false;
+ }
+ } else {
+ debug("-Removing member $member from group $domgrpdn");
+ if( !ldap_mod_del( $this->connection, $domgrpdn, array( 'member' => $member ) ) ) {
+ debug("Error deleting $member from domain $domgrpdn: ".ldap_error($this->connection));
+ return false;
+ }
+ }
+ }
+ }
+ }
+
// Set deleflag on object, or if $delete_now is
// true, just delete it
function deleteObject( $dn, $delete_now = false ) {
@@ -413,6 +500,7 @@
var $is_bound;
var $bind_dn;
var $search_result;
+ var $cached_domains;
};
$ldap =& new KolabLDAP;
Index: menu.php
===================================================================
RCS file: /kolabrepository/server/kolab-webadmin/kolab-webadmin/php/admin/include/menu.php,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- menu.php 10 Mar 2005 21:58:19 -0000 1.12
+++ menu.php 5 Jul 2005 10:31:51 -0000 1.13
@@ -22,7 +22,7 @@
$menuitems = array();
-if( $auth->group() == "admin" || $auth->group() == "maintainer" ) {
+if( $auth->group() == "admin" || $auth->group() == "maintainer" || $auth->group() == 'domain-maintainer' ) {
$menuitems['user'] = array( 'name' => _('Users'),
'url' => $topdir.'/user/',
'title' => _('Manage Email Users'),
@@ -41,7 +41,7 @@
array( 'name' => _('Vacation'),
'url' => 'vacation.php' )));
}
-if( $auth->group() == "admin" || $auth->group() == "maintainer" ) {
+if( $auth->group() == "admin" || $auth->group() == "maintainer" || $auth->group() == 'domain-maintainer') {
$menuitems['addressbook'] = array( 'name' => _('Addressbook'),
'url' => $topdir.'/addressbook/',
'title' => _('Manage Address Book'),
@@ -55,7 +55,7 @@
array( 'name' => _('Add Shared Folder'),
'url' => 'sf.php?action=create' )));
}
-if( $auth->group() == 'admin' || $auth->group() == 'maintainer' ) {
+if( $auth->group() == 'admin' || $auth->group() == 'maintainer' || $auth->group() == 'domain-maintainer') {
$menuitems['distlist'] = array( 'name' => _('Distribution Lists'),
'url' => $topdir.'/distributionlist/',
'title' => _('Manage Distribution Lists'),
@@ -70,6 +70,12 @@
'submenu' => array(
array( 'name' => _('Create New Administrator'),
'url' => 'admin.php?action=create' ) ) );
+ $menuitems['domain-maintainer'] = array( 'name' => _('Domain Maintainers'),
+ 'url' => $topdir.'/domainmaintainer/',
+ 'title' => _('Manage Domain Maintainers'),
+ 'submenu' => array(
+ array( 'name' => _('Create New Domain Maintainer'),
+ 'url' => 'maintainer.php?action=create' ) ) );
}
if( $auth->group() == 'admin' ) {
$menuitems['maintainer'] = array( 'name' => _('Maintainers'),
@@ -77,12 +83,14 @@
'title' => _('Manage Maintainers'),
'submenu' => array(
array( 'name' => _('Create New Maintainer'),
- 'url' => 'maintainer.php?action=create' ) ) );
+ 'url' => 'domainmaintainer.php?action=create' ) ) );
} else if( $auth->group() == 'maintainer' ) {
$mdn = $auth->dn();
$menuitems['maintainer'] = array( 'name' => _('Maintainers'),
'url' => $topdir.'/maintainer/maintainer.php?action=modify&dn='.urlencode($mdn),
'title' => _('Manage Maintainer') );
+} else if( $auth->group() == 'domain-maintainer' ) {
+ // Domain maintainer
}
if( $auth->group() == 'admin' ) {
$menuitems['service'] = array( 'name' => _('Services'),
@@ -105,7 +113,7 @@
array( 'name' => _('KDE'),
'url' => 'kde.php' )
));
-if( $auth->group() == 'admin' || $auth->group() == 'maintainer' ) {
+if( $auth->group() == 'admin' || $auth->group() == 'maintainer' || $auth->group() == 'domain-maintainer') {
$menuitems['about']['submenu'][] = array( 'name' => _('<b>Versions</b>'),
'url' => 'versions.php' );
}
More information about the commits
mailing list