/** * Deletion of segment */ public function delete() { AW_Advancednewsletter_Model_Sync_Mailchimpclient::$disableAutosync = true; $segmentCode = $this->getCode(); parent::delete(); Mage::getModel('advancednewsletter/subscriber')->getCollection()->removeSegment($segmentCode); Mage::dispatchEvent('an_segment_delete', array('segment_code' => $segmentCode)); }
public function testConnectionAction() { try { AW_Advancednewsletter_Model_Sync_Mailchimpclient::testConnection($this->getRequest()->getParams()); } catch (Exception $e) { return $this->getResponse()->setBody($this->_helper()->__($e->getMessage())); } return $this->getResponse()->setBody($this->_helper()->__('Connection successfull')); }
public function removeSegment($observer) { if ($observer->getSegmentCode()) { try { foreach (Mage::app()->getStores() as $store) { AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($store->getId())->removeSegment($observer->getSegmentCode()); } } catch (Exception $ex) { } } }
public static function getInstance($storeId) { $createNewInstance = true; if (self::$_instance) { if (self::$_instance->_client && self::$_instance->_clientStoreId == $storeId) { $createNewInstance = false; } } if ($createNewInstance) { $instance = new self(); $instance->setKeys($storeId); try { $instance->_client = new Zend_XmlRpc_Client($instance->_connect()); } catch (Exception $e) { throw new AW_Core_Exception(Mage::helper('advancednewsletter')->__('Couldn\'t connect to MailChimp')); } $instance->_clientStoreId = $storeId; self::$_instance = $instance; } return self::$_instance; }
public function massUnsubscribeAction() { $segment = $this->getRequest()->getParam('segment'); $customersIds = $this->getRequest()->getParam('customer'); if (!is_array($customersIds)) { Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select customer(s)')); } else { try { AW_Advancednewsletter_Model_Sync_Mailchimpclient::$disableAutosync = true; foreach ($customersIds as $customerId) { $customer = Mage::getModel('customer/customer')->load($customerId); Mage::getModel('advancednewsletter/subscriber')->loadByEmail($customer->getEmail())->unsubscribe($segment); } Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Total of %d record(s) were successfully updated', count($customersIds))); } catch (Exception $e) { Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); } } $this->_redirect('*/*/index'); }
public function saveAction() { $request = $this->getRequest(); $template = Mage::getModel('advancednewsletter/template'); if ($id = (int) $request->getParam('id')) { $template->load($id); } try { $template->addData($request->getParams())->setTemplateSubject($request->getParam('subject'))->setTemplateCode($request->getParam('code'))->setTemplateSenderEmail($request->getParam('sender_email'))->setTemplateSenderName($request->getParam('sender_name'))->setTemplateText($request->getParam('text'))->setTemplateStyles($request->getParam('styles'))->setModifiedAt(Mage::getSingleton('core/date')->gmtDate()); if (!$template->getId()) { $template->setTemplateType(Mage_Newsletter_Model_Template::TYPE_HTML); } if ($this->getRequest()->getParam('_change_type_flag')) { $template->setTemplateType(Mage_Newsletter_Model_Template::TYPE_TEXT); $template->setTemplateStyles(''); } /* Market Segmentation Suite compatibility */ if ($request->getParam('mss_rule_id')) { $rule = Mage::getModel('marketsuite/filter')->load($request->getParam('mss_rule_id')); if ($rule->getId()) { $newSegmentCode = 'MSS_' . str_replace(array(' ', ',', '<', '>'), array('_', '', '_less_', '_more_'), $rule->getName()); Mage::getModel('advancednewsletter/segment')->createNewSegment($newSegmentCode); $template->setData('segments_codes', array($newSegmentCode)); foreach (Mage::getModel('marketsuite/api')->exportCustomers($rule->getId()) as $customer) { AW_Advancednewsletter_Model_Sync_Mailchimpclient::$disableAutosync = true; Mage::getModel('advancednewsletter/subscriber')->setCustomer(Mage::getModel('customer/customer')->load($customer->getId()))->subscribe($customer->getEmail(), array($newSegmentCode)); } } } if ($this->getRequest()->getParam('_save_as_flag')) { $template->setId(null); } $template->preprocess(); $this->_redirect('*/*'); } catch (Mage_Core_Exception $e) { $this->_getSession()->addError(nl2br($e->getMessage())); $this->_getSession()->setData('advancednewsletter_template_form_data', $this->getRequest()->getParams()); } catch (Exception $e) { $this->_getSession()->addException($e, Mage::helper('adminhtml')->__('An error occurred while saving this template.')); $this->_getSession()->setData('advancednewsletter_template_form_data', $this->getRequest()->getParams()); } $this->_forward('new'); }
public function syncToMailchimp() { self::$_massSyncFlag = true; $syncToParams = Mage::getModel('advancednewsletter/cache')->loadCache('aw_advancednewsletter_mailchimp_to_params'); if (!$syncToParams) { return; } $syncToParams = unserialize($syncToParams); if (!isset($syncToParams['sync_for']) || !isset($syncToParams['include_names']) || !isset($syncToParams['sync_stores'])) { return; } $syncFor = $syncToParams['sync_for']; $includeNames = $syncToParams['include_names']; $currentPage = Mage::getModel('advancednewsletter/cache')->loadCache('aw_advancednewsletter_mailchimp_to_page'); if (!$currentPage) { $currentPage = 1; } $subscribersCollection = Mage::getModel('advancednewsletter/subscriber')->getCollection()->addStoreFilter($syncToParams['sync_stores']); if ($subscribersCollection->getSize() < ($currentPage - 1) * self::SYNC_TO_MAILCHIMP_PAGE_SIZE) { Mage::getModel('advancednewsletter/cache')->removeCache('aw_advancednewsletter_mailchimp_to_params'); Mage::getModel('advancednewsletter/cache')->removeCache('aw_advancednewsletter_mailchimp_to_page'); return; } $subscribers = $subscribersCollection->setPageSize(self::SYNC_TO_MAILCHIMP_PAGE_SIZE)->setCurPage($currentPage); switch ($syncFor) { case AW_Advancednewsletter_Block_Adminhtml_Synchronization::SYNC_SUBSCRIBED: $subscribers->addFilterSubscribed(); break; case AW_Advancednewsletter_Block_Adminhtml_Synchronization::SYNC_UNSUBSCRIBED: $subscribers->addFilterUnsubscribed(); break; default: $subscribers->addFilterSubscribedUnsubscribed(); break; } $syncWithErrorsFlag = false; foreach ($subscribers as $subscriber) { try { if ($subscriber->getStatus() == AW_Advancednewsletter_Model_Subscriber::STATUS_SUBSCRIBED) { AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($subscriber->getStoreId())->setSkipChangesCheck(true)->setIncludeNames($includeNames)->subscribe($subscriber); } if ($subscriber->getStatus() == AW_Advancednewsletter_Model_Subscriber::STATUS_UNSUBSCRIBED) { AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($subscriber->getStoreId())->setSkipChangesCheck(true)->setIncludeNames($includeNames)->subscribe($subscriber)->unsubscribeFromList($subscriber); } } catch (Exception $ex) { $syncWithErrorsFlag = true; } } Mage::getModel('advancednewsletter/cache')->saveCache($currentPage + 1, 'aw_advancednewsletter_mailchimp_to_page'); self::$_massSyncFlag = false; }
protected function _exportSubsPage($storeId, $type, $page, $pageSize, $includeNames) { if ($page === 'none') { return 'none'; } $subscribers = $this->_getSubscibersPack($storeId, $type, $page, $pageSize); if (!count($subscribers)) { return 'none'; } switch ($type) { case 'subscribed': $batch = $this->_getSubsBatch($subscribers, $includeNames, TRUE); AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($storeId)->batchSubscribe($batch); break; case 'unsubscribed': /* * 1) unsubscribe batch with 'delete_members' to delete old data * 2) subscribe batch to list to add new data * 3) unsubscribe this batch to change status */ $batch = $this->_getSubsBatch($subscribers, $includeNames); $email = array(); foreach ($batch as $subscriber) { $email[] = $subscriber['EMAIL']; } AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($storeId)->batchUnsubscribe($email, TRUE); AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($storeId)->batchSubscribe($batch); AW_Advancednewsletter_Model_Sync_Mailchimpclient::getInstance($storeId)->batchUnsubscribe($email, FALSE); break; default: break; } return $page + 1; }