/app/code/core/Mage/Adminhtml/Model/Giftmessage/Save.php

https://gitlab.com/LisovyiEvhenii/ismextensions · PHP · 351 lines · 194 code · 48 blank · 109 comment · 24 complexity · b3ca088f6174d7f667eaa5bedc6614ea MD5 · raw file

  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@magento.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.magento.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Adminhtml
  23. * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Adminhtml giftmessage save model
  28. *
  29. * @category Mage
  30. * @package Mage_Adminhtml
  31. * @author Magento Core Team <core@magentocommerce.com>
  32. */
  33. class Mage_Adminhtml_Model_Giftmessage_Save extends Varien_Object
  34. {
  35. protected $_saved = false;
  36. /**
  37. * Save all seted giftmessages
  38. *
  39. * @return Mage_Adminhtml_Model_Giftmessage_Save
  40. */
  41. public function saveAllInQuote()
  42. {
  43. $giftmessages = $this->getGiftmessages();
  44. if (!is_array($giftmessages)) {
  45. return $this;
  46. }
  47. foreach ($giftmessages as $entityId=>$giftmessage) {
  48. $this->_saveOne($entityId, $giftmessage);
  49. }
  50. return $this;
  51. }
  52. public function getSaved()
  53. {
  54. return $this->_saved;
  55. }
  56. public function saveAllInOrder()
  57. {
  58. $giftmessages = $this->getGiftmessages();
  59. if (!is_array($giftmessages)) {
  60. return $this;
  61. }
  62. foreach ($giftmessages as $entityId=>$giftmessage) {
  63. $this->_saveOne($entityId, $giftmessage);
  64. }
  65. return $this;
  66. }
  67. /**
  68. * Save a single gift message
  69. *
  70. * @param integer $entityId
  71. * @param array $giftmessage
  72. * @return Mage_Adminhtml_Model_Giftmessage_Save
  73. */
  74. protected function _saveOne($entityId, $giftmessage) {
  75. /* @var $giftmessageModel Mage_Giftmessage_Model_Message */
  76. $giftmessageModel = Mage::getModel('giftmessage/message');
  77. $entityType = $this->_getMappedType($giftmessage['type']);
  78. switch($entityType) {
  79. case 'quote':
  80. $entityModel = $this->_getQuote();
  81. break;
  82. case 'quote_item':
  83. $entityModel = $this->_getQuote()->getItemById($entityId);
  84. break;
  85. default:
  86. $entityModel = $giftmessageModel->getEntityModelByType($entityType)
  87. ->load($entityId);
  88. break;
  89. }
  90. if (!$entityModel) {
  91. return $this;
  92. }
  93. if ($entityModel->getGiftMessageId()) {
  94. $giftmessageModel->load($entityModel->getGiftMessageId());
  95. }
  96. $giftmessageModel->addData($giftmessage);
  97. if ($giftmessageModel->isMessageEmpty() && $giftmessageModel->getId()) {
  98. // remove empty giftmessage
  99. $this->_deleteOne($entityModel, $giftmessageModel);
  100. $this->_saved = false;
  101. } elseif (!$giftmessageModel->isMessageEmpty()) {
  102. $giftmessageModel->save();
  103. $entityModel->setGiftMessageId($giftmessageModel->getId());
  104. if($entityType != 'quote') {
  105. $entityModel->save();
  106. }
  107. $this->_saved = true;
  108. }
  109. return $this;
  110. }
  111. /**
  112. * Delete a single gift message from entity
  113. *
  114. * @param Mage_GiftMessage_Model_Message|null $giftmessageModel
  115. * @param Varien_Object $entityModel
  116. * @return Mage_Adminhtml_Model_Giftmessage_Save
  117. */
  118. protected function _deleteOne($entityModel, $giftmessageModel=null)
  119. {
  120. if(is_null($giftmessageModel)) {
  121. $giftmessageModel = Mage::getModel('giftmessage/message')
  122. ->load($entityModel->getGiftMessageId());
  123. }
  124. $giftmessageModel->delete();
  125. $entityModel->setGiftMessageId(0)
  126. ->save();
  127. return $this;
  128. }
  129. /**
  130. * Set allowed quote items for gift messages
  131. *
  132. * @param array $items
  133. * @return Mage_Adminhtml_Model_Giftmessage_Save
  134. */
  135. public function setAllowQuoteItems($items)
  136. {
  137. $this->_getSession()->setAllowQuoteItemsGiftMessage($items);
  138. return $this;
  139. }
  140. /**
  141. * Add allowed quote item for gift messages
  142. *
  143. * @param int $item
  144. * @return Mage_Adminhtml_Model_Giftmessage_Save
  145. */
  146. public function addAllowQuoteItem($item)
  147. {
  148. $items = $this->getAllowQuoteItems();
  149. if (!in_array($item, $items)) {
  150. $items[] = $item;
  151. }
  152. $this->setAllowQuoteItems($items);
  153. return $this;
  154. }
  155. /**
  156. * Retrive allowed quote items for gift messages
  157. *
  158. * @return array
  159. */
  160. public function getAllowQuoteItems()
  161. {
  162. if(!is_array($this->_getSession()->getAllowQuoteItemsGiftMessage())) {
  163. $this->setAllowQuoteItems(array());
  164. }
  165. return $this->_getSession()->getAllowQuoteItemsGiftMessage();
  166. }
  167. /**
  168. * Retrive allowed quote items products for gift messages
  169. *
  170. * @return array
  171. */
  172. public function getAllowQuoteItemsProducts()
  173. {
  174. $result = array();
  175. foreach ($this->getAllowQuoteItems() as $itemId) {
  176. $item = $this->_getQuote()->getItemById($itemId);
  177. if(!$item) {
  178. continue;
  179. }
  180. $result[] = $item->getProduct()->getId();
  181. }
  182. return $result;
  183. }
  184. /**
  185. * Checks allowed quote item for gift messages
  186. *
  187. * @param Varien_Object $item
  188. * @return boolean
  189. */
  190. public function getIsAllowedQuoteItem($item)
  191. {
  192. if(!in_array($item->getId(), $this->getAllowQuoteItems())) {
  193. if ($item->getGiftMessageId() && $this->isGiftMessagesAvailable($item)) {
  194. $this->addAllowQuoteItem($item->getId());
  195. return true;
  196. }
  197. return false;
  198. }
  199. return true;
  200. }
  201. /**
  202. * Retrieve is gift message available for item (product)
  203. *
  204. * @param Varien_Object $item
  205. * @return bool
  206. */
  207. public function isGiftMessagesAvailable($item)
  208. {
  209. return Mage::helper('giftmessage/message')->getIsMessagesAvailable(
  210. 'item', $item, $item->getStore()
  211. );
  212. }
  213. /**
  214. * Imports quote items for gift messages from products data
  215. *
  216. * @param unknown_type $products
  217. * @return unknown
  218. */
  219. public function importAllowQuoteItemsFromProducts($products)
  220. {
  221. $allowedItems = $this->getAllowQuoteItems();
  222. $deleteAllowedItems = array();
  223. foreach ($products as $productId=>$data) {
  224. $product = Mage::getModel('catalog/product')
  225. ->setStore($this->_getSession()->getStore())
  226. ->load($productId);
  227. $item = $this->_getQuote()->getItemByProduct($product);
  228. if(!$item) {
  229. continue;
  230. }
  231. if (in_array($item->getId(), $allowedItems)
  232. && !isset($data['giftmessage'])) {
  233. $deleteAllowedItems[] = $item->getId();
  234. } elseif (!in_array($item->getId(), $allowedItems)
  235. && isset($data['giftmessage'])) {
  236. $allowedItems[] = $item->getId();
  237. }
  238. }
  239. $allowedItems = array_diff($allowedItems, $deleteAllowedItems);
  240. $this->setAllowQuoteItems($allowedItems);
  241. return $this;
  242. }
  243. public function importAllowQuoteItemsFromItems($items)
  244. {
  245. $allowedItems = $this->getAllowQuoteItems();
  246. $deleteAllowedItems = array();
  247. foreach ($items as $itemId=>$data) {
  248. $item = $this->_getQuote()->getItemById($itemId);
  249. if(!$item) {
  250. // Clean not exists items
  251. $deleteAllowedItems[] = $itemId;
  252. continue;
  253. }
  254. if (in_array($item->getId(), $allowedItems)
  255. && !isset($data['giftmessage'])) {
  256. $deleteAllowedItems[] = $item->getId();
  257. } elseif (!in_array($item->getId(), $allowedItems)
  258. && isset($data['giftmessage'])) {
  259. $allowedItems[] = $item->getId();
  260. }
  261. }
  262. $allowedItems = array_diff($allowedItems, $deleteAllowedItems);
  263. $this->setAllowQuoteItems($allowedItems);
  264. return $this;
  265. }
  266. /**
  267. * Retrive mapped type for entity
  268. *
  269. * @param string $type
  270. * @return string
  271. */
  272. protected function _getMappedType($type)
  273. {
  274. $map = array(
  275. 'main' => 'quote',
  276. 'item' => 'quote_item',
  277. 'order' => 'order',
  278. 'order_item' => 'order_item'
  279. );
  280. if (isset($map[$type])) {
  281. return $map[$type];
  282. }
  283. return null;
  284. }
  285. /**
  286. * Retrieve session object
  287. *
  288. * @return Mage_Adminhtml_Model_Session_Quote
  289. */
  290. protected function _getSession()
  291. {
  292. return Mage::getSingleton('adminhtml/session_quote');
  293. }
  294. /**
  295. * Retrieve quote object
  296. *
  297. * @return Mage_Sales_Model_Quote
  298. */
  299. protected function _getQuote()
  300. {
  301. return $this->_getSession()->getQuote();
  302. }
  303. }