/** * 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(); } }