/**
     * Add users for this campaign in DB
     */
    function add_users()
    {
        global $DB;
        // Get user IDs from current filterset of users list
        $new_users_IDs = get_filterset_user_IDs();
        if (count($new_users_IDs)) {
            // Users are found in the filterset
            // Get all active users which accept newsletter email
            $new_users_SQL = get_newsletter_users_sql($new_users_IDs);
            $new_users = $DB->get_col($new_users_SQL->get());
            // Remove the users which didn't accept email before
            $DB->query('DELETE FROM T_email__campaign_send
				WHERE csnd_camp_ID = ' . $DB->quote($this->ID) . '
				 AND csnd_emlog_ID IS NULL');
            // Get users which already accept newsletter email
            $old_users = $this->get_users('accept');
            // Exclude old users from new users (To store value of csnd_emlog_ID)
            $new_users = array_diff($new_users, $old_users);
            if (count($new_users)) {
                // Insert new users for this campaign
                $insert_SQL = 'INSERT INTO T_email__campaign_send ( csnd_camp_ID, csnd_user_ID ) VALUES';
                foreach ($new_users as $user_ID) {
                    $insert_SQL .= "\n" . '( ' . $DB->quote($this->ID) . ', ' . $DB->quote($user_ID) . ' ),';
                }
                $DB->query(substr($insert_SQL, 0, -1));
            }
        }
    }
/**
 * Get number of users for newsletter from UserList filterset
 *
 * @return array Numbers of users:
 *     'all' - Currently selected recipients (Accounts which accept newsletter emails)
 *     'active' - Already received (Accounts which have already been sent this newsletter)
 *     'newsletter' - Ready to send (Accounts which have not been sent this newsletter yet)
 */
function get_newsletter_users_numbers()
{
    $numbers = array('all' => 0, 'active' => 0, 'newsletter' => 0);
    $users_IDs = get_filterset_user_IDs();
    if (count($users_IDs)) {
        // Found users in the filterset
        global $DB;
        $numbers['all'] = count($users_IDs);
        // Get number of all active users
        $SQL = new SQL();
        $SQL->SELECT('COUNT( * )');
        $SQL->FROM('T_users');
        $SQL->WHERE('user_ID IN ( ' . implode(', ', $users_IDs) . ' )');
        $SQL->WHERE_and('user_status IN ( \'activated\', \'autoactivated\' )');
        $numbers['active'] = $DB->get_var($SQL->get());
        // Get number of all active users which accept newsletter email
        $SQL = get_newsletter_users_sql($users_IDs);
        $SQL->SELECT('COUNT( * )');
        $numbers['newsletter'] = $DB->get_var($SQL->get());
    }
    return $numbers;
}
/**
 * Send newsletter emails
 */
function newsletter_send()
{
    global $DB, $Session;
    load_class('users/model/_userlist.class.php', 'UserList');
    // Initialize users list from session cache in order to get users IDs for newsletter
    $UserList = new UserList('admin');
    $UserList->memorize = false;
    $UserList->load_from_Request();
    $users_IDs = $UserList->filters['users'];
    // Get all active users which accept newsletter email
    $SQL = get_newsletter_users_sql($users_IDs);
    $users = $DB->get_col($SQL->get());
    echo sprintf(T_('Newsletter is sending for %s users...'), count($users)) . '<br /><br />';
    evo_flush();
    $email_newsletter_params = array('message' => $Session->get('newsletter_message'));
    foreach ($users as $user_ID) {
        $UserCache =& get_UserCache();
        $User = $UserCache->get_by_ID($user_ID);
        echo sprintf(T_('Email is sending for %s (%s)...'), $User->get_identity_link(), $User->get('email')) . ' ';
        // Send a newsletter in user's locale
        locale_temp_switch($User->get('locale'));
        $email_result = send_mail_to_User($user_ID, $Session->get('newsletter_title'), 'newsletter', $email_newsletter_params);
        locale_restore_previous();
        if ($email_result) {
            // Success sending
            echo T_('OK');
        } else {
            // Failed sending
            echo '<span class="red">' . T_('Failed') . '</span>';
        }
        echo '<br />';
        evo_flush();
    }
}