Beispiel #1
0
 /**
  * Форма подписки на рассылку
  * @param $id
  * @param string $tpl
  *
  * @return string HTML code
  */
 public static function form($id, $tpl = 'subscribe.widget.form')
 {
     $subscribe = subscribe_model_Subscribe::getById($id);
     if ($subscribe) {
         Resources::linkFileFooter(cot::$cfg['modules_dir'] . '/subscribe/js/subscriber.js');
     }
     $view = new View();
     $view->subscribe = $subscribe;
     if (empty($tpl)) {
         $tpl = array('subscribe', 'widget', 'form');
         if (!empty($subscribe) && !empty($subscribe->alias)) {
             $tpl[] = $subscribe->alias;
         }
     }
     return $view->render($tpl, 'module');
 }
Beispiel #2
0
 /**
  * Обработка Ajax запроса на подписку на рассылку
  * Используется виджетом
  * Принимает email пользователя
  * Допускается подписка неавторизованными пользователями (они должны подтвердить email)
  */
 public function ajxSubscribeAction()
 {
     global $db_users;
     $ret = array('error' => '', 'message' => '');
     $id = cot_import('id', 'P', 'INT');
     $email = cot_import('email', 'P', 'TXT');
     if (!$id) {
         $ret['error'] = cot::$L['subscribe_err_not_found'];
         echo json_encode($ret);
         exit;
     }
     $subscribe = subscribe_model_Subscribe::getById($id);
     if (!$subscribe) {
         $ret['error'] = cot::$L['subscribe_err_not_found'];
         echo json_encode($ret);
         exit;
     }
     if (!$subscribe->active) {
         $ret['error'] = cot::$L['subscribe_err_disabled'];
         echo json_encode($ret);
         exit;
     }
     if (empty($email)) {
         $ret['error'] = cot::$L['field_required'] . ': ' . cot::$L['Email'];
         echo json_encode($ret);
         exit;
     }
     $tmp = subscribe_checkEmail($email);
     if ($tmp !== true) {
         $ret['error'] = $tmp;
         echo json_encode($ret);
         exit;
     }
     $email = mb_strtolower($email);
     $subscriber = subscribe_model_Subscriber::fetchOne(array(array('subscribe', $id), array('email', $email)));
     if ($subscriber) {
         if ($subscriber->active) {
             $ret['error'] = sprintf(cot::$L['subscribe_err_user_subscribed'], $email, $subscribe->title);
             echo json_encode($ret);
             exit;
         }
     } else {
         $subscriber = new subscribe_model_Subscriber();
     }
     $sql = cot::$db->query("SELECT * FROM {$db_users} WHERE user_email = ? LIMIT 1", $email);
     $user = $sql->fetch();
     $subscriber->subscribe = $id;
     $subscriber->email = $email;
     if (!empty($user)) {
         $subscriber->user = $user['user_id'];
         $subscriber->name = cot_user_full_name($user);
     }
     $needConfirm = cot::$cfg['subscribe']['guestConfirmMail'];
     if (cot::$usr['id'] > 0) {
         if (cot::$usr['id'] == $user['user_id'] || cot::$usr['isadmin']) {
             $needConfirm = false;
         }
     }
     if ($needConfirm) {
         // Возможно пользователь уже подтверждал свой email
         $tmp = subscribe_model_Subscriber::count(array(array('email', $email), array('email_valid', 1)));
         if ($tmp > 0) {
             $needConfirm = false;
         }
     }
     if (!$needConfirm) {
         $subscriber->email_valid = 1;
         $subscriber->email_valid_date = date('Y-m-d H:i:s', cot::$sys['now']);
         $subscriber->active = 1;
     }
     // Сохранение
     $subscriber->save();
     $ret['message'] = sprintf(cot::$L['subscribe_msg_you_subscribed'], $subscribe->title);
     // Письмо для поджтверждения e-mail адреса
     if ($needConfirm) {
         $confirmUrl = cot_url('subscribe', array('m' => 'user', 'a' => 'confirm', 'code' => $subscriber->unsubscr_code));
         if (!cot_url_check($confirmUrl)) {
             $confirmUrl = cot::$cfg['mainurl'] . '/' . $confirmUrl;
         }
         $mailView = new View();
         $mailView->subscriber = $subscriber;
         $mailView->subscribe = $subscribe;
         $mailView->confirmUrl = $confirmUrl;
         $mailTpl = array('subscribe', 'mail_confirm', cot::$usr['lang']);
         $mailBody = $mailView->render($mailTpl);
         cot_mail($email, cot::$L['subscribe_confirm'], $mailBody, '', false, null, true);
         $ret['message'] .= cot::$L['subscribe_wait_confirm'];
     }
     echo json_encode($ret);
     exit;
 }
