public static function packages() { // If we already found the packages just return them if (!empty(Kodoc::$packages)) { return Kodoc::$packages; } $files = Kodoc::classes(); $packages = array(); foreach ($files as $group => $classes) { // We have to parse config files differently if ($group === 'config') { foreach ($classes as $config) { $config = Kodoc::parse_config($config); if (isset($config->tags['package'])) { foreach ($config->tags['package'] as $package) { $packages[strtolower($package)]['configs'][$config->name] = $config->name; } } else { $packages['unknown']['configs'][$config->name] = $config->name; } } } else { foreach ($classes as $class) { $class = Kodoc::factory($class); if (isset($class->tags['package'])) { foreach ($class->tags['package'] as $package) { $packages[strtolower($package)][$group][$class->name] = $class->name; } } else { $packages['unknown'][$group][$class->name] = $class->name; } } } } // Sort the groups in each package foreach ($packages as &$package) { foreach ($package as &$group) { ksort($group); } ksort($package); } return Kodoc::$packages = $packages; }