Example #1
0
    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;
 }
Example #3
0
 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);
     }
 }