_instances[$driver])) { return $this->_instances[$driver]; } switch ($driver) { case 'Sql': $params = array_merge(Horde::getDriverConfig('calendar', 'sql'), $params); if (isset($params['driverconfig']) && $params['driverconfig'] != 'horde') { $customParams = $params; unset($customParams['driverconfig'], $customParams['table'], $customParams['utc']); $params['db'] = $this->_injector->getInstance('Horde_Core_Factory_Db')->create('kronolith', $customParams); } else { $params['db'] = $this->_injector->getInstance('Horde_Db_Adapter'); } break; case 'Resource_Sql': if (!isset($GLOBALS['conf']['calendar']['driver']) || $GLOBALS['conf']['resource']['driver'] != 'sql') { throw new Kronolith_Exception(_("Resources are disabled")); } $params = array_merge(Horde::getDriverConfig('resource', 'sql'), $params); if ($params['driverconfig'] != 'Horde') { $customParams = $params; unset($customParams['driverconfig'], $customParams['table'], $customParams['utc']); $params['db'] = $this->_injector->getInstance('Horde_Core_Factory_Db')->create('kronolith', $customParams); } else { $params['db'] = $this->_injector->getInstance('Horde_Db_Adapter'); } break; case 'Kolab': $params['storage'] = $GLOBALS['injector']->getInstance('Horde_Kolab_Storage'); break; case 'Ical': case 'Mock': break; case 'Horde': $params['registry'] = $GLOBALS['registry']; break; case 'Holidays': if (empty($GLOBALS['conf']['holidays']['enable'])) { throw new Kronolith_Exception(_("Holidays are disabled")); } $params['language'] = $GLOBALS['language']; break; default: throw new InvalidArgumentException('No calendar driver specified'); break; } $class = 'Kronolith_Driver_' . $driver; if (class_exists($class)) { $ob = new $class($params); try { $ob->initialize(); } catch (Exception $e) { $ob = new Kronolith_Driver($params, sprintf(_("The Calendar backend is not currently available: %s"), $e->getMessage())); } } else { $ob = new Kronolith_Driver($params, sprintf(_("Unable to load the definition of %s."), $class)); } $this->_instances[$driver] = $ob; return $ob; } }