Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14864338
D11575.id27853.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D11575.id27853.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D11575: Make it possible for applications to generate concrete subscriptions
Attached
Detach File
Event Timeline
Log In to Comment