/**
* Opens a connection to the Kolab server.
*
* @param boolean $create_missing Create a preferences folder if it is
* missing.
*
* @return Horde_Kolab_Storage_Data The storage backend.
*
* @throws Horde_Prefs_Exception
*/
protected function _getStorage($create_missing = false)
{
$query = $this->_kolab->getList()->getQuery();
if ($folder = $query->getDefault('h-prefs')) {
return $this->_kolab->getData($folder);
}
$folders = $query->listByType('h-prefs');
if (!empty($folders)) {
return $this->_kolab->getData($folders[0]);
}
if (!$create_missing) {
throw new Horde_Prefs_Exception('No Kolab storage backend available.');
}
$params = $this->getParams();
$folder = $this->_kolab->getList()->getNamespace()->constructFolderName($params['user'], $this->_folder);
$this->_kolab->getList()->getListManipulation()->createFolder($folder, 'h-prefs.default');
if ($this->_logger !== null) {
$this->_logger->info(sprintf(__CLASS__ . ': Created default Kolab preferences folder "%s".', $this->_folder));
}
return $this->_kolab->getData($folder);
}