示例#1
0
 if ($mode == 'm_update') {
     foreach ($_REQUEST['subscribers'] as $subscriber_id => $v) {
         db_query("UPDATE ?:subscribers SET ?u WHERE subscriber_id = ?i", $v, $subscriber_id);
         if (!empty($v['list_ids'])) {
             foreach ($v['list_ids'] as $list_id) {
                 $_data = array('confirmed' => $v['mailing_lists'][$list_id]['confirmed'], 'lang_code' => $v['mailing_lists'][$list_id]['lang_code'], 'format' => $v['mailing_lists'][$list_id]['format']);
                 $list_exist = db_get_field('SELECT list_id FROM ?:user_mailing_lists WHERE subscriber_id = ?i AND list_id = ?i', $subscriber_id, $list_id);
                 if (empty($list_exist)) {
                     $_data['subscriber_id'] = $subscriber_id;
                     $_data['list_id'] = $list_id;
                     $_data['timestamp'] = TIME;
                     $_data['activation_key'] = md5(uniqid(rand()));
                     $_data['unsubscribe_key'] = md5(uniqid(rand()));
                     db_query("INSERT INTO ?:user_mailing_lists ?e", $_data);
                     if (empty($v['mailing_lists'][$list_id]['confirmed'])) {
                         fn_send_confirmation_email($subscriber_id, $list_id, $v['email'], $v['mailing_lists'][$list_id]['format'], $v['mailing_lists'][$list_id]['lang_code']);
                     }
                 } else {
                     db_query("UPDATE ?:user_mailing_lists SET ?u WHERE subscriber_id = ?i AND list_id = ?i", $_data, $subscriber_id, $list_id);
                 }
             }
             db_query("DELETE FROM ?:user_mailing_lists WHERE subscriber_id = ?i AND list_id NOT IN(?n)", $subscriber_id, $v['list_ids']);
         } else {
             db_query("DELETE FROM ?:user_mailing_lists WHERE subscriber_id = ?i", $subscriber_id);
         }
     }
 }
 if ($mode == 'delete') {
     fn_delete_subscribers($_REQUEST['subscriber_ids']);
 }
 return array(CONTROLLER_STATUS_OK, "subscribers.manage");
示例#2
0
/**
* 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');
    }
}
示例#3
0
/**
* Save user mailing lists settings.
*
* @param int $subscriber_id
* @param array $user_lists_ids
* @param int $format - newsletters format for that user
* @param int $mode - updating mode for $user_lists_ids. We need this to disable unchecked mailing lists if user disables them on profile, but we don't need that for subscription block (we just subscribe to checked there)
* NEWSLETTER_SAVE_UNCHECKED - for sidebar mode
* NEWSLETTER_DELETE_UNCHECKED - for user profile mode
* NEWSLETTER_ONLY_CHECKED - for admin user picker mode, when all $user_lists_ids are enabled
* @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_lists_ids = array(), $format = NEWSLETTER_FORMAT_TXT, $mode = NEWSLETTER_SAVE_UNCHECKED, $confirmed = NULL, $force_notification = array(), $lang_code = CART_LANGUAGE)
{
    $lists = fn_get_mailing_lists();
    $subscriber = db_get_row("SELECT * FROM ?:subscribers WHERE subscriber_id = ?i", $subscriber_id);
    $exising_subscriptions = db_get_fields("SELECT list_id FROM ?:user_mailing_lists WHERE subscriber_id = ?i", $subscriber_id);
    // to prevent user from subscribing to hidden and disabled mailing lists by manual link edit
    if (AREA != 'A') {
        $_statuses = array('D', 'H');
        $denied = db_get_fields("SELECT list_id FROM ?:mailing_lists WHERE status in (?a)", 'list_id', $_statuses);
        foreach ($denied as $denied_list_id) {
            unset($user_lists_ids[$denied_list_id]);
        }
    }
    $checked_lists_ids = array();
    $unchecked_lists_ids = array();
    // if array with list ids as values passed
    if ($mode == NEWSLETTER_ONLY_CHECKED) {
        $checked_lists_ids = $user_lists_ids;
        // if array with list_id => enabled pairs passed
    } else {
        foreach ((array) $user_lists_ids as $list_id => $enabled) {
            if ($enabled) {
                $checked_lists_ids[] = $list_id;
            } else {
                $unchecked_lists_ids[] = $list_id;
            }
        }
    }
    foreach ($checked_lists_ids as $list_id) {
        $_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 == NULL ? !empty($lists[$list_id]['register_autoresponder']) ? 0 : 1 : ($confirmed ? 1 : 0), 'format' => intval($format));
        db_query("REPLACE INTO ?:user_mailing_lists ?e", $_data);
        // send confirmation email for each mailing list
        if (!empty($force_notification['C'])) {
            fn_send_confirmation_email($subscriber_id, $list_id, $subscriber['email'], $format, $lang_code);
        }
    }
    if ($mode == NEWSLETTER_DELETE_UNCHECKED && !empty($unchecked_lists_ids)) {
        db_query("DELETE FROM ?:user_mailing_lists WHERE subscriber_id=?i AND list_id IN (?n)", $subscriber_id, $unchecked_lists_ids);
        $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);
        }
    }
}