phpbb_root_path = $phpbb_root_path; $this->phpEx = $phpEx; $this->config = $config; $this->request = $request; $this->cache = $cache; } /** * @TODO **/ public function get_driver($avatar_type, $new = false) { if (self::$valid_drivers === false) { $this->load_valid_drivers(); } // Legacy stuff... switch ($avatar_type) { case AVATAR_GALLERY: $avatar_type = 'local'; break; case AVATAR_UPLOAD: $avatar_type = 'upload'; break; case AVATAR_REMOTE: $avatar_type = 'remote'; break; } if (isset(self::$valid_drivers[$avatar_type])) { if ($new || !is_object(self::$valid_drivers[$avatar_type])) { $class_name = 'phpbb_avatar_driver_' . $avatar_type; self::$valid_drivers[$avatar_type] = new $class_name($this->config, $this->request, $this->phpbb_root_path, $this->phpEx, $this->cache); } return self::$valid_drivers[$avatar_type]; } else { return null; } } /** * @TODO **/ private function load_valid_drivers() { if ($this->cache) { self::$valid_drivers = $this->cache->get('avatar_drivers'); } if (empty($this->valid_drivers)) { self::$valid_drivers = array(); $iterator = new DirectoryIterator($this->phpbb_root_path . 'includes/avatar/driver'); foreach ($iterator as $file) { // Match all files that appear to be php files if (preg_match("/^(.*)\.{$this->phpEx}$/", $file, $match)) { self::$valid_drivers[] = $match[1]; } } self::$valid_drivers = array_flip(self::$valid_drivers); if ($this->cache) { $this->cache->put('avatar_drivers', self::$valid_drivers); } } } /** * @TODO **/ public function get_valid_drivers() { if (self::$valid_drivers === false) { $this->load_valid_drivers(); } return array_keys(self::$valid_drivers); } /** * Strip out user_ and group_ prefixes from keys **/ public static function clean_row($row) { $keys = array_keys($row); $values = array_values($row); $keys = array_map( function ($key) { return preg_replace('#^(?:user_|group_)#', '', $key); }, $keys ); return array_combine($keys, $values); } }