Overview

Packages

  • Kolab
    • FreeBusy

Classes

  • Horde_Kolab_FreeBusy
  • Horde_Kolab_FreeBusy_Cache
  • Horde_Kolab_FreeBusy_Cache_Base
  • Horde_Kolab_FreeBusy_Cache_DB
  • Horde_Kolab_FreeBusy_Cache_DB_acl
  • Horde_Kolab_FreeBusy_Cache_DB_xacl
  • Horde_Kolab_FreeBusy_Cache_File
  • Horde_Kolab_FreeBusy_Cache_File_acl
  • Horde_Kolab_FreeBusy_Cache_File_pvcal
  • Horde_Kolab_FreeBusy_Cache_File_vcal
  • Horde_Kolab_FreeBusy_Cache_File_xacl
  • Horde_Kolab_FreeBusy_Controller_Base
  • Horde_Kolab_FreeBusy_Controller_MatchDict
  • Horde_Kolab_FreeBusy_Controller_NotFound
  • Horde_Kolab_FreeBusy_Controller_RequestConfiguration
  • Horde_Kolab_FreeBusy_Driver_Base
  • Horde_Kolab_FreeBusy_Driver_Freebusy_Base
  • Horde_Kolab_FreeBusy_Driver_Freebusy_Kolab
  • Horde_Kolab_FreeBusy_Exception
  • Horde_Kolab_FreeBusy_Exception_NotFound
  • Horde_Kolab_FreeBusy_Exception_Unauthorized
  • Horde_Kolab_FreeBusy_Export_Freebusy_Backend_Kolab
  • Horde_Kolab_FreeBusy_Export_Freebusy_Base
  • Horde_Kolab_FreeBusy_Export_Freebusy_Decorator_Log
  • Horde_Kolab_FreeBusy_Factory_Base
  • Horde_Kolab_FreeBusy_Freebusy_Controller_Freebusy
  • Horde_Kolab_FreeBusy_Freebusy_Factory_Base
  • Horde_Kolab_FreeBusy_Freebusy_Factory_Kolab
  • Horde_Kolab_FreeBusy_Freebusy_Helper_Owa
  • Horde_Kolab_FreeBusy_Freebusy_Helper_StatusMap_Config
  • Horde_Kolab_FreeBusy_Freebusy_Helper_StatusMap_Default
  • Horde_Kolab_FreeBusy_Freebusy_Owner_Kolab
  • Horde_Kolab_FreeBusy_Freebusy_Params_Folder
  • Horde_Kolab_FreeBusy_Freebusy_UserDb_Kolab
  • Horde_Kolab_FreeBusy_Object_Event
  • Horde_Kolab_FreeBusy_Owner_Kolab
  • Horde_Kolab_FreeBusy_Params_Freebusy_Resource_Kolab
  • Horde_Kolab_FreeBusy_Params_User
  • Horde_Kolab_FreeBusy_Provider_Local
  • Horde_Kolab_FreeBusy_Provider_Remote
  • Horde_Kolab_FreeBusy_Provider_Remote_PassThrough
  • Horde_Kolab_FreeBusy_Provider_Remote_Redirect
  • Horde_Kolab_FreeBusy_Report
  • Horde_Kolab_FreeBusy_Resource_Decorator_Log
  • Horde_Kolab_FreeBusy_Resource_Decorator_Mcache
  • Horde_Kolab_FreeBusy_Resource_Event_Decorator_Log
  • Horde_Kolab_FreeBusy_Resource_Event_Decorator_Mcache
  • Horde_Kolab_FreeBusy_Resource_Event_Kolab
  • Horde_Kolab_FreeBusy_Resource_Event_Owa
  • Horde_Kolab_FreeBusy_Resource_Kolab
  • Horde_Kolab_FreeBusy_Translation
  • Horde_Kolab_FreeBusy_User_Anonymous
  • Horde_Kolab_FreeBusy_User_Decorator_Log
  • Horde_Kolab_FreeBusy_User_Kolab
  • Horde_Kolab_FreeBusy_UserDb_Kolab
  • Horde_Kolab_FreeBusy_UserDb_User_Kolab
  • Horde_Kolab_FreeBusy_View
  • Horde_Kolab_FreeBusy_View_error
  • Horde_Kolab_FreeBusy_View_vfb

