mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-25 06:50:55 +01:00
Remarkup links to link to short url instead of long and fix commenting on Phurl's
Summary: Ref T6049, remarkup links to use short URLs and make commenting on Phurl's actually work Test Plan: - Create Phurl `U123` - Comment on that Phurl `((123))` Comment should link to `/u/123` Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: Korvin Maniphest Tasks: T6049 Differential Revision: https://secure.phabricator.com/D14477
This commit is contained in:
parent
06de605992
commit
59c5cd95e7
9 changed files with 101 additions and 28 deletions
|
@ -2669,6 +2669,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPhurlShortURLDefaultController' => 'applications/phurl/controller/PhabricatorPhurlShortURLDefaultController.php',
|
'PhabricatorPhurlShortURLDefaultController' => 'applications/phurl/controller/PhabricatorPhurlShortURLDefaultController.php',
|
||||||
'PhabricatorPhurlURL' => 'applications/phurl/storage/PhabricatorPhurlURL.php',
|
'PhabricatorPhurlURL' => 'applications/phurl/storage/PhabricatorPhurlURL.php',
|
||||||
'PhabricatorPhurlURLAccessController' => 'applications/phurl/controller/PhabricatorPhurlURLAccessController.php',
|
'PhabricatorPhurlURLAccessController' => 'applications/phurl/controller/PhabricatorPhurlURLAccessController.php',
|
||||||
|
'PhabricatorPhurlURLCommentController' => 'applications/phurl/controller/PhabricatorPhurlURLCommentController.php',
|
||||||
'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php',
|
'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php',
|
||||||
'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php',
|
'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php',
|
||||||
'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php',
|
'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php',
|
||||||
|
@ -6846,6 +6847,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSpacesInterface',
|
'PhabricatorSpacesInterface',
|
||||||
),
|
),
|
||||||
'PhabricatorPhurlURLAccessController' => 'PhabricatorPhurlController',
|
'PhabricatorPhurlURLAccessController' => 'PhabricatorPhurlController',
|
||||||
|
'PhabricatorPhurlURLCommentController' => 'PhabricatorPhurlController',
|
||||||
'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController',
|
'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController',
|
||||||
'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor',
|
'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||||
'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController',
|
'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController',
|
||||||
|
|
|
@ -16,7 +16,7 @@ final class PhabricatorPhurlConfigOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getGroup() {
|
public function getGroup() {
|
||||||
return 'phurl';
|
return 'apps';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getOptions() {
|
public function getOptions() {
|
||||||
|
|
|
@ -46,6 +46,8 @@ final class PhabricatorPhurlApplication extends PhabricatorApplication {
|
||||||
=> 'PhabricatorPhurlURLEditController',
|
=> 'PhabricatorPhurlURLEditController',
|
||||||
'edit/(?P<id>[1-9]\d*)/'
|
'edit/(?P<id>[1-9]\d*)/'
|
||||||
=> 'PhabricatorPhurlURLEditController',
|
=> 'PhabricatorPhurlURLEditController',
|
||||||
|
'comment/(?P<id>[1-9]\d*)/'
|
||||||
|
=> 'PhabricatorPhurlURLCommentController',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorPhurlURLCommentController
|
||||||
|
extends PhabricatorPhurlController {
|
||||||
|
|
||||||
|
public function handleRequest(AphrontRequest $request) {
|
||||||
|
if (!$request->isFormPost()) {
|
||||||
|
return new Aphront400Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
$viewer = $request->getViewer();
|
||||||
|
$id = $request->getURIData('id');
|
||||||
|
|
||||||
|
$is_preview = $request->isPreviewRequest();
|
||||||
|
$draft = PhabricatorDraft::buildFromRequest($request);
|
||||||
|
|
||||||
|
$phurl = id(new PhabricatorPhurlURLQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs(array($id))
|
||||||
|
->executeOne();
|
||||||
|
if (!$phurl) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
$view_uri = '/'.$phurl->getMonogram();
|
||||||
|
|
||||||
|
$xactions = array();
|
||||||
|
$xactions[] = id(new PhabricatorPhurlURLTransaction())
|
||||||
|
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
|
||||||
|
->attachComment(
|
||||||
|
id(new PhabricatorPhurlURLTransactionComment())
|
||||||
|
->setContent($request->getStr('comment')));
|
||||||
|
|
||||||
|
$editor = id(new PhabricatorPhurlURLEditor())
|
||||||
|
->setActor($viewer)
|
||||||
|
->setContinueOnNoEffect($request->isContinueRequest())
|
||||||
|
->setContentSourceFromRequest($request)
|
||||||
|
->setIsPreview($is_preview);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$xactions = $editor->applyTransactions($phurl, $xactions);
|
||||||
|
} catch (PhabricatorApplicationTransactionNoEffectException $ex) {
|
||||||
|
return id(new PhabricatorApplicationTransactionNoEffectResponse())
|
||||||
|
->setCancelURI($view_uri)
|
||||||
|
->setException($ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($draft) {
|
||||||
|
$draft->replaceOrDelete();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->isAjax() && $is_preview) {
|
||||||
|
return id(new PhabricatorApplicationTransactionResponse())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->setTransactions($xactions)
|
||||||
|
->setIsPreview($is_preview);
|
||||||
|
} else {
|
||||||
|
return id(new AphrontRedirectResponse())
|
||||||
|
->setURI($view_uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -9,7 +9,6 @@ final class PhabricatorPhurlURLEditController
|
||||||
|
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
$user_phid = $viewer->getPHID();
|
$user_phid = $viewer->getPHID();
|
||||||
$error_name = true;
|
|
||||||
$error_long_url = true;
|
$error_long_url = true;
|
||||||
$error_alias = null;
|
$error_alias = null;
|
||||||
$validation_exception = null;
|
$validation_exception = null;
|
||||||
|
@ -131,8 +130,6 @@ final class PhabricatorPhurlURLEditController
|
||||||
->setURI($url->getURI());
|
->setURI($url->getURI());
|
||||||
} catch (PhabricatorApplicationTransactionValidationException $ex) {
|
} catch (PhabricatorApplicationTransactionValidationException $ex) {
|
||||||
$validation_exception = $ex;
|
$validation_exception = $ex;
|
||||||
$error_name = $ex->getShortMessage(
|
|
||||||
PhabricatorPhurlURLTransaction::TYPE_NAME);
|
|
||||||
$error_long_url = $ex->getShortMessage(
|
$error_long_url = $ex->getShortMessage(
|
||||||
PhabricatorPhurlURLTransaction::TYPE_URL);
|
PhabricatorPhurlURLTransaction::TYPE_URL);
|
||||||
$error_alias = $ex->getShortMessage(
|
$error_alias = $ex->getShortMessage(
|
||||||
|
@ -148,8 +145,7 @@ final class PhabricatorPhurlURLEditController
|
||||||
$name = id(new AphrontFormTextControl())
|
$name = id(new AphrontFormTextControl())
|
||||||
->setLabel(pht('Name'))
|
->setLabel(pht('Name'))
|
||||||
->setName('name')
|
->setName('name')
|
||||||
->setValue($name)
|
->setValue($name);
|
||||||
->setError($error_name);
|
|
||||||
|
|
||||||
$long_url = id(new AphrontFormTextControl())
|
$long_url = id(new AphrontFormTextControl())
|
||||||
->setLabel(pht('URL'))
|
->setLabel(pht('URL'))
|
||||||
|
|
|
@ -49,7 +49,7 @@ final class PhabricatorPhurlURLViewController
|
||||||
: pht('More Cowbell');
|
: pht('More Cowbell');
|
||||||
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $url->getPHID());
|
$draft = PhabricatorDraft::newFromUserAndKey($viewer, $url->getPHID());
|
||||||
$comment_uri = $this->getApplicationURI(
|
$comment_uri = $this->getApplicationURI(
|
||||||
'/phurl/comment/'.$url->getID().'/');
|
'/url/comment/'.$url->getID().'/');
|
||||||
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
|
$add_comment_form = id(new PhabricatorApplicationTransactionCommentView())
|
||||||
->setUser($viewer)
|
->setUser($viewer)
|
||||||
->setObjectPHID($url->getPHID())
|
->setObjectPHID($url->getPHID())
|
||||||
|
|
|
@ -106,22 +106,6 @@ final class PhabricatorPhurlURLEditor
|
||||||
$errors = parent::validateTransaction($object, $type, $xactions);
|
$errors = parent::validateTransaction($object, $type, $xactions);
|
||||||
|
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
case PhabricatorPhurlURLTransaction::TYPE_NAME:
|
|
||||||
$missing = $this->validateIsEmptyTextField(
|
|
||||||
$object->getName(),
|
|
||||||
$xactions);
|
|
||||||
|
|
||||||
if ($missing) {
|
|
||||||
$error = new PhabricatorApplicationTransactionValidationError(
|
|
||||||
$type,
|
|
||||||
pht('Required'),
|
|
||||||
pht('URL name is required.'),
|
|
||||||
nonempty(last($xactions), null));
|
|
||||||
|
|
||||||
$error->setIsMissingFieldError(true);
|
|
||||||
$errors[] = $error;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PhabricatorPhurlURLTransaction::TYPE_ALIAS:
|
case PhabricatorPhurlURLTransaction::TYPE_ALIAS:
|
||||||
$overdrawn = $this->validateIsTextFieldTooLong(
|
$overdrawn = $this->validateIsTextFieldTooLong(
|
||||||
$object->getName(),
|
$object->getName(),
|
||||||
|
|
|
@ -7,7 +7,7 @@ final class PhabricatorPhurlLinkRemarkupRule extends PhutilRemarkupRule {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply($text) {
|
public function apply($text) {
|
||||||
// `((U123))` remarkup link to `/u/123`
|
// `((123))` remarkup link to `/u/123`
|
||||||
// `((alias))` remarkup link to `/u/alias`
|
// `((alias))` remarkup link to `/u/alias`
|
||||||
return preg_replace_callback(
|
return preg_replace_callback(
|
||||||
'/\(\(([^ )]+)\)\)/',
|
'/\(\(([^ )]+)\)\)/',
|
||||||
|
@ -25,8 +25,15 @@ final class PhabricatorPhurlLinkRemarkupRule extends PhutilRemarkupRule {
|
||||||
}
|
}
|
||||||
|
|
||||||
$ref = $matches[1];
|
$ref = $matches[1];
|
||||||
|
$monogram = null;
|
||||||
|
$is_monogram = '/^U(?P<id>[1-9]\d*)/';
|
||||||
|
|
||||||
if (ctype_digit($ref)) {
|
if (preg_match($is_monogram, $ref, $monogram)) {
|
||||||
|
$phurls = id(new PhabricatorPhurlURLQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs(array($monogram[1]))
|
||||||
|
->execute();
|
||||||
|
} else if (ctype_digit($ref)) {
|
||||||
$phurls = id(new PhabricatorPhurlURLQuery())
|
$phurls = id(new PhabricatorPhurlURLQuery())
|
||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->withIDs(array($ref))
|
->withIDs(array($ref))
|
||||||
|
@ -42,16 +49,19 @@ final class PhabricatorPhurlLinkRemarkupRule extends PhutilRemarkupRule {
|
||||||
|
|
||||||
if ($phurl) {
|
if ($phurl) {
|
||||||
if ($text_mode) {
|
if ($text_mode) {
|
||||||
return $phurl->getName().' <'.$phurl->getLongURL().'>';
|
return $phurl->getDisplayName().
|
||||||
|
' <'.
|
||||||
|
$phurl->getRedirectURI().
|
||||||
|
'>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$link = phutil_tag(
|
$link = phutil_tag(
|
||||||
'a',
|
'a',
|
||||||
array(
|
array(
|
||||||
'href' => $phurl->getLongURL(),
|
'href' => $phurl->getRedirectURI(),
|
||||||
'target' => '_blank',
|
'target' => '_blank',
|
||||||
),
|
),
|
||||||
$phurl->getName());
|
$phurl->getDisplayName());
|
||||||
|
|
||||||
return $this->getEngine()->storeText($link);
|
return $this->getEngine()->storeText($link);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -79,6 +79,22 @@ final class PhabricatorPhurlURL extends PhabricatorPhurlDAO
|
||||||
return isset($allowed_protocols[$uri->getProtocol()]);
|
return isset($allowed_protocols[$uri->getProtocol()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDisplayName() {
|
||||||
|
if ($this->getName()) {
|
||||||
|
return $this->getName();
|
||||||
|
} else {
|
||||||
|
return $this->getMonogram();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRedirectURI() {
|
||||||
|
if (strlen($this->getAlias())) {
|
||||||
|
return '/u/'.$this->getAlias();
|
||||||
|
} else {
|
||||||
|
return '/u/'.$this->getID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue