208 lines
8.0 KiB
Plaintext
208 lines
8.0 KiB
Plaintext
|
<?_info
|
||
|
NOCACHE=>1
|
||
|
_info?><?page
|
||
|
title=>Payment Center
|
||
|
body<=
|
||
|
|
||
|
<?h1 LiveJournal Payment Center h1?>
|
||
|
<?p
|
||
|
Here you can assemble an order for paid <a href="/paidaccounts/">LiveJournal services</a> or <a href="/store/">clothing items</a>, and then pay using a credit card, PayPal account, or mailing in a check with your order number. You can review the current status of any of your paid accounts or services by checking the <a href="/paidaccounts/status.bml">Paid Account Status</a> page.
|
||
|
p?>
|
||
|
|
||
|
<?_code
|
||
|
{
|
||
|
use strict;
|
||
|
use vars qw(%COOKIE %GET);
|
||
|
my $cart = $GET{'c'} || $COOKIE{'cart'};
|
||
|
my $ret;
|
||
|
my $remote = LJ::get_remote();
|
||
|
|
||
|
if ($remote && $remote->identity) {
|
||
|
return "<?h1 Sorry h1?><?p Non-LiveJournal users can't upgrade their external identity accounts. p?>";
|
||
|
}
|
||
|
|
||
|
if (! $COOKIE{'cart'} && $cart =~ /^(\d+)-(\d+)$/) {
|
||
|
$COOKIE{'cart'} = $cart;
|
||
|
}
|
||
|
|
||
|
# FIXME: remove after ugly hack is gone
|
||
|
if ($LJ::PAY_INCLUDE_DISKQUOTA && $GET{include}) {
|
||
|
$COOKIE{'ljpayinclude'} = $GET{include};
|
||
|
}
|
||
|
|
||
|
my $cartobj = LJ::Pay::load_cart($cart);
|
||
|
if ($cartobj && $cartobj->{'userid'}) {
|
||
|
return "You must be logged in as this cart's owner to proceed with checkout."
|
||
|
unless $remote;
|
||
|
return "You do not own this cart. If you'd like to start a new cart, please click " .
|
||
|
"<a href='./?c=new'>here</a>."
|
||
|
unless $cartobj->{'userid'} == $remote->{'userid'};
|
||
|
}
|
||
|
|
||
|
if ($GET{'c'} eq "new") {
|
||
|
delete $COOKIE{'cart'};
|
||
|
undef $cart;
|
||
|
}
|
||
|
|
||
|
# see if cart's dead or c=new (invalid, so load new cart)
|
||
|
if (! $cartobj && $cart) {
|
||
|
delete $COOKIE{'cart'};
|
||
|
undef $cart;
|
||
|
}
|
||
|
|
||
|
# don't let them modify the cart if they've already started
|
||
|
# any sort of checkout process
|
||
|
my $can_mod = ! $cartobj || LJ::Pay::can_mod_cart($cartobj);
|
||
|
|
||
|
# display a configurable banner if it exists
|
||
|
$ret .= ref $LJ::PAY_MARQUEE_HTML eq 'CODE' ? $LJ::PAY_MARQUEE_HTML->() : $LJ::PAY_MARQUEE_HTML . '';
|
||
|
|
||
|
$ret .= "<form action='modify.bml' method='post' style='display: inline'>";
|
||
|
$ret .= LJ::html_hidden("cart", $cart);
|
||
|
|
||
|
$ret .= "<div style='margin-left: 20px; margin-top: 2em'>";
|
||
|
LJ::Pay::render_cart($cartobj, \$ret, {
|
||
|
'checkout' => 1,
|
||
|
'pics' => 1,
|
||
|
'remove' => $can_mod,
|
||
|
});
|
||
|
$ret .= "</div>";
|
||
|
|
||
|
# let 'em know if cart is paid for (if they're actually viewing a cart)
|
||
|
if ($cartobj && $cartobj->{'mailed'} ne "C") {
|
||
|
$ret .= "<?h1 Paid for h1?><?p This order has been paid for on $cartobj->{'daterecv'}. p?>";
|
||
|
$ret .= "<ul><input type='submit' name='action:neworder' value='New Order'></ul>";
|
||
|
$ret .= "</form>";
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
# let 'em know if cart is locked
|
||
|
unless ($can_mod) {
|
||
|
$ret .= "<?h1 New Order? h1?>";
|
||
|
$ret .= "<?p The cart above has been checked out. Start a new order?";
|
||
|
$ret .= "<ul><input type='submit' name='action:neworder' value='New Order'></ul>";
|
||
|
$ret .= " p?></form>";
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
if (LJ::Pay::cart_needs_shipping($cartobj)) {
|
||
|
$ret .= "<?h1 Return Policy h1?><?p <b>Notice:</b> To minimize costs, we have a strict no return policy. If you're buying clothing items, be sure to consult the <a href='/store/sizechart.bml'>size chart</a> first. p?>";
|
||
|
}
|
||
|
|
||
|
# current account summary
|
||
|
if ($remote) {
|
||
|
$ret .= "<?h1 Account Status h1?>";
|
||
|
$ret .= "<?p Below is a brief summary of current account status for " . LJ::ljuser($remote) .
|
||
|
". For more information, see the full <a href='$LJ::SITEROOT/paidaccounts/status.bml'>account status page</a>. p?>";
|
||
|
$ret .= LJ::Pay::account_summary($remote);
|
||
|
}
|
||
|
|
||
|
# add items to order
|
||
|
$ret .= "<?h1 Add to Order... h1?><?p ";
|
||
|
|
||
|
my @items;
|
||
|
|
||
|
# coppa verification
|
||
|
if ($remote && $remote->underage) {
|
||
|
push @items, ("coppa", "Age Verification (for COPPA Compliance)");
|
||
|
}
|
||
|
|
||
|
# permanent account
|
||
|
if ($LJ::PERM_SALE) {
|
||
|
push @items, ("perm",
|
||
|
LJ::Pay::product_name("perm") . " (\$150.00 USD)");
|
||
|
}
|
||
|
|
||
|
# paid accounts
|
||
|
foreach my $mo (sort { $b <=> $a } keys %LJ::Pay::account) {
|
||
|
next unless $mo && $LJ::Pay::account{$mo};
|
||
|
push @items, ("paidacct-$mo",
|
||
|
LJ::Pay::product_name("paidacct", undef, $mo) .
|
||
|
" (\$$LJ::Pay::account{$mo}->{'amount'}.00 USD)");
|
||
|
}
|
||
|
|
||
|
# bonus features
|
||
|
|
||
|
# FIXME: this is an ugly hack just so we can give out ?include=diskquota
|
||
|
# urls for a limited beta of the disk quota purchase service.
|
||
|
# should be removed later.
|
||
|
my @bonus_list = LJ::Pay::bonus_item_list($remote, $cartobj);
|
||
|
while (my ($k, $v) = splice(@bonus_list, 0, 2)) {
|
||
|
next unless ! $LJ::PAY_INCLUDE_DISKQUOTA || $COOKIE{'ljpayinclude'} eq 'diskquota' || $k !~ /diskquota/;
|
||
|
|
||
|
push @items, $k, $v;
|
||
|
}
|
||
|
|
||
|
# pre-hack code
|
||
|
#push @items, LJ::Pay::bonus_item_list($remote, $cartobj);
|
||
|
|
||
|
# rename tokens
|
||
|
push @items, ("rename",
|
||
|
LJ::Pay::product_name("rename") . " (\$15.00 USD)");
|
||
|
|
||
|
# coupons
|
||
|
foreach my $amt (@LJ::Pay::coupon) {
|
||
|
push @items, ("coupon-$amt",
|
||
|
LJ::Pay::product_name("coupon", "dollaroff", $amt) . " (\$$amt USD)");
|
||
|
}
|
||
|
|
||
|
# item drop-down
|
||
|
$ret .= "<table>";
|
||
|
$ret .= "<tr><td align='right'>Item:</td><td>" .
|
||
|
LJ::html_select({ name => 'item',
|
||
|
selected => $GET{'item'},
|
||
|
}, @items) .
|
||
|
LJ::help_icon("pay_item", " ") .
|
||
|
"</td></tr>";
|
||
|
|
||
|
# recipient
|
||
|
$ret .= "<tr><td align='right' valign='top'>Recipient:</td>";
|
||
|
$ret .= "<td>";
|
||
|
if ($remote) {
|
||
|
my $checked = $GET{'for'} ? "" : "checked='checked'";
|
||
|
$ret .= "<input type='radio' $checked name='for' value='remote' id='forremote' /> <label for='forremote'><b>Current user</b></label>: " . LJ::ljuser($remote->{'user'}) . "<br />";
|
||
|
} else {
|
||
|
$ret .= "<input type='radio' disabled='disabled' name='for' value='remote' id='forremote' /> <label for='forremote'><b>Current user</b></label>: <i>(you must first <a href='/login.bml?ret=1'>login</a>)</i><br />";
|
||
|
}
|
||
|
|
||
|
# other user
|
||
|
my $checked = $GET{'for'} ? "checked='checked'" : "";
|
||
|
my $val_otheruser = LJ::ehtml($GET{'for'});
|
||
|
$ret .= "<input type='radio' name='for' value='other' $checked id='forother' /> <label for='forother'><b>Gift for user/community:</b></label> <input name='otheruser' type='text' size='15' maxlength='15' value='$val_otheruser' /><br />";
|
||
|
$ret .= "<input type='radio' name='for' value='email' id='foremail' /> <label for='foremail'><b>Email redemption code to:</b></label> <input name='redemail' type='text' size='20' maxlength='80' /><br />";
|
||
|
$ret .= " <small>(new users: use this last option)</small>";
|
||
|
|
||
|
$ret .= "</td></tr>";
|
||
|
|
||
|
# gift options
|
||
|
$ret .= "<tr><td align='right' valign='top'>Other options:</td><td>";
|
||
|
$ret .= "<input type='checkbox' name='anongift' id='anongift' /> <label for='anongift'>$ML{'.gift.anonymous'}</label>\n";
|
||
|
$ret .= "<p style='margin-top: 5px'>$ML{'.deliverydate.label'} <input name='giveafter' size='16' maxlength='16' /><br />$ML{'.deliverydate.details'}";
|
||
|
$ret .= "</tr>";
|
||
|
|
||
|
# add
|
||
|
$ret .= "<tr><td></td><td align='left'><input type='submit' name='action:additem' value='Add to order...'></td></tr>";
|
||
|
|
||
|
$ret .= "</table> p?>";
|
||
|
$ret .= "</form>\n"; # close add form
|
||
|
|
||
|
$ret .= "<?h1 Have a coupon? h1?>";
|
||
|
$ret .= "<?p If you have a coupon, enter it here: p?>";
|
||
|
$ret .= "<form style='margin-left: 30px' method='post' action='modify.bml'>";
|
||
|
$ret .= LJ::html_hidden("action:coupon", 1);
|
||
|
$ret .= LJ::html_hidden("cart", $cart);
|
||
|
$ret .= "<input type='text' name='coupon' size='20' />";
|
||
|
$ret .= "<input type='submit' value='Use' />";
|
||
|
$ret .= "</form>";
|
||
|
|
||
|
# Tshirt stuff
|
||
|
$ret .= "<?h1 Add LiveJournal Clothing to Order... h1?>";
|
||
|
$ret .= "<?p To view the LiveJournal clothing, check out the <a href='/store/'>LiveJournal Store</a>. p?>";
|
||
|
|
||
|
return $ret;
|
||
|
}
|
||
|
_code?>
|
||
|
|
||
|
<=body
|
||
|
page?>
|