/** * Load the list of drivers. * * @return array */ public static function getDrivers() { if (isset(self::$_driverlist)) { return self::$_driverlist; } $fi = new FilesystemIterator(__DIR__ . '/Autoconfig/Driver'); $class_prefix = __CLASS__ . '_Driver_'; $drivers = array(); foreach ($fi as $val) { if ($val->isFile()) { $cname = $class_prefix . $val->getBasename('.php'); if (class_exists($cname)) { $ob = new $cname(); if ($ob instanceof Horde_Mail_Autoconfig_Driver) { $drivers[$ob->priority][] = $ob; } } } } ksort($drivers, SORT_NUMERIC); $flatten = array(); array_walk_recursive($drivers, function ($a) use(&$flatten) { $flatten[] = $a; }); self::$_driverlist = $flatten; return $flatten; }
/** * Return the mail autoconfig instance. * * @return Horde_Mail_Autoconfig The singleton instance. */ public function create(Horde_Injector $injector) { /* Need to manually set the drivers, since we should be using Horde * objects for Http_Client and Net_DNS2_Resolver. The return from * getDrivers() is already in priority order, so we don't need to * worry about that. */ $drivers = array(); foreach (Horde_Mail_Autoconfig::getDrivers() as $val) { $val = clone $val; if ($val instanceof Horde_Mail_Autoconfig_Driver_Guess || $val instanceof Horde_Mail_Autoconfig_Driver_Srv) { $val->dns = $injector->getInstance('Net_DNS2_Resolver'); } elseif ($val instanceof Horde_Mail_Autoconfig_Driver_Thunderbird) { $val->http = $injector->getInstance('Horde_Http_Client'); } $drivers[] = $val; } return new Horde_Mail_Autoconfig(array('drivers' => $drivers)); }