$('#change_status_buttons').hide(); } function do_manual_send(){ if(!run_manual_send){ return; } // do an ajax call to the newsletter_queue_manual.php script // parse the result and update the corresponding recipient in the listing $('#manual_send_status').prepend('<li><?php _e('Telling server to send in batches of %s, please wait...', module_config::c('newsletter_send_burst_count', 40)); ?> </li>'); $.ajax({ type: 'POST', url: '<?php echo module_newsletter::link_queue_manual($newsletter_id, $send_id); ?> ', data: 'retry_failures=<?php echo $retry_failures ? 'yes' : ''; ?> &retry_pending=<?php echo $retry_pending ? 'yes' : ''; ?> ', dataType: 'json', success: function(d){ for(var x in d){ if(x=='timeout'){ if(d[x] > 0){ setTimeout(function(){
"name"=>"Campaigns", 'm' => 'newsletter', 'p' => 'newsletter_campaign', 'order' => $menu_position++, 'menu_include_parent' => 1, 'allow_nesting' => 1, 'args' => array('newsletter_id'=>false), )); } array_unshift($links,array( "name"=>"Members", 'm' => 'newsletter', 'p' => 'newsletter_member', 'order' => $menu_position++, 'menu_include_parent' => 1, 'allow_nesting' => 1, 'args' => array('newsletter_id'=>false), ));*/ if (module_newsletter::can_i('view', 'Newsletter Templates')) { array_unshift($links, array("name" => "Templates", 'm' => 'newsletter', 'p' => 'newsletter_template', 'order' => $menu_position++, 'menu_include_parent' => 0, 'allow_nesting' => 1, 'args' => array('newsletter_id' => false, 'newsletter_template_id' => false))); } /*array_unshift($links,array( "name"=>"Settings", 'm' => 'newsletter', 'p' => 'newsletter_setting', 'order' => $menu_position++, 'menu_include_parent' => 1, 'allow_nesting' => 1, 'args' => array('newsletter_id'=>false), ));*/ $module->page_title = _l('Newsletter');
/** * Copyright: dtbaker 2012 * Licence: Please check CodeCanyon.net for licence details. * More licence clarification available here: http://codecanyon.net/wiki/support/legal-terms/licensing-terms/ * Deploy: 9809 f200f46c2a19bb98d112f2d32a8de0c4 * Envato: 4ffca17e-861e-4921-86c3-8931978c40ca * Package Date: 2015-11-25 02:55:20 * IP Address: 67.79.165.254 */ if (isset($_REQUEST['go'])) { ob_end_clean(); echo '<pre>'; _e("Checking for bounces, please wait..."); echo "\n\n"; module_newsletter::check_bounces(true); echo "\n\n"; _e("done."); echo '</pre>'; exit; } $module->page_title = _l('Newsletter Bounce Checking'); print_heading('Newsletter Bounce Checking'); ?> <p><?php _e('Bounces are checked automatically using the CRON job, however if you want to check for bounces manually (ie: to see any error) please click the button below.'); ?> </p> <form action="" method="post"> <input type="submit" name="go" value="<?php _e('Check for bounces');
// load up the receipt template. $template = module_template::get_template_by_key('newsletter_unsubscribe'); $data = $member; $data['email'] = htmlspecialchars($data['email']); // to be sure to be sure $template->page_title = htmlspecialchars(_l('Unsubscribe')); $template->assign_values($data); echo $template->render('pretty_html'); exit; } } } else { // show normal unsubscribe form. asking for their email address. if (isset($_REQUEST['email']) && trim($_REQUEST['email'])) { $email = htmlspecialchars(strtolower(trim($_REQUEST['email']))); if (!module_newsletter::unsubscribe_member_via_email($email)) { echo 'Unsubscribe failed... Please enter a valid email address.'; exit; } // is the newsletter module giving us a subscription redirection? if (module_config::c('newsletter_unsubscribe_redirect', '')) { redirect_browser(module_config::c('newsletter_unsubscribe_redirect', '')); } // or display a message. $template = module_template::get_template_by_key('newsletter_unsubscribe_done'); $data['email'] = $email; $template->page_title = htmlspecialchars(_l('Unsubscribe')); $template->assign_values($data); echo $template->render('pretty_html'); exit; }
</td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="butt_save" id="butt_save" value="<?php echo _l('Save'); ?> " class="submit_button save_button" /> <input type="button" name="cancel" value="<?php echo _l('Cancel'); ?> " onclick="window.location.href='<?php echo module_newsletter::link_list(false); ?> ';" class="submit_button" /> <?php if ((int) $newsletter_template_id > 0) { ?> <input type="submit" name="butt_del" id="butt_del" value="<?php echo _l('Delete'); ?> " class="submit_button delete_button" /> <?php } ?> </td> </tr>
public static function run_cron($debug = false) { // send any scheduled newsletters via cron job $pending = self::get_newsletters(array('pending' => 1)); if (mysql_num_rows($pending) > 0) { while ($send = mysql_fetch_assoc($pending)) { if ($debug) { echo "Attempting to send: "; } if ($debug) { print_r($send['send_id']); } if ($send['send_id']) { $send = module_newsletter::get_send($send['send_id']); $start_time = $send['start_time']; if ($start_time > time()) { if ($debug) { echo 'not sending this one yet due to start time'; } } else { if ($send['status'] == _NEWSLETTER_STATUS_PENDING) { $newsletter_send_burst_count = module_config::c('newsletter_send_burst_count', 40); $newsletter_send_burst_break = module_config::c('newsletter_send_burst_break', 2); for ($x = 0; $x < 10; $x++) { // todo: find a better way to run the cron job, eg: a timeout in configuration, or a max sends per cron run. $send_result = module_newsletter::process_send($send['newsletter_id'], $send['send_id'], $newsletter_send_burst_count, false, false); if (!isset($send_result['send_members']) || !count($send_result['send_members'])) { //$output_messages[] = _l('All done'); } else { foreach ($send_result['send_members'] as $send_member_result) { $update_members[$send_member_result['newsletter_member_id']] = array(); switch ($send_member_result['status']) { case _MAIL_STATUS_SENT: $update_members[$send_member_result['newsletter_member_id']]['.sent_time'] = print_date(time(), true); $update_members[$send_member_result['newsletter_member_id']]['.status'] = _l('sent'); $output_messages[] = _l('Sent successfully: %s', $send_member_result['email']); break; case _MAIL_STATUS_OVER_QUOTA: $output_messages[] = _l('Over quota, please wait: %s', $send_member_result['email']); $update_members[$send_member_result['newsletter_member_id']]['.status'] = _l('pending'); // todo - update the main newsletter status to over quota? nah.. break 2; case _MAIL_STATUS_FAILED: default: $output_messages[] = _l('FAILED: %s Reason: %s', $send_member_result['email'], $send_member_result['error']); $update_members[$send_member_result['newsletter_member_id']]['.status'] = _l('failed'); break; } } } // get an update: $send = module_newsletter::get_send($send['send_id']); $remain = (int) $send['total_member_count'] - (int) $send['total_sent_count']; if ($remain > 0) { if ($debug) { echo " Finished sending, {$remain} people remain\n"; } } else { if ($debug) { echo " Everyone sent!\n"; } if (!$send['finish_time']) { // just to make sure we set the finish time. module_newsletter::process_send($send['newsletter_id'], $send['send_id']); } break; //exit for loop. } } } else { if ($debug) { echo 'not sending due to status of ' . $send['status']; } } } } } } if (!function_exists('imap_open')) { set_error('Please contact hosting provider and enable IMAP for PHP'); echo 'Imap extension not available for php'; return false; } self::check_bounces(); }
* More licence clarification available here: http://codecanyon.net/wiki/support/legal-terms/licensing-terms/ * Deploy: 9809 f200f46c2a19bb98d112f2d32a8de0c4 * Envato: 4ffca17e-861e-4921-86c3-8931978c40ca * Package Date: 2015-11-25 02:55:20 * IP Address: 67.79.165.254 */ $search = isset($_REQUEST['search']) && is_array($_REQUEST['search']) ? $_REQUEST['search'] : array(); $newsletter_templates = module_newsletter::get_templates($search); $header = array('title' => _l('Newsletter Templates'), 'type' => 'h2', 'main' => true, 'button' => array()); $header['button'] = array('url' => module_newsletter::link_open_template('new'), 'title' => _l('Add New Template'), 'type' => 'add'); print_heading($header); $table_manager = module_theme::new_table_manager(); $columns = array(); $columns['newsletter_template_name'] = array('title' => 'Template Name', 'callback' => function ($newsletter_template) { echo module_newsletter::link_open_template($newsletter_template['newsletter_template_id'], true); }, 'cell_class' => 'row_action'); $columns['newsletter_template_action'] = array('title' => 'Action', 'callback' => function ($newsletter_template) { ?> <a href="<?php echo module_newsletter::link_open_template($newsletter_template['newsletter_template_id']); ?> ">Edit</a> <?php }); $table_manager->set_columns($columns); $table_manager->set_rows($newsletter_templates); $table_manager->pagination = false; $table_manager->print_table(); ?>
echo _l('Duplicate'); ?> " class="submit_button" /> <?php } ?> <input type="button" name="cancel" value="<?php echo _l('Cancel'); ?> " onclick="window.location.href='<?php echo module_newsletter::link_list(false); ?> ';" class="submit_button" /> <?php if ((int) $newsletter_id > 0 && module_newsletter::can_i('delete', 'Newsletters')) { ?> <input type="submit" name="butt_del" id="butt_del" value="<?php echo _l('Delete'); ?> " class="submit_button delete_button" /> <?php } ?> </div> </form> <script language="javascript" type="text/javascript">
$output_messages[] = _l('Waiting %s seconds before next batch of %s emails', $newsletter_send_burst_break, $newsletter_send_burst_count); if (!isset($result['timeout'])) { $result['timeout'] = $newsletter_send_burst_break; } } else { //$output_messages[] = _l('Finished sending, %s people remain',$remain); //$output_messages[] = _l('Please <a href="%s">click here</a> to refresh the page.',module_newsletter::link_queue_watch($newsletter_id,$send_id)); $output_messages[] = _l('Done'); if (!isset($result['timeout'])) { $result['timeout'] = -1; } if (!isset($result['done'])) { $result['done'] = 1; } if (!$send['finish_time']) { // just to make sure we set the finish time. $send_result = module_newsletter::process_send($newsletter_id, $send_id); } } } } } $result['messages'] = $output_messages; $result['update_members'] = $update_members; // put at end of array. bad js hack if (isset($result['done'])) { unset($result['done']); $result['done'] = 1; } echo json_encode($result); exit;
public static function handle_bulk_delete_double_optin($rows) { $delete = array(); foreach ($rows as $member_to_delete) { $newsletter_member_id = module_newsletter::member_from_email($member_to_delete, false); if ($newsletter_member_id) { if ($res = module_newsletter::is_member_unsubscribed($newsletter_member_id, $member_to_delete)) { if (class_exists('module_subscription', false)) { // check this isn't a member from a subscription or something. $sub = module_subscription::get_subscriptions_by('member', $member_to_delete['member_id']); if (count($sub)) { continue; } } if (isset($res['reason']) && $res['reason'] == 'doubleoptin') { //delete this onee! $delete[] = array('member_id' => $member_to_delete['member_id']); } } } } if (module_form::confirm_delete('bulk_optin_array', "Really delete all " . count($delete) . " failed double-opt-in members?", $_SERVER['REQUEST_URI'])) { foreach ($delete as $member_to_delete) { self::delete_member($member_to_delete['member_id']); } set_message("Selected members deleted successfully"); redirect_browser(self::link_open(false)); } }
</td> </tr> <tr> <th><?php _e('Member Unsubscribed'); ?> </th> <td> <?php $newsletter_member_id = module_newsletter::member_from_email($member, false); if ($newsletter_member_id) { if ($res = module_newsletter::is_member_unsubscribed($newsletter_member_id, $member)) { if (isset($res['unsubscribe_send_id']) && $res['unsubscribe_send_id']) { // they unsubscribed from a send. $send_data = module_newsletter::get_send($res['unsubscribe_send_id']); _e('Unsubscribed on %s from newsletter %s', print_date($res['time']), module_newsletter::link_statistics($send_data['newsletter_id'], $send_data['send_id'], true)); } else { if (isset($res['reason']) && $res['reason'] == 'no_email') { _e('Manually marked as no receive email'); } else { if (isset($res['reason']) && $res['reason'] == 'doubleoptin') { _e('Waiting for double opt in confirmation, sent at %s', print_date($res['time'])); } else { _e('Unsubscribed on %s', print_date($res['time'])); } } } } } /*$unsub = module_newsletter::email_blacklisted($member['email']); echo print_date($unsub['time']); echo $unsub['reason'];*/
</td> </tr> <?php } ?> </tbody> </table> <?php print_heading(array('type' => 'h3', 'title' => 'Preview Dynamic Fields:')); ?> <table width="100%" border="0" cellspacing="0" cellpadding="2" class="tableclass tableclass_form tbl_fixed"> <tbody> <?php $x = 0; $fields = module_newsletter::get_replace_fields($newsletter_id, $send_id, $first_newsletter_member_id); foreach ($fields as $key => $val) { ?> <tr> <td width="30"> <?php if ($x > 4) { foreach (array_keys($extra_fields) as $extra_field) { if (strtoupper($extra_field) == $key) { ?> <input type="checkbox" name="f[]" value="<?php echo htmlspecialchars($key); ?> " <?php echo isset($display_extra_fields[$key]) ? 'checked' : ''; ?>
?> </option> </select> </td> </tr> <?php } ?> </tbody> </table> </td> </tr> <tr> <td colspan="2" align="center"> <input type="button" name="cancel" value="<?php _e('Cancel'); ?> " class="submit_button" onclick="window.location.href='<?php echo module_newsletter::link_open($newsletter_id); ?> ';"> <input type="submit" name="send" value="<?php _e('Next Step'); ?> " class="save_button submit_button"> </td> </tr> </tbody> </table> </form>
<?php print_heading('Un-Subscription Form'); ?> <p><?php _e('Here is a link to the newsletter un-subscription form. People can click this and enter their email to be manually removed from receiving emails:'); ?> <a href="<?php echo module_newsletter::unsubscribe_url(); ?> " target="_blank"><?php echo module_newsletter::unsubscribe_url(); ?> </a> <?php _e('(this form can be edited from Settings > Templates)'); ?> </p> <?php print_heading('Other Forms'); ?> <p><?php _e('Please see the other forms/messages under Settings > Templates. Look for the "newsletter" ones.'); ?> </p> <?php print_heading('Bounce Checking'); ?> <p><?php _e('Please <a href="%s">click here</a> to check bounce emails manually.', module_newsletter::link_generate(false, array('page' => 'newsletter_settings_bounces'))); ?> </p>
echo module_newsletter::link_open($newsletter['newsletter_id']); ?> "><?php _e('Edit'); ?> </a> <?php break; } } }); $table_manager->set_columns($columns); $table_manager->row_callback = function ($newsletter) { $newsletter['send_data'] = false; if ($newsletter['send_id']) { $newsletter['send_data'] = module_newsletter::get_send($newsletter['send_id']); // special cache for old newsletter subject. if (isset($newsletter['send_data']['cache']) && strlen($newsletter['send_data']['cache']) > 1) { $cache = unserialize($newsletter['send_data']['cache']); if ($cache) { $newsletter = array_merge($newsletter, $cache); } } } return $newsletter; }; $table_manager->set_rows($newsletters); $table_manager->pagination = true; $table_manager->print_table(); ?>
if (class_exists('module_newsletter', false)) { $columns['member_newsletter'] = array('title' => 'Newsletter', 'callback' => function ($member) { // find the groups for this member. $g = array(); $groups = module_group::get_groups_search(array('owner_table' => 'newsletter_subscription', 'owner_id' => $member['member_id'])); foreach ($groups as $group) { $g[] = $group['name']; } echo implode(', ', $g); echo ' '; $newsletter_member_id = module_newsletter::member_from_email($member, false); if ($newsletter_member_id) { if ($res = module_newsletter::is_member_unsubscribed($newsletter_member_id, $member)) { if (isset($res['unsubscribe_send_id']) && $res['unsubscribe_send_id']) { // they unsubscribed from a send. $send_data = module_newsletter::get_send($res['unsubscribe_send_id']); _e('(unsubscribed %s)', print_date($res['time'])); } else { if (isset($res['reason']) && $res['reason'] == 'no_email') { _e('(do not send)'); } else { if (isset($res['reason']) && $res['reason'] == 'doubleoptin') { _e('(double opt-in incomplete)', print_date($res['time'])); } else { _e('(unsubscribed %s)', print_date($res['time'])); } } } } } });
/*display: inline-block;*/ } span.newsletter-click-span:hover{ filter:alpha(opacity=10); -moz-opacity:0.1; -khtml-opacity: 0.1; opacity: 0.1; } </style> <?php $style_tag = ob_get_clean(); if (preg_match('#<head>#i', $content)) { $content = preg_replace('#<head>#i', '<head>' . $style_tag, $content); } else { echo $style_tag; } echo $content; exit; } print_heading(array('type' => 'h2', 'title' => 'Newsletter Link Clicks', 'button' => array('url' => module_newsletter::link_statistics($newsletter_id, $send_id), 'id' => 'refresh', 'title' => 'Back to Statistics'))); ?> <iframe src="<?php echo module_newsletter::link_statistics_link_clicks($newsletter_id, $send_id); ?> &show=true" frameborder="0" style="width:100%; height:700px; border:0;" background="transparent"></iframe>
$module->page_title = _l('Preview'); //print_heading('Newsletter Editor'); $newsletter_id = isset($_REQUEST['newsletter_id']) ? (int) $_REQUEST['newsletter_id'] : false; if (!$newsletter_id) { redirect_browser(module_newsletter::link_list(false)); } //$newsletter = module_newsletter::get_newsletter($newsletter_id); if (isset($_REQUEST['show'])) { // render the newsletter and display it on screen with nothing else. echo module_newsletter::render($newsletter_id, false, false, 'preview'); exit; } ?> <table width="100%" cellpadding="5"> <tbody> <tr> <td width="50%" valign="top"> <?php print_heading(array('type' => 'h2', 'title' => 'Preview Newsletter', 'button' => array('url' => module_newsletter::link_open($newsletter_id), 'title' => 'Return to Editor'))); ?> <iframe src="<?php echo module_newsletter::link_preview($newsletter_id); ?> &show=true" frameborder="0" style="width:100%; height:700px; border:0;" background="transparent"></iframe> </td></tr></tbody></table>