private function _scanReference() { $reftag = $this->getState('translations.reference'); $filter_tag = $this->getState('filter.tag') ? "^({$reftag}|" . $this->getState('filter.tag') . ")\$" : '.'; $filter_search = $this->getState('filter.search') ? $this->getState('filter.search') : '.'; $filter_storage = $this->getState('filter.storage'); $filter_origin = $this->getState('filter.origin'); $filter_client = $this->getState('filter.client'); if (empty($filter_client)) { $clients = array('site', 'administrator', 'installation'); } else { $clients = array($filter_client); } foreach ($clients as $client) { $client_folder = constant('LOCALISEPATH_' . strtoupper($client)) . '/language'; if (JFolder::exists($client_folder)) { // Scan joomla files $tags = JFolder::folders($client_folder, $filter_tag, false, false, array('overrides', '.svn', 'CVS', '.DS_Store', '__MACOSX')); foreach ($tags as $tag) { if (array_key_exists("{$client}|{$reftag}|joomla", $this->translations)) { $reftranslation = $this->translations["{$client}|{$reftag}|joomla"]; if (array_key_exists("{$client}|{$tag}|joomla", $this->translations)) { $this->translations["{$client}|{$tag}|joomla"]->setProperties(array('refpath' => $reftranslation->path, 'state' => 'inlanguage')); } elseif ($filter_storage != 'local') { $origin = LocaliseHelper::getOrigin("", $client); if ($filter_origin == $origin) { $path = constant('LOCALISEPATH_' . strtoupper($client)) . "/language/{$tag}/{$tag}.ini"; $translation = new JObject(array('type' => 'joomla', 'tag' => $tag, 'client' => $client, 'storage' => 'global', 'filename' => 'joomla', 'name' => JText::_('COM_LOCALISE_TEXT_TRANSLATIONS_JOOMLA'), 'refpath' => $reftranslation->path, 'path' => $path, 'state' => 'unexisting', 'writable' => LocaliseHelper::isWritable($path), 'origin' => $origin)); $this->translations["{$client}|{$tag}|joomla"] = $translation; } } } } $files = JFolder::files("{$client_folder}/{$reftag}", "\\.ini\$"); if ($files) { foreach ($files as $file) { if (preg_match("/^{$reftag}\\.(lib.*)\\.ini\$/", $file, $matches)) { $name = $matches[1]; $origin = LocaliseHelper::getOrigin($name, $client); foreach ($tags as $tag) { if (array_key_exists("{$client}|{$reftag}|{$name}", $this->translations)) { $reftranslation = $this->translations["{$client}|{$reftag}|{$name}"]; if (array_key_exists("{$client}|{$tag}|{$name}", $this->translations)) { $this->translations["{$client}|{$tag}|{$name}"]->setProperties(array('refpath' => $reftranslation->path, 'state' => 'inlanguage')); } else { $path = constant('LOCALISEPATH_' . strtoupper($client)) . "/language/{$tag}/{$tag}.{$name}.ini"; $translation = new JObject(array('type' => 'library', 'tag' => $tag, 'client' => $client, 'storage' => 'global', 'filename' => $name, 'name' => $name, 'refpath' => $reftranslation->path, 'path' => $path, 'state' => 'unexisting', 'writable' => LocaliseHelper::isWritable($path), 'origin' => '_thirdparty')); $this->translations["{$client}|{$tag}|{$name}"] = $translation; } } } } elseif (preg_match("/^{$reftag}\\.(pkg.*)\\.ini\$/", $file, $matches)) { $name = $matches[1]; $origin = LocaliseHelper::getOrigin($name, $client); foreach ($tags as $tag) { if (array_key_exists("{$client}|{$reftag}|{$name}", $this->translations)) { $reftranslation = $this->translations["{$client}|{$reftag}|{$name}"]; if (array_key_exists("{$client}|{$tag}|{$name}", $this->translations)) { $this->translations["{$client}|{$tag}|{$name}"]->setProperties(array('refpath' => $reftranslation->path, 'state' => 'inlanguage')); } else { $path = constant('LOCALISEPATH_' . strtoupper($client)) . "/language/{$tag}/{$tag}.{$name}.ini"; $translation = new JObject(array('type' => 'package', 'tag' => $tag, 'client' => $client, 'storage' => 'global', 'filename' => $name, 'name' => $name, 'refpath' => $reftranslation->path, 'path' => $path, 'state' => 'unexisting', 'writable' => LocaliseHelper::isWritable($path), 'origin' => '_thirdparty')); $this->translations["{$client}|{$tag}|{$name}"] = $translation; } } } } elseif (preg_match("/^{$reftag}\\.(fil.*)\\.ini\$/", $file, $matches)) { $name = $matches[1]; $origin = LocaliseHelper::getOrigin($name, $client); foreach ($tags as $tag) { if (array_key_exists("{$client}|{$reftag}|{$name}", $this->translations)) { $reftranslation = $this->translations["{$client}|{$reftag}|{$name}"]; if (array_key_exists("{$client}|{$tag}|{$name}", $this->translations)) { $this->translations["{$client}|{$tag}|{$name}"]->setProperties(array('refpath' => $reftranslation->path, 'state' => 'inlanguage')); } else { $path = constant('LOCALISEPATH_' . strtoupper($client)) . "/language/{$tag}/{$tag}.{$name}.ini"; $translation = new JObject(array('type' => 'file', 'tag' => $tag, 'client' => $client, 'storage' => 'global', 'filename' => $name, 'name' => $name, 'refpath' => $reftranslation->path, 'path' => $path, 'state' => 'unexisting', 'writable' => LocaliseHelper::isWritable($path), 'origin' => '_thirdparty')); $this->translations["{$client}|{$tag}|{$name}"] = $translation; } } } } } } } } // Scan extension files $scans = LocaliseHelper::getScans($this->getState('filter.client'), $this->getState('filter.type')); foreach ($scans as $scan) { $prefix = $scan['prefix']; $suffix = $scan['suffix']; $type = $scan['type']; $client = $scan['client']; $path = $scan['path']; $folder = $scan['folder']; $extensions = JFolder::folders($path, $filter_search); foreach ($extensions as $extension) { if (array_key_exists("{$client}|{$reftag}|{$prefix}{$extension}{$suffix}", $this->translations)) { $reftranslation = $this->translations["{$client}|{$reftag}|{$prefix}{$extension}{$suffix}"]; $tags = JFolder::folders(constant('LOCALISEPATH_' . strtoupper($client)) . '/language', $filter_tag, false, false, array('overrides', '.svn', 'CVS', '.DS_Store', '__MACOSX')); foreach ($tags as $tag) { $origin = LocaliseHelper::getOrigin("{$prefix}{$extension}{$suffix}", $client); if (array_key_exists("{$client}|{$tag}|{$prefix}{$extension}{$suffix}", $this->translations)) { $this->translations["{$client}|{$tag}|{$prefix}{$extension}{$suffix}"]->setProperties(array('refpath' => $reftranslation->path, 'state' => 'inlanguage')); } elseif ($filter_storage != 'local' && ($filter_origin == '' || $filter_origin == $origin)) { $path = constant('LOCALISEPATH_' . strtoupper($client)) . "/language/{$tag}/{$tag}.{$prefix}{$extension}{$suffix}.ini"; $translation = new JObject(array('type' => $type, 'tag' => $tag, 'client' => $client, 'storage' => 'global', 'filename' => "{$prefix}{$extension}{$suffix}", 'name' => "{$prefix}{$extension}{$suffix}", 'refpath' => $reftranslation->path, 'path' => $path, 'state' => 'unexisting', 'writable' => LocaliseHelper::isWritable($path), 'origin' => $origin)); $this->translations["{$client}|{$tag}|{$prefix}{$extension}{$suffix}"] = $translation; } } } } } }
/** * Method to get a list of options for a list input. * * @return array An array of JHtml options. */ protected function getGroups() { // Remove '.ini' from values if (is_array($this->value)) { foreach ($this->value as $key => $val) { $this->value[$key] = substr($val, 0, -4); } } $package = (string) $this->element['package']; $groups = array('Site' => array(), 'Administrator' => array(), 'Installation' => array()); foreach (array('Site', 'Administrator', 'Installation') as $client) { $path = constant('LOCALISEPATH_' . strtoupper($client)) . '/language'; if (JFolder::exists($path)) { $tags = JFolder::folders($path, '.', false, false, array('overrides', '.svn', 'CVS', '.DS_Store', '__MACOSX')); if ($tags) { foreach ($tags as $tag) { $files = JFolder::files("{$path}/{$tag}", ".ini\$"); foreach ($files as $file) { $basename = substr($file, strlen($tag) + 1); if ($basename == 'ini') { $key = 'joomla'; $value = JText::_('COM_LOCALISE_TEXT_TRANSLATIONS_JOOMLA'); $origin = LocaliseHelper::getOrigin('', strtolower($client)); $disabled = $origin != $package && $origin != '_thirdparty'; } else { $key = substr($basename, 0, strlen($basename) - 4); $value = $key; $origin = LocaliseHelper::getOrigin($key, strtolower($client)); $disabled = $origin != $package && $origin != '_thirdparty'; } $groups[$client][$key] = JHtml::_('select.option', strtolower($client) . '_' . $key, $value, 'value', 'text', false); } } } } } $scans = LocaliseHelper::getScans(); foreach ($scans as $scan) { $prefix = $scan['prefix']; $suffix = $scan['suffix']; $type = $scan['type']; $client = ucfirst($scan['client']); $path = $scan['path']; $folder = $scan['folder']; $extensions = JFolder::folders($path); foreach ($extensions as $extension) { if (JFolder::exists("{$path}{$extension}{$folder}/language")) { // scan extensions folder $tags = JFolder::folders("{$path}{$extension}{$folder}/language"); foreach ($tags as $tag) { $file = "{$path}{$extension}{$folder}/language/{$tag}/{$tag}.{$prefix}{$extension}{$suffix}.ini"; if (JFile::exists($file)) { $origin = LocaliseHelper::getOrigin("{$prefix}{$extension}{$suffix}", strtolower($client)); $disabled = $origin != $package && $origin != '_thirdparty'; $groups[$client]["{$prefix}{$extension}{$suffix}"] = JHtml::_('select.option', strtolower($client) . '_' . "{$prefix}{$extension}{$suffix}", "{$prefix}{$extension}{$suffix}", 'value', 'text', $disabled); } } } } } foreach ($groups as $client => $extensions) { JArrayHelper::sortObjects($groups[$client], 'text'); } // Merge any additional options in the XML definition. $groups = array_merge(parent::getGroups(), $groups); return $groups; }