/**
  * Export the locale files to the browser as a tarball.
  * Requires tar for operation (configured in config.inc.php).
  * @param $locale string Locale code for exported locale
  */
 function export($locale)
 {
     // Construct the tar command
     $tarBinary = Config::getVar('cli', 'tar');
     if (empty($tarBinary) || !file_exists($tarBinary)) {
         // We can use fatalError() here as we already have a user
         // friendly way of dealing with the missing tar on the
         // index page.
         fatalError('The tar binary must be configured in config.inc.php\'s cli section to use the export function of this plugin!');
     }
     $command = $tarBinary . ' cz';
     $localeFilesList = TranslatorAction::getLocaleFiles($locale);
     $localeFilesList = array_merge($localeFilesList, TranslatorAction::getMiscLocaleFiles($locale));
     $emailTemplateDao = DAORegistry::getDAO('EmailTemplateDAO');
     $localeFilesList[] = $emailTemplateDao->getMainEmailTemplateDataFilename($locale);
     foreach (array_values(TranslatorAction::getEmailFileMap($locale)) as $emailFile) {
     }
     // Include locale files (main file and plugin files)
     foreach ($localeFilesList as $file) {
         if (file_exists($file)) {
             $command .= ' ' . escapeshellarg($file);
         }
     }
     header('Content-Type: application/x-gtar');
     header("Content-Disposition: attachment; filename=\"{$locale}.tar.gz\"");
     header('Cache-Control: private');
     // Workarounds for IE weirdness
     passthru($command);
 }
 /**
  * @copydoc SetupListbuilderHandler::initialize()
  */
 function initialize($request)
 {
     parent::initialize($request);
     $context = $request->getContext();
     $this->setTitle('plugins.generic.translator.localeFileContents');
     $this->setInstructions('plugins.generic.translator.localeFileContentsDescription');
     // Get and validate the locale and filename parameters
     $this->locale = $request->getUserVar('locale');
     if (!AppLocale::isLocaleValid($this->locale)) {
         fatalError('Invalid locale.');
     }
     $this->filename = $request->getUserVar('filename');
     if (!in_array($this->filename, TranslatorAction::getLocaleFiles($this->locale))) {
         fatalError('Invalid locale file specified!');
     }
     // Basic configuration
     $this->setSourceType(LISTBUILDER_SOURCE_TYPE_TEXT);
     $this->setSaveType(LISTBUILDER_SAVE_TYPE_EXTERNAL);
     $this->setSaveFieldName('localeKeys');
     self::$plugin->import('controllers.listbuilder.LocaleFileListbuilderGridCellProvider');
     $cellProvider = new LocaleFileListbuilderGridCellProvider($this->locale);
     // Key column
     $this->addColumn(new ListbuilderGridColumn($this, 'key', 'plugins.generic.translator.localeKey', null, self::$plugin->getTemplatePath() . 'localeFileKeyGridCell.tpl', $cellProvider, array('tabIndex' => 1)));
     // Value column (custom template displays English text)
     $this->addColumn(new ListbuilderGridColumn($this, 'value', 'plugins.generic.translator.localeKeyValue', null, self::$plugin->getTemplatePath() . 'localeFileValueGridCell.tpl', $cellProvider, array('tabIndex' => 2, 'width' => 70, 'alignment' => COLUMN_ALIGNMENT_LEFT)));
 }
 function isLocaleFile($locale, $filename)
 {
     if (in_array($filename, TranslatorAction::getLocaleFiles($locale))) {
         return true;
     }
     if (in_array($filename, TranslatorAction::getMiscLocaleFiles($locale))) {
         return true;
     }
     if ($filename == Locale::getEmailTemplateFilename($locale)) {
         return true;
     }
     return false;
 }
 function isLocaleFile($locale, $filename)
 {
     if (in_array($filename, TranslatorAction::getLocaleFiles($locale))) {
         return true;
     }
     if (in_array($filename, TranslatorAction::getMiscLocaleFiles($locale))) {
         return true;
     }
     $emailTemplateDao =& DAORegistry::getDAO('EmailTemplateDAO');
     if ($filename == $emailTemplateDao->getMainEmailTemplateDataFilename($locale)) {
         return true;
     }
     return false;
 }
