function saveEmail($args, $request) { $this->validate(); $plugin =& $this->plugin; $this->setupTemplate($request); $locale = array_shift($args); if (!AppLocale::isLocaleValid($locale)) { $request->redirect(null, null, 'index'); } $emails = TranslatorAction::getEmailTemplates($locale); $referenceEmails = TranslatorAction::getEmailTemplates(MASTER_LOCALE); $emailKey = array_shift($args); $targetFilename = str_replace(MASTER_LOCALE, $locale, $referenceEmails[$emailKey]['templateDataFile']); // FIXME: Ugly. if (!in_array($emailKey, array_keys($emails))) { // If it's not a reference or translation email, bail. if (!in_array($emailKey, array_keys($referenceEmails))) { $request->redirect(null, null, 'index'); } // If it's a reference email but not a translated one, // create a blank file. FIXME: This is ugly. if (!file_exists($targetFilename)) { $dir = dirname($targetFilename); if (!file_exists($dir)) { mkdir($dir); } file_put_contents($targetFilename, '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE email_texts SYSTEM "../../../../../lib/pkp/dtd/emailTemplateData.dtd"> <!-- * emailTemplateData.xml * * Copyright (c) 2003-2013 John Willinsky * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING. * * Localized email templates XML file. * --> <email_texts locale="' . $locale . '"> </email_texts>'); } } import('lib.pkp.classes.file.EditableEmailFile'); $file = new EditableEmailFile($locale, $targetFilename); $subject = $this->correctCr($request->getUserVar('subject')); $body = $this->correctCr($request->getUserVar('body')); $description = $this->correctCr($request->getUserVar('description')); if (!$file->update($emailKey, $subject, $body, $description)) { $file->insert($emailKey, $subject, $body, $description); } $file->write(); if ($request->getUserVar('returnToCheck') == 1) { $request->redirect(null, null, 'check', $locale); } else { $request->redirect(null, null, 'edit', $locale); } }
/** * Test the emails in the supplied locale against those in the supplied * reference locale. * @param $locale string * @param $referenceLocale string * @return array List of errors */ function testEmails($locale, $referenceLocale) { $errors = array(); $emails = TranslatorAction::getEmailTemplates($locale); $referenceEmails = TranslatorAction::getEmailTemplates($referenceLocale); // Pass 1: For all translated emails, check that they match // against reference translations. foreach ($emails as $emailKey => $email) { // Check if a matching reference email was found. if (!isset($referenceEmails[$emailKey])) { $errors[EMAIL_ERROR_EXTRA_EMAIL][] = array('key' => $emailKey); continue; } // We've successfully found a matching reference email. // Compare it against the translation. $bodyParams = AppLocale::getParameterNames($email['body']); $referenceBodyParams = AppLocale::getParameterNames($referenceEmails[$emailKey]['body']); $diff = array_diff($bodyParams, $referenceBodyParams); if (!empty($diff)) { $errors[EMAIL_ERROR_DIFFERING_PARAMS][] = array('key' => $emailKey, 'mismatch' => $diff); } $subjectParams = AppLocale::getParameterNames($email['subject']); $referenceSubjectParams = AppLocale::getParameterNames($referenceEmails[$emailKey]['subject']); $diff = array_diff($subjectParams, $referenceSubjectParams); if (!empty($diff)) { $errors[EMAIL_ERROR_DIFFERING_PARAMS][] = array('key' => $emailKey, 'mismatch' => $diff); } $matchedReferenceEmails[] = $emailKey; unset($email); unset($referenceEmail); } // Pass 2: Make sure that there are no missing translations. foreach ($referenceEmails as $emailKey => $email) { // Extract the fields from the email to be tested. if (!isset($emails[$emailKey])) { $errors[EMAIL_ERROR_MISSING_EMAIL][] = array('key' => $emailKey); } } return $errors; }
function saveEmail($args) { list($plugin) = TranslatorHandler::validate(); TranslatorHandler::setupTemplate(); $locale = array_shift($args); if (!Locale::isLocaleValid($locale)) { Request::redirect(null, null, 'index'); } $emails = TranslatorAction::getEmailTemplates($locale); $referenceEmails = TranslatorAction::getEmailTemplates(MASTER_LOCALE); $emailKey = array_shift($args); if (!in_array($emailKey, array_keys($referenceEmails)) && !in_array($emailKey, array_keys($emails))) { Request::redirect(null, null, 'index'); } import('i18n.EditableEmailFile'); $file =& new EditableEmailFile($locale, Locale::getEmailTemplateFilename($locale)); $subject = TranslatorHandler::correctCr(Request::getUserVar('subject')); $body = TranslatorHandler::correctCr(Request::getUserVar('body')); $description = TranslatorHandler::correctCr(Request::getUserVar('description')); if (!$file->update($emailKey, $subject, $body, $description)) { $file->insert($emailKey, $subject, $body, $description); } $file->write(); if (Request::getUserVar('returnToCheck') == 1) { Request::redirect(null, null, 'check', $locale); } else { Request::redirect(null, null, 'edit', $locale); } }