Page MenuHomePhabricator

D11575.id27853.diff
No OneTemporary

D11575.id27853.diff

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
@@ -275,8 +275,11 @@
$subscriptions_uri = $this->getApplicationURI(
$account->getID().'/subscription/');
+ $handles = $this->loadViewerHandles(mpull($subscriptions, 'getPHID'));
+
$table = id(new PhortuneSubscriptionTableView())
->setUser($viewer)
+ ->setHandles($handles)
->setSubscriptions($subscriptions);
$header = id(new PHUIHeaderView())
diff --git a/src/applications/phortune/query/PhortuneSubscriptionQuery.php b/src/applications/phortune/query/PhortuneSubscriptionQuery.php
--- a/src/applications/phortune/query/PhortuneSubscriptionQuery.php
+++ b/src/applications/phortune/query/PhortuneSubscriptionQuery.php
@@ -85,13 +85,16 @@
$subscription_map = mgroup($subscriptions, 'getSubscriptionClass');
foreach ($subscription_map as $class => $class_subscriptions) {
$sub = newv($class, array());
- $implementations += $sub->loadImplementationsForSubscriptions(
+ $impl_objects = $sub->loadImplementationsForRefs(
$this->getViewer(),
- $class_subscriptions);
+ mpull($class_subscriptions, 'getSubscriptionRef'));
+
+ $implementations += mpull($impl_objects, null, 'getRef');
}
foreach ($subscriptions as $key => $subscription) {
- $implementation = idx($implementations, $key);
+ $ref = $subscription->getSubscriptionRef();
+ $implementation = idx($implementations, $ref);
if (!$implementation) {
unset($subscriptions[$key]);
continue;
diff --git a/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php b/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php
--- a/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php
+++ b/src/applications/phortune/query/PhortuneSubscriptionSearchEngine.php
@@ -138,6 +138,7 @@
$table = id(new PhortuneSubscriptionTableView())
->setUser($viewer)
+ ->setHandles($handles)
->setSubscriptions($subscriptions);
$merchant = $this->getMerchant();
diff --git a/src/applications/phortune/storage/PhortuneSubscription.php b/src/applications/phortune/storage/PhortuneSubscription.php
--- a/src/applications/phortune/storage/PhortuneSubscription.php
+++ b/src/applications/phortune/storage/PhortuneSubscription.php
@@ -58,19 +58,66 @@
PhortuneSubscriptionPHIDType::TYPECONST);
}
- public static function initializeNewSubscription() {
- return id(new PhortuneSubscription());
+ public static function initializeNewSubscription(
+ PhortuneAccount $account,
+ PhortuneMerchant $merchant,
+ PhabricatorUser $author,
+ PhortuneSubscriptionImplementation $implementation,
+ PhabricatorTriggerClock $clock) {
+
+ $trigger = id(new PhabricatorWorkerTrigger())
+ ->setClock($clock);
+
+ return id(new PhortuneSubscription())
+ ->setStatus(self::STATUS_ACTIVE)
+ ->setAccountPHID($account->getPHID())
+ ->attachAccount($account)
+ ->setMerchantPHID($merchant->getPHID())
+ ->attachMerchant($merchant)
+ ->setAuthorPHID($author->getPHID())
+ ->setSubscriptionClass(get_class($implementation))
+ ->setSubscriptionRef($implementation->getRef())
+ ->attachImplementation($implementation)
+ ->attachTrigger($trigger);
}
public function attachImplementation(
PhortuneSubscriptionImplementation $impl) {
$this->implementation = $impl;
+ return $this;
}
public function getImplementation() {
return $this->assertAttached($this->implementation);
}
+ public function attachAccount(PhortuneAccount $account) {
+ $this->account = $account;
+ return $this;
+ }
+
+ public function getAccount() {
+ return $this->assertAttached($this->account);
+ }
+
+ public function attachMerchant(PhortuneMerchant $merchant) {
+ $this->merchant = $merchant;
+ return $this;
+ }
+
+ public function getMerchant() {
+ return $this->assertAttached($this->merchant);
+ }
+
+ public function attachTrigger(PhabricatorWorkerTrigger $trigger) {
+ $this->trigger = $trigger;
+ return $this;
+ }
+
+ public function getTrigger() {
+ return $this->assertAttached($this->trigger);
+ }
+
public function save() {
$this->subscriptionClassKey = PhabricatorHash::digestForIndex(
$this->subscriptionClass);
@@ -78,7 +125,49 @@
$this->subscriptionRefKey = PhabricatorHash::digestForIndex(
$this->subscriptionRef);
- return parent::save();
+ $trigger = $this->getTrigger();
+ $is_new = (!$this->getID());
+
+ $this->openTransaction();
+
+ // If we're saving this subscription for the first time, we're also
+ // going to set up the
+ if ($is_new) {
+ $trigger_phid = PhabricatorPHID::generateNewPHID(
+ PhabricatorWorkerTriggerPHIDType::TYPECONST);
+
+ if (!$this->getPHID()) {
+ $this->setPHID($this->generatePHID());
+ }
+
+ $this->setTriggerPHID($trigger_phid);
+ }
+
+ $result = parent::save();
+
+ if ($is_new) {
+ $trigger_action = new PhabricatorScheduleTaskTriggerAction(
+ array(
+ 'class' => 'PhortuneSubscriptionWorker',
+ 'data' => array(
+ 'subscriptionPHID' => $this->getPHID(),
+ ),
+ 'options' => array(
+ 'objectPHID' => $this->getPHID(),
+ 'priority' => PhabricatorWorker::PRIORITY_BULK,
+ ),
+ ));
+
+ $trigger->setAction($trigger_action);
+ $trigger->save();
+ }
+ $this->saveTransaction();
+
+ return $result;
+ }
+
+ public function getSubscriptionName() {
+ return $this->getImplementation()->getName($this);
}

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 8, 11:17 PM (20 h, 56 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7102394
Default Alt Text
D11575.id27853.diff (5 KB)

Event Timeline