00001 <?php
00002
00015
00016
00017
00018 require_once('TranslatorAction.inc.php');
00019
00020 ini_set('display_errors', E_ALL);
00021
00022 class TranslatorHandler extends Handler {
00023 function index() {
00024 list($plugin) = TranslatorHandler::validate();
00025 TranslatorHandler::setupTemplate(false);
00026
00027 $rangeInfo = Handler::getRangeInfo('locales');
00028
00029 $templateMgr =& TemplateManager::getManager();
00030 $templateMgr->assign('locales', new ArrayItemIterator(Locale::getAllLocales(), $rangeInfo->getPage(), $rangeInfo->getCount()));
00031 $templateMgr->assign('masterLocale', MASTER_LOCALE);
00032
00033 $templateMgr->display($plugin->getTemplatePath() . 'index.tpl');
00034 }
00035
00036 function setupTemplate($subclass = true) {
00037 $templateMgr = &TemplateManager::getManager();
00038 $pageHierarchy = array(array(Request::url(null, 'user'), 'navigation.user'), array(Request::url(null, 'admin'), 'admin.siteAdmin'));
00039 if ($subclass) $pageHierarchy[] = array(Request::url(null, 'translate'), 'plugins.generic.translator.name');
00040 $templateMgr->assign('pageHierarchy', $pageHierarchy);
00041 $templateMgr->assign('helpTopicId', 'plugins.generic.TranslatorPlugin');
00042 }
00043
00044 function edit($args) {
00045 list($plugin) = TranslatorHandler::validate();
00046 TranslatorHandler::setupTemplate();
00047
00048 $locale = array_shift($args);
00049 $file = array_shift($args);
00050
00051 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00052 $localeFiles = TranslatorAction::getLocaleFiles($locale);
00053 $miscFiles = TranslatorAction::getMiscLocaleFiles($locale);
00054 $emails = TranslatorAction::getEmailTemplates($locale);
00055
00056 $templateMgr =& TemplateManager::getManager();
00057
00058 $localeFilesRangeInfo = Handler::getRangeInfo('localeFiles');
00059 $miscFilesRangeInfo = Handler::getRangeInfo('miscFiles');
00060 $emailsRangeInfo = Handler::getRangeInfo('emails');
00061
00062 $templateMgr->assign('localeFiles', new ArrayItemIterator($localeFiles, $localeFilesRangeInfo->getPage(), $localeFilesRangeInfo->getCount()));
00063 $templateMgr->assign('miscFiles', new ArrayItemIterator($miscFiles, $miscFilesRangeInfo->getPage(), $miscFilesRangeInfo->getCount()));
00064 $templateMgr->assign('emails', new ArrayItemIterator($emails, $emailsRangeInfo->getPage(), $emailsRangeInfo->getCount()));
00065
00066 $templateMgr->assign('locale', $locale);
00067 $templateMgr->assign('masterLocale', MASTER_LOCALE);
00068
00069 $templateMgr->display($plugin->getTemplatePath() . 'locale.tpl');
00070 }
00071
00072 function check($args) {
00073 list($plugin) = TranslatorHandler::validate();
00074 TranslatorHandler::setupTemplate();
00075
00076 $locale = array_shift($args);
00077 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00078
00079 $templateMgr =& TemplateManager::getManager();
00080 $templateMgr->assign('locale', $locale);
00081 $templateMgr->assign('errors', Locale::testLocale($locale, MASTER_LOCALE));
00082 $templateMgr->assign('emailErrors', Locale::testEmails($locale, MASTER_LOCALE));
00083 $templateMgr->assign('localeFiles', TranslatorAction::getLocaleFiles($locale));
00084 $templateMgr->display($plugin->getTemplatePath() . 'errors.tpl');
00085 }
00086
00091 function export($args) {
00092 list($plugin) = TranslatorHandler::validate();
00093 TranslatorHandler::setupTemplate();
00094
00095 $locale = array_shift($args);
00096 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00097
00098 TranslatorAction::export($locale);
00099 }
00100
00101 function saveLocaleChanges($args) {
00102 list($plugin) = TranslatorHandler::validate();
00103 TranslatorHandler::setupTemplate();
00104
00105 $locale = array_shift($args);
00106 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00107
00108 $localeFiles = TranslatorAction::getLocaleFiles($locale);
00109
00110 $changesByFile = array();
00111
00112
00113 $stack = Request::getUserVar('stack');
00114 while (!empty($stack)) {
00115 $filename = array_shift($stack);
00116 $key = array_shift($stack);
00117 $value = array_shift($stack);
00118 if (in_array($filename, $localeFiles)) {
00119 $changesByFile[$filename][$key] = TranslatorHandler::correctCr($value);
00120 }
00121 }
00122
00123
00124 import('i18n.EditableLocaleFile');
00125 foreach ($changesByFile as $filename => $changes) {
00126 $file =& new EditableLocaleFile($locale, $filename);
00127 foreach ($changes as $key => $value) {
00128 if (empty($value)) continue;
00129 if (!$file->update($key, $value)) {
00130 $file->insert($key, $value);
00131 }
00132 }
00133 $file->write();
00134
00135 unset($nodes);
00136 unset($dom);
00137 unset($file);
00138 }
00139
00140
00141 $deleteKeys = Request::getUserVar('deleteKey');
00142 if (!empty($deleteKeys)) {
00143 if (!is_array($deleteKeys)) $deleteKeys = array($deleteKeys);
00144 foreach ($deleteKeys as $deleteKey) {
00145 list($filename, $key) = explode('/', $deleteKey, 2);
00146 $filename = urldecode(urldecode($filename));
00147 if (!in_array($filename, $localeFiles)) continue;
00148 $file =& new EditableLocaleFile($locale, $filename);
00149 $file->delete($key);
00150 $file->write();
00151 unset($file);
00152 }
00153 }
00154
00155
00156 import('i18n.EditableEmailFile');
00157 $deleteEmails = Request::getUserVar('deleteEmail');
00158 if (!empty($deleteEmails)) {
00159 $file =& new EditableEmailFile($locale, Locale::getEmailTemplateFilename($locale));
00160 foreach ($deleteEmails as $key) {
00161 $file->delete($key);
00162 }
00163 $file->write();
00164 unset($file);
00165 }
00166
00167 Request::redirectUrl(Request::getUserVar('redirectUrl'));
00168 }
00169
00170 function downloadLocaleFile($args) {
00171 list($plugin) = TranslatorHandler::validate();
00172 TranslatorHandler::setupTemplate();
00173
00174 $locale = array_shift($args);
00175 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00176
00177 $filename = urldecode(urldecode(array_shift($args)));
00178 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00179 Request::redirect(null, null, 'edit', $locale);
00180 }
00181
00182 header('Content-Type: application/xml');
00183 header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
00184 header('Cache-Control: private');
00185 readfile($filename);
00186 }
00187
00188 function editLocaleFile($args) {
00189 list($plugin) = TranslatorHandler::validate();
00190 TranslatorHandler::setupTemplate();
00191
00192 $locale = array_shift($args);
00193 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00194
00195 $filename = urldecode(urldecode(array_shift($args)));
00196 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00197 Request::redirect(null, null, 'edit', $locale);
00198 }
00199
00200 $templateMgr =& TemplateManager::getManager();
00201
00202
00203 import('i18n.EditableLocaleFile');
00204 $localeContentsRangeInfo = Handler::getRangeInfo('localeContents');
00205 $localeContents = EditableLocaleFile::load($filename);
00206
00207
00208 $searchKey = Request::getUserVar('searchKey');
00209 $found = false;
00210 $index = 0;
00211 $pageIndex = 0;
00212 if (!empty($searchKey)) foreach ($localeContents as $key => $value) {
00213 if ($index % $localeContentsRangeInfo->getCount() == 0) $pageIndex++;
00214 if ($key == $searchKey) {
00215 $found = true;
00216 break;
00217 }
00218 $index++;
00219 }
00220
00221 if ($found) {
00222 $localeContentsRangeInfo->setPage($pageIndex);
00223 $templateMgr->assign('searchKey', $searchKey);
00224 }
00225
00226
00227 $templateMgr->assign('filename', $filename);
00228 $templateMgr->assign('locale', $locale);
00229 $templateMgr->assign_by_ref('localeContents', new ArrayItemIterator($localeContents, $localeContentsRangeInfo->getPage(), $localeContentsRangeInfo->getCount()));
00230 $templateMgr->assign('referenceLocaleContents', EditableLocaleFile::load(TranslatorAction::determineReferenceFilename($locale, $filename)));
00231
00232 $templateMgr->display($plugin->getTemplatePath() . 'localeFile.tpl');
00233 }
00234
00235 function editMiscFile($args) {
00236 list($plugin) = TranslatorHandler::validate();
00237 TranslatorHandler::setupTemplate();
00238
00239 $locale = array_shift($args);
00240 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00241
00242 $filename = urldecode(urldecode(array_shift($args)));
00243 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00244 Request::redirect(null, null, 'edit', $locale);
00245 }
00246 $referenceFilename = TranslatorAction::determineReferenceFilename($locale, $filename);
00247 $templateMgr =& TemplateManager::getManager();
00248
00249 $templateMgr->assign('locale', $locale);
00250 $templateMgr->assign('filename', $filename);
00251 $templateMgr->assign('referenceContents', file_get_contents($referenceFilename));
00252 $templateMgr->assign('translationContents', file_exists($filename)?file_get_contents($filename):'');
00253 $templateMgr->display($plugin->getTemplatePath() . 'editMiscFile.tpl');
00254 }
00255
00256 function saveLocaleFile($args) {
00257 list($plugin) = TranslatorHandler::validate();
00258 TranslatorHandler::setupTemplate();
00259
00260 $locale = array_shift($args);
00261 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00262
00263 $filename = urldecode(urldecode(array_shift($args)));
00264 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00265 Request::redirect(null, null, 'edit', $locale);
00266 }
00267
00268 import('i18n.EditableLocaleFile');
00269 $changes = Request::getUserVar('changes');
00270 $file =& new EditableLocaleFile($locale, $filename);
00271
00272 while (!empty($changes)) {
00273 $key = array_shift($changes);
00274 $value = TranslatorHandler::correctCr(array_shift($changes));
00275 if (!$file->update($key, $value)) {
00276 $file->insert($key, $value);
00277 }
00278 }
00279 $file->write();
00280 Request::redirectUrl(Request::getUserVar('redirectUrl'));
00281 }
00282
00283 function deleteLocaleKey($args) {
00284 list($plugin) = TranslatorHandler::validate();
00285 TranslatorHandler::setupTemplate();
00286
00287 $locale = array_shift($args);
00288 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00289
00290 $filename = urldecode(urldecode(array_shift($args)));
00291 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00292 Request::redirect(null, null, 'edit', $locale);
00293 }
00294
00295 $changes = Request::getUserVar('changes');
00296 $file =& new EditableLocaleFile($locale, $filename);
00297
00298 if ($file->delete(array_shift($args))) $file->write();
00299 Request::redirect(null, null, 'editLocaleFile', array($locale, urlencode(urlencode($filename))));
00300 }
00301
00302 function saveMiscFile($args) {
00303 list($plugin) = TranslatorHandler::validate();
00304 TranslatorHandler::setupTemplate();
00305
00306 $locale = array_shift($args);
00307 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00308
00309 $filename = urldecode(urldecode(array_shift($args)));
00310 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00311 Request::redirect(null, null, 'edit', $locale);
00312 }
00313
00314 $fp = fopen($filename, 'w+');
00315 if ($fp) {
00316 $contents = TranslatorHandler::correctCr(Request::getUserVar('translationContents'));
00317 fwrite ($fp, $contents);
00318 fclose($fp);
00319 }
00320 Request::redirect(null, null, 'edit', $locale);
00321 }
00322
00323 function editEmail($args) {
00324 list($plugin) = TranslatorHandler::validate();
00325 TranslatorHandler::setupTemplate();
00326
00327 $locale = array_shift($args);
00328 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00329
00330 $emails = TranslatorAction::getEmailTemplates($locale);
00331 $referenceEmails = TranslatorAction::getEmailTemplates(MASTER_LOCALE);
00332 $emailKey = array_shift($args);
00333
00334 if (!in_array($emailKey, array_keys($referenceEmails)) && !in_array($emailKey, array_keys($emails))) Request::redirect(null, null, 'index');
00335
00336 $templateMgr =& TemplateManager::getManager();
00337 $templateMgr->assign('emailKey', $emailKey);
00338 $templateMgr->assign('locale', $locale);
00339 $templateMgr->assign('email', isset($emails[$emailKey])?$emails[$emailKey]:'');
00340 $templateMgr->assign('returnToCheck', Request::getUserVar('returnToCheck'));
00341 $templateMgr->assign('referenceEmail', isset($referenceEmails[$emailKey])?$referenceEmails[$emailKey]:'');
00342 $templateMgr->display($plugin->getTemplatePath() . 'editEmail.tpl');
00343 }
00344
00345 function createFile($args) {
00346 list($plugin) = TranslatorHandler::validate();
00347 TranslatorHandler::setupTemplate();
00348
00349 $locale = array_shift($args);
00350 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00351
00352 $filename = urldecode(urldecode(array_shift($args)));
00353 if (!TranslatorAction::isLocaleFile($locale, $filename)) {
00354 Request::redirect(null, null, 'edit', $locale);
00355 }
00356
00357 import('file.FileManager');
00358 FileManager::copyFile(TranslatorAction::determineReferenceFilename($locale, $filename), $filename);
00359 Request::redirectUrl(Request::getUserVar('redirectUrl'));
00360 }
00361
00362 function deleteEmail($args) {
00363 list($plugin) = TranslatorHandler::validate();
00364 TranslatorHandler::setupTemplate();
00365
00366 $locale = array_shift($args);
00367 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00368
00369 $emails = TranslatorAction::getEmailTemplates($locale);
00370 $referenceEmails = TranslatorAction::getEmailTemplates(MASTER_LOCALE);
00371 $emailKey = array_shift($args);
00372
00373 if (!in_array($emailKey, array_keys($emails))) Request::redirect(null, null, 'index');
00374
00375 import('i18n.EditableEmailFile');
00376 $file =& new EditableEmailFile($locale, Locale::getEmailTemplateFilename($locale));
00377
00378 $subject = Request::getUserVar('subject');
00379 $body = Request::getUserVar('body');
00380 $description = Request::getUserVar('description');
00381
00382 if ($file->delete($emailKey)) $file->write();
00383 Request::redirect(null, null, 'edit', $locale, null, 'emails');
00384 }
00385
00386 function saveEmail($args) {
00387 list($plugin) = TranslatorHandler::validate();
00388 TranslatorHandler::setupTemplate();
00389
00390 $locale = array_shift($args);
00391 if (!Locale::isLocaleValid($locale)) Request::redirect(null, null, 'index');
00392
00393 $emails = TranslatorAction::getEmailTemplates($locale);
00394 $referenceEmails = TranslatorAction::getEmailTemplates(MASTER_LOCALE);
00395 $emailKey = array_shift($args);
00396
00397 if (!in_array($emailKey, array_keys($referenceEmails)) && !in_array($emailKey, array_keys($emails))) Request::redirect(null, null, 'index');
00398
00399 import('i18n.EditableEmailFile');
00400 $file =& new EditableEmailFile($locale, Locale::getEmailTemplateFilename($locale));
00401
00402 $subject = TranslatorHandler::correctCr(Request::getUserVar('subject'));
00403 $body = TranslatorHandler::correctCr(Request::getUserVar('body'));
00404 $description = TranslatorHandler::correctCr(Request::getUserVar('description'));
00405
00406 if (!$file->update($emailKey, $subject, $body, $description))
00407 $file->insert($emailKey, $subject, $body, $description);
00408
00409 $file->write();
00410 if (Request::getUserVar('returnToCheck')==1) Request::redirect(null, null, 'check', $locale);
00411 else Request::redirect(null, null, 'edit', $locale);
00412 }
00413
00414 function validate() {
00415 if (!Validation::isSiteAdmin()) {
00416 Validation::redirectLogin();
00417 }
00418 $plugin =& Registry::get('plugin');
00419 return array(&$plugin);
00420 }
00421
00422 function correctCr($value) {
00423 return str_replace("\r\n", "\n", $value);
00424 }
00425 }
00426 ?>