NewsletterMongodb.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /*
  3. * FecShop file.
  4. *
  5. * @link http://www.fecshop.com/
  6. * @copyright Copyright (c) 2016 FecShop Software LLC
  7. * @license http://www.fecshop.com/license/
  8. */
  9. namespace fecshop\services\customer\newsletter;
  10. //use fecshop\models\mongodb\customer\Newsletter as MongoNewsletter;
  11. use fecshop\services\Service;
  12. use Yii;
  13. /**
  14. * Page Newsletter services.
  15. * @author Terry Zhao <2358269014@qq.com>
  16. * @since 1.0
  17. */
  18. class NewsletterMongodb extends Service implements NewsletterInterface
  19. {
  20. public $numPerPage = 20;
  21. protected $_newsletterModelName = '\fecshop\models\mongodb\customer\Newsletter';
  22. protected $_newsletterModel;
  23. public function init()
  24. {
  25. parent::init();
  26. list($this->_newsletterModelName, $this->_newsletterModel) = Yii::mapGet($this->_newsletterModelName);
  27. }
  28. public function getPrimaryKey()
  29. {
  30. return '_id';
  31. }
  32. public function getByPrimaryKey($primaryKey)
  33. {
  34. if ($primaryKey) {
  35. return $this->_newsletterModel->findOne($primaryKey);
  36. } else {
  37. return new $this->_newsletterModelName();
  38. }
  39. }
  40. /*
  41. * example filter:
  42. * [
  43. * 'numPerPage' => 20,
  44. * 'pageNum' => 1,
  45. * 'orderBy' => ['_id' => SORT_DESC, 'sku' => SORT_ASC ],
  46. 'where' => [
  47. ['>','price',1],
  48. ['<=','price',10]
  49. * ['sku' => 'uk10001'],
  50. * ],
  51. * 'asArray' => true,
  52. * ]
  53. */
  54. public function coll($filter = '')
  55. {
  56. $query = $this->_newsletterModel->find();
  57. $query = Yii::$service->helper->ar->getCollByFilter($query, $filter);
  58. return [
  59. 'coll' => $query->all(),
  60. 'count'=> $query->limit(null)->offset(null)->count(),
  61. ];
  62. }
  63. /**
  64. * @param $emailAddress | String
  65. * @return bool
  66. * 检查邮件是否之前被订阅过
  67. */
  68. protected function emailIsExist($emailAddress)
  69. {
  70. $primaryKey = $this->_newsletterModel->primaryKey();
  71. $one = $this->_newsletterModel->findOne(['email' => $emailAddress]);
  72. if ($one[$primaryKey]) {
  73. return true;
  74. }
  75. return false;
  76. }
  77. /**
  78. * @param $emailAddress | String
  79. * @return bool
  80. * 订阅邮件
  81. */
  82. protected function actionSubscribe($emailAddress, $isRegister = false)
  83. {
  84. if (!$emailAddress) {
  85. Yii::$service->helper->errors->add('newsletter email address is empty');
  86. return;
  87. } elseif (!Yii::$service->email->validateFormat($emailAddress)) {
  88. Yii::$service->helper->errors->add('The email address format is incorrect!');
  89. return;
  90. } elseif ($this->emailIsExist($emailAddress)) {
  91. if ($isRegister) {
  92. return true;
  93. } else {
  94. Yii::$service->helper->errors->add('ERROR,Your email address has subscribe , Please do not repeat the subscription');
  95. return;
  96. }
  97. }
  98. $model = $this->_newsletterModel;
  99. $newsletterModel = new $this->_newsletterModelName();
  100. $newsletterModel->email = $emailAddress;
  101. $newsletterModel->created_at = time();
  102. $newsletterModel->status = $model::ENABLE_STATUS;
  103. $newsletterModel->save();
  104. return true;
  105. }
  106. }