Page MenuHomePhabricator

D10284.diff
No OneTemporary

D10284.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2507,6 +2507,7 @@
'PhortuneProviderController' => 'applications/phortune/controller/PhortuneProviderController.php',
'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php',
'PhortunePurchaseQuery' => 'applications/phortune/query/PhortunePurchaseQuery.php',
+ 'PhortunePurchaseViewController' => 'applications/phortune/controller/PhortunePurchaseViewController.php',
'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php',
'PhortuneTestExtraPaymentProvider' => 'applications/phortune/provider/__tests__/PhortuneTestExtraPaymentProvider.php',
'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php',
@@ -5433,6 +5434,7 @@
'PhabricatorPolicyInterface',
),
'PhortunePurchaseQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+ 'PhortunePurchaseViewController' => 'PhortuneController',
'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider',
'PhortuneTestExtraPaymentProvider' => 'PhortunePaymentProvider',
'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider',
diff --git a/src/applications/phortune/application/PhabricatorPhortuneApplication.php b/src/applications/phortune/application/PhabricatorPhortuneApplication.php
--- a/src/applications/phortune/application/PhabricatorPhortuneApplication.php
+++ b/src/applications/phortune/application/PhabricatorPhortuneApplication.php
@@ -58,6 +58,9 @@
'view/(?P<id>\d+)/' => 'PhortuneProductViewController',
'edit/(?:(?P<id>\d+)/)?' => 'PhortuneProductEditController',
),
+ 'purchase/(?P<id>\d+)/' => array(
+ '' => 'PhortunePurchaseViewController',
+ ),
'provider/(?P<digest>[^/]+)/(?P<action>[^/]+)/'
=> 'PhortuneProviderController',
),
diff --git a/src/applications/phortune/controller/PhortuneAccountViewController.php b/src/applications/phortune/controller/PhortuneAccountViewController.php
--- a/src/applications/phortune/controller/PhortuneAccountViewController.php
+++ b/src/applications/phortune/controller/PhortuneAccountViewController.php
@@ -173,20 +173,36 @@
$rows = array();
$rowc = array();
foreach ($carts as $cart) {
+ $cart_link = phutil_tag(
+ 'a',
+ array(
+ 'href' => $this->getApplicationURI('cart/'.$cart->getID().'/'),
+ ),
+ pht('Cart %d', $cart->getID()));
+
$rowc[] = 'highlighted';
$rows[] = array(
- $cart->getPHID(),
+ phutil_tag('strong', array(), $cart_link),
'',
'',
);
foreach ($cart->getPurchases() as $purchase) {
+ $id = $purchase->getID();
+
$price = $purchase->getTotalPriceInCents();
$price = PhortuneCurrency::newFromUSDCents($price)->formatForDisplay();
+ $purchase_link = phutil_tag(
+ 'a',
+ array(
+ 'href' => $this->getApplicationURI('purchase/'.$id.'/'),
+ ),
+ $purchase->getFullDisplayName());
+
$rowc[] = '';
$rows[] = array(
'',
- $purchase->getPHID(),
+ $purchase_link,
$price,
);
}
@@ -222,6 +238,7 @@
$charges = id(new PhortuneChargeQuery())
->setViewer($viewer)
->withAccountPHIDs(array($account->getPHID()))
+ ->needCarts(true)
->execute();
return $this->buildChargesTable($charges);
diff --git a/src/applications/phortune/controller/PhortuneCartCheckoutController.php b/src/applications/phortune/controller/PhortuneCartCheckoutController.php
--- a/src/applications/phortune/controller/PhortuneCartCheckoutController.php
+++ b/src/applications/phortune/controller/PhortuneCartCheckoutController.php
@@ -98,7 +98,7 @@
foreach ($methods as $method) {
$method_control->addButton(
$method->getID(),
- $method->getBrand().' / '.$method->getLastFourDigits(),
+ $method->getFullDisplayName(),
$method->getDescription());
}
}
diff --git a/src/applications/phortune/controller/PhortuneCartController.php b/src/applications/phortune/controller/PhortuneCartController.php
--- a/src/applications/phortune/controller/PhortuneCartController.php
+++ b/src/applications/phortune/controller/PhortuneCartController.php
@@ -9,7 +9,7 @@
$total = 0;
foreach ($cart->getPurchases() as $purchase) {
$rows[] = array(
- pht('A Purchase'),
+ $purchase->getFullDisplayName(),
PhortuneCurrency::newFromUSDCents($purchase->getBasePriceInCents())
->formatForDisplay(),
$purchase->getQuantity(),
diff --git a/src/applications/phortune/controller/PhortuneCartViewController.php b/src/applications/phortune/controller/PhortuneCartViewController.php
--- a/src/applications/phortune/controller/PhortuneCartViewController.php
+++ b/src/applications/phortune/controller/PhortuneCartViewController.php
@@ -27,14 +27,16 @@
$charges = id(new PhortuneChargeQuery())
->setViewer($viewer)
->withCartPHIDs(array($cart->getPHID()))
+ ->needCarts(true)
->execute();
- $charges_table = $this->buildChargesTable($charges);
+ $charges_table = $this->buildChargesTable($charges, false);
$account = $cart->getAccount();
$crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(pht('Cart'));
+ $this->addAccountCrumb($crumbs, $cart->getAccount());
+ $crumbs->addTextCrumb(pht('Cart %d', $cart->getID()));
return $this->buildApplicationPage(
array(
diff --git a/src/applications/phortune/controller/PhortuneController.php b/src/applications/phortune/controller/PhortuneController.php
--- a/src/applications/phortune/controller/PhortuneController.php
+++ b/src/applications/phortune/controller/PhortuneController.php
@@ -52,15 +52,25 @@
return $account;
}
- protected function buildChargesTable(array $charges) {
+ protected function buildChargesTable(array $charges, $show_cart = true) {
$request = $this->getRequest();
$viewer = $request->getUser();
$rows = array();
foreach ($charges as $charge) {
+ $cart = $charge->getCart();
+ $cart_id = $cart->getID();
+ $cart_uri = $this->getApplicationURI("cart/{$cart_id}/");
+ $cart_href = phutil_tag(
+ 'a',
+ array(
+ 'href' => $cart_uri,
+ ),
+ pht('Cart %d', $cart_id));
+
$rows[] = array(
$charge->getID(),
- $charge->getCartPHID(),
+ $cart_href,
$charge->getPaymentProviderKey(),
$charge->getPaymentMethodPHID(),
PhortuneCurrency::newFromUSDCents($charge->getAmountInCents())
@@ -73,7 +83,7 @@
$charge_table = id(new AphrontTableView($rows))
->setHeaders(
array(
- pht('Charge ID'),
+ pht('ID'),
pht('Cart'),
pht('Provider'),
pht('Method'),
@@ -84,12 +94,17 @@
->setColumnClasses(
array(
'',
- '',
+ 'strong',
'',
'',
'wide right',
'',
'',
+ ))
+ ->setColumnVisibility(
+ array(
+ true,
+ $show_cart,
));
$header = id(new PHUIHeaderView())
@@ -100,4 +115,20 @@
->appendChild($charge_table);
}
+ protected function addAccountCrumb(
+ $crumbs,
+ PhortuneAccount $account,
+ $link = true) {
+
+ $name = pht('Account');
+ $href = null;
+
+ if ($link) {
+ $href = $this->getApplicationURI($account->getID().'/');
+ $crumbs->addTextCrumb($name, $href);
+ } else {
+ $crumbs->addTextCrumb($name);
+ }
+ }
+
}
diff --git a/src/applications/phortune/controller/PhortunePurchaseViewController.php b/src/applications/phortune/controller/PhortunePurchaseViewController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/phortune/controller/PhortunePurchaseViewController.php
@@ -0,0 +1,58 @@
+<?php
+
+final class PhortunePurchaseViewController extends PhortuneController {
+
+ private $purchaseID;
+
+ public function willProcessRequest(array $data) {
+ $this->purchaseID = $data['id'];
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $viewer = $request->getUser();
+
+ $account = $this->loadActiveAccount($viewer);
+
+ $purchase = id(new PhortunePurchaseQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($this->purchaseID))
+ ->executeOne();
+ if (!$purchase) {
+ return new Aphront404Response();
+ }
+ $cart = $purchase->getCart();
+
+ $title = pht('Purchase: %s', $purchase->getFullDisplayName());
+
+ $header = id(new PHUIHeaderView())
+ ->setHeader($purchase->getFullDisplayName());
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $this->addAccountCrumb($crumbs, $account);
+ $crumbs->addTextCrumb(
+ pht('Cart %d', $cart->getID()),
+ $this->getApplicationURI('cart/'.$cart->getID().'/'));
+ $crumbs->addTextCrumb(
+ pht('Purchase %d', $purchase->getID()),
+ $this->getApplicationURI('purchase/'.$purchase->getID().'/'));
+
+ $properties = id(new PHUIPropertyListView())
+ ->setUser($viewer)
+ ->addProperty(pht('Status'), $purchase->getStatus());
+
+ $object_box = id(new PHUIObjectBoxView())
+ ->setHeader($header)
+ ->addPropertyList($properties);
+
+ return $this->buildApplicationPage(
+ array(
+ $crumbs,
+ $object_box,
+ ),
+ array(
+ 'title' => $title,
+ ));
+ }
+
+}
diff --git a/src/applications/phortune/query/PhortuneChargeQuery.php b/src/applications/phortune/query/PhortuneChargeQuery.php
--- a/src/applications/phortune/query/PhortuneChargeQuery.php
+++ b/src/applications/phortune/query/PhortuneChargeQuery.php
@@ -8,6 +8,8 @@
private $accountPHIDs;
private $cartPHIDs;
+ private $needCarts;
+
public function withIDs(array $ids) {
$this->ids = $ids;
return $this;
@@ -28,6 +30,11 @@
return $this;
}
+ public function needCarts($need_carts) {
+ $this->needCarts = $need_carts;
+ return $this;
+ }
+
protected function loadPage() {
$table = new PhortuneCharge();
$conn = $table->establishConnection('r');
@@ -63,6 +70,24 @@
return $charges;
}
+ protected function didFilterPage(array $charges) {
+ if ($this->needCarts) {
+ $carts = id(new PhortuneCartQuery())
+ ->setViewer($this->getViewer())
+ ->setParentQuery($this)
+ ->withPHIDs(mpull($charges, 'getCartPHID'))
+ ->execute();
+ $carts = mpull($carts, null, 'getPHID');
+
+ foreach ($charges as $charge) {
+ $cart = idx($carts, $charge->getCartPHID());
+ $charge->attachCart($cart);
+ }
+ }
+
+ return $charges;
+ }
+
private function buildWhereClause(AphrontDatabaseConnection $conn) {
$where = array();
diff --git a/src/applications/phortune/storage/PhortuneCharge.php b/src/applications/phortune/storage/PhortuneCharge.php
--- a/src/applications/phortune/storage/PhortuneCharge.php
+++ b/src/applications/phortune/storage/PhortuneCharge.php
@@ -25,6 +25,7 @@
protected $metadata = array();
private $account = self::ATTACHABLE;
+ private $cart = self::ATTACHABLE;
public function getConfiguration() {
return array(
@@ -63,6 +64,15 @@
return $this;
}
+ public function getCart() {
+ return $this->assertAttached($this->cart);
+ }
+
+ public function attachCart(PhortuneCart $cart = null) {
+ $this->cart = $cart;
+ return $this;
+ }
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */
diff --git a/src/applications/phortune/storage/PhortunePurchase.php b/src/applications/phortune/storage/PhortunePurchase.php
--- a/src/applications/phortune/storage/PhortunePurchase.php
+++ b/src/applications/phortune/storage/PhortunePurchase.php
@@ -54,6 +54,10 @@
$this->totalPriceInCents = (int)$this->totalPriceInCents;
}
+ public function getFullDisplayName() {
+ return pht('Goods and/or Services');
+ }
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 5, 3:36 PM (3 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225895
Default Alt Text
D10284.diff (12 KB)

Event Timeline