/** * Method to get the extensions. * * @access public * @return array array of component object * @since 1.6 */ public function &getExtensions() { $core = array(); $allfolders = array(); $clients = array('administrator', 'site'); $extensions = array(); $extensions['components'] = array(); $extensions['modules'] = array(); $extensions['plugins'] = array(); $extensions['templates'] = array(); foreach ($clients as $client) { $allfolders[$client] = array(); $core[$client] = array(); // 1. scan global folders $tags =& JFolder::folders(LocaliseHelper::getLanguagesPath($client), '.', false, false, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'pdf_fonts', 'overrides')); foreach ($tags as $tag) { $path = 'language' . DS . $tag; if ($client == 'administrator') { $path = 'administrator' . DS . $path; } $allfolders[$client][] = $path; } // 2. scan extensions folders $extensions_folders = array('components', 'modules', 'templates'); $absolute = constant('JPATH_' . strtoupper($client)); foreach ($extensions_folders as $type) { $exts =& JFolder::folders($absolute . DS . $type, '.', false, false); foreach ($exts as $extension) { $folder = $absolute . DS . $type . DS . $extension . DS . 'language'; if (JFolder::exists($folder)) { $tags =& JFolder::folders($folder, '.', false, false); foreach ($tags as $tag) { $path = $type . DS . $extension . DS . 'language' . DS . $tag; if (JFolder::exists($path . DS . $tag . "." . $extension . ".ini") || JFolder::exists($path . DS . $tag . ".tpl_" . $extension . ".ini")) { if ($client == 'administrator') { $path = 'administrator' . DS . $path; } $allfolders[$client][] = $path; } } } } } } // 3. Scan plugin folders $groups =& JFolder::folders(JPATH_SITE . DS . 'plugins', '.', false, false); foreach ($groups as $group) { $plugins =& JFolder::folders(JPATH_SITE . DS . 'plugins' . DS . $group, '.', false, false); foreach ($plugins as $plugin) { $folder = JPATH_SITE . DS . 'plugins' . DS . $group . DS . $plugin . DS . 'language'; if (JFolder::exists($folder)) { $tags =& JFolder::folders($folder, '.', false, false); foreach ($tags as $tag) { $path = 'plugins' . DS . $group . DS . $plugin . DS . 'language' . DS . $tag; $allfolders['administrator'][] = $path; $allfolders['site'][] = $path; } } } } foreach ($allfolders as $client => $paths) { foreach ($paths as $path) { $files = JFolder::files(JPATH_SITE . DS . $path, '[^.]+\\.[^.]+\\.ini'); foreach ($files as $file) { preg_match('/([^.]+)\\.([^.]+)\\.ini/', $file, $matches); $name =& $matches[2]; if (!array_key_exists($name, $core[$client])) { $start = substr($name, 0, 3); switch ($start) { case 'com': $type = 'components'; break; case 'mod': $type = 'modules'; break; case 'plg': $type = 'plugins'; break; case 'tpl': $type = 'templates'; break; default: $type = 'error'; } if ($type != 'error') { $model = JModel::getInstance('Translation', 'LocaliseModel', array('ignore_request' => true)); $model->setState('path', $path . DS . $file); if ($model->getCore()) { $core[$client][$name] = $name; } if (array_key_exists($name, $core[$client])) { if (array_key_exists($name, $extensions[$type])) { $extensions[$type][$name]->{$client} = -2; $package_field = $client . "_package"; if ($extensions[$type][$name]->site < 0 && $extensions[$type][$name]->administrator < 0) { unset($extensions[$type][$name]); } } } else { if (!array_key_exists($name, $extensions[$type])) { $extensions[$type][$name] = new JObject(); $extensions[$type][$name]->administrator = -1; $extensions[$type][$name]->site = -1; } $extensions[$type][$name]->{$client} = 0; } } } } } } $filename = $this->getFilename(); if ($filename) { $this->_scanManifest(JPATH_ROOT . DS . 'media' . DS . 'com_localise' . DS . 'manifests' . DS . $filename . '.xml', $extensions); } $types = array('components', 'modules', 'plugins', 'templates'); foreach ($types as $type) { foreach ($extensions[$type] as $name => $object) { $object->site_packages = array('home' => array(), 'thirdparty' => array()); $object->administrator_packages = array('home' => array(), 'thirdparty' => array()); } } if (JFolder::exists(JPATH_ROOT . DS . 'media' . DS . 'com_localise' . DS . 'manifests')) { $packages = JFolder::files(JPATH_ROOT . DS . 'media' . DS . 'com_localise' . DS . 'manifests', '\\.*\\.xml', false, true, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html')); foreach ($packages as $package) { if (basename($package, '.xml') != $filename) { $this->_scanOtherManifest($package, $extensions, 'home'); } } } if (JFolder::exists(JPATH_SITE . DS . 'files' . DS . 'com_localise')) { $packages = JFolder::files(JPATH_SITE . DS . 'files' . DS . 'com_localise', '\\.*\\.xml', false, true, array('.svn', 'CVS', '.DS_Store', '__MACOSX', 'index.html')); foreach ($packages as $package) { $this->_scanOtherManifest($package, $extensions, 'thirdparty'); } } foreach ($types as $type) { ksort($extensions[$type]); } return $extensions; }