Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @author S.Serdyuk
- * @copyright (c) 2013, WebAkula
- * @title Рассылка
- * @description Управление рассылками и подписками
- */
- class Newsletter_AdminController extends Core_Admin {
- protected $_templatesPath = '';
- public function init() {
- parent::init();
- $this->_templatesPath = Zend_Controller_Front::getInstance()->getModuleDirectory() . DIRECTORY_SEPARATOR . 'templates';
- $this->_breadcrumbs->addUrl('Рассылка', array(), 'newsletter', 'index');
- }
- /**
- * @title Подписчики
- * @description ...
- */
- public function indexAction() {
- $this->_breadcrumbs->addUrl('Управление подписчиками', array(), 'newsletter', 'index');
- $action = $this->_getParam('action');
- $this->view->headScript()->appendFile('/admin_style/js/admin/newsletter.js');
- switch ($action) {
- case 'index': default:
- $model = new Newsletter_Model_List;
- $this->view->lists = $model->getAll();
- $model = new Newsletter_Model_Subscribers;
- $page = $this->_getParam('page', 1);
- $id = $this->_getParam('id', false);
- //$this->view->subscribers = $model->getGroup($id, $page);
- $subscribers = $model->getGroup($id, $page);
- $this->view->subscribers = (array) $subscribers->getItemsByPage($page);
- $this->view->paginator = $subscribers;
- $this->render('index');
- break;
- case 'edit-newsletter':
- $model = new Newsletter_Model_List;
- $form = new Newsletter_Form_List_Edit;
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- $id = $data['id'];
- unset($data['id'], $data['submit']);
- $model->update($data, 'id=' . $id);
- $this->_redirect($this->view->adminUrl('newsletter', 'index'));
- } else {
- $id = $this->_getParam('id');
- $data = $model->getByPk($id);
- $this->view->form = $form->populate($data);
- $this->render('list/edit');
- }
- break;
- case'show-newsletter':
- $model = new Newsletter_Model_List;
- $listId = $this->_getParam('id');
- $this->view->listId = $listId;
- if ($listId)
- $list = $model->getByPk($listId);
- $this->_breadcrumbs->addUrl($list['title'], array('action' => 'show-newsletter', 'id' => $list['id']), 'newsletter', 'index');
- $this->_breadcrumbs->addNode('Просмотр списка рассылки');
- $this->view->lists = $model->getAll();
- $id = $this->_getParam('id');
- $model = new Newsletter_Model_Subscribers;
- $page = $this->_getParam('page', 1);
- $subscribers = $model->getGroup($id, $page);
- $this->view->list = (array) $subscribers->getItemsByPage($page);
- $this->view->paginator = $subscribers;
- $this->render('list/show');
- break;
- case 'add-newsletter':
- $this->_breadcrumbs->addNode('Добавление списка рассылки');
- $form = new Newsletter_Form_List_Add;
- $model = new Newsletter_Model_List;
- if ($this->getRequest()->isPost()) {
- $settings = new Newsletter_Model_Settings;
- $data = $this->getRequest()->getPost();
- unset($data['submit']);
- $listId = $model->insert($data);
- if ($settings->enable_uni) {
- //Интеграция с UniSender
- $uni = new Newsletter_Plugin_Uni;
- $res = $uni->createList(array('title' => $data['title']));
- if ($res['result']['id']) {
- $model->update(array('uni_id' => $res['result']['id']), 'id=' . $listId);
- }
- }
- $this->_redirect($this->view->adminUrl('newsletter', 'index'));
- } else {
- $this->view->form = $form;
- }
- $this->render('list/edit');
- break;
- case'del-newsletter':
- $id = $this->_getParam('id');
- $model = new Newsletter_Model_List;
- $model->update(array('deleted' => 1), 'id=' . $id);
- $this->_redirect($this->view->adminUrl('newsletter', 'index'));
- break;
- case 'search':
- $this->_breadcrumbs->addNode('Поиск');
- $query = $this->_getParam('q');
- $model = new Newsletter_Model_List;
- $this->view->lists = $model->getAll();
- $model = new Newsletter_Model_Subscribers;
- $result = $model->searchSubscribers($query);
- $this->view->list = $result;
- $this->render('list/search');
- break;
- case 'edit-subscriber':
- $this->_breadcrumbs->addNode('Редактирование подписчика');
- $form = new Newsletter_Form_Subscriber_Edit;
- $model = new Newsletter_Model_Subscribers;
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- //Zend_Debug::dump($data);
- $subscriber = $model->getByPk($data['id']);
- //exit(Zend_Debug::dump($subscriber));
- $model->delete($model->getAdapter()->quoteInto('email = ?', $subscriber['email']));
- $lists = array(); //Списки рассылок в которые включить пользователя
- foreach ($data['lists'] as $list) {
- $model->insert(array(
- 'user_id' => $subscriber['user_id'],
- 'name' => $data['name'],
- 'email' => $data['email'],
- 'list_id' => $list,
- 'status' => $data['status']
- ));
- $lists[] = $list;
- }
- //$lists[] = 0;
- $model->insert(array(
- 'user_id' => $subscriber['user_id'],
- 'name' => $data['name'],
- 'email' => $data['email'],
- 'list_id' => 0,
- 'status' => $data['status']
- ));
- //exit('aaa');
- $settings = new Newsletter_Model_Settings;
- //exit(var_dump($settings->enable_uni));
- if ($settings->enable_uni) {
- $uniSettings = new Newsletter_Model_Uni_Settings;
- $defaultList = $uniSettings->default_list_id;
- $uni = new Newsletter_Plugin_Uni;
- $res = $uni->exclude(array(
- 'contact_type' => 'email',
- 'contact' => $data['email']
- ));
- $nList = new Newsletter_Model_List;
- $lists = $nList->getLists($lists);
- //exit(Zend_Debug::dump($lists));
- $subscribeLists = array();
- foreach ($lists as $v) {
- $subscribeLists[] = $v['uni_id'];
- }
- $subscribeLists[] = $defaultList;
- //exit(Zend_Debug::dump($subscribeLists));
- $res = $uni->subscribe(
- array('list_ids' => implode(',', $subscribeLists),
- 'fields' => array('name' => $data['name'], 'email' => $data['email']),
- 'double_optin' => 3));
- if ($personId = $res['result']['person_id']) {
- $model->update(array('uni_person_id' => $personId), "email = '" . $data['email'] . "'");
- }
- }
- $this->_redirect($this->view->adminUrl('newsletter', 'index', array('action' => 'show-newsletter', 'id' => $this->_getParam('list'))));
- } else {
- $id = $this->_getParam('id');
- $data = $model->getByPk($id);
- $userSubscriptions = $model->getUserSubscriptions($data['email']);
- //Zend_Debug::dump($userSubscriptions);
- $lists = array();
- foreach ($userSubscriptions as $v) {
- $lists[] = $v['list_id'];
- }
- $lists = array_combine(array_values($lists), array_values($lists));
- $data['lists'] = $lists;
- $this->view->form = $form->populate($data);
- }
- $this->render('list/edit');
- break;
- case 'del-subscriber':
- $this->_helper->layout()->disableLayout();
- $listId = $this->_getParam('list');
- $model = new Newsletter_Model_Subscribers;
- $id = $this->_getParam('id');
- if ($listId) {
- $model->delete(
- array(
- $model->getAdapter()->quoteInto('id = ?', $id)
- ));
- } else {
- $data = $model->getByPk($id);
- $model->delete(array($model->getAdapter()->quoteInto('email = ?', $email)));
- }
- $this->_redirect($_SERVER['HTTP_REFERER']);
- break;
- }
- }
- /**
- * @title Импорт и создание подписчиков
- * @description Управление импортом подписчиков
- * @service
- */
- public function importAction() {
- $type = $this->_getParam('type');
- switch ($type) {
- case 'csv':
- $model = new Newsletter_Model_Subscribers;
- $modelLists = new Newsletter_Model_List; //Списки подписчиков
- $this->_breadcrumbs->addUrl('Управление подписчиками', array(), 'newsletter', 'index');
- $this->_breadcrumbs->addNode('Импорт из CSV');
- $form = new Newsletter_Form_Csv_Import;
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- $settings = new Newsletter_Model_Settings;
- $uniEnabled = $settings->enable_uni;
- //exit(var_dump($uniEnabled));
- if ($uniEnabled) {
- $uni = new Newsletter_Plugin_Uni;
- }
- $list = array(); //Список после преобразования.
- $subscribers = $newSubscribers = array();
- if (!mb_strlen($data['csv_text'])) {
- $file = file($_FILES['file']['tmp_name']);
- $name = time();
- $form->file->addFilter('Rename', APPLICATION_TMP_PATH . $name);
- $form->file->receive();
- $list = file(APPLICATION_TMP_PATH . $name);
- //Zend_Debug::dump($list);
- } else {
- $list = explode("\n", $data['csv_text']);
- }
- foreach ($list as $i => $v) {
- $list[$i] = explode(';', trim($v));
- $newSubscribers[$i] = $list[$i][0]; //Получаем E-Mail
- }
- //Zend_Debug::dump($list);
- $groupId = $this->_getParam('id', 0);
- $group = $model->getFullGroup($groupId);
- //exit(Zend_Debug::dump($group));
- foreach ($group as $v) {
- $subscribers[] = $v['email'];
- }
- //Zend_Debug::dump($subscribers);exit;
- $insertList = array();
- $keys = array_keys(array_diff($newSubscribers, $subscribers));
- foreach ($keys as $v) {
- $insertList[] = $list[$v];
- }
- // exit(var_dump($uniEnabled));
- if ($uniEnabled) {
- //exit('e');
- $settings = new Newsletter_Model_Uni_Settings;
- if (!$groupId) {
- $uniGroupId = $settings->default_list_id;
- } else {
- $group = $modelLists->getByPk($groupId);
- $uniGroupId = $group['uni_id'];
- }
- }
- $import = array();
- $insert = array();
- foreach ($insertList as $v) {
- $insert = array(
- 'list_id' => $groupId,
- 'email' => $v[0],
- 'name' => $v[1],
- 'status' => 'confirmed',
- 'created' => time()
- );
- if ($uniEnabled && $uniGroupId) {
- if (mb_strlen($v[0]) && mb_strlen($v[1])) {
- $import['emails'][] = $v[0];
- $import['names'][] = $v[1];
- }
- }
- $fields = array('email', 'name', 'email_list_ids', 'email_status');
- $data = array('field_names' => $fields);
- $model->insert($insert);
- }
- //Zend_Debug::dump($import, 'IMPORT');
- foreach ($import['emails'] as $i => $v) {
- $data['data'][$i][0] = $v;
- $data['data'][$i][1] = $import['names'][$i];
- $data['data'][$i][2] = $uniGroupId;
- $data['data'][$i][3] = 'active';
- }
- $data['double_optin'] = 1;
- $uni->importContacts($data);
- $this->_redirect($this->view->adminUrl('newsletter', 'index', array('action' => 'show-newsletter', 'id' => $groupId)));
- } else {
- $this->view->form = $form;
- }
- $this->render('import/csv');
- break;
- case 'single':
- $this->_breadcrumbs->addNode('Создание подписчика');
- $id = $this->_getParam('id', null);
- $form = new Newsletter_Form_Subscriber_Add(array('id' => $id));
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- if ($form->isValid($data)) {
- $lists = $data['lists'];
- foreach ($lists as $id => $v) {
- if (!$v) {
- unset($lists[$id]);
- }
- }
- unset($data['lists'], $data['submit']);
- $model = new Newsletter_Model_Subscribers;
- //exit(Zend_Debug::dump($lists));
- foreach ($lists as $listId => $v) {
- $model->insert(array(
- 'email' => $data['email'],
- 'name' => $data['name'],
- 'status' => $data['status'],
- 'list_id' => $listId,
- 'created' => time()
- ));
- }
- $model->insert(array(
- 'email' => $data['email'],
- 'name' => $data['name'],
- 'status' => $data['status'],
- 'list_id' => 0,
- 'created' => time()
- ));
- $settings = new Newsletter_Model_Settings;
- if ($settings->enable_uni) {
- $userLists = $model->getUserSubscriptions($data['email']);
- //exit(Zend_Debug::dump($userLists));
- $listsIds = array();
- foreach ($userLists as $v) {
- $listsIds[] = $v['list_id'];
- }
- $lists = new Newsletter_Model_List();
- $lists = $lists->getLists($listsIds);
- $str = array();
- foreach ($lists as $v) {
- if (strlen($v['uni_id']))
- $str[] = $v['uni_id'];
- }
- $uniSettings = new Newsletter_Model_Uni_Settings;
- $str[] = $uniSettings->default_list_id;
- $lists = implode(',', $str);
- $uni = new Newsletter_Plugin_Uni;
- $uni->updateOptInEmail(array(
- 'sender_name' => 'WebAkula',
- 'sender_email' => 'info@webakula.ua',
- 'subject' => 'Подтвердите Вашу подписку',
- 'body' => 'Здравствуйте! Ваша ссылка для подписки <a href="{{ConfirmUrl}}">{{ConfirmUrl}}</a>',
- 'list_id' => $str[0]));
- $res = $uni->subscribe(
- array('list_ids' => $lists,
- 'fields' => array('name' => $data['name'], 'email' => $data['email'], 'double_optin' => 0)));
- if ($res['result']['person_id']) {
- $model->update(array('uni_person_id' => $res['result']['person_id']), "email='" . $data['email'] . "'");
- }
- }
- $this->_redirect($this->view->adminUrl('newsletter', 'index'));
- } else {
- $this->view->form = $form;
- }
- } else {
- $id = $this->_getParam('id');
- $this->view->form = $form->populate(array($lists));
- }
- $this->render('import/single');
- break;
- case 'users':
- if ($this->getRequest()->isPost()) {
- $this->_helper->layout()->disableLayout();
- $data = $this->getRequest()->getPost();
- $model = new Newsletter_Model_List();
- //exit(Zend_Debug::dump($data));
- $table = new Users_Model_Table;
- $subscribers = unserialize($data['users']);
- $usersList = $table->getList($subscribers);
- $subsList = $emailToId = array();
- foreach ($usersList as $v) {
- $subsList[] = $v['email'];
- $emailToId[$v['email']] = $v;
- }
- if (mb_strlen($data['title'])) {
- //exit('aaa');
- $listId = $model->insert(array('title' => $data['title']));
- } else {
- $listId = $data['list_id'];
- }
- //exit(var_dump('foo'));
- $model = new Newsletter_Model_Subscribers();
- $list = $model->getList($subsList, $listId);
- $newEmails = array_diff($subsList, $list);
- foreach ($newEmails as $v) {
- $model->insert(array(
- 'email' => $v,
- 'user_id' => $emailToId[$v]['id'],
- 'list_id' => $listId,
- 'name' => $emailToId[$v]['first_name'],
- 'status' => 'confirmed',
- 'created' => time()
- ));
- }
- }
- exit('success');
- break;
- }
- }
- /**
- * @title Экспорт списков подписчиков
- * @description Экспорт отдельных списков или всего массива подписчиков
- * @service
- */
- public function exportAction() {
- $this->_helper->layout()->disableLayout();
- $delimiter = ';'; //Допиливать ли передачу делимитра?
- $model = new Newsletter_Model_Subscribers;
- $id = $this->_getParam('id');
- $group = $model->getFullGroup($id);
- $file = APPLICATION_TMP_PATH . time() . '.csv';
- //var_dump();
- $fields = array();
- foreach ($group as $v) {
- $fields[] = array($v['email'], $v['name']);
- }
- //exit(Zend_Debug::dump($fields));
- $fp = fopen($file, 'w');
- foreach ($fields as $v) {
- fputcsv($fp, $v, $delimiter);
- }
- fclose($fp);
- header('Content-Description: File Transfer');
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename=export-' . $id . '.csv');
- header('Content-Transfer-Encoding: binary');
- header('Expires: 0');
- header('Cache-Control: must-revalidate');
- header('Pragma: public');
- header('Content-Length: ' . filesize($file));
- readfile($file);
- exit;
- }
- /**
- * @title Шаблоны писем
- * @description Управление шаблонами рассылок
- */
- public function templatesAction() {
- $this->_breadcrumbs->addNode('Шаблоны писем');
- $action = $this->_getParam('action');
- switch ($action) {
- case 'index': default:
- $templates = scandir($this->_templatesPath);
- unset($templates[0], $templates[1]); //. и ..
- $this->view->path = $this->_templatesPath;
- $this->view->list = $templates;
- break;
- case 'create':
- if ($this->getRequest()->isPost()) {
- } else {
- }
- $this->render('templates/create');
- break;
- case 'img':
- $this->_helper->layout()->disableLayout();
- $template = $this->_getParam('template');
- $path = $this->_templatesPath . DIRECTORY_SEPARATOR . $template . DIRECTORY_SEPARATOR . 'preview.png';
- $img = imagecreatefrompng($path);
- header("Content-type: image/png");
- echo imagepng($img);
- exit;
- break;
- case 'edit':
- $this->view->headScript()->appendFile('/admin_style/js/codemirror/codemirror.js');
- $template = $this->_getParam('template');
- $path = $this->_templatesPath . DIRECTORY_SEPARATOR . $template . DIRECTORY_SEPARATOR . 'index.phtml';
- $content = file_get_contents($path);
- $this->view->template = $content;
- $this->render('templates/edit');
- break;
- }
- }
- /**
- * @title Рассылки
- * @description Управление непосредственно рассылками (создание, отправка, etc.)
- */
- public function processAction() {
- $action = $this->_getParam('action');
- switch ($action) {
- case 'index': default:
- $model = new Newsletter_Model_Mailings;
- $this->_breadcrumbs->addNode('Список рассылок');
- $data = $model->getAll(); //Вызов getAll(true) для
- $this->view->data = $data;
- $this->render('mailings/index');
- break;
- case 'create':
- $this->_breadcrumbs->addNode('Создание рассылки');
- $step = $this->_getParam('step', 1);
- switch ($step) {
- case 1:
- $templates = scandir($this->_templatesPath);
- unset($templates[0], $templates[1]); //. и ..
- $this->view->path = $this->_templatesPath;
- $this->view->list = $templates;
- $this->_breadcrumbs->addNode('Шаг 1: Выбор шаблона');
- $this->render('process/create/step1');
- break;
- case 2:
- $this->_breadcrumbs->addNode('Шаг 2: Выбор получателей');
- $template = $this->_getParam('template');
- $this->view->template = $template;
- $model = new Newsletter_Model_List;
- $this->view->lists = $model->getAll(true);
- $this->render('process/create/step2');
- break;
- case 3:
- $this->_breadcrumbs->addNode('Шаг 3: Добавление материалов');
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- //exit(Zend_Debug::dump($data));
- $session = new Zend_Session_Namespace('Newsletter_Create');
- $session->data['news'] = $data['news'];
- $url = $this->view->adminUrl('newsletter', 'process', array(
- 'lists' => $this->_getParam('lists'),
- 'action' => 'create',
- 'step' => 4,
- 'template' => $this->_getParam('template')));
- $this->_redirect($url);
- } else {
- $news = new News_Model_Table;
- $list = $news->getPublished();
- $this->view->news = $list;
- $model = new Catalog_Model_Categories;
- $data = $model->getJSON($this->_currentLanguageId);
- $this->view->catalog = json_decode($data, true);
- }
- $this->render('process/create/step3');
- break;
- case 4:
- $this->_breadcrumbs->addNode('Шаг 4: Оформление контента рассылки');
- $form = new Newsletter_Form_Newsletter_Create;
- $model = new Newsletter_Model_Mailings;
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- if ($form->isValid($data)) {
- unset($data['submit']);
- $data['created'] = time();
- $settings = new Newsletter_Model_Settings;
- if ($settings->enable_uni) {
- $uni = new Newsletter_Plugin_Uni;
- $lists = unserialize($data['lists']);
- //exit(Zend_Debug::dump($data));
- $parser = new Newsletter_Plugin_Parser;
- $listsModel = new Newsletter_Model_List();
- $lists = $listsModel->getLists($lists);
- // exit(Zend_Debug::dump($lists));
- $uniLists = array();
- $id = $model->insert($data);
- $data['content'] = $parser->parseContent($data['content'], array('site_newsletter_id'=>$id));
- foreach ($lists as $list) {
- $result = $uni->createEmailMessage(array(
- 'sender_name' => $settings->sender_name,
- 'sender_email' => $settings->sender_email,
- 'sender_name' => $settings->sender_name,
- 'subject' => $data['title'],
- 'body' => $data['content'],
- 'text_body' => $data['plain_text'],
- 'list_id' => $list['uni_id']
- ));
- if (!$result['error'])
- $uniMessages[] = $result['result']['message_id'];
- }
- $data['uni_messages'] = serialize($uniMessages);
- $model->update($data, 'id='.$id);
- }//exit(Zend_Debug::dump($result));;
- $session = new Zend_Session_Namespace('Newsletter_Create');
- $session->unsetAll();
- $this->_redirect($this->view->adminUrl('newsletter', 'process'));
- } else {
- $this->view->form = $form->populate($data);
- }
- } else {
- $session = new Zend_Session_Namespace('Newsletter_Create');
- $data = $session->data;
- //Zend_Debug::dump($data);
- //exit;
- $template = $this->_getParam('template');
- $path = $this->_templatesPath . DIRECTORY_SEPARATOR . $template . DIRECTORY_SEPARATOR; //Путь к папке шаблона
- $content = file_get_contents($path . 'index.phtml'); //Главный файл шаблона
- $viewObj = Zend_Layout::getMvcInstance()->getView(); //Для доступа к текущему окружению view из партиалов новотей и каталога
- /**
- * Для рендеринга вставки материалов (контента новостей и каталога)
- */
- $view = new Zend_View;
- $view->setScriptPath($path);
- /**
- * Обработка вставки из модуля "новости"
- */
- if (file_exists($path . 'news_items.phtml')) {
- if (count($data['news'])) {
- $model = new News_Model_Table;
- $newsList = array();
- foreach ($data['news'] as $v) {
- $newsList[] = $model->get($v, $this->_currentLanguageId);
- }
- }
- $view = new Zend_View;
- $view->setScriptPath($path);
- // Zend_Debug::dump($newsList);return false;
- $newsContent = $view->partial('news_items.phtml', array('data' => $newsList, 'view' => $viewObj));
- $content = str_ireplace('{NEWS_ITEMS}', $newsContent, $content); //Парсим тег {NEWS_ITEMS}
- }
- /**
- * Обработка вставки товаров из модуля "каталог"
- */
- if (file_exists($path . 'catalog_items.phtml')) {
- //exit(Zend_Debug::dump($session->data));
- if (count($data['products'])) {
- $catList = array();
- $model = new Catalog_Model_Products;
- foreach ($data['products'] as $v) {
- $catList[] = $model->get($v, $this->_currentLanguageId);
- }
- // exit(Zend_Debug::dump($catList));
- //exit(Zend_Debug::dump($data['products']));
- $productsContent = $view->partial('catalog_items.phtml', array('data' => $catList, 'view' => $viewObj));
- $content = str_ireplace('{CATALOG_ITEMS}', $productsContent, $content); //Парсим тег {CATALOG_ITEMS}
- }
- }
- //$session->unsetAll();
- $parser = new Newsletter_Plugin_Parser; //Базовый парсер контента
- $content = $parser->parseContent($content, array(
- 'site_url' => 'http://' . $_SERVER['HTTP_HOST'],
- )); //Подставляем site_url
- //exit(var_dump($content));
- $this->view->form = $form->populate(array(
- 'content' => $content,
- 'template' => $this->_getParam('template'),
- 'lists' => serialize($this->_getParam('lists'))
- ));
- $this->render('process/create/step4');
- }
- break;
- }
- break;
- case 'test':
- $uni = new Newsletter_Plugin_Uni;
- $result = $uni->createCampaign(array(
- 'message_id' => 17384937
- ));
- exit(var_dump($result));
- break;
- case 'add-contents':
- $session = new Zend_Session_Namespace('Newsletter_Create');
- $id = $this->_getParam('id');
- if (is_null($session->data['products'])) {
- $session->data['products'] = array();
- }
- $session->data['products'][] = $id;
- $session->data['products'] = array_unique($session->data['products']);
- //exit(Zend_Debug::dump($session->data['products']));
- // exit(var_dump($id, $session->data['products']));
- $model = new Catalog_Model_Products;
- if (count($session->data['products'])) {
- $list = $model->getArray($session->data['products']);
- } else {
- $list = array();
- }
- //Zend_Debug::dump($list);exit;
- $ret = array();
- foreach ($list as $v) {
- $ret[$v['data_id']] = $v['title'];
- }
- exit(json_encode($ret));
- break;
- case 'del-contents':
- $session = new Zend_Session_Namespace('Newsletter_Create');
- // $session->unsetAll();exit;
- $id = $this->_getParam('id');
- $type = $this->_getParam('type');
- switch ($type) {
- case 'catalog':
- $key = array_search($id, $session->data['products']);
- if ($key !== false) {
- unset($session->data['products'][$key]);
- }
- $model = new Catalog_Model_Products;
- if (count($session->data['products'])) {
- $list = $model->getArray($session->data['products']);
- } else {
- $list = array();
- }
- $ret = array();
- foreach ($list as $v) {
- $ret[$v['data_id']] = $v['title'];
- }
- //exit(Zend_Debug::dump($session->data['products']));
- exit(json_encode($ret));
- break;
- }
- break;
- case 'test':
- $session = new Zend_Session_Namespace('Newsletter_Create');
- // exit(Zend_Debug::dump($session->data));
- break;
- case 'edit':
- $this->_breadcrumbs->addNode('Редактирование рассылки');
- $form = new Newsletter_Form_Newsletter_Edit;
- $model = new Newsletter_Model_Mailings;
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- $id = $data['id'];
- unset($data['submit'], $data['id']);
- $model->update($data, 'id=' . $id);
- $this->_redirect($this->view->adminUrl('newsletter', 'process'));
- } else {
- $id = $this->_getParam('id');
- $data = $model->getByPk($id);
- $this->view->form = $form->populate($data);
- $this->render('process/edit');
- }
- break;
- case 'stats':
- $this->_breadcrumbs->addNode('Информация о рассылке');
- $id = $this->_getParam('id');
- $model = new Newsletter_Model_Mailings;
- $data = $model->getByPk($id);
- if ($data['status'] == 'new') {
- $lists = unserialize($data['lists']);
- $model = new Newsletter_Model_Subscribers;
- $subscribers = $model->getMailingList($lists);
- $data['approximate_receivers'] = count($subscribers);
- }
- if ($data['status'] == 'formed') {
- $this->view->headScript()->appendFile('/admin_style/js/admin/newsletter.js');
- $model = new Newsletter_Model_Mailings_Stats;
- $data['receivers'] = $model->countReceivers($data['id']);
- $data['sent'] = $model->countSent($data['id']);
- }
- if ($data['status'] == 'completed') {
- $model = new Newsletter_Model_Mailings_Stats;
- $stats = $model->getStats($id);
- $this->view->stats = $stats;
- }
- $this->view->data = $data;
- $this->render('process/stats');
- break;
- case 'confirm':
- $id = $this->_getParam('id');
- $model = new Newsletter_Model_Mailings;
- $data = $model->getByPk($id);
- $lists = unserialize($data['lists']);
- $model->update(array('status' => 'formed'), 'id=' . $id);
- //
- $settings = new Newsletter_Model_Settings;
- if ($settings->enable_uni) {
- //exit(Zend_Debug::dump($data));
- $uni = new Newsletter_Plugin_Uni;
- $lists = unserialize($data['lists']);
- $subscribers = array();
- //exit(Zend_Debug::dump($lists));
- $listsModel = new Newsletter_Model_List;
- $lists = $listsModel->getLists($lists);
- // exit(Zend_Debug::dump($lists));
- foreach ($lists as $v) {
- $data = $uni->exportContacts(array(
- 'list_id' => $v['uni_id'],
- 'field_names' => array('email'),
- 'email_status' => 'active'
- ));
- foreach ($data['result']['data'] as $email) {
- $subscribers[] = $email[0];
- }
- $data = $uni->exportContacts(array(
- 'list_id' => $v['uni_id'],
- 'field_names' => array('email'),
- 'email_status' => 'new'
- ));
- foreach ($data['result']['data'] as $email) {
- $subscribers[] = $email[0];
- }
- //Zend_Debug::dump($data);
- }
- $subscribersModel = new Newsletter_Model_Subscribers;
- $subscribers = $subscribersModel->getEmails($subscribers);
- //exit('foo');
- } else {
- $model = new Newsletter_Model_Subscribers;
- $subscribers = $model->getMailingList($lists);
- }
- //$data['approximate_receivers'] = count($subscribers);
- $model = new Newsletter_Model_Mailings_Stats;
- //exit(Zend_Debug::dump($subscribers));
- $insert = array();
- foreach ($subscribers as $v) {
- $insert[] = array(
- 'mailing_id' => $id,
- 'receiver_id' => $v['id'],
- 'receiver_data' => serialize($v),
- 'created' => time()
- );
- }
- $model->multiInsert($insert);
- $this->_redirect($this->view->adminUrl('newsletter', 'process', array('action' => 'stats', 'id' => $id)));
- break;
- case 'send':
- $this->_helper->layout()->disableLayout();
- $count = $this->_getParam('count'); //Количество писем
- $id = $this->_getParam('id'); // ИД рассылки
- $model = new Newsletter_Model_Mailings;
- $mail = $model->getByPk($id);
- $model->update(array('status' => 'process'), 'id=' . $id);
- $receiversTable = new Newsletter_Model_Mailings_Stats;
- $receivers = $receiversTable->getReceivers($id, $count);
- $settings = new Newsletter_Model_Settings;
- $from = $settings->sender_email;
- $fromName = $settings->sender_name;
- $replyTo = $settings->reply_to;
- $transport = null;
- if ($settings->enable_smtp) {
- $config = array(
- 'auth' => 'login',
- 'username' => $settings->smtp_login,
- 'password' => $settings->smtp_password
- );
- if (mb_strlen($port = $settings->smtp_port)) {
- $config['port'] = $port;
- }
- $transport = new Zend_Mail_Transport_Smtp($settings->smtp_host, $config);
- }
- $mailer = new Core_Mail_Sender('UTF-8');
- foreach ($receivers as $v) {
- $receiverData = unserialize($v['receiver_data']);
- $receiverData['mailing_id'] = $id;
- $receiverData['row_id'] = $v['id'];
- $sender = clone $mailer;
- $sender->addTo($receiverData['email'], $receiverData['email']);
- $sender->setFrom($from, $fromName);
- $sender->setBodyHtml($mailer->parseContent($mail['content'], $receiverData), 'UTF-8', Zend_Mime::ENCODING_BASE64);
- $sender->setBodyText($mail['plain_text'], 'UTF-8', Zend_Mime::ENCODING_BASE64);
- $sender->addHeader('X-MailGenerator', 'WebakulaAngryCms');
- $sender->addHeader('Precedence', 'bulk');
- $sender->addHeader('List-Unsubscribe', $mailer->getUnsubscribeLink($receiverData['email']));
- $sender->setSubject($mail['title']);
- $sender->setReplyTo($replyTo);
- $sender->send($transport);
- $receiversTable->update(array('processed' => 1), 'id=' . $v['id']);
- }
- $total = $receiversTable->countReceivers($id);
- $sent = $receiversTable->countSent($id);
- $finished = ($total == $sent);
- if ($finished) {
- $model->update(array('status' => 'completed'), 'id=' . $id);
- }
- exit(json_encode(array('total' => $total, 'sent' => $sent, 'finished' => $finished)));
- break;
- case 'delete':
- $id = $this->_getParam('id');
- $this->_helper->layout()->disableLayout();
- $model = new Newsletter_Model_Mailings;
- $model->update(array('deleted' => 1), 'id=' . $id);
- $this->_redirect($_SERVER['HTTP_REFERER']);
- exit;
- break;
- case 'confirm-uni':
- $this->_helper->layout()->disableLayout();
- $model = new Newsletter_Model_Mailings;
- $id = $this->_getParam('id');
- $url = 'http://' . $_SERVER['HTTP_HOST'] . $this->view->url(array('module' => 'newsletter',
- 'controller' => 'index', 'action' => 'mail-list', 'id' => strrev(md5($id))), 'default');
- $data = $model->getByPk($id);
- //exit(var_dump($data));
- $msg = unserialize($data['uni_messages']);
- $messageId = $msg[0]; //TODO: Убрать сериализацию нафиг!
- $uni = new Newsletter_Plugin_Uni;
- $result = $uni->createCampaign(array(
- 'message_id' => $messageId,
- 'track_read' => 1,
- 'contacts_url' => $url
- ));
- //
- if ($result['result']['status'] != 'waits_censor') {
- $model->update(array('uni_campaign_id' => $result['result']['campaign_id']), 'id=' . $id);
- }
- exit(Zend_Debug::dump($result));
- break;
- case 'uni-stats':
- $this->_breadcrumbs->addNode('Статистика');
- $id = $this->_getParam('id'); //Внутренний ID рассылки
- $mailings = new Newsletter_Model_Mailings;
- $stats = new Newsletter_Model_Mailings_Stats;
- $mailing = $mailings->getByPk($id);
- Zend_Debug::dump($mailing);
- $this->view->data = $mailing;
- $this->render('process/uni-stats');
- break;
- }
- }
- /**
- * @title Настройки модуля
- * @description Управление настройками модуля
- */
- public function settingsAction() {
- $this->_breadcrumbs->addNode('Настройки модуля');
- $form = new Newsletter_Form_Settings;
- $model = new Newsletter_Model_Settings;
- if ($this->getRequest()->isPost()) {
- $data = $this->getRequest()->getPost();
- foreach ($data as $k => $v) {
- $model->update(array('value' => $v), "prop='$k'");
- }
- $this->_redirect($this->view->adminUrl('newsletter', 'settings'));
- } else {
- $this->view->form = $form;
- }
- }
- /**
- * @title UniSender
- * @description Управление подпиской через UniSender
- */
- public function uniAction() {
- $this->_breadcrumbs->addNode('UniSender');
- $action = $this->_getParam('action', 'index');
- switch ($action) {
- case 'index': default:
- break;
- }
- }
- }
Add Comment
Please, Sign In to add comment