예제 #1
0
 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;
                     }
                 }
             }
         }
     }
 }
예제 #2
0
 /**
  * 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;
 }