* @package AgileBill * @version 1.4.93 */ class newsletter { # Open the constructor for this mod function newsletter_construct() { # name of this module: $this->module = "newsletter"; # location of the construct XML file: $this->xml_construct = PATH_MODULES . "" . $this->module . "/" . $this->module . "_construct.xml"; # open the construct file for parsing $C_xml = new CORE_xml; $construct = $C_xml->xml_to_array($this->xml_construct); $this->method = $construct["construct"]["method"]; $this->trigger = $construct["construct"]["trigger"]; $this->field = $construct["construct"]["field"]; $this->table = $construct["construct"]["table"]; $this->module = $construct["construct"]["module"]; $this->cache = $construct["construct"]["cache"]; $this->order_by = $construct["construct"]["order_by"]; $this->limit = $construct["construct"]["limit"]; } ############################## ## ADD ## ############################## function add($VAR) { $this->newsletter_construct(); $type = "add"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->add($VAR, $this, $type); } ############################## ## VIEW ## ############################## function view($VAR) { $this->newsletter_construct(); $type = "view"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->view($VAR, $this, $type); } ############################## ## POPUP VIEW ## ############################## function popup($VAR) { $this->newsletter_construct(); $type = "view"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->view($VAR, $this, $type); } ############################## ## UPDATE ## ############################## function update($VAR) { $this->newsletter_construct(); $type = "update"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->update($VAR, $this, $type); } ############################## ## DELETE ## ############################## function delete($VAR) { $this->newsletter_construct(); $db = new CORE_database; $db->mass_delete($VAR, $this, ""); } ############################## ## SEARCH FORM ## ############################## function search_form($VAR) { $this->newsletter_construct(); $type = "search"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->search_form($VAR, $this, $type); } ############################## ## SEARCH ## ############################## function search($VAR) { $this->newsletter_construct(); $type = "search"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->search($VAR, $this, $type); } ############################## ## SEARCH SHOW ## ############################## function search_show($VAR) { $this->newsletter_construct(); $type = "search"; $this->method["$type"] = explode(",", $this->method["$type"]); $db = new CORE_database; $db->search_show($VAR, $this, $type); } ############################## ## SEND NEWSLETTERS ## ############################## function send($VAR) { global $C_debug, $C_translate, $C_vars; $C_vars->strip_slashes_all(); ##################################################### ### Get the setup email settings: $db = &DB(); $q = "SELECT * FROM ".AGILE_DB_PREFIX."setup_email WHERE site_id = ".$db->qstr(DEFAULT_SITE)." AND id = ".$db->qstr($VAR["setup_email_id"]); $setup_email = $db->Execute($q); if($setup_email->fields['type'] == 0) { $type = 0; } else { $type = 1; $E['server'] = $setup_email->fields['server']; $E['account'] = $setup_email->fields['username']; $E['password'] = $setup_email->fields['password']; } $E['from_name'] = $setup_email->fields['from_name']; $E['from_email'] = $setup_email->fields['from_email']; if($setup_email->fields['cc_list'] != '') $E['cc_list'] = explode(',', $setup_email->fields['cc_list']); if($setup_email->fields['bcc_list'] != '') $E['bcc_list'] = explode(',', $setup_email->fields['bcc_list']); ##################################################### ### Priority: if(isset($VAR['newsletter_priority']) && $VAR['newsletter_priority'] == '1') $E['priority'] = 1; ##################################################### ### Subject: if(isset($VAR['newsletter_subject']) && $VAR['newsletter_subject'] != '') { $E['subject'] = $VAR['newsletter_subject']; } else { ### ERROR! $C_debug->alert($C_translate->translate('send_alert_message','newsletter','')); $C_debug->alert($C_translate->translate('send_alert_fail','newsletter','')); return; } ##################################################### ### Body (TEXT version): if(isset($VAR['newsletter_body_text']) && $VAR['newsletter_body_text'] != '') { $E['body_text'] = $VAR['newsletter_body_text']; } else { ### ERROR! $C_debug->alert($C_translate->translate('send_alert_body_text','newsletter','')); $C_debug->alert($C_translate->translate('send_alert_fail','newsletter','')); return; } ##################################################### ### Body (HTML version): if(isset($VAR['newsletter_body_html']) && $VAR['newsletter_body_html'] != '') { $E['body_html'] = $VAR['newsletter_body_html']; } else { ### ERROR! $C_debug->alert($C_translate->translate('send_alert_body_html','newsletter','')); $C_debug->alert($C_translate->translate('send_alert_fail','newsletter','')); return; } ##################################################### ### TEST - Get current user account details $db = &DB(); $q = "SELECT * FROM ".AGILE_DB_PREFIX."account WHERE site_id = ".$db->qstr(DEFAULT_SITE)." AND id = ".$db->qstr(SESS_ACCOUNT); $account = $db->Execute($q); $E['to_email'] = $account->fields['email']; $E['to_name'] = $account->fields['first_name'] . ' ' . $account->fields['last_name']; ### Call the mail() or smtp() function to send require_once(PATH_CORE . 'email.inc.php'); $email = new CORE_email; if($type == 0) { if(isset($E['body_html'])) { ### SEND HTML VERSION $E['html'] = '1'; $email->PHP_Mail($E); } ### SEND TEXT VERSION $E['html'] = '0'; $email->PHP_Mail($E); $C_debug->alert("Send success!"); } else { if(isset($E['body_html'])) { ### SEND HTML VERSION $E['html'] = '1'; $email->SMTP_Mail($E); } ### SEND TEXT VERSION $E['html'] = '0'; $email->SMTP_Mail($E); } ##################################################### ### LIVE - Get all subscribers if(!isset($VAR['newsletter_test'])) { ### SET THE BODY & SUBJECT $body_text = $E['body_text']; $body_html = $E['body_html']; $subject = $E['subject']; ### Delete the cc/bcc lists... unset($E['cc_list']); unset($E['bcc_list']); $newsletters = $VAR['newsletter_id']; for($i=0; $i $subs->fields["first_name"], 'lName'=> $subs->fields["last_name"]); $subs->MoveNext(); } } ### LOOP through the final results if(!isset($arr_s) || gettype($arr_s) != 'array') { ### NO RESULTS... RETURN NOW! $C_debug->alert($C_translate->translate('send_alert_no_results','newsletter','')); $C_debug->alert($C_translate->translate('send_alert_fail','newsletter','')); return; } $i = 0; while (list ($key, $val) = each ($arr_s)) { $i++; $E['to_email'] = $key; $E['to_name'] = $arr_s["$key"]["fName"] . ' ' . $arr_s["$key"]["lName"]; $remove = URL . '?_page=newsletter:unsubscribe&email='.$key; if($arr_s["$key"]["html"] == '1') { ### replace %name%, %email%, and %remove% with correct vars: (for html) $E['body_html'] = eregi_replace('%name%', $arr_s["$key"]["fName"], $body_html); $E['body_html'] = eregi_replace('%email%', $key, $E['body_html']); $E['body_html'] = eregi_replace('%remove%', $remove, $E['body_html']); $E['html'] = '1'; } else { ### replace %name%, %email%, and %remove% with correct vars: (for text) $E['body_text'] = eregi_replace('%name%', $arr_s["$key"]["fName"], $body_text); $E['body_text'] = eregi_replace('%email%', $key, $E['body_text']); $E['body_text'] = eregi_replace('%remove%', $remove, $E['body_text']); $E['html'] = false; } ### replace %name%, %email%, and %remove% with correct vars: (for subject) $E['subject'] = eregi_replace('%name%', $arr_s["$key"]["fName"], $subject); $E['subject'] = eregi_replace('%email%', $key, $E['subject']); if($type == 0) { ### SEND THE MESSAGE $email = new CORE_email; $email->PHP_Mail($E); } else { ### SEND TEXT VERSION $email = new CORE_email; $email->SMTP_Mail($E); } } ### Completion notice $C_debug->alert($C_translate->translate('send_alert_success','newsletter','')); ## Sent $i messages... } } ############################## ## SHOW NEWSLETTER LIST ## ############################## function check_list($VAR) { $name = "newsletter_id"; $table = 'newsletter'; $field = 'name'; $id = ''; $input_id = ''; global $C_translate, $C_auth; # get the records $db = &DB(); $sql= "SELECT id,group_avail,name FROM ".AGILE_DB_PREFIX."$table WHERE site_id = '" . DEFAULT_SITE . "' AND active = " . $db->qstr('1') . " ORDER BY $field"; $result = $db->Execute($sql); # error handling if ($result === false) { global $C_debug; $C_debug->error('list.inc.php','check', $db->ErrorMsg()); } # loop through the records $i = 0; while (!$result->EOF) { $groups = unserialize($result->fields['group_avail']); $auth = false; for($ii=0; $iiauth_group_by_id($groups[$ii])) $auth = true; } if($auth) { # Create the return code for Smarty $return .= ' ' . $result->fields["$field"] . '  [ ? ]
'; $i++; } $result->MoveNext(); } if($i==0) $return .= 'No Newsletters Available to Your Account'; echo $return; } ############################## ## SHOW NEWSLETTER LIST ## ## FOR REGISTRATION ## ############################## function check_list_registration($VAR) { $name = "newsletter_id"; $table = 'newsletter'; $field = 'name'; $id = ''; $input_id = ''; global $C_translate, $C_auth; # get the records $db = &DB(); $sql= "SELECT id,group_avail,name FROM ".AGILE_DB_PREFIX."$table WHERE site_id = '" . DEFAULT_SITE . "' AND active = " . $db->qstr('1') . " AND display_signup = " . $db->qstr('1') . " ORDER BY $field"; $result = $db->Execute($sql); # error handling if ($result === false) { global $C_debug; $C_debug->error('list.inc.php','check', $db->ErrorMsg()); } # loop through the records $i = 0; while (!$result->EOF) { $groups = unserialize($result->fields['group_avail']); $auth = false; for($ii=0; $iiauth_group_by_id($groups[$ii])) $auth = true; } if($auth) { # Create the return code for Smarty $return .= ' ' . $result->fields["$field"] . '  [ ? ]
'; $i++; } $result->MoveNext(); } if($i==0) $return .= 'No Newsletters Available to Your Account'; echo $return; } ############################## ## SUBSCRIBE ## ############################## /* we need the following vars: 'newsletter_id' (array) 'newsletter_type' (0/1) ( standalone / with new account) 'newsletter_html' (0/1) 'newsletter_email' (email_required) 'newsletter_first_name' (first name, required) 'newsletter_last_name' (last_name, optional) or 'account_email' (email_required) 'account_first_name' (from the signup form) 'account_last_name' (from the singup form) */ function subscribe($VAR) { $LIMIT_SECONDS = 120; global $C_debug, $C_translate; ### Include the validation class include_once(PATH_CORE . 'validate.inc.php'); ### store the details in a temporary database, and email the user ### a link with the time() string from the creation date of the ### record ### Check that the required variables are set: if(!isset($VAR['newsletter_id']) || gettype($VAR['newsletter_id']) != 'array') { if(isset($VAR['newsletter_type'])) { #ERROR! $C_debug->alert($C_translate->translate('subscribe_newsletter_req','newsletter','')); return; } else { return; } } $newsletter_id = @$VAR['newsletter_id']; if(isset($VAR['newsletter_html'])) $html = 1; else $html = 0; if(isset($VAR['newsletter_type'])) { if(empty($VAR['newsletter_first_name'])) { #### ERROR! if (isset($VAR['newsletter_type'])) $C_debug->alert($C_translate->translate('subscribe_name_req','newsletter','')); return; } $validate = new CORE_validate; if(empty($VAR['newsletter_email']) || !$validate->validate_email($VAR['newsletter_email'], '')) { ### ERROR! if (isset($VAR['newsletter_type'])) $C_debug->alert($C_translate->translate('subscribe_email_req','newsletter','')); return; } $first_name = @$VAR['newsletter_first_name']; $last_name = @$VAR['newsletter_last_name']; $email = @$VAR['newsletter_email']; } else { if(!isset($VAR['account_first_name']) || $VAR['account_first_name'] == '') return; $validate = new CORE_validate; if(!isset($VAR['account_email']) || $validate->validate_email($VAR['account_email'], '') == false) return; $first_name = @$VAR['account_first_name']; $last_name = @$VAR['account_last_name']; $email = @$VAR['account_email']; } ### Check that this email has not been requested already ### In the last 60 seconds $db = &DB(); $sql = 'SELECT * FROM ' . AGILE_DB_PREFIX . 'temporary_data WHERE site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND field1 = ' . $db->qstr($email); $result = $db->Execute($sql); if($result->RecordCount() > 0) { $limit = $result->fields['date_orig'] + $LIMIT_SECONDS; if($limit > time()) { ### ERROR! if(isset($VAR['newsletter_type'])) { $error1 = $C_translate->translate("subscribe_spam_limit","newsletter",""); $error = ereg_replace('%limit%', "$LIMIT_SECONDS", $error1); $C_debug->alert( $error ); } return; } else { ### Delete the old request $sql = 'DELETE FROM ' . AGILE_DB_PREFIX . 'temporary_data WHERE site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND field1 = ' . $db->qstr($email); $db->Execute($sql); } } ##################################################### ### Ok to continue: $now = time(); $expire = time() + 86400*3; $data = serialize(Array ('html' => $html, 'email' => $email, 'first_name' => $first_name, 'last_name' => $last_name, 'newsletter_id' => $newsletter_id, 'var' => base64_encode(serialize(@$VAR['static_relation'])))); ##################################################### ### Create the temporary DB Record: $db = &DB(); $id = $db->GenID(AGILE_DB_PREFIX . "" . 'temporary_data_id'); $sql = 'INSERT INTO ' . AGILE_DB_PREFIX . 'temporary_data SET site_id = ' . $db->qstr(DEFAULT_SITE) . ', id = ' . $db->qstr($id) . ', date_orig = ' . $db->qstr($now) . ', date_expire = ' . $db->qstr($expire) . ', field1 = ' . $db->qstr($email) . ', data = ' . $db->qstr($data) ; $result = $db->Execute($sql); ##################################################### ### Send the subscription confirmation email : $E['html'] = 0; $E['priority'] = 0; $E['to_email'] = $email; $E['to_name'] = $first_name; global $C_translate; $E['body_text'] = $C_translate->translate('subscribe_body','newsletter',''); $E['subject'] = $C_translate->translate('subscribe_subj','newsletter',''); $E['body_text'] = eregi_replace('%name%', $first_name, $E['body_text']); $E['body_text'] = eregi_replace('%email%', $email, $E['body_text']); $E['body_text'] = eregi_replace('%confirm_url%', URL.'?_page=newsletter:subscribe_confirm&email='.$email.'&validate='.$now, $E['body_text']); $E['body_text'] = eregi_replace('%site_name%', SITE_NAME, $E['body_text']); ##################################################### ### Get the setup email settings: $db = &DB(); $q = "SELECT * FROM ".AGILE_DB_PREFIX."setup_email WHERE site_id = ".$db->qstr(DEFAULT_SITE)." AND id = ".$db->qstr(DEFAULT_SETUP_EMAIL); $setup_email = $db->Execute($q); if($setup_email->fields['type'] == 0) { $type = 0; } else { $type = 1; $E['server'] = $setup_email->fields['server']; $E['account'] = $setup_email->fields['username']; $E['password'] = $setup_email->fields['password']; } $E['from_name'] = $setup_email->fields['from_name']; $E['from_email'] = $setup_email->fields['from_email']; ###################################################### ### SEND THE MESSAGE! require_once(PATH_CORE . 'email.inc.php'); $email = new CORE_email; if($type == 0) { ### SEND THE MESSAGE $email->PHP_Mail($E); } else { ### SEND TEXT VERSION $email->SMTP_Mail($E); } ##################################################### ### Success message! if(isset($VAR['newsletter_type'])) { $message = $C_translate->translate('subscribe_confirm', 'newsletter', ''); $C_debug->alert($message); } } ############################## ## SUBSCRIBE CONFIRM ## ############################## function subscribe_confirm($VAR) { global $C_debug, $C_translate; ### validate that the user provided their email /* We need the following vars to confirm: 'email' 'validate' */ if(!isset($VAR['email']) || !isset($VAR['validate'])) { ### ERROR: bad link.... $url = '
' . $C_translate->translate('submit','CORE','') . ''; $message = eregi_replace('%here%', $url, $C_translate->translate('subscribe_confirm_fail','newsletter','')); echo $message; return; } else { ### Confirm the email/timestamp match $email = @$VAR['email']; $time = @$VAR['validate']; $db = &DB(); $sql = 'SELECT data FROM ' . AGILE_DB_PREFIX . 'temporary_data WHERE site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND date_orig = ' . $db->qstr($time) . ' AND field1 = ' . $db->qstr($email); $result = $db->Execute($sql); if($result->RecordCount() == 0) { ### ERROR: no match for submitted link, invalid or expired. $url = '
' . $C_translate->translate('submit','CORE','') . ''; $message = eregi_replace('%here%', $url, $C_translate->translate('subscribe_confirm_fail','newsletter','')); echo $message; return; } $arr = unserialize($result->fields['data']); @$varstored['static_relation'] = unserialize(base64_decode($arr['var'])); ############################################################### ### Delete the temporary record $sql = 'DELETE FROM ' . AGILE_DB_PREFIX . 'temporary_data WHERE site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND field1 = ' . $db->qstr($email); $db->Execute($sql); ############################################################### ### Create the newsletter subscription(s): $db = &DB(); for($i=0; $iadd($varstored, 'newsletter_subscriber', $id); } ### Return the success message: echo $C_translate->translate('subscribe_confirm_success','newsletter',''); } } ############################## ## UNSUBSCRIBE ## ############################## function unsubscribe($VAR) { global $C_debug, $C_translate; ### Check required var if(!isset($VAR['newsletter_email']) || $VAR['newsletter_email'] == '') { ### ERROR: bad link.... $message = $C_translate->translate('subscribe_email_req','newsletter',''); $C_debug->alert($message); return; } ### Confirm the email/timestamp match $email = @$VAR['newsletter_email']; $n_id = @$VAR['newsletter_id']; ######################################################### ### Drop any existing subscriptions to avoid duplicates! $db = &DB(); if(gettype($n_id) == 'array') { for($i=0; $ialert($message); } } ?>