/** * 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; }
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); }