123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
- /**
- *
- * PHP Pro Bid $Id$ L9SKSvbScN/0fh0xdyWgPzBF9phz7F3GzNFzsJocnVOePsPkriFe27vLNLvaIS0hfcJWOFGlmVF6N4FZnp45MA==
- *
- * @link http://www.phpprobid.com
- * @copyright Copyright (c) 2017 Online Ventures Software & CodeCube SRL
- * @license http://www.phpprobid.com/license Commercial License
- *
- * @version 7.9 [rev.7.9.01]
- */
- /**
- * newsletters subscribers table service class
- */
- namespace Ppb\Service;
- use Ppb\Db\Table\NewslettersSubscribers as NewslettersSubscribersTable,
- Cube\Db\Expr,
- Ppb\Db\Table\Row\User as UserModel;
- class NewslettersSubscribers extends AbstractService
- {
- /**
- *
- * class constructor
- */
- public function __construct()
- {
- parent::__construct();
- $this->setTable(
- new NewslettersSubscribersTable());
- }
- /**
- *
- * create or update an newsletter subscriber
- *
- *
- * @param array $data (newsletter_subscription [flag], email, user_id)
- *
- * @return bool
- */
- public function save($data)
- {
- $row = null;
- $user = null;
- $saved = false;
- if (array_key_exists('user_id', $data)) {
- $usersService = new Users();
- $user = $usersService->findBy('id', $data['user_id']);
- }
- if (array_key_exists('newsletter_subscription', $data)) {
- // unsubscribe by email
- if (!$data['newsletter_subscription']) {
- if ($user instanceof UserModel) {
- $this->deleteOne('user_id', $user['id']);
- }
- $this->deleteOne('email', $data['email']);
- $saved = true;
- }
- }
- if ($saved === false) {
- // we have a subscription creation / update
- $saved = $this->_saveSubscription($user, $data['email']);
- }
- return $saved;
- }
- /**
- *
- * delete subscriber(s) and uncheck newsletter_subscription checkbox if thats the case
- *
- * @param string $column
- * @param mixed $value
- *
- * @return int returns the number of affected rows
- */
- public function deleteOne($column, $value)
- {
- $adapter = $this->_table->getAdapter();
- $where[] = $adapter->quoteInto("$column = ?", $value);
- $usersService = new Users();
- $user = null;
- if ($column == 'user_id') {
- $user = $usersService->findBy('id', $value);
- }
- else if ($column == 'email') {
- $user = $usersService->findBy('email', $value);
- }
- if ($user instanceof UserModel) {
- $user->save(array(
- 'newsletter_subscription' => 0,
- ));
- }
- return $this->_table->delete($where);
- }
- /**
- *
- * create or update a subscriber
- *
- * @param \PPb\Db\Table\Row\User $user
- * @param string $email
- *
- * @return bool
- */
- protected function _saveSubscription($user, $email)
- {
- $rowByEmail = $this->findBy('email', $email);
- $rowByUser = null;
- if ($user instanceof UserModel) {
- $rowByUser = $this->findBy('user_id', $user['id']);
- }
- $saved = true;
- if (count($rowByUser) > 0) {
- if ($rowByEmail)
- $this->_table->update(array('email' => $email), "id='{$rowByUser['id']}'");
- }
- else if (count($rowByEmail) > 0) {
- if ($user instanceof UserModel) {
- $this->_table->update(array('user_id' => $user['id']), "id='{$rowByEmail['id']}'");
- }
- else {
- $saved = false;
- }
- }
- else { // we have a new row altogether
- $this->_table->insert(array(
- 'user_id' => (!empty($user['id'])) ? $user['id'] : new Expr('null'),
- 'email' => $email,
- 'created_at' => new Expr('now()'),
- ));
- }
- return $saved;
- }
- }
|