/** * Форма подписки на рассылку * @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'); }
/** * Обработка 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; }
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)); }
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; }