17 import(
'lib.pkp.classes.mail.EmailTemplate');
18 import(
'lib.pkp.classes.db.SchemaDAO');
19 import(
'classes.core.Services');
38 'contextId' =>
'context_id',
39 'enabled' =>
'enabled',
40 'canDisable' =>
'can_disable',
41 'canEdit' =>
'can_edit',
42 'fromRoleId' =>
'from_role_id',
43 'toRoleId' =>
'to_role_id',
44 'stageId' =>
'stage_id',
61 $partialObject = clone $object;
62 unset($partialObject->_data[
'canDisable']);
63 unset($partialObject->_data[
'canEdit']);
64 unset($partialObject->_data[
'description']);
65 unset($partialObject->_data[
'fromRoleId']);
66 unset($partialObject->_data[
'toRoleId']);
67 unset($partialObject->_data[
'stageId']);
69 parent::insertObject($partialObject);
79 $partialObject = clone $object;
80 unset($partialObject->_data[
'canDisable']);
81 unset($partialObject->_data[
'canEdit']);
82 unset($partialObject->_data[
'description']);
83 unset($partialObject->_data[
'fromRoleId']);
84 unset($partialObject->_data[
'toRoleId']);
85 unset($partialObject->_data[
'stageId']);
87 parent::updateObject($partialObject);
96 public function _fromRow($primaryRow) {
97 $emailTemplate = parent::_fromRow($primaryRow);
101 "SELECT * FROM email_templates_default_data WHERE email_key = ?",
102 [$emailTemplate->getData(
'key')]
104 $props = [
'subject',
'body',
'description'];
105 while (!$result->EOF) {
106 $settingRow = $result->getRowAssoc(
false);
107 foreach ($props as $prop) {
109 if ($emailTemplate->getData($prop, $settingRow[
'locale'])) {
112 $emailTemplate->setData(
116 $schema->properties->{$prop}->type
118 $settingRow[
'locale']
125 return $emailTemplate;
132 function deleteEmailTemplatesByLocale($locale) {
134 'DELETE FROM email_templates_settings WHERE locale = ?', $locale
142 function deleteDefaultEmailTemplatesByLocale($locale) {
144 'DELETE FROM email_templates_default_data WHERE locale = ?', $locale
155 function defaultTemplateIsInstalled($key) {
156 $result = $this->retrieve(
158 FROM email_templates_default
159 WHERE email_key = ?',
162 $returner = isset($result->fields[0]) && $result->fields[0] != 0;
171 function getMainEmailTemplatesFilename() {
172 return 'registry/emailTemplates.xml';
189 function installEmailTemplates($templatesFile, $locales = array(), $returnSql =
false, $emailKey =
null, $skipExisting =
false) {
192 $data = $xmlDao->parseStruct($templatesFile, array(
'email'));
193 if (!isset($data[
'email']))
return false;
194 foreach ($data[
'email'] as $entry) {
195 $attrs = $entry[
'attributes'];
196 if ($emailKey && $emailKey != $attrs[
'key'])
continue;
197 if ($skipExisting && $this->defaultTemplateIsInstalled($attrs[
'key']))
continue;
198 $dataSource = $this->getDataSource();
199 $sql[] =
'DELETE FROM email_templates_default WHERE email_key = ' . $dataSource->qstr($attrs[
'key']);
201 $this->update(array_shift($sql));
203 $sql[] =
'INSERT INTO email_templates_default
204 (email_key, can_disable, can_edit, from_role_id, to_role_id, stage_id)
207 $dataSource->qstr($attrs[
'key']) .
', ' .
208 ($attrs[
'can_disable']?1:0) .
', ' .
209 ($attrs[
'can_edit']?1:0) .
', ' .
210 (isset($attrs[
'from_role_id'])?((int) $attrs[
'from_role_id']):
'null') .
', ' .
211 (isset($attrs[
'to_role_id'])?((int) $attrs[
'to_role_id']):
'null') .
', ' .
212 (isset($attrs[
'stage_id'])?((int) $attrs[
'stage_id']):
'null') .
215 $this->update(array_shift($sql));
219 $additionalQueries = $this->installEmailTemplateLocaleData($templatesFile, $locales, $returnSql, $attrs[
'key']);
220 if ($returnSql) $sql = array_merge($sql, $additionalQueries);
222 if ($returnSql)
return $sql;
238 function installEmailTemplateLocaleData($templatesFile, $locales = array(), $returnSql =
false, $emailKey =
null) {
241 $data = $xmlDao->parseStruct($templatesFile, array(
'email'));
242 if (!isset($data[
'email']))
return false;
243 $dataSource = $this->getDataSource();
244 foreach ($data[
'email'] as $entry) {
245 $attrs = $entry[
'attributes'];
246 if ($emailKey && $emailKey != $attrs[
'key'])
continue;
248 $subject = $attrs[
'subject']??
null;
249 $body = $attrs[
'body']??
null;
250 $description = $attrs[
'description']??
null;
251 if ($subject && $body)
foreach ($locales as $locale) {
252 $sql[] =
'DELETE FROM email_templates_default_data WHERE email_key = ' . $dataSource->qstr($attrs[
'key']) .
' AND locale = ' . $dataSource->qstr($locale);
254 $this->update(array_shift($sql));
257 $keyNotFoundHandler =
function($key) {
260 $translatedSubject = __($subject, [], $locale, $keyNotFoundHandler);
261 $translatedBody = __($body, [], $locale, $keyNotFoundHandler);
262 if ($translatedSubject !==
null && $translatedBody !==
null) {
263 $sql[] =
'INSERT INTO email_templates_default_data
264 (email_key, locale, subject, body, description)
267 $dataSource->qstr($attrs[
'key']) .
', ' .
268 $dataSource->qstr($locale) .
', ' .
269 $dataSource->qstr($translatedSubject) .
', ' .
270 $dataSource->qstr($translatedBody) .
', ' .
271 $dataSource->qstr(__($description, [], $locale)) .
274 $this->update(array_shift($sql));
279 if ($returnSql)
return $sql;
296 function installEmailTemplateData($templateDataFile, $locale, $returnSql =
false, $emailKey =
null) {
299 $data = $xmlDao->parse($templateDataFile, array(
'email_texts',
'email_text',
'subject',
'body',
'description'));
300 if (!$data)
return false;
302 foreach ($data->getChildren() as $emailNode) {
303 $subject = $emailNode->getChildValue(
'subject');
304 $body = $emailNode->getChildValue(
'body');
305 $description = $emailNode->getChildValue(
'description');
308 foreach (array(&$subject, &$body, &$description) as &$var) {
309 $var = preg_replace_callback(
'{{translate key="([^"]+)"}}',
function($matches) {
310 return __($matches[1], array(), $locale);
314 if ($emailKey && $emailKey != $emailNode->getAttribute(
'key'))
continue;
315 $dataSource = $this->getDataSource();
316 $sql[] =
'DELETE FROM email_templates_default_data WHERE email_key = ' . $dataSource->qstr($emailNode->getAttribute(
'key')) .
' AND locale = ' . $dataSource->qstr($locale);
318 $this->update(array_shift($sql));
321 $sql[] =
'INSERT INTO email_templates_default_data
322 (email_key, locale, subject, body, description)
325 $dataSource->qstr($emailNode->getAttribute(
'key')) .
', ' .
326 $dataSource->qstr($locale) .
', ' .
327 $dataSource->qstr($subject) .
', ' .
328 $dataSource->qstr($body) .
', ' .
329 $dataSource->qstr($description) .
332 $this->update(array_shift($sql));
335 if ($returnSql)
return $sql;