/src/Magento/app/code/community/Typogento/Replication/Model/Typo3/Frontend/User/Provider.php

https://github.com/cdfre/TypoGento · PHP · 205 lines · 158 code · 31 blank · 16 comment · 30 complexity · 04204e3609368ab811b482d86631ec63 MD5 · raw file

  1. <?php
  2. class Typogento_Replication_Model_Typo3_Frontend_User_Provider extends Typogento_Replication_Model_Provider_Abstract {
  3. protected $_sources = null;
  4. public function __construct() {
  5. }
  6. /**
  7. * @todo Preserve
  8. * @see Typogento_Core_Model_Replication_Provider_Abstract::prefetch()
  9. */
  10. public function prefetch(Mage_Core_Model_Abstract $object) {
  11. $this->_assertSourceType($object);
  12. $id = $object->getId();
  13. if (!$id) {
  14. return;
  15. }
  16. $object->unsetData();
  17. $object->load($id);
  18. }
  19. public function getTimestamp(Mage_Core_Model_Abstract $object) {
  20. $this->_assertSourceType($object);
  21. // update frontend user
  22. return $object->getData('tstamp');
  23. }
  24. public function getDisplay(Mage_Core_Model_Abstract $object) {
  25. $this->_assertSourceType($object);
  26. $type = Mage::helper('typogento_replication')->__('TYPO3 Frontend User');
  27. return $object->toString("{{email}} - {$type}");
  28. }
  29. public function getModel($source = true) {
  30. if (!$source) {
  31. return Mage::getModel('customer/customer');
  32. } else {
  33. return Mage::getModel('typogento_replication/typo3_frontend_user');
  34. }
  35. }
  36. public function getCollection() {
  37. if ($this->_sources === null) {
  38. $this->_sources = Mage::getModel('typogento_replication/typo3_frontend_user')->getCollection()
  39. ->addOrder('email', 'ASC');
  40. $this->_sources->getSelect()
  41. ->columns(array(
  42. 'email' => 'email',
  43. ));
  44. }
  45. return $this->_sources;
  46. }
  47. protected function _discover(Mage_Core_Model_Abstract $object) {
  48. $this->_assertSourceType($object);
  49. // set result
  50. $target = null;
  51. // create customer model
  52. $target = Mage::getModel('customer/customer')->setWebsiteId($website);
  53. $read = Mage::getSingleton('core/resource')->getConnection('core_read');
  54. $table = $read->getTableName('customer_entity');
  55. if ($object->getData('tx_typogento_customer')) {
  56. $select = $read->select()
  57. ->from(array('t' => $table), array('id' => 'entity_id'))
  58. ->where('t.entity_id = ?', $object->getData('tx_typogento_customer'))
  59. ->where('t.website_id = ?', Mage::helper('typogento_core/typo3')->getWebsiteId())
  60. ->limit(1);
  61. $record = $read->fetchRow($select);
  62. if ($record && isset($record['id'])) {
  63. $target->setId($record['id']);
  64. }
  65. } else if ($object->getData('email')) {
  66. $select = $read->select()
  67. ->from(array('t' => $table), array('id' => 'entity_id'))
  68. ->where('t.email = ?', $object->getData('email'))
  69. ->where('t.website_id = ?', Mage::helper('typogento_core/typo3')->getWebsiteId())
  70. ->limit(1);
  71. $record = $read->fetchRow($select);
  72. if ($record && isset($record['id'])) {
  73. $target->setId($record['id']);
  74. }
  75. }
  76. return $target;
  77. }
  78. protected function _create(Mage_Core_Model_Abstract $source, Mage_Core_Model_Abstract $target) {
  79. $this->_assertSourceType($source);
  80. $this->_assertTargetType($target);
  81. // update frontend user
  82. $this->_updateCustomer($source, $target);
  83. }
  84. protected function _update(Mage_Core_Model_Abstract $source, Mage_Core_Model_Abstract $target) {
  85. $this->_assertSourceType($source);
  86. $this->_assertTargetType($target);
  87. // update frontend user
  88. $this->_updateCustomer($source, $target);
  89. }
  90. protected function _assertSourceType(Mage_Core_Model_Abstract $object) {
  91. if (!($object instanceof Typogento_Replication_Model_Typo3_Frontend_User)) {
  92. throw new InvalidArgumentException();
  93. }
  94. }
  95. protected function _assertTargetType(Mage_Core_Model_Abstract $object) {
  96. if (!($object instanceof Mage_Customer_Model_Customer)) {
  97. throw InvalidArgumentException();
  98. }
  99. }
  100. protected function _updateCustomer(Typogento_Replication_Model_Typo3_Frontend_User $source, Mage_Customer_Model_Customer $target) {
  101. //
  102. $transaction = Mage::getModel('core/resource_transaction');
  103. // get data
  104. $data = array(
  105. 'email' => $source->getData('email'),
  106. 'lastname' => $source->getData('last_name'),
  107. 'firstname' => $source->getData('first_name'),
  108. 'is_active' => !$source->getData('disabled'),
  109. 'dob' => date('Y-m-d', $source->getData('date_of_birth'))
  110. );
  111. $gender = $source->getData('gender');
  112. $gender = intval($gender);
  113. if ($gender > -1 && $gender < 2) {
  114. $data['gender'] = ++$gender;
  115. }
  116. // initialize default values
  117. if (!$target->getId()) {
  118. $data['group_id'] = 1;
  119. $random = $target->getRandomPassword();
  120. $data['password_hash'] = Mage::helper('core')->getHash($random, true);
  121. $data['created_at'] = date('Y-m-d', $source->getData('crdate'));
  122. $data['website_id'] = Mage::helper('typogento_core/typo3')->getWebsiteId();
  123. }
  124. // set data
  125. $target->addData($data);
  126. $transaction->addObject($target);
  127. // handling billing address
  128. $address = $target->getPrimaryBillingAddress();
  129. if ($source->getData('static_info_country')
  130. && $source->getData('address')
  131. && $source->getData('city')
  132. && $source->getData('telephone')) {
  133. // add or update default billing address
  134. if (!$address instanceof Mage_Customer_Model_Address) {
  135. $address = Mage::getModel('customer/address');
  136. }
  137. $country = Mage::getModel('directory/country');
  138. $country->loadByCode($source->getData('static_info_country'));
  139. $street = preg_split('/\n|\r|\r\n/', $source->getData('address'), 2, PREG_SPLIT_NO_EMPTY);
  140. if (isset($street[1])) {
  141. $street[1] = preg_replace('/\n|\r|\r\n/', '', $street[1]);
  142. }
  143. $data = array (
  144. 'firstname' => $source->getData('first_name'),
  145. 'lastname' => $source->getData('last_name'),
  146. 'street' => $street,
  147. 'city' => $source->getData('city'),
  148. 'postcode' => $source->getData('zip'),
  149. 'country_id' => $country->getId(),
  150. 'telephone' => $source->getData('telephone'),
  151. );
  152. $address->addData($data);
  153. if (!$address->getId()) {
  154. $address->setIsDefaultBilling(true);
  155. if ($target->getDefaultBilling()) {
  156. $target->setData('default_billing', '');
  157. }
  158. $target->addAddress($address);
  159. }
  160. $transaction->addObject($address);
  161. } else if (!$source->getData('static_info_country')
  162. && !$source->getData('address')
  163. && !$source->getData('city')
  164. && !$source->getData('telephone')) {
  165. // remove default billing address
  166. if ($address instanceof Mage_Customer_Model_Address) {
  167. $target->setData('default_billing', '');
  168. $address->delete();
  169. $transaction->addObject($address);
  170. }
  171. }
  172. $transaction->save();
  173. }
  174. }