mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-05-02 06:00 am

[dw-free] More admin page functionality. I know, this REALLY needs to be abstracted out to use DW::

[commit: http://hg.dwscoalition.org/dw-free/rev/847dc1707b04]

More admin page functionality. I know, this REALLY needs to be abstracted
out to use DW::Shop::Item::Account and DW::InviteCodes, but I don't have the
time this second. These need major cleanup.

Patch by [staff profile] mark.

Files modified:
  • cgi-bin/LJ/Widget/ShopCart.pm
  • htdocs/admin/pay/view.bml
--------------------------------------------------------------------------------
diff -r 9371c5583be4 -r 847dc1707b04 cgi-bin/LJ/Widget/ShopCart.pm
--- a/cgi-bin/LJ/Widget/ShopCart.pm	Sat May 02 04:32:44 2009 +0000
+++ b/cgi-bin/LJ/Widget/ShopCart.pm	Sat May 02 06:00:48 2009 +0000
@@ -39,6 +39,8 @@ sub render_body {
     # no matter where we are
     $opts{receipt} = 1
         unless $cart->state == $DW::Shop::STATE_OPEN;
+    $opts{receipt} = 1
+        if $opts{admin};
 
     $ret .= $class->start_form
         unless $opts{receipt};
@@ -50,7 +52,9 @@ sub render_body {
     $ret .= "<th>" . $class->ml( 'widget.shopcart.header.deliverydate' ) . "</th>";
     $ret .= "<th>" . $class->ml( 'widget.shopcart.header.to' ) . "</th>";
     $ret .= "<th>" . $class->ml( 'widget.shopcart.header.from' ) . "</th>";
-    $ret .= "<th>" . $class->ml( 'widget.shopcart.header.price' ) . "</th></tr>";
+    $ret .= "<th>" . $class->ml( 'widget.shopcart.header.price' ) . "</th>";
+    $ret .= "<th>ADMIN</th>" if $opts{admin};
+    $ret .= "</tr>";
     foreach my $item ( @{$cart->items} ) {
         my $from_u = LJ::load_userid( $item->from_userid );
 
@@ -62,6 +66,28 @@ sub render_body {
         $ret .= "<td>" . $item->t_html . "</td>";
         $ret .= "<td>" . ( $item->anonymous || !LJ::isu( $from_u ) ? $class->ml( 'widget.shopcart.anonymous' ) : $from_u->ljuser_display ) . "</td>";
         $ret .= "<td>\$" . $item->cost . " USD</td>";
+        if ( $opts{admin} ) {
+            $ret .= "<td>";
+            if ( $item->t_email ) {
+                my $dbh = LJ::get_db_writer();
+                my $acid = $dbh->selectrow_array( 'SELECT acid FROM shop_codes WHERE cartid = ? AND itemid = ?',
+                                                  undef, $cart->id, $item->id );
+                if ( $acid ) {
+                    my ( $auth, $rcptid ) = $dbh->selectrow_array( 'SELECT auth, rcptid FROM acctcode WHERE acid = ?', undef, $acid );
+                    $ret .= DW::InviteCodes->encode( $acid, $auth );
+                    if ( my $ru = LJ::load_userid( $rcptid ) ) {
+                        $ret .= ' (' . $ru->ljuser_display . ", <a href='$LJ::SITEROOT/admin/pay/index?view=" . $ru->user . "'>edit</a>)";
+                    } else {
+                        $ret .= " (unused, <a href='$LJ::SITEROOT/admin/pay/view?striptimefrom=$acid'>strip</a>)";
+                    }
+                } else {
+                    $ret .= 'no code yet or code was stripped';
+                }
+            } else {
+                $ret .= '--';
+            }
+            $ret .= "</td>";
+        }
         $ret .= "</tr>";
     }
     $ret .= "<tr><td colspan='6' class='total'>" . $class->ml( 'widget.shopcart.total' ) . " \$" . $cart->display_total . " USD</td></tr>";
diff -r 9371c5583be4 -r 847dc1707b04 htdocs/admin/pay/view.bml
--- a/htdocs/admin/pay/view.bml	Sat May 02 04:32:44 2009 +0000
+++ b/htdocs/admin/pay/view.bml	Sat May 02 06:00:48 2009 +0000
@@ -14,6 +14,31 @@
     return "<?needlogin?>" unless $remote; 
     return BML::ml( "admin.noprivserror", { numprivs => $numprivs, needprivs => "<b>" . join(", ", @displayprivs) . "</b>"} )
         unless LJ::check_priv($remote, 'payments');
+
+    # FIXME: there should be a better page for this or something
+    if ( my $acid = $GET{striptimefrom} ) {
+        if ( LJ::did_post() && LJ::check_form_auth() ) {
+            my $dbh = LJ::get_db_writer();
+            my $ct = $dbh->do( 'DELETE FROM shop_codes WHERE acid = ?',
+                               undef, $acid );
+            return $dbh->errstr if $dbh->err;
+            return "Failed to strip the code, already stripped?"
+                unless $ct > 0;
+            return "Okay, code stripped.";
+        }
+
+        my $auth = LJ::form_auth();
+        return <<EOF;
+<h1>Payment Manager - Strip Code</h1>
+<p><strong>This action strips the paid time from an invite code.  The code will still be
+usable, but it will no longer grant the user with any paid time.  Please confirm you wish
+to do this by clicking the button below.</strong></p>
+<form method='post' action='$LJ::SITEROOT/admin/pay/view?striptimefrom=$acid'>
+$auth
+<input type='submit' value='Strip that code!' />
+</form>
+EOF
+    }
 
     my $body = '<h1>Payment Manager - View Cart</h1>';
     $body .= '<p>[ <a href="/admin/pay/index.bml">&lt;&lt; Back to Index</a> ]</p>';
@@ -46,7 +71,7 @@
 
     $body .= "<h3>Items</h3>";
     if ( $cart->has_items ) {
-        $body .= LJ::Widget::ShopCart->render( receipt => 1, cart => $cart );
+        $body .= LJ::Widget::ShopCart->render( admin => 1, cart => $cart );
     }
     else {
         $body .= "<p>This cart has no items in it.</p>";
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org