Interfaces

  • Horde_Kolab_FreeBusy_Driver_Freebusy_Interface
  • Horde_Kolab_FreeBusy_Driver_Interface
  • Horde_Kolab_FreeBusy_Export_Freebusy
  • Horde_Kolab_FreeBusy_Export_Freebusy_Backend
  • Horde_Kolab_FreeBusy_Factory
  • Horde_Kolab_FreeBusy_Freebusy_Helper_StatusMap
  • Horde_Kolab_FreeBusy_Freebusy_Owner
  • Horde_Kolab_FreeBusy_Owner
  • Horde_Kolab_FreeBusy_Params_Owner
  • Horde_Kolab_FreeBusy_Params_Resource
  • Horde_Kolab_FreeBusy_Provider
  • Horde_Kolab_FreeBusy_Resource
  • Horde_Kolab_FreeBusy_Resource_Event
  • Horde_Kolab_FreeBusy_User
  • Horde_Kolab_FreeBusy_UserDb
  • Horde_Kolab_FreeBusy_UserDb_User
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * The Kolab implementation of the free/busy system.
  4:  *
  5:  * PHP version 5
  6:  *
  7:  * @category Kolab
  8:  * @package  Kolab_FreeBusy
  9:  * @author   Steffen Hansen <steffen@klaralvdalens-datakonsult.se>
 10:  * @author   Gunnar Wrobel <wrobel@pardus.de>
 11:  * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
 12:  * @link     http://pear.horde.org/index.php?package=Kolab_FreeBusy
 13:  */
 14: 
 15: /**
 16:  * The Horde_Kolab_FreeBusy class serves as Registry aka ServiceLocator for the
 17:  * Free/Busy application. It also provides the entry point into the the Horde
 18:  * MVC system and allows to dispatch a request.
 19:  *
 20:  * Copyright 2009-2012 Horde LLC (http://www.horde.org/)
 21:  *
 22:  * See the enclosed file COPYING for license information (LGPL). If you did not
 23:  * receive this file, see
 24:  * http://www.horde.org/licenses/lgpl21.
 25:  *
 26:  * @category Kolab
 27:  * @package  Kolab_FreeBusy
 28:  * @author   Steffen Hansen <steffen@klaralvdalens-datakonsult.se>
 29:  * @author   Gunnar Wrobel <wrobel@pardus.de>
 30:  * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
 31:  * @link     http://pear.horde.org/index.php?package=Kolab_FreeBusy
 32:  */
 33: class Horde_Kolab_FreeBusy_Driver_Freebusy_Kolab extends Horde_Kolab_FreeBusy_Driver_Freebusy_Base
 34: {
 35:     /**
 36:      * Fetch the free/busy data for a user.
 37:      *
 38:      * @params array   $params   Additional options.
 39:      * <pre>
 40:      * 'extended' - Whether to fetch extended free/busy information or not.
 41:      * </pre>
 42:      *
 43:      * @return array The free/busy data.
 44:      */
 45:     public function fetch($params = array())
 46:     {
 47:         $extended = !empty($params['extended']);
 48: 
 49:     }
 50: 
 51:     /**
 52:      * Parse the owner value.
 53:      *
 54:      * @param string $owner The owner that should be processed.
 55:      *
 56:      * @return boolean|PEAR_Error True if successful.
 57:      */
 58:     protected function handleCallee($callee)
 59:     {
 60:         $this->owner = $owner;
 61: 
 62:         $result = $this->_process();
 63:         if (is_a($result, 'PEAR_Error')) {
 64:             return $result;
 65:         }
 66:         return true;
 67:     }
 68: 
 69:     /**
 70:      * Parse the requested folder for the owner of that folder.
 71:      *
 72:      * @param string $req_folder The folder requested.
 73:      *
 74:      * @return boolean|PEAR_Error True if successful.
 75:      */
 76:     protected function handleCalleePart($callee_part)
 77:     {
 78:         /* Handle the owner/folder name and make sure the owner part is in lower case */
 79:         $req_folder = Horde_String::convertCharset($req_folder, 'UTF-8', 'UTF7-IMAP');
 80:         $folder = explode('/', $req_folder);
 81:         if (count($folder) < 2) {
 82:             return PEAR::raiseError(sprintf(Horde_Kolab_FreeBusy_Translation::t("No such folder %s"), $req_folder));
 83:         }
 84: 
 85:         $folder[0] = strtolower($folder[0]);
 86:         $req_folder = implode('/', $folder);
 87:         $this->owner = $folder[0];
 88:         unset($folder[0]);
 89:         $this->folder = join('/', $folder);
 90: 
 91:         $result = $this->_process();
 92:         if (is_a($result, 'PEAR_Error')) {
 93:             return $result;
 94:         }
 95:         return true;
 96:     }
 97: 
 98:     /**
 99:      * Process both the user accessing the page as well as the
100:      * owner of the requested free/busy information.
101:      *
102:      * @return boolean|PEAR_Error True if successful.
103:      */
104:     private function _process()
105:     {
106:         global $conf;
107: 
108:         require_once 'Horde/Kolab/Server.php';
109: 
110:         if (isset($conf['kolab']['ldap']['phpdn'])) {
111:             $params = array(
112:                 'uid' => $conf['kolab']['ldap']['phpdn'],
113:                 'pass' => $conf['kolab']['ldap']['phppw'],
114:             );
115:         } else {
116:             $params = array(
117:                 'user' => $GLOBALS['registry']->getAuth(),
118:                 'pass' => $GLOBALS['registry']->getAuthCredential('password')
119:             );
120:         }
121: 
122:         /* Connect to the Kolab user database */
123:         $db = &Horde_Kolab_Server::singleton($params);
124:         // TODO: Remove once Kolab_Server has been fixed to always return the base dn
125:         $db->fetch();
126: 
127:         /* Retrieve the server configuration */
128:         try {
129:             $server = $db->fetch(sprintf('k=kolab,%s',
130:                                          $db->getBaseUid()),
131:                                  'Horde_Kolab_Server_Object_Kolab_Server');
132:             $this->server_object = $server;
133:         } catch (Horde_Kolab_Server_Exception $e) {
134:             Horde::logMessage(sprintf("Failed fetching the k=kolab configuration object. Error was: %s",
135:                                       $e->getMessage()),
136:                               __FILE__, __LINE__, PEAR_LOG_ERR);
137:             $this->server_object = null;
138:         }
139: 
140:         /* Fetch the user calling us */
141:         $udn = $db->uidForIdOrMail($this->user);
142:         if (is_a($udn, 'PEAR_Error')) {
143:             return $udn;
144:         }
145:         if ($udn) {
146:             $user = $db->fetch($udn, 'Horde_Kolab_Server_Object_Kolab_User');
147:             if (is_a($user, 'PEAR_Error')) {
148:                 return $user;
149:             }
150:             $this->user_object = $user;
151:         }
152: 
153:         if ($this->user_object && $this->user_object->exists()) {
154:             $mail = $this->user_object->get(Horde_Kolab_Server_Object_Kolab_User::ATTRIBUTE_MAIL);
155:             if (is_a($mail, 'PEAR_Error')) {
156:                 return $mail;
157:             }
158:             if ($mail) {
159:                 $this->user = $mail;
160:             }
161:         }
162: 
163:         /* Fetch the owner of the free/busy data */
164:         $odn = $db->uidForIdOrMailOrAlias($this->owner);
165:         if (is_a($odn, 'PEAR_Error')) {
166:             return $odn;
167:         }
168:         if (!$odn) {
169:             $idx = strpos($this->user, '@');
170:             if($idx !== false) {
171:                 $domain = substr($this->user, $idx+1);
172:                 Horde::logMessage(sprintf("Trying to append %s to %s",
173:                                           $domain, $this->owner),
174:                                   __FILE__, __LINE__, PEAR_LOG_DEBUG);
175:                 $odn = $odn = $db->uidForIdOrMail($this->owner . '@' . $domain);
176:             }
177:         }
178: 
179:         if ($odn) {
180:             $owner = $db->fetch($odn, 'Horde_Kolab_Server_Object_Kolab_User');
181:             if (is_a($owner, 'PEAR_Error')) {
182:                 return $owner;
183:             }
184:             $this->owner_object = &$owner;
185:         }
186: 
187:         if (!empty($this->owner_object)) {
188:             if ($this->owner_object->exists()) {
189:                 $this->owner = $this->owner_object->get(Horde_Kolab_Server_Object_Kolab_User::ATTRIBUTE_MAIL);
190: 
191:                 $freebusyserver = $this->owner_object->getServer('freebusy');
192:                 if (!is_a($freebusyserver, 'PEAR_Error')) {
193:                     $this->freebusyserver = $freebusyserver;
194:                 }
195:             }
196:         } else {
197:             return PEAR::raiseError(Horde_Kolab_FreeBusy_Translation::t("Unable to determine owner of the free/busy data!"));
198:         }
199: 
200:         /* Mangle the folder request into an IMAP folder name */
201:         $this->imap_folder = $this->_getImapFolder();
202: 
203:         return true;
204:     }
205: 
206:     /**
207:      * Calculate the correct IMAP folder name to access based on the
208:      * combination of user and owner.
209:      *
210:      * @return string The IMAP folder we should access.
211:      */
212:     function _getImapFolder()
213:     {
214:         $userdom = false;
215:         $ownerdom = false;
216:         if (ereg( '(.*)@(.*)', $this->user, $regs)) {
217:             // Regular user
218:             $user = $regs[1];
219:             $userdom  = $regs[2];
220:         } else {
221:             $user = $this->user;
222:         }
223: 
224:         if(ereg( '(.*)@(.*)', $this->owner, $regs)) {
225:             // Regular owner
226:             $owner = $regs[1];
227:             $ownerdom = $regs[2];
228:         } else {
229:             $owner = $this->owner;
230:         }
231: 
232:         $fldrcomp = array();
233:         if ($user == $owner) {
234:             $fldrcomp[] = 'INBOX';
235:         } else {
236:             $fldrcomp[] = 'user';
237:             $fldrcomp[] = $owner;
238:         }
239: 
240:         if (!empty($this->folder)) {
241:             $fldrcomp[] = $this->folder;
242:         }
243: 
244:         $folder = join('/', $fldrcomp);
245:         if ($ownerdom && !$userdom) {
246:             $folder .= '@' . $ownerdom;
247:         }
248:         return $folder;
249:     }
250: }
251: 
API documentation generated by ApiGen