","
","
","",
""), 1);
}
/// redirect to make F5 key (Refresh) working
if (strlen($_POST['amember_pass']) && ($_SERVER["REQUEST_METHOD"] == 'POST')){
$url = $PHP_SELF;
srand(time());
if (!preg_match('/\?/', $url))
$url .= "?r=". rand(10000,99999);
html_redirect($url, 0, _MEMBER_PLEASE_WAIT, _MEMBER_REDIRECTING);
exit();
}
////////////////////////////////////////////////////////////////////////
function rcmp_begin_date($a, $b){
return strcmp($b['begin_date'], $a['begin_date']);
}
function get_begin_date($member_id, $product_id){
global $db;
$payments = & $db->get_user_payments(intval($member_id), 1);
$date = date('Y-m-d');
$pr_new = $db->get_product($product_id);
if (preg_match('/^\d\d\d\d-\d\d-\d\d$/', $pr_new['start_date']))
return $pr_new['start_date']; /// fixed start date
if ($pr_new['renewal_group'] < 0)
return $date;
foreach ($payments as $p){
$pr = $db->get_product($p['product_id']);
if ((($p['product_id'] == $product_id) ||
($pr['renewal_group'] == $pr_new['renewal_group'])) &&
($p['expire_date'] > $date)
)
$date = $p['expire_date'];
}
list($y,$m,$d) = split('-', $date);
$date = date('Y-m-d', mktime(0,0,0,$m, $d, $y));
return $date;
}
function check_product_scope($product_id, $member_id){
// return '' if allowed
// return error message if denied
global $db;
$product = $db->get_product($product_id);
if (!$product['scope']) return;
if ($product['scope'] == 'member'){
//check that customer paid
if (count($db->get_user_payments($member_id,1)))
return;
else
return _MEMBER_ONLY4_PAID;
}
if ($product['scope'] == 'signup'){
//check that customer paid
if (!count($db->get_user_payments($member_id,1)))
return;
else
return _MEMBER_ONLY4_NEW;
}
return _MEMBER_NOT4_ORDER;
}
function do_renew(){
global $_SESSION;
global $_amember_id;
global $config, $db, $t, $vars, $plugins, $error;
$member_id = intval($_amember_id);
$error = array_merge((array)$error, (array)plugin_validate_member_form($vars));
if (count($error)){
$t->assign('error', $error);
return;
}
if (!intval($vars['product_id'])) {
$t->assign('error', _MEMBER_SELECT_PRODUCT);
return;
} else {
$price = calculate_price($vars['product_id'], $member_id, $vars, $prices);
if (($price == 0) && !$GLOBALS['_trial_days']
&& in_array('free', $plugins['payment']))
$vars['paysys_id'] = 'free';
}
if ($config['product_paysystem']){
$pr = get_product(is_array($vars['product_id'])?$vars['product_id'][0]:$vars['product_id']);
$vars['paysys_id'] = $pr->config['paysys_id'];
}
if (!$vars['paysys_id']) {
$t->assign('error', _MEMBER_SELECT_PAYMENT);
return;
}
//check for agreement
$display_agreement = 0;
foreach ((array)$vars['product_id'] as $pid){
$product = $db->get_product($pid);
if ($product['need_agreement'])
$display_agreement++;
}
$member = $db->get_user($member_id);
if ($display_agreement && !$member['data']['i_agree'] && !$vars['i_agree']){
display_agreement(serialize($vars)); // defined in the product.inc.php
exit();
}
if ($vars['i_agree'] && !$member['data']['i_agree']){
$member['data']['i_agree']++;
$db->update_user($member_id, $member);
}
///
do { // for easy exit using break;
$paysys_id = $vars['paysys_id'];
$product_id = $vars['product_id'];
foreach ((array)$vars['product_id'] as $pid){
$error = check_product_scope($pid, $_amember_id);
if ($error) break;
}
if ($error = check_product_requirements((array)$vars['product_id'],
get_product_requirements_for_member($_amember_id)))
break;
$price = calculate_price($vars['product_id'], $member_id, $vars, $prices);
if ($error) break;
if ($GLOBALS['COUPON_CODE'])
$vars['COUPON_CODE'] = $GLOBALS['COUPON_CODE'];
global $payment_additional_fields;
$additional_values = array();
foreach ($payment_additional_fields as $f){
$fname = $f['name'];
if (isset($vars[$fname]))
$additional_values[$fname] = $vars[$fname];
}
$additional_values['COUPON_DISCOUNT'] = $GLOBALS['COUPON_DISCOUNT'];
$additional_values['TAX_AMOUNT'] = $GLOBALS['TAX_AMOUNT'];
$additional_values['TAXES'] = $GLOBALS['TAXES'];
if (is_array($product_id)) {
$begin_date = get_begin_date($_amember_id, $product_id[0]);
$product = & get_product($product_id[0]);
$expire_date = $product->get_expire($begin_date); //yyyy-mm-dd
$payment_id = $db->add_waiting_payments($member_id, $product_id,
$paysys_id, $price, $prices, $begin_date, $expire_date, $vars,
$additional_values);
if ($error) break;
} else {
$begin_date = get_begin_date($_amember_id, $product_id);
$product = & get_product($product_id);
$expire_date = $product->get_expire($begin_date); //yyyy-mm-dd
$payment_id = $db->add_waiting_payment($member_id, $product_id,
$paysys_id, $price, $begin_date, $expire_date, $vars,
$additional_values);
if ($error) break;
}
$error = plugin_do_payment($paysys_id, $payment_id, $member_id,
is_array($product_id) ? $product_id[0] : $product_id,
$price, $begin_date, $expire_date, $vars);
if ($error) {
$db->delete_payment($payment_id);
break;
}
exit();
} while (0);
//if we here, error was occured
$t->assign('error', $error);
return;
}
function check_renewal_allowed($product, $products_active){
global $config, $db;
switch ($config['limit_renewals']){
case 0:// don't check
return 1;
case 1: // check if the same product
return !in_array($product['product_id'], $products_active);
case 2: // check if the same group
foreach ($products_active as $i){
$pr = $db->get_product($i);
if ($pr['renewal_group'] == $product['renewal_group'])
return 0;
}
return 1;
case 3: // check if any active
return !$products_active;
}
return 0;
}
function update_subscriptions () {
global $config, $_product_id, $t, $db, $vars;
$_amember_id = $_SESSION['_amember_id'];
$member_id = intval($_amember_id);
$db->delete_member_threads($member_id);
if (!$vars['unsubscribe']){
$q = $db->query($s = "
UPDATE {$db->config['prefix']}members
SET unsubscribed=0
WHERE member_id=$member_id
");
$db->add_member_threads($member_id, $vars['threads']);
} else {
$q = $db->query($s = "
UPDATE {$db->config['prefix']}members
SET unsubscribed=1
WHERE member_id=$member_id
");
}
html_redirect("member.php", false,
_TPL_NEWSLETTER_INFO_SAVED, _TPL_NEWSLETTER_INFO_UPDATED);
exit;
}
///////////////////////// MAIN /////////////////////////////////////////
unset($GLOBALS['_trial_days']); // trial handling
$_amember_id = $_SESSION['_amember_id'];
$vars = get_input_vars();
if ($vars['action'] == 'get_invoice' && $vars['id'] > 0){
$id = intval($vars['id']);
if ($config['send_pdf_invoice']){
require_once("$config[root_dir]/includes/fpdf/fpdf.php");
$invoice = get_pdf_invoice($id, $_amember_id);
header("Cache-control: private");
header("Content-type: application/pdf");
header("Content-Length: ".strlen ($invoice['string']));
header("Content-Disposition: attachment; filename=amember-invoice-$id.pdf");
print $invoice['string'];
exit;
}
}
if ($vars['action'] == 'renew'){
do_renew();
} elseif ($vars['action'] == 'cancel_recurring'){
$p = $db->get_payment($vars['payment_id']);
if ($p['member_id'] != $_amember_id)
die(_MEMBER_ID_NOT_MATCH);
$p['data']['CANCELLED']++;
$db->update_payment($vars['payment_id'], $p);
$t->assign('title', _MEMBER_SUBSCR_CANCELLED);
$t->assign('msg', _MEMBER_RSUB_CANCELLED);
$t->display("msg_close.html");
if ($config['send_cancel_admin']){
$u = $_SESSION['_amember_user'];
mail_admin(sprintf(_MEMBER_MAIL_ADMIN,$u[login],$vars[payment_id]),
_MEMBER_MAIL_THEME);
}
exit();
} elseif ($vars['do_agreement']) {
if (!$vars['i_agree']){
global $error;
$error[] = _MEMBER_ERROR;
display_agreement($vars['data']);
exit();
}
$vars = unserialize($vars['data']);
$vars['i_agree']++;
do_renew();
}
// common processing
// get product list (to fill $_product_id also)
$products = & $db->get_products_list();
$pp = array();
$_product_id = array();
foreach ($products as $p) {
$pp[ $p['product_id'] ] = $p['title'] ;
$_product_id[] = $p['product_id'];
}
$t->assign('products', $pp);
$payments = & $db->get_user_payments(intval($_amember_id), 1);
usort($payments, 'rcmp_begin_date');
$now = date('Y-m-d');
$member_active = $member_paid = 0;
foreach ($payments as $k=>$v){
$payments[$k]['is_active'] =
(($v['expire_date'] >= $now) && ($v['begin_date'] <= $now))? 1 : 0;
if ($payments[$k]['is_active']) $member_active++;
if ($v['completed']) $member_paid++;
// try to display "Cancel" Link
if ($payments[$k]['expire_date'] >= date('Y-m-d')){
$paysys = get_paysystem($v['paysys_id']);
$product = $db->get_product($v['product_id']);
if ($paysys['recurring']
&& ($pay_plugin = &instantiate_plugin('payment', $v['paysys_id']))
&& $product['is_recurring']
&& method_exists($pay_plugin, 'get_cancel_link')){
$payments[$k]['cancel_url'] =
$pay_plugin->get_cancel_link($v['payment_id']);
}
}
}
$t->assign('payments', $payments);
///////////////////////////////////////////////////
if ($config['display_member_pw_urls']){
if (in_array('htpasswd_secure', $plugins['protect']))
$member_login_pw =
htpasswd_secure_get_login($_SESSION['_amember_user']['login']).
':'.
htpasswd_secure_get_passwd($_SESSION['_amember_user']['pass']);
else
$member_login_pw =
$_SESSION['_amember_user']['login'].
':'.
$_SESSION['_amember_user']['pass'];
}
$member_products = $_SESSION['_amember_products'];
foreach ((array)$member_products as $k => $pr){
$member_products[$k]['url'] = add_password_to_url($pr['url'], $member_login_pw);
foreach ((array)$pr['add_urls'] as $u=>$kk){
$uu=add_password_to_url($u, $member_login_pw);
unset($member_products[$k]['add_urls'][$u]);
$member_products[$k]['add_urls'][$uu] = $kk;
}
}
$t->assign('member_products', $member_products);
if ($member_paid)
$member_scope_allowed = array('', 'member');
else // signup
$member_scope_allowed = array('', 'signup');
$products_to_renew = $products;
$products_active = array();
$dat = date('Y-m-d');
foreach ($db->get_user_payments(intval($_amember_id), 1) as $p)
if (($p['begin_date'] >= $dat) && ($p['expire_date'] <= $dat))
$products_active[] = $p['product_id'];
foreach ($products_to_renew as $k=>$v){
if (!in_array($v['scope'], $member_scope_allowed))
unset($products_to_renew[$k]);
if ($_GET['price_group']){
if (!in_array($_GET['price_group'], split(',',$v['price_group'])) )
unset($products_to_renew[$k]);
} elseif ($v['price_group'] < 0){
unset($products_to_renew[$k]);
} elseif (!check_renewal_allowed($v, $products_active)){
unset($products_to_renew[$k]);
}
if ($err = check_product_requirements(array($v['product_id']),
get_product_requirements_for_member($_amember_id))){
unset($products_to_renew[$k]);
}
}
$t->assign('products_to_renew', $products_to_renew);
$paysystems = get_paysystems_list();
$pp = array();
foreach ($paysystems as $p)
if ($p['public'])
$pp[ $p['paysys_id'] ] = $p['title'] ;
$t->assign('paysystems', $pp);
$pp1 = $pp;
//remove free paysystem from select
if (count($pp1) > 1)
foreach ($pp1 as $k=>$p)
if ($k == 'free') unset($pp1[$k]);
$t->assign('paysystems_select', $pp1);
// newsletters form
if ($vars['action'] == 'newsletters_update'){
update_subscriptions ();
}
$m = $db->get_user($_amember_id);
$unsubscribed = $m['unsubscribed'];
//$threads_count = $db->get_threads_list_c($_amember_id);
$threads_list = $db->get_threads_list(0, $db->get_threads_list_c(), $_amember_id);
$threads_count = count($threads_list);
$threads = $db->get_member_threads($_amember_id);
while (list($thread_id, ) = each ($threads)){
if (!$unsubscribed)
$threads[$thread_id] = '1';
else
$threads[$thread_id] = '0';
}
$t->assign('threads_list', $threads_list);
$t->assign('threads', $threads);
$t->assign('unsubscribed', $unsubscribed);
//newsletters archive
if (isset($vars['start'])) $start = $vars['start'];
//$db->delete_old_newsletters();
$all_count = $db->get_archive_list_c($vars['thread_id'], $_amember_id);
$count = 5;
$al = & $db->get_archive_list($start, $count, $vars['thread_id'], $_amember_id);
$t->assign('al', $al);
$member_links = plugin_get_member_links($_SESSION['_amember_user']);
$t->assign('member_links', $member_links);
$left_member_links = plugin_get_left_member_links($_SESSION['_amember_user']);
$t->assign('left_member_links', $left_member_links);
$t->assign('user', $_amember_user);
$t->display('member.html');
?>