} } } if ($mode == 'm_update') { if (!empty($_REQUEST['subscribers'])) { foreach ($_REQUEST['subscribers'] as $subscriber_id => $v) { fn_update_subscriber($v, $subscriber_id); } } } if ($mode == 'm_delete') { fn_delete_subscribers($_REQUEST['subscriber_ids']); } if ($mode == 'delete') { if (!empty($_REQUEST['subscriber_id'])) { fn_delete_subscribers((array) $_REQUEST['subscriber_id']); } } return array(CONTROLLER_STATUS_OK, 'subscribers' . $suffix); } if ($mode == 'manage') { list($subscribers, $search) = fn_get_subscribers($_REQUEST, Registry::get('settings.Appearance.admin_elements_per_page')); foreach ($subscribers as &$subscriber) { if (!empty($subscriber['list_ids'])) { $subscriber['mailing_lists'] = array(); foreach (explode(',', $subscriber['list_ids']) as $list_id) { $subscriber['mailing_lists'][$list_id] = fn_get_mailing_list_data($list_id, DESCR_SL); // get additional user-specific data for each mailing list (like lang_code) $_where = array('list_id' => $list_id, 'subscriber_id' => $subscriber['subscriber_id']); $subscriber_list_data = db_get_row("SELECT * FROM ?:user_mailing_lists WHERE ?w", $_where); $subscriber['mailing_lists'][$list_id] = array_merge($subscriber['mailing_lists'][$list_id], $subscriber_list_data);
die('Access denied'); } if ($_SERVER['REQUEST_METHOD'] == "POST") { if ($mode == 'place_order' || $mode == 'subscribe_customer') { $subscriber = db_get_row("SELECT * FROM ?:subscribers WHERE email = ?s", $_SESSION['cart']['user_data']['email']); if (!empty($_REQUEST['mailing_lists']) && !fn_is_empty($_REQUEST['mailing_lists'])) { if (empty($subscriber)) { $_data = array('email' => $_SESSION['cart']['user_data']['email'], 'timestamp' => TIME); $subscriber_id = db_query("INSERT INTO ?:subscribers ?e", $_data); } else { $subscriber_id = $subscriber['subscriber_id']; } fn_update_subscriptions($subscriber_id, $_REQUEST['mailing_lists'], NULL, fn_get_notification_rules(true)); } elseif (isset($_REQUEST['mailing_lists'])) { if (!empty($subscriber)) { fn_delete_subscribers($subscriber['subscriber_id']); } } } if ($mode == 'subscribe_customer') { return array(CONTROLLER_STATUS_REDIRECT, 'onestepcheckout.checkout'); } } if ($mode == 'checkout') { $email = db_get_field("SELECT email FROM ?:users WHERE user_id = ?i", $_SESSION['auth']['user_id']); if ((empty($email) || $_SESSION['auth']['user_id'] == 0) && !empty($_SESSION['cart']['user_data']['email'])) { $email = $_SESSION['cart']['user_data']['email']; } $mailing_lists = db_get_hash_array("SELECT * FROM ?:subscribers INNER JOIN ?:user_mailing_lists ON ?:subscribers.subscriber_id = ?:user_mailing_lists.subscriber_id WHERE ?:subscribers.email = ?s", 'list_id', $email); Registry::get('view')->assign('user_mailing_lists', $mailing_lists); list($page_mailing_lists) = fn_get_mailing_lists();
/** * Save user mailing lists settings. * * @param int $subscriber_id * @param array $user_list_ids * @param mixed $confirmed - if passed, subscription status set to passed value, if null, depends on autoresponder * @param boolean $notify * @param string $lang_code */ function fn_update_subscriptions($subscriber_id, $user_list_ids = array(), $confirmed = NULL, $force_notification = array(), $lang_code = CART_LANGUAGE) { if (!empty($user_list_ids)) { list($lists) = fn_get_mailing_lists(); $subscriber = db_get_row("SELECT * FROM ?:subscribers WHERE subscriber_id = ?i", $subscriber_id); // to prevent user from subscribing to hidden and disabled mailing lists by manual link edit if (AREA != 'A') { foreach ($user_list_ids as $k => $l_id) { if ($lists[$l_id]['status'] != 'A') { unset($user_list_ids[$k]); } } } foreach ($user_list_ids as $list_id) { $subscribed = db_get_array("SELECT confirmed FROM ?:user_mailing_lists WHERE subscriber_id = ?i AND list_id = ?i", $subscriber_id, $list_id); $already_confirmed = !empty($subscribed['confirmed']) ? true : false; $already_subscribed = !empty($subscribed) ? true : false; if ($already_confirmed) { $_confirmed = 1; } else { if (is_array($confirmed)) { $_confirmed = !empty($confirmed[$list_id]['confirmed']) ? $confirmed[$list_id]['confirmed'] : 0; } else { $_confirmed = !empty($lists[$list_id]['register_autoresponder']) ? 0 : 1; } } if ($already_subscribed && $already_confirmed == $_confirmed) { continue; } $_data = array('subscriber_id' => $subscriber_id, 'list_id' => $list_id, 'activation_key' => md5(uniqid(rand())), 'unsubscribe_key' => md5(uniqid(rand())), 'email' => $subscriber['email'], 'timestamp' => TIME, 'lang_code' => $lang_code, 'confirmed' => $_confirmed); db_query("REPLACE INTO ?:user_mailing_lists ?e", $_data); // send confirmation email for each mailing list if (empty($_confirmed)) { fn_send_confirmation_email($subscriber_id, $list_id, $subscriber['email'], $lang_code); } } } // Delete unchecked mailing lists if (!empty($user_list_ids)) { $lists_to_delete = db_get_field("SELECT list_id FROM ?:user_mailing_lists WHERE subscriber_id = ?i AND list_id NOT IN (?n)", $subscriber_id, $user_list_ids); if (!empty($lists_to_delete)) { db_query("DELETE FROM ?:user_mailing_lists WHERE subscriber_id = ?i AND list_id IN (?n)", $subscriber_id, $lists_to_delete); // Delete subscriber in the frontend if all lists are unchecked if (AREA == 'C') { $c = db_get_field("SELECT COUNT(*) FROM ?:user_mailing_lists WHERE subscriber_id = ?i", $subscriber_id); if (empty($c)) { db_query("DELETE FROM ?:subscribers WHERE subscriber_id = ?i", $subscriber_id); } } } // Delete subscriber in the frontend area if all lists are unchecked } else { fn_delete_subscribers(array($subscriber_id), AREA == 'C'); } }