check_uniq_login($vars['login'], $vars['email'], $vars['pass0'], 1)){ $error[] = sprintf(_SIGNUP_INVALID_USERNAME_3,$vars[login]); } if (!check_email($vars['email'])){ $error[] = _SIGNUP_PLEASE_ENTER_EMAIL; } elseif (($config['unique_email'] && $member_id <= 0) && $db->users_find_by_string($vars['email'], 'email', 1)){ $error[] = _SIGNUP_INVALID_EMAIL_1.'
'.sprintf(_SIGNUP_INVALID_EMAIL_2,'','','
'); } if (!strlen($vars['pass0'])){ $error[] = _SIGNUP_PLEASE_ENTER_PSWD; } elseif (strlen($vars['pass0']) < $config['pass_min_length']){ $ll = $config[pass_min_length]; $error[] = sprintf(_SIGNUP_INVALID_PASS_1,$ll); } if ($vars['pass0'] != $vars['pass1']){ $error[] = _SIGNUP_INVALID_PASS_2; } $error = array_merge($error, plugin_validate_signup_form($vars)); return !count($error); } ############################################################################### # SHOW_PAYMENT_FORM # # get vars from database and plugins # display $GLOBAL[error] if it set # substitute previous entered parameters using Smarty # function show_payment_form(){ global $t; global $error; global $db, $config, $vars; global $signup_scope_allowed; $t->assign('error', $error); $products = $db->get_products_list(); if (!count($products)){ fatal_error(_SIGNUP_SCRIPT_ERROR); } foreach ($products as $k=>$v){ if (!in_array($v['scope'], $signup_scope_allowed)) unset($products[$k]); if ($vars['price_group']){ if (!in_array($vars['price_group'], split(',',$v['price_group'])) ) unset($products[$k]); } elseif ($v['price_group'] < 0){ unset($products[$k]); } } $paysystems = get_paysystems_list(); //remove paysystems such as manual foreach ($paysystems as $k=>$p) if (!$p['public']) unset($paysystems[$k]); //remove free paysystem from select if (count($paysystems) > 1) foreach ($paysystems as $k=>$p) if ($p['paysys_id'] == 'free') unset($paysystems[$k]); plugin_fill_in_signup_form($_REQUEST); plugin_fill_in_signup_form($vars); // Fill additional fields $t->assign('products', $products); $t->assign('paysystems', $paysystems); $t->assign('additional_fields_html', get_additional_fields_html($vars, 'signup')); $is_affiliate = '0'; $newsletter_threads = $db->get_signup_threads_c($is_affiliate); $t->assign('newsletter_threads', $newsletter_threads); $t->display($config['amember_signup_template'] ? $config['amember_signup_template'] : 'signup.html'); } function proceed_to_payment($payment_id, $member_id_exists){ global $config, $db; $payment = $db->get_payment($payment_id); if (!$payment['payment_id']) fatal_error(sprintf(_SIGNUP_PAYMENT_NOT_FOUND,$payment_id), 1); if ($payment['completed']) fatal_error(sprintf(_SIGNUP_PAYMENT_COMPLETED,$payment_id).""._SIGNUP_PAYMENT_COMPLETED_1."", 1); extract($payment, EXTR_OVERWRITE); if ($pr = $payment['data'][0]['BASKET_PRODUCTS']) $product_id = $pr; global $error; $error = plugin_do_payment($paysys_id, $payment_id, $member_id, is_array($product_id) ? $product_id[0] : $product_id, $amount, $begin_date, $expire_date, $vars); if ($error) { $db->delete_payment($payment_id); if (!$member_id_exists) $db->delete_user($member_id); show_payment_form(); } } ############################################################################### ## ## M A I N ## ############################################################################### unset($GLOBALS['_trial_days']); // trial handling $t = & new_smarty(); $error = ''; $vars = & get_input_vars(); plugin_display_signup_form($vars); $error = array(); unset($member_id); if ($vars['cs']){ list ($payment_id, $code) = explode ("-", $vars['cs']); $payment = $db->get_payment($payment_id); if (!$payment['payment_id']) fatal_error(_SIGNUP_INCORRECT_LINK, 1); $member_id = $payment['member_id']; $email_confirm_code = $payment['data']['email_confirm']['code']; $email_confirm_time = $payment['data']['email_confirm']['time']; $member_id_exists = $payment['data']['email_confirm']['member_id_exists']; // extract all variables from payment to signup $vars['member_id'] = $member_id; $vars['payment_id'] = $payment_id; $vars['member_id_exists'] = $member_id_exists; $u = $db->get_user($member_id); if (time() - $email_confirm_time > 10 * 24 * 60 * 60) // check that 'time' saved in record is not older than 10 days (to avoid code guessing) fatal_error(_SIGNUP_INCORRECT_LINK, 1); if (!$u['member_id']) fatal_error(_SIGNUP_INCORRECT_LINK, 1); if ($email_confirm_code != $code) fatal_error(_SIGNUP_INCORRECT_LINK, 1); $u['email_verified'] = 1; $db->update_user($member_id, $u); if ($config['auto_login_after_signup']){ $_SESSION['_amember_login'] = $u['login']; $_SESSION['_amember_pass'] = $u['pass']; } proceed_to_payment($payment_id, $member_id_exists); exit(); } if ($vars['do_agreement']){ if (!$vars['i_agree']){ $error[] = _SIGNUP_USER_AGREEMENT; display_agreement($vars['data']); exit(); } $vars = unserialize($vars['data']); $vars['i_agree']++; foreach ($vars as $k=>$v) $t->_smarty_vars['request'][$k] = $v; } ///// if ($vars['do_payment']){ $vars['aff_id'] = $_COOKIE['amember_aff_id']; if (!$config['login_dont_lowercase']) $vars['login'] = strtolower($vars['login']); if ($config['generate_login']) $vars['login'] = generate_login($vars); if ($config['generate_pass']) $vars['pass'] = $vars['pass0'] = $vars['pass1'] = generate_password($vars); if ($vars['product_id']){ $price = calculate_price($vars['product_id'], 0, $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['do_payment'] && check_payment_form())){ //check for agreement $display_agreement = 0; foreach ((array)$vars['product_id'] as $pid){ $product = $db->get_product($pid); if ($product['need_agreement']) $display_agreement++; } if ($display_agreement && !$vars['i_agree']){ display_agreement(serialize($vars)); // defined in the product.inc.php exit(); } // do payment ! $product_id = $vars['product_id']; $login = $vars['login']; $paysys_id = $vars['paysys_id']; do { // to easy exit using break() foreach ((array)$vars['product_id'] as $pid){ $product = $db->get_product($pid); if (!in_array($product['scope'], $signup_scope_allowed)){ $error = _SIGNUP_INCORRECT_PRODID; break; } ////////////// check products scope } if ($error = check_product_requirements((array)$vars['product_id'])) break; $member_id = $db->check_uniq_login($vars['login'], $vars['email'], $vars['pass0'], 1); $member_id_exists = 0; if ($config['verify_email']) $vars['email_verified'] = -1; if ($GLOBALS['_LANG_SELECTED'] != get_default_lang()){ $vars['selected_lang'] = $GLOBALS['_LANG_SELECTED']; } if ($member_id < 0) { $member_id = $db->add_pending_user($vars); /* No unsubscribe new members! if (!$vars['to_subscribe']){ $member = $db->get_user($member_id); $member['unsubscribed']='1'; $db->update_user($member_id, $member); } */ $is_affiliate = '0'; //only member if ($db->get_signup_threads_c($is_affiliate) && $vars['to_subscribe']) $db->subscribe_member ($member_id, $is_affiliate); } elseif (!$member_id) die(_SIGNUP_LOGIN_EXISTS); else { $member_id_exists++; //we found existing user with the same params // then will clean CC parameters if any if ($config['allow_second_signup'] && $db->get_user_payments($member_id,1)) { } else { $member = $db->get_user($member_id); $member['data']['cc-hidden']=''; $member['data']['cc-expire']=''; $member['data']['cc']=''; $member['data']['cc_street']=''; $member['data']['cc_city']=''; $member['data']['cc_state']=''; $member['data']['cc_zip']=''; $member['data']['cc_country']=''; foreach ($vars as $k=>$v) $member[$k] = $v; $db->update_user($member_id, $member); } } if ($error) { break; } $price = calculate_price($product_id, $member_id, $vars, $prices); if ($GLOBALS['COUPON_CODE']) $vars['COUPON_CODE'] = $GLOBALS['COUPON_CODE']; $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)) { $product = & get_product($product_id[0]); if (preg_match('/^\d\d\d\d-\d\d-\d\d$/', $product->config['start_date'])) $begin_date = $product->config['start_date']; /// fixed start date else $begin_date = date('Y-m-d'); $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); } else { $product = & get_product($product_id); if (preg_match('/^\d\d\d\d-\d\d-\d\d$/', $product->config['start_date'])) $begin_date = $product->config['start_date']; /// fixed start date else $begin_date = date('Y-m-d'); $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) { $db->delete_user($member_id); break; } if ($config['verify_email']){ global $db; $u = $db->get_user($member_id); $payment = $db->get_payment($payment_id); $code = substr(uniqid(rand(), true), 0, 12); $payment['data']['email_confirm'] = array('code' => $code, 'member_id_exists' => $member_id_exists, 'time' => time()); $db->update_payment($payment_id, $payment); mail_verification_email($u, $config['root_url'] . "/signup.php?cs=" . $payment_id . "-" . $code); //$md5 = md5($u['login'].$u['pass'].$member_id.$payment_id); //mail_verification_email($u, $config['root_url']."/signup.php?continue_signup=1&member_id=$member_id&member_id_exists=$member_id_exists&payment_id=$payment_id&md5=$md5"); $t->assign('user', $u); $t->display("email_verify.html"); exit(); } $u = $db->get_user($member_id); if ($config['auto_login_after_signup']){ $_SESSION['_amember_login'] = $u['login']; $_SESSION['_amember_pass'] = $u['pass']; } proceed_to_payment($payment_id, $member_id_exists); exit(); } while (0); } show_payment_form(); ?>