PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/magento/app/code/core/Mage/Newsletter/Model/Template.php

https://bitbucket.org/jit_bec/shopifine
PHP | 395 lines | 192 code | 40 blank | 163 comment | 33 complexity | dc1cc325ff7ca59f2d070f93ef8b63eb MD5 | raw file
Possible License(s): LGPL-3.0
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magentocommerce.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magentocommerce.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Newsletter
  23. * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Template model
  28. *
  29. * @method Mage_Newsletter_Model_Resource_Template _getResource()
  30. * @method Mage_Newsletter_Model_Resource_Template getResource()
  31. * @method string getTemplateCode()
  32. * @method Mage_Newsletter_Model_Template setTemplateCode(string $value)
  33. * @method Mage_Newsletter_Model_Template setTemplateText(string $value)
  34. * @method Mage_Newsletter_Model_Template setTemplateTextPreprocessed(string $value)
  35. * @method string getTemplateStyles()
  36. * @method Mage_Newsletter_Model_Template setTemplateStyles(string $value)
  37. * @method int getTemplateType()
  38. * @method Mage_Newsletter_Model_Template setTemplateType(int $value)
  39. * @method string getTemplateSubject()
  40. * @method Mage_Newsletter_Model_Template setTemplateSubject(string $value)
  41. * @method string getTemplateSenderName()
  42. * @method Mage_Newsletter_Model_Template setTemplateSenderName(string $value)
  43. * @method string getTemplateSenderEmail()
  44. * @method Mage_Newsletter_Model_Template setTemplateSenderEmail(string $value)
  45. * @method int getTemplateActual()
  46. * @method Mage_Newsletter_Model_Template setTemplateActual(int $value)
  47. * @method string getAddedAt()
  48. * @method Mage_Newsletter_Model_Template setAddedAt(string $value)
  49. * @method string getModifiedAt()
  50. * @method Mage_Newsletter_Model_Template setModifiedAt(string $value)
  51. *
  52. * @category Mage
  53. * @package Mage_Newsletter
  54. * @author Magento Core Team <core@magentocommerce.com>
  55. */
  56. class Mage_Newsletter_Model_Template extends Mage_Core_Model_Template
  57. {
  58. /**
  59. * Template Text Preprocessed flag
  60. *
  61. * @var bool
  62. */
  63. protected $_preprocessFlag = false;
  64. /**
  65. * Mail object
  66. *
  67. * @var Zend_Mail
  68. */
  69. protected $_mail;
  70. /**
  71. * Initialize resource model
  72. *
  73. */
  74. protected function _construct()
  75. {
  76. $this->_init('newsletter/template');
  77. }
  78. /**
  79. * Validate Newsletter template
  80. *
  81. * @throws Mage_Core_Exception
  82. * @return bool
  83. */
  84. public function validate()
  85. {
  86. $validators = array(
  87. 'template_code' => array(Zend_Filter_Input::ALLOW_EMPTY => false),
  88. 'template_type' => 'Int',
  89. 'template_sender_email' => 'EmailAddress',
  90. 'template_sender_name' => array(Zend_Filter_Input::ALLOW_EMPTY => false)
  91. );
  92. $data = array();
  93. foreach (array_keys($validators) as $validateField) {
  94. $data[$validateField] = $this->getDataUsingMethod($validateField);
  95. }
  96. $validateInput = new Zend_Filter_Input(array(), $validators, $data);
  97. if (!$validateInput->isValid()) {
  98. $errorMessages = array();
  99. foreach ($validateInput->getMessages() as $messages) {
  100. if (is_array($messages)) {
  101. foreach ($messages as $message) {
  102. $errorMessages[] = $message;
  103. }
  104. }
  105. else {
  106. $errorMessages[] = $messages;
  107. }
  108. }
  109. Mage::throwException(join("\n", $errorMessages));
  110. }
  111. }
  112. /**
  113. * Processing object before save data
  114. *
  115. * @return Mage_Newsletter_Model_Template
  116. */
  117. protected function _beforeSave()
  118. {
  119. $this->validate();
  120. return parent::_beforeSave();
  121. }
  122. /**
  123. * Load template by code
  124. *
  125. * @param string $templateCode
  126. * @return Mage_Newsletter_Model_Template
  127. */
  128. public function loadByCode($templateCode)
  129. {
  130. $this->_getResource()->loadByCode($this, $templateCode);
  131. return $this;
  132. }
  133. /**
  134. * Return true if this template can be used for sending queue as main template
  135. *
  136. * @return boolean
  137. * @deprecated since 1.4.0.1
  138. */
  139. public function isValidForSend()
  140. {
  141. return !Mage::getStoreConfigFlag('system/smtp/disable')
  142. && $this->getTemplateSenderName()
  143. && $this->getTemplateSenderEmail()
  144. && $this->getTemplateSubject();
  145. }
  146. /**
  147. * Getter for template type
  148. *
  149. * @return int|string
  150. */
  151. public function getType(){
  152. return $this->getTemplateType();
  153. }
  154. /**
  155. * Check is Preprocessed
  156. *
  157. * @return bool
  158. */
  159. public function isPreprocessed()
  160. {
  161. return strlen($this->getTemplateTextPreprocessed()) > 0;
  162. }
  163. /**
  164. * Check Template Text Preprocessed
  165. *
  166. * @return bool
  167. */
  168. public function getTemplateTextPreprocessed()
  169. {
  170. if ($this->_preprocessFlag) {
  171. $this->setTemplateTextPreprocessed($this->getProcessedTemplate());
  172. }
  173. return $this->getData('template_text_preprocessed');
  174. }
  175. /**
  176. * Retrieve processed template
  177. *
  178. * @param array $variables
  179. * @param bool $usePreprocess
  180. * @return string
  181. */
  182. public function getProcessedTemplate(array $variables = array(), $usePreprocess = false)
  183. {
  184. /* @var $processor Mage_Newsletter_Model_Template_Filter */
  185. $processor = Mage::helper('newsletter')->getTemplateProcessor();
  186. if (!$this->_preprocessFlag) {
  187. $variables['this'] = $this;
  188. }
  189. if (Mage::app()->isSingleStoreMode()) {
  190. $processor->setStoreId(Mage::app()->getStore());
  191. } else {
  192. $processor->setStoreId(Mage::app()->getRequest()->getParam('store_id'));
  193. }
  194. $processor
  195. ->setIncludeProcessor(array($this, 'getInclude'))
  196. ->setVariables($variables);
  197. if ($usePreprocess && $this->isPreprocessed()) {
  198. return $processor->filter($this->getPreparedTemplateText(true));
  199. }
  200. return $processor->filter($this->getPreparedTemplateText());
  201. }
  202. /**
  203. * Makes additional text preparations for HTML templates
  204. *
  205. * @param bool $usePreprocess Use Preprocessed text or original text
  206. * @return string
  207. */
  208. public function getPreparedTemplateText($usePreprocess = false)
  209. {
  210. $text = $usePreprocess ? $this->getTemplateTextPreprocessed() : $this->getTemplateText();
  211. if ($this->_preprocessFlag || $this->isPlain() || !$this->getTemplateStyles()) {
  212. return $text;
  213. }
  214. // wrap styles into style tag
  215. $html = "<style type=\"text/css\">\n%s\n</style>\n%s";
  216. return sprintf($html, $this->getTemplateStyles(), $text);
  217. }
  218. /**
  219. * Retrieve included template
  220. *
  221. * @param string $templateCode
  222. * @param array $variables
  223. * @return string
  224. */
  225. public function getInclude($templateCode, array $variables)
  226. {
  227. return Mage::getModel('newsletter/template')
  228. ->loadByCode($templateCode)
  229. ->getProcessedTemplate($variables);
  230. }
  231. /**
  232. * Retrieve mail object instance
  233. *
  234. * @return Zend_Mail
  235. * @deprecated since 1.4.0.1
  236. */
  237. public function getMail()
  238. {
  239. if (is_null($this->_mail)) {
  240. $this->_mail = new Zend_Mail('utf-8');
  241. }
  242. return $this->_mail;
  243. }
  244. /**
  245. * Send mail to subscriber
  246. *
  247. * @param Mage_Newsletter_Model_Subscriber|string $subscriber subscriber Model or E-mail
  248. * @param array $variables template variables
  249. * @param string|null $name receiver name (if subscriber model not specified)
  250. * @param Mage_Newsletter_Model_Queue|null $queue queue model, used for problems reporting.
  251. * @return boolean
  252. * @deprecated since 1.4.0.1
  253. **/
  254. public function send($subscriber, array $variables = array(), $name=null, Mage_Newsletter_Model_Queue $queue=null)
  255. {
  256. if (!$this->isValidForSend()) {
  257. return false;
  258. }
  259. $email = '';
  260. if ($subscriber instanceof Mage_Newsletter_Model_Subscriber) {
  261. $email = $subscriber->getSubscriberEmail();
  262. if (is_null($name) && ($subscriber->hasCustomerFirstname() || $subscriber->hasCustomerLastname()) ) {
  263. $name = $subscriber->getCustomerFirstname() . ' ' . $subscriber->getCustomerLastname();
  264. }
  265. }
  266. else {
  267. $email = (string) $subscriber;
  268. }
  269. if (Mage::getStoreConfigFlag(Mage_Core_Model_Email_Template::XML_PATH_SENDING_SET_RETURN_PATH)) {
  270. $this->getMail()->setReturnPath($this->getTemplateSenderEmail());
  271. }
  272. ini_set('SMTP', Mage::getStoreConfig('system/smtp/host'));
  273. ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
  274. $mail = $this->getMail();
  275. $mail->addTo($email, $name);
  276. $text = $this->getProcessedTemplate($variables, true);
  277. if ($this->isPlain()) {
  278. $mail->setBodyText($text);
  279. }
  280. else {
  281. $mail->setBodyHTML($text);
  282. }
  283. $mail->setSubject($this->getProcessedTemplateSubject($variables));
  284. $mail->setFrom($this->getTemplateSenderEmail(), $this->getTemplateSenderName());
  285. try {
  286. $mail->send();
  287. $this->_mail = null;
  288. if (!is_null($queue)) {
  289. $subscriber->received($queue);
  290. }
  291. }
  292. catch (Exception $e) {
  293. if ($subscriber instanceof Mage_Newsletter_Model_Subscriber) {
  294. // If letter sent for subscriber, we create a problem report entry
  295. $problem = Mage::getModel('newsletter/problem');
  296. $problem->addSubscriberData($subscriber);
  297. if (!is_null($queue)) {
  298. $problem->addQueueData($queue);
  299. }
  300. $problem->addErrorData($e);
  301. $problem->save();
  302. if (!is_null($queue)) {
  303. $subscriber->received($queue);
  304. }
  305. } else {
  306. // Otherwise throw error to upper level
  307. throw $e;
  308. }
  309. return false;
  310. }
  311. return true;
  312. }
  313. /**
  314. * Prepare Process (with save)
  315. *
  316. * @return Mage_Newsletter_Model_Template
  317. * @deprecated since 1.4.0.1
  318. */
  319. public function preprocess()
  320. {
  321. $this->_preprocessFlag = true;
  322. $this->save();
  323. $this->_preprocessFlag = false;
  324. return $this;
  325. }
  326. /**
  327. * Retrieve processed template subject
  328. *
  329. * @param array $variables
  330. * @return string
  331. */
  332. public function getProcessedTemplateSubject(array $variables)
  333. {
  334. $processor = new Varien_Filter_Template();
  335. if (!$this->_preprocessFlag) {
  336. $variables['this'] = $this;
  337. }
  338. $processor->setVariables($variables);
  339. return $processor->filter($this->getTemplateSubject());
  340. }
  341. /**
  342. * Retrieve template text wrapper
  343. *
  344. * @return string
  345. */
  346. public function getTemplateText()
  347. {
  348. if (!$this->getData('template_text') && !$this->getId()) {
  349. $this->setData('template_text',
  350. Mage::helper('newsletter')->__('Follow this link to unsubscribe <!-- This tag is for unsubscribe link --><a href="{{var subscriber.getUnsubscriptionLink()}}">{{var subscriber.getUnsubscriptionLink()}}</a>')
  351. );
  352. }
  353. return $this->getData('template_text');
  354. }
  355. }