Page MenuHomePhabricator

D17412.id41873.diff
No OneTemporary

D17412.id41873.diff

diff --git a/src/applications/badges/controller/PhabricatorBadgesAwardController.php b/src/applications/badges/controller/PhabricatorBadgesAwardController.php
--- a/src/applications/badges/controller/PhabricatorBadgesAwardController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesAwardController.php
@@ -67,7 +67,7 @@
))));
$dialog = $this->newDialog()
- ->setTitle(pht('Grant Badge'))
+ ->setTitle(pht('Award Badge'))
->appendForm($form)
->addCancelButton($view_uri)
->addSubmitButton(pht('Award'));
diff --git a/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php b/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php
--- a/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php
@@ -29,7 +29,7 @@
return new Aphront404Response();
}
- $view_uri = $this->getApplicationURI('view/'.$badge->getID().'/');
+ $view_uri = $this->getApplicationURI('recipients/'.$badge->getID().'/');
if ($request->isFormPost()) {
$xactions = array();
diff --git a/src/applications/badges/controller/PhabricatorBadgesViewController.php b/src/applications/badges/controller/PhabricatorBadgesViewController.php
--- a/src/applications/badges/controller/PhabricatorBadgesViewController.php
+++ b/src/applications/badges/controller/PhabricatorBadgesViewController.php
@@ -90,7 +90,6 @@
$id = $badge->getID();
$edit_uri = $this->getApplicationURI("/edit/{$id}/");
$archive_uri = $this->getApplicationURI("/archive/{$id}/");
- $award_uri = $this->getApplicationURI("/recipients/{$id}/add/");
$curtain = $this->newCurtainView($badge);
@@ -119,14 +118,6 @@
->setHref($archive_uri));
}
- $curtain->addAction(
- id(new PhabricatorActionView())
- ->setName('Add Recipients')
- ->setIcon('fa-users')
- ->setDisabled(!$can_edit)
- ->setWorkflow(true)
- ->setHref($award_uri));
-
return $curtain;
}
diff --git a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
--- a/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
+++ b/src/applications/badges/editor/PhabricatorBadgesEditEngine.php
@@ -92,7 +92,7 @@
->setIsRequired(true),
id(new PhabricatorTextEditField())
->setKey('flavor')
- ->setLabel(pht('Flavor text'))
+ ->setLabel(pht('Flavor Text'))
->setDescription(pht('Short description of the badge.'))
->setConduitTypeDescription(pht('New badge flavor.'))
->setValue($object->getFlavor())
diff --git a/src/applications/badges/editor/PhabricatorBadgesEditor.php b/src/applications/badges/editor/PhabricatorBadgesEditor.php
--- a/src/applications/badges/editor/PhabricatorBadgesEditor.php
+++ b/src/applications/badges/editor/PhabricatorBadgesEditor.php
@@ -55,6 +55,30 @@
return true;
}
+ protected function expandTransactions(
+ PhabricatorLiskDAO $object,
+ array $xactions) {
+
+ $actor = $this->getActor();
+ $actor_phid = $actor->getPHID();
+
+ $results = parent::expandTransactions($object, $xactions);
+
+ // Automatically subscribe the author when they create a badge.
+ if ($this->getIsNewObject()) {
+ if ($actor_phid) {
+ $results[] = id(new PhabricatorBadgesTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS)
+ ->setNewValue(
+ array(
+ '+' => array($actor_phid => $actor_phid),
+ ));
+ }
+ }
+
+ return $results;
+ }
+
protected function buildReplyHandler(PhabricatorLiskDAO $object) {
return id(new PhabricatorBadgesReplyHandler())
->setMailReceiver($object);
diff --git a/src/applications/badges/query/PhabricatorBadgesSearchEngine.php b/src/applications/badges/query/PhabricatorBadgesSearchEngine.php
--- a/src/applications/badges/query/PhabricatorBadgesSearchEngine.php
+++ b/src/applications/badges/query/PhabricatorBadgesSearchEngine.php
@@ -147,7 +147,7 @@
->setTitle(pht('Welcome to %s', $app_name))
->setDescription(
pht('Badges let you award and distinguish special users '.
- 'throughout your instance.'))
+ 'throughout your install.'))
->addAction($create_button);
return $view;
diff --git a/src/applications/badges/storage/PhabricatorBadgesBadge.php b/src/applications/badges/storage/PhabricatorBadgesBadge.php
--- a/src/applications/badges/storage/PhabricatorBadgesBadge.php
+++ b/src/applications/badges/storage/PhabricatorBadgesBadge.php
@@ -156,7 +156,7 @@
public function isAutomaticallySubscribed($phid) {
- return ($this->creatorPHID == $phid);
+ return false;
}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php
--- a/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php
@@ -59,4 +59,32 @@
return 'fa-user-plus';
}
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ foreach ($xactions as $xaction) {
+ $user_phids = $xaction->getNewValue();
+ if (!$user_phids) {
+ $errors[] = $this->newRequiredError(
+ pht('Recipient is required.'));
+ continue;
+ }
+
+ foreach ($user_phids as $user_phid) {
+ $user = id(new PhabricatorPeopleQuery())
+ ->setViewer($this->getActor())
+ ->withPHIDs(array($user_phid))
+ ->executeOne();
+ if (!$user) {
+ $errors[] = $this->newInvalidError(
+ pht(
+ 'Recipient PHID "%s" is not a valid user PHID.',
+ $user_phid));
+ }
+ }
+ }
+
+ return $errors;
+ }
+
}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php
--- a/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php
@@ -30,4 +30,21 @@
$this->renderNewValue());
}
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ $max_length = $object->getColumnMaximumByteLength('flavor');
+ foreach ($xactions as $xaction) {
+ $new_value = $xaction->getNewValue();
+ $new_length = strlen($new_value);
+ if ($new_length > $max_length) {
+ $errors[] = $this->newRequiredError(
+ pht('The flavor text can be no longer than %s characters.',
+ new PhutilNumber($max_length)));
+ }
+ }
+
+ return $errors;
+ }
+
}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php
--- a/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php
@@ -38,6 +38,17 @@
pht('Badges must have a name.'));
}
+ $max_length = $object->getColumnMaximumByteLength('name');
+ foreach ($xactions as $xaction) {
+ $new_value = $xaction->getNewValue();
+ $new_length = strlen($new_value);
+ if ($new_length > $max_length) {
+ $errors[] = $this->newRequiredError(
+ pht('The name can be no longer than %s characters.',
+ new PhutilNumber($max_length)));
+ }
+ }
+
return $errors;
}
diff --git a/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php b/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php
--- a/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php
+++ b/src/applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php
@@ -51,4 +51,33 @@
return 'fa-user-times';
}
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ foreach ($xactions as $xaction) {
+ $award_phids = $xaction->getNewValue();
+ if (!$award_phids) {
+ $errors[] = $this->newRequiredError(
+ pht('Recipient is required.'));
+ continue;
+ }
+
+ foreach ($award_phids as $award_phid) {
+ $award = id(new PhabricatorBadgesAwardQuery())
+ ->setViewer($this->getActor())
+ ->withRecipientPHIDs(array($award_phid))
+ ->withBadgePHIDs(array($object->getPHID()))
+ ->executeOne();
+ if (!$award) {
+ $errors[] = $this->newInvalidError(
+ pht(
+ 'Recipient PHID "%s" has not been awarded.',
+ $award_phid));
+ }
+ }
+ }
+
+ return $errors;
+ }
+
}

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 1, 10:21 AM (19 h, 18 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7215377
Default Alt Text
D17412.id41873.diff (8 KB)

Event Timeline