Beispiel #5
0
 function saveLocaleChanges($args, $request)
 {
     $this->validate();
     $plugin =& $this->plugin;
     $this->setupTemplate($request);
     $locale = array_shift($args);
     if (!AppLocale::isLocaleValid($locale)) {
         $request->redirect(null, null, 'index');
     }
     $localeFiles = TranslatorAction::getLocaleFiles($locale);
     $changesByFile = array();
     // Arrange the list of changes to save into an array by file.
     $stack = $request->getUserVar('stack');
     while (!empty($stack)) {
         $filename = array_shift($stack);
         $key = array_shift($stack);
         $value = array_shift($stack);
         if (in_array($filename, $localeFiles)) {
             $changesByFile[$filename][$key] = $this->correctCr($value);
         }
     }
     // Save the changes file by file.
     import('lib.pkp.classes.file.EditableLocaleFile');
     foreach ($changesByFile as $filename => $changes) {
         $file = new EditableLocaleFile($locale, $filename);
         foreach ($changes as $key => $value) {
             if (empty($value)) {
                 continue;
             }
             if (!$file->update($key, $value)) {
                 $file->insert($key, $value);
             }
         }
         $file->write();
         unset($nodes);
         unset($dom);
         unset($file);
     }
     // Deal with key removals
     $deleteKeys = $request->getUserVar('deleteKey');
     if (!empty($deleteKeys)) {
         if (!is_array($deleteKeys)) {
             $deleteKeys = array($deleteKeys);
         }
         foreach ($deleteKeys as $deleteKey) {
             // FIXME Optimize!
             list($filename, $key) = explode('/', $deleteKey, 2);
             $filename = urldecode(urldecode($filename));
             if (!in_array($filename, $localeFiles)) {
                 continue;
             }
             $file = new EditableLocaleFile($locale, $filename);
             $file->delete($key);
             $file->write();
             unset($file);
         }
     }
     // Deal with email removals
     import('lib.pkp.classes.file.EditableEmailFile');
     $deleteEmails = $request->getUserVar('deleteEmail');
     if (!empty($deleteEmails)) {
         $file = new EditableEmailFile($locale, $this->getEmailTemplateFilename($locale));
         foreach ($deleteEmails as $key) {
             $file->delete($key);
         }
         $file->write();
         unset($file);
     }
     $request->redirectUrl($request->getUserVar('redirectUrl'));
 }
 /**
  * Get the (validated) filename for the current request.
  * @param $request PKPRequest
  * @return string Filename
  */
 protected function _getFilename($request)
 {
     $filename = $request->getUserVar('filename');
     if (!in_array($filename, TranslatorAction::getLocaleFiles($this->locale))) {
         fatalError('Invalid locale file specified!');
     }
     return $filename;
 }
 /**
  * Export the locale files to the browser as a tarball.
  * Requires tar (configured in config.inc.php) for operation.
  * @param $args array Parameters.
  * @param $request PKPRequest Request object.
  */
 function export($args, $request)
 {
     $locale = $request->getUserVar('locale');
     if (!AppLocale::isLocaleValid($locale)) {
         fatalError('Invalid locale.');
     }
     // Construct the tar command
     $tarBinary = Config::getVar('cli', 'tar');
     if (empty($tarBinary) || !file_exists($tarBinary)) {
         fatalError('cli.tar binary not properly configured.');
     }
     $command = $tarBinary . ' cz';
     $emailTemplateDao = DAORegistry::getDAO('EmailTemplateDAO');
     $localeFilesList = array_merge(TranslatorAction::getLocaleFiles($locale), TranslatorAction::getMiscLocaleFiles($locale), array($emailTemplateDao->getMainEmailTemplateDataFilename($locale)), array_values(TranslatorAction::getEmailFileMap($locale)));
     // Include locale files (main file and plugin files)
     foreach ($localeFilesList as $file) {
         if (file_exists($file)) {
             $command .= ' ' . escapeshellarg($file);
         }
     }
     header('Content-Type: application/x-gtar');
     header("Content-Disposition: attachment; filename=\"{$locale}.tar.gz\"");
     header('Cache-Control: private');
     // Workarounds for IE weirdness
     passthru($command);
 }