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