1<?php 2/** 3 * A simple composition of server functionality. 4 * 5 * PHP version 5 6 * 7 * @category Kolab 8 * @package Kolab_Server 9 * @author Gunnar Wrobel <wrobel@pardus.de> 10 * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 11 * @link http://pear.horde.org/index.php?package=Kolab_Server 12 */ 13 14/** 15 * A simple composition of server functionality. 16 * 17 * Copyright 2008-2016 Horde LLC (http://www.horde.org/) 18 * 19 * See the enclosed file COPYING for license information (LGPL). If you 20 * did not receive this file, see http://www.horde.org/licenses/lgpl21. 21 * 22 * @category Kolab 23 * @package Kolab_Server 24 * @author Gunnar Wrobel <wrobel@pardus.de> 25 * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 26 * @link http://pear.horde.org/index.php?package=Kolab_Server 27 */ 28class Horde_Kolab_Server_Composite 29{ 30 /** 31 * The server. 32 * 33 * @var Horde_Kolab_Server_Interface 34 */ 35 private $_server; 36 37 /** 38 * The structure handler for this server. 39 * 40 * @var Horde_Kolab_Server_Structure_Interface 41 */ 42 private $_structure; 43 44 /** 45 * The search handler for this server. 46 * 47 * @var Horde_Kolab_Server_Search_Interface 48 */ 49 private $_search; 50 51 /** 52 * The object handler for this server. 53 * 54 * @var Horde_Kolab_Server_Objects_Interface 55 */ 56 private $_objects; 57 58 /** 59 * The schema handler for this server. 60 * 61 * @var Horde_Kolab_Server_Schema_Interface 62 */ 63 private $_schema; 64 65 /** 66 * Construct a new Horde_Kolab_Server object. 67 * 68 * @param array $params Parameter array. 69 */ 70 public function __construct( 71 Horde_Kolab_Server_Interface $server, 72 Horde_Kolab_Server_Objects_Interface $objects, 73 Horde_Kolab_Server_Structure_Interface $structure, 74 Horde_Kolab_Server_Search_Interface $search, 75 Horde_Kolab_Server_Schema_Interface $schema 76 ) { 77 $this->_server = $server; 78 $this->_objects = $objects; 79 $this->_structure = $structure; 80 $this->_search = $search; 81 $this->_schema = $schema; 82 83 $structure->setComposite($this); 84 $search->setComposite($this); 85 $schema->setComposite($this); 86 $objects->setComposite($this); 87 } 88 89 /** 90 * Retrieve an object attribute. 91 * 92 * @param string $key The name of the attribute. 93 * 94 * @return mixed The atribute value. 95 * 96 * @throws Horde_Kolab_Server_Exception If the attribute does not exist. 97 */ 98 public function __get($key) 99 { 100 $public = array('server', 'objects', 'structure', 'search', 'schema'); 101 if (in_array($key, $public)) { 102 $priv_key = '_' . $key; 103 return $this->$priv_key; 104 } 105 throw new Horde_Kolab_Server_Exception( 106 sprintf('Attribute %s not supported!', $key) 107 ); 108 } 109 110 /** 111 * Connect to the server. Use this method if the user name you can provide 112 * does not match a GUID. In this case it will be required to map this user 113 * name first. 114 * 115 * @param string $user The user name. 116 * @param string $pass The password. 117 * 118 * @return NULL. 119 * 120 * @throws Horde_Kolab_Server_Exception If the connection failed. 121 */ 122 public function connect($user = null, $pass = null) 123 { 124 /** Bind anonymously first. */ 125 $this->server->connectGuid(); 126 $guid = $this->search->searchGuidForUidOrMail($user); 127 $this->server->connectGuid($guid, $pass); 128 } 129} 130