Page MenuHomePhorge

D25864.1740195050.diff
No OneTemporary

D25864.1740195050.diff

diff --git a/src/applications/project/engine/PhabricatorProjectEditEngine.php b/src/applications/project/engine/PhabricatorProjectEditEngine.php
--- a/src/applications/project/engine/PhabricatorProjectEditEngine.php
+++ b/src/applications/project/engine/PhabricatorProjectEditEngine.php
@@ -323,4 +323,62 @@
}
+ /**
+ * Create a button to copy the text description of the previous milestone to
+ * the clipboard, to make it a bit more convenient for project creators to
+ * have more consistency
+ *
+ * @return PHUIButtonView|null Button to copy the description
+ */
+ protected function createMilestoneDescriptionCopyButton() {
+ $milestone = $this->getMilestoneProject();
+ if ($milestone) {
+ $number = ($milestone->loadNextMilestoneNumber() - 1);
+ if ($number > 0) {
+ $previous_milestone = id(new PhabricatorProjectQuery())
+ ->setViewer($this->getViewer())
+ ->withParentProjectPHIDs(array($milestone->getPHID()))
+ ->withIsMilestone(true)
+ ->withMilestoneNumberBetween($number, $number)
+ ->executeOne();
+ if ($previous_milestone) {
+ $desc_field = PhabricatorCustomField::getObjectField(
+ $previous_milestone,
+ PhabricatorCustomField::ROLE_VIEW,
+ 'std:project:internal:description');
+ if ($desc_field) {
+ $viewer = $this->getViewer();
+ $desc_field
+ ->setViewer($viewer)
+ ->readValueFromObject($previous_milestone);
+ id(new PhabricatorCustomFieldStorageQuery())
+ ->addField($desc_field)
+ ->execute();
+ if (phutil_nonempty_string($desc_field->getValueForStorage())) {
+ Javelin::initBehavior('phabricator-clipboard-copy');
+ return id(new PHUIButtonView())
+ ->setTag('a')
+ ->setColor(PHUIButtonView::GREY)
+ ->setText(pht('Copy Description of Previous Milestone to
+ Clipboard for Re-Use'))
+ ->setIcon('fa-clipboard')
+ ->setHref('#')
+ ->addSigil('clipboard-copy')
+ ->addSigil('has-tooltip')
+ ->setMetadata(
+ array(
+ 'tip' => null,
+ 'text' => $desc_field->getValueForStorage(),
+ 'successMessage' => pht('Description of previous milestone
+ copied to clipboard.'),
+ 'errorMessage' => pht('Copying failed.'),
+ ));
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
}
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngine.php b/src/applications/transactions/editengine/PhabricatorEditEngine.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngine.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngine.php
@@ -1396,7 +1396,12 @@
$field->appendToForm($form);
}
+ $copy_milestone_desc = null;
if ($this->getIsCreate()) {
+ // TODO: Have a getAdditionalFormButtons abstraction not to check class?
+ if (get_class($this) === 'PhabricatorProjectEditEngine') {
+ $copy_milestone_desc = $this->createMilestoneDescriptionCopyButton();
+ }
$cancel_uri = $this->getObjectCreateCancelURI($object);
$submit_button = $this->getObjectCreateButtonText($object);
} else {
@@ -1412,6 +1417,10 @@
$buttons->addCancelButton($cancel_uri);
}
+ if ($copy_milestone_desc) {
+ $buttons->addButton($copy_milestone_desc);
+ }
+
$form->appendControl($buttons);
}

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 22, 03:30 (2 d, 5 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1160104
Default Alt Text
D25864.1740195050.diff (3 KB)

Event Timeline