98 lines
3.8 KiB
Plaintext
98 lines
3.8 KiB
Plaintext
<?page
|
|
title=>Apply Payment
|
|
body<=
|
|
<?_code
|
|
{
|
|
use strict;
|
|
use vars qw(%GET %POST);
|
|
|
|
my $remote = LJ::get_remote();
|
|
return "<?p You are not currently logged in. If you have an account already, go <a href='/login.bml?ret=1'>login</a> " .
|
|
"first. Otherwise, go <a href='/create.bml'>create an account</a> using your payment code, and the payment will be " .
|
|
"automatically applied to the newly created account. p?>"
|
|
unless $remote;
|
|
|
|
my $authas = $GET{'authas'} || $remote->{'user'};
|
|
my $u = LJ::get_authas_user($authas);
|
|
return LJ::bad_input($ML{'error.invalidauth'})
|
|
unless $u;
|
|
|
|
my $ret = '';
|
|
|
|
# authas switcher form
|
|
$ret .= "<form method='get' action='apply.bml'>\n";
|
|
$ret .= LJ::make_authas_select($remote, { 'authas' => $GET{'authas'} }) . "\n";
|
|
$ret .= "</form>\n\n";
|
|
|
|
$ret .= "<?h1 About h1?><?p This page lets you apply a payment code towards an existing account. p?>";
|
|
|
|
# handle form submission
|
|
if ($POST{'code'}) {
|
|
my $dbh = LJ::get_db_writer();
|
|
|
|
my $code = $POST{'code'};
|
|
return LJ::bad_input("Invalid code") unless length($code) == 12;
|
|
my ($acid, $auth) = LJ::acct_code_decode($code);
|
|
my ($usedby, $realauth) =
|
|
$dbh->selectrow_array("SELECT rcptid, auth FROM acctcode ".
|
|
"WHERE acid=?", undef, $acid);
|
|
return LJ::bad_input("Invalid code") unless $realauth && $auth eq $realauth;
|
|
return LJ::bad_input("You've already applied this payment") if $usedby == $u->{'userid'};
|
|
return LJ::bad_input("Somebody else has already applied this payment") if $usedby;
|
|
|
|
my $months;
|
|
|
|
if (my $pi = $dbh->selectrow_hashref("SELECT pi.item, pi.qty ".
|
|
"FROM payitems pi, acctpayitem api ".
|
|
"WHERE pi.piid=api.piid AND api.acid=?",
|
|
undef, $acid)) {
|
|
$months = 99 if $pi->{'item'} eq "perm";
|
|
$months = $pi->{'qty'} if $pi->{'item'} eq "paidacct";
|
|
} else {
|
|
$months = $dbh->selectrow_array("SELECT p.months ".
|
|
"FROM payments p, acctpay ap ".
|
|
"WHERE p.payid=ap.payid ".
|
|
"AND ap.acid=?", undef, $acid);
|
|
}
|
|
|
|
return "The code provided has no paid time associated with it." unless $months > 0;
|
|
|
|
if ($u->{'caps'} & 16) {
|
|
return "You already have a permanent account, so applying this ".
|
|
"second permanent account code would do nothing." if $months == 99;
|
|
return "You already have a permament account, so applying $months ".
|
|
"extra paid account months would do nothing.";
|
|
}
|
|
|
|
# double click protection
|
|
my $rows = $dbh->do("UPDATE acctcode SET rcptid=? WHERE acid=?", undef,
|
|
$u->{'userid'}, $acid);
|
|
if ($rows) {
|
|
LJ::Pay::add_paid_months($dbh, $u->{'userid'}, $months);
|
|
}
|
|
|
|
return "<?h1 Success h1?><?p You now have a permanent account. p?>" if $months == 99;
|
|
return "<?h1 Success h1?><?p $months extra paid account months have been applied to your account. p?>";
|
|
}
|
|
|
|
# show form before post
|
|
my $getextra = $authas ne $remote->{'user'} ? "?authas=$authas" : '';
|
|
$ret .= "<form method='post' action='apply.bml$getextra'>";
|
|
$ret .= "<?h1 Payment Code h1?><?p Enter a payment code to apply towards the <?ljuser $u->{'user'} ljuser?> account. p?>";
|
|
|
|
$ret .= "<?standout Code: ";
|
|
$ret .= LJ::html_text({ 'name' => 'code', 'size' => 13, 'maxlength' => 12, 'value' => $GET{'code'} }) . " ";
|
|
$ret .= LJ::html_submit("Apply") . " standout?>";
|
|
|
|
$ret .= "</form>";
|
|
|
|
return $ret;
|
|
|
|
|
|
}
|
|
_code?>
|
|
<=body
|
|
page?>
|
|
|
|
|