protected function _beforeSave() { if ($this->_campaign) { $this->setCampaignId($this->_campaign->getId()); } if ($this->_recipient) { $this->setRecipientId($this->_recipient->getId()); } return parent::_beforeSave(); }
/** * Find and add new recipients for the specified campaign * * @param Mzax_Emarketing_Model_Campaign $camapgin * @return integer The number of recipients found */ public function findRecipients(Mzax_Emarketing_Model_Campaign $camapgin) { if (!$camapgin->getId() || !$camapgin->getRecipientProvider() || !$camapgin->getMedium()) { return 0; } $adapter = $this->_getWriteAdapter(); $select = $adapter->select()->from(array('current_recipients' => $this->getTable('recipient')), 'object_id'); $select->where('`current_recipients`.`campaign_id` = ?', $camapgin->getId()); $select->where('`current_recipients`.`is_mock` = 0'); $time = $camapgin->getCurrentTime(); if (!$time instanceof Zend_Db_Expr) { $time = new Zend_Db_Expr('NOW()'); } if ($interval = (int) $camapgin->getMinResendInterval()) { $select->where("`current_recipients`.`created_at` > DATE_SUB({$time}, INTERVAL ? DAY)", $camapgin->getId()); } /* skip all already queued recipients */ $filterSelect = $camapgin->getRecipientProvider()->getSelect(); $filterSelect->exists($select, '`current_recipients`.`object_id` = {id}', false); $filterSelect->columns(array('created_at' => $time, 'campaign_id' => new Zend_Db_Expr($camapgin->getId()))); $adapter->beginTransaction(); try { $insertSql = $adapter->insertFromSelect($filterSelect, $this->getTable('recipient'), array('object_id', 'created_at', 'campaign_id')); $stmt = $adapter->query($insertSql); $adapter->update($this->getMainTable(), array('last_check' => new Zend_Db_Expr('NOW()')), $adapter->quoteInto('campaign_id = ?', $camapgin->getId())); $adapter->commit(); } catch (Exception $e) { $adapter->rollBack(); throw $e; } return $stmt->rowCount(); }
protected function _getLastRecordTime() { $adapter = $this->_getWriteAdapter(); $select = $this->_select($this->_reportTable, null, 'MAX(`goal_time`)'); if ($this->_tracker) { $select->where('`tracker_id` = ?', $this->_tracker->getId()); } if ($this->_campaign) { $select->where('`campaign_id` = ?', $this->_campaign->getId()); } return $adapter->fetchOne($select); }
/** * Set campaign * * @param Mzax_Emarketing_Model_Campaign $campaign * @return Mzax_Emarketing_Model_Recipient */ public function setCampaign(Mzax_Emarketing_Model_Campaign $campaign) { $this->_campaign = $campaign; $this->setCampaignId($campaign->getId()); return $this; }
/** * Get goal <-> recipient binder * * @param Mzax_Emarketing_Model_Campaign $campaign * @param boolean $direct * @param integer|false $variation * @return Mzax_Emarketing_Model_Resource_Recipient_Goal_Binder */ public function getRecipientBinder($campaign, $direct = false, $variation = false) { $select = $this->_select('sales/order', 'order'); $select->addBinding('order_id', 'entity_id'); $select->addBinding('order_time', 'created_at'); $select->addBinding('customer_id', 'customer_id'); $select->addBinding('email', 'customer_email'); $select->addBinding('quote_id', 'quote_id'); $select->addBinding('campaign', new Zend_Db_Expr($campaign->getId())); $select->where('{campaign_id} = ?', $campaign->getId()); $select->where('{order_time} > ?', $campaign->getCreatedAt()); $select->where('{order_time} > {sent_at}'); $select->where('{is_mock} = 0'); $select->setColumn('order_id'); $select->setColumn('order_time'); $select->setColumn('recipient_id'); if ($variation !== false) { $select->where('{variation_id} = ?', $variation); } /* @var $binder Mzax_Emarketing_Model_Resource_Recipient_Goal_Binder */ $binder = Mage::getResourceModel('mzax_emarketing/recipient_goal_binder'); $binder->setSelect($select); // create a direct binding using the goal table $binder->createBinding()->joinTable(array('object_type' => Mzax_Emarketing_Model_Goal::TYPE_ORDER, 'object_id' => '{order_id}'), 'goal')->joinTable(array('recipient_id' => '{recipient_id}'), 'recipient')->addBinding('recipient_id', 'goal.recipient_id')->addBinding('sent_at', 'recipient.sent_at')->addBinding('variation_id', 'recipient.variation_id')->addBinding('campaign_id', 'recipient.campaign_id')->addBinding('is_mock', 'recipient.is_mock'); if (!$direct) { // see if we can get any indirect bindings via email etc $campaign->bindRecipients($binder); } Mage::dispatchEvent('mzax_emarketing_order_recipient_binder', array('binder' => $binder, 'direct' => $direct, 'campaign' => $campaign)); return $binder; }
/** * Add campaign filter */ protected function _renderFiltersBefore() { if ($this->_campaign) { $this->addFilter('campaign_id', $this->_campaign->getId()); } }