diff --git a/src/applications/phortune/controller/PhortuneSubscriptionViewController.php b/src/applications/phortune/controller/PhortuneSubscriptionViewController.php index 4fbfac3bd1..aab6b819e7 100644 --- a/src/applications/phortune/controller/PhortuneSubscriptionViewController.php +++ b/src/applications/phortune/controller/PhortuneSubscriptionViewController.php @@ -26,10 +26,10 @@ final class PhortuneSubscriptionViewController extends PhortuneController { $account_id = $account->getID(); $subscription_id = $subscription->getID(); - $title = pht('Subscription: %s', $subscription->getSubscriptionName()); + $title = $subscription->getSubscriptionFullName(); $header = id(new PHUIHeaderView()) - ->setHeader($subscription->getSubscriptionName()); + ->setHeader($title); $actions = id(new PhabricatorActionListView()) ->setUser($viewer) @@ -53,7 +53,7 @@ final class PhortuneSubscriptionViewController extends PhortuneController { } else { $this->addAccountCrumb($crumbs, $account); } - $crumbs->addTextCrumb(pht('Subscription %d', $subscription->getID())); + $crumbs->addTextCrumb($subscription->getSubscriptionCrumbName()); $properties = id(new PHUIPropertyListView()) ->setUser($viewer) diff --git a/src/applications/phortune/phid/PhortunePurchasePHIDType.php b/src/applications/phortune/phid/PhortunePurchasePHIDType.php index 5018a47164..b00faa585c 100644 --- a/src/applications/phortune/phid/PhortunePurchasePHIDType.php +++ b/src/applications/phortune/phid/PhortunePurchasePHIDType.php @@ -31,7 +31,7 @@ final class PhortunePurchasePHIDType extends PhabricatorPHIDType { $id = $purchase->getID(); $handle->setName($purchase->getFullDisplayName()); - $handle->setURI("/phortune/purchase/{$id}/"); + $handle->setURI($purchase->getURI()); } } diff --git a/src/applications/phortune/product/PhortuneProductImplementation.php b/src/applications/phortune/product/PhortuneProductImplementation.php index 56138befd4..27f280ac52 100644 --- a/src/applications/phortune/product/PhortuneProductImplementation.php +++ b/src/applications/phortune/product/PhortuneProductImplementation.php @@ -35,4 +35,10 @@ abstract class PhortuneProductImplementation { return; } + public function getPurchaseURI( + PhortuneProduct $product, + PhortunePurchase $purchase) { + return null; + } + } diff --git a/src/applications/phortune/product/PhortuneSubscriptionProduct.php b/src/applications/phortune/product/PhortuneSubscriptionProduct.php index 9b83cbf6cb..b63cc7c21c 100644 --- a/src/applications/phortune/product/PhortuneSubscriptionProduct.php +++ b/src/applications/phortune/product/PhortuneSubscriptionProduct.php @@ -62,6 +62,22 @@ final class PhortuneSubscriptionProduct return; } + public function getPurchaseName( + PhortuneProduct $product, + PhortunePurchase $purchase) { + return $this->getSubscription()->getPurchaseName( + $product, + $purchase); + } + + public function getPurchaseURI( + PhortuneProduct $product, + PhortunePurchase $purchase) { + return $this->getSubscription()->getPurchaseURI( + $product, + $purchase); + } + public function loadImplementationsForRefs( PhabricatorUser $viewer, array $refs) { diff --git a/src/applications/phortune/storage/PhortuneProduct.php b/src/applications/phortune/storage/PhortuneProduct.php index 3b74cc8c18..a3f89ffec3 100644 --- a/src/applications/phortune/storage/PhortuneProduct.php +++ b/src/applications/phortune/storage/PhortuneProduct.php @@ -87,6 +87,11 @@ final class PhortuneProduct extends PhortuneDAO $amount); } + public function getPurchaseURI(PhortunePurchase $purchase) { + return $this->getImplementation()->getPurchaseURI( + $this, + $purchase); + } /* -( PhabricatorPolicyInterface )----------------------------------------- */ diff --git a/src/applications/phortune/storage/PhortunePurchase.php b/src/applications/phortune/storage/PhortunePurchase.php index 67a1cf0117..ff0a5287ec 100644 --- a/src/applications/phortune/storage/PhortunePurchase.php +++ b/src/applications/phortune/storage/PhortunePurchase.php @@ -87,6 +87,10 @@ final class PhortunePurchase extends PhortuneDAO return $this->getProduct()->getPurchaseName($this); } + public function getURI() { + return $this->getProduct()->getPurchaseURI($this); + } + public function getTotalPriceAsCurrency() { return $this->getBasePriceAsCurrency(); } diff --git a/src/applications/phortune/storage/PhortuneSubscription.php b/src/applications/phortune/storage/PhortuneSubscription.php index 036a31e0f6..638ce85ba2 100644 --- a/src/applications/phortune/storage/PhortuneSubscription.php +++ b/src/applications/phortune/storage/PhortuneSubscription.php @@ -168,6 +168,14 @@ final class PhortuneSubscription extends PhortuneDAO return $this->getImplementation()->getName($this); } + public function getSubscriptionFullName() { + return $this->getImplementation()->getFullName($this); + } + + public function getSubscriptionCrumbName() { + return $this->getImplementation()->getCrumbName($this); + } + public function getCartName(PhortuneCart $cart) { return $this->getImplementation()->getCartName($this, $cart); } @@ -192,6 +200,24 @@ final class PhortuneSubscription extends PhortuneDAO $end_epoch); } + public function getPurchaseName( + PhortuneProduct $product, + PhortunePurchase $purchase) { + return $this->getImplementation()->getPurchaseName( + $this, + $product, + $purchase); + } + + public function getPurchaseURI( + PhortuneProduct $product, + PhortunePurchase $purchase) { + return $this->getImplementation()->getPurchaseURI( + $this, + $product, + $purchase); + } + /* -( PhabricatorPolicyInterface )----------------------------------------- */ diff --git a/src/applications/phortune/subscription/PhortuneSubscriptionImplementation.php b/src/applications/phortune/subscription/PhortuneSubscriptionImplementation.php index 0abc346a85..9189087481 100644 --- a/src/applications/phortune/subscription/PhortuneSubscriptionImplementation.php +++ b/src/applications/phortune/subscription/PhortuneSubscriptionImplementation.php @@ -8,6 +8,15 @@ abstract class PhortuneSubscriptionImplementation { abstract public function getRef(); abstract public function getName(PhortuneSubscription $subscription); + + public function getFullName(PhortuneSubscription $subscription) { + return $this->getName($subscription); + } + + public function getCrumbName(PhortuneSubscription $subscription) { + return $this->getName($subscription); + } + abstract public function getCostForBillingPeriodAsCurrency( PhortuneSubscription $subscription, $start_epoch, @@ -25,4 +34,17 @@ abstract class PhortuneSubscriptionImplementation { return pht('Subscription'); } + public function getPurchaseName( + PhortuneSubscription $subscription, + PhortuneProduct $product, + PhortunePurchase $purchase) { + return $product->getProductName(); + } + + public function getPurchaseURI( + PhortuneSubscription $subscription, + PhortuneProduct $product, + PhortunePurchase $purchase) { + return null; + } } diff --git a/src/applications/phortune/view/PhortuneSubscriptionTableView.php b/src/applications/phortune/view/PhortuneSubscriptionTableView.php index e9a80a9dfb..e5d6e5d517 100644 --- a/src/applications/phortune/view/PhortuneSubscriptionTableView.php +++ b/src/applications/phortune/view/PhortuneSubscriptionTableView.php @@ -55,7 +55,7 @@ final class PhortuneSubscriptionTableView extends AphrontView { array( 'href' => $uri, ), - $subscription->getSubscriptionName()), + $subscription->getSubscriptionFullName()), phabricator_datetime($subscription->getDateCreated(), $viewer), ); } diff --git a/src/applications/phortune/worker/PhortuneSubscriptionWorker.php b/src/applications/phortune/worker/PhortuneSubscriptionWorker.php index b872b6c83d..bb3725fec8 100644 --- a/src/applications/phortune/worker/PhortuneSubscriptionWorker.php +++ b/src/applications/phortune/worker/PhortuneSubscriptionWorker.php @@ -49,6 +49,8 @@ final class PhortuneSubscriptionWorker extends PhabricatorWorker { $purchase ->setBasePriceAsCurrency($currency) ->setMetadataValue('subscriptionPHID', $subscription->getPHID()) + ->setMetadataValue('epoch.start', $last_epoch) + ->setMetadataValue('epoch.end', $next_epoch) ->save(); $cart->setSubscriptionPHID($subscription->getPHID()); diff --git a/src/infrastructure/internationalization/translation/PhabricatorBaseEnglishTranslation.php b/src/infrastructure/internationalization/translation/PhabricatorBaseEnglishTranslation.php index 74ac93bbd3..59823fdbed 100644 --- a/src/infrastructure/internationalization/translation/PhabricatorBaseEnglishTranslation.php +++ b/src/infrastructure/internationalization/translation/PhabricatorBaseEnglishTranslation.php @@ -901,6 +901,11 @@ abstract class PhabricatorBaseEnglishTranslation 'Related link:', 'Related links:', ), + + 'You have %d unpaid invoice(s).' => array( + 'You have an unpaid invoice.', + 'You have unpaid invoices.', + ), ); }