1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-30 09:20:58 +01:00

Make view/sign page the primary Legalpad page

Summary:
  - Makes the "legal document" page the main page.
  - Links to the "manage" page.
  - The "manage" operation now requires CAN_EDIT.
  - Modernize some crumbs and such.

Test Plan: {F170213}

Reviewers: chad

Reviewed By: chad

Subscribers: epriestley

Differential Revision: https://secure.phabricator.com/D9733
This commit is contained in:
epriestley 2014-06-25 18:38:07 -07:00
parent e14003497e
commit 1abd74459f
7 changed files with 71 additions and 43 deletions

View file

@ -863,6 +863,7 @@ phutil_register_library_map(array(
'LegalpadDocumentEditController' => 'applications/legalpad/controller/LegalpadDocumentEditController.php', 'LegalpadDocumentEditController' => 'applications/legalpad/controller/LegalpadDocumentEditController.php',
'LegalpadDocumentEditor' => 'applications/legalpad/editor/LegalpadDocumentEditor.php', 'LegalpadDocumentEditor' => 'applications/legalpad/editor/LegalpadDocumentEditor.php',
'LegalpadDocumentListController' => 'applications/legalpad/controller/LegalpadDocumentListController.php', 'LegalpadDocumentListController' => 'applications/legalpad/controller/LegalpadDocumentListController.php',
'LegalpadDocumentManageController' => 'applications/legalpad/controller/LegalpadDocumentManageController.php',
'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php', 'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php',
'LegalpadDocumentRemarkupRule' => 'applications/legalpad/remarkup/LegalpadDocumentRemarkupRule.php', 'LegalpadDocumentRemarkupRule' => 'applications/legalpad/remarkup/LegalpadDocumentRemarkupRule.php',
'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php', 'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php',
@ -871,7 +872,6 @@ phutil_register_library_map(array(
'LegalpadDocumentSignatureListController' => 'applications/legalpad/controller/LegalpadDocumentSignatureListController.php', 'LegalpadDocumentSignatureListController' => 'applications/legalpad/controller/LegalpadDocumentSignatureListController.php',
'LegalpadDocumentSignatureQuery' => 'applications/legalpad/query/LegalpadDocumentSignatureQuery.php', 'LegalpadDocumentSignatureQuery' => 'applications/legalpad/query/LegalpadDocumentSignatureQuery.php',
'LegalpadDocumentSignatureVerificationController' => 'applications/legalpad/controller/LegalpadDocumentSignatureVerificationController.php', 'LegalpadDocumentSignatureVerificationController' => 'applications/legalpad/controller/LegalpadDocumentSignatureVerificationController.php',
'LegalpadDocumentViewController' => 'applications/legalpad/controller/LegalpadDocumentViewController.php',
'LegalpadMockMailReceiver' => 'applications/legalpad/mail/LegalpadMockMailReceiver.php', 'LegalpadMockMailReceiver' => 'applications/legalpad/mail/LegalpadMockMailReceiver.php',
'LegalpadReplyHandler' => 'applications/legalpad/mail/LegalpadReplyHandler.php', 'LegalpadReplyHandler' => 'applications/legalpad/mail/LegalpadReplyHandler.php',
'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php', 'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php',
@ -3616,6 +3616,7 @@ phutil_register_library_map(array(
'LegalpadDocumentEditController' => 'LegalpadController', 'LegalpadDocumentEditController' => 'LegalpadController',
'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor', 'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor',
'LegalpadDocumentListController' => 'LegalpadController', 'LegalpadDocumentListController' => 'LegalpadController',
'LegalpadDocumentManageController' => 'LegalpadController',
'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'LegalpadDocumentRemarkupRule' => 'PhabricatorRemarkupRuleObject',
'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine', 'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
@ -3628,7 +3629,6 @@ phutil_register_library_map(array(
'LegalpadDocumentSignatureListController' => 'LegalpadController', 'LegalpadDocumentSignatureListController' => 'LegalpadController',
'LegalpadDocumentSignatureQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'LegalpadDocumentSignatureQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'LegalpadDocumentSignatureVerificationController' => 'LegalpadController', 'LegalpadDocumentSignatureVerificationController' => 'LegalpadController',
'LegalpadDocumentViewController' => 'LegalpadController',
'LegalpadMockMailReceiver' => 'PhabricatorObjectMailReceiver', 'LegalpadMockMailReceiver' => 'PhabricatorObjectMailReceiver',
'LegalpadReplyHandler' => 'PhabricatorMailReplyHandler', 'LegalpadReplyHandler' => 'PhabricatorMailReplyHandler',
'LegalpadTransaction' => 'PhabricatorApplicationTransaction', 'LegalpadTransaction' => 'PhabricatorApplicationTransaction',

View file

@ -45,7 +45,7 @@ final class PhabricatorApplicationLegalpad extends PhabricatorApplication {
'create/' => 'LegalpadDocumentEditController', 'create/' => 'LegalpadDocumentEditController',
'edit/(?P<id>\d+)/' => 'LegalpadDocumentEditController', 'edit/(?P<id>\d+)/' => 'LegalpadDocumentEditController',
'comment/(?P<id>\d+)/' => 'LegalpadDocumentCommentController', 'comment/(?P<id>\d+)/' => 'LegalpadDocumentCommentController',
'view/(?P<id>\d+)/' => 'LegalpadDocumentViewController', 'view/(?P<id>\d+)/' => 'LegalpadDocumentManageController',
'verify/(?P<code>[^/]+)/' => 'verify/(?P<code>[^/]+)/' =>
'LegalpadDocumentSignatureVerificationController', 'LegalpadDocumentSignatureVerificationController',
'signatures/(?P<id>\d+)/' => 'LegalpadDocumentSignatureListController', 'signatures/(?P<id>\d+)/' => 'LegalpadDocumentSignatureListController',

View file

@ -22,18 +22,6 @@ abstract class LegalpadController extends PhabricatorController {
return $nav; return $nav;
} }
public function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
$crumbs->addAction(
id(new PHUIListItemView())
->setName(pht('Create Document'))
->setHref($this->getApplicationURI('create/'))
->setIcon('fa-plus-square'));
return $crumbs;
}
public function buildApplicationMenu() { public function buildApplicationMenu() {
return $this->buildSideNav(true)->getMenu(); return $this->buildSideNav(true)->getMenu();
} }

View file

@ -18,4 +18,16 @@ final class LegalpadDocumentListController extends LegalpadController {
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
$crumbs->addAction(
id(new PHUIListItemView())
->setName(pht('Create Document'))
->setHref($this->getApplicationURI('create/'))
->setIcon('fa-plus-square'));
return $crumbs;
}
} }

View file

@ -1,9 +1,6 @@
<?php <?php
/** final class LegalpadDocumentManageController extends LegalpadController {
* @group legalpad
*/
final class LegalpadDocumentViewController extends LegalpadController {
private $id; private $id;
@ -15,13 +12,19 @@ final class LegalpadDocumentViewController extends LegalpadController {
$request = $this->getRequest(); $request = $this->getRequest();
$user = $request->getUser(); $user = $request->getUser();
// NOTE: We require CAN_EDIT to view this page.
$document = id(new LegalpadDocumentQuery()) $document = id(new LegalpadDocumentQuery())
->setViewer($user) ->setViewer($user)
->withIDs(array($this->id)) ->withIDs(array($this->id))
->needDocumentBodies(true) ->needDocumentBodies(true)
->needContributors(true) ->needContributors(true)
->requireCapabilities(
array(
PhabricatorPolicyCapability::CAN_VIEW,
PhabricatorPolicyCapability::CAN_EDIT,
))
->executeOne(); ->executeOne();
if (!$document) { if (!$document) {
return new Aphront404Response(); return new Aphront404Response();
} }
@ -83,7 +86,8 @@ final class LegalpadDocumentViewController extends LegalpadController {
$crumbs->setActionList($actions); $crumbs->setActionList($actions);
$crumbs->addTextCrumb( $crumbs->addTextCrumb(
$document->getMonogram(), $document->getMonogram(),
$this->getApplicationURI('view/'.$document->getID())); '/'.$document->getMonogram());
$crumbs->addTextCrumb(pht('Manage'));
$object_box = id(new PHUIObjectBoxView()) $object_box = id(new PHUIObjectBoxView())
->setHeader($header) ->setHeader($header)
@ -134,6 +138,12 @@ final class LegalpadDocumentViewController extends LegalpadController {
$doc_id = $document->getID(); $doc_id = $document->getID();
$actions->addAction(
id(new PhabricatorActionView())
->setIcon('fa-pencil-square')
->setName(pht('View/Sign Document'))
->setHref('/'.$document->getMonogram()));
$actions->addAction( $actions->addAction(
id(new PhabricatorActionView()) id(new PhabricatorActionView())
->setIcon('fa-pencil') ->setIcon('fa-pencil')
@ -142,12 +152,6 @@ final class LegalpadDocumentViewController extends LegalpadController {
->setDisabled(!$can_edit) ->setDisabled(!$can_edit)
->setWorkflow(!$can_edit)); ->setWorkflow(!$can_edit));
$actions->addAction(
id(new PhabricatorActionView())
->setIcon('fa-pencil-square')
->setName(pht('Sign Document'))
->setHref('/'.$document->getMonogram()));
$actions->addAction( $actions->addAction(
id(new PhabricatorActionView()) id(new PhabricatorActionView())
->setIcon('fa-terminal') ->setIcon('fa-terminal')

View file

@ -14,10 +14,10 @@ final class LegalpadDocumentSignController extends LegalpadController {
public function processRequest() { public function processRequest() {
$request = $this->getRequest(); $request = $this->getRequest();
$user = $request->getUser(); $viewer = $request->getUser();
$document = id(new LegalpadDocumentQuery()) $document = id(new LegalpadDocumentQuery())
->setViewer($user) ->setViewer($viewer)
->withIDs(array($this->id)) ->withIDs(array($this->id))
->needDocumentBodies(true) ->needDocumentBodies(true)
->executeOne(); ->executeOne();
@ -29,10 +29,10 @@ final class LegalpadDocumentSignController extends LegalpadController {
$signer_phid = null; $signer_phid = null;
$signature = null; $signature = null;
$signature_data = array(); $signature_data = array();
if ($user->isLoggedIn()) { if ($viewer->isLoggedIn()) {
$signer_phid = $user->getPHID(); $signer_phid = $viewer->getPHID();
$signature_data = array( $signature_data = array(
'email' => $user->loadPrimaryEmailAddress()); 'email' => $viewer->loadPrimaryEmailAddress());
} else if ($request->isFormPost()) { } else if ($request->isFormPost()) {
$email = new PhutilEmailAddress($request->getStr('email')); $email = new PhutilEmailAddress($request->getStr('email'));
$email_obj = id(new PhabricatorUserEmail()) $email_obj = id(new PhabricatorUserEmail())
@ -41,7 +41,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
return $this->signInResponse(); return $this->signInResponse();
} }
$external_account = id(new PhabricatorExternalAccountQuery()) $external_account = id(new PhabricatorExternalAccountQuery())
->setViewer($user) ->setViewer($viewer)
->withAccountTypes(array('email')) ->withAccountTypes(array('email'))
->withAccountDomains(array($email->getDomainName())) ->withAccountDomains(array($email->getDomainName()))
->withAccountIDs(array($email->getAddress())) ->withAccountIDs(array($email->getAddress()))
@ -54,7 +54,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
if ($signer_phid) { if ($signer_phid) {
$signature = id(new LegalpadDocumentSignatureQuery()) $signature = id(new LegalpadDocumentSignatureQuery())
->setViewer($user) ->setViewer($viewer)
->withDocumentPHIDs(array($document->getPHID())) ->withDocumentPHIDs(array($document->getPHID()))
->withSignerPHIDs(array($signer_phid)) ->withSignerPHIDs(array($signer_phid))
->withDocumentVersions(array($document->getVersions())) ->withDocumentVersions(array($document->getVersions()))
@ -132,10 +132,10 @@ final class LegalpadDocumentSignController extends LegalpadController {
} }
$verified = LegalpadDocumentSignature::UNVERIFIED; $verified = LegalpadDocumentSignature::UNVERIFIED;
if ($user->isLoggedIn() && $addr_obj) { if ($viewer->isLoggedIn() && $addr_obj) {
$email_obj = id(new PhabricatorUserEmail()) $email_obj = id(new PhabricatorUserEmail())
->loadOneWhere('address = %s', $addr_obj->getAddress()); ->loadOneWhere('address = %s', $addr_obj->getAddress());
if ($email_obj && $email_obj->getUserPHID() == $user->getPHID()) { if ($email_obj && $email_obj->getUserPHID() == $viewer->getPHID()) {
$verified = LegalpadDocumentSignature::VERIFIED; $verified = LegalpadDocumentSignature::VERIFIED;
} }
} }
@ -165,7 +165,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
$document_body = $document->getDocumentBody(); $document_body = $document->getDocumentBody();
$engine = id(new PhabricatorMarkupEngine()) $engine = id(new PhabricatorMarkupEngine())
->setViewer($user); ->setViewer($viewer);
$engine->addObject( $engine->addObject(
$document_body, $document_body,
LegalpadDocumentBody::MARKUP_FIELD_TEXT); LegalpadDocumentBody::MARKUP_FIELD_TEXT);
@ -173,8 +173,25 @@ final class LegalpadDocumentSignController extends LegalpadController {
$title = $document_body->getTitle(); $title = $document_body->getTitle();
$manage_uri = $this->getApplicationURI('view/'.$document->getID().'/');
$can_edit = PhabricatorPolicyFilter::hasCapability(
$viewer,
$document,
PhabricatorPolicyCapability::CAN_EDIT);
$header = id(new PHUIHeaderView()) $header = id(new PHUIHeaderView())
->setHeader($title); ->setHeader($title)
->addActionLink(
id(new PHUIButtonView())
->setTag('a')
->setIcon(
id(new PHUIIconView())
->setIconFont('fa-pencil'))
->setText(pht('Manage Document'))
->setHref($manage_uri)
->setDisabled(!$can_edit)
->setWorkflow(!$can_edit));
$content = array( $content = array(
$this->buildDocument( $this->buildDocument(
@ -190,8 +207,14 @@ final class LegalpadDocumentSignController extends LegalpadController {
$e_address_1, $e_address_1,
$error_view)); $error_view));
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb($document->getMonogram());
return $this->buildApplicationPage( return $this->buildApplicationPage(
array(
$crumbs,
$content, $content,
),
array( array(
'title' => $title, 'title' => $title,
'pageObjects' => array($document->getPHID()), 'pageObjects' => array($document->getPHID()),
@ -220,7 +243,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
$e_address_1 = true, $e_address_1 = true,
$error_view = null) { $error_view = null) {
$user = $this->getRequest()->getUser(); $viewer = $this->getRequest()->getUser();
if ($has_signed) { if ($has_signed) {
$instructions = pht('Thank you for signing and agreeing.'); $instructions = pht('Thank you for signing and agreeing.');
} else { } else {
@ -229,7 +252,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
$data = $signature->getSignatureData(); $data = $signature->getSignatureData();
$form = id(new AphrontFormView()) $form = id(new AphrontFormView())
->setUser($user) ->setUser($viewer)
->appendChild( ->appendChild(
id(new AphrontFormTextControl()) id(new AphrontFormTextControl())
->setLabel(pht('Name')) ->setLabel(pht('Name'))
@ -282,6 +305,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
if ($error_view) { if ($error_view) {
$view->setErrorView($error_view); $view->setErrorView($error_view);
} }
return $view; return $view;
} }

View file

@ -132,9 +132,9 @@ final class LegalpadDocumentSearchEngine
$title = $document->getTitle(); $title = $document->getTitle();
$item = id(new PHUIObjectItemView()) $item = id(new PHUIObjectItemView())
->setObjectName('L'.$document->getID()) ->setObjectName($document->getMonogram())
->setHeader($title) ->setHeader($title)
->setHref($this->getApplicationURI('view/'.$document->getID())) ->setHref('/'.$document->getMonogram())
->setObject($document) ->setObject($document)
->addIcon('none', pht('Last updated: %s', $last_updated)) ->addIcon('none', pht('Last updated: %s', $last_updated))
->addByline(pht('Updated by: %s', $updater)) ->addByline(pht('Updated by: %s', $updater))