/** * Parse an XML file and return data in an array. * @see xml.XMLParser::parseStruct() */ function &parseStruct($file, $tagsToMatch = array()) { $parser = new XMLParser(); $data =& $parser->parseStruct($file, $tagsToMatch); $parser->destroy(); return $data; }
/** * Save a custom email template file * @param $filePath string * @param $journalId int * @return boolean */ function _saveEmailTemplates($filePath, $journal) { $this->validate(); import('lib.pkp.classes.xml.XMLParser'); $emailTemplateDao = DAORegistry::getDAO('EmailTemplateDAO'); $xmlParser = new XMLParser(); $struct = $xmlParser->parseStruct($filePath); $locale = $struct['email_texts'][0]['attributes']['locale']; $emailTexts = $struct['email_text']; $subjects = $struct['subject']; $bodies = $struct['body']; // check if the parsed xml has the correct structure if (!$emailTexts || !$subjects || !$bodies) { return false; } $nodeSizes = array(count($emailTexts), count($subjects), count($bodies)); if (count(array_unique($nodeSizes)) > 1) { return false; } $journalId = $journal->getId(); $supportedLocales = $journal->getSupportedLocaleNames(); foreach ($emailTexts as $index => $emailText) { $emailKey = $emailText['attributes']['key']; $subject = $subjects[$index]['value']; $body = $bodies[$index]['value']; $emailTemplate = $emailTemplateDao->getLocaleEmailTemplate($emailKey, $journalId); $emailTemplateLocaleData = $emailTemplate->localeData; // just update supported locales foreach ($emailTemplateLocaleData as $emailTemplateLocale => $data) { if (!isset($supportedLocales[$emailTemplateLocale])) { unset($emailTemplateLocaleData[$emailTemplateLocale]); } } $emailTemplate->localeData = $emailTemplateLocaleData; $emailTemplate->setAssocType(ASSOC_TYPE_JOURNAL); $emailTemplate->setAssocId($journalId); if ($emailTemplate->getCanDisable()) { $emailTemplate->setEnabled($emailTemplate->getData('enabled')); } $emailTemplate->setSubject($locale, $subject); $emailTemplate->setBody($locale, $body); if ($emailTemplate->getEmailId() != null) { $emailTemplateDao->updateLocaleEmailTemplate($emailTemplate); } else { $emailTemplateDao->insertLocaleEmailTemplate($emailTemplate); } } return true; }