steffen: server/kolab-resource-handlers/kolab-resource-handlers/freebusy freebusy.class.php, 1.8, 1.9 freebusyldap.class.php, 1.3, 1.4 pfb.php, 1.5, 1.6

cvs at intevation.de cvs at intevation.de
Thu Oct 21 12:12:51 CEST 2004


Author: steffen

Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/freebusy
In directory doto:/tmp/cvs-serv8746/kolab-resource-handlers/freebusy

Modified Files:
	freebusy.class.php freebusyldap.class.php pfb.php 
Log Message:
read fb time span from ldap

Index: freebusy.class.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/freebusy/freebusy.class.php,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- freebusy.class.php	20 Oct 2004 12:31:33 -0000	1.8
+++ freebusy.class.php	21 Oct 2004 10:12:49 -0000	1.9
@@ -3,10 +3,14 @@
 class FreeBusy {
   function FreeBusy( $username, 
 		     $password, 
-		     $imaphost ) {
+		     $imaphost,
+		     $fbfuture=60,
+		     $fbpast=0 ) {
     $this->username = $username;
     $this->password = $password;
     $this->imaphost = $imaphost;
+    $this->fbfuture = $fbfuture;
+    $this->fbpast   = $fbpast;
   }
 
   function imapConnect() {
@@ -50,16 +54,12 @@
       $year = date('Y');
       $day = date('j');
     
-      $startstamp = mktime(0, 0, 0, $month, $day, $year);
+      $startstamp = strtotime( '-'.$this->fbpast.' days', mktime(0, 0, 0, $month, $day, $year) );
     }
   
     // Default the end date to the start date + freebusy_days.
     if (is_null($endstamp) || $endstamp < $startstamp) {
-      $month = date('n', $startstamp);
-      $year = date('Y', $startstamp);
-      $day = date('j', $startstamp);
-    
-      $endstamp = mktime(0, 0, 0, $month, $day + $this->freebusy_days, $year);
+      $endstamp = strtotime( '+'.$this->fbfuture.' days', $startstamp );
     }
 
     myLog("Creating pfb from $startstamp to $endstamp", RM_LOG_DEBUG);
@@ -361,7 +361,8 @@
   var $foldername;
 
   // Settings
-  var $freebusy_days = 60;
+  var $fbfuture;
+  var $fbpast;
   var $default_domain = 'foo';
   var $week_starts_on_sunday = false;
 

Index: freebusyldap.class.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/freebusy/freebusyldap.class.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- freebusyldap.class.php	5 Oct 2004 09:13:41 -0000	1.3
+++ freebusyldap.class.php	21 Oct 2004 10:12:49 -0000	1.4
@@ -23,6 +23,43 @@
     else return $this->is_bound = ldap_bind( $this->connection);
   }
 
+  function freeBusyPast() {
+    $result = ldap_read( $this->connection, $this->base, 
+			 '(&(objectClass=kolab)(k=kolab))',
+			   array( 'kolabFreeBusyPast' ) );
+    if( $result ) {
+      $entries = ldap_get_entries( $this->connection, $result );
+      if( $entries['count'] > 0 && !empty($entries[0]['kolabfreebusypast'][0]) ) {
+	ldap_free_result($result);
+	return $entries[0]['kolabfreebusypast'][0];
+      }
+    }
+    return 0; // Default
+  }
+
+  // Return a hash of info about a user
+  function userInfo( $uid ) {
+    $result = ldap_search( $this->connection, $this->base, 
+			   '(&(objectClass=kolabInetOrgPerson)(|(uid='.
+			   $this->escape($uid).')(mail='.$this->escape($uid).')))',
+			   array( 'dn','mail','uid','kolabHomeServer', 'kolabFreeBusyFuture' ) );
+    if( $result ) {
+      $entries = ldap_get_entries( $this->connection, $result );
+      if( $entries['count'] > 0 && !empty($entries[0]['mail'][0]) ) {
+	$hash = array();
+	$hash['DN'] = $this->readLdapAttr( $entries[0], 'dn' );
+	$hash['UID'] = $this->readLdapAttr( $entries[0], 'uid' );
+	$hash['MAIL'] = $this->readLdapAttr( $entries[0], 'mail', $uid );
+	$hash['HOMESERVER'] = $this->readLdapAttr( $entries[0], 'kolabhomeserver' );
+	$hash['FBFUTURE'] = (int)($this->readLdapAttr( $entries[0], 'kolabfreebusyfuture', 60 ));
+	ldap_free_result( $result );
+	return $hash;
+      }
+      ldap_free_result( $result );
+    }
+    return false;
+  }
+
   function mailForUid( $uid ) {
     $result = ldap_search( $this->connection, $this->base, '(&(objectClass=kolabInetOrgPerson)(uid='.$uid.'))',
 			   array( 'mail' ) );
@@ -101,6 +138,18 @@
     $str = str_replace( ')',  '\\29', $str );
     $str = str_replace( '\0', '\\00', $str );
     return $str;
+  }
+
+  function readLdapAttr( $entry, $attrname, $default = false ) {
+    $val = $default;
+    if( !array_key_exists( $attrname, $entry ) ) return $default;
+    else if( is_array( $entry[$attrname] ) ) {
+      $val = $entry[$attrname][0];
+    } else {
+      $val = $entry[$attrname];
+    }
+    if( $val == '' ) $val = $default;
+    return $val;
   }
 
   var $connection;

Index: pfb.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/freebusy/pfb.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- pfb.php	14 Oct 2004 02:28:29 -0000	1.5
+++ pfb.php	21 Oct 2004 10:12:49 -0000	1.6
@@ -21,8 +21,11 @@
   exit;
 }
 
-$imapuser = $ldap->mailForUid( $imapuser );
-$homeserver = $ldap->homeServer( $imapuser );
+$userinfo = $ldap->userInfo( $imapuser );
+if( $userinfo ) {
+  $imapuser = $userinfo['MAIL'];
+  $homeserver = $userinfo['HOMESERVER'];  
+}
 
 if( $homeserver != $params['server'] ) {
   $redirect = 'https://'.$homeserver . $_SERVER['REQUEST_URI'];
@@ -55,7 +58,7 @@
   }
   if( $acl && $req_extended ) {
     // Check access
-    $distlists = $ldap->distlists( $ldap->dn($imapuser));
+    $distlists = $ldap->distlists( $userinfo['DN'] );
     if( $distlists === false ) unauthorized( $req_folder.($req_extended?'.xpfb':'.pfb' ) );
     for( $i = 0; $i < count($distlists); $i++ ) {
       $distlists[$i] = $distlists[$i].'@'.$params['email_domain'];
@@ -80,7 +83,8 @@
   $owner = $folder[0];
   unset($folder[0]);
   $folder = join('/', $folder);
-  $fb =& new FreeBusy( $imapuser, $imappw, 'localhost' );
+  $fbpast = $ldap->freeBusyPast();
+  $fb =& new FreeBusy( $imapuser, $imappw, 'localhost', $userinfo['FBFUTURE'], $fbpast );
   $fb->freebusy_days = $params['freebusy_days'];
   $fb->default_domain = $params['email_domain'];
   $rc = $fb->imapConnect();





More information about the commits mailing list