if (class_exists('module_group', false) && isset($import_options['group']) && $import_options['group']) { // hack to support multiple groups (for members) if (!is_array($import_options['group'])) { $import_options['group'] = array($import_options['group']); } foreach ($import_options['group'] as $group_option) { ?> <tr> <th> <?php _e('Add imported records to group:'); ?> </th> <td> <?php $groups = module_group::get_groups($group_option); if (!count($groups)) { _e('Sorry, no groups exist. Please create a %s group first.', $group_option); } foreach ($groups as $group) { $group_id = $group['group_id']; ?> <input type="checkbox" class="add_to_group" name="add_to_group[<?php echo $group['group_id']; ?> ]" id="groupchk<?php echo $group_id; ?> " value="yes"> <label for="groupchk<?php echo $group_id;
$link = module_import_export::import_link(array('callback' => 'module_member::handle_import', 'name' => 'Members', 'return_url' => $_SERVER['REQUEST_URI'], 'group' => array('member', 'newsletter_subscription'), 'fields' => array('Member ID' => 'member_id', 'First Name' => 'first_name', 'Last Name' => 'last_name', 'Business Name' => 'business', 'Email' => 'email', 'Phone' => 'phone', 'Mobile' => 'mobile'), 'extra' => array('owner_table' => 'member', 'owner_id' => 'member_id'))); $header['button'][] = array('url' => $link, 'title' => 'Import members', 'type' => 'add'); } print_heading($header); ?> <form action="" method="post"> <?php $search_bar = array('elements' => array('name' => array('title' => _l('Names, Phone or Email:'), 'field' => array('type' => 'text', 'name' => 'search[generic]', 'value' => isset($search['generic']) ? $search['generic'] : '')))); if (class_exists('module_group', false) && module_member::can_i('view', 'Member Groups')) { $search_bar['elements']['group'] = array('title' => _l('Group:'), 'field' => array('type' => 'select', 'name' => 'search[group_id]', 'value' => isset($search['group_id']) ? $search['group_id'] : '', 'options' => module_group::get_groups('member'), 'options_array_id' => 'name')); } if (class_exists('module_newsletter', false)) { $search_bar['elements']['group'] = array('title' => _l('Newsletter:'), 'field' => array('type' => 'select', 'name' => 'search[group_id2]', 'value' => isset($search['group_id2']) ? $search['group_id2'] : '', 'options' => module_group::get_groups('newsletter_subscription'), 'options_array_id' => 'name')); } echo module_form::search_bar($search_bar); $table_manager = module_theme::new_table_manager(); $columns = array(); $columns['member_name'] = array('title' => 'Member Name', 'callback' => function ($member) { echo module_member::link_open($member['member_id'], true); }, 'cell_class' => 'row_action'); $columns['member_business'] = array('title' => 'Business', 'callback' => function ($member) { echo htmlspecialchars($member['business']); }); $columns['member_phone'] = array('title' => 'Phone', 'callback' => function ($member) { echo htmlspecialchars($member['phone']); }); $columns['member_mobile'] = array('title' => 'Mobile', 'callback' => function ($member) { echo htmlspecialchars($member['mobile']);
if (file_exists('includes/plugin_user/pages/contact_admin_list.php') && module_user::can_i('view', 'All ' . $page_type_single . ' Contacts', 'Customer', 'customer')) { $header_buttons[] = array('url' => module_user::link_open_contact(false), 'title' => 'View All Contacts'); } print_heading(array('main' => true, 'type' => 'h2', 'title' => $page_type, 'button' => $header_buttons)); ?> <form action="" method="post"> <?php $search_bar = array('elements' => array('name' => array('title' => _l('Names, Phone or Email:'), 'field' => array('type' => 'text', 'name' => 'search[generic]', 'value' => isset($search['generic']) ? $search['generic'] : '', 'size' => 15)), 'address' => array('title' => _l('Address:'), 'field' => array('type' => 'text', 'name' => 'search[address]', 'value' => isset($search['address']) ? $search['address'] : '', 'size' => 15)))); if (class_exists('module_extra', false)) { $search_bar['extra_fields'] = 'customer'; } if (class_exists('module_group', false) && module_customer::can_i('view', $page_type_single . ' Groups')) { $search_bar['elements']['group_id'] = array('title' => false, 'field' => array('type' => 'select', 'name' => 'search[group_id]', 'value' => isset($search['group_id']) ? $search['group_id'] : '', 'options' => module_group::get_groups('customer'), 'options_array_id' => 'name', 'blank' => _l(' Industry - '))); } if (class_exists('module_company', false) && module_company::can_i('view', 'Company') && module_company::is_enabled()) { $companys = module_company::get_companys(); $companys_rel = array(); foreach ($companys as $company) { $companys_rel[$company['company_id']] = $company['name']; } $search_bar['elements']['company'] = array('title' => false, 'field' => array('type' => 'select', 'name' => 'search[company_id]', 'value' => isset($search['company_id']) ? $search['company_id'] : '', 'options' => $companys_rel, 'blank' => _l(' - Company - '))); } echo module_form::search_bar($search_bar); /** START TABLE LAYOUT **/ $table_manager = module_theme::new_table_manager(); $columns = array(); if (class_exists('module_company', false) && module_company::can_i('view', 'Company') && module_company::is_enabled()) { $columns['company_name'] = array('title' => 'Company', 'callback' => function ($customer) {
public function external_hook($hook) { switch ($hook) { case 'subscribe_form': // handle subscriptions to the member database and also the newsletter system. // todo - tie in with "subscription" module to allow users to select which subscription they want as well. // handle subscriptions to the member database and also the newsletter system. // todo - tie in with "subscription" module to allow users to select which subscription they want as well. case 'subscribe': $member = isset($_REQUEST['member']) && is_array($_REQUEST['member']) ? $_REQUEST['member'] : false; $provided_member_id = isset($_REQUEST['i']) ? (int) $_REQUEST['i'] : false; $hash = isset($_REQUEST['hash']) ? trim($_REQUEST['hash']) : false; $member_id = false; if ($member) { if (isset($member['email']) && $member['email']) { // proceed with signup $email = filter_var(strtolower(trim($member['email'])), FILTER_VALIDATE_EMAIL); if (strlen($email) > 3) { $adding_new_member = true; // are we adding a new member to the system or updating an old one if ($provided_member_id && $hash) { $real_hash = $this->link_public_details($provided_member_id, true); if ($real_hash == $hash) { $existing_member = get_single('member', 'email', $email); if ($existing_member && $existing_member['member_id'] != $provided_member_id) { // this user is trying to update their email address to a user who exists in the system already $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('The email address %s is already linked to another member.', htmlspecialchars($email)))); echo $template->render('pretty_html'); exit; } $adding_new_member = false; // updating details in the system. update_insert("member_id", $provided_member_id, "member", $member); $member_id = $provided_member_id; // update extra fields... } } if (!$member_id) { // add member to system. $existing_member = get_single('member', 'email', $email); if ($existing_member && $existing_member['member_id'] > 0) { // todo: give them link to change details. $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('The email address %s is already a member. Please click the link in our newsletter to modify your details.', htmlspecialchars($email)))); echo $template->render('pretty_html'); exit; } // todo - sanatise input here, this will allow anyone to insert member details: $member_id = update_insert("member_id", 'new', "member", $member); } if ($member_id) { // save extra fields against member. $extra_fields = module_extra::get_defaults('member'); $extra_values = array(); foreach ($extra_fields as $extra_field) { // check if this field was submitted. if (isset($member[$extra_field['key']])) { $extra_values[$extra_field['key']] = array('val' => $member[$extra_field['key']], 'key' => $extra_field['key']); } } if (count($extra_values)) { $_REQUEST['extra_member_field'] = $extra_values; module_extra::save_extras('member', 'member_id', $member_id, false); } if (class_exists('module_newsletter', false)) { $newsletter_member_id = module_newsletter::member_from_email(array('email' => $email, 'member_id' => $member_id, 'data_callback' => 'module_member::get_newsletter_recipient', 'data_args' => $member_id), true, true); module_newsletter::subscribe_member($email, $newsletter_member_id); // now add thsi member to the grups they have selected. if (isset($member['group']) && is_array($member['group'])) { $group_items = module_group::get_groups('newsletter_subscription'); $public_group_ids = array(); foreach ($group_items as $group_item) { $public_group_ids[$group_item['group_id']] = true; // remove user group all these groups. module_group::delete_member($member_id, 'newsletter_subscription'); } //print_r($member['group']);print_r($public_group_ids);exit; foreach ($member['group'] as $group_id => $tf) { if ($tf && isset($public_group_ids[$group_id])) { // add member to group - but only public group ids! module_group::add_to_group($group_id, $member_id); } } } } // is the newsletter module giving us a subscription redirection? if ($adding_new_member) { if (module_config::c('newsletter_subscribe_redirect', '')) { redirect_browser(module_config::c('newsletter_subscribe_redirect', '')); } $template = module_template::get_template_by_key('member_subscription_success'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('email' => $email)); echo $template->render('pretty_html'); exit; } else { if (module_config::c('newsletter_update_details_redirect', '')) { redirect_browser(module_config::c('newsletter_update_details_redirect', '')); } $template = module_template::get_template_by_key('member_update_details_success'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('email' => $email)); echo $template->render('pretty_html'); exit; } } else { echo 'database failure.. please try again.'; } } else { $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('Sorry please go back and complete all required fields (especially email address)'))); echo $template->render('pretty_html'); exit; } } else { $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('Sorry please go back and complete all required fields'))); echo $template->render('pretty_html'); exit; } } else { $template = module_template::get_template_by_key('member_subscription_form'); $template->page_title = htmlspecialchars(_l('Subscription')); // we also treat this as a subscription modification form. $newsletter_subscriptions = array(); $member = array('email' => '', 'first_name' => '', 'last_name' => '', 'business' => '', 'phone' => '', 'mobile' => ''); // extra fields: $extra_fields = module_extra::get_defaults('member'); foreach ($extra_fields as $extra_field) { $member[$extra_field['key']] = ''; } if ($provided_member_id && $hash) { $real_hash = $this->link_public_details($provided_member_id, true); if ($real_hash == $hash) { // we can load these details into the forum successfully. $member = array_merge($member, $this->get_member($provided_member_id)); // get their fields: $extra_fields = module_extra::get_extras(array('owner_table' => 'member', 'owner_id' => $provided_member_id)); foreach ($extra_fields as $extra_field) { $member[$extra_field['extra_key']] = $extra_field['extra']; } // find out what newsletter subscriptions this member has. if (class_exists('module_newsletter', false)) { $newsletter_member_id = module_newsletter::member_from_email($member, true, true); $newsletter_subscriptions = module_group::get_member_groups('newsletter_subscription', $provided_member_id); } } } $template->assign_values($member); if (class_exists('module_newsletter', false)) { $group_items = module_group::get_groups('newsletter_subscription'); ob_start(); foreach ($group_items as $group_item) { ?> <div class="group_select"> <input type="checkbox" name="member[group][<?php echo $group_item['group_id']; ?> ]" value="1"<?php foreach ($newsletter_subscriptions as $newsletter_subscription) { if ($newsletter_subscription['group_id'] == $group_item['group_id']) { echo ' checked'; } } ?> > <?php echo htmlspecialchars($group_item['name']); ?> </div> <?php } $template->assign_values(array('newsletter_options' => ob_get_clean())); } else { $template->assign_values(array('newsletter_options' => '')); } echo $template->render('pretty_html'); exit; } break; } }
echo htmlspecialchars($default['key']); ?> </label> <input type="text" id="website_extra_<?php echo $x; ?> " name="website[extra][<?php echo htmlspecialchars($default['key']); ?> ]" /> </li> <?php $x++; } $x = 1; foreach (module_group::get_groups('website') as $group_data) { ?> <li> <label for="website_group_<?php echo $x; ?> "><?php echo htmlspecialchars($group_data['name']); ?> </label> <input type="text" id="website_group_<?php echo $x; ?> " name="website[group_ids][<?php echo htmlspecialchars($group_data['group_id']); ?>
print_heading($header); ?> <form action="" method="post"> <?php module_form::print_form_auth(); ?> <?php $search_bar = array('elements' => array('name' => array('title' => _l('Invoice Number:'), 'field' => array('type' => 'text', 'name' => 'search[generic]', 'value' => isset($search['generic']) ? $search['generic'] : '')), 'date' => array('title' => _l('Create Date:'), 'fields' => array(array('type' => 'date', 'name' => 'search[date_from]', 'value' => isset($search['date_from']) ? $search['date_from'] : ''), _l('to'), array('type' => 'date', 'name' => 'search[date_to]', 'value' => isset($search['date_to']) ? $search['date_to'] : ''))), 'status' => array('title' => _l('Status:'), 'field' => array('type' => 'select', 'name' => 'search[status]', 'value' => isset($search['status']) ? $search['status'] : '', 'options' => module_invoice::get_statuses())))); if (!isset($_REQUEST['customer_id']) && class_exists('module_group', false) && module_customer::can_i('view', 'Customer Groups')) { $search_bar['elements']['group'] = array('title' => _l('Customer Group:'), 'field' => array('type' => 'select', 'name' => 'search[customer_group_id]', 'value' => isset($search['customer_group_id']) ? $search['customer_group_id'] : '', 'options' => module_group::get_groups('customer'), 'options_array_id' => 'name')); } echo module_form::search_bar($search_bar); /** START TABLE LAYOUT **/ $colspan = 9; $colspan2 = 0; $table_manager = module_theme::new_table_manager(); $columns = array(); $columns['invoice_number'] = array('title' => 'Invoice Number', 'callback' => function ($invoice) { echo module_invoice::link_open($invoice['invoice_id'], true, $invoice); }, 'cell_class' => 'row_action'); $columns['invoice_status'] = array('title' => 'Status', 'callback' => function ($invoice) { echo htmlspecialchars($invoice['status']); }); $columns['invoice_create_date'] = array('title' => 'Create Date', 'callback' => function ($invoice) { if (!$invoice['date_create'] || $invoice['date_create'] == '0000-00-00') {
<?php print_heading(array('type' => 'h3', 'title' => 'Select Recipients')); ?> <table class="tableclass tableclass_form tableclass_full"> <tbody> <tr> <td colspan="3"> <?php _e('Please select the groups you would like to send this email to:'); ?> </td> </tr> <?php // grab a list of groups from the "group" plugin // group plugin allows us to group people by different categories throu out the application $groups = module_group::get_groups(); foreach ($groups as $group) { ?> <tr> <td> <input type="checkbox" name="group[<?php echo $group['group_id']; ?> ]" id="group_<?php echo $group['group_id']; ?> " value="yes"> </td> <td> <label for="group_<?php echo $group['group_id'];
?> "> </td> <?php if (class_exists('module_group', false) && module_customer::can_i('view', 'Customer Groups')) { ?> <td width="60"> <?php _e('Group:'); ?> </td> <td> <?php echo print_select_box(module_group::get_groups('customer'), 'search[group_id]', isset($search['group_id']) ? $search['group_id'] : false, '', true, 'name'); ?> </td> <?php } ?> <td align="right" rowspan="2"> <?php echo create_link("Reset", "reset", module_customer::link_open(false)); ?> <?php echo create_link("Search", "submit"); ?>
<h3><?php echo _l('Perform Bulk Actions on Tickets (BETA!)'); ?> </h3> <table width="100%" border="0" cellspacing="0" cellpadding="2" class="tableclass tableclass_form"> <tbody> <tr> <th class="width2"> <?php echo _l('Select Ticket Group'); ?> </th> <td> <?php echo print_select_box(module_group::get_groups('ticket'), 'group_id', false, '', true, 'name'); ?> </td> </tr> <tr> <th> <?php echo _l('Change Ticket Status'); ?> </th> <td> <?php echo print_select_box(module_ticket::get_statuses(), 'status_id', ''); ?> </td> </tr>
public function process() { $errors = array(); if (isset($_REQUEST['butt_del']) && $_REQUEST['butt_del'] && $_REQUEST['newsletter_id']) { $data = self::get_newsletter($_REQUEST['newsletter_id']); if (module_form::confirm_delete('newsletter_id', "Really delete newsletter: " . $data['subject'], self::link_open($_REQUEST['newsletter_id']))) { $this->delete_newsletter($_REQUEST['newsletter_id']); set_message("Newsletter deleted successfully"); redirect_browser(self::link_list(false)); } } else { if ("save_newsletter" == $_REQUEST['_process']) { $newsletter_id = isset($_REQUEST['newsletter_id']) ? (int) $_REQUEST['newsletter_id'] : false; $newsletter_id = $this->save_newsletter($newsletter_id, $_POST); if (isset($_REQUEST['butt_send'])) { redirect_browser($this->link_send($newsletter_id)); } if (isset($_REQUEST['butt_duplicate'])) { $newsletter_id = $this->duplicate_newsetter($newsletter_id); set_message('Newsletter duplicated successfully'); redirect_browser($this->link_open($newsletter_id)); } if (isset($_REQUEST['butt_preview_email'])) { if ($this->send_preview($newsletter_id, $_REQUEST['quick_email'])) { //set_message("Newsletter preview sent successfully."); redirect_browser($this->link_open($newsletter_id)); } /*else{ echo "<br><br>Failed to send preview. <br><br>"; echo '<a href="'.$this->link_open($newsletter_id).'">try again</a> '; exit; }*/ } if (isset($_REQUEST['butt_preview'])) { redirect_browser($this->link_preview($newsletter_id)); } set_message("Newsletter saved successfully"); redirect_browser($this->link_open($newsletter_id)); } else { if ("send_send" == $_REQUEST['_process']) { $newsletter_id = (int) $_REQUEST['newsletter_id']; $send_id = (int) $_REQUEST['send_id']; if ($newsletter_id && $send_id) { $sql = "UPDATE `" . _DB_PREFIX . "newsletter_send` SET `status` = " . _NEWSLETTER_STATUS_PENDING . " WHERE send_id = {$send_id} AND newsletter_id = {$newsletter_id}"; query($sql); self::update_member_data_for_send($send_id); self::remove_unsubscribed_members_from_send($send_id); //ready to send redirect_browser($this->link_queue_watch($newsletter_id, $send_id)); } } else { if ("modify_send" == $_REQUEST['_process']) { $send_id = (int) $_REQUEST['send_id']; $newsletter_id = (int) $_REQUEST['newsletter_id']; $send = get_single('newsletter_send', array('send_id', 'newsletter_id'), array($send_id, $newsletter_id)); if (isset($_POST['status']) && $_POST['status'] == 'delete') { if (module_form::confirm_delete('newsletter_id', "Really delete this send?", self::link_queue_watch($newsletter_id, $send_id))) { if ($send && $send['send_id'] == $send_id) { set_message("Newsletter send deleted successfully"); update_insert('send_id', $send_id, 'newsletter_send', array('status' => _NEWSLETTER_STATUS_DELETED)); } redirect_browser(self::link_list(false)); } unset($_POST['status']); } if (!$send['start_time']) { $_POST['start_time'] = time(); } // hack cos sometimes it doesn't save start time? i think i fixed this bug though. if ($send && $send['send_id'] == $send_id) { update_insert('send_id', $send_id, 'newsletter_send', $_POST); redirect_browser($this->link_queue_watch($newsletter_id, $send_id)); } } else { if ("enque_send" == $_REQUEST['_process']) { $newsletter_id = (int) $_REQUEST['newsletter_id']; $send_id = (int) $_REQUEST['send_id']; $newsletter_data = self::get_newsletter($newsletter_id); if ($newsletter_data['newsletter_id'] != $newsletter_id) { die('failed to enqueue send'); } // are we adding members to an existing send? or overwriting them to an existing draft / or creating a new blank send. if ($send_id > 0) { $adding_members = true; } else { $adding_members = false; } $members = array(); //todo: pass this off as a hook. // so we could have another module (eg: module_drupal or module_wordpress) that // checks which members were selected on the previous screen, and return a standard member array if (class_exists('module_group', false)) { // find the groups we are sending to. $send_groups = array(); $groups = module_group::get_groups(); foreach ($groups as $group) { if (isset($_REQUEST['group']) && isset($_REQUEST['group'][$group['group_id']]) && $_REQUEST['group'][$group['group_id']] == 'yes') { // we are sending to this group // get a list of members in this group and add them to a send table ready to go. $send_groups[$group['group_id']] = true; } } // find the members for these groups $callback = 'module_group::newsletter_callback'; $error_count = 0; foreach ($send_groups as $group_id => $tf) { $group_members = module_group::get_members($group_id); //echo '<pre>';print_r($group_members);exit; // give all these members a callback so the newsletter system can get more data from them. $group_members_with_data = array(); foreach ($group_members as $id => $group_member) { $args = array('group_id' => $group_id, 'owner_id' => $group_member['owner_id'], 'owner_table' => $group_member['owner_table']); // run this data callback to get the data from this group member. $all_callback_data = self::member_data_callback($callback, $args, false); // false, just want the email address for now. if (!$all_callback_data) { $error_count++; } if (is_array($all_callback_data)) { // check if $callback_data is a multi-array - sometimes this will return more than 1 record (eg: customer = returns all contacts under that customer) if (!isset($all_callback_data['_multi'])) { // this is a single record. make it multi $all_callback_data = array($all_callback_data); } else { unset($all_callback_data['_multi']); } foreach ($all_callback_data as $callback_data) { if (!$callback_data) { continue; } if (!isset($callback_data['data_callback']) || !$callback_data['data_callback']) { $callback_data['data_callback'] = $callback; } if (!isset($callback_data['data_args']) || !$callback_data['data_args']) { $callback_data['data_args'] = json_encode($args); } $group_members_with_data[] = $callback_data; } } /*$group_members[$id] = self::member_data_callback($callback,$args); if(!$group_members[$id]){ // todo: report this problematic group member, possibly remove group member from list. $error_count++; unset($group_members[$id]); }else{ // a callback on customers will return all contacts for that customer (if advanced option is set) if(!isset($group_members[$id]['data_callback']) || !$group_members[$id]['data_callback']){ $group_members[$id]['data_callback'] = $callback; } if(!isset($group_members[$id]['data_args']) || !$group_members[$id]['data_args']){ $group_members[$id]['data_args'] = json_encode($args); } }*/ } unset($group_members); //$members = array_merge($members,$group_members); $members = array_merge($members, $group_members_with_data); } if ($error_count > 0) { set_error('Failed to get the information on ' . $error_count . ' group members.'); } } /*if(class_exists('module_company',false) && module_company::can_i('view','Company') && module_company::is_enabled()){ // copy of the group logic above, but we're adding companies to the list. // find the groups we are sending to. $send_companys = array(); $companys = module_company::get_companys(); foreach($companys as $company){ if(isset($_REQUEST['company']) && isset($_REQUEST['company'][$company['company_id']]) && $_REQUEST['company'][$company['company_id']] == 'yes'){ // we are sending to this company // get a list of members in this company and add them to a send table ready to go. $send_companys[$company['company_id']] = true; } } // find the members for these companys $callback = 'module_company::newsletter_callback'; $error_count = 0; foreach($send_companys as $company_id => $tf){ $company_members = module_company::get_members($company_id); //echo '<pre>';print_r($company_members);exit; // give all these members a callback so the newsletter system can get more data from them. $company_members_with_data = array(); foreach($company_members as $id => $company_member){ $args = array( 'company_id'=>$company_id, 'owner_id'=>$company_member['owner_id'], 'owner_table'=>$company_member['owner_table'], ); // run this data callback to get the data from this company member. $all_callback_data = self::member_data_callback($callback,$args); if(!$all_callback_data){ $error_count++; } if(is_array($all_callback_data)){ // check if $callback_data is a multi-array - sometimes this will return more than 1 record (eg: customer = returns all contacts under that customer) if(!isset($all_callback_data['_multi'])){ // this is a single record. make it multi $all_callback_data = array($all_callback_data); }else{ unset($all_callback_data['_multi']); } foreach($all_callback_data as $callback_data){ if(!$callback_data)continue; if(!isset($callback_data['data_callback']) || !$callback_data['data_callback']){ $callback_data['data_callback'] = $callback; } if(!isset($callback_data['data_args']) || !$callback_data['data_args']){ $callback_data['data_args'] = json_encode($args); } $company_members_with_data[] = $callback_data; } } } unset($company_members); //$members = array_merge($members,$company_members); $members = array_merge($members,$company_members_with_data); } if($error_count>0){ set_error('Failed to get the information on '.$error_count.' company members.'); } }*/ //echo '<pre>';print_r($members);exit; // todo - load CSV formats in too. IDEA! make a new CSV module, it will work in with GROUP hook above! YESS! if (!$adding_members && !count($members)) { set_error('Please select at least 1 person to send this newsletter to'); redirect_browser(self::link_send($newsletter_id)); } if (!$adding_members && !$send_id) { // see if we can re-use a previously unsent send (ie: draft send) $drafts = get_multiple('newsletter_send', array('newsletter_id' => $newsletter_id, 'status' => _NEWSLETTER_STATUS_NEW)); if (count($drafts)) { $draft = array_shift($drafts); if ($draft['send_id']) { $send_id = (int) $draft['send_id']; $sql = "DELETE FROM `" . _DB_PREFIX . "newsletter_send_member` WHERE send_id = " . (int) $send_id; query($sql); } } } if (isset($_REQUEST['start_time'])) { $start_time = strtotime(input_date($_REQUEST['start_time'], true)); if (!$start_time) { $start_time = time(); } } else { $start_time = time(); } $allow_duplicates = isset($_REQUEST['allow_duplicates']) ? $_REQUEST['allow_duplicates'] : 0; // remove cache from send newsletter data history if (isset($newsletter_data['sends']) && is_array($newsletter_data['sends'])) { foreach ($newsletter_data['sends'] as $previous_newsletter_data_send_id => $previous_newsletter_data_send) { if (isset($previous_newsletter_data_send['cache'])) { unset($newsletter_data['sends'][$previous_newsletter_data_send_id]['cache']); } } } $send_id = self::save_send($send_id, array('newsletter_id' => $newsletter_id, 'status' => _NEWSLETTER_STATUS_NEW, 'start_time' => $start_time, 'allow_duplicates' => $allow_duplicates, 'cache' => serialize($newsletter_data), 'subject' => $newsletter_data['subject'])); $done_member = false; if ($send_id) { // add the members from this send into the listing. // this will be a snapshop of the members details at the time this send is created. // todo: figure out if this will come back and bite me in the bum :) $failed_due_to_unsubscribe = false; $error_count = 0; foreach ($members as $member) { //print_r($member); // check uniquness of this member's email in the send listing. // find this member by email. $newsletter_member_id = self::member_from_email($member); if ($newsletter_member_id > 0) { // found a member! add it to the send queue for this send. if (!$allow_duplicates) { // check if this member has received this email before. $sql = "SELECT * FROM `" . _DB_PREFIX . "newsletter_send_member` sm"; $sql .= " LEFT JOIN `" . _DB_PREFIX . "newsletter_send` s USING (send_id) "; $sql .= " WHERE sm.newsletter_member_id = " . (int) $newsletter_member_id; $sql .= " AND sm.send_id IN (SELECT send_id FROM `" . _DB_PREFIX . "newsletter_send` WHERE newsletter_id = {$newsletter_id})"; $sql .= " AND sm.send_id != " . (int) $send_id; $sql .= " AND s.status != 4 "; // so we ignore deleted sends. $check = query($sql); if (mysql_num_rows($check)) { // user has received this before. //echo 'received before'; mysql_free_result($check); continue; } mysql_free_result($check); } // check if this member is unsubscribed or marked as not receiving emails? if (self::is_member_unsubscribed($newsletter_member_id, $member)) { // unsubscribe checks blacklist so no need to inclde it here: || self::email_blacklisted($member['email']) //echo 'unsubscribed'; $failed_due_to_unsubscribe = true; continue; } $sql = "REPLACE INTO `" . _DB_PREFIX . "newsletter_send_member` SET "; $sql .= " send_id = " . (int) $send_id . " "; $sql .= ", newsletter_member_id = " . (int) $newsletter_member_id . " "; $sql .= ", `sent_time` = 0"; $sql .= ", `status` = 0"; $sql .= ", `open_time` = 0"; $sql .= ", `bounce_time` = 0"; query($sql); //echo 'done'; $done_member = true; } else { $error_count++; if (_DEBUG_MODE) { echo 'failed to create member from email'; print_r($member); echo '<hr>'; } } } if ($error_count) { set_error('Failed to add ' . $error_count . ' members to the queue. Possibly because they have no valid email address.'); if (_DEBUG_MODE) { //exit; } } // exit; if (!$done_member && !$adding_members) { if ($failed_due_to_unsubscribe) { set_error('All selected members have been unsubscribed or bounced, please select other members.'); // this member is added, redirect and show the errors .. } else { set_error('Please select at least 1 person to send this newsletter to.'); redirect_browser(self::link_send($newsletter_id)); } } redirect_browser($this->link_queue($newsletter_id, $send_id)); } } else { if ("save_newsletter_template" == $_REQUEST['_process']) { if (isset($_REQUEST['butt_del'])) { $data = self::get_newsletter_template($_REQUEST['newsletter_template_id']); if (module_form::confirm_delete('newsletter_template_id', "Really delete newsletter template: " . $data['newsletter_template_name'], self::link_open_template($_REQUEST['newsletter_template_id']))) { $this->delete_newsletter_template($_REQUEST['newsletter_template_id']); set_message("Newsletter template deleted successfully"); redirect_browser(self::link_open_template(false)); } } $newsletter_template_id = $this->save_newsletter_template($_REQUEST['newsletter_template_id'], $_POST); set_message("Newsletter template saved successfully"); redirect_browser($this->link_open_template($newsletter_template_id)); } } } } } } if (!count($errors)) { redirect_browser($_REQUEST['_redirect']); exit; } print_error($errors, true); }