00001 <?php
00002
00016
00017
00018
00019 import('mail.EmailTemplate');
00020
00021 class EmailTemplateDAO extends DAO {
00028 function &getBaseEmailTemplate($emailKey, $journalId) {
00029 $result = &$this->retrieve(
00030 'SELECT d.email_key,
00031 d.can_edit,
00032 d.can_disable,
00033 COALESCE(e.enabled, 1) AS enabled,
00034 e.email_id,
00035 e.journal_id,
00036 d.from_role_id,
00037 d.to_role_id
00038 FROM email_templates_default d
00039 LEFT JOIN email_templates e ON (d.email_key = e.email_key AND e.journal_id = ?)
00040 WHERE d.email_key = ?',
00041 array($journalId, $emailKey)
00042 );
00043
00044 $returner = null;
00045 if ($result->RecordCount() != 0) {
00046 $returner = &$this->_returnBaseEmailTemplateFromRow($result->GetRowAssoc(false));
00047 }
00048
00049 $result->Close();
00050 unset($result);
00051
00052 return $returner;
00053 }
00054
00061 function &getLocaleEmailTemplate($emailKey, $journalId) {
00062 $result = &$this->retrieve(
00063 'SELECT d.email_key,
00064 d.can_edit,
00065 d.can_disable,
00066 COALESCE(e.enabled, 1) AS enabled,
00067 e.email_id,
00068 e.journal_id,
00069 d.from_role_id,
00070 d.to_role_id
00071 FROM email_templates_default d
00072 LEFT JOIN email_templates e ON (d.email_key = e.email_key AND e.journal_id = ?)
00073 WHERE d.email_key = ?',
00074 array($journalId, $emailKey)
00075 );
00076
00077 $returner = null;
00078 if ($result->RecordCount() != 0) {
00079 $returner = &$this->_returnLocaleEmailTemplateFromRow($result->GetRowAssoc(false));
00080 } else {
00081 $result->Close();
00082 unset($result);
00083
00084
00085
00086 $result = &$this->retrieve(
00087 'SELECT e.email_key,
00088 1 AS can_edit,
00089 1 AS can_disable,
00090 e.enabled,
00091 e.email_id,
00092 e.journal_id,
00093 NULL AS from_role_id,
00094 NULL AS to_role_id
00095 FROM email_templates e
00096 LEFT JOIN email_templates_default d ON (e.email_key = d.email_key)
00097 WHERE d.email_key IS NULL AND
00098 e.journal_id = ? AND
00099 e.email_key = ?',
00100 array($journalId, $emailKey)
00101 );
00102 if ($result->RecordCount() != 0) {
00103 $returner = &$this->_returnLocaleEmailTemplateFromRow($result->GetRowAssoc(false));
00104 }
00105 }
00106
00107 $result->Close();
00108 unset($result);
00109
00110 return $returner;
00111 }
00112
00120 function &getEmailTemplate($emailKey, $locale, $journalId) {
00121 $result = &$this->retrieve(
00122 'SELECT COALESCE(ed.subject, dd.subject) AS subject,
00123 COALESCE(ed.body, dd.body) AS body,
00124 COALESCE(e.enabled, 1) AS enabled,
00125 d.email_key, d.can_edit, d.can_disable,
00126 e.journal_id, e.email_id,
00127 dd.locale,
00128 d.from_role_id, d.to_role_id
00129 FROM email_templates_default d
00130 LEFT JOIN email_templates_default_data dd ON (dd.email_key = d.email_key)
00131 LEFT JOIN email_templates e ON (d.email_key = e.email_key AND e.journal_id = ?)
00132 LEFT JOIN email_templates_data ed ON (ed.email_key = e.email_key AND ed.journal_id = e.journal_id AND ed.locale = dd.locale)
00133 WHERE d.email_key = ? AND
00134 dd.locale = ?',
00135 array($journalId, $emailKey, $locale)
00136 );
00137
00138 $returner = null;
00139 if ($result->RecordCount() != 0) {
00140 $returner = &$this->_returnEmailTemplateFromRow($result->GetRowAssoc(false));
00141 $returner->setCustomTemplate(false);
00142 } else {
00143 $result->Close();
00144 unset($result);
00145
00146
00147
00148 $result = &$this->retrieve(
00149 'SELECT ed.subject,
00150 ed.body,
00151 1 AS enabled,
00152 e.email_key,
00153 1 AS can_edit,
00154 0 AS can_disable,
00155 e.journal_id,
00156 e.email_id,
00157 ed.locale,
00158 NULL AS from_role_id,
00159 NULL AS to_role_id
00160 FROM email_templates e
00161 LEFT JOIN email_templates_data ed ON (ed.email_key = e.email_key AND ed.journal_id = e.journal_id)
00162 LEFT JOIN email_templates_default d ON (e.email_key = d.email_key)
00163 WHERE d.email_key IS NULL AND
00164 e.journal_id = ? AND
00165 e.email_key = ? AND
00166 ed.locale = ?',
00167 array($journalId, $emailKey, $locale)
00168 );
00169 if ($result->RecordCount() != 0) {
00170 $returner = &$this->_returnEmailTemplateFromRow($result->GetRowAssoc(false));
00171 $returner->setCustomTemplate(true);
00172 }
00173 }
00174
00175 $result->Close();
00176 unset($result);
00177
00178 return $returner;
00179 }
00180
00186 function &_returnBaseEmailTemplateFromRow(&$row) {
00187 $emailTemplate = &new BaseEmailTemplate();
00188 $emailTemplate->setEmailId($row['email_id']);
00189 $emailTemplate->setJournalId($row['journal_id']);
00190 $emailTemplate->setEmailKey($row['email_key']);
00191 $emailTemplate->setEnabled($row['enabled'] == null ? 1 : $row['enabled']);
00192 $emailTemplate->setCanDisable($row['can_disable']);
00193 $emailTemplate->setFromRoleId($row['from_role_id']);
00194 $emailTemplate->setToRoleId($row['to_role_id']);
00195
00196 HookRegistry::call('EmailTemplateDAO::_returnBaseEmailTemplateFromRow', array(&$emailTemplate, &$row));
00197
00198 return $emailTemplate;
00199 }
00200
00206 function &_returnLocaleEmailTemplateFromRow(&$row) {
00207 $emailTemplate = &new LocaleEmailTemplate();
00208 $emailTemplate->setEmailId($row['email_id']);
00209 $emailTemplate->setJournalId($row['journal_id']);
00210 $emailTemplate->setEmailKey($row['email_key']);
00211 $emailTemplate->setEnabled($row['enabled'] == null ? 1 : $row['enabled']);
00212 $emailTemplate->setCanDisable($row['can_disable']);
00213 $emailTemplate->setFromRoleId($row['from_role_id']);
00214 $emailTemplate->setToRoleId($row['to_role_id']);
00215
00216 $emailTemplate->setCustomTemplate(false);
00217
00218 if (!HookRegistry::call('EmailTemplateDAO::_returnLocaleEmailTemplateFromRow', array(&$emailTemplate, &$row))) {
00219 $result = &$this->retrieve(
00220 'SELECT dd.locale,
00221 dd.description,
00222 COALESCE(ed.subject, dd.subject) AS subject,
00223 COALESCE(ed.body, dd.body) AS body
00224 FROM email_templates_default_data dd
00225 LEFT JOIN email_templates_data ed ON (dd.email_key = ed.email_key AND dd.locale = ed.locale AND ed.journal_id = ?)
00226 WHERE dd.email_key = ?',
00227 array($row['journal_id'], $row['email_key'])
00228 );
00229
00230 while (!$result->EOF) {
00231 $dataRow = &$result->GetRowAssoc(false);
00232 $emailTemplate->addLocale($dataRow['locale']);
00233 $emailTemplate->setSubject($dataRow['locale'], $dataRow['subject']);
00234 $emailTemplate->setBody($dataRow['locale'], $dataRow['body']);
00235 $emailTemplate->setDescription($dataRow['locale'], $dataRow['description']);
00236 $result->MoveNext();
00237 }
00238 $result->Close();
00239 unset($result);
00240
00241
00242
00243 $result = &$this->retrieve(
00244 'SELECT ed.locale,
00245 ed.subject,
00246 ed.body
00247 FROM email_templates_data ed
00248 LEFT JOIN email_templates_default_data dd ON (ed.email_key = dd.email_key AND dd.locale = ed.locale)
00249 WHERE ed.journal_id = ? AND
00250 ed.email_key = ? AND
00251 dd.email_key IS NULL',
00252 array($row['journal_id'], $row['email_key'])
00253 );
00254
00255 while (!$result->EOF) {
00256 $dataRow = &$result->GetRowAssoc(false);
00257 $emailTemplate->addLocale($dataRow['locale']);
00258 $emailTemplate->setSubject($dataRow['locale'], $dataRow['subject']);
00259 $emailTemplate->setBody($dataRow['locale'], $dataRow['body']);
00260 $result->MoveNext();
00261
00262 $emailTemplate->setCustomTemplate(true);
00263 }
00264
00265 $result->Close();
00266 unset($result);
00267 }
00268
00269 return $emailTemplate;
00270 }
00271
00277 function &_returnEmailTemplateFromRow(&$row, $isCustomTemplate=null) {
00278 $emailTemplate = &new EmailTemplate();
00279 $emailTemplate->setEmailId($row['email_id']);
00280 $emailTemplate->setJournalId($row['journal_id']);
00281 $emailTemplate->setEmailKey($row['email_key']);
00282 $emailTemplate->setLocale($row['locale']);
00283 $emailTemplate->setSubject($row['subject']);
00284 $emailTemplate->setBody($row['body']);
00285 $emailTemplate->setEnabled($row['enabled'] == null ? 1 : $row['enabled']);
00286 $emailTemplate->setCanDisable($row['can_disable']);
00287 $emailTemplate->setFromRoleId($row['from_role_id']);
00288 $emailTemplate->setToRoleId($row['to_role_id']);
00289
00290 if ($isCustomTemplate !== null) {
00291 $emailTemplate->setCustomTemplate($isCustomTemplate);
00292 }
00293
00294 HookRegistry::call('EmailTemplateDAO::_returnEmailTemplateFromRow', array(&$emailTemplate, &$row));
00295
00296 return $emailTemplate;
00297 }
00298
00303 function insertBaseEmailTemplate(&$emailTemplate) {
00304 return $this->update(
00305 'INSERT INTO email_templates
00306 (journal_id, email_key, enabled)
00307 VALUES
00308 (?, ?, ?)',
00309 array(
00310 $emailTemplate->getJournalId(),
00311 $emailTemplate->getEmailKey(),
00312 $emailTemplate->getEnabled() == null ? 0 : 1
00313 )
00314 );
00315 $emailTemplate->setEmailId($this->getInsertEmailId());
00316 return $emailTemplate->getEmailId();
00317 }
00318
00323 function updateBaseEmailTemplate(&$emailTemplate) {
00324 return $this->update(
00325 'UPDATE email_templates
00326 SET enabled = ?
00327 WHERE email_id = ?',
00328 array(
00329 $emailTemplate->getEnabled() == null ? 0 : 1,
00330 $emailTemplate->getEmailId()
00331 )
00332 );
00333 }
00334
00339 function insertLocaleEmailTemplate(&$emailTemplate) {
00340 $this->insertBaseEmailTemplate($emailTemplate);
00341 return $this->updateLocaleEmailTemplateData($emailTemplate);
00342 }
00343
00348 function updateLocaleEmailTemplate(&$emailTemplate) {
00349 $this->updateBaseEmailTemplate($emailTemplate);
00350 return $this->updateLocaleEmailTemplateData($emailTemplate);
00351 }
00352
00357 function updateLocaleEmailTemplateData(&$emailTemplate) {
00358 foreach ($emailTemplate->getLocales() as $locale) {
00359 $result = &$this->retrieve(
00360 'SELECT COUNT(*)
00361 FROM email_templates_data
00362 WHERE email_key = ? AND
00363 locale = ? AND
00364 journal_id = ?',
00365 array($emailTemplate->getEmailKey(), $locale, $emailTemplate->getJournalId())
00366 );
00367
00368 if ($result->fields[0] == 0) {
00369 $this->update(
00370 'INSERT INTO email_templates_data
00371 (email_key, locale, journal_id, subject, body)
00372 VALUES
00373 (?, ?, ?, ?, ?)',
00374 array($emailTemplate->getEmailKey(), $locale, $emailTemplate->getJournalId(), $emailTemplate->getSubject($locale), $emailTemplate->getBody($locale))
00375 );
00376
00377 } else {
00378 $this->update(
00379 'UPDATE email_templates_data
00380 SET subject = ?,
00381 body = ?
00382 WHERE email_key = ? AND
00383 locale = ? AND
00384 journal_id = ?',
00385 array($emailTemplate->getSubject($locale), $emailTemplate->getBody($locale), $emailTemplate->getEmailKey(), $locale, $emailTemplate->getJournalId())
00386 );
00387 }
00388
00389 $result->Close();
00390 unset($result);
00391 }
00392 }
00393
00399 function deleteEmailTemplateByKey($emailKey, $journalId) {
00400 $this->update(
00401 'DELETE FROM email_templates_data WHERE email_key = ? AND journal_id = ?',
00402 array($emailKey, $journalId)
00403 );
00404 return $this->update(
00405 'DELETE FROM email_templates WHERE email_key = ? AND journal_id = ?',
00406 array($emailKey, $journalId)
00407 );
00408 }
00409
00417 function &getEmailTemplates($locale, $journalId, $rangeInfo = null) {
00418 $emailTemplates = array();
00419
00420 $result = &$this->retrieveRange(
00421 'SELECT COALESCE(ed.subject, dd.subject) AS subject,
00422 COALESCE(ed.body, dd.body) AS body,
00423 COALESCE(e.enabled, 1) AS enabled,
00424 d.email_key, d.can_edit, d.can_disable,
00425 e.journal_id, e.email_id,
00426 dd.locale,
00427 d.from_role_id, d.to_role_id
00428 FROM email_templates_default d
00429 LEFT JOIN email_templates_default_data dd ON (dd.email_key = d.email_key)
00430 LEFT JOIN email_templates e ON (d.email_key = e.email_key AND e.journal_id = ?)
00431 LEFT JOIN email_templates_data ed ON (ed.email_key = e.email_key AND ed.journal_id = e.journal_id AND ed.locale = dd.locale)
00432 WHERE dd.locale = ?',
00433 array($journalId, $locale),
00434 $rangeInfo
00435 );
00436
00437 while (!$result->EOF) {
00438 $emailTemplates[] = &$this->_returnEmailTemplateFromRow($result->GetRowAssoc(false), false);
00439 $result->moveNext();
00440 }
00441 $result->Close();
00442 unset($result);
00443
00444
00445
00446 $result = &$this->retrieve(
00447 'SELECT ed.subject,
00448 ed.body,
00449 e.enabled,
00450 e.email_key,
00451 1 AS can_edit,
00452 1 AS can_disable,
00453 e.journal_id,
00454 e.email_id,
00455 ed.locale,
00456 NULL AS from_role_id,
00457 NULL AS to_role_id
00458 FROM email_templates e
00459 LEFT JOIN email_templates_data ed ON (e.email_key = ed.email_key AND ed.journal_id = e.journal_id AND ed.locale = ?)
00460 LEFT JOIN email_templates_default d ON (e.email_key = d.email_key)
00461 WHERE e.journal_id = ? AND
00462 d.email_key IS NULL',
00463 array($locale, $journalId)
00464 );
00465
00466 while (!$result->EOF) {
00467 $row = $result->getRowAssoc(false);
00468 $emailTemplates[] = &$this->_returnEmailTemplateFromRow($result->GetRowAssoc(false), true);
00469 $result->moveNext();
00470 }
00471 $result->Close();
00472 unset($result);
00473
00474
00475 $compare = create_function('$t1, $t2', 'return strcmp($t1->getEmailKey(), $t2->getEmailKey());');
00476 usort ($emailTemplates, $compare);
00477
00478 return $emailTemplates;
00479 }
00480
00485 function getInsertEmailId() {
00486 return $this->getInsertId('email_templates', 'emailId');
00487 }
00488
00493 function deleteEmailTemplatesByJournal($journalId) {
00494 $this->update(
00495 'DELETE FROM email_templates_data WHERE journal_id = ?', $journalId
00496 );
00497 return $this->update(
00498 'DELETE FROM email_templates WHERE journal_id = ?', $journalId
00499 );
00500 }
00501
00506 function deleteEmailTemplatesByLocale($locale) {
00507 $this->update(
00508 'DELETE FROM email_templates_data WHERE locale = ?', $locale
00509 );
00510 }
00511
00516 function deleteDefaultEmailTemplatesByLocale($locale) {
00517 $this->update(
00518 'DELETE FROM email_templates_default_data WHERE locale = ?', $locale
00519 );
00520 }
00521
00528 function templateExistsByKey($emailKey, $journalId) {
00529 $result = &$this->retrieve(
00530 'SELECT COUNT(*)
00531 FROM email_templates
00532 WHERE email_key = ? AND
00533 journal_id = ?',
00534 array(
00535 $emailKey,
00536 $journalId
00537 )
00538 );
00539 if (isset($result->fields[0]) && $result->fields[0] != 0) {
00540 $result->Close();
00541 unset($result);
00542 return true;
00543 }
00544
00545 $result->Close();
00546 unset($result);
00547
00548 $result = &$this->retrieve(
00549 'SELECT COUNT(*)
00550 FROM email_templates_default
00551 WHERE email_key = ?',
00552 $emailKey
00553 );
00554 if (isset($result->fields[0]) && $result->fields[0] != 0) {
00555 $returner = true;
00556 } else {
00557 $returner = false;
00558 }
00559
00560 $result->Close();
00561 unset($result);
00562
00563 return $returner;
00564 }
00565
00572 function customTemplateExistsByKey($emailKey, $journalId) {
00573 $result = &$this->retrieve(
00574 'SELECT COUNT(*)
00575 FROM email_templates e
00576 LEFT JOIN email_templates_default d ON (e.email_key = d.email_key)
00577 WHERE e.email_key = ? AND
00578 d.email_key IS NULL AND
00579 e.journal_id = ?',
00580 array(
00581 $emailKey,
00582 $journalId
00583 )
00584 );
00585 $returner = (isset($result->fields[0]) && $result->fields[0] != 0);
00586
00587 $result->Close();
00588 unset($result);
00589
00590 return $returner;
00591 }
00592 }
00593
00594 ?>