Beispiel #3
0
 public function deleteAction()
 {
     $id = cot_import('id', 'G', 'INT');
     $d = cot_import('d', 'G', 'INT');
     $backUrlParams = array('m' => 'subscribe');
     if (!empty($d)) {
         $backUrlParams['d'] = $d;
     }
     // Фильтры из списка
     $f = cot_import('f', 'G', 'ARR');
     if (!empty($f)) {
         foreach ($f as $key => $val) {
             if ($key == 'id') {
                 continue;
             }
             $backUrlParams["f[{$key}]"] = $val;
         }
     }
     $sort = cot_import('s', 'G', 'ALP');
     // order field name
     $way = cot_import('w', 'G', 'ALP', 4);
     // order way (asc, desc)
     if ($sort != 'title') {
         $backUrlParams['s'] = $sort;
     }
     if ($way != 'asc') {
         $backUrlParams['w'] = $way;
     }
     if (!$id) {
         cot_error(cot::$L['subscribe_err_not_found']);
         cot_redirect(cot_url('admin', $backUrlParams));
     }
     $item = subscribe_model_Subscribe::getById($id);
     if (!$item) {
         cot_error(cot::$L['subscribe_err_not_found']);
         cot_redirect(cot_url('admin', $backUrlParams));
     }
     $title = $item->title;
     $item->delete();
     cot_message(sprintf(cot::$L['subscribe_deleted'], $title));
     cot_redirect(cot_url('admin', $backUrlParams, '', true));
 }
Beispiel #4
0
 public function ajxEditAction()
 {
     global $db_users;
     $ret = array('error' => '');
     $id = cot_import('subrid', 'P', 'INT');
     unset($_POST['id'], $_POST['subrid']);
     if ($id > 0) {
         $subscriber = subscribe_model_Subscriber::getById($id);
         if (!$subscriber) {
             $ret['error'] = cot::$L['subscribe_err_subscriber_not_found'];
             echo json_encode($ret);
             exit;
         }
     } else {
         $subscriber = new subscribe_model_Subscriber();
     }
     if (!empty($_POST['email'])) {
         $_POST['email'] = mb_strtolower($_POST['email']);
     }
     $subscriber->setData($_POST);
     $error = array();
     $subscr = null;
     $tmp = $subscriber->rawValue('subscribe');
     if (empty($tmp)) {
         $error[] = cot::$L['field_required'] . ': ' . cot::$L['subscribe_subscribe'];
     } else {
         $subscr = subscribe_model_Subscribe::getById($subscriber->rawValue('subscribe'));
         if (!$subscr) {
             $error[] = cot::$L['subscribe_err_not_found'];
         }
     }
     $user = null;
     if (!empty($subscriber->user)) {
         $user = cot_user_data($subscriber->user);
         // Если получили данные пользователя, то e-mail всегда берем из профиля
         if (isset($user['user_email'])) {
             $subscriber->email = mb_strtolower($user['user_email']);
         }
     }
     if (empty($subscriber->email)) {
         $error[] = cot::$L['field_required'] . ': ' . cot::$L['Email'];
     } else {
         $tmp = subscribe_checkEmail($subscriber->email);
         if ($tmp !== true) {
             $error[] = $tmp;
         }
         if ($subscriber->rawValue('subscribe') > 0) {
             if (!empty($subscr)) {
                 $cond = array(array('email', $subscriber->email), array('subscribe', $subscr->id));
                 if ($subscriber->id > 0) {
                     $cond[] = array('id', $subscriber->id, '<>');
                 }
                 $cnt = subscribe_model_Subscriber::count($cond);
                 if ($cnt > 0) {
                     $error[] = sprintf(cot::$L['subscribe_err_user_subscribed'], $subscriber->email, htmlspecialchars($subscr->title));
                 }
             }
         }
     }
     if (!empty($error)) {
         $ret['error'] = implode('<br />', $error);
         echo json_encode($ret);
         exit;
     }
     if (empty($subscriber->name) && (!empty($subscriber->email) || !empty($user))) {
         if (!empty($user)) {
             $subscriber->name = cot_user_full_name($user);
         } else {
             $sql = cot::$db->query("SELECT * FROM {$db_users} WHERE user_email = ? LIMIT 1", $subscriber->email);
             $user = $sql->fetch();
             if (!empty($user)) {
                 $subscriber->name = cot_user_full_name($user);
                 if (empty($subscriber->user)) {
                     $subscriber->user = $user['user_id'];
                 }
             }
         }
     }
     // Админ при сохранении подтверждает e-mail
     if (!$subscriber->email_valid && (empty($subscriber->id) || $subscriber->active)) {
         $subscriber->email_valid = 1;
         $subscriber->email_valid_date = date('Y-m-d H:i:s', cot::$sys['now']);
     }
     // Сохранение
     $subscriber->save();
     cot_message(cot::$L['Saved']);
     echo json_encode($ret);
     exit;
 }