From 7a947947a39bc18043d7eb710169de92e9f2c3cc Mon Sep 17 00:00:00 2001 From: Chad Little Date: Sat, 28 Jan 2017 15:18:47 +0000 Subject: [PATCH 01/49] Fix operator error in Pholio with PHP 7.1 Summary: Fixes T12166. We don't actually need this variable, so removing it. Test Plan: Upload a new mock, edit a mock, view list of mocks. Reviewers: epriestley, Mnkras, acs-ferreira Reviewed By: epriestley, Mnkras, acs-ferreira Subscribers: acs-ferreira, Korvin Maniphest Tasks: T12166 Differential Revision: https://secure.phabricator.com/D17260 --- src/applications/pholio/view/PholioMockImagesView.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/applications/pholio/view/PholioMockImagesView.php b/src/applications/pholio/view/PholioMockImagesView.php index 6c92f1d21f..c95d8827d3 100644 --- a/src/applications/pholio/view/PholioMockImagesView.php +++ b/src/applications/pholio/view/PholioMockImagesView.php @@ -180,8 +180,6 @@ final class PholioMockImagesView extends AphrontView { 'pholio-mock-view', $this->getBehaviorConfig()); - $mockview = ''; - $mock_wrapper = javelin_tag( 'div', array( @@ -220,7 +218,7 @@ final class PholioMockImagesView extends AphrontView { ), ''); - $mockview[] = phutil_tag( + return phutil_tag( 'div', array( 'class' => 'pholio-mock-image-container', @@ -228,7 +226,6 @@ final class PholioMockImagesView extends AphrontView { ), array($mock_wrapper, $inline_comments_holder)); - return $mockview; } private function getImagePageURI(PholioImage $image, PholioMock $mock) { From e16080ce7e6c51f2006e1421b41301c7fea94c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Santoro?= Date: Mon, 30 Jan 2017 12:23:07 -0800 Subject: [PATCH 02/49] Fix typo in DifferentialRevisionCommandeerTransaction Test Plan: Check at /applications/mailcommands/PhabricatorDifferentialApplication/revision/ Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D17265 --- .../xaction/DifferentialRevisionCommandeerTransaction.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php b/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php index 4e4cd9600f..34cedcbb73 100644 --- a/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php @@ -41,7 +41,7 @@ final class DifferentialRevisionCommandeerTransaction } public function getCommandSummary() { - return pht('Commadeer a revision.'); + return pht('Commandeer a revision.'); } public function generateOldValue($object) { From bc41c3f5a5b95da3d2cae75d701fadae3eb6b680 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Jan 2017 09:51:21 -0800 Subject: [PATCH 03/49] Use DifferentialCommitMessageParser and Modular Transactions to implement "Auditors: ..." Summary: Ref T10978. Updates how we implement "Auditors: ..." in commit messages: - Use the same parsing code as everything else. - (Also: parse package names.) - Use the new transaction code. Also, fix some UI strings. Test Plan: Used `bin/repository reparse --herald ` to re-run this code on commits with various messages (valid Auditors, invalid Auditors, no Auditors). Saw appropriate auditors added in the UI. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17262 --- .../audit/editor/PhabricatorAuditEditor.php | 31 +++++++------------ ...DifferentialAuditorsCommitMessageField.php | 1 + .../PhabricatorUSEnglishTranslation.php | 20 ++++++++++++ 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/applications/audit/editor/PhabricatorAuditEditor.php b/src/applications/audit/editor/PhabricatorAuditEditor.php index 952cf50a77..ff1e69d8cb 100644 --- a/src/applications/audit/editor/PhabricatorAuditEditor.php +++ b/src/applications/audit/editor/PhabricatorAuditEditor.php @@ -375,35 +375,26 @@ final class PhabricatorAuditEditor private function createAuditRequestTransactionFromCommitMessage( PhabricatorRepositoryCommit $commit) { + $actor = $this->getActor(); $data = $commit->getCommitData(); $message = $data->getCommitMessage(); - $matches = null; - if (!preg_match('/^Auditors?:\s*(.*)$/im', $message, $matches)) { - return array(); - } - - $phids = id(new PhabricatorObjectListQuery()) - ->setViewer($this->getActor()) - ->setAllowPartialResults(true) - ->setAllowedTypes( - array( - PhabricatorPeopleUserPHIDType::TYPECONST, - PhabricatorProjectProjectPHIDType::TYPECONST, - )) - ->setObjectList($matches[1]) - ->execute(); + $result = DifferentialCommitMessageParser::newStandardParser($actor) + ->setRaiseMissingFieldErrors(false) + ->parseFields($message); + $field_key = DifferentialAuditorsCommitMessageField::FIELDKEY; + $phids = idx($result, $field_key, null); if (!$phids) { return array(); } - foreach ($phids as $phid) { - $this->addAuditReason($phid, pht('Requested by Author')); - } return id(new PhabricatorAuditTransaction()) - ->setTransactionType(PhabricatorAuditActionConstants::ADD_AUDITORS) - ->setNewValue(array_fuse($phids)); + ->setTransactionType(DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE) + ->setNewValue( + array( + '+' => array_fuse($phids), + )); } protected function sortTransactions(array $xactions) { diff --git a/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php b/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php index 94f629e557..42e6b5ecd5 100644 --- a/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php +++ b/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php @@ -15,6 +15,7 @@ final class DifferentialAuditorsCommitMessageField array( PhabricatorPeopleUserPHIDType::TYPECONST, PhabricatorProjectProjectPHIDType::TYPECONST, + PhabricatorOwnersPackagePHIDType::TYPECONST, )); } diff --git a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php index 291097a6c0..428f3955cf 100644 --- a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php +++ b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php @@ -1588,6 +1588,26 @@ final class PhabricatorUSEnglishTranslation ), ), + '%s added %s auditor(s): %s.' => array( + array( + '%s added an auditor: %3$s.', + '%s added auditors: %3$s.', + ), + ), + + '%s removed %s auditor(s): %s.' => array( + array( + '%s removed an auditor: %3$s.', + '%s removed auditors: %3$s.', + ), + ), + + '%s edited %s auditor(s), removed %s: %s; added %s: %s.' => array( + array( + '%s edited auditors, removed: %4$s; added: %6$s.', + ), + ), + ); } From 4b248e3545874fc3b32101f0580cfae2f59ad95a Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Jan 2017 09:58:09 -0800 Subject: [PATCH 04/49] Make the "Add Auditors" Herald rules use modern transactions Summary: Ref T10978. Convert "Add Auditors" rules in Herald to modern modular transactions. Here and in D17262 (and in the next change), I've removed "audit reasons". There are several reasons for this: - They're pretty hacky. - They store English-language (well, usually) text in the database, which can't be translated. - I think they may not be necessary. When they were written, Herald did not apply transactions, so it was less clear when Herald was doing something. In modern code, it does, so Herald auditors are clear. The owenrs/package rules are now more clear, too. I'd like to see evidence that confusion still exists before rebuilding this feature in a modern, translatable way, since I think we may not need it at all. Test Plan: Ran `bin/repository reparse --herald ` to re-run Herald rules. Saw rules add auditors appropriately. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17263 --- .../herald/DiffusionAuditorsHeraldAction.php | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/applications/diffusion/herald/DiffusionAuditorsHeraldAction.php b/src/applications/diffusion/herald/DiffusionAuditorsHeraldAction.php index 3c34876995..2ca2ee2b6b 100644 --- a/src/applications/diffusion/herald/DiffusionAuditorsHeraldAction.php +++ b/src/applications/diffusion/herald/DiffusionAuditorsHeraldAction.php @@ -39,19 +39,12 @@ abstract class DiffusionAuditorsHeraldAction $phids = array_fuse(array_keys($targets)); - // TODO: Convert this to be translatable, structured data eventually. - $reason_map = array(); - foreach ($phids as $phid) { - $reason_map[$phid][] = pht('%s Triggered Audit', $rule->getMonogram()); - } - $xaction = $adapter->newTransaction() - ->setTransactionType(PhabricatorAuditActionConstants::ADD_AUDITORS) - ->setNewValue($phids) - ->setMetadataValue( - 'auditStatus', - PhabricatorAuditStatusConstants::AUDIT_REQUIRED) - ->setMetadataValue('auditReasonMap', $reason_map); + ->setTransactionType(DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE) + ->setNewValue( + array( + '+' => $phids, + )); $adapter->queueTransaction($xaction); From 5e7a0917372acefb18e52f473208a18eddbdebb0 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Jan 2017 10:39:35 -0800 Subject: [PATCH 05/49] Write an explicit edge for commit membership in packages Summary: Ref T10978. Currently, during commit import, we write an "Audit Not Required" auditor for commits which don't require an audit. This auditor is used to power the "Commits in this package" query in Owners. This conflates audits and commit/package membership. I think it might even predate edges. Code needs to dance around this mess and we get the wrong result in some cases, since auditors are now editable. Instead, write an explicit edge which just says "this commit is part of such-and-such packages". Then use that to run the query. Logical! I'll issue guidance on this but I'm not migrating it, since it fixes itself going forward and only really affects the UI in Owners. Test Plan: - Ran `bin/audit update-owners` with various arguments. - Viewed packages in web UI, saw them load the proper commits. - Queried by packages in Diffusion explicitly. - Clicked the "View All" link in Owners and got to the right search UI. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17264 --- src/__phutil_library_map__.php | 4 + ...torAuditUpdateOwnersManagementWorkflow.php | 117 ++++++++++++++++++ .../query/PhabricatorCommitSearchEngine.php | 10 ++ .../DiffusionCommitHasPackageEdgeType.php | 8 ++ .../diffusion/query/DiffusionCommitQuery.php | 30 +++++ .../PhabricatorOwnersDetailController.php | 6 +- .../storage/PhabricatorRepositoryCommit.php | 23 ++++ ...habricatorRepositoryCommitOwnersWorker.php | 2 + 8 files changed, 197 insertions(+), 3 deletions(-) create mode 100644 src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php create mode 100644 src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index f145dd88ec..6b510144e5 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -635,6 +635,7 @@ phutil_register_library_map(array( 'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php', 'DiffusionCommitEditEngine' => 'applications/diffusion/editor/DiffusionCommitEditEngine.php', 'DiffusionCommitFulltextEngine' => 'applications/repository/search/DiffusionCommitFulltextEngine.php', + 'DiffusionCommitHasPackageEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php', 'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php', 'DiffusionCommitHasRevisionRelationship' => 'applications/diffusion/relationships/DiffusionCommitHasRevisionRelationship.php', 'DiffusionCommitHasTaskEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasTaskEdgeType.php', @@ -1891,6 +1892,7 @@ phutil_register_library_map(array( 'PhabricatorAuditTransactionComment' => 'applications/audit/storage/PhabricatorAuditTransactionComment.php', 'PhabricatorAuditTransactionQuery' => 'applications/audit/query/PhabricatorAuditTransactionQuery.php', 'PhabricatorAuditTransactionView' => 'applications/audit/view/PhabricatorAuditTransactionView.php', + 'PhabricatorAuditUpdateOwnersManagementWorkflow' => 'applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php', 'PhabricatorAuthAccountView' => 'applications/auth/view/PhabricatorAuthAccountView.php', 'PhabricatorAuthApplication' => 'applications/auth/application/PhabricatorAuthApplication.php', 'PhabricatorAuthAuthFactorPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php', @@ -5343,6 +5345,7 @@ phutil_register_library_map(array( 'DiffusionCommitEditController' => 'DiffusionController', 'DiffusionCommitEditEngine' => 'PhabricatorEditEngine', 'DiffusionCommitFulltextEngine' => 'PhabricatorFulltextEngine', + 'DiffusionCommitHasPackageEdgeType' => 'PhabricatorEdgeType', 'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType', 'DiffusionCommitHasRevisionRelationship' => 'DiffusionCommitRelationship', 'DiffusionCommitHasTaskEdgeType' => 'PhabricatorEdgeType', @@ -6786,6 +6789,7 @@ phutil_register_library_map(array( 'PhabricatorAuditTransactionComment' => 'PhabricatorApplicationTransactionComment', 'PhabricatorAuditTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'PhabricatorAuditTransactionView' => 'PhabricatorApplicationTransactionView', + 'PhabricatorAuditUpdateOwnersManagementWorkflow' => 'PhabricatorAuditManagementWorkflow', 'PhabricatorAuthAccountView' => 'AphrontView', 'PhabricatorAuthApplication' => 'PhabricatorApplication', 'PhabricatorAuthAuthFactorPHIDType' => 'PhabricatorPHIDType', diff --git a/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php b/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php new file mode 100644 index 0000000000..d0bb7e1039 --- /dev/null +++ b/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php @@ -0,0 +1,117 @@ +setName('update-owners') + ->setExamples('**update-owners** ...') + ->setSynopsis(pht('Update package relationships for commits.')) + ->setArguments( + array( + array( + 'name' => 'all', + 'help' => pht('Update all commits in all repositories.'), + ), + array( + 'name' => 'objects', + 'wildcard' => true, + 'help' => pht('Update named commits and repositories.'), + ), + )); + } + + public function execute(PhutilArgumentParser $args) { + $viewer = $this->getViewer(); + + $all = $args->getArg('all'); + $names = $args->getArg('objects'); + + if (!$names && !$all) { + throw new PhutilArgumentUsageException( + pht( + 'Specify "--all" to update everything, or a list of specific '. + 'commits or repositories to update.')); + } else if ($names && $all) { + throw new PhutilArgumentUsageException( + pht( + 'Specify either a list of objects to update or "--all", but not '. + 'both.')); + } + + if ($all) { + $objects = new LiskMigrationIterator(new PhabricatorRepository()); + } else { + $query = id(new PhabricatorObjectQuery()) + ->setViewer($viewer) + ->withNames($names); + + $query->execute(); + + $objects = array(); + + $results = $query->getNamedResults(); + foreach ($names as $name) { + if (!isset($results[$name])) { + throw new PhutilArgumentUsageException( + pht( + 'Object "%s" is not a valid object.', + $name)); + } + + $object = $results[$name]; + if (!($object instanceof PhabricatorRepository) && + !($object instanceof PhabricatorRepositoryCommit)) { + throw new PhutilArgumentUsageException( + pht( + 'Object "%s" is not a valid repository or commit.', + $name)); + } + + $objects[] = $object; + } + } + + foreach ($objects as $object) { + if ($object instanceof PhabricatorRepository) { + $commits = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withRepository($object) + ->execute(); + } else { + $commits = array($object); + } + + foreach ($commits as $commit) { + $repository = $commit->getRepository(); + + $affected_paths = PhabricatorOwnerPathQuery::loadAffectedPaths( + $repository, + $commit, + $viewer); + + $affected_packages = PhabricatorOwnersPackage::loadAffectedPackages( + $repository, + $affected_paths); + + $monograms = mpull($affected_packages, 'getMonogram'); + if ($monograms) { + $monograms = implode(', ', $monograms); + } else { + $monograms = pht('none'); + } + + echo tsprintf( + "%s\n", + pht( + 'Updating "%s" (%s)...', + $commit->getDisplayName(), + $monograms)); + + $commit->writeOwnersEdges(mpull($affected_packages, 'getPHID')); + } + } + } + +} diff --git a/src/applications/audit/query/PhabricatorCommitSearchEngine.php b/src/applications/audit/query/PhabricatorCommitSearchEngine.php index f24b12d2b8..0b7d01ad86 100644 --- a/src/applications/audit/query/PhabricatorCommitSearchEngine.php +++ b/src/applications/audit/query/PhabricatorCommitSearchEngine.php @@ -45,6 +45,10 @@ final class PhabricatorCommitSearchEngine $query->withRepositoryPHIDs($map['repositoryPHIDs']); } + if ($map['packagePHIDs']) { + $query->withPackagePHIDs($map['packagePHIDs']); + } + return $query; } @@ -78,6 +82,12 @@ final class PhabricatorCommitSearchEngine ->setConduitKey('repositories') ->setAliases(array('repository', 'repositories', 'repositoryPHID')) ->setDatasource(new DiffusionRepositoryDatasource()), + id(new PhabricatorSearchDatasourceField()) + ->setLabel(pht('Packages')) + ->setKey('packagePHIDs') + ->setConduitKey('packages') + ->setAliases(array('package', 'packages', 'packagePHID')) + ->setDatasource(new PhabricatorOwnersPackageDatasource()), ); } diff --git a/src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php b/src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php new file mode 100644 index 0000000000..7a35b30a76 --- /dev/null +++ b/src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php @@ -0,0 +1,8 @@ +packagePHIDs = $package_phids; + return $this; + } + public function withStatuses(array $statuses) { $this->statuses = $statuses; return $this; @@ -498,6 +504,13 @@ final class DiffusionCommitQuery $this->statuses); } + if ($this->packagePHIDs !== null) { + $where[] = qsprintf( + $conn, + 'package.dst IN (%Ls)', + $this->packagePHIDs); + } + return $where; } @@ -519,6 +532,10 @@ final class DiffusionCommitQuery return (bool)$this->responsiblePHIDs; } + private function shouldJoinOwners() { + return (bool)$this->packagePHIDs; + } + protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) { $join = parent::buildJoinClauseParts($conn); $audit_request = new PhabricatorRepositoryAuditRequest(); @@ -537,6 +554,15 @@ final class DiffusionCommitQuery $audit_request->getTableName()); } + if ($this->shouldJoinOwners()) { + $join[] = qsprintf( + $conn, + 'JOIN %T package ON commit.phid = package.src + AND package.type = %s', + PhabricatorEdgeConfig::TABLE_NAME_EDGE, + DiffusionCommitHasPackageEdgeType::EDGECONST); + } + return $join; } @@ -549,6 +575,10 @@ final class DiffusionCommitQuery return true; } + if ($this->shouldJoinOwners()) { + return true; + } + return parent::shouldGroupQueryResultRows(); } diff --git a/src/applications/owners/controller/PhabricatorOwnersDetailController.php b/src/applications/owners/controller/PhabricatorOwnersDetailController.php index b641290f56..b6260416da 100644 --- a/src/applications/owners/controller/PhabricatorOwnersDetailController.php +++ b/src/applications/owners/controller/PhabricatorOwnersDetailController.php @@ -68,14 +68,14 @@ final class PhabricatorOwnersDetailController $commit_uri = id(new PhutilURI('/diffusion/commit/')) ->setQueryParams( array( - 'auditorPHIDs' => $package->getPHID(), + 'package' => $package->getPHID(), )); $status_concern = PhabricatorAuditCommitStatusConstants::CONCERN_RAISED; $attention_commits = id(new DiffusionCommitQuery()) ->setViewer($request->getUser()) - ->withAuditorPHIDs(array($package->getPHID())) + ->withPackagePHIDs(array($package->getPHID())) ->withStatuses( array( $status_concern, @@ -102,7 +102,7 @@ final class PhabricatorOwnersDetailController $all_commits = id(new DiffusionCommitQuery()) ->setViewer($request->getUser()) - ->withAuditorPHIDs(array($package->getPHID())) + ->withPackagePHIDs(array($package->getPHID())) ->needCommitData(true) ->needAuditRequests(true) ->setLimit(25) diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php index 5d826f9118..9eac5e6bf6 100644 --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -262,6 +262,29 @@ final class PhabricatorRepositoryCommit return isset($map[$audit->getAuditorPHID()]); } + public function writeOwnersEdges(array $package_phids) { + $src_phid = $this->getPHID(); + $edge_type = DiffusionCommitHasPackageEdgeType::EDGECONST; + + $editor = new PhabricatorEdgeEditor(); + + $dst_phids = PhabricatorEdgeQuery::loadDestinationPHIDs( + $src_phid, + $edge_type); + + foreach ($dst_phids as $dst_phid) { + $editor->removeEdge($src_phid, $edge_type, $dst_phid); + } + + foreach ($package_phids as $package_phid) { + $editor->addEdge($src_phid, $edge_type, $package_phid); + } + + $editor->save(); + + return $this; + } + public function getAuditorPHIDsForEdit() { $audits = $this->getAudits(); return mpull($audits, 'getAuditorPHID'); diff --git a/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php b/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php index 20869ce273..bee7546671 100644 --- a/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php +++ b/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php @@ -42,6 +42,8 @@ final class PhabricatorRepositoryCommitOwnersWorker $repository, $affected_paths); + $commit->writeOwnersEdges(mpull($affected_packages, 'getPHID')); + if (!$affected_packages) { return; } From 2e9cc5e8e8a30fff511596a4edf5fb582fba2347 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Jan 2017 10:14:15 -0800 Subject: [PATCH 06/49] Make implicit audits by the Owners tool use modern code Summary: Ref T10978. This updates audits triggered by Owners to use a modern transaction. Minor changes: - After D17264, we no longer need the "AUDIT_NOT_REQUIRED" fake-audits to record package membership. This no longer creates them. - This previously saved English-language, untranslatable text strings about audit details onto the audit relationship. I've removed them, per discussion in D17263. The "Audit Reasons" here are potentially a little more useful than the Herald/Explicit-By-Owner ones were, since the rules are a little more complex, but I'd still like to see evidence that we need them. In particular, the transaction record now says "Owners added auditors: ...", just like Differential, so the source of the auditors should be clear: {F2549087} T11118 (roughly "add several Owners audit modes", despite the title at time of writing) might impact this too. Basically, this is simple and maybe good enough; if it's not quite good enough we can refine it. Test Plan: Ran `bin/repository reparse --owners ` saw appropriate owners audits trigger. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17266 --- ...habricatorRepositoryCommitOwnersWorker.php | 120 +++++++++++------- 1 file changed, 72 insertions(+), 48 deletions(-) diff --git a/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php b/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php index bee7546671..5deb975fa9 100644 --- a/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php +++ b/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php @@ -28,6 +28,7 @@ final class PhabricatorRepositoryCommitOwnersWorker private function triggerOwnerAudits( PhabricatorRepository $repository, PhabricatorRepositoryCommit $commit) { + $viewer = PhabricatorUser::getOmnipotentUser(); if (!$repository->shouldPublish()) { return; @@ -48,16 +49,23 @@ final class PhabricatorRepositoryCommitOwnersWorker return; } - $data = id(new PhabricatorRepositoryCommitData())->loadOneWhere( - 'commitID = %d', - $commit->getID()); - $commit->attachCommitData($data); + $commit = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withPHIDs(array($commit->getPHID())) + ->needCommitData(true) + ->needAuditRequests(true) + ->executeOne(); + if (!$commit) { + return; + } + + $data = $commit->getCommitData(); $author_phid = $data->getCommitDetail('authorPHID'); $revision_id = $data->getCommitDetail('differential.revisionID'); if ($revision_id) { $revision = id(new DifferentialRevisionQuery()) - ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->setViewer($viewer) ->withIDs(array($revision_id)) ->needReviewerStatus(true) ->executeOne(); @@ -65,13 +73,10 @@ final class PhabricatorRepositoryCommitOwnersWorker $revision = null; } - $requests = id(new PhabricatorRepositoryAuditRequest()) - ->loadAllWhere( - 'commitPHID = %s', - $commit->getPHID()); + $requests = $commit->getAudits(); $requests = mpull($requests, null, 'getAuditorPHID'); - + $auditor_phids = array(); foreach ($affected_packages as $package) { $request = idx($requests, $package->getPHID()); if ($request) { @@ -79,61 +84,78 @@ final class PhabricatorRepositoryCommitOwnersWorker continue; } - if ($package->getAuditingEnabled()) { - $reasons = $this->checkAuditReasons( - $commit, - $package, - $author_phid, - $revision); - - if ($reasons) { - $audit_status = PhabricatorAuditStatusConstants::AUDIT_REQUIRED; - } else { - $audit_status = PhabricatorAuditStatusConstants::AUDIT_NOT_REQUIRED; - } - } else { - $reasons = array(); - $audit_status = PhabricatorAuditStatusConstants::NONE; + $should_audit = $this->shouldTriggerAudit( + $commit, + $package, + $author_phid, + $revision); + if (!$should_audit) { + continue; } - $relationship = new PhabricatorRepositoryAuditRequest(); - $relationship->setAuditorPHID($package->getPHID()); - $relationship->setCommitPHID($commit->getPHID()); - $relationship->setAuditReasons($reasons); - $relationship->setAuditStatus($audit_status); - - $relationship->save(); - - $requests[$package->getPHID()] = $relationship; + $auditor_phids[] = $package->getPHID(); } - $commit->updateAuditStatus($requests); - $commit->save(); + // If none of the packages are triggering audits, we're all done. + if (!$auditor_phids) { + return; + } + + $audit_type = DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE; + + $owners_phid = id(new PhabricatorOwnersApplication()) + ->getPHID(); + + $content_source = $this->newContentSource(); + + $xactions = array(); + $xactions[] = $commit->getApplicationTransactionTemplate() + ->setTransactionType($audit_type) + ->setNewValue( + array( + '+' => array_fuse($auditor_phids), + )); + + $editor = $commit->getApplicationTransactionEditor() + ->setActor($viewer) + ->setActingAsPHID($owners_phid) + ->setContinueOnNoEffect(true) + ->setContinueOnMissingFields(true) + ->setContentSource($content_source); + + $editor->applyTransactions($commit, $xactions); } - private function checkAuditReasons( + private function shouldTriggerAudit( PhabricatorRepositoryCommit $commit, PhabricatorOwnersPackage $package, $author_phid, $revision) { + // Don't trigger an audit if auditing isn't enabled for the package. + if (!$package->getAuditingEnabled()) { + return false; + } + + // Trigger an audit if we don't recognize the commit's author. + if (!$author_phid) { + return true; + } + $owner_phids = PhabricatorOwnersOwner::loadAffiliatedUserPHIDs( array( $package->getID(), )); $owner_phids = array_fuse($owner_phids); - $reasons = array(); - - if (!$author_phid) { - $reasons[] = pht('Commit Author Not Recognized'); - } else if (isset($owner_phids[$author_phid])) { - return $reasons; + // Don't trigger an audit if the author is a package owner. + if (isset($owner_phids[$author_phid])) { + return false; } + // Trigger an audit of there is no corresponding revision. if (!$revision) { - $reasons[] = pht('No Revision Specified'); - return $reasons; + return true; } $accepted_statuses = array( @@ -159,11 +181,13 @@ final class PhabricatorRepositoryCommitOwnersWorker } } - if (!$found_accept) { - $reasons[] = pht('Owners Not Involved'); + // Don't trigger an audit if a package owner already reviewed the + // revision. + if ($found_accept) { + return false; } - return $reasons; + return true; } } From bcbd4035fd18511543eaacff669ebbfe1b24b757 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 26 Jan 2017 10:32:29 -0800 Subject: [PATCH 07/49] Remove several pieces of audit-related code Summary: Ref T10978. This code (mostly related to the old ADD_AUDIT transaction and some to the "store English text in the database" audit reasons) is no longer reachable. Test Plan: Grepped for removed symbols: - withAuditStatus - getActionNameMap (unrelated callsites exist) - getActionName (unrelated callsites exist) - getActionPastTenseVerb - addAuditReason - getAuditReasons - auditReasonMap Also audited some commits. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17267 --- .../conduit/AuditQueryConduitAPIMethod.php | 2 +- .../PhabricatorAuditActionConstants.php | 32 -------- .../audit/editor/PhabricatorAuditEditor.php | 81 +------------------ .../controller/DiffusionCommitController.php | 6 -- .../diffusion/query/DiffusionCommitQuery.php | 8 -- 5 files changed, 2 insertions(+), 127 deletions(-) diff --git a/src/applications/audit/conduit/AuditQueryConduitAPIMethod.php b/src/applications/audit/conduit/AuditQueryConduitAPIMethod.php index d65c939a61..f3858afbf8 100644 --- a/src/applications/audit/conduit/AuditQueryConduitAPIMethod.php +++ b/src/applications/audit/conduit/AuditQueryConduitAPIMethod.php @@ -112,7 +112,7 @@ final class AuditQueryConduitAPIMethod extends AuditConduitAPIMethod { 'id' => $request->getID(), 'commitPHID' => $request->getCommitPHID(), 'auditorPHID' => $request->getAuditorPHID(), - 'reasons' => $request->getAuditReasons(), + 'reasons' => array(), 'status' => $request->getAuditStatus(), ); } diff --git a/src/applications/audit/constants/PhabricatorAuditActionConstants.php b/src/applications/audit/constants/PhabricatorAuditActionConstants.php index d323540795..aa467d41c4 100644 --- a/src/applications/audit/constants/PhabricatorAuditActionConstants.php +++ b/src/applications/audit/constants/PhabricatorAuditActionConstants.php @@ -12,36 +12,4 @@ final class PhabricatorAuditActionConstants extends Phobject { const INLINE = 'audit:inline'; const ACTION = 'audit:action'; - public static function getActionNameMap() { - $map = array( - self::COMMENT => pht('Comment'), - self::CONCERN => pht("Raise Concern \xE2\x9C\x98"), - self::ACCEPT => pht("Accept Commit \xE2\x9C\x94"), - self::RESIGN => pht('Resign from Audit'), - self::CLOSE => pht('Close Audit'), - self::ADD_CCS => pht('Add Subscribers'), - self::ADD_AUDITORS => pht('Add Auditors'), - ); - - return $map; - } - - public static function getActionName($constant) { - $map = self::getActionNameMap(); - return idx($map, $constant, pht('Unknown')); - } - - public static function getActionPastTenseVerb($action) { - $map = array( - self::COMMENT => pht('commented on'), - self::CONCERN => pht('raised a concern with'), - self::ACCEPT => pht('accepted'), - self::RESIGN => pht('resigned from'), - self::CLOSE => pht('closed'), - self::ADD_CCS => pht('added CCs to'), - self::ADD_AUDITORS => pht('added auditors to'), - ); - return idx($map, $action, pht('updated')); - } - } diff --git a/src/applications/audit/editor/PhabricatorAuditEditor.php b/src/applications/audit/editor/PhabricatorAuditEditor.php index ff1e69d8cb..1c43b08905 100644 --- a/src/applications/audit/editor/PhabricatorAuditEditor.php +++ b/src/applications/audit/editor/PhabricatorAuditEditor.php @@ -5,7 +5,6 @@ final class PhabricatorAuditEditor const MAX_FILES_SHOWN_IN_EMAIL = 1000; - private $auditReasonMap = array(); private $affectedFiles; private $rawPatch; private $auditorPHIDs = array(); @@ -13,26 +12,6 @@ final class PhabricatorAuditEditor private $didExpandInlineState = false; private $oldAuditStatus = null; - public function addAuditReason($phid, $reason) { - if (!isset($this->auditReasonMap[$phid])) { - $this->auditReasonMap[$phid] = array(); - } - $this->auditReasonMap[$phid][] = $reason; - return $this; - } - - private function getAuditReasons($phid) { - if (isset($this->auditReasonMap[$phid])) { - return $this->auditReasonMap[$phid]; - } - if ($this->getIsHeraldEditor()) { - $name = 'herald'; - } else { - $name = $this->getActor()->getUsername(); - } - return array(pht('Added by %s.', $name)); - } - public function setRawPatch($patch) { $this->rawPatch = $patch; return $this; @@ -62,7 +41,6 @@ final class PhabricatorAuditEditor // TODO: These will get modernized eventually, but that can happen one // at a time later on. $types[] = PhabricatorAuditActionConstants::INLINE; - $types[] = PhabricatorAuditActionConstants::ADD_AUDITORS; return $types; } @@ -107,10 +85,6 @@ final class PhabricatorAuditEditor case PhabricatorAuditActionConstants::INLINE: case PhabricatorAuditTransaction::TYPE_COMMIT: return null; - case PhabricatorAuditActionConstants::ADD_AUDITORS: - // TODO: For now, just record the added PHIDs. Eventually, turn these - // into real edge transactions, probably? - return array(); } return parent::getCustomTransactionOldValue($object, $xaction); @@ -122,7 +96,6 @@ final class PhabricatorAuditEditor switch ($xaction->getTransactionType()) { case PhabricatorAuditActionConstants::INLINE: - case PhabricatorAuditActionConstants::ADD_AUDITORS: case PhabricatorAuditTransaction::TYPE_COMMIT: return $xaction->getNewValue(); } @@ -136,7 +109,6 @@ final class PhabricatorAuditEditor switch ($xaction->getTransactionType()) { case PhabricatorAuditActionConstants::INLINE: - case PhabricatorAuditActionConstants::ADD_AUDITORS: case PhabricatorAuditTransaction::TYPE_COMMIT: return; } @@ -157,57 +129,6 @@ final class PhabricatorAuditEditor $reply->setHasReplies(1)->save(); } return; - case PhabricatorAuditActionConstants::ADD_AUDITORS: - $new = $xaction->getNewValue(); - if (!is_array($new)) { - $new = array(); - } - - $old = $xaction->getOldValue(); - if (!is_array($old)) { - $old = array(); - } - - $add = array_diff_key($new, $old); - - $actor = $this->requireActor(); - - $requests = $object->getAudits(); - $requests = mpull($requests, null, 'getAuditorPHID'); - foreach ($add as $phid) { - if (isset($requests[$phid])) { - $request = $requests[$phid]; - - // Only update an existing request if the current status is not - // an interesting status. - if ($request->isInteresting()) { - continue; - } - } else { - $request = id(new PhabricatorRepositoryAuditRequest()) - ->setCommitPHID($object->getPHID()) - ->setAuditorPHID($phid); - } - - if ($this->getIsHeraldEditor()) { - $audit_requested = $xaction->getMetadataValue('auditStatus'); - $audit_reason_map = $xaction->getMetadataValue('auditReasonMap'); - $audit_reason = $audit_reason_map[$phid]; - } else { - $audit_requested = PhabricatorAuditStatusConstants::AUDIT_REQUESTED; - $audit_reason = $this->getAuditReasons($phid); - } - - $request - ->setAuditStatus($audit_requested) - ->setAuditReasons($audit_reason) - ->save(); - - $requests[$phid] = $request; - } - - $object->attachAudits($requests); - return; } return parent::applyCustomExternalTransaction($object, $xaction); @@ -389,7 +310,7 @@ final class PhabricatorAuditEditor return array(); } - return id(new PhabricatorAuditTransaction()) + return $commit->getApplicationTransactionTemplate() ->setTransactionType(DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE) ->setNewValue( array( diff --git a/src/applications/diffusion/controller/DiffusionCommitController.php b/src/applications/diffusion/controller/DiffusionCommitController.php index f88c463633..f8847b7e3b 100644 --- a/src/applications/diffusion/controller/DiffusionCommitController.php +++ b/src/applications/diffusion/controller/DiffusionCommitController.php @@ -855,12 +855,6 @@ final class DiffusionCommitController extends DiffusionController { PhabricatorAuditStatusConstants::getStatusColor($code), PhabricatorAuditStatusConstants::getStatusName($code)); - $note = array(); - foreach ($request->getAuditReasons() as $reason) { - $note[] = phutil_tag('div', array(), $reason); - } - $item->setNote($note); - $auditor_phid = $request->getAuditorPHID(); $target = $viewer->renderHandle($auditor_phid); $item->setTarget($target); diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php index c07adbad5e..40fb5a64f6 100644 --- a/src/applications/diffusion/query/DiffusionCommitQuery.php +++ b/src/applications/diffusion/query/DiffusionCommitQuery.php @@ -135,14 +135,6 @@ final class DiffusionCommitQuery return $this; } - public function withAuditStatus($status) { - // TODO: Replace callers with `withStatuses()`. - return $this->withStatuses( - array( - $status, - )); - } - public function withEpochRange($min, $max) { $this->epochMin = $min; $this->epochMax = $max; From 239b7c7f5c8bf4d039c8281bd30647a34b962f1b Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Jan 2017 15:14:38 -0800 Subject: [PATCH 08/49] Fix icon spacing for adjacent build status and audit status in commit history tables Summary: Ref T10978. These were a little too snug. Test Plan: {F2549613} Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17268 --- resources/celerity/map.php | 6 +++--- webroot/rsrc/css/aphront/table-view.css | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 4344b23a8d..bfce26963d 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => 'ea0e9c0c', + 'core.pkg.css' => '7c235ec7', 'core.pkg.js' => '2291d3b2', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -27,7 +27,7 @@ return array( 'rsrc/css/aphront/notification.css' => '3f6c89c9', 'rsrc/css/aphront/panel-view.css' => '8427b78d', 'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9', - 'rsrc/css/aphront/table-view.css' => '3225137a', + 'rsrc/css/aphront/table-view.css' => '213a5981', 'rsrc/css/aphront/tokenizer.css' => '9a8cb501', 'rsrc/css/aphront/tooltip.css' => '1a07aea8', 'rsrc/css/aphront/typeahead-browse.css' => '8904346a', @@ -553,7 +553,7 @@ return array( 'aphront-list-filter-view-css' => '5d6f0526', 'aphront-multi-column-view-css' => '84cc6640', 'aphront-panel-view-css' => '8427b78d', - 'aphront-table-view-css' => '3225137a', + 'aphront-table-view-css' => '213a5981', 'aphront-tokenizer-control-css' => '9a8cb501', 'aphront-tooltip-css' => '1a07aea8', 'aphront-typeahead-control-css' => 'd4f16145', diff --git a/webroot/rsrc/css/aphront/table-view.css b/webroot/rsrc/css/aphront/table-view.css index 980118d31a..1d59435e3b 100644 --- a/webroot/rsrc/css/aphront/table-view.css +++ b/webroot/rsrc/css/aphront/table-view.css @@ -210,7 +210,9 @@ th.aphront-table-view-sortable-selected { padding: 0px; } - +.aphront-table-view td.icon + td.icon { + padding-left: 8px; +} div.single-display-line-bounds { width: 100%; From ad01e26af71e7d7936dd2347eca47674255a7838 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 08:58:33 -0800 Subject: [PATCH 09/49] Redesign Home/Profile/Projects side navigation Summary: Ref T11957. Needs some more polish, but I think everything here is square. Test Plan: Add personal/global items to home, test mobile. Test workboards / colors. Reviewers: epriestley Reviewed By: epriestley Subscribers: 20after4, rfreebern, Korvin Maniphest Tasks: T11957 Differential Revision: https://secure.phabricator.com/D17259 --- resources/celerity/map.php | 88 ++++--- resources/celerity/packages.php | 2 - .../20170131.dashboard.personal.01.php | 45 ++++ src/__phutil_library_map__.php | 10 +- .../CelerityDefaultPostprocessor.php | 3 - .../PhabricatorDashboardApplication.php | 1 - .../PhabricatorDashboardInstallController.php | 148 ------------ .../PhabricatorDashboardManageController.php | 20 -- .../constants/PhabricatorHomeConstants.php | 1 + .../controller/PhabricatorHomeController.php | 91 +++---- .../PhabricatorHomeMainController.php | 16 +- .../PhabricatorHomeMenuController.php | 5 + .../PhabricatorHomeMenuItemController.php | 3 +- .../PhabricatorHomeProfileMenuEngine.php | 12 + ...PhabricatorHomeLauncherProfileMenuItem.php | 68 ++++++ .../PhabricatorHomeManageProfileMenuItem.php | 8 +- .../PhabricatorHomeProfileMenuItem.php | 68 ++++++ .../view/PhabricatorApplicationLaunchView.php | 69 ------ .../PhabricatorPeopleProfileController.php | 59 +++++ ...abricatorPeopleProfileManageController.php | 17 +- ...PhabricatorPeopleProfileViewController.php | 35 +-- .../PhabricatorProjectApplication.php | 2 +- ...habricatorProjectPointsProfileMenuItem.php | 38 +-- .../engine/PhabricatorProfileMenuEngine.php | 1 - .../PhabricatorApplicationProfileMenuItem.php | 5 + ...habricatorHomePreferencesSettingsPanel.php | 223 ------------------ src/view/layout/AphrontSideNavFilterView.php | 3 +- src/view/phui/PHUIListItemView.php | 18 +- webroot/rsrc/css/aphront/tooltip.css | 9 +- .../css/application/base/main-menu-view.css | 6 +- .../phabricator-application-launch-view.css | 103 -------- .../rsrc/css/application/base/phui-theme.css | 2 +- .../search/application-search-view.css | 6 +- .../css/phui/calendar/phui-calendar-list.css | 2 +- webroot/rsrc/css/phui/phui-basic-nav-view.css | 58 +++-- webroot/rsrc/css/phui/phui-box.css | 5 +- webroot/rsrc/css/phui/phui-profile-menu.css | 162 ------------- .../rsrc/css/phui/phui-segment-bar-view.css | 6 +- .../phui/workboards/phui-workboard-color.css | 4 + .../css/phui/workboards/phui-workboard.css | 2 +- webroot/rsrc/js/core/ToolTip.js | 3 +- webroot/rsrc/js/core/behavior-tooltip.js | 2 +- 42 files changed, 462 insertions(+), 967 deletions(-) create mode 100644 resources/sql/autopatches/20170131.dashboard.personal.01.php delete mode 100644 src/applications/dashboard/controller/PhabricatorDashboardInstallController.php create mode 100644 src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php create mode 100644 src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php delete mode 100644 src/applications/meta/view/PhabricatorApplicationLaunchView.php delete mode 100644 src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php delete mode 100644 webroot/rsrc/css/application/base/phabricator-application-launch-view.css delete mode 100644 webroot/rsrc/css/phui/phui-profile-menu.css diff --git a/resources/celerity/map.php b/resources/celerity/map.php index bfce26963d..069bf17019 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,8 +9,8 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => '7c235ec7', - 'core.pkg.js' => '2291d3b2', + 'core.pkg.css' => '25cda14d', + 'core.pkg.js' => 'f1e0e26f', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', 'differential.pkg.js' => 'ddfeb49b', @@ -29,15 +29,14 @@ return array( 'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9', 'rsrc/css/aphront/table-view.css' => '213a5981', 'rsrc/css/aphront/tokenizer.css' => '9a8cb501', - 'rsrc/css/aphront/tooltip.css' => '1a07aea8', + 'rsrc/css/aphront/tooltip.css' => '3f325821', 'rsrc/css/aphront/typeahead-browse.css' => '8904346a', 'rsrc/css/aphront/typeahead.css' => 'd4f16145', 'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af', 'rsrc/css/application/auth/auth.css' => '0877ed6e', - 'rsrc/css/application/base/main-menu-view.css' => '8eac4166', + 'rsrc/css/application/base/main-menu-view.css' => '93519cb0', 'rsrc/css/application/base/notification-menu.css' => '6a697e43', - 'rsrc/css/application/base/phabricator-application-launch-view.css' => '95351601', - 'rsrc/css/application/base/phui-theme.css' => '798c69b8', + 'rsrc/css/application/base/phui-theme.css' => '9f261c6b', 'rsrc/css/application/base/standard-page-view.css' => '894d8a25', 'rsrc/css/application/chatlog/chatlog.css' => 'd295b020', 'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4', @@ -102,7 +101,7 @@ return array( 'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5', 'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd', 'rsrc/css/application/releeph/releeph-request-typeahead.css' => '667a48ae', - 'rsrc/css/application/search/application-search-view.css' => '8452c849', + 'rsrc/css/application/search/application-search-view.css' => '20ae9d85', 'rsrc/css/application/search/search-results.css' => '64ad079a', 'rsrc/css/application/slowvote/slowvote.css' => 'a94b7230', 'rsrc/css/application/tokens/tokens.css' => '3d0f239e', @@ -119,7 +118,7 @@ return array( 'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82', 'rsrc/css/layout/phabricator-source-code-view.css' => '4383192f', 'rsrc/css/phui/calendar/phui-calendar-day.css' => '572b1893', - 'rsrc/css/phui/calendar/phui-calendar-list.css' => 'fcc9fb41', + 'rsrc/css/phui/calendar/phui-calendar-list.css' => 'eb5c774b', 'rsrc/css/phui/calendar/phui-calendar-month.css' => '8e10e92c', 'rsrc/css/phui/calendar/phui-calendar.css' => '477acfaa', 'rsrc/css/phui/object-item/phui-oi-big-ui.css' => '19f9369b', @@ -131,9 +130,9 @@ return array( 'rsrc/css/phui/phui-action-list.css' => '5679229f', 'rsrc/css/phui/phui-action-panel.css' => '91c7b835', 'rsrc/css/phui/phui-badge.css' => '3baef8db', - 'rsrc/css/phui/phui-basic-nav-view.css' => '7093573b', + 'rsrc/css/phui/phui-basic-nav-view.css' => 'cb4d5161', 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', - 'rsrc/css/phui/phui-box.css' => '33b629f8', + 'rsrc/css/phui/phui-box.css' => '269cbc99', 'rsrc/css/phui/phui-button.css' => '00ddac15', 'rsrc/css/phui/phui-chart.css' => '6bf6f78e', 'rsrc/css/phui/phui-cms.css' => 'be43c8a8', @@ -162,17 +161,16 @@ return array( 'rsrc/css/phui/phui-object-box.css' => '8b289e3d', 'rsrc/css/phui/phui-pager.css' => 'bea33d23', 'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', - 'rsrc/css/phui/phui-profile-menu.css' => 'c71ecdcd', 'rsrc/css/phui/phui-property-list-view.css' => '6d8e58ac', 'rsrc/css/phui/phui-remarkup-preview.css' => '1a8f2591', - 'rsrc/css/phui/phui-segment-bar-view.css' => '46342871', + 'rsrc/css/phui/phui-segment-bar-view.css' => 'b1d1b892', 'rsrc/css/phui/phui-spacing.css' => '042804d6', 'rsrc/css/phui/phui-status.css' => 'd5263e49', 'rsrc/css/phui/phui-tag-view.css' => '84d65f26', 'rsrc/css/phui/phui-timeline-view.css' => 'bc523970', 'rsrc/css/phui/phui-two-column-view.css' => 'f63cad3c', - 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'b60ef38a', - 'rsrc/css/phui/workboards/phui-workboard.css' => 'c88912ee', + 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'f0551a33', + 'rsrc/css/phui/workboards/phui-workboard.css' => '3bc85455', 'rsrc/css/phui/workboards/phui-workcard.css' => 'cca5fa92', 'rsrc/css/phui/workboards/phui-workpanel.css' => 'a3a63478', 'rsrc/css/sprite-login.css' => '587d92d7', @@ -488,7 +486,7 @@ return array( 'rsrc/js/core/ShapedRequest.js' => '7cbe244b', 'rsrc/js/core/TextAreaUtils.js' => '320810c8', 'rsrc/js/core/Title.js' => '485aaa6c', - 'rsrc/js/core/ToolTip.js' => 'b5c62c3b', + 'rsrc/js/core/ToolTip.js' => 'd02f7181', 'rsrc/js/core/behavior-active-nav.js' => 'e379b58e', 'rsrc/js/core/behavior-audio-source.js' => '59b251eb', 'rsrc/js/core/behavior-autofocus.js' => '7319e029', @@ -529,7 +527,7 @@ return array( 'rsrc/js/core/behavior-time-typeahead.js' => '522431f7', 'rsrc/js/core/behavior-toggle-class.js' => '92b9ec77', 'rsrc/js/core/behavior-tokenizer.js' => 'b3a4b884', - 'rsrc/js/core/behavior-tooltip.js' => '42fcb747', + 'rsrc/js/core/behavior-tooltip.js' => 'c420b0b9', 'rsrc/js/core/behavior-user-menu.js' => '31420f77', 'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d', 'rsrc/js/core/behavior-workflow.js' => '0a3f3021', @@ -555,9 +553,9 @@ return array( 'aphront-panel-view-css' => '8427b78d', 'aphront-table-view-css' => '213a5981', 'aphront-tokenizer-control-css' => '9a8cb501', - 'aphront-tooltip-css' => '1a07aea8', + 'aphront-tooltip-css' => '3f325821', 'aphront-typeahead-control-css' => 'd4f16145', - 'application-search-view-css' => '8452c849', + 'application-search-view-css' => '20ae9d85', 'auth-css' => '0877ed6e', 'bulk-job-css' => 'df9c1d4a', 'changeset-view-manager' => 'a2828756', @@ -681,7 +679,7 @@ return array( 'javelin-behavior-phabricator-reveal-content' => '60821bc7', 'javelin-behavior-phabricator-search-typeahead' => '06c32383', 'javelin-behavior-phabricator-show-older-transactions' => '94c65b72', - 'javelin-behavior-phabricator-tooltips' => '42fcb747', + 'javelin-behavior-phabricator-tooltips' => 'c420b0b9', 'javelin-behavior-phabricator-transaction-comment-form' => 'b23b49e6', 'javelin-behavior-phabricator-transaction-list' => '13c739ea', 'javelin-behavior-phabricator-watch-anchor' => '9f36c42d', @@ -781,7 +779,6 @@ return array( 'path-typeahead' => 'f7fc67ec', 'people-profile-css' => '2473d929', 'phabricator-action-list-view-css' => '5679229f', - 'phabricator-application-launch-view-css' => '95351601', 'phabricator-busy' => '59a7976a', 'phabricator-chatlog-css' => 'd295b020', 'phabricator-content-source-view-css' => '4b8b05d4', @@ -798,7 +795,7 @@ return array( 'phabricator-flag-css' => 'bba8f811', 'phabricator-keyboard-shortcut' => '1ae869f2', 'phabricator-keyboard-shortcut-manager' => '4a021c10', - 'phabricator-main-menu-view' => '8eac4166', + 'phabricator-main-menu-view' => '93519cb0', 'phabricator-nav-view-css' => 'b29426e9', 'phabricator-notification' => 'ccf1cbf8', 'phabricator-notification-css' => '3f6c89c9', @@ -814,7 +811,7 @@ return array( 'phabricator-standard-page-view' => '894d8a25', 'phabricator-textareautils' => '320810c8', 'phabricator-title' => '485aaa6c', - 'phabricator-tooltip' => 'b5c62c3b', + 'phabricator-tooltip' => 'd02f7181', 'phabricator-ui-example-css' => '528b19de', 'phabricator-uiexample-javelin-view' => 'd4a14807', 'phabricator-uiexample-reactor-button' => 'd19198c8', @@ -839,13 +836,13 @@ return array( 'phriction-document-css' => '4282e4ad', 'phui-action-panel-css' => '91c7b835', 'phui-badge-view-css' => '3baef8db', - 'phui-basic-nav-view-css' => '7093573b', + 'phui-basic-nav-view-css' => 'cb4d5161', 'phui-big-info-view-css' => 'bd903741', - 'phui-box-css' => '33b629f8', + 'phui-box-css' => '269cbc99', 'phui-button-css' => '00ddac15', 'phui-calendar-css' => '477acfaa', 'phui-calendar-day-css' => '572b1893', - 'phui-calendar-list-css' => 'fcc9fb41', + 'phui-calendar-list-css' => 'eb5c774b', 'phui-calendar-month-css' => '8e10e92c', 'phui-chart-css' => '6bf6f78e', 'phui-cms-css' => 'be43c8a8', @@ -883,18 +880,17 @@ return array( 'phui-oi-simple-ui-css' => 'a8beebea', 'phui-pager-css' => 'bea33d23', 'phui-pinboard-view-css' => '2495140e', - 'phui-profile-menu-css' => 'c71ecdcd', 'phui-property-list-view-css' => '6d8e58ac', 'phui-remarkup-preview-css' => '1a8f2591', - 'phui-segment-bar-view-css' => '46342871', + 'phui-segment-bar-view-css' => 'b1d1b892', 'phui-spacing-css' => '042804d6', 'phui-status-list-view-css' => 'd5263e49', 'phui-tag-view-css' => '84d65f26', - 'phui-theme-css' => '798c69b8', + 'phui-theme-css' => '9f261c6b', 'phui-timeline-view-css' => 'bc523970', 'phui-two-column-view-css' => 'f63cad3c', - 'phui-workboard-color-css' => 'b60ef38a', - 'phui-workboard-view-css' => 'c88912ee', + 'phui-workboard-color-css' => 'f0551a33', + 'phui-workboard-view-css' => '3bc85455', 'phui-workcard-view-css' => 'cca5fa92', 'phui-workpanel-view-css' => 'a3a63478', 'phuix-action-list-view' => 'b5c256b8', @@ -1178,12 +1174,6 @@ return array( 'javelin-dom', 'javelin-request', ), - '42fcb747' => array( - 'javelin-behavior', - 'javelin-behavior-device', - 'javelin-stratcom', - 'phabricator-tooltip', - ), '44959b73' => array( 'javelin-util', 'javelin-uri', @@ -1612,9 +1602,6 @@ return array( 'javelin-stratcom', 'javelin-util', ), - '8eac4166' => array( - 'phui-theme-css', - ), '8ff5e24c' => array( 'javelin-behavior', 'javelin-stratcom', @@ -1636,6 +1623,9 @@ return array( 'javelin-stratcom', 'javelin-dom', ), + '93519cb0' => array( + 'phui-theme-css', + ), '93ae974f' => array( 'javelin-behavior', 'javelin-dom', @@ -1888,12 +1878,6 @@ return array( 'javelin-install', 'javelin-dom', ), - 'b5c62c3b' => array( - 'javelin-install', - 'javelin-util', - 'javelin-dom', - 'javelin-vector', - ), 'b5d57730' => array( 'javelin-install', 'javelin-stratcom', @@ -1969,6 +1953,12 @@ return array( 'javelin-install', 'javelin-dom', ), + 'c420b0b9' => array( + 'javelin-behavior', + 'javelin-behavior-device', + 'javelin-stratcom', + 'phabricator-tooltip', + ), 'c587b80f' => array( 'javelin-install', ), @@ -2026,6 +2016,12 @@ return array( 'cd2b9b77' => array( 'phui-oi-list-view-css', ), + 'd02f7181' => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-vector', + ), 'd0c516d5' => array( 'javelin-behavior', 'javelin-dom', @@ -2318,8 +2314,6 @@ return array( 'phui-spacing-css', 'phui-form-css', 'phui-icon-view-css', - 'phui-profile-menu-css', - 'phabricator-application-launch-view-css', 'phabricator-action-list-view-css', 'phui-property-list-view-css', 'phui-tag-view-css', diff --git a/resources/celerity/packages.php b/resources/celerity/packages.php index 288bd69ed2..4822633426 100644 --- a/resources/celerity/packages.php +++ b/resources/celerity/packages.php @@ -130,9 +130,7 @@ return array( 'phui-spacing-css', 'phui-form-css', 'phui-icon-view-css', - 'phui-profile-menu-css', - 'phabricator-application-launch-view-css', 'phabricator-action-list-view-css', 'phui-property-list-view-css', 'phui-tag-view-css', diff --git a/resources/sql/autopatches/20170131.dashboard.personal.01.php b/resources/sql/autopatches/20170131.dashboard.personal.01.php new file mode 100644 index 0000000000..af62c017e8 --- /dev/null +++ b/resources/sql/autopatches/20170131.dashboard.personal.01.php @@ -0,0 +1,45 @@ +establishConnection('r'); +$table_name = 'dashboard_install'; + +$search_table = new PhabricatorProfileMenuItemConfiguration(); +$search_conn = $search_table->establishConnection('w'); +$search_table_name = 'search_profilepanelconfiguration'; + +$viewer = PhabricatorUser::getOmnipotentUser(); +$profile_phid = id(new PhabricatorHomeApplication())->getPHID(); +$menu_item_key = PhabricatorDashboardProfileMenuItem::MENUITEMKEY; + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $install) { + + $dashboard_phid = $install['dashboardPHID']; + $new_phid = id(new PhabricatorProfileMenuItemConfiguration())->generatePHID(); + $menu_item_properties = json_encode( + array('dashboardPHID' => $dashboard_phid, 'name' => '')); + + $custom_phid = $install['objectPHID']; + if ($custom_phid == 'dashboard:default') { + $custom_phid = null; + } + + $menu_item_order = 0; + + queryfx( + $search_conn, + 'INSERT INTO %T (phid, profilePHID, menuItemKey, menuItemProperties, '. + 'visibility, dateCreated, dateModified, menuItemOrder, customPHID) VALUES '. + '(%s, %s, %s, %s, %s, %d, %d, %d, %ns)', + $search_table_name, + $new_phid, + $profile_phid, + $menu_item_key, + $menu_item_properties, + 'visible', + PhabricatorTime::getNow(), + PhabricatorTime::getNow(), + $menu_item_order, + $custom_phid); + +} diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 6b510144e5..de2fa8e207 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1825,7 +1825,6 @@ phutil_register_library_map(array( 'PhabricatorApplicationEditController' => 'applications/meta/controller/PhabricatorApplicationEditController.php', 'PhabricatorApplicationEditHTTPParameterHelpView' => 'applications/transactions/view/PhabricatorApplicationEditHTTPParameterHelpView.php', 'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php', - 'PhabricatorApplicationLaunchView' => 'applications/meta/view/PhabricatorApplicationLaunchView.php', 'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php', 'PhabricatorApplicationProfileMenuItem' => 'applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php', 'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php', @@ -2469,7 +2468,6 @@ phutil_register_library_map(array( 'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php', 'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php', 'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php', - 'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php', 'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php', 'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php', 'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php', @@ -2837,12 +2835,13 @@ phutil_register_library_map(array( 'PhabricatorHomeApplication' => 'applications/home/application/PhabricatorHomeApplication.php', 'PhabricatorHomeConstants' => 'applications/home/constants/PhabricatorHomeConstants.php', 'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php', + 'PhabricatorHomeLauncherProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php', 'PhabricatorHomeMainController' => 'applications/home/controller/PhabricatorHomeMainController.php', 'PhabricatorHomeManageProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php', 'PhabricatorHomeMenuController' => 'applications/home/controller/PhabricatorHomeMenuController.php', 'PhabricatorHomeMenuItemController' => 'applications/home/controller/PhabricatorHomeMenuItemController.php', - 'PhabricatorHomePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php', 'PhabricatorHomeProfileMenuEngine' => 'applications/home/engine/PhabricatorHomeProfileMenuEngine.php', + 'PhabricatorHomeProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeProfileMenuItem.php', 'PhabricatorHovercardEngineExtension' => 'applications/search/engineextension/PhabricatorHovercardEngineExtension.php', 'PhabricatorHovercardEngineExtensionModule' => 'applications/search/engineextension/PhabricatorHovercardEngineExtensionModule.php', 'PhabricatorIDsSearchEngineExtension' => 'applications/search/engineextension/PhabricatorIDsSearchEngineExtension.php', @@ -6711,7 +6710,6 @@ phutil_register_library_map(array( 'PhabricatorApplicationEditController' => 'PhabricatorApplicationsController', 'PhabricatorApplicationEditHTTPParameterHelpView' => 'AphrontView', 'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController', - 'PhabricatorApplicationLaunchView' => 'AphrontTagView', 'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController', 'PhabricatorApplicationProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', @@ -7471,7 +7469,6 @@ phutil_register_library_map(array( 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', 'PhabricatorDashboardIconSet' => 'PhabricatorIconSet', 'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO', - 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController', 'PhabricatorDashboardLayoutConfig' => 'Phobject', 'PhabricatorDashboardListController' => 'PhabricatorDashboardController', 'PhabricatorDashboardManageController' => 'PhabricatorDashboardController', @@ -7893,12 +7890,13 @@ phutil_register_library_map(array( 'PhabricatorHomeApplication' => 'PhabricatorApplication', 'PhabricatorHomeConstants' => 'PhabricatorHomeController', 'PhabricatorHomeController' => 'PhabricatorController', + 'PhabricatorHomeLauncherProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorHomeMainController' => 'PhabricatorHomeController', 'PhabricatorHomeManageProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorHomeMenuController' => 'PhabricatorHomeController', 'PhabricatorHomeMenuItemController' => 'PhabricatorHomeController', - 'PhabricatorHomePreferencesSettingsPanel' => 'PhabricatorSettingsPanel', 'PhabricatorHomeProfileMenuEngine' => 'PhabricatorProfileMenuEngine', + 'PhabricatorHomeProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorHovercardEngineExtension' => 'Phobject', 'PhabricatorHovercardEngineExtensionModule' => 'PhabricatorConfigModule', 'PhabricatorIDsSearchEngineExtension' => 'PhabricatorSearchEngineExtension', diff --git a/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php b/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php index 2395ad9365..1171266c0c 100644 --- a/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php +++ b/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php @@ -209,10 +209,7 @@ final class CelerityDefaultPostprocessor 'menu.profile.icon.disabled' => 'rgba(255,255,255,.4)', 'menu.main.height' => '44px', - 'menu.profile.width' => '240px', - 'menu.profile.width.collapsed' => '88px', - 'menu.profile.item.height' => '46px', ); } diff --git a/src/applications/dashboard/application/PhabricatorDashboardApplication.php b/src/applications/dashboard/application/PhabricatorDashboardApplication.php index a79cf133a3..54ec5db20a 100644 --- a/src/applications/dashboard/application/PhabricatorDashboardApplication.php +++ b/src/applications/dashboard/application/PhabricatorDashboardApplication.php @@ -30,7 +30,6 @@ final class PhabricatorDashboardApplication extends PhabricatorApplication { 'create/' => 'PhabricatorDashboardEditController', 'copy/(?:(?P\d+)/)?' => 'PhabricatorDashboardCopyController', 'edit/(?:(?P\d+)/)?' => 'PhabricatorDashboardEditController', - 'install/(?P\d+)/' => 'PhabricatorDashboardInstallController', 'uninstall/(?P\d+)/' => 'PhabricatorDashboardUninstallController', 'addpanel/(?P\d+)/' => 'PhabricatorDashboardAddPanelController', 'movepanel/(?P\d+)/' => 'PhabricatorDashboardMovePanelController', diff --git a/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php b/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php deleted file mode 100644 index 504aacaac8..0000000000 --- a/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php +++ /dev/null @@ -1,148 +0,0 @@ -getViewer(); - $this->id = $request->getURIData('id'); - - $dashboard = id(new PhabricatorDashboardQuery()) - ->setViewer($viewer) - ->withIDs(array($this->id)) - ->executeOne(); - if (!$dashboard) { - return new Aphront404Response(); - } - $dashboard_phid = $dashboard->getPHID(); - - $object_phid = $request->getStr('objectPHID', $viewer->getPHID()); - switch ($object_phid) { - case PhabricatorHomeApplication::DASHBOARD_DEFAULT: - if (!$viewer->getIsAdmin()) { - return new Aphront404Response(); - } - break; - default: - $object = id(new PhabricatorObjectQuery()) - ->setViewer($viewer) - ->requireCapabilities( - array( - PhabricatorPolicyCapability::CAN_VIEW, - PhabricatorPolicyCapability::CAN_EDIT, - )) - ->withPHIDs(array($object_phid)) - ->executeOne(); - if (!$object) { - return new Aphront404Response(); - } - break; - } - - $installer_phid = $viewer->getPHID(); - $application_class = $request->getStr( - 'applicationClass', - 'PhabricatorHomeApplication'); - - if ($request->isFormPost()) { - $dashboard_install = id(new PhabricatorDashboardInstall()) - ->loadOneWhere( - 'objectPHID = %s AND applicationClass = %s', - $object_phid, - $application_class); - if (!$dashboard_install) { - $dashboard_install = id(new PhabricatorDashboardInstall()) - ->setObjectPHID($object_phid) - ->setApplicationClass($application_class); - } - $dashboard_install - ->setInstallerPHID($installer_phid) - ->setDashboardPHID($dashboard_phid) - ->save(); - return id(new AphrontRedirectResponse()) - ->setURI($this->getRedirectURI($application_class, $object_phid)); - } - - $dialog = $this->newDialog() - ->setTitle(pht('Install Dashboard')) - ->addHiddenInput('objectPHID', $object_phid) - ->addCancelButton($this->getCancelURI($application_class, $object_phid)) - ->addSubmitButton(pht('Install Dashboard')); - - switch ($application_class) { - case 'PhabricatorHomeApplication': - if ($viewer->getPHID() == $object_phid) { - if ($viewer->getIsAdmin()) { - $dialog->setWidth(AphrontDialogView::WIDTH_FORM); - - $form = id(new AphrontFormView()) - ->setUser($viewer) - ->appendRemarkupInstructions( - pht('Choose where to install this dashboard.')) - ->appendChild( - id(new AphrontFormRadioButtonControl()) - ->setName('objectPHID') - ->setValue(PhabricatorHomeApplication::DASHBOARD_DEFAULT) - ->addButton( - PhabricatorHomeApplication::DASHBOARD_DEFAULT, - pht('Default Dashboard for All Users'), - pht( - 'Install this dashboard as the global default dashboard '. - 'for all users. Users can install a personal dashboard '. - 'to replace it. All users who have not configured '. - 'a personal dashboard will be affected by this change.')) - ->addButton( - $viewer->getPHID(), - pht('Personal Home Page Dashboard'), - pht( - 'Install this dashboard as your personal home page '. - 'dashboard. Only you will be affected by this change.'))); - - $dialog->appendChild($form->buildLayoutView()); - } else { - $dialog->appendParagraph( - pht('Install this dashboard on your home page?')); - } - } else { - $dialog->appendParagraph( - pht( - 'Install this dashboard as the home page dashboard for %s?', - phutil_tag( - 'strong', - array(), - $viewer->renderHandle($object_phid)))); - } - break; - default: - throw new Exception( - pht( - 'Unknown dashboard application class "%s"!', - $application_class)); - } - - return $dialog; - } - - private function getCancelURI($application_class, $object_phid) { - $uri = null; - switch ($application_class) { - case 'PhabricatorHomeApplication': - $uri = '/dashboard/view/'.$this->id.'/'; - break; - } - return $uri; - } - - private function getRedirectURI($application_class, $object_phid) { - $uri = null; - switch ($application_class) { - case 'PhabricatorHomeApplication': - $uri = '/'; - break; - } - return $uri; - } - -} diff --git a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php index 9724db21f7..d5902ce93d 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php @@ -156,26 +156,6 @@ final class PhabricatorDashboardManageController ->setHref($this->getApplicationURI("copy/{$id}/")) ->setWorkflow(true)); - $installed_dashboard = id(new PhabricatorDashboardInstall()) - ->loadOneWhere( - 'objectPHID = %s AND applicationClass = %s', - $viewer->getPHID(), - 'PhabricatorHomeApplication'); - if ($installed_dashboard && - $installed_dashboard->getDashboardPHID() == $dashboard->getPHID()) { - $title_install = pht('Uninstall Dashboard'); - $href_install = "uninstall/{$id}/"; - } else { - $title_install = pht('Install Dashboard'); - $href_install = "install/{$id}/"; - } - $curtain->addAction( - id(new PhabricatorActionView()) - ->setName($title_install) - ->setIcon('fa-wrench') - ->setHref($this->getApplicationURI($href_install)) - ->setWorkflow(true)); - return $curtain; } diff --git a/src/applications/home/constants/PhabricatorHomeConstants.php b/src/applications/home/constants/PhabricatorHomeConstants.php index d1613acf58..965dfbda77 100644 --- a/src/applications/home/constants/PhabricatorHomeConstants.php +++ b/src/applications/home/constants/PhabricatorHomeConstants.php @@ -3,6 +3,7 @@ final class PhabricatorHomeConstants extends PhabricatorHomeController { + const ITEM_HOME = 'home.dashboard'; const ITEM_LAUNCHER = 'home.launcher'; const ITEM_MANAGE = 'home.manage.menu'; diff --git a/src/applications/home/controller/PhabricatorHomeController.php b/src/applications/home/controller/PhabricatorHomeController.php index 65a412faad..ffb27b3a2e 100644 --- a/src/applications/home/controller/PhabricatorHomeController.php +++ b/src/applications/home/controller/PhabricatorHomeController.php @@ -2,69 +2,48 @@ abstract class PhabricatorHomeController extends PhabricatorController { - public function buildNav() { - $user = $this->getRequest()->getUser(); + private $home; + private $profileMenu; - $nav = new AphrontSideNavFilterView(); - $nav->setBaseURI(new PhutilURI('/')); + public function buildApplicationMenu() { + $menu = $this->newApplicationMenu(); - $applications = id(new PhabricatorApplicationQuery()) - ->setViewer($user) - ->withInstalled(true) - ->withUnlisted(false) - ->withLaunchable(true) - ->execute(); - - $pinned = $user->getUserSetting( - PhabricatorPinnedApplicationsSetting::SETTINGKEY); - - // Force "Applications" to appear at the bottom. - $meta_app = 'PhabricatorApplicationsApplication'; - $pinned = array_fuse($pinned); - unset($pinned[$meta_app]); - $pinned[$meta_app] = $meta_app; - $applications[$meta_app] = PhabricatorApplication::getByClass($meta_app); - - $tiles = array(); - - $home_app = new PhabricatorHomeApplication(); - - $tiles[] = id(new PhabricatorApplicationLaunchView()) - ->setApplication($home_app) - ->addClass('phabricator-application-launch-phone-only') - ->setUser($user); - - foreach ($pinned as $pinned_application) { - if (empty($applications[$pinned_application])) { - continue; - } - - $application = $applications[$pinned_application]; - - $tile = id(new PhabricatorApplicationLaunchView()) - ->setApplication($application) - ->setUser($user); - - $tiles[] = $tile; + $profile_menu = $this->getProfileMenu(); + if ($profile_menu) { + $menu->setProfileMenu($profile_menu); } - $nav->addCustomBlock( - phutil_tag( - 'div', - array( - 'class' => 'application-tile-group', - ), - $tiles)); + return $menu; + } - $nav->addFilter( - '', - pht('Customize Menu...'), - '/settings/panel/home/'); + protected function getProfileMenu() { + if (!$this->profileMenu) { + $viewer = $this->getViewer(); + $applications = id(new PhabricatorApplicationQuery()) + ->setViewer($viewer) + ->withClasses(array('PhabricatorHomeApplication')) + ->withInstalled(true) + ->execute(); + $home = head($applications); + if (!$home) { + return null; + } - $nav->addClass('phabricator-side-menu-home'); - $nav->selectFilter(null); + $engine = id(new PhabricatorHomeProfileMenuEngine()) + ->setViewer($viewer) + ->setProfileObject($home); - return $nav; + if ($viewer->getPHID()) { + $engine->setCustomPHID($viewer->getPHID()) + ->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED); + } else { + $engine->setMenuType(PhabricatorProfileMenuEngine::MENU_GLOBAL); + } + + $this->profileMenu = $engine->buildNavigation(); + } + + return $this->profileMenu; } } diff --git a/src/applications/home/controller/PhabricatorHomeMainController.php b/src/applications/home/controller/PhabricatorHomeMainController.php index 405959fe67..79687af51f 100644 --- a/src/applications/home/controller/PhabricatorHomeMainController.php +++ b/src/applications/home/controller/PhabricatorHomeMainController.php @@ -34,19 +34,17 @@ final class PhabricatorHomeMainController extends PhabricatorHomeController { $content = $this->buildMainResponse(); } - if (!$request->getURIData('only')) { - $nav = $this->buildNav(); - $nav->appendChild( - array( - $content, - id(new PhabricatorGlobalUploadTargetView())->setUser($viewer), - )); - $content = $nav; - } + $nav = $this->getProfileMenu(); + $content = + array( + $content, + id(new PhabricatorGlobalUploadTargetView())->setUser($viewer), + ); return $this->newPage() ->setTitle('Phabricator') ->addClass('phabricator-home') + ->setNavigation($nav) ->appendChild($content); } diff --git a/src/applications/home/controller/PhabricatorHomeMenuController.php b/src/applications/home/controller/PhabricatorHomeMenuController.php index 13c4750489..7e3ef8b14d 100644 --- a/src/applications/home/controller/PhabricatorHomeMenuController.php +++ b/src/applications/home/controller/PhabricatorHomeMenuController.php @@ -9,6 +9,11 @@ final class PhabricatorHomeMenuController extends PhabricatorHomeController { public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); + if (!$viewer->getIsAdmin()) { + $uri = '/home/menu/personal/item/configure/'; + return id(new AphrontRedirectResponse())->setURI($uri); + } + $menu = id(new PHUIObjectItemListView()) ->setUser($viewer); diff --git a/src/applications/home/controller/PhabricatorHomeMenuItemController.php b/src/applications/home/controller/PhabricatorHomeMenuItemController.php index 01f5233884..5649b947d6 100644 --- a/src/applications/home/controller/PhabricatorHomeMenuItemController.php +++ b/src/applications/home/controller/PhabricatorHomeMenuItemController.php @@ -24,8 +24,7 @@ final class PhabricatorHomeMenuItemController ->setProfileObject($home_app) ->setCustomPHID($custom_phid) ->setMenuType($menu) - ->setController($this) - ->setShowNavigation(false); + ->setController($this); return $engine->buildResponse(); } diff --git a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php index 528edba697..c8c04947a8 100644 --- a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php +++ b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php @@ -30,6 +30,12 @@ final class PhabricatorHomeProfileMenuEngine ->withLaunchable(true) ->execute(); + // Default Home Dashboard + $items[] = $this->newItem() + ->setBuiltinKey(PhabricatorHomeConstants::ITEM_HOME) + ->setMenuItemKey( + PhabricatorHomeProfileMenuItem::MENUITEMKEY); + foreach ($applications as $application) { if (!$application->isPinnedByDefault($viewer)) { continue; @@ -46,6 +52,12 @@ final class PhabricatorHomeProfileMenuEngine ->setMenuItemProperties($properties); } + // Hotlink to More Applications Launcher... + $items[] = $this->newItem() + ->setBuiltinKey(PhabricatorHomeConstants::ITEM_LAUNCHER) + ->setMenuItemKey( + PhabricatorHomeLauncherProfileMenuItem::MENUITEMKEY); + // Single Manage Item, switches URI based on admin/user $items[] = $this->newItem() ->setBuiltinKey(PhabricatorHomeConstants::ITEM_MANAGE) diff --git a/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php new file mode 100644 index 0000000000..c4c93f06ff --- /dev/null +++ b/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php @@ -0,0 +1,68 @@ +getMenuItemProperty('name'); + + if (strlen($name)) { + return $name; + } + + return $this->getDefaultName(); + } + + public function buildEditEngineFields( + PhabricatorProfileMenuItemConfiguration $config) { + return array( + id(new PhabricatorTextEditField()) + ->setKey('name') + ->setLabel(pht('Name')) + ->setPlaceholder($this->getDefaultName()) + ->setValue($config->getMenuItemProperty('name')), + ); + } + + protected function newNavigationMenuItems( + PhabricatorProfileMenuItemConfiguration $config) { + $viewer = $this->getViewer(); + + if ($viewer->isLoggedIn()) { + $name = $this->getDisplayName($config); + $icon = 'fa-globe'; + $href = '/applications/'; + + $item = $this->newItem() + ->setHref($href) + ->setName($name) + ->setIcon($icon); + } + + return array( + $item, + ); + } + +} diff --git a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php index 514cd8e026..fbca14f527 100644 --- a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php @@ -10,7 +10,7 @@ final class PhabricatorHomeManageProfileMenuItem } private function getDefaultName() { - return pht('Manage'); + return pht('Edit Menu'); } public function canHideMenuItem( @@ -50,13 +50,9 @@ final class PhabricatorHomeManageProfileMenuItem $viewer = $this->getViewer(); if ($viewer->isLoggedIn()) { - $admin = $viewer->getIsAdmin(); $name = $this->getDisplayName($config); $icon = 'fa-pencil'; - $href = '/home/menu/personal/item/configure/'; - if ($admin) { - $href = '/home/menu/'; - } + $href = '/home/menu/'; $item = $this->newItem() ->setHref($href) diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php new file mode 100644 index 0000000000..1283ff3d34 --- /dev/null +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -0,0 +1,68 @@ +getMenuItemProperty('name'); + + if (strlen($name)) { + return $name; + } + + return $this->getDefaultName(); + } + + public function buildEditEngineFields( + PhabricatorProfileMenuItemConfiguration $config) { + return array( + id(new PhabricatorTextEditField()) + ->setKey('name') + ->setLabel(pht('Name')) + ->setPlaceholder($this->getDefaultName()) + ->setValue($config->getMenuItemProperty('name')), + ); + } + + protected function newNavigationMenuItems( + PhabricatorProfileMenuItemConfiguration $config) { + $viewer = $this->getViewer(); + + if ($viewer->isLoggedIn()) { + $name = $this->getDisplayName($config); + $icon = 'fa-home'; + $href = '/home/'; + + $item = $this->newItem() + ->setHref($href) + ->setName($name) + ->setIcon($icon); + } + + return array( + $item, + ); + } + +} diff --git a/src/applications/meta/view/PhabricatorApplicationLaunchView.php b/src/applications/meta/view/PhabricatorApplicationLaunchView.php deleted file mode 100644 index 7d98b6d7fa..0000000000 --- a/src/applications/meta/view/PhabricatorApplicationLaunchView.php +++ /dev/null @@ -1,69 +0,0 @@ -application = $application; - return $this; - } - - protected function getTagName() { - return $this->application ? 'a' : 'div'; - } - - protected function getTagAttributes() { - $application = $this->application; - return array( - 'class' => array('phabricator-application-launch-container'), - 'href' => $application ? $application->getBaseURI() : null, - ); - } - - protected function getTagContent() { - $application = $this->application; - - require_celerity_resource('phabricator-application-launch-view-css'); - - $content = array(); - $icon = null; - if ($application) { - $content[] = phutil_tag( - 'span', - array( - 'class' => 'phabricator-application-launch-name', - ), - $application->getName()); - - $content[] = phutil_tag( - 'span', - array( - 'class' => 'phabricator-application-launch-description', - ), - $application->getShortDescription()); - - $classes = array(); - $classes[] = 'phabricator-application-launch-icon'; - - $styles = array(); - $classes[] = $application->getIcon(); - $classes[] = 'phui-icon-view'; - $classes[] = 'phui-font-fa'; - - $icon = phutil_tag( - 'span', - array( - 'class' => implode(' ', $classes), - 'style' => nonempty(implode('; ', $styles), null), - ), - ''); - } - - return array( - $icon, - $content, - ); - } - -} diff --git a/src/applications/people/controller/PhabricatorPeopleProfileController.php b/src/applications/people/controller/PhabricatorPeopleProfileController.php index 1e0a9cbe18..b33bf9c863 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileController.php @@ -60,4 +60,63 @@ abstract class PhabricatorPeopleProfileController return $crumbs; } + public function buildProfileHeader() { + $user = $this->user; + $viewer = $this->getViewer(); + + $profile = $user->loadUserProfile(); + $picture = $user->getProfileImageURI(); + + $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon()); + $profile_title = $profile->getDisplayTitle(); + + $roles = array(); + if ($user->getIsAdmin()) { + $roles[] = pht('Administrator'); + } + if ($user->getIsDisabled()) { + $roles[] = pht('Disabled'); + } + if (!$user->getIsApproved()) { + $roles[] = pht('Not Approved'); + } + if ($user->getIsSystemAgent()) { + $roles[] = pht('Bot'); + } + if ($user->getIsMailingList()) { + $roles[] = pht('Mailing List'); + } + + $tag = null; + if ($roles) { + $tag = id(new PHUITagView()) + ->setName(implode(', ', $roles)) + ->addClass('project-view-header-tag') + ->setType(PHUITagView::TYPE_SHADE); + } + + $header = id(new PHUIHeaderView()) + ->setHeader(array($user->getFullName(), $tag)) + ->setImage($picture) + ->setProfileHeader(true); + + if ($user->getIsDisabled()) { + $header->setStatus('fa-ban', 'red', pht('Disabled')); + } else { + $header->setStatus($profile_icon, 'bluegrey', $profile_title); + } + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $user, + PhabricatorPolicyCapability::CAN_EDIT); + + if ($can_edit) { + $id = $user->getID(); + $header->setImageEditURL($this->getApplicationURI("picture/{$id}/")); + } + + return $header; + } + } diff --git a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php index ba533c041c..84acfe1af9 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php @@ -23,20 +23,7 @@ final class PhabricatorPeopleProfileManageController } $this->setUser($user); - - $profile = $user->loadUserProfile(); - $picture = $user->getProfileImageURI(); - - $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon()); - $profile_icon = id(new PHUIIconView()) - ->setIcon($profile_icon); - $profile_title = $profile->getDisplayTitle(); - - $header = id(new PHUIHeaderView()) - ->setHeader($user->getFullName()) - ->setSubheader(array($profile_icon, $profile_title)) - ->setImage($picture) - ->setProfileHeader(true); + $header = $this->buildProfileHeader(); $curtain = $this->buildCurtain($user); $properties = $this->buildPropertyView($user); @@ -51,8 +38,10 @@ final class PhabricatorPeopleProfileManageController $manage = id(new PHUITwoColumnView()) ->setHeader($header) + ->addClass('project-view-home') ->setCurtain($curtain) ->addPropertySection(pht('Details'), $properties); + require_celerity_resource('project-view-css'); return $this->newPage() ->setTitle( diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php index 17fc67e2f3..34a69c3bfb 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php @@ -23,30 +23,7 @@ final class PhabricatorPeopleProfileViewController } $this->setUser($user); - - $profile = $user->loadUserProfile(); - $picture = $user->getProfileImageURI(); - - $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon()); - $profile_icon = id(new PHUIIconView()) - ->setIcon($profile_icon); - $profile_title = $profile->getDisplayTitle(); - - $header = id(new PHUIHeaderView()) - ->setHeader($user->getFullName()) - ->setSubheader(array($profile_icon, $profile_title)) - ->setImage($picture) - ->setProfileHeader(true); - - $can_edit = PhabricatorPolicyFilter::hasCapability( - $viewer, - $user, - PhabricatorPolicyCapability::CAN_EDIT); - - if ($can_edit) { - $id = $user->getID(); - $header->setImageEditURL($this->getApplicationURI("picture/{$id}/")); - } + $header = $this->buildProfileHeader(); $properties = $this->buildPropertyView($user); $name = $user->getUsername(); @@ -158,12 +135,9 @@ final class PhabricatorPeopleProfileViewController } } else { - $error = id(new PHUIBoxView()) - ->addClass('mlb') - ->appendChild(pht('User does not belong to any projects.')); $list = id(new PHUIInfoView()) ->setSeverity(PHUIInfoView::SEVERITY_NODATA) - ->appendChild($error); + ->appendChild(pht('User does not belong to any projects.')); } $box = id(new PHUIObjectBoxView()) @@ -302,12 +276,9 @@ final class PhabricatorPeopleProfileViewController } } } else { - $error = id(new PHUIBoxView()) - ->addClass('mlb') - ->appendChild(pht('User does not have any badges.')); $flex = id(new PHUIInfoView()) ->setSeverity(PHUIInfoView::SEVERITY_NODATA) - ->appendChild($error); + ->appendChild(pht('User does not have any badges.')); } // Best option? diff --git a/src/applications/project/application/PhabricatorProjectApplication.php b/src/applications/project/application/PhabricatorProjectApplication.php index 8988f0f73a..95f65253a8 100644 --- a/src/applications/project/application/PhabricatorProjectApplication.php +++ b/src/applications/project/application/PhabricatorProjectApplication.php @@ -7,7 +7,7 @@ final class PhabricatorProjectApplication extends PhabricatorApplication { } public function getShortDescription() { - return pht('Get Organized'); + return pht('Projects, Tags, and Teams'); } public function isPinnedByDefault(PhabricatorUser $viewer) { diff --git a/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php b/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php index 020e5626de..b64b4bb7a0 100644 --- a/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php +++ b/src/applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php @@ -68,17 +68,16 @@ final class PhabricatorProjectPointsProfileMenuItem ->setLimit($limit + 1) ->execute(); + $error = array(); if (count($tasks) > $limit) { - return $this->renderError( + $error[] = pht( - 'Too many tasks to compute statistics for (more than %s).', - new PhutilNumber($limit))); + 'Too many tasks (%s).', + new PhutilNumber($limit)); } if (!$tasks) { - return $this->renderError( - pht( - 'This milestone has no tasks yet.')); + $error[] = pht('This milestone has no tasks.'); } $statuses = array(); @@ -111,14 +110,11 @@ final class PhabricatorProjectPointsProfileMenuItem } if ($no_points == count($tasks)) { - return $this->renderError( - pht('No tasks have assigned point values.')); + $error[] = pht('No tasks have points assigned.'); } - if (!$points_total) { - return $this->renderError( - pht('All tasks with assigned point values are worth zero points.')); + $error[] = pht('No tasks have positive points.'); } $label = pht( @@ -158,6 +154,10 @@ final class PhabricatorProjectPointsProfileMenuItem ->setTooltip($tooltip); } + if ($error) { + $bar->setLabel(head($error)); + } + $bar = phutil_tag( 'div', array( @@ -173,20 +173,4 @@ final class PhabricatorProjectPointsProfileMenuItem ); } - private function renderError($message) { - $message = phutil_tag( - 'div', - array( - 'class' => 'phui-profile-menu-error', - ), - $message); - - $item = $this->newItem() - ->appendChild($message); - - return array( - $item, - ); - } - } diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index 1af25a4eef..04aa7c574f 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -254,7 +254,6 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { if ($this->navigation) { return $this->navigation; } - $nav = id(new AphrontSideNavFilterView()) ->setIsProfileMenu(true) ->setBaseURI(new PhutilURI($this->getItemURI(''))); diff --git a/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php index 7d87bc25d4..3697de3403 100644 --- a/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php +++ b/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php @@ -88,6 +88,11 @@ final class PhabricatorApplicationProfileMenuItem ->setName($this->getDisplayName($config)) ->setIcon($app->getIcon()); + // Don't show tooltip if they've set a custom name + if (strlen(($config->getMenuItemProperty('name')))) { + $item->setTooltip($app->getShortDescription()); + } + return array( $item, ); diff --git a/src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php b/src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php deleted file mode 100644 index ac950eade1..0000000000 --- a/src/applications/settings/panel/PhabricatorHomePreferencesSettingsPanel.php +++ /dev/null @@ -1,223 +0,0 @@ -getViewer(); - $preferences = $this->getPreferences(); - - $pinned_key = PhabricatorPinnedApplicationsSetting::SETTINGKEY; - $pinned = $preferences->getSettingValue($pinned_key); - - $apps = id(new PhabricatorApplicationQuery()) - ->setViewer($viewer) - ->withInstalled(true) - ->withUnlisted(false) - ->withLaunchable(true) - ->execute(); - - $app_list = array(); - foreach ($pinned as $app) { - if (isset($apps[$app])) { - $app_list[$app] = $apps[$app]; - } - } - - if ($request->getBool('reset')) { - if ($request->isFormPost()) { - $this->writePinnedApplications($preferences, null); - return id(new AphrontRedirectResponse()) - ->setURI($this->getPanelURI()); - } - - return $this->newDialog() - ->setTitle(pht('Reset Applications')) - ->addHiddenInput('reset', 'true') - ->appendParagraph( - pht('Reset pinned applications to their defaults?')) - ->addSubmitButton(pht('Reset Applications')) - ->addCancelButton($this->getPanelURI()); - } - - - if ($request->getBool('add')) { - $options = array(); - foreach ($apps as $app) { - $options[get_class($app)] = $app->getName(); - } - asort($options); - - unset($options['PhabricatorApplicationsApplication']); - - if ($request->isFormPost()) { - $pins = $request->getArr('pin'); - $phid = head($pins); - $app = id(new PhabricatorApplicationQuery()) - ->setViewer($viewer) - ->withPHIDs(array($phid)) - ->executeOne(); - if ($app) { - $pin = get_class($app); - } else { - // This likely means the user submitted an empty form - // which will cause nothing to happen. - $pin = ''; - } - if (isset($options[$pin]) && !in_array($pin, $pinned)) { - $pinned[] = $pin; - - $this->writePinnedApplications($preferences, $pinned); - - return id(new AphrontRedirectResponse()) - ->setURI($this->getPanelURI()); - } - } - - $options_control = id(new AphrontFormTokenizerControl()) - ->setName('pin') - ->setLabel(pht('Application')) - ->setDatasource(new PhabricatorApplicationDatasource()) - ->setLimit(1); - - $form = id(new AphrontFormView()) - ->setViewer($viewer) - ->addHiddenInput('add', 'true') - ->appendRemarkupInstructions( - pht('Choose an application to pin to your home page.')) - ->appendControl($options_control); - - return $this->newDialog() - ->setWidth(AphrontDialogView::WIDTH_FORM) - ->setTitle(pht('Pin Application')) - ->appendChild($form->buildLayoutView()) - ->addSubmitButton(pht('Pin Application')) - ->addCancelButton($this->getPanelURI()); - } - - $unpin = $request->getStr('unpin'); - if ($unpin) { - $app = idx($apps, $unpin); - if ($app) { - if ($request->isFormPost()) { - $pinned = array_diff($pinned, array($unpin)); - - $this->writePinnedApplications($preferences, $pinned); - - return id(new AphrontRedirectResponse()) - ->setURI($this->getPanelURI()); - } - - return $this->newDialog() - ->setTitle(pht('Unpin Application')) - ->addHiddenInput('unpin', $unpin) - ->appendParagraph( - pht( - 'Unpin the %s application from your home page?', - phutil_tag('strong', array(), $app->getName()))) - ->addSubmitButton(pht('Unpin Application')) - ->addCancelButton($this->getPanelURI()); - } - } - - $order = $request->getStrList('order'); - if ($order && $request->validateCSRF()) { - $this->writePinnedApplications($preferences, $order); - - return id(new AphrontRedirectResponse()) - ->setURI($this->getPanelURI()); - } - - $list_id = celerity_generate_unique_node_id(); - - $list = id(new PHUIObjectItemListView()) - ->setViewer($viewer) - ->setID($list_id) - ->setDrag(true); - - Javelin::initBehavior( - 'reorder-applications', - array( - 'listID' => $list_id, - 'panelURI' => $this->getPanelURI(), - )); - - foreach ($app_list as $key => $application) { - if ($key == 'PhabricatorApplicationsApplication') { - continue; - } - - $icon = $application->getIcon(); - if (!$icon) { - $icon = 'fa-globe'; - } - - $item = id(new PHUIObjectItemView()) - ->setHeader($application->getName()) - ->setImageIcon($icon) - ->setGrippable(true); - - $item->addAction( - id(new PHUIListItemView()) - ->setIcon('fa-times') - ->setHref($this->getPanelURI().'?unpin='.$key) - ->setWorkflow(true)); - - $item->addSigil('pinned-application'); - $item->setMetadata( - array( - 'applicationClass' => $key, - )); - - $list->addItem($item); - } - - $header = id(new PHUIHeaderView()) - ->setHeader(pht('Pinned Applications')) - ->addActionLink( - id(new PHUIButtonView()) - ->setTag('a') - ->setText(pht('Pin Application')) - ->setHref($this->getPanelURI().'?add=true') - ->setWorkflow(true) - ->setIcon('fa-thumb-tack')) - ->addActionLink( - id(new PHUIButtonView()) - ->setTag('a') - ->setText(pht('Reset to Defaults')) - ->setHref($this->getPanelURI().'?reset=true') - ->setWorkflow(true) - ->setIcon('fa-recycle')); - - $box = id(new PHUIObjectBoxView()) - ->setHeader($header) - ->setObjectList($list); - - return $box; - } - - private function writePinnedApplications( - PhabricatorUserPreferences $preferences, - $pinned) { - - $pinned_key = PhabricatorPinnedApplicationsSetting::SETTINGKEY; - $this->writeSetting($preferences, $pinned_key, $pinned); - } - -} diff --git a/src/view/layout/AphrontSideNavFilterView.php b/src/view/layout/AphrontSideNavFilterView.php index 9dd3720646..87c0d920e8 100644 --- a/src/view/layout/AphrontSideNavFilterView.php +++ b/src/view/layout/AphrontSideNavFilterView.php @@ -204,7 +204,6 @@ final class AphrontSideNavFilterView extends AphrontView { private function renderFlexNav() { require_celerity_resource('phabricator-nav-view-css'); - require_celerity_resource('phui-profile-menu-css'); $nav_classes = array(); $nav_classes[] = 'phabricator-nav'; @@ -310,7 +309,7 @@ final class AphrontSideNavFilterView extends AphrontView { $classes[] = 'phui-navigation-shell'; if ($this->getIsProfileMenu()) { - $classes[] = 'phui-profile-menu'; + $classes[] = 'phui-profile-menu phui-basic-nav'; } else { $classes[] = 'phui-basic-nav'; } diff --git a/src/view/phui/PHUIListItemView.php b/src/view/phui/PHUIListItemView.php index 0ca942dd6a..7b6e55a697 100644 --- a/src/view/phui/PHUIListItemView.php +++ b/src/view/phui/PHUIListItemView.php @@ -30,6 +30,7 @@ final class PHUIListItemView extends AphrontTagView { private $hideInApplicationMenu; private $icons = array(); private $openInNewWindow = false; + private $tooltip; public function setOpenInNewWindow($open_in_new_window) { $this->openInNewWindow = $open_in_new_window; @@ -176,6 +177,11 @@ final class PHUIListItemView extends AphrontTagView { return $this->icons; } + public function setTooltip($tooltip) { + $this->tooltip = $tooltip; + return $this; + } + protected function getTagName() { return 'li'; } @@ -185,7 +191,7 @@ final class PHUIListItemView extends AphrontTagView { $classes[] = 'phui-list-item-view'; $classes[] = 'phui-list-item-'.$this->type; - if ($this->icon) { + if ($this->icon || $this->profileImage) { $classes[] = 'phui-list-item-has-icon'; } @@ -230,6 +236,16 @@ final class PHUIListItemView extends AphrontTagView { 'align' => 'E', ); } else { + if ($this->tooltip) { + Javelin::initBehavior('phabricator-tooltips'); + $sigil = 'has-tooltip'; + $meta = array( + 'tip' => $this->tooltip, + 'align' => 'E', + 'size' => 300, + ); + } + $external = null; if ($this->isExternal) { $external = " \xE2\x86\x97"; diff --git a/webroot/rsrc/css/aphront/tooltip.css b/webroot/rsrc/css/aphront/tooltip.css index f2c3151373..49bbfa7309 100644 --- a/webroot/rsrc/css/aphront/tooltip.css +++ b/webroot/rsrc/css/aphront/tooltip.css @@ -5,17 +5,24 @@ .jx-tooltip-container { position: absolute; padding: 5px; + opacity: 1; + transition: opacity 0.25s ease; +} + +.jx-tooltip-hidden { + opacity: 0; } .jx-tooltip-inner { position: relative; - background: rgba({$alphablack}, .9); + background: #000; border-radius: 3px; } .jx-tooltip { color: #f9f9f9; font-size: {$normalfontsize}; + -webkit-font-smoothing: antialiased; padding: 6px 8px; overflow: hidden; white-space: pre-wrap; diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index 2bafa7f8f5..54eb8fc5cd 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -164,10 +164,7 @@ right: 0; position: absolute; font-size: {$normalfontsize}; - border-width: 1px; - border-color: {$lightblueborder}; - border-radius: 3px; - border-style: solid; + border: none; background-color: #fff; height: 28px; padding: 3px 28px 3px 52px; @@ -186,7 +183,6 @@ background: #fff; opacity: 1; color: {$darkbluetext}; - border-color: {$sky}; box-shadow: none; } diff --git a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css b/webroot/rsrc/css/application/base/phabricator-application-launch-view.css deleted file mode 100644 index 714fa849e6..0000000000 --- a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css +++ /dev/null @@ -1,103 +0,0 @@ -/** - * @provides phabricator-application-launch-view-css - */ - - -/* - Application List ---------------------------------------------------------- - - Spacing container for the list of large application buttons. - -*/ - - -.application-tile-group { - overflow: hidden; -} - - -/* - Application Launch Button ------------------------------------------------- - - Spacing container for the list of large application buttons. - -*/ - -a.phabricator-application-launch-container, -div.phabricator-application-launch-container { - display: block; - float: left; - overflow: hidden; - position: relative; - text-decoration: none; - width: 100%; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - padding: 4px 0; -} - -.device-phone div.phabricator-application-launch-container { - display: none; -} - -.phabricator-application-launch-icon { - position: absolute; - width: 38px; - height: 18px; - top: 6px; - left: 0; - font-size: 18px; - text-align: center; - vertical-align: bottom; - color: {$darkbluetext}; - text-shadow: {$whitetextshadow}; -} - -.device-desktop a.phabricator-application-launch-container:hover { - background-color: rgba({$alphablack},.07); - text-decoration: none; -} - -.device-desktop a.phabricator-application-launch-container:hover - .phabricator-application-launch-icon { - color: {$sky}; -} - -.phabricator-application-launch-name { - display: block; - font-weight: bold; - color: {$darkbluetext}; - font-size: {$normalfontsize}; - margin-left: 36px; -} - -.phabricator-application-launch-description { - color: {$bluetext}; - font-size: {$smallestfontsize}; - margin-left: 36px; - text-overflow: ellipsis; - width: 150px; - overflow: hidden; - white-space: nowrap; - display: inline-block; - padding: 2px 0 0 0; -} - -.phabricator-application-launch-attention { - position: absolute; - top: 8px; - right: 8px; - color: {$darkbluetext}; - font-weight: bold; - font-size: {$smallerfontsize}; -} - -.phabricator-application-attention-count { - color: {$fire}; -} - -a.phabricator-application-launch-phone-only { - display: none; -} - -.device-phone a.phabricator-application-launch-phone-only { - display: block; -} diff --git a/webroot/rsrc/css/application/base/phui-theme.css b/webroot/rsrc/css/application/base/phui-theme.css index 5313f2099b..d2a2c85ac7 100644 --- a/webroot/rsrc/css/application/base/phui-theme.css +++ b/webroot/rsrc/css/application/base/phui-theme.css @@ -5,7 +5,7 @@ /*--- Header Colors ----------------------------------------------------------*/ .phui-theme-blindigo .phabricator-main-menu-background { - background: #41506e; + background: #4a5f88; } .phui-theme-dark .phabricator-main-menu-background { diff --git a/webroot/rsrc/css/application/search/application-search-view.css b/webroot/rsrc/css/application/search/application-search-view.css index 1320df9c0f..aa1b5c4f97 100644 --- a/webroot/rsrc/css/application/search/application-search-view.css +++ b/webroot/rsrc/css/application/search/application-search-view.css @@ -6,6 +6,10 @@ background-color: #fff; } +.application-search-view .phui-crumbs-view { + background-color: #fff; +} + .application-search-view .application-search-results.phui-object-box { margin: 0; padding: 0 16px 24px; @@ -17,7 +21,7 @@ } .application-search-view .application-search-results .phui-profile-header { - padding: 16px 8px; + padding: 22px 8px; border-bottom: 1px solid {$thinblueborder}; } diff --git a/webroot/rsrc/css/phui/calendar/phui-calendar-list.css b/webroot/rsrc/css/phui/calendar/phui-calendar-list.css index d5a4a89dc9..f7d5e24683 100644 --- a/webroot/rsrc/css/phui/calendar/phui-calendar-list.css +++ b/webroot/rsrc/css/phui/calendar/phui-calendar-list.css @@ -66,7 +66,7 @@ .phui-calendar-list-item-empty { color: {$lightgreytext}; - padding: 0 12px; + padding: 0; font-style: italic; } diff --git a/webroot/rsrc/css/phui/phui-basic-nav-view.css b/webroot/rsrc/css/phui/phui-basic-nav-view.css index 30647e3ece..b1db0d4010 100644 --- a/webroot/rsrc/css/phui/phui-basic-nav-view.css +++ b/webroot/rsrc/css/phui/phui-basic-nav-view.css @@ -19,26 +19,26 @@ display: table-cell; position: relative; vertical-align: top; - width: {$menu.profile.width}; - max-width: {$menu.profile.width}; margin-top: 0; overflow: hidden; } -.phui-basic-nav.phui-navigation-shell .phabricator-nav-local { - width: 205px; - padding-top: 4px; - padding-right: 8px; +.phabricator-home.device-phone .phabricator-nav-content { + display: none; } -.phui-basic-nav .phabricator-side-menu { - background-color: {$page.sidenav}; +.phabricator-home .phui-basic-nav .phabricator-side-menu { + background: transparent; +} + +.phui-basic-nav.phui-navigation-shell .phabricator-nav-local { + width: 205px; + padding-top: 12px; + padding-right: 8px; } .phui-two-column-view .phui-basic-nav.phui-navigation-shell .phabricator-nav-local { - width: {$menu.profile.width}; - max-width: {$menu.profile.width}; padding-right: 0; padding-top: 0; } @@ -55,13 +55,12 @@ display: block; white-space: nowrap; text-decoration: none; - font-size: 13px; -webkit-font-smoothing: antialiased; } .phui-basic-nav .phabricator-side-menu .phui-list-item-href { display: block; - padding: 6px 8px 6px 24px; + padding: 6px 8px 6px 20px; color: {$darkbluetext}; border-top-right-radius: 3px; border-bottom-right-radius: 3px; @@ -69,10 +68,30 @@ text-overflow: ellipsis } +.phui-basic-nav .phabricator-side-menu .phui-list-item-has-icon + .phui-list-item-href { + padding-left: 12px; + } + .phui-basic-nav .phabricator-side-menu .phui-list-item-icon { - margin-left: -12px; + margin-left: -4px; text-align: center; - width: 24px; + width: 30px; +} + +.phui-basic-nav .phabricator-side-menu .phui-divider { + border-bottom: 1px solid rgba({$alphablack},.08); + margin: 0 0 8px 8px; + padding: 8px 0 0 0; +} + +.phui-basic-nav .phabricator-side-menu .phui-list-item-icon.phuihead-small { + display: inline-block; + height: 16px; + width: 16px; + border-radius: 3px; + background-size: 100%; + margin: -2px 7px -2px 3px; } .phui-basic-nav .phabricator-side-menu .phui-list-item-selected { @@ -91,7 +110,7 @@ .phui-basic-nav .phabricator-side-menu .phui-list-item-selected .phui-list-item-href { - padding-left: 20px; + margin-left: -4px; } .phui-basic-nav .phabricator-side-menu .phui-list-item-type-label { @@ -108,3 +127,12 @@ text-decoration: none; background-color: rgba({$alphablack},.07); } + +.phui-basic-nav .phabricator-side-menu .phui-list-item-type-link + + .phui-list-item-type-label { + margin-top: 12px; +} + +.phui-basic-nav .phui-profile-segment-bar { + padding: 4px 4px 8px 12px; +} diff --git a/webroot/rsrc/css/phui/phui-box.css b/webroot/rsrc/css/phui/phui-box.css index ef0816f826..9dc99c6f8c 100644 --- a/webroot/rsrc/css/phui/phui-box.css +++ b/webroot/rsrc/css/phui/phui-box.css @@ -49,10 +49,11 @@ .phui-object-box.phui-box-blue div.phui-info-severity-nodata, .phui-object-box.phui-box-grey div.phui-info-severity-nodata { - background: transparent; - padding: 20px 4px 24px; + background: #fff; + padding: 32px 0; text-align: center; border: none; + margin: 0; color: {$greytext}; } diff --git a/webroot/rsrc/css/phui/phui-profile-menu.css b/webroot/rsrc/css/phui/phui-profile-menu.css deleted file mode 100644 index 6f8934dd39..0000000000 --- a/webroot/rsrc/css/phui/phui-profile-menu.css +++ /dev/null @@ -1,162 +0,0 @@ -/** - * @provides phui-profile-menu-css - */ - -.device-desktop .phui-profile-menu .phabricator-nav-local { - width: {$menu.profile.width.collapsed}; - max-width: {$menu.profile.width.collapsed}; -} - -.device-desktop .phui-profile-menu .phabricator-nav-content { - display: table-cell; - margin-left: 0; -} - -.phui-profile-menu .phui-basic-nav { - width: 205px; -} - -.phui-profile-menu .phabricator-side-menu { - background: #dee0e7; - width: 240px; -} - -.phabricator-side-menu .phui-profile-menu-footer-1 { - background: #dee0e7; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-view { - position: relative; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-href { - display: block; - text-decoration: none; - padding: 0 8px 0 48px; - height: 48px; - font-size: {$biggerfontsize}; - -webkit-font-smoothing: antialiased; - line-height: 22px; - overflow: hidden; - color: {$darkbluetext}; - text-overflow: ellipsis; - line-height: 48px; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-icon, -.phui-profile-menu .phabricator-side-menu - .phui-list-item-href .phui-list-item-icon { - position: absolute; - top: 12px; - left: 13px; - font-size: 24px; - width: 24px; - height: 24px; - line-height: 24px; - text-align: center; - color: {$darkbluetext}; - background-size: 100%; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-href { - text-align: center; - padding: 42px 4px 14px; - line-height: 14px; - height: auto; - font-size: {$smallerfontsize}; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-name { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-icon, -.phui-profile-menu .phabricator-side-menu .phui-list-item-href - .phui-list-item-icon { - top: 14px; - left: 32px; -} - -.phui-profile-menu .phabricator-side-menu - .phui-list-item-disabled - .phui-list-item-icon { - color: {$lightgreytext}; -} - -.phui-profile-menu .phabricator-side-menu .phui-icon-view { - border-radius: 3px; -} - -.device-desktop .phui-profile-menu .phabricator-side-menu - .phui-list-item-href:hover { - background-color: rgba({$alphablack},0.05); -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-selected - .phui-list-item-href { - background-color: rgba({$alphablack},0.1); -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-selected - .phui-list-item-href:hover { - background-color: rgba({$alphablack},0.15); -} - -.phui-profile-menu .phabricator-side-menu .phui-divider { - margin: 4px 0; - border-bottom: 1px solid rgba({$alphablack}, 0.2); -} - -.phui-profile-menu .phabricator-side-menu .phui-motivator { - white-space: normal; - padding: 18px 15px; - font-size: 12px; - color: {$darkbluetext}; -} - -.phui-profile-menu .phabricator-side-menu .phui-motivator .phui-icon-view { - position: static; - font-size: 12px; - color: {$darkbluetext}; -} - -.phui-profile-menu .phabricator-side-menu .phui-profile-menu-error { - color: rgba({$alphawhite}, 0.5); - font-size: {$smallerfontsize}; - padding: 16px; -} - -.phui-profile-menu .phabricator-side-menu .phui-profile-menu-error { - padding: 16px 8px; - overflow: hidden; - text-overflow: ellipsis; -} - -.phui-profile-menu .phabricator-side-menu .phui-list-item-disabled - .phui-list-item-href, -.phui-profile-menu .phui-list-sidenav .phui-list-item-disabled - .phui-list-item-href { - color: rgba({$lightgreytext}); -} - -.phui-profile-menu .phabricator-side-menu .phui-profile-segment-bar { - color: {$darkbluetext}; - font-size: {$smallerfontsize}; - -webkit-font-smoothing: antialiased; - padding: 8px 12px 16px; -} - -.phui-profile-menu .phabricator-side-menu .phui-profile-segment-bar { - padding: 8px 8px 16px; -} - -.phui-profile-menu .phabricator-side-menu .phui-profile-menu-spacer { - box-sizing: border-box; - height: {$menu.profile.item.height}; -} - -!print .phui-profile-menu .phabricator-side-menu { - display: none; -} diff --git a/webroot/rsrc/css/phui/phui-segment-bar-view.css b/webroot/rsrc/css/phui/phui-segment-bar-view.css index 92665165ba..b3ce7677e3 100644 --- a/webroot/rsrc/css/phui/phui-segment-bar-view.css +++ b/webroot/rsrc/css/phui/phui-segment-bar-view.css @@ -7,14 +7,14 @@ margin-bottom: 4px; } -.phui-profile-menu-collapsed .phui-segment-bar-label { - width: 74px; +.phui-basic-nav .phui-segment-bar-label { + width: 180px; overflow: hidden; text-overflow: ellipsis; } .phui-segment-bar-segments { - background: {$lightgreybackground}; + background: rgba({$alphablue}, .1); border-radius: 4px; position: relative; overflow: hidden; diff --git a/webroot/rsrc/css/phui/workboards/phui-workboard-color.css b/webroot/rsrc/css/phui/workboards/phui-workboard-color.css index 13c9847af9..b16184e34b 100644 --- a/webroot/rsrc/css/phui/workboards/phui-workboard-color.css +++ b/webroot/rsrc/css/phui/workboards/phui-workboard-color.css @@ -60,6 +60,10 @@ body.phui-workboard-color .phabricator-side-menu .phui-profile-menu-footer-1 { color: rgba({$alphawhite},.8); } +.phui-workboard-color .phui-segment-bar-label { + color: rgba({$alphawhite},.8); +} + /* Gradients */ .phui-workboard-gradient-red { diff --git a/webroot/rsrc/css/phui/workboards/phui-workboard.css b/webroot/rsrc/css/phui/workboards/phui-workboard.css index 43fd3a85e4..10450ad836 100644 --- a/webroot/rsrc/css/phui/workboards/phui-workboard.css +++ b/webroot/rsrc/css/phui/workboards/phui-workboard.css @@ -32,7 +32,7 @@ } .device-desktop .project-board-wrapper .phui-workboard-view-shadow { - left: {$menu.profile.width.collapsed}; + left: 212px; } !print .project-board-wrapper .phui-workboard-view-shadow { diff --git a/webroot/rsrc/js/core/ToolTip.js b/webroot/rsrc/js/core/ToolTip.js index 0d09a31eba..01bfc4935d 100644 --- a/webroot/rsrc/js/core/ToolTip.js +++ b/webroot/rsrc/js/core/ToolTip.js @@ -46,7 +46,7 @@ JX.install('Tooltip', { var node = JX.$N( 'div', - { className: 'jx-tooltip-container' }, + { className: 'jx-tooltip-container jx-tooltip-hidden' }, node_inner); node.style.maxWidth = scale + 'px'; @@ -61,6 +61,7 @@ JX.install('Tooltip', { // Jump through some hoops trying to auto-position the tooltip var pos = self._getSmartPosition(align, root, node); pos.setPos(node); + JX.DOM.alterClass(node, 'jx-tooltip-hidden', false); }, _getSmartPosition: function (align, root, node) { diff --git a/webroot/rsrc/js/core/behavior-tooltip.js b/webroot/rsrc/js/core/behavior-tooltip.js index 8b9b8d4f23..336a5b28d0 100644 --- a/webroot/rsrc/js/core/behavior-tooltip.js +++ b/webroot/rsrc/js/core/behavior-tooltip.js @@ -26,7 +26,7 @@ JX.behavior('phabricator-tooltips', function() { JX.Tooltip.show( e.getNode('has-tooltip'), - data.size || 120, + data.size || 160, data.align || 'N', data.tip); }); From 49b03c03531f69cc45cc05360641e29965d69c07 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 30 Jan 2017 06:27:12 -0800 Subject: [PATCH 10/49] Improve tooltip behavior for Application menu items Summary: Ref T12174. - Fix text antialiasing pop-in at the end of the animation in Safari. - Fix flickery animation replay when mousing inside a tooltip element, or rapidly switching between tooltip elements. - To accomplish this: don't play the animation if the last tip was hidden less than 500ms ago. Test Plan: - Viewed a tooltip in Safari. - Waved cursor wildly over application items, both left-right (within an item) and up-down (between items). Tooltips appeared stable and non-flickery in all cases. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17272 --- resources/celerity/map.php | 24 ++++++++++++------------ webroot/rsrc/css/aphront/tooltip.css | 21 +++++++++++++++++++-- webroot/rsrc/js/core/ToolTip.js | 27 +++++++++++++++++++++++++-- 3 files changed, 56 insertions(+), 16 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 069bf17019..3208a994a7 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,8 +9,8 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => '25cda14d', - 'core.pkg.js' => 'f1e0e26f', + 'core.pkg.css' => '7cd6d9cb', + 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', 'differential.pkg.js' => 'ddfeb49b', @@ -29,7 +29,7 @@ return array( 'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9', 'rsrc/css/aphront/table-view.css' => '213a5981', 'rsrc/css/aphront/tokenizer.css' => '9a8cb501', - 'rsrc/css/aphront/tooltip.css' => '3f325821', + 'rsrc/css/aphront/tooltip.css' => '8f9faa9a', 'rsrc/css/aphront/typeahead-browse.css' => '8904346a', 'rsrc/css/aphront/typeahead.css' => 'd4f16145', 'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af', @@ -486,7 +486,7 @@ return array( 'rsrc/js/core/ShapedRequest.js' => '7cbe244b', 'rsrc/js/core/TextAreaUtils.js' => '320810c8', 'rsrc/js/core/Title.js' => '485aaa6c', - 'rsrc/js/core/ToolTip.js' => 'd02f7181', + 'rsrc/js/core/ToolTip.js' => '8fadb715', 'rsrc/js/core/behavior-active-nav.js' => 'e379b58e', 'rsrc/js/core/behavior-audio-source.js' => '59b251eb', 'rsrc/js/core/behavior-autofocus.js' => '7319e029', @@ -553,7 +553,7 @@ return array( 'aphront-panel-view-css' => '8427b78d', 'aphront-table-view-css' => '213a5981', 'aphront-tokenizer-control-css' => '9a8cb501', - 'aphront-tooltip-css' => '3f325821', + 'aphront-tooltip-css' => '8f9faa9a', 'aphront-typeahead-control-css' => 'd4f16145', 'application-search-view-css' => '20ae9d85', 'auth-css' => '0877ed6e', @@ -811,7 +811,7 @@ return array( 'phabricator-standard-page-view' => '894d8a25', 'phabricator-textareautils' => '320810c8', 'phabricator-title' => '485aaa6c', - 'phabricator-tooltip' => 'd02f7181', + 'phabricator-tooltip' => '8fadb715', 'phabricator-ui-example-css' => '528b19de', 'phabricator-uiexample-javelin-view' => 'd4a14807', 'phabricator-uiexample-reactor-button' => 'd19198c8', @@ -1602,6 +1602,12 @@ return array( 'javelin-stratcom', 'javelin-util', ), + '8fadb715' => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-vector', + ), '8ff5e24c' => array( 'javelin-behavior', 'javelin-stratcom', @@ -2016,12 +2022,6 @@ return array( 'cd2b9b77' => array( 'phui-oi-list-view-css', ), - 'd02f7181' => array( - 'javelin-install', - 'javelin-util', - 'javelin-dom', - 'javelin-vector', - ), 'd0c516d5' => array( 'javelin-behavior', 'javelin-dom', diff --git a/webroot/rsrc/css/aphront/tooltip.css b/webroot/rsrc/css/aphront/tooltip.css index 49bbfa7309..36ce093eff 100644 --- a/webroot/rsrc/css/aphront/tooltip.css +++ b/webroot/rsrc/css/aphront/tooltip.css @@ -5,8 +5,25 @@ .jx-tooltip-container { position: absolute; padding: 5px; - opacity: 1; - transition: opacity 0.25s ease; +} + +.jx-tooltip-appear { + animation: 0.5s tooltip-appear; + + /* Without this, there's a nasty pop-in effect at the end of the animation + when Safari changes font smoothing. The text becomes visibly more bold + after the last frame of animation. */ + -webkit-font-smoothing: subpixel-antialiased; +} + +@keyframes tooltip-appear { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } } .jx-tooltip-hidden { diff --git a/webroot/rsrc/js/core/ToolTip.js b/webroot/rsrc/js/core/ToolTip.js index 01bfc4935d..6fef44ab55 100644 --- a/webroot/rsrc/js/core/ToolTip.js +++ b/webroot/rsrc/js/core/ToolTip.js @@ -11,6 +11,7 @@ JX.install('Tooltip', { statics: { _node: null, + _last: null, _lock: 0, show : function(root, scale, align, content) { @@ -46,7 +47,7 @@ JX.install('Tooltip', { var node = JX.$N( 'div', - { className: 'jx-tooltip-container jx-tooltip-hidden' }, + { className: 'jx-tooltip-container' }, node_inner); node.style.maxWidth = scale + 'px'; @@ -61,7 +62,28 @@ JX.install('Tooltip', { // Jump through some hoops trying to auto-position the tooltip var pos = self._getSmartPosition(align, root, node); pos.setPos(node); - JX.DOM.alterClass(node, 'jx-tooltip-hidden', false); + + // Animate the tip if we haven't shown any tips recently. If we are + // already showing a tip (or hid one very recently) just show the tip + // immediately. This makes hunting for a particular item by mousing + // through tips smoother: you only have to sit through the animation + // once, at the beginning. + + var is_recent = false; + + var last_tip = self._last; + if (last_tip) { + // If we recently hid a tip, compute how many milliseconds ago we + // hid it. + var last_tip_age = (new Date().getTime() - self._last); + if (last_tip_age < 500) { + is_recent = true; + } + } + + if (!is_recent) { + JX.DOM.alterClass(node, 'jx-tooltip-appear', true); + } }, _getSmartPosition: function (align, root, node) { @@ -194,6 +216,7 @@ JX.install('Tooltip', { if (this._node) { JX.DOM.remove(this._node); this._node = null; + this._last = new Date().getTime(); } }, From aca0f642a3bdaa602bde05abfe94f9d90cf7b06e Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 08:52:38 -0800 Subject: [PATCH 11/49] Add a "bin/audit synchronize" command Summary: Ref T10978. This is just a maintenance convenience script. It can fix up overall commit state after you `bin/audit delete` stuff or nuke a bunch of stuff from the database, as I did on `secure.phabricator.com`. Test Plan: Ran `bin/audit synchronize`, and `bin/audit update-owners`. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17271 --- src/__phutil_library_map__.php | 2 + .../PhabricatorAuditManagementWorkflow.php | 88 ++++++++++++++++++- ...atorAuditSynchronizeManagementWorkflow.php | 58 ++++++++++++ ...torAuditUpdateOwnersManagementWorkflow.php | 72 ++------------- src/docs/user/userguide/audit.diviner | 40 +++++++++ 5 files changed, 192 insertions(+), 68 deletions(-) create mode 100644 src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index de2fa8e207..5cce1346e9 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1887,6 +1887,7 @@ phutil_register_library_map(array( 'PhabricatorAuditManagementWorkflow' => 'applications/audit/management/PhabricatorAuditManagementWorkflow.php', 'PhabricatorAuditReplyHandler' => 'applications/audit/mail/PhabricatorAuditReplyHandler.php', 'PhabricatorAuditStatusConstants' => 'applications/audit/constants/PhabricatorAuditStatusConstants.php', + 'PhabricatorAuditSynchronizeManagementWorkflow' => 'applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php', 'PhabricatorAuditTransaction' => 'applications/audit/storage/PhabricatorAuditTransaction.php', 'PhabricatorAuditTransactionComment' => 'applications/audit/storage/PhabricatorAuditTransactionComment.php', 'PhabricatorAuditTransactionQuery' => 'applications/audit/query/PhabricatorAuditTransactionQuery.php', @@ -6783,6 +6784,7 @@ phutil_register_library_map(array( 'PhabricatorAuditManagementWorkflow' => 'PhabricatorManagementWorkflow', 'PhabricatorAuditReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', 'PhabricatorAuditStatusConstants' => 'Phobject', + 'PhabricatorAuditSynchronizeManagementWorkflow' => 'PhabricatorAuditManagementWorkflow', 'PhabricatorAuditTransaction' => 'PhabricatorModularTransaction', 'PhabricatorAuditTransactionComment' => 'PhabricatorApplicationTransactionComment', 'PhabricatorAuditTransactionQuery' => 'PhabricatorApplicationTransactionQuery', diff --git a/src/applications/audit/management/PhabricatorAuditManagementWorkflow.php b/src/applications/audit/management/PhabricatorAuditManagementWorkflow.php index a55a58374d..6112a38e1d 100644 --- a/src/applications/audit/management/PhabricatorAuditManagementWorkflow.php +++ b/src/applications/audit/management/PhabricatorAuditManagementWorkflow.php @@ -1,4 +1,90 @@ 'all', + 'help' => pht('Update all commits in all repositories.'), + ), + array( + 'name' => 'objects', + 'wildcard' => true, + 'help' => pht('Update named commits and repositories.'), + ), + ); + } + + protected function loadCommitsWithConstraints(PhutilArgumentParser $args) { + $viewer = $this->getViewer(); + + $all = $args->getArg('all'); + $names = $args->getArg('objects'); + + if (!$names && !$all) { + throw new PhutilArgumentUsageException( + pht( + 'Specify "--all" to affect everything, or a list of specific '. + 'commits or repositories to affect.')); + } else if ($names && $all) { + throw new PhutilArgumentUsageException( + pht( + 'Specify either a list of objects to affect or "--all", but not '. + 'both.')); + } + + if ($all) { + $objects = new LiskMigrationIterator(new PhabricatorRepository()); + } else { + $query = id(new PhabricatorObjectQuery()) + ->setViewer($viewer) + ->withNames($names); + + $query->execute(); + + $objects = array(); + + $results = $query->getNamedResults(); + foreach ($names as $name) { + if (!isset($results[$name])) { + throw new PhutilArgumentUsageException( + pht( + 'Object "%s" is not a valid object.', + $name)); + } + + $object = $results[$name]; + if (!($object instanceof PhabricatorRepository) && + !($object instanceof PhabricatorRepositoryCommit)) { + throw new PhutilArgumentUsageException( + pht( + 'Object "%s" is not a valid repository or commit.', + $name)); + } + + $objects[] = $object; + } + } + + return $objects; + } + + protected function loadCommitsForConstraintObject($object) { + $viewer = $this->getViewer(); + + if ($object instanceof PhabricatorRepository) { + $commits = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withRepository($object) + ->execute(); + } else { + $commits = array($object); + } + + return $commits; + } + +} diff --git a/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php b/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php new file mode 100644 index 0000000000..bc16634a89 --- /dev/null +++ b/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php @@ -0,0 +1,58 @@ +setName('synchronize') + ->setExamples('**synchronize** ...') + ->setSynopsis(pht('Update audit status for commits.')) + ->setArguments( + array_merge( + $this->getCommitConstraintArguments(), + array())); + } + + public function execute(PhutilArgumentParser $args) { + $viewer = $this->getViewer(); + $objects = $this->loadCommitsWithConstraints($args); + + foreach ($objects as $object) { + $commits = $this->loadCommitsForConstraintObject($object); + foreach ($commits as $commit) { + $commit = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withPHIDs(array($commit->getPHID())) + ->needAuditRequests(true) + ->executeOne(); + if (!$commit) { + continue; + } + + $old_status = $commit->getAuditStatus(); + $commit->updateAuditStatus($commit->getAudits()); + $new_status = $commit->getAuditStatus(); + + if ($old_status == $new_status) { + echo tsprintf( + "%s\n", + pht( + 'No changes for "%s".', + $commit->getDisplayName())); + } else { + echo tsprintf( + "%s\n", + pht( + 'Updated "%s": "%s" -> "%s".', + $commit->getDisplayName(), + PhabricatorAuditCommitStatusConstants::getStatusName( + $old_status), + PhabricatorAuditCommitStatusConstants::getStatusName( + $new_status))); + } + } + } + } + +} diff --git a/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php b/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php index d0bb7e1039..883bcd4065 100644 --- a/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php +++ b/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php @@ -9,79 +9,17 @@ final class PhabricatorAuditUpdateOwnersManagementWorkflow ->setExamples('**update-owners** ...') ->setSynopsis(pht('Update package relationships for commits.')) ->setArguments( - array( - array( - 'name' => 'all', - 'help' => pht('Update all commits in all repositories.'), - ), - array( - 'name' => 'objects', - 'wildcard' => true, - 'help' => pht('Update named commits and repositories.'), - ), - )); + array_merge( + $this->getCommitConstraintArguments(), + array())); } public function execute(PhutilArgumentParser $args) { $viewer = $this->getViewer(); - - $all = $args->getArg('all'); - $names = $args->getArg('objects'); - - if (!$names && !$all) { - throw new PhutilArgumentUsageException( - pht( - 'Specify "--all" to update everything, or a list of specific '. - 'commits or repositories to update.')); - } else if ($names && $all) { - throw new PhutilArgumentUsageException( - pht( - 'Specify either a list of objects to update or "--all", but not '. - 'both.')); - } - - if ($all) { - $objects = new LiskMigrationIterator(new PhabricatorRepository()); - } else { - $query = id(new PhabricatorObjectQuery()) - ->setViewer($viewer) - ->withNames($names); - - $query->execute(); - - $objects = array(); - - $results = $query->getNamedResults(); - foreach ($names as $name) { - if (!isset($results[$name])) { - throw new PhutilArgumentUsageException( - pht( - 'Object "%s" is not a valid object.', - $name)); - } - - $object = $results[$name]; - if (!($object instanceof PhabricatorRepository) && - !($object instanceof PhabricatorRepositoryCommit)) { - throw new PhutilArgumentUsageException( - pht( - 'Object "%s" is not a valid repository or commit.', - $name)); - } - - $objects[] = $object; - } - } + $objects = $this->loadCommitsWithConstraints($args); foreach ($objects as $object) { - if ($object instanceof PhabricatorRepository) { - $commits = id(new DiffusionCommitQuery()) - ->setViewer($viewer) - ->withRepository($object) - ->execute(); - } else { - $commits = array($object); - } + $commits = $this->loadCommitsForConstraintObject($object); foreach ($commits as $commit) { $repository = $commit->getRepository(); diff --git a/src/docs/user/userguide/audit.diviner b/src/docs/user/userguide/audit.diviner index de6878ed53..806d37adab 100644 --- a/src/docs/user/userguide/audit.diviner +++ b/src/docs/user/userguide/audit.diviner @@ -156,6 +156,46 @@ Audit Tips - Press "?" to view keyboard shortcuts. +Audit Maintenance +================= + +The `bin/audit` command allows you to perform several maintenance operations. +Get more information about a command by running: + +``` +phabricator/ $ ./bin/audit help +``` + +Supported operations are: + +**Delete Audits**: Delete audits that match certain parameters with +`bin/audit delete`. + +You can use this command to forcibly delete requests which may have triggered +incorrectly (for example, because a package or Herald rule was configured in an +overbroad way). + +After deleting audits, you may want to run `bin/audit synchronize` to +synchronize audit state. + +**Synchronize Audit State**: Synchronize the audit state of commits to the +current open audit requests with `bin/audit synchronize`. + +Normally, overall audit state is automatically kept up to date as changes are +made to an audit. However, if you delete audits or manually update the database +to make changes to audit request state, the state of corresponding commits may +no longer be correct. + +This command will update commits so their overall audit state reflects the +cumulative state of their actual audit requests. + +**Update Owners Package Membership**: Update which Owners packages commits +belong to with `bin/audit update-owners`. + +Normally, commits are automatically associated with packages when they are +imported. You can use this command to manually rebuild this association if +you run into problems with it. + Next Steps ========== From bd99a2b81ea5a181553539dc5d02bada374bad8d Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 06:16:40 -0800 Subject: [PATCH 12/49] Integrate Harbormaster with Buildkite Summary: Ref T12173. This might need some additional work but the basics seem like they're in good shape. Test Plan: - Buildkite is "bring your own hardware", so you need to launch a host to test anything. - Launched a host in AWS. - Configured Buildkite to use that host to run builds. - Added a Buildkite build step to a new Harbormaster build plan. - Used `bin/harbormaster build ...` to run the plan. - Saw buildkite execute builds and report status back to Harbormaster {F2553076} {F2553077} Reviewers: chad Reviewed By: chad Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam Maniphest Tasks: T12173 Differential Revision: https://secure.phabricator.com/D17270 --- src/__phutil_library_map__.php | 4 + .../PhabricatorHarbormasterApplication.php | 1 + .../HarbormasterBuildkiteHookController.php | 111 +++++++++ ...masterBuildkiteBuildStepImplementation.php | 210 ++++++++++++++++++ 4 files changed, 326 insertions(+) create mode 100644 src/applications/harbormaster/controller/HarbormasterBuildkiteHookController.php create mode 100644 src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 5cce1346e9..df3772dae9 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1210,6 +1210,8 @@ phutil_register_library_map(array( 'HarbormasterBuildableTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildableTransactionEditor.php', 'HarbormasterBuildableTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildableTransactionQuery.php', 'HarbormasterBuildableViewController' => 'applications/harbormaster/controller/HarbormasterBuildableViewController.php', + 'HarbormasterBuildkiteBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php', + 'HarbormasterBuildkiteHookController' => 'applications/harbormaster/controller/HarbormasterBuildkiteHookController.php', 'HarbormasterBuiltinBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuiltinBuildStepGroup.php', 'HarbormasterCircleCIBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterCircleCIBuildStepImplementation.php', 'HarbormasterCircleCIBuildableInterface' => 'applications/harbormaster/interface/HarbormasterCircleCIBuildableInterface.php', @@ -6017,6 +6019,8 @@ phutil_register_library_map(array( 'HarbormasterBuildableTransactionEditor' => 'PhabricatorApplicationTransactionEditor', 'HarbormasterBuildableTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'HarbormasterBuildableViewController' => 'HarbormasterController', + 'HarbormasterBuildkiteBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterBuildkiteHookController' => 'HarbormasterController', 'HarbormasterBuiltinBuildStepGroup' => 'HarbormasterBuildStepGroup', 'HarbormasterCircleCIBuildStepImplementation' => 'HarbormasterBuildStepImplementation', 'HarbormasterCircleCIHookController' => 'HarbormasterController', diff --git a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php index ed7104965a..ed164b2d3b 100644 --- a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php +++ b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php @@ -94,6 +94,7 @@ final class PhabricatorHarbormasterApplication extends PhabricatorApplication { ), 'hook/' => array( 'circleci/' => 'HarbormasterCircleCIHookController', + 'buildkite/' => 'HarbormasterBuildkiteHookController', ), ), ); diff --git a/src/applications/harbormaster/controller/HarbormasterBuildkiteHookController.php b/src/applications/harbormaster/controller/HarbormasterBuildkiteHookController.php new file mode 100644 index 0000000000..df50ea9126 --- /dev/null +++ b/src/applications/harbormaster/controller/HarbormasterBuildkiteHookController.php @@ -0,0 +1,111 @@ +newHookResponse(pht('OK: Ignored event.')); + } + + $build = idx($body, 'build'); + if (!is_array($build)) { + throw new Exception( + pht( + 'Expected "%s" property to contain a dictionary.', + 'build')); + } + + $meta_data = idx($build, 'meta_data'); + if (!is_array($meta_data)) { + throw new Exception( + pht( + 'Expected "%s" property to contain a dictionary.', + 'build.meta_data')); + } + + $target_phid = idx($meta_data, 'buildTargetPHID'); + if (!$target_phid) { + return $this->newHookResponse(pht('OK: No Harbormaster target PHID.')); + } + + $viewer = PhabricatorUser::getOmnipotentUser(); + $target = id(new HarbormasterBuildTargetQuery()) + ->setViewer($viewer) + ->withPHIDs(array($target_phid)) + ->needBuildSteps(true) + ->executeOne(); + if (!$target) { + throw new Exception( + pht( + 'Harbormaster build target "%s" does not exist.', + $target_phid)); + } + + $step = $target->getBuildStep(); + $impl = $step->getStepImplementation(); + if (!($impl instanceof HarbormasterBuildkiteBuildStepImplementation)) { + throw new Exception( + pht( + 'Harbormaster build target "%s" is not a Buildkite build step. '. + 'Only Buildkite steps may be updated via the Buildkite hook.', + $target_phid)); + } + + $webhook_token = $impl->getSetting('webhook.token'); + $request_token = $request->getHTTPHeader('X-Buildkite-Token'); + + if (!phutil_hashes_are_identical($webhook_token, $request_token)) { + throw new Exception( + pht( + 'Buildkite request to target "%s" had the wrong authentication '. + 'token. The Buildkite pipeline and Harbormaster build step must '. + 'be configured with the same token.', + $target_phid)); + } + + $state = idx($build, 'state'); + switch ($state) { + case 'passed': + $message_type = HarbormasterMessageType::MESSAGE_PASS; + break; + default: + $message_type = HarbormasterMessageType::MESSAGE_FAIL; + break; + } + + $api_method = 'harbormaster.sendmessage'; + $api_params = array( + 'buildTargetPHID' => $target_phid, + 'type' => $message_type, + ); + + $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); + + id(new ConduitCall($api_method, $api_params)) + ->setUser($viewer) + ->execute(); + + unset($unguarded); + + return $this->newHookResponse(pht('OK: Processed event.')); + } + + private function newHookResponse($message) { + $response = new AphrontWebpageResponse(); + $response->setContent($message); + return $response; + } + +} diff --git a/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php b/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php new file mode 100644 index 0000000000..8b06a3cf9e --- /dev/null +++ b/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php @@ -0,0 +1,210 @@ +getBuildable(); + + $object = $buildable->getBuildableObject(); + if (!($object instanceof HarbormasterCircleCIBuildableInterface)) { + throw new Exception( + pht('This object does not support builds with Buildkite.')); + } + + $organization = $this->getSetting('organization'); + $pipeline = $this->getSetting('pipeline'); + + $uri = urisprintf( + 'https://api.buildkite.com/v2/organizations/%s/pipelines/%s/builds', + $organization, + $pipeline); + + $data_structure = array( + 'commit' => $object->getCircleCIBuildIdentifier(), + 'branch' => 'master', + 'message' => pht( + 'Harbormaster Build %s ("%s") for %s', + $build->getID(), + $build->getName(), + $buildable->getMonogram()), + 'env' => array( + 'HARBORMASTER_BUILD_TARGET_PHID' => $build_target->getPHID(), + ), + 'meta_data' => array( + 'buildTargetPHID' => $build_target->getPHID(), + ), + ); + + $json_data = phutil_json_encode($data_structure); + + $credential_phid = $this->getSetting('token'); + $api_token = id(new PassphraseCredentialQuery()) + ->setViewer($viewer) + ->withPHIDs(array($credential_phid)) + ->needSecrets(true) + ->executeOne(); + if (!$api_token) { + throw new Exception( + pht( + 'Unable to load API token ("%s")!', + $credential_phid)); + } + + $token = $api_token->getSecret()->openEnvelope(); + + $future = id(new HTTPSFuture($uri, $json_data)) + ->setMethod('POST') + ->addHeader('Content-Type', 'application/json') + ->addHeader('Accept', 'application/json') + ->addHeader('Authorization', "Bearer {$token}") + ->setTimeout(60); + + $this->resolveFutures( + $build, + $build_target, + array($future)); + + $this->logHTTPResponse($build, $build_target, $future, pht('Buildkite')); + + list($status, $body) = $future->resolve(); + if ($status->isError()) { + throw new HarbormasterBuildFailureException(); + } + + $response = phutil_json_decode($body); + + $uri_key = 'web_url'; + $build_uri = idx($response, $uri_key); + if (!$build_uri) { + throw new Exception( + pht( + 'Buildkite did not return a "%s"!', + $uri_key)); + } + + $target_phid = $build_target->getPHID(); + + $api_method = 'harbormaster.createartifact'; + $api_params = array( + 'buildTargetPHID' => $target_phid, + 'artifactType' => HarbormasterURIArtifact::ARTIFACTCONST, + 'artifactKey' => 'buildkite.uri', + 'artifactData' => array( + 'uri' => $build_uri, + 'name' => pht('View in Buildkite'), + 'ui.external' => true, + ), + ); + + id(new ConduitCall($api_method, $api_params)) + ->setUser($viewer) + ->execute(); + } + + public function getFieldSpecifications() { + return array( + 'token' => array( + 'name' => pht('API Token'), + 'type' => 'credential', + 'credential.type' + => PassphraseTokenCredentialType::CREDENTIAL_TYPE, + 'credential.provides' + => PassphraseTokenCredentialType::PROVIDES_TYPE, + 'required' => true, + ), + 'organization' => array( + 'name' => pht('Organization Name'), + 'type' => 'text', + 'required' => true, + ), + 'pipeline' => array( + 'name' => pht('Pipeline Name'), + 'type' => 'text', + 'required' => true, + ), + 'webhook.token' => array( + 'name' => pht('Webhook Token'), + 'type' => 'text', + 'required' => true, + ), + ); + } + + public function supportsWaitForMessage() { + return false; + } + + public function shouldWaitForMessage(HarbormasterBuildTarget $target) { + return true; + } + +} From f23bfccc046775bf369064c549d6f877e212ced2 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 10:48:03 -0800 Subject: [PATCH 13/49] Replace ProfileMenu bugs with different bugs Summary: Ref T12174. This fixes more bugs than it creates, I think: - Dashboards now show the whole menu. - Project and home items now show selected state correctly. - The "choose global vs personal" thing is now part of MenuEngine, and the same code builds it for Home and Favorites. - Home now handles defaults correctly, I think. Maybe regression/bad/still buggy?: - Mobile home is now whatever the default thing was, not the menu? - Title for dashboard content or other items that render their own content is incorrectly always "Configure Menu" (this was preexisting). Test Plan: - Created, edited, reordered, disabled, deleted and pinned personal and global items on home, favorites, and projects. - Also checked User profiles. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17273 --- src/__phutil_library_map__.php | 12 +- .../base/PhabricatorApplication.php | 8 +- .../PhabricatorFavoritesApplication.php | 3 +- .../PhabricatorFavoritesMainController.php | 63 ----- ...PhabricatorFavoritesMenuItemController.php | 10 +- .../PhabricatorFavoritesProfileMenuEngine.php | 9 +- ...abricatorFavoritesMainMenuBarExtension.php | 14 +- .../PhabricatorHomeApplication.php | 9 +- .../controller/PhabricatorHomeController.php | 10 +- .../PhabricatorHomeMenuController.php | 62 ---- .../PhabricatorHomeMenuItemController.php | 18 +- .../PhabricatorHomeProfileMenuEngine.php | 15 +- .../PhabricatorHomeProfileMenuItem.php | 9 +- .../PHUIHomeView.php} | 53 +--- .../PhabricatorProjectProfileMenuEngine.php | 8 +- .../engine/PhabricatorProfileMenuEngine.php | 266 ++++++++++++++---- .../PhabricatorDashboardProfileMenuItem.php | 6 +- .../PhabricatorManageProfileMenuItem.php} | 28 +- ...catorProfileMenuItemConfigurationQuery.php | 1 + ...habricatorProfileMenuItemConfiguration.php | 8 + 20 files changed, 298 insertions(+), 314 deletions(-) delete mode 100644 src/applications/favorites/controller/PhabricatorFavoritesMainController.php delete mode 100644 src/applications/home/controller/PhabricatorHomeMenuController.php rename src/applications/home/{controller/PhabricatorHomeMainController.php => view/PHUIHomeView.php} (82%) rename src/applications/{home/menuitem/PhabricatorHomeManageProfileMenuItem.php => search/menuitem/PhabricatorManageProfileMenuItem.php} (73%) diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index df3772dae9..0b4e41c126 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1687,6 +1687,7 @@ phutil_register_library_map(array( 'PHUIHandleView' => 'applications/phid/view/PHUIHandleView.php', 'PHUIHeadThingView' => 'view/phui/PHUIHeadThingView.php', 'PHUIHeaderView' => 'view/phui/PHUIHeaderView.php', + 'PHUIHomeView' => 'applications/home/view/PHUIHomeView.php', 'PHUIHovercardUIExample' => 'applications/uiexample/examples/PHUIHovercardUIExample.php', 'PHUIHovercardView' => 'view/phui/PHUIHovercardView.php', 'PHUIIconCircleView' => 'view/phui/PHUIIconCircleView.php', @@ -2676,7 +2677,6 @@ phutil_register_library_map(array( 'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php', 'PhabricatorFavoritesApplication' => 'applications/favorites/application/PhabricatorFavoritesApplication.php', 'PhabricatorFavoritesController' => 'applications/favorites/controller/PhabricatorFavoritesController.php', - 'PhabricatorFavoritesMainController' => 'applications/favorites/controller/PhabricatorFavoritesMainController.php', 'PhabricatorFavoritesMainMenuBarExtension' => 'applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php', 'PhabricatorFavoritesMenuItemController' => 'applications/favorites/controller/PhabricatorFavoritesMenuItemController.php', 'PhabricatorFavoritesProfileMenuEngine' => 'applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php', @@ -2839,9 +2839,6 @@ phutil_register_library_map(array( 'PhabricatorHomeConstants' => 'applications/home/constants/PhabricatorHomeConstants.php', 'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php', 'PhabricatorHomeLauncherProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php', - 'PhabricatorHomeMainController' => 'applications/home/controller/PhabricatorHomeMainController.php', - 'PhabricatorHomeManageProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php', - 'PhabricatorHomeMenuController' => 'applications/home/controller/PhabricatorHomeMenuController.php', 'PhabricatorHomeMenuItemController' => 'applications/home/controller/PhabricatorHomeMenuItemController.php', 'PhabricatorHomeProfileMenuEngine' => 'applications/home/engine/PhabricatorHomeProfileMenuEngine.php', 'PhabricatorHomeProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeProfileMenuItem.php', @@ -2964,6 +2961,7 @@ phutil_register_library_map(array( 'PhabricatorMainMenuBarExtension' => 'view/page/menu/PhabricatorMainMenuBarExtension.php', 'PhabricatorMainMenuSearchView' => 'view/page/menu/PhabricatorMainMenuSearchView.php', 'PhabricatorMainMenuView' => 'view/page/menu/PhabricatorMainMenuView.php', + 'PhabricatorManageProfileMenuItem' => 'applications/search/menuitem/PhabricatorManageProfileMenuItem.php', 'PhabricatorManagementWorkflow' => 'infrastructure/management/PhabricatorManagementWorkflow.php', 'PhabricatorManiphestApplication' => 'applications/maniphest/application/PhabricatorManiphestApplication.php', 'PhabricatorManiphestConfigOptions' => 'applications/maniphest/config/PhabricatorManiphestConfigOptions.php', @@ -6563,6 +6561,7 @@ phutil_register_library_map(array( 'PHUIHandleView' => 'AphrontView', 'PHUIHeadThingView' => 'AphrontTagView', 'PHUIHeaderView' => 'AphrontTagView', + 'PHUIHomeView' => 'AphrontTagView', 'PHUIHovercardUIExample' => 'PhabricatorUIExample', 'PHUIHovercardView' => 'AphrontTagView', 'PHUIIconCircleView' => 'AphrontTagView', @@ -7698,7 +7697,6 @@ phutil_register_library_map(array( 'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator', 'PhabricatorFavoritesApplication' => 'PhabricatorApplication', 'PhabricatorFavoritesController' => 'PhabricatorController', - 'PhabricatorFavoritesMainController' => 'PhabricatorFavoritesController', 'PhabricatorFavoritesMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', 'PhabricatorFavoritesMenuItemController' => 'PhabricatorFavoritesController', 'PhabricatorFavoritesProfileMenuEngine' => 'PhabricatorProfileMenuEngine', @@ -7897,9 +7895,6 @@ phutil_register_library_map(array( 'PhabricatorHomeConstants' => 'PhabricatorHomeController', 'PhabricatorHomeController' => 'PhabricatorController', 'PhabricatorHomeLauncherProfileMenuItem' => 'PhabricatorProfileMenuItem', - 'PhabricatorHomeMainController' => 'PhabricatorHomeController', - 'PhabricatorHomeManageProfileMenuItem' => 'PhabricatorProfileMenuItem', - 'PhabricatorHomeMenuController' => 'PhabricatorHomeController', 'PhabricatorHomeMenuItemController' => 'PhabricatorHomeController', 'PhabricatorHomeProfileMenuEngine' => 'PhabricatorProfileMenuEngine', 'PhabricatorHomeProfileMenuItem' => 'PhabricatorProfileMenuItem', @@ -8022,6 +8017,7 @@ phutil_register_library_map(array( 'PhabricatorMainMenuBarExtension' => 'Phobject', 'PhabricatorMainMenuSearchView' => 'AphrontView', 'PhabricatorMainMenuView' => 'AphrontView', + 'PhabricatorManageProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorManagementWorkflow' => 'PhutilArgumentWorkflow', 'PhabricatorManiphestApplication' => 'PhabricatorApplication', 'PhabricatorManiphestConfigOptions' => 'PhabricatorApplicationConfigOptions', diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php index caf2dd4612..b791aaeef8 100644 --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -596,14 +596,18 @@ abstract class PhabricatorApplication protected function getProfileMenuRouting($controller) { $edit_route = $this->getEditRoutePattern(); + $mode_route = '(?Pglobal|custom)/'; + return array( '(?Pview)/(?P[^/]+)/' => $controller, '(?Phide)/(?P[^/]+)/' => $controller, '(?Pdefault)/(?P[^/]+)/' => $controller, '(?Pconfigure)/' => $controller, - '(?Preorder)/' => $controller, + '(?Pconfigure)/'.$mode_route => $controller, + '(?Preorder)/'.$mode_route => $controller, '(?Pedit)/'.$edit_route => $controller, - '(?Pnew)/(?[^/]+)/'.$edit_route => $controller, + '(?Pnew)/'.$mode_route.'(?[^/]+)/'.$edit_route + => $controller, '(?Pbuiltin)/(?[^/]+)/'.$edit_route => $controller, ); diff --git a/src/applications/favorites/application/PhabricatorFavoritesApplication.php b/src/applications/favorites/application/PhabricatorFavoritesApplication.php index 1d5d3ae2aa..3a6acd4ebc 100644 --- a/src/applications/favorites/application/PhabricatorFavoritesApplication.php +++ b/src/applications/favorites/application/PhabricatorFavoritesApplication.php @@ -21,8 +21,7 @@ final class PhabricatorFavoritesApplication extends PhabricatorApplication { public function getRoutes() { return array( '/favorites/' => array( - '' => 'PhabricatorFavoritesMainController', - '(?Pglobal|personal)/item/' => $this->getProfileMenuRouting( + 'menu/' => $this->getProfileMenuRouting( 'PhabricatorFavoritesMenuItemController'), ), ); diff --git a/src/applications/favorites/controller/PhabricatorFavoritesMainController.php b/src/applications/favorites/controller/PhabricatorFavoritesMainController.php deleted file mode 100644 index 54197a6635..0000000000 --- a/src/applications/favorites/controller/PhabricatorFavoritesMainController.php +++ /dev/null @@ -1,63 +0,0 @@ -getViewer(); - - if (!$viewer->getIsAdmin()) { - $uri = '/favorites/personal/item/configure/'; - return id(new AphrontRedirectResponse())->setURI($uri); - } - - $menu = id(new PHUIObjectItemListView()) - ->setUser($viewer); - - $menu->addItem( - id(new PHUIObjectItemView()) - ->setHeader(pht('Personal Menu Items')) - ->setHref($this->getApplicationURI('personal/item/configure/')) - ->setImageURI($viewer->getProfileImageURI()) - ->addAttribute(pht('Edit favorites for your personal account.'))); - - $icon = id(new PHUIIconView()) - ->setIcon('fa-globe') - ->setBackground('bg-blue'); - - $menu->addItem( - id(new PHUIObjectItemView()) - ->setHeader(pht('Global Menu Items')) - ->setHref($this->getApplicationURI('global/item/configure/')) - ->setImageIcon($icon) - ->addAttribute(pht('Edit global default favorites for all users.'))); - - $crumbs = $this->buildApplicationCrumbs(); - $crumbs->addTextCrumb(pht('Manage')); - $crumbs->setBorder(true); - - $box = id(new PHUIObjectBoxView()) - ->setObjectList($menu); - - $header = id(new PHUIHeaderView()) - ->setHeader(pht('Manage Favorites')) - ->setHeaderIcon('fa-star-o'); - - $view = id(new PHUITwoColumnView()) - ->setHeader($header) - ->setFooter(array( - $box, - )); - - return $this->newPage() - ->setTitle(pht('Manage')) - ->setCrumbs($crumbs) - ->appendChild($view); - - } - -} diff --git a/src/applications/favorites/controller/PhabricatorFavoritesMenuItemController.php b/src/applications/favorites/controller/PhabricatorFavoritesMenuItemController.php index 912d9efe0d..dd4bf77cf0 100644 --- a/src/applications/favorites/controller/PhabricatorFavoritesMenuItemController.php +++ b/src/applications/favorites/controller/PhabricatorFavoritesMenuItemController.php @@ -5,13 +5,6 @@ final class PhabricatorFavoritesMenuItemController public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); - $type = $request->getURIData('type'); - $custom_phid = null; - $menu = PhabricatorProfileMenuEngine::MENU_GLOBAL; - if ($type == 'personal') { - $custom_phid = $viewer->getPHID(); - $menu = PhabricatorProfileMenuEngine::MENU_PERSONAL; - } $application = 'PhabricatorFavoritesApplication'; $favorites = id(new PhabricatorApplicationQuery()) @@ -22,9 +15,8 @@ final class PhabricatorFavoritesMenuItemController $engine = id(new PhabricatorFavoritesProfileMenuEngine()) ->setProfileObject($favorites) - ->setCustomPHID($custom_phid) + ->setCustomPHID($viewer->getPHID()) ->setController($this) - ->setMenuType($menu) ->setShowNavigation(false); return $engine->buildResponse(); diff --git a/src/applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php b/src/applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php index 87b59e3e0f..0ac31e7de8 100644 --- a/src/applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php +++ b/src/applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php @@ -8,14 +8,7 @@ final class PhabricatorFavoritesProfileMenuEngine } public function getItemURI($path) { - $object = $this->getProfileObject(); - $custom = $this->getCustomPHID(); - - if ($custom) { - return "/favorites/personal/item/{$path}"; - } else { - return "/favorites/global/item/{$path}"; - } + return "/favorites/menu/{$path}"; } protected function getBuiltinProfileItems($object) { diff --git a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php index 990ecad993..63d8726857 100644 --- a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php +++ b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php @@ -50,16 +50,8 @@ final class PhabricatorFavoritesMainMenuBarExtension $menu_engine = id(new PhabricatorFavoritesProfileMenuEngine()) ->setViewer($viewer) - ->setProfileObject($favorites); - - if ($viewer->getPHID()) { - $menu_engine - ->setCustomPHID($viewer->getPHID()) - ->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED); - } else { - $menu_engine - ->setMenuType(PhabricatorProfileMenuEngine::MENU_GLOBAL); - } + ->setProfileObject($favorites) + ->setCustomPHID($viewer->getPHID()); $filter_view = $menu_engine->buildNavigation(); @@ -87,7 +79,7 @@ final class PhabricatorFavoritesMainMenuBarExtension $view->addAction( id(new PhabricatorActionView()) ->setName(pht('Edit Favorites')) - ->setHref('/favorites/')); + ->setHref('/favorites/menu/configure/')); } return $view; diff --git a/src/applications/home/application/PhabricatorHomeApplication.php b/src/applications/home/application/PhabricatorHomeApplication.php index a860bc8fb3..7743f70c0e 100644 --- a/src/applications/home/application/PhabricatorHomeApplication.php +++ b/src/applications/home/application/PhabricatorHomeApplication.php @@ -22,14 +22,11 @@ final class PhabricatorHomeApplication extends PhabricatorApplication { public function getRoutes() { return array( - '/' => 'PhabricatorHomeMainController', - '/(?Phome)/' => 'PhabricatorHomeMainController', + '/' => 'PhabricatorHomeMenuItemController', '/home/' => array( - 'menu/' => array( - '' => 'PhabricatorHomeMenuController', - '(?Pglobal|personal)/item/' => $this->getProfileMenuRouting( + '' => 'PhabricatorHomeMenuItemController', + 'menu/' => $this->getProfileMenuRouting( 'PhabricatorHomeMenuItemController'), - ), ), ); } diff --git a/src/applications/home/controller/PhabricatorHomeController.php b/src/applications/home/controller/PhabricatorHomeController.php index ffb27b3a2e..7c46525ee0 100644 --- a/src/applications/home/controller/PhabricatorHomeController.php +++ b/src/applications/home/controller/PhabricatorHomeController.php @@ -31,14 +31,8 @@ abstract class PhabricatorHomeController extends PhabricatorController { $engine = id(new PhabricatorHomeProfileMenuEngine()) ->setViewer($viewer) - ->setProfileObject($home); - - if ($viewer->getPHID()) { - $engine->setCustomPHID($viewer->getPHID()) - ->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED); - } else { - $engine->setMenuType(PhabricatorProfileMenuEngine::MENU_GLOBAL); - } + ->setProfileObject($home) + ->setCustomPHID($viewer->getPHID()); $this->profileMenu = $engine->buildNavigation(); } diff --git a/src/applications/home/controller/PhabricatorHomeMenuController.php b/src/applications/home/controller/PhabricatorHomeMenuController.php deleted file mode 100644 index 7e3ef8b14d..0000000000 --- a/src/applications/home/controller/PhabricatorHomeMenuController.php +++ /dev/null @@ -1,62 +0,0 @@ -getViewer(); - - if (!$viewer->getIsAdmin()) { - $uri = '/home/menu/personal/item/configure/'; - return id(new AphrontRedirectResponse())->setURI($uri); - } - - $menu = id(new PHUIObjectItemListView()) - ->setUser($viewer); - - $menu->addItem( - id(new PHUIObjectItemView()) - ->setHeader(pht('Personal Menu Items')) - ->setHref($this->getApplicationURI('menu/personal/item/configure/')) - ->setImageURI($viewer->getProfileImageURI()) - ->addAttribute(pht('Edit the menu for your personal account.'))); - - $icon = id(new PHUIIconView()) - ->setIcon('fa-globe') - ->setBackground('bg-blue'); - - $menu->addItem( - id(new PHUIObjectItemView()) - ->setHeader(pht('Global Menu Items')) - ->setHref($this->getApplicationURI('menu/global/item/configure/')) - ->setImageIcon($icon) - ->addAttribute(pht('Edit the global default menu for all users.'))); - - $crumbs = $this->buildApplicationCrumbs(); - $crumbs->addTextCrumb(pht('Manage')); - $crumbs->setBorder(true); - - $box = id(new PHUIObjectBoxView()) - ->setObjectList($menu); - - $header = id(new PHUIHeaderView()) - ->setHeader(pht('Manage Home Menu')) - ->setHeaderIcon('fa-home'); - - $view = id(new PHUITwoColumnView()) - ->setHeader($header) - ->setFooter(array( - $box, - )); - - return $this->newPage() - ->setTitle(pht('Manage Home Menu')) - ->setCrumbs($crumbs) - ->appendChild($view); - - } - -} diff --git a/src/applications/home/controller/PhabricatorHomeMenuItemController.php b/src/applications/home/controller/PhabricatorHomeMenuItemController.php index 5649b947d6..f0e436ddd9 100644 --- a/src/applications/home/controller/PhabricatorHomeMenuItemController.php +++ b/src/applications/home/controller/PhabricatorHomeMenuItemController.php @@ -3,14 +3,21 @@ final class PhabricatorHomeMenuItemController extends PhabricatorHomeController { + public function shouldAllowPublic() { + return true; + } + + public function isGlobalDragAndDropUploadEnabled() { + return true; + } + public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); - $type = $request->getURIData('type'); - $custom_phid = null; - $menu = PhabricatorProfileMenuEngine::MENU_GLOBAL; - if ($type == 'personal') { + + if ($viewer->getPHID()) { $custom_phid = $viewer->getPHID(); - $menu = PhabricatorProfileMenuEngine::MENU_PERSONAL; + } else { + $custom_phid = null; } $application = 'PhabricatorHomeApplication'; @@ -23,7 +30,6 @@ final class PhabricatorHomeMenuItemController $engine = id(new PhabricatorHomeProfileMenuEngine()) ->setProfileObject($home_app) ->setCustomPHID($custom_phid) - ->setMenuType($menu) ->setController($this); return $engine->buildResponse(); diff --git a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php index c8c04947a8..8fd141c951 100644 --- a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php +++ b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php @@ -8,14 +8,7 @@ final class PhabricatorHomeProfileMenuEngine } public function getItemURI($path) { - $object = $this->getProfileObject(); - $custom = $this->getCustomPHID(); - - if ($custom) { - return "/home/menu/personal/item/{$path}"; - } else { - return "/home/menu/global/item/{$path}"; - } + return "/home/menu/{$path}"; } protected function getBuiltinProfileItems($object) { @@ -58,11 +51,7 @@ final class PhabricatorHomeProfileMenuEngine ->setMenuItemKey( PhabricatorHomeLauncherProfileMenuItem::MENUITEMKEY); - // Single Manage Item, switches URI based on admin/user - $items[] = $this->newItem() - ->setBuiltinKey(PhabricatorHomeConstants::ITEM_MANAGE) - ->setMenuItemKey( - PhabricatorHomeManageProfileMenuItem::MENUITEMKEY); + $items[] = $this->newManageItem(); return $items; } diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php index 1283ff3d34..ab77fa9098 100644 --- a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -34,6 +34,13 @@ final class PhabricatorHomeProfileMenuItem return $this->getDefaultName(); } + public function newPageContent() { + $viewer = $this->getViewer(); + + return id(new PHUIHomeView()) + ->setViewer($viewer); + } + public function buildEditEngineFields( PhabricatorProfileMenuItemConfiguration $config) { return array( @@ -52,7 +59,7 @@ final class PhabricatorHomeProfileMenuItem if ($viewer->isLoggedIn()) { $name = $this->getDisplayName($config); $icon = 'fa-home'; - $href = '/home/'; + $href = $this->getItemViewURI($config); $item = $this->newItem() ->setHref($href) diff --git a/src/applications/home/controller/PhabricatorHomeMainController.php b/src/applications/home/view/PHUIHomeView.php similarity index 82% rename from src/applications/home/controller/PhabricatorHomeMainController.php rename to src/applications/home/view/PHUIHomeView.php index 79687af51f..e68643f6d3 100644 --- a/src/applications/home/controller/PhabricatorHomeMainController.php +++ b/src/applications/home/view/PHUIHomeView.php @@ -1,52 +1,23 @@ getViewer(); - - $dashboard = PhabricatorDashboardInstall::getDashboard( - $viewer, - $viewer->getPHID(), - get_class($this->getCurrentApplication())); - - if (!$dashboard) { - $dashboard = PhabricatorDashboardInstall::getDashboard( - $viewer, - PhabricatorHomeApplication::DASHBOARD_DEFAULT, - get_class($this->getCurrentApplication())); - } - - if ($dashboard) { - $content = id(new PhabricatorDashboardRenderingEngine()) - ->setViewer($viewer) - ->setDashboard($dashboard) - ->renderDashboard(); - } else { - $content = $this->buildMainResponse(); - } - - $nav = $this->getProfileMenu(); - $content = - array( - $content, - id(new PhabricatorGlobalUploadTargetView())->setUser($viewer), - ); - - return $this->newPage() - ->setTitle('Phabricator') - ->addClass('phabricator-home') - ->setNavigation($nav) - ->appendChild($content); + protected function getTagContent() { + $viewer = $this->getViewer(); + return array( + $this->buildMainResponse(), + id(new PhabricatorGlobalUploadTargetView())->setUser($viewer), + ); } private function buildMainResponse() { diff --git a/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php b/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php index a39e7a8236..534db15113 100644 --- a/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php +++ b/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php @@ -7,6 +7,10 @@ final class PhabricatorProjectProfileMenuEngine return true; } + protected function isMenuEnginePersonalizable() { + return false; + } + public function getItemURI($path) { $project = $this->getProfileObject(); $id = $project->getID(); @@ -37,9 +41,7 @@ final class PhabricatorProjectProfileMenuEngine ->setMenuItemKey( PhabricatorProjectSubprojectsProfileMenuItem::MENUITEMKEY); - $items[] = $this->newItem() - ->setBuiltinKey(PhabricatorProject::ITEM_MANAGE) - ->setMenuItemKey(PhabricatorProjectManageProfileMenuItem::MENUITEMKEY); + $items[] = $this->newManageItem(); return $items; } diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index 04aa7c574f..6f0b1542eb 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -6,16 +6,18 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { private $profileObject; private $customPHID; private $items; - private $menuType = self::MENU_GLOBAL; private $defaultItem; private $controller; private $navigation; private $showNavigation = true; + private $editMode; - const MENU_GLOBAL = 'global'; - const MENU_PERSONAL = 'personal'; - const MENU_COMBINED = 'menu'; const ITEM_CUSTOM_DIVIDER = 'engine.divider'; + const ITEM_MANAGE = 'item.configure'; + + const MODE_COMBINED = 'combined'; + const MODE_GLOBAL = 'global'; + const MODE_CUSTOM = 'custom'; public function setViewer(PhabricatorUser $viewer) { $this->viewer = $viewer; @@ -44,6 +46,21 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return $this->customPHID; } + private function getEditModeCustomPHID() { + $mode = $this->getEditMode(); + + switch ($mode) { + case self::MODE_CUSTOM: + $custom_phid = $this->getCustomPHID(); + break; + case self::MODE_GLOBAL: + $custom_phid = null; + break; + } + + return $custom_phid; + } + public function setController(PhabricatorController $controller) { $this->controller = $controller; return $this; @@ -60,19 +77,10 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } public function getDefaultItem() { - $this->loadItems(); + $this->getItems(); return $this->defaultItem; } - public function setMenuType($type) { - $this->menuType = $type; - return $this; - } - - private function getMenuType() { - return $this->menuType; - } - public function setShowNavigation($show) { $this->showNavigation = $show; return $this; @@ -93,6 +101,10 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return array(); } + protected function getEditMode() { + return $this->editMode; + } + public function buildResponse() { $controller = $this->getController(); @@ -171,24 +183,35 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $crumbs = $controller->buildApplicationCrumbsForEditEngine(); - // TODO: This stuff might need a little tweaking at some point, since it - // causes "Global" and "Personal" to show up in contexts where they don't - // make sense, notably Projects. if ($item_action != 'view') { - $navigation->selectFilter('item.configure'); - switch ($this->getMenuType()) { - case 'personal': - $crumbs->addTextCrumb(pht('Personal')); - break; - case 'global': - $crumbs->addTextCrumb(pht('Global')); - break; + $navigation->selectFilter(self::ITEM_MANAGE); + + if ($selected_item) { + if ($selected_item->getCustomPHID()) { + $edit_mode = 'custom'; + } else { + $edit_mode = 'global'; + } + } else { + $edit_mode = $request->getURIData('itemEditMode'); + } + + $available_modes = $this->getViewerEditModes($viewer); + if ($available_modes) { + $available_modes = array_fuse($available_modes); + if (isset($available_modes[$edit_mode])) { + $this->editMode = $edit_mode; + } else { + if ($item_action != 'configure') { + return new Aphront404Response(); + } + } } } switch ($item_action) { case 'view': - $navigation->selectFilter($selected_item->getItemIdentifier()); + $navigation->selectFilter($selected_item->getDefaultMenuItemKey()); $content = $this->buildItemViewContent($selected_item); $crumbs->addTextCrumb($selected_item->getDisplayName()); @@ -197,15 +220,40 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } break; case 'configure': - $content = $this->buildItemConfigureContent($item_list); - $crumbs->addTextCrumb(pht('Configure Menu')); + $mode = $this->getEditMode(); + if (!$mode) { + $crumbs->addTextCrumb(pht('Configure Menu')); + $content = $this->buildMenuEditModeContent(); + } else { + if (count($available_modes) > 1) { + $crumbs->addTextCrumb( + pht('Configure Menu'), + $this->getItemURI('configure/')); + + switch ($mode) { + case self::MODE_CUSTOM: + $crumbs->addTextCrumb(pht('Personal')); + break; + case self::MODE_GLOBAL: + $crumbs->addTextCrumb(pht('Global')); + break; + } + } else { + $crumbs->addTextCrumb(pht('Configure Menu')); + } + $edit_list = $this->loadItems($mode); + $content = $this->buildItemConfigureContent($edit_list); + } break; case 'reorder': - $content = $this->buildItemReorderContent($item_list); + $mode = $this->getEditMode(); + $edit_list = $this->loadItems($mode); + $content = $this->buildItemReorderContent($edit_list); break; case 'new': $item_key = $request->getURIData('itemKey'); - $content = $this->buildItemNewContent($item_key); + $mode = $this->getEditMode(); + $content = $this->buildItemNewContent($item_key, $mode); break; case 'builtin': $content = $this->buildItemBuiltinContent($selected_item); @@ -238,6 +286,8 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $crumbs->setBorder(true); + // TODO: This title is not correct when viewing items. + $page = $controller->newPage() ->setTitle(pht('Configure Menu')) ->setCrumbs($crumbs) @@ -290,8 +340,8 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { if (count($items) == 1) { $item = head($items); if ($item->getKey() === null) { - $item_identifier = $menu_item->getItemIdentifier(); - $item->setKey($item_identifier); + $default_key = $menu_item->getDefaultMenuItemKey(); + $item->setKey($default_key); } } @@ -308,31 +358,30 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { private function getItems() { if ($this->items === null) { - $this->items = $this->loadItems(); + $this->items = $this->loadItems(self::MODE_COMBINED); } return $this->items; } - private function loadItems() { + private function loadItems($mode) { $viewer = $this->getViewer(); $object = $this->getProfileObject(); - $items = $this->loadBuiltinProfileItems(); + $items = $this->loadBuiltinProfileItems($mode); $query = id(new PhabricatorProfileMenuItemConfigurationQuery()) ->setViewer($viewer) ->withProfilePHIDs(array($object->getPHID())); - $menu_type = $this->getMenuType(); - switch ($menu_type) { - case self::MENU_GLOBAL: + switch ($mode) { + case self::MODE_GLOBAL: $query->withCustomPHIDs(array(), true); break; - case self::MENU_PERSONAL: + case self::MODE_CUSTOM: $query->withCustomPHIDs(array($this->getCustomPHID()), false); break; - case self::MENU_COMBINED: + case self::MODE_COMBINED: $query->withCustomPHIDs(array($this->getCustomPHID()), true); break; } @@ -368,7 +417,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } } - $items = $this->arrangeItems($items); + $items = $this->arrangeItems($items, $mode); // Make sure exactly one valid item is marked as default. $default = null; @@ -399,20 +448,19 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return $items; } - private function loadBuiltinProfileItems() { + private function loadBuiltinProfileItems($mode) { $object = $this->getProfileObject(); - $menu_type = $this->getMenuType(); - switch ($menu_type) { - case self::MENU_GLOBAL: + switch ($mode) { + case self::MODE_GLOBAL: $builtins = $this->getBuiltinProfileItems($object); break; - case self::MENU_PERSONAL: + case self::MODE_CUSTOM: $builtins = $this->getBuiltinCustomProfileItems( $object, $this->getCustomPHID()); break; - case self::MENU_COMBINED: + case self::MODE_COMBINED: $builtins = array(); $builtins[] = $this->getBuiltinCustomProfileItems( $object, @@ -489,6 +537,15 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } public function getConfigureURI() { + $mode = $this->getEditMode(); + + switch ($mode) { + case self::MODE_CUSTOM: + return $this->getItemURI('configure/custom/'); + case self::MODE_GLOBAL: + return $this->getItemURI('configure/global/'); + } + return $this->getItemURI('configure/'); } @@ -500,7 +557,8 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { // object the menu appears on. If you're reordering custom items, you only // need to be able to edit the custom object. Currently, the custom object // is always the viewing user's own user object. - $custom_phid = $this->getCustomPHID(); + $custom_phid = $this->getEditModeCustomPHID(); + if (!$custom_phid) { PhabricatorPolicyFilter::requireCapability( $viewer, @@ -593,6 +651,85 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return $item->newPageContent(); } + private function getViewerEditModes() { + $modes = array(); + + $viewer = $this->getViewer(); + + if ($viewer->isLoggedIn() && $this->isMenuEnginePersonalizable()) { + $modes[] = self::MODE_CUSTOM; + } + + $object = $this->getProfileObject(); + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $object, + PhabricatorPolicyCapability::CAN_EDIT); + + if ($can_edit) { + $modes[] = self::MODE_GLOBAL; + } + + return $modes; + } + + protected function isMenuEnginePersonalizable() { + return true; + } + + private function buildMenuEditModeContent() { + $viewer = $this->getViewer(); + + $modes = $this->getViewerEditModes($viewer); + if (!$modes) { + return new Aphront404Response(); + } + + if (count($modes) == 1) { + $mode = head($modes); + return id(new AphrontRedirectResponse()) + ->setURI($this->getItemURI("configure/{$mode}/")); + } + + $menu = id(new PHUIObjectItemListView()) + ->setUser($viewer); + + $modes = array_fuse($modes); + + if (isset($modes['custom'])) { + $menu->addItem( + id(new PHUIObjectItemView()) + ->setHeader(pht('Personal Menu Items')) + ->setHref($this->getItemURI('configure/custom/')) + ->setImageURI($viewer->getProfileImageURI()) + ->addAttribute(pht('Edit the menu for your personal account.'))); + } + + if (isset($modes['global'])) { + $icon = id(new PHUIIconView()) + ->setIcon('fa-globe') + ->setBackground('bg-blue'); + + $menu->addItem( + id(new PHUIObjectItemView()) + ->setHeader(pht('Global Menu Items')) + ->setHref($this->getItemURI('configure/global/')) + ->setImageIcon($icon) + ->addAttribute(pht('Edit the global default menu for all users.'))); + } + + $box = id(new PHUIObjectBoxView()) + ->setObjectList($menu); + + $header = id(new PHUIHeaderView()) + ->setHeader(pht('Manage Menu')) + ->setHeaderIcon('fa-list'); + + return id(new PHUITwoColumnView()) + ->setHeader($header) + ->setFooter($box); + } + private function buildItemConfigureContent(array $items) { $viewer = $this->getViewer(); $object = $this->getProfileObject(); @@ -616,11 +753,13 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $list_id = celerity_generate_unique_node_id(); + $mode = $this->getEditMode(); + Javelin::initBehavior( 'reorder-profile-menu-items', array( 'listID' => $list_id, - 'orderURI' => $this->getItemURI('reorder/'), + 'orderURI' => $this->getItemURI("reorder/{$mode}/"), )); $list = id(new PHUIObjectItemListView()) @@ -738,12 +877,13 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } $item_key = $item_type->getMenuItemKey(); + $edit_mode = $this->getEditMode(); $action_list->addAction( id(new PhabricatorActionView()) ->setIcon($item_type->getMenuItemTypeIcon()) ->setName($item_type->getMenuItemTypeName()) - ->setHref($this->getItemURI("new/{$item_key}/")) + ->setHref($this->getItemURI("new/{$edit_mode}/{$item_key}/")) ->setWorkflow(true)); } @@ -788,7 +928,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return $view; } - private function buildItemNewContent($item_key) { + private function buildItemNewContent($item_key, $mode) { $item_types = PhabricatorProfileMenuItem::getAllMenuItems(); $item_type = idx($item_types, $item_key); if (!$item_type) { @@ -800,7 +940,8 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return new Aphront404Response(); } - $custom_phid = $this->getCustomPHID(); + $custom_phid = $this->getEditModeCustomPHID(); + $configuration = PhabricatorProfileMenuItemConfiguration::initializeNewItem( $object, $item_type, @@ -828,12 +969,13 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $viewer = $this->getViewer(); $object = $this->getProfileObject(); $controller = $this->getController(); + $custom_phid = $this->getEditModeCustomPHID(); return id(new PhabricatorProfileMenuEditEngine()) ->setMenuEngine($this) ->setProfileObject($object) ->setController($controller) - ->setCustomPHID($this->getCustomPHID()) + ->setCustomPHID($custom_phid) ->buildResponse(); } @@ -859,6 +1001,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $object = $this->getProfileObject(); $controller = $this->getController(); + $custom_phid = $this->getEditModeCustomPHID(); return id(new PhabricatorProfileMenuEditEngine()) ->setIsBuiltin(true) @@ -866,7 +1009,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { ->setProfileObject($object) ->setNewMenuItemConfiguration($configuration) ->setController($controller) - ->setCustomPHID($this->getCustomPHID()) + ->setCustomPHID($custom_phid) ->buildResponse(); } @@ -1008,12 +1151,18 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return PhabricatorProfileMenuItemConfiguration::initializeNewBuiltin(); } + protected function newManageItem() { + return $this->newItem() + ->setBuiltinKey(self::ITEM_MANAGE) + ->setMenuItemKey(PhabricatorManageProfileMenuItem::MENUITEMKEY); + } + public function adjustDefault($key) { $controller = $this->getController(); $request = $controller->getRequest(); $viewer = $request->getViewer(); - $items = $this->loadItems(); + $items = $this->loadItems(self::MODE_COMBINED); // To adjust the default item, we first change any existing items that // are marked as defaults to "visible", then make the new default item @@ -1074,13 +1223,15 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return $this; } - private function arrangeItems(array $items) { + private function arrangeItems(array $items, $mode) { // Sort the items. $items = msortv($items, 'getSortVector'); + $object = $this->getProfileObject(); + // If we have some global items and some custom items and are in "combined" // mode, put a hard-coded divider item between them. - if ($this->getMenuType() == self::MENU_COMBINED) { + if ($mode == self::MODE_COMBINED) { $list = array(); $seen_custom = false; $seen_global = false; @@ -1092,6 +1243,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $list[] = $this->newItem() ->setBuiltinKey(self::ITEM_CUSTOM_DIVIDER) ->setMenuItemKey(PhabricatorDividerProfileMenuItem::MENUITEMKEY) + ->attachProfileObject($object) ->attachMenuItem( new PhabricatorDividerProfileMenuItem()); } diff --git a/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php index 002e5778d5..c442a2cc46 100644 --- a/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php +++ b/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php @@ -60,8 +60,8 @@ final class PhabricatorDashboardProfileMenuItem } $engine = id(new PhabricatorDashboardRenderingEngine()) - ->setViewer($viewer) - ->setDashboard($dashboard); + ->setViewer($viewer) + ->setDashboard($dashboard); return $engine->renderDashboard(); } @@ -89,9 +89,11 @@ final class PhabricatorDashboardProfileMenuItem public function getDisplayName( PhabricatorProfileMenuItemConfiguration $config) { $dashboard = $this->getDashboard(); + if (!$dashboard) { return pht('(Restricted/Invalid Dashboard)'); } + if (strlen($this->getName($config))) { return $this->getName($config); } else { diff --git a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorManageProfileMenuItem.php similarity index 73% rename from src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php rename to src/applications/search/menuitem/PhabricatorManageProfileMenuItem.php index fbca14f527..d5de555975 100644 --- a/src/applications/home/menuitem/PhabricatorHomeManageProfileMenuItem.php +++ b/src/applications/search/menuitem/PhabricatorManageProfileMenuItem.php @@ -1,12 +1,12 @@ getViewer(); - if ($viewer->isLoggedIn()) { - $name = $this->getDisplayName($config); - $icon = 'fa-pencil'; - $href = '/home/menu/'; - - $item = $this->newItem() - ->setHref($href) - ->setName($name) - ->setIcon($icon); + if (!$viewer->isLoggedIn()) { + return array(); } + $engine = $this->getEngine(); + $href = $engine->getItemURI('configure/'); + + $name = $this->getDisplayName($config); + $icon = 'fa-pencil'; + + $item = $this->newItem() + ->setHref($href) + ->setName($name) + ->setIcon($icon); + return array( $item, ); diff --git a/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php b/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php index 83a84ac306..230989e88e 100644 --- a/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php +++ b/src/applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php @@ -117,6 +117,7 @@ final class PhabricatorProfileMenuItemConfigurationQuery unset($page[$key]); continue; } + $item->attachProfileObject($profile); } diff --git a/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php b/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php index f178cc49fe..37124393fb 100644 --- a/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php +++ b/src/applications/search/storage/PhabricatorProfileMenuItemConfiguration.php @@ -195,6 +195,14 @@ final class PhabricatorProfileMenuItemConfiguration return $this->getBuiltinKey(); } + public function getDefaultMenuItemKey() { + if ($this->getBuiltinKey()) { + return $this->getBuiltinKey(); + } + + return $this->getPHID(); + } + public function newPageContent() { return $this->getMenuItem()->newPageContent($this); } From 27a33896ff1cfd5c1e767821b8a56e6768e043d6 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 11:36:54 -0800 Subject: [PATCH 14/49] Fix a couple of home menu issues for logged-out viewers Summary: Ref T12174. These items could fatal (`$item not defined`) if the viewer was not logged in. Test Plan: - Viewed home as a logged-out user. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17274 --- .../PhabricatorHomeMenuItemController.php | 8 +------- ...PhabricatorHomeLauncherProfileMenuItem.php | 16 +++++++-------- .../PhabricatorHomeProfileMenuItem.php | 20 ++++++++++--------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/applications/home/controller/PhabricatorHomeMenuItemController.php b/src/applications/home/controller/PhabricatorHomeMenuItemController.php index f0e436ddd9..39e9faadee 100644 --- a/src/applications/home/controller/PhabricatorHomeMenuItemController.php +++ b/src/applications/home/controller/PhabricatorHomeMenuItemController.php @@ -14,12 +14,6 @@ final class PhabricatorHomeMenuItemController public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); - if ($viewer->getPHID()) { - $custom_phid = $viewer->getPHID(); - } else { - $custom_phid = null; - } - $application = 'PhabricatorHomeApplication'; $home_app = id(new PhabricatorApplicationQuery()) ->setViewer($viewer) @@ -29,7 +23,7 @@ final class PhabricatorHomeMenuItemController $engine = id(new PhabricatorHomeProfileMenuEngine()) ->setProfileObject($home_app) - ->setCustomPHID($custom_phid) + ->setCustomPHID($viewer->getPHID()) ->setController($this); return $engine->buildResponse(); diff --git a/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php index c4c93f06ff..a727fbced6 100644 --- a/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php @@ -49,16 +49,14 @@ final class PhabricatorHomeLauncherProfileMenuItem PhabricatorProfileMenuItemConfiguration $config) { $viewer = $this->getViewer(); - if ($viewer->isLoggedIn()) { - $name = $this->getDisplayName($config); - $icon = 'fa-globe'; - $href = '/applications/'; + $name = $this->getDisplayName($config); + $icon = 'fa-globe'; + $href = '/applications/'; - $item = $this->newItem() - ->setHref($href) - ->setName($name) - ->setIcon($icon); - } + $item = $this->newItem() + ->setHref($href) + ->setName($name) + ->setIcon($icon); return array( $item, diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php index ab77fa9098..40dd2dd41e 100644 --- a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -56,17 +56,19 @@ final class PhabricatorHomeProfileMenuItem PhabricatorProfileMenuItemConfiguration $config) { $viewer = $this->getViewer(); - if ($viewer->isLoggedIn()) { - $name = $this->getDisplayName($config); - $icon = 'fa-home'; - $href = $this->getItemViewURI($config); - - $item = $this->newItem() - ->setHref($href) - ->setName($name) - ->setIcon($icon); + if (!$viewer->isLoggedIn()) { + return array(); } + $name = $this->getDisplayName($config); + $icon = 'fa-home'; + $href = $this->getItemViewURI($config); + + $item = $this->newItem() + ->setHref($href) + ->setName($name) + ->setIcon($icon); + return array( $item, ); From 2a527a51f26d40ffe4e9dcb2822ac1bc2e1b566b Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 11:55:20 -0800 Subject: [PATCH 15/49] Put Project "Manage" item back Summary: Ref T12174. This isn't really a "newManageItem()" since Projects have a separate manage screen. That is, I incorrectly changed the "Manage [This Project]" item into a "Edit Menu" item, so some options (like "Archive Project") incorrectly became inaccessible. Test Plan: Viewed a project, saw the right menu item, clicked it, could archive/etc project. Also edited the menu. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17275 --- .../project/engine/PhabricatorProjectProfileMenuEngine.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php b/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php index 534db15113..ef16b2eee8 100644 --- a/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php +++ b/src/applications/project/engine/PhabricatorProjectProfileMenuEngine.php @@ -41,7 +41,9 @@ final class PhabricatorProjectProfileMenuEngine ->setMenuItemKey( PhabricatorProjectSubprojectsProfileMenuItem::MENUITEMKEY); - $items[] = $this->newManageItem(); + $items[] = $this->newItem() + ->setBuiltinKey(PhabricatorProject::ITEM_MANAGE) + ->setMenuItemKey(PhabricatorProjectManageProfileMenuItem::MENUITEMKEY); return $items; } From a3417ccd78d510449a243729391a90ae381160b8 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 12:03:15 -0800 Subject: [PATCH 16/49] Make "bin/audit synchronize" actually save changes Summary: Ref T10978. Although this script prints out some very good changes, it does not currently persist them to the database. Test Plan: Ran `bin/audit synchronize`, saw the change appear both on the CLI and in the database. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17276 --- .../PhabricatorAuditSynchronizeManagementWorkflow.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php b/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php index bc16634a89..db6ce096c4 100644 --- a/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php +++ b/src/applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php @@ -44,12 +44,14 @@ final class PhabricatorAuditSynchronizeManagementWorkflow echo tsprintf( "%s\n", pht( - 'Updated "%s": "%s" -> "%s".', + 'Updating "%s": "%s" -> "%s".', $commit->getDisplayName(), PhabricatorAuditCommitStatusConstants::getStatusName( $old_status), PhabricatorAuditCommitStatusConstants::getStatusName( $new_status))); + + $commit->save(); } } } From f7c38135865674f3db608ec84257c0a87eaf5100 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 31 Jan 2017 13:17:43 -0800 Subject: [PATCH 17/49] Add Label MenuItem Summary: Ref T12174, lets you set labels as well for dividing content. Test Plan: Add a label, review on homepage. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17278 --- src/__phutil_library_map__.php | 2 + .../PhabricatorLabelProfileMenuItem.php | 75 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/applications/search/menuitem/PhabricatorLabelProfileMenuItem.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 0b4e41c126..eb3e2de116 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2882,6 +2882,7 @@ phutil_register_library_map(array( 'PhabricatorKeyring' => 'applications/files/keyring/PhabricatorKeyring.php', 'PhabricatorKeyringConfigOptionType' => 'applications/files/keyring/PhabricatorKeyringConfigOptionType.php', 'PhabricatorLDAPAuthProvider' => 'applications/auth/provider/PhabricatorLDAPAuthProvider.php', + 'PhabricatorLabelProfileMenuItem' => 'applications/search/menuitem/PhabricatorLabelProfileMenuItem.php', 'PhabricatorLegalpadApplication' => 'applications/legalpad/application/PhabricatorLegalpadApplication.php', 'PhabricatorLegalpadConfigOptions' => 'applications/legalpad/config/PhabricatorLegalpadConfigOptions.php', 'PhabricatorLegalpadDocumentPHIDType' => 'applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php', @@ -7938,6 +7939,7 @@ phutil_register_library_map(array( 'PhabricatorKeyring' => 'Phobject', 'PhabricatorKeyringConfigOptionType' => 'PhabricatorConfigJSONOptionType', 'PhabricatorLDAPAuthProvider' => 'PhabricatorAuthProvider', + 'PhabricatorLabelProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorLegalpadApplication' => 'PhabricatorApplication', 'PhabricatorLegalpadConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorLegalpadDocumentPHIDType' => 'PhabricatorPHIDType', diff --git a/src/applications/search/menuitem/PhabricatorLabelProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorLabelProfileMenuItem.php new file mode 100644 index 0000000000..1f769905d7 --- /dev/null +++ b/src/applications/search/menuitem/PhabricatorLabelProfileMenuItem.php @@ -0,0 +1,75 @@ +getLabelName($config); + } + + public function buildEditEngineFields( + PhabricatorProfileMenuItemConfiguration $config) { + return array( + id(new PhabricatorTextEditField()) + ->setKey(self::FIELD_NAME) + ->setLabel(pht('Name')) + ->setIsRequired(true) + ->setValue($this->getLabelName($config)), + ); + } + + private function getLabelName( + PhabricatorProfileMenuItemConfiguration $config) { + return $config->getMenuItemProperty('name'); + } + + protected function newNavigationMenuItems( + PhabricatorProfileMenuItemConfiguration $config) { + + $name = $this->getLabelName($config); + + $item = $this->newItem() + ->setName($name) + ->setType(PHUIListItemView::TYPE_LABEL); + + return array( + $item, + ); + } + + public function validateTransactions( + PhabricatorProfileMenuItemConfiguration $config, + $field_key, + $value, + array $xactions) { + + $viewer = $this->getViewer(); + $errors = array(); + + if ($field_key == self::FIELD_NAME) { + if ($this->isEmptyTransaction($value, $xactions)) { + $errors[] = $this->newRequiredError( + pht('You must choose a label name.'), + $field_key); + } + } + + return $errors; + } +} From b2de1490093c7b70f7b1d7946926661ff66caaf9 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 13:23:11 -0800 Subject: [PATCH 18/49] Allow menu items to be edited again Summary: Ref T12174. We now require that we can figure out a valid "edit mode" (global vs custom/personal) before we hit EditEngine. Since the EditEngine routes don't have an `itemID`, they would failu to figure out the mode and just 404. Let the engine use `id` (from EditEngine) if `itemID` (from MenuEngine) isn't present in the route. Test Plan: - Edited some menu items on Home / Projects. - (I think I tested this, then broke it, originally.) Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17280 --- .../search/engine/PhabricatorProfileMenuEngine.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index 6f0b1542eb..319d1fa774 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -130,6 +130,13 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } $item_id = $request->getURIData('itemID'); + + // If we miss on the MenuEngine route, try the EditEngine route. This will + // be populated while editing items. + if (!$item_id) { + $item_id = $request->getURIData('id'); + } + $item_list = $this->getItems(); $selected_item = null; From 4890d667955b52c2dd526a9fb726ff4946b9707e Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 13:16:09 -0800 Subject: [PATCH 19/49] Excluded authored commits from "Ready to Audit"; handle unreachable commits better Summary: Ref T10978. I'm inching toward cleaning up our audit state. Two issues are: - Authored commits show up in "Ready to Audit", but should not. - Unreachable commits (like that stacked of unsquashed stuff) show up too, but we don't really care about them. Kick authored stuff out of the "Ready to Audit" bucket and hide unreachable commits by default, with constraints for filtering. Also give them a closed/disabled/strikethru style. Test Plan: - Viewed audit buckets. - Searched for reachable/unreachable commits. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10978 Differential Revision: https://secure.phabricator.com/D17279 --- .../query/PhabricatorCommitSearchEngine.php | 18 +++++++++++++++- .../audit/view/PhabricatorAuditListView.php | 1 + .../diffusion/query/DiffusionCommitQuery.php | 21 +++++++++++++++++++ ...fusionCommitRequiredActionResultBucket.php | 4 ++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/applications/audit/query/PhabricatorCommitSearchEngine.php b/src/applications/audit/query/PhabricatorCommitSearchEngine.php index 0b7d01ad86..7f429dd596 100644 --- a/src/applications/audit/query/PhabricatorCommitSearchEngine.php +++ b/src/applications/audit/query/PhabricatorCommitSearchEngine.php @@ -49,6 +49,10 @@ final class PhabricatorCommitSearchEngine $query->withPackagePHIDs($map['packagePHIDs']); } + if ($map['unreachable'] !== null) { + $query->withUnreachable($map['unreachable']); + } + return $query; } @@ -88,6 +92,17 @@ final class PhabricatorCommitSearchEngine ->setConduitKey('packages') ->setAliases(array('package', 'packages', 'packagePHID')) ->setDatasource(new PhabricatorOwnersPackageDatasource()), + id(new PhabricatorSearchThreeStateField()) + ->setLabel(pht('Unreachable')) + ->setKey('unreachable') + ->setOptions( + pht('(Show All)'), + pht('Show Only Unreachable Commits'), + pht('Hide Unreachable Commits')) + ->setDescription( + pht( + 'Find or exclude unreachable commits which are not ancestors of '. + 'any branch, tag, or ref.')), ); } @@ -126,7 +141,8 @@ final class PhabricatorCommitSearchEngine $query ->setParameter('responsiblePHIDs', array($viewer_phid)) ->setParameter('statuses', $open) - ->setParameter('bucket', $bucket_key); + ->setParameter('bucket', $bucket_key) + ->setParameter('unreachable', false); return $query; case 'authored': $query diff --git a/src/applications/audit/view/PhabricatorAuditListView.php b/src/applications/audit/view/PhabricatorAuditListView.php index 9207230e7c..e249406724 100644 --- a/src/applications/audit/view/PhabricatorAuditListView.php +++ b/src/applications/audit/view/PhabricatorAuditListView.php @@ -140,6 +140,7 @@ final class PhabricatorAuditListView extends AphrontView { ->setObjectName($commit_name) ->setHeader($commit_desc) ->setHref($commit_link) + ->setDisabled($commit->isUnreachable()) ->addByline(pht('Author: %s', $author_name)) ->addIcon('none', $committed); diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php index 40fb5a64f6..1521f5770c 100644 --- a/src/applications/diffusion/query/DiffusionCommitQuery.php +++ b/src/applications/diffusion/query/DiffusionCommitQuery.php @@ -14,6 +14,7 @@ final class DiffusionCommitQuery private $responsiblePHIDs; private $statuses; private $packagePHIDs; + private $unreachable; private $needAuditRequests; private $auditIDs; @@ -130,6 +131,11 @@ final class DiffusionCommitQuery return $this; } + public function withUnreachable($unreachable) { + $this->unreachable = $unreachable; + return $this; + } + public function withStatuses(array $statuses) { $this->statuses = $statuses; return $this; @@ -503,6 +509,21 @@ final class DiffusionCommitQuery $this->packagePHIDs); } + if ($this->unreachable !== null) { + if ($this->unreachable) { + $where[] = qsprintf( + $conn, + '(commit.importStatus & %d) = %d', + PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE, + PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE); + } else { + $where[] = qsprintf( + $conn, + '(commit.importStatus & %d) = 0', + PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE); + } + } + return $where; } diff --git a/src/applications/diffusion/query/DiffusionCommitRequiredActionResultBucket.php b/src/applications/diffusion/query/DiffusionCommitRequiredActionResultBucket.php index 405e1ecd27..41840bcb72 100644 --- a/src/applications/diffusion/query/DiffusionCommitRequiredActionResultBucket.php +++ b/src/applications/diffusion/query/DiffusionCommitRequiredActionResultBucket.php @@ -128,6 +128,10 @@ final class DiffusionCommitRequiredActionResultBucket $should_audit = array_fuse($should_audit); foreach ($objects as $key => $object) { + if (isset($phids[$object->getAuthorPHID()])) { + continue; + } + if (!$this->hasAuditorsWithStatus($object, $phids, $should_audit)) { continue; } From e8c57581924358ee9c9677611a0033a715df8825 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 13:28:50 -0800 Subject: [PATCH 20/49] Improve page titles for menu items that render in-context content Summary: Ref T12174. Dashboards and "Home" currently use the page title "Configure Menu". Give them more appropriate titles instead. Test Plan: Viewed dashboards, Home. Saw relevant page titles. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17281 --- .../search/engine/PhabricatorProfileMenuEngine.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index 319d1fa774..c480e6a481 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -214,6 +214,9 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } } } + $page_title = pht('Configure Menu'); + } else { + $page_title = $selected_item->getDisplayName(); } switch ($item_action) { @@ -293,10 +296,8 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $crumbs->setBorder(true); - // TODO: This title is not correct when viewing items. - $page = $controller->newPage() - ->setTitle(pht('Configure Menu')) + ->setTitle($page_title) ->setCrumbs($crumbs) ->appendChild($content); From 206b16d2bbe8758736d45b6d5b58a8462b4e7f7b Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 31 Jan 2017 22:36:14 +0000 Subject: [PATCH 21/49] Slightly better "Simple Dashboard" Summary: Fix copy for installing dashboard, add a revision panel, and change the default name to make it easier to find. Ref T12174 Test Plan: Go to dashboards, click New, then Simple. Visit home and install my dashboard Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17277 --- .../PhabricatorDashboardEditController.php | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php index a167c91188..09ab373950 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php @@ -245,7 +245,7 @@ final class PhabricatorDashboardEditController switch ($template) { case 'simple': - $v_name = pht('New Simple Dashboard'); + $v_name = pht("%s's Dashboard", $viewer->getUsername()); $welcome_panel = $this->newPanel( $request, @@ -260,8 +260,9 @@ final class PhabricatorDashboardEditController "rustic, authentic feel.\n\n". "You can drag, remove, add, and edit panels to customize the ". "rest of this dashboard to show the information you want.\n\n". - "To install this dashboard on the home page, use the ". - "**Install Dashboard** action link above."), + "To install this dashboard on the home page, edit your personal ". + "or global menu on the homepage and click Dashboard under ". + "New Menu Item on the right."), )); $panel_phids[] = $welcome_panel->getPHID(); @@ -276,14 +277,25 @@ final class PhabricatorDashboardEditController )); $panel_phids[] = $feed_panel->getPHID(); + $revision_panel = $this->newPanel( + $request, + $viewer, + 'query', + pht('Active Revisions'), + array( + 'class' => 'DifferentialRevisionSearchEngine', + 'key' => 'active', + )); + $panel_phids[] = $revision_panel->getPHID(); + $task_panel = $this->newPanel( $request, $viewer, 'query', - pht('Open Tasks'), + pht('Assigned Tasks'), array( 'class' => 'ManiphestTaskSearchEngine', - 'key' => 'open', + 'key' => 'assigned', )); $panel_phids[] = $task_panel->getPHID(); @@ -302,6 +314,7 @@ final class PhabricatorDashboardEditController $layout = id(new PhabricatorDashboardLayoutConfig()) ->setLayoutMode($mode_2_and_1) ->setPanelLocation(0, $welcome_panel->getPHID()) + ->setPanelLocation(0, $revision_panel->getPHID()) ->setPanelLocation(0, $task_panel->getPHID()) ->setPanelLocation(0, $commit_panel->getPHID()) ->setPanelLocation(1, $feed_panel->getPHID()); From bd9e54b62179835598591291cbf9962c5c322f8b Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 15:31:15 -0800 Subject: [PATCH 22/49] Navigage Buildkite builds with more nuance Summary: Ref T12173. - If we want to fetch a tag, Buildkite needs it as a "branch" (this means more like "ref to fetch"). - The API gets upset if we pass "refs/tags/...", so just pass the tag name without the prefix, which works. - Do a better job with commits and pass a real branch to fetch. Test Plan: - Built a commit with Buildkite. - Build a revision with Buildkite. Reviewers: chad Reviewed By: chad Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam Maniphest Tasks: T12173 Differential Revision: https://secure.phabricator.com/D17282 --- src/__phutil_library_map__.php | 3 ++ .../differential/storage/DifferentialDiff.php | 22 +++++++++++ ...arbormasterBuildkiteBuildableInterface.php | 11 ++++++ ...masterBuildkiteBuildStepImplementation.php | 6 +-- .../storage/PhabricatorRepositoryCommit.php | 39 +++++++++++++++++++ 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 src/applications/harbormaster/interface/HarbormasterBuildkiteBuildableInterface.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index eb3e2de116..cd063471a8 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1211,6 +1211,7 @@ phutil_register_library_map(array( 'HarbormasterBuildableTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildableTransactionQuery.php', 'HarbormasterBuildableViewController' => 'applications/harbormaster/controller/HarbormasterBuildableViewController.php', 'HarbormasterBuildkiteBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php', + 'HarbormasterBuildkiteBuildableInterface' => 'applications/harbormaster/interface/HarbormasterBuildkiteBuildableInterface.php', 'HarbormasterBuildkiteHookController' => 'applications/harbormaster/controller/HarbormasterBuildkiteHookController.php', 'HarbormasterBuiltinBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuiltinBuildStepGroup.php', 'HarbormasterCircleCIBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterCircleCIBuildStepImplementation.php', @@ -5091,6 +5092,7 @@ phutil_register_library_map(array( 'PhabricatorExtendedPolicyInterface', 'HarbormasterBuildableInterface', 'HarbormasterCircleCIBuildableInterface', + 'HarbormasterBuildkiteBuildableInterface', 'PhabricatorApplicationTransactionInterface', 'PhabricatorDestructibleInterface', ), @@ -8789,6 +8791,7 @@ phutil_register_library_map(array( 'PhabricatorMentionableInterface', 'HarbormasterBuildableInterface', 'HarbormasterCircleCIBuildableInterface', + 'HarbormasterBuildkiteBuildableInterface', 'PhabricatorCustomFieldInterface', 'PhabricatorApplicationTransactionInterface', 'PhabricatorFulltextInterface', diff --git a/src/applications/differential/storage/DifferentialDiff.php b/src/applications/differential/storage/DifferentialDiff.php index d8c2ea9786..8976fdd8f0 100644 --- a/src/applications/differential/storage/DifferentialDiff.php +++ b/src/applications/differential/storage/DifferentialDiff.php @@ -7,6 +7,7 @@ final class DifferentialDiff PhabricatorExtendedPolicyInterface, HarbormasterBuildableInterface, HarbormasterCircleCIBuildableInterface, + HarbormasterBuildkiteBuildableInterface, PhabricatorApplicationTransactionInterface, PhabricatorDestructibleInterface { @@ -621,6 +622,27 @@ final class DifferentialDiff return $ref; } + +/* -( HarbormasterBuildkiteBuildableInterface )---------------------------- */ + + public function getBuildkiteBranch() { + $ref = $this->getStagingRef(); + + // NOTE: Circa late January 2017, Buildkite fails with the error message + // "Tags have been disabled for this project" if we pass the "refs/tags/" + // prefix via the API and the project doesn't have GitHub tag builds + // enabled, even if GitHub builds are disabled. The tag builds fine + // without this prefix. + $ref = preg_replace('(^refs/tags/)', '', $ref); + + return $ref; + } + + public function getBuildkiteCommit() { + return 'HEAD'; + } + + public function getStagingRef() { // TODO: We're just hoping to get lucky. Instead, `arc` should store // where it sent changes and we should only provide staging details diff --git a/src/applications/harbormaster/interface/HarbormasterBuildkiteBuildableInterface.php b/src/applications/harbormaster/interface/HarbormasterBuildkiteBuildableInterface.php new file mode 100644 index 0000000000..6d44d034f4 --- /dev/null +++ b/src/applications/harbormaster/interface/HarbormasterBuildkiteBuildableInterface.php @@ -0,0 +1,11 @@ +getBuildable(); $object = $buildable->getBuildableObject(); - if (!($object instanceof HarbormasterCircleCIBuildableInterface)) { + if (!($object instanceof HarbormasterBuildkiteBuildableInterface)) { throw new Exception( pht('This object does not support builds with Buildkite.')); } @@ -89,8 +89,8 @@ EOTEXT $pipeline); $data_structure = array( - 'commit' => $object->getCircleCIBuildIdentifier(), - 'branch' => 'master', + 'commit' => $object->getBuildkiteCommit(), + 'branch' => $object->getBuildkiteBranch(), 'message' => pht( 'Harbormaster Build %s ("%s") for %s', $build->getID(), diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php index 9eac5e6bf6..c6ddece457 100644 --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -11,6 +11,7 @@ final class PhabricatorRepositoryCommit PhabricatorMentionableInterface, HarbormasterBuildableInterface, HarbormasterCircleCIBuildableInterface, + HarbormasterBuildkiteBuildableInterface, PhabricatorCustomFieldInterface, PhabricatorApplicationTransactionInterface, PhabricatorFulltextInterface, @@ -590,6 +591,44 @@ final class PhabricatorRepositoryCommit } +/* -( HarbormasterBuildkiteBuildableInterface )---------------------------- */ + + + public function getBuildkiteBranch() { + $viewer = PhabricatorUser::getOmnipotentUser(); + $repository = $this->getRepository(); + + $branches = DiffusionQuery::callConduitWithDiffusionRequest( + $viewer, + DiffusionRequest::newFromDictionary( + array( + 'repository' => $repository, + 'user' => $viewer, + )), + 'diffusion.branchquery', + array( + 'contains' => $this->getCommitIdentifier(), + 'repository' => $repository->getPHID(), + )); + + if (!$branches) { + throw new Exception( + pht( + 'Commit "%s" is not an ancestor of any branch head, so it can not '. + 'be built with Buildkite.', + $this->getCommitIdentifier())); + } + + $branch = head($branches); + + return 'refs/heads/'.$branch['shortName']; + } + + public function getBuildkiteCommit() { + return $this->getCommitIdentifier(); + } + + /* -( PhabricatorCustomFieldInterface )------------------------------------ */ From 9b92e56dfc033d298393617fcbd59357d5dd1e7b Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 31 Jan 2017 18:52:18 -0800 Subject: [PATCH 23/49] Don't link "Dxxx" on Differential revision pages Summary: Ref T12027. See T12043 for discussion. Test Plan: Double-clicked "Dxxx" to select it. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12027 Differential Revision: https://secure.phabricator.com/D17283 --- .../controller/DifferentialRevisionViewController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/applications/differential/controller/DifferentialRevisionViewController.php b/src/applications/differential/controller/DifferentialRevisionViewController.php index f126345fb7..d31da8fefc 100644 --- a/src/applications/differential/controller/DifferentialRevisionViewController.php +++ b/src/applications/differential/controller/DifferentialRevisionViewController.php @@ -443,7 +443,7 @@ final class DifferentialRevisionViewController extends DifferentialController { $operations_box = $this->buildOperationsBox($revision); $crumbs = $this->buildApplicationCrumbs(); - $crumbs->addTextCrumb($monogram, $revision->getURI()); + $crumbs->addTextCrumb($monogram); $crumbs->setBorder(true); $filetree_on = $viewer->compareUserSetting( From f4dbe6330af2f7bc998ced2614d2125788e74940 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 31 Jan 2017 22:14:45 -0800 Subject: [PATCH 24/49] Use a label for default home menu Summary: Ref T12174, I think this feels slightly nicer having "Applications" Test Plan: Review home changes Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17287 --- .../home/constants/PhabricatorHomeConstants.php | 1 + .../home/engine/PhabricatorHomeProfileMenuEngine.php | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/applications/home/constants/PhabricatorHomeConstants.php b/src/applications/home/constants/PhabricatorHomeConstants.php index 965dfbda77..b639c79abd 100644 --- a/src/applications/home/constants/PhabricatorHomeConstants.php +++ b/src/applications/home/constants/PhabricatorHomeConstants.php @@ -6,5 +6,6 @@ final class PhabricatorHomeConstants const ITEM_HOME = 'home.dashboard'; const ITEM_LAUNCHER = 'home.launcher'; const ITEM_MANAGE = 'home.manage.menu'; + const ITEM_APPS_LABEL = 'home.apps.label'; } diff --git a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php index 8fd141c951..888dec6a8e 100644 --- a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php +++ b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php @@ -26,8 +26,12 @@ final class PhabricatorHomeProfileMenuEngine // Default Home Dashboard $items[] = $this->newItem() ->setBuiltinKey(PhabricatorHomeConstants::ITEM_HOME) - ->setMenuItemKey( - PhabricatorHomeProfileMenuItem::MENUITEMKEY); + ->setMenuItemKey(PhabricatorHomeProfileMenuItem::MENUITEMKEY); + + $items[] = $this->newItem() + ->setBuiltinKey(PhabricatorHomeConstants::ITEM_APPS_LABEL) + ->setMenuItemKey(PhabricatorLabelProfileMenuItem::MENUITEMKEY) + ->setMenuItemProperties(array('name' => pht('Applications'))); foreach ($applications as $application) { if (!$application->isPinnedByDefault($viewer)) { @@ -48,8 +52,7 @@ final class PhabricatorHomeProfileMenuEngine // Hotlink to More Applications Launcher... $items[] = $this->newItem() ->setBuiltinKey(PhabricatorHomeConstants::ITEM_LAUNCHER) - ->setMenuItemKey( - PhabricatorHomeLauncherProfileMenuItem::MENUITEMKEY); + ->setMenuItemKey(PhabricatorHomeLauncherProfileMenuItem::MENUITEMKEY); $items[] = $this->newManageItem(); From 7fc8e19786752c0244ad687f45f35c8fb0a78dbb Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 31 Jan 2017 19:47:57 -0800 Subject: [PATCH 25/49] Add some style to label in Favorites Menu Summary: Ref T12174. Always sets the correct type when converting to ActionList, adds a type to Divider. Test Plan: Add a Label, 2 applications to the personal favorites menu, see nice styles. {F2554901} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17285 --- .../PhabricatorFavoritesMainMenuBarExtension.php | 6 +----- .../search/menuitem/PhabricatorDividerProfileMenuItem.php | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php index 63d8726857..9afb836b94 100644 --- a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php +++ b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php @@ -61,14 +61,10 @@ final class PhabricatorFavoritesMainMenuBarExtension $view = id(new PhabricatorActionListView()) ->setViewer($viewer); foreach ($item_views as $item) { - $type = null; - if (!strlen($item->getName())) { - $type = PhabricatorActionView::TYPE_DIVIDER; - } $action = id(new PhabricatorActionView()) ->setName($item->getName()) ->setHref($item->getHref()) - ->setType($type); + ->setType($item->getType()); $view->addAction($action); } diff --git a/src/applications/search/menuitem/PhabricatorDividerProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorDividerProfileMenuItem.php index 255e0d4b72..e6a6e608e6 100644 --- a/src/applications/search/menuitem/PhabricatorDividerProfileMenuItem.php +++ b/src/applications/search/menuitem/PhabricatorDividerProfileMenuItem.php @@ -38,6 +38,7 @@ final class PhabricatorDividerProfileMenuItem PhabricatorProfileMenuItemConfiguration $config) { $item = $this->newItem() + ->setType(PHUIListItemView::TYPE_DIVIDER) ->addClass('phui-divider'); return array( From 113bdd9f7940748f3c381ea787cd2ce862ef5883 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 31 Jan 2017 19:34:16 -0800 Subject: [PATCH 26/49] Fix application name toolip hover Summary: Ref T12174. We were always setting a name via builtins so the tooltip was always set. Fix the calls here. Test Plan: Add "Badges", see tooltip, give "Badges" a name of "Badges", don't see tooltip. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17284 --- .../home/engine/PhabricatorHomeProfileMenuEngine.php | 2 +- .../search/menuitem/PhabricatorApplicationProfileMenuItem.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php index 888dec6a8e..d7ecd9db6f 100644 --- a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php +++ b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php @@ -39,7 +39,7 @@ final class PhabricatorHomeProfileMenuEngine } $properties = array( - 'name' => $application->getName(), + 'name' => '', 'application' => $application->getPHID(), ); diff --git a/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php index 3697de3403..92477522ba 100644 --- a/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php +++ b/src/applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php @@ -89,7 +89,8 @@ final class PhabricatorApplicationProfileMenuItem ->setIcon($app->getIcon()); // Don't show tooltip if they've set a custom name - if (strlen(($config->getMenuItemProperty('name')))) { + $name = $config->getMenuItemProperty('name'); + if (!strlen($name)) { $item->setTooltip($app->getShortDescription()); } From 638a9471fdea186255e21535dacef610c18c814a Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 31 Jan 2017 22:02:00 -0800 Subject: [PATCH 27/49] Crisp CSS rules for JX.Tooltip Summary: Ref T12174. More white and bolder. So crisp Test Plan: Hover. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17286 --- resources/celerity/map.php | 6 +++--- webroot/rsrc/css/aphront/tooltip.css | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 3208a994a7..10b41ca836 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => '7cd6d9cb', + 'core.pkg.css' => 'cbcffe46', 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -29,7 +29,7 @@ return array( 'rsrc/css/aphront/phabricator-nav-view.css' => 'b29426e9', 'rsrc/css/aphront/table-view.css' => '213a5981', 'rsrc/css/aphront/tokenizer.css' => '9a8cb501', - 'rsrc/css/aphront/tooltip.css' => '8f9faa9a', + 'rsrc/css/aphront/tooltip.css' => '173b9431', 'rsrc/css/aphront/typeahead-browse.css' => '8904346a', 'rsrc/css/aphront/typeahead.css' => 'd4f16145', 'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af', @@ -553,7 +553,7 @@ return array( 'aphront-panel-view-css' => '8427b78d', 'aphront-table-view-css' => '213a5981', 'aphront-tokenizer-control-css' => '9a8cb501', - 'aphront-tooltip-css' => '8f9faa9a', + 'aphront-tooltip-css' => '173b9431', 'aphront-typeahead-control-css' => 'd4f16145', 'application-search-view-css' => '20ae9d85', 'auth-css' => '0877ed6e', diff --git a/webroot/rsrc/css/aphront/tooltip.css b/webroot/rsrc/css/aphront/tooltip.css index 36ce093eff..e6ff46cbed 100644 --- a/webroot/rsrc/css/aphront/tooltip.css +++ b/webroot/rsrc/css/aphront/tooltip.css @@ -37,9 +37,10 @@ } .jx-tooltip { - color: #f9f9f9; + color: #fff; font-size: {$normalfontsize}; -webkit-font-smoothing: antialiased; + font-weight: bold; padding: 6px 8px; overflow: hidden; white-space: pre-wrap; From 3fc03c0da1067d5a07cab9ffbc8a249d5d0654bc Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 1 Feb 2017 09:55:44 -0800 Subject: [PATCH 28/49] Show magic "Home" menu item for logged-out users on public installs Summary: Ref T12174. Setup is: - Allow public access. - Don't touch the default menu. - Visit `/` while logged out. Currently, you see "magic home" as content, but don't actually see the menu item. Instead, show the menu item. Test Plan: {F2557000} Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17288 --- .../home/menuitem/PhabricatorHomeProfileMenuItem.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php index 40dd2dd41e..cc585a2702 100644 --- a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -56,10 +56,6 @@ final class PhabricatorHomeProfileMenuItem PhabricatorProfileMenuItemConfiguration $config) { $viewer = $this->getViewer(); - if (!$viewer->isLoggedIn()) { - return array(); - } - $name = $this->getDisplayName($config); $icon = 'fa-home'; $href = $this->getItemViewURI($config); From 6abdae8e7396fe755cbc2d3cfa59da3f3f400baf Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 1 Feb 2017 09:59:38 -0800 Subject: [PATCH 29/49] Allow "Magic Home" to be hidden Summary: Ref T12174. Fallback behavior on this already appears to be sensible. Test Plan: - Hid "Magic Home". - Viewed homepage with no dashboards on the menu. - Saw "Magic Home" content, with no item in the menu selected, which seems reasonable. {F2557022} Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17289 --- .../home/menuitem/PhabricatorHomeProfileMenuItem.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php index cc585a2702..94db6c4d02 100644 --- a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -13,11 +13,6 @@ final class PhabricatorHomeProfileMenuItem return pht('Home'); } - public function canHideMenuItem( - PhabricatorProfileMenuItemConfiguration $config) { - return false; - } - public function canMakeDefault( PhabricatorProfileMenuItemConfiguration $config) { return true; From fe330416813746bb49abe166cc4d06f988621570 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 1 Feb 2017 10:16:23 -0800 Subject: [PATCH 30/49] Restore old Home mobile menu behavior, hide crumbs Summary: Ref T12174. - Go back to the old mobile behavior (full-screen menu by default, click to see content). - Hide crumbs from all Home content UIs. I left them on the edit/configure UIs since they feel a little less out-of-place there and some have multiple levels. Test Plan: Viewed Home on mobile, viewed `/home/` on mobile. Also, saw no crumbs. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17290 --- .../PhabricatorHomeApplication.php | 7 +++- .../PhabricatorHomeMenuItemController.php | 12 +++++- .../engine/PhabricatorProfileMenuEngine.php | 40 +++++++++++++++---- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/applications/home/application/PhabricatorHomeApplication.php b/src/applications/home/application/PhabricatorHomeApplication.php index 7743f70c0e..f3ab64552b 100644 --- a/src/applications/home/application/PhabricatorHomeApplication.php +++ b/src/applications/home/application/PhabricatorHomeApplication.php @@ -23,7 +23,12 @@ final class PhabricatorHomeApplication extends PhabricatorApplication { public function getRoutes() { return array( '/' => 'PhabricatorHomeMenuItemController', - '/home/' => array( + + // NOTE: If you visit "/" on mobile, you get just the menu. If you visit + // "/home/" on mobile, you get the content. From the normal desktop + // UI, there's no difference between these pages. + + '/(?Phome)/' => array( '' => 'PhabricatorHomeMenuItemController', 'menu/' => $this->getProfileMenuRouting( 'PhabricatorHomeMenuItemController'), diff --git a/src/applications/home/controller/PhabricatorHomeMenuItemController.php b/src/applications/home/controller/PhabricatorHomeMenuItemController.php index 39e9faadee..ce97bba477 100644 --- a/src/applications/home/controller/PhabricatorHomeMenuItemController.php +++ b/src/applications/home/controller/PhabricatorHomeMenuItemController.php @@ -14,6 +14,11 @@ final class PhabricatorHomeMenuItemController public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); + // Test if we should show mobile users the menu or the page content: + // if you visit "/", you just get the menu. If you visit "/home/", you + // get the content. + $is_content = $request->getURIData('content'); + $application = 'PhabricatorHomeApplication'; $home_app = id(new PhabricatorApplicationQuery()) ->setViewer($viewer) @@ -24,7 +29,12 @@ final class PhabricatorHomeMenuItemController $engine = id(new PhabricatorHomeProfileMenuEngine()) ->setProfileObject($home_app) ->setCustomPHID($viewer->getPHID()) - ->setController($this); + ->setController($this) + ->setShowContentCrumbs(false); + + if (!$is_content) { + $engine->addContentPageClass('phabricator-home'); + } return $engine->buildResponse(); } diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index c480e6a481..0df6befa82 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -11,6 +11,8 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { private $navigation; private $showNavigation = true; private $editMode; + private $pageClasses = array(); + private $showContentCrumbs = true; const ITEM_CUSTOM_DIVIDER = 'engine.divider'; const ITEM_MANAGE = 'item.configure'; @@ -90,6 +92,20 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return $this->showNavigation; } + public function addContentPageClass($class) { + $this->pageClasses[] = $class; + return $this; + } + + public function setShowContentCrumbs($show_content_crumbs) { + $this->showContentCrumbs = $show_content_crumbs; + return $this; + } + + public function getShowContentCrumbs() { + return $this->showContentCrumbs; + } + abstract public function getItemURI($path); abstract protected function isMenuEngineConfigurable(); @@ -118,14 +134,13 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $item_action = 'view'; } + $is_view = ($item_action == 'view'); + // If the engine is not configurable, don't respond to any of the editing // or configuration routes. if (!$this->isMenuEngineConfigurable()) { - switch ($item_action) { - case 'view': - break; - default: - return new Aphront404Response(); + if (!$is_view) { + return new Aphront404Response(); } } @@ -159,7 +174,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { } if (!$selected_item) { - if ($item_action == 'view') { + if ($is_view) { $selected_item = $this->getDefaultItem(); } } @@ -190,7 +205,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $crumbs = $controller->buildApplicationCrumbsForEditEngine(); - if ($item_action != 'view') { + if (!$is_view) { $navigation->selectFilter(self::ITEM_MANAGE); if ($selected_item) { @@ -298,13 +313,22 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $page = $controller->newPage() ->setTitle($page_title) - ->setCrumbs($crumbs) ->appendChild($content); + if (!$is_view || $this->getShowContentCrumbs()) { + $page->setCrumbs($crumbs); + } + if ($this->getShowNavigation()) { $page->setNavigation($navigation); } + if ($is_view) { + foreach ($this->pageClasses as $class) { + $page->addClass($class); + } + } + return $page; } From 42156ed1ff6749a01e950ae1f6bc10239253973d Mon Sep 17 00:00:00 2001 From: Chad Little Date: Wed, 1 Feb 2017 14:05:39 -0800 Subject: [PATCH 31/49] Add back border on mobile search box Summary: I removed this for cleaner UI on desktop, but still looks nice on mobile. Test Plan: Test mobile, tablet, desktop search box. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D17291 --- resources/celerity/map.php | 12 ++++++------ webroot/rsrc/css/application/base/main-menu-view.css | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 10b41ca836..c812da4be5 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => 'cbcffe46', + 'core.pkg.css' => '14179847', 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -34,7 +34,7 @@ return array( 'rsrc/css/aphront/typeahead.css' => 'd4f16145', 'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af', 'rsrc/css/application/auth/auth.css' => '0877ed6e', - 'rsrc/css/application/base/main-menu-view.css' => '93519cb0', + 'rsrc/css/application/base/main-menu-view.css' => '62c04564', 'rsrc/css/application/base/notification-menu.css' => '6a697e43', 'rsrc/css/application/base/phui-theme.css' => '9f261c6b', 'rsrc/css/application/base/standard-page-view.css' => '894d8a25', @@ -795,7 +795,7 @@ return array( 'phabricator-flag-css' => 'bba8f811', 'phabricator-keyboard-shortcut' => '1ae869f2', 'phabricator-keyboard-shortcut-manager' => '4a021c10', - 'phabricator-main-menu-view' => '93519cb0', + 'phabricator-main-menu-view' => '62c04564', 'phabricator-nav-view-css' => 'b29426e9', 'phabricator-notification' => 'ccf1cbf8', 'phabricator-notification-css' => '3f6c89c9', @@ -1365,6 +1365,9 @@ return array( 'javelin-magical-init', 'javelin-util', ), + '62c04564' => array( + 'phui-theme-css', + ), '62dfea03' => array( 'javelin-install', 'javelin-util', @@ -1629,9 +1632,6 @@ return array( 'javelin-stratcom', 'javelin-dom', ), - '93519cb0' => array( - 'phui-theme-css', - ), '93ae974f' => array( 'javelin-behavior', 'javelin-dom', diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index 54eb8fc5cd..0860909382 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -177,6 +177,7 @@ font-size: {$biggestfontsize}; width: 100%; padding-left: 50px; + border: 1px solid {$lightblueborder}; } .phabricator-main-menu .phabricator-main-menu-search input:focus { From 67d9568fb5a963fd4966d6dda7e27bd4a29288ab Mon Sep 17 00:00:00 2001 From: Chad Little Date: Wed, 1 Feb 2017 16:00:33 -0800 Subject: [PATCH 32/49] Add better description to built-in Home Summary: Ref T12174. This could be a little more verbose. Test Plan: Review Global Menu Items Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17294 --- .../home/menuitem/PhabricatorHomeProfileMenuItem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php index 94db6c4d02..ec0147c78c 100644 --- a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -6,7 +6,7 @@ final class PhabricatorHomeProfileMenuItem const MENUITEMKEY = 'home.dashboard'; public function getMenuItemTypeName() { - return pht('Home'); + return pht('Built-in Homepage'); } private function getDefaultName() { From f4943a37ee7e95cfb5feaa6986e3a4db7687751d Mon Sep 17 00:00:00 2001 From: Chad Little Date: Wed, 1 Feb 2017 14:18:43 -0800 Subject: [PATCH 33/49] Unselect "home" on mobile css Summary: Ref T12174. Removed selected state CSS on mobile devices. Test Plan: Set Chrome to responsive and check each break point. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17292 --- resources/celerity/map.php | 6 +++--- webroot/rsrc/css/phui/phui-basic-nav-view.css | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index c812da4be5..6af5f0ab35 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => '14179847', + 'core.pkg.css' => 'b28c96fb', 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -130,7 +130,7 @@ return array( 'rsrc/css/phui/phui-action-list.css' => '5679229f', 'rsrc/css/phui/phui-action-panel.css' => '91c7b835', 'rsrc/css/phui/phui-badge.css' => '3baef8db', - 'rsrc/css/phui/phui-basic-nav-view.css' => 'cb4d5161', + 'rsrc/css/phui/phui-basic-nav-view.css' => '3d4b207b', 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', 'rsrc/css/phui/phui-box.css' => '269cbc99', 'rsrc/css/phui/phui-button.css' => '00ddac15', @@ -836,7 +836,7 @@ return array( 'phriction-document-css' => '4282e4ad', 'phui-action-panel-css' => '91c7b835', 'phui-badge-view-css' => '3baef8db', - 'phui-basic-nav-view-css' => 'cb4d5161', + 'phui-basic-nav-view-css' => '3d4b207b', 'phui-big-info-view-css' => 'bd903741', 'phui-box-css' => '269cbc99', 'phui-button-css' => '00ddac15', diff --git a/webroot/rsrc/css/phui/phui-basic-nav-view.css b/webroot/rsrc/css/phui/phui-basic-nav-view.css index b1db0d4010..12605cc552 100644 --- a/webroot/rsrc/css/phui/phui-basic-nav-view.css +++ b/webroot/rsrc/css/phui/phui-basic-nav-view.css @@ -31,6 +31,13 @@ background: transparent; } +.device-phone.phabricator-home .phui-basic-nav .phabricator-side-menu + .phui-list-item-selected { + background-color: transparent; + border-left-color: transparent; + font-weight: normal; +} + .phui-basic-nav.phui-navigation-shell .phabricator-nav-local { width: 205px; padding-top: 12px; From 7e3adb1257af7b6241a8e290dc33615ec99c3cb3 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Wed, 1 Feb 2017 15:25:20 -0800 Subject: [PATCH 34/49] Add FontAwesome 4.7.0 Summary: Adds most up to date version of FontAwesome Test Plan: {icon snowflake-o} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D17293 --- resources/celerity/map.php | 14 +- src/view/phui/PHUIIconView.php | 64 +++++++ webroot/rsrc/css/font/font-awesome.css | 167 +++++++++++++++++- .../font/fontawesome/fontawesome-webfont.eot | Bin 75195 -> 165742 bytes .../font/fontawesome/fontawesome-webfont.ttf | Bin 150952 -> 165548 bytes .../font/fontawesome/fontawesome-webfont.woff | Bin 89076 -> 98024 bytes .../fontawesome/fontawesome-webfont.woff2 | Bin 70700 -> 77160 bytes 7 files changed, 234 insertions(+), 11 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 6af5f0ab35..83a1db4fb2 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => 'b28c96fb', + 'core.pkg.css' => '22581832', 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -112,7 +112,7 @@ return array( 'rsrc/css/core/z-index.css' => '5e72c4e0', 'rsrc/css/diviner/diviner-shared.css' => 'aa3656aa', 'rsrc/css/font/font-aleo.css' => '8bdb2835', - 'rsrc/css/font/font-awesome.css' => '2b7ebbcc', + 'rsrc/css/font/font-awesome.css' => 'e838e088', 'rsrc/css/font/font-lato.css' => 'c7ccd872', 'rsrc/css/font/phui-font-icon-base.css' => '870a7360', 'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82', @@ -187,10 +187,10 @@ return array( 'rsrc/externals/font/aleo/aleo-regular.ttf' => '751e7479', 'rsrc/externals/font/aleo/aleo-regular.woff' => 'c3744be9', 'rsrc/externals/font/aleo/aleo-regular.woff2' => '851aa0ee', - 'rsrc/externals/font/fontawesome/fontawesome-webfont.eot' => '59b3076c', - 'rsrc/externals/font/fontawesome/fontawesome-webfont.ttf' => '45ad7e57', - 'rsrc/externals/font/fontawesome/fontawesome-webfont.woff' => 'f861e2a8', - 'rsrc/externals/font/fontawesome/fontawesome-webfont.woff2' => '0ee0f078', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.eot' => '24a7064f', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.ttf' => '0039fe26', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.woff' => 'de978a43', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.woff2' => '2a832057', 'rsrc/externals/font/lato/lato-bold.eot' => '99fbcf8c', 'rsrc/externals/font/lato/lato-bold.svg' => '2aa83045', 'rsrc/externals/font/lato/lato-bold.ttf' => '0a7141f7', @@ -584,7 +584,7 @@ return array( 'diffusion-source-css' => '68b30fd3', 'diviner-shared-css' => 'aa3656aa', 'font-aleo' => '8bdb2835', - 'font-fontawesome' => '2b7ebbcc', + 'font-fontawesome' => 'e838e088', 'font-lato' => 'c7ccd872', 'global-drag-and-drop-css' => '5c1b47c2', 'harbormaster-css' => 'f491c9f4', diff --git a/src/view/phui/PHUIIconView.php b/src/view/phui/PHUIIconView.php index cdc3825135..d6b1ad0ccd 100644 --- a/src/view/phui/PHUIIconView.php +++ b/src/view/phui/PHUIIconView.php @@ -507,6 +507,7 @@ final class PHUIIconView extends AphrontTagView { 'fa-pied-piper-square', 'fa-pied-piper', 'fa-pied-piper-alt', + 'fa-pied-piper-pp', 'fa-drupal', 'fa-joomla', 'fa-language', @@ -781,6 +782,69 @@ final class PHUIIconView extends AphrontTagView { 'fa-snapchat', 'fa-snapchat-ghost', 'fa-snapchat-square', + 'fa-first-order', + 'fa-yoast', + 'fa-themeisle', + 'fa-google-plus-circle', + 'fa-google-plus-official', + 'fa-fa', + 'fa-font-awesome', + 'fa-handshake-o', + 'fa-envelope-open', + 'fa-envelope-open-o', + 'fa-linode', + 'fa-address-book', + 'fa-address-book-o', + 'fa-vcard', + 'fa-address-card', + 'fa-vcard-o', + 'fa-address-card-o', + 'fa-user-circle', + 'fa-user-circle-o', + 'fa-user-o:before', + 'fa-id-badge', + 'fa-drivers-license', + 'fa-id-card', + 'fa-drivers-license-o', + 'fa-id-card-o', + 'fa-quora', + 'fa-free-code-camp', + 'fa-telegram', + 'fa-thermometer-4', + 'fa-thermometer', + 'fa-thermometer-full', + 'fa-thermometer-3', + 'fa-thermometer-three-quarters', + 'fa-thermometer-2', + 'fa-thermometer-half', + 'fa-thermometer-1', + 'fa-thermometer-quarter', + 'fa-thermometer-0:', + 'fa-thermometer-empty', + 'fa-shower', + 'fa-bathtub', + 'fa-s15', + 'fa-bath', + 'fa-podcast', + 'fa-window-maximize', + 'fa-window-minimize', + 'fa-window-restore', + 'fa-times-rectangle', + 'fa-window-close', + 'fa-times-rectangle-o', + 'fa-window-close-o', + 'fa-bandcamp', + 'fa-grav', + 'fa-etsy', + 'fa-imdb', + 'fa-ravelry', + 'fa-eercast', + 'fa-microchip', + 'fa-snowflake-o', + 'fa-superpowers', + 'fa-wpexplorer', + 'fa-meetup', + ); } diff --git a/webroot/rsrc/css/font/font-awesome.css b/webroot/rsrc/css/font/font-awesome.css index 4157229cb3..1579f70f22 100644 --- a/webroot/rsrc/css/font/font-awesome.css +++ b/webroot/rsrc/css/font/font-awesome.css @@ -3,15 +3,15 @@ */ /*! - * Font Awesome 4.6.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; - src: url('/rsrc/externals/font/fontawesome/fontawesome-webfont.eot?v=4.6.0'); - src: url('/rsrc/externals/font/fontawesome/fontawesome-webfont.eot?#iefix&v=4.6.0') format('embedded-opentype'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.woff2?v=4.6.0') format('woff2'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.woff?v=4.6.0') format('woff'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.ttf?v=4.6.0') format('truetype'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.svg?v=4.6.0#fontawesomeregular') format('svg'); + src: url('/rsrc/externals/font/fontawesome/fontawesome-webfont.eot?v=4.7.0'); + src: url('/rsrc/externals/font/fontawesome/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('/rsrc/externals/font/fontawesome/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } @@ -1246,7 +1246,7 @@ .fa-digg:before { content: "\f1a6"; } -.fa-pied-piper:before { +.fa-pied-piper-pp:before { content: "\f1a7"; } .fa-pied-piper-alt:before { @@ -1372,6 +1372,7 @@ content: "\f1ce"; } .fa-ra:before, +.fa-resistance:before, .fa-rebel:before { content: "\f1d0"; } @@ -1694,6 +1695,7 @@ content: "\f23e"; } .fa-battery-4:before, +.fa-battery:before, .fa-battery-full:before { content: "\f240"; } @@ -2020,6 +2022,163 @@ .fa-snapchat-square:before { content: "\f2ad"; } +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} .sr-only { position: absolute; width: 1px; diff --git a/webroot/rsrc/externals/font/fontawesome/fontawesome-webfont.eot b/webroot/rsrc/externals/font/fontawesome/fontawesome-webfont.eot index b15a0f51317b921c627f0eec5d65f4918fa8d30b..e9f60ca953f93e35eab4108bd414bc02ddcf3928 100644 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 delta 6119 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 89076 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%0DU? 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%0Dw7$a!ldZ#gG?59E(wUEcxCT;ltnQOBGbpA=(DTO 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 diff --git a/webroot/rsrc/externals/font/fontawesome/fontawesome-webfont.woff2 b/webroot/rsrc/externals/font/fontawesome/fontawesome-webfont.woff2 index 65aeb01eb7845db93347990f40a5a9652c0338c0..4d13fc60404b91e398a37200c4a77b645cfd9586 100644 GIT binary patch literal 77160 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 literal 70700 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 f_|nI5dZ)@_sr^O6RIv5*c{5}5xqrA3` From d0258a89817530faa66013345eeccbef728cccbf Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 2 Feb 2017 06:01:41 -0800 Subject: [PATCH 35/49] Fix a mismatched method definition in PhabricatorHomeProfileMenuItem Summary: Fixes T12187. Ref T12190. See T12190 for discussion of why this escaped notice. Test Plan: - Commented out the `error_reporting()` clause around file inclusion. - Reproduced the error in PHP7. - Corrected the method signature. - Reloaded the page, no more error. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12190, T12187 Differential Revision: https://secure.phabricator.com/D17297 --- .../home/menuitem/PhabricatorHomeProfileMenuItem.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php index ec0147c78c..8b3eb4fe2d 100644 --- a/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php +++ b/src/applications/home/menuitem/PhabricatorHomeProfileMenuItem.php @@ -29,7 +29,8 @@ final class PhabricatorHomeProfileMenuItem return $this->getDefaultName(); } - public function newPageContent() { + public function newPageContent( + PhabricatorProfileMenuItemConfiguration $config) { $viewer = $this->getViewer(); return id(new PHUIHomeView()) From 1b8b64aae6628178ba309f9919207f3a74cd3c86 Mon Sep 17 00:00:00 2001 From: Josh Cox Date: Wed, 14 Dec 2016 14:41:26 -0500 Subject: [PATCH 36/49] Stop calling the undefined `withIsTag` method Summary: This just cleans up a method call that was missed in D15986. It's been causing fatal errors in one of our workflows. Test Plan: Grep'd for other instances of `withIsTag` and didn't find any Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, yelirekim Differential Revision: https://secure.phabricator.com/D17299 --- .../query/lowlevel/DiffusionLowLevelResolveRefsQuery.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php index 8f9493a67a..f12dfcf4c0 100644 --- a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php +++ b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php @@ -178,7 +178,10 @@ final class DiffusionLowLevelResolveRefsQuery // repositories with a huge number of tags. $tag_refs = id(new DiffusionLowLevelGitRefQuery()) ->setRepository($repository) - ->withIsTag(true) + ->withRefTypes( + array( + PhabricatorRepositoryRefCursor::TYPE_TAG, + )) ->executeQuery(); foreach ($tag_refs as $tag_ref) { $tag_map[$tag_ref->getShortName()] = $tag_ref->getCommitIdentifier(); From e980b94a2f6e64f710e6bc03b84ee184a61f79a7 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Wed, 1 Feb 2017 21:21:08 -0800 Subject: [PATCH 37/49] Add a Picture Menu Item for Profiles Summary: Just making profiles a little nicer, adds a big picture, easier mechanism for updating photos. Also larger profile pictures... need to re-thumb? Test Plan: View my profile, edit my picture, view a stranger, see profile. Check mobile, tablet, desktop. Check action menu on mobile. {F2559394} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D17295 --- resources/celerity/map.php | 6 +- src/__phutil_library_map__.php | 2 + .../PhabricatorFileThumbnailTransform.php | 4 +- .../PhabricatorPeopleProfileController.php | 3 +- .../PhabricatorPeopleProfileMenuEngine.php | 5 ++ ...habricatorPeopleDetailsProfileMenuItem.php | 7 +- ...habricatorPeoplePictureProfileMenuItem.php | 76 +++++++++++++++++++ .../people/people-picture-menu-item.css | 18 +++++ .../css/application/project/project-view.css | 8 ++ 9 files changed, 119 insertions(+), 10 deletions(-) create mode 100644 src/applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php create mode 100644 webroot/rsrc/css/application/people/people-picture-menu-item.css diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 83a1db4fb2..e72d411649 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -81,6 +81,7 @@ return array( 'rsrc/css/application/objectselector/object-selector.css' => '85ee8ce6', 'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b', 'rsrc/css/application/paste/paste.css' => '1898e534', + 'rsrc/css/application/people/people-picture-menu-item.css' => '1ac65ef7', 'rsrc/css/application/people/people-profile.css' => '2473d929', 'rsrc/css/application/phame/phame.css' => '53fa6236', 'rsrc/css/application/pholio/pholio-edit.css' => '07676f51', @@ -96,7 +97,7 @@ return array( 'rsrc/css/application/policy/policy.css' => '957ea14c', 'rsrc/css/application/ponder/ponder-view.css' => 'fbd45f96', 'rsrc/css/application/project/project-card-view.css' => 'f25746f5', - 'rsrc/css/application/project/project-view.css' => '6936dc6e', + 'rsrc/css/application/project/project-view.css' => 'ceabdbaa', 'rsrc/css/application/releeph/releeph-core.css' => '9b3c5733', 'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5', 'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd', @@ -777,6 +778,7 @@ return array( 'owners-path-editor-css' => '2f00933b', 'paste-css' => '1898e534', 'path-typeahead' => 'f7fc67ec', + 'people-picture-menu-item-css' => '1ac65ef7', 'people-profile-css' => '2473d929', 'phabricator-action-list-view-css' => '5679229f', 'phabricator-busy' => '59a7976a', @@ -904,7 +906,7 @@ return array( 'policy-transaction-detail-css' => '82100a43', 'ponder-view-css' => 'fbd45f96', 'project-card-view-css' => 'f25746f5', - 'project-view-css' => '6936dc6e', + 'project-view-css' => 'ceabdbaa', 'releeph-core' => '9b3c5733', 'releeph-preview-branch' => 'b7a6f4a5', 'releeph-request-differential-create-dialog' => '8d8b92cd', diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index cd063471a8..8743fc205b 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -3323,6 +3323,7 @@ phutil_register_library_map(array( 'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php', 'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php', 'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php', + 'PhabricatorPeoplePictureProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php', 'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php', 'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php', 'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php', @@ -8455,6 +8456,7 @@ phutil_register_library_map(array( 'PhabricatorPeopleNewController' => 'PhabricatorPeopleController', 'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorPeoplePictureProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController', 'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController', 'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController', diff --git a/src/applications/files/transform/PhabricatorFileThumbnailTransform.php b/src/applications/files/transform/PhabricatorFileThumbnailTransform.php index 546021fc95..2c61743078 100644 --- a/src/applications/files/transform/PhabricatorFileThumbnailTransform.php +++ b/src/applications/files/transform/PhabricatorFileThumbnailTransform.php @@ -58,9 +58,9 @@ final class PhabricatorFileThumbnailTransform public function generateTransforms() { return array( id(new PhabricatorFileThumbnailTransform()) - ->setName(pht("Profile (200px \xC3\x97 200px)")) + ->setName(pht("Profile (400px \xC3\x97 400px)")) ->setKey(self::TRANSFORM_PROFILE) - ->setDimensions(200, 200) + ->setDimensions(400, 400) ->setScaleUp(true), id(new PhabricatorFileThumbnailTransform()) ->setName(pht("Pinboard (280px \xC3\x97 210px)")) diff --git a/src/applications/people/controller/PhabricatorPeopleProfileController.php b/src/applications/people/controller/PhabricatorPeopleProfileController.php index b33bf9c863..bd44169ef7 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileController.php @@ -98,7 +98,8 @@ abstract class PhabricatorPeopleProfileController $header = id(new PHUIHeaderView()) ->setHeader(array($user->getFullName(), $tag)) ->setImage($picture) - ->setProfileHeader(true); + ->setProfileHeader(true) + ->addClass('people-profile-header'); if ($user->getIsDisabled()) { $header->setStatus('fa-ban', 'red', pht('Disabled')); diff --git a/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php b/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php index 3d67872772..2fd2ec3bd2 100644 --- a/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php +++ b/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php @@ -5,6 +5,7 @@ final class PhabricatorPeopleProfileMenuEngine const ITEM_PROFILE = 'people.profile'; const ITEM_MANAGE = 'people.manage'; + const ITEM_PICTURE = 'people.picture'; protected function isMenuEngineConfigurable() { return false; @@ -22,6 +23,10 @@ final class PhabricatorPeopleProfileMenuEngine $items = array(); + $items[] = $this->newItem() + ->setBuiltinKey(self::ITEM_PICTURE) + ->setMenuItemKey(PhabricatorPeoplePictureProfileMenuItem::MENUITEMKEY); + $items[] = $this->newItem() ->setBuiltinKey(self::ITEM_PROFILE) ->setMenuItemKey(PhabricatorPeopleDetailsProfileMenuItem::MENUITEMKEY); diff --git a/src/applications/people/menuitem/PhabricatorPeopleDetailsProfileMenuItem.php b/src/applications/people/menuitem/PhabricatorPeopleDetailsProfileMenuItem.php index 0f5cb6c1fa..d7d36b4ed5 100644 --- a/src/applications/people/menuitem/PhabricatorPeopleDetailsProfileMenuItem.php +++ b/src/applications/people/menuitem/PhabricatorPeopleDetailsProfileMenuItem.php @@ -39,17 +39,14 @@ final class PhabricatorPeopleDetailsProfileMenuItem PhabricatorProfileMenuItemConfiguration $config) { $user = $config->getProfileObject(); - - $picture = $user->getProfileImageURI(); - $name = $user->getUsername(); $href = urisprintf( '/p/%s/', $user->getUsername()); $item = $this->newItem() ->setHref($href) - ->setName($name) - ->setProfileImage($picture); + ->setName(pht('Profile')) + ->setIcon('fa-user'); return array( $item, diff --git a/src/applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php b/src/applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php new file mode 100644 index 0000000000..89fb7b9681 --- /dev/null +++ b/src/applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php @@ -0,0 +1,76 @@ +getDefaultName(); + } + + public function buildEditEngineFields( + PhabricatorProfileMenuItemConfiguration $config) { + return array(); + } + + protected function newNavigationMenuItems( + PhabricatorProfileMenuItemConfiguration $config) { + + $user = $config->getProfileObject(); + require_celerity_resource('people-picture-menu-item-css'); + + $picture = $user->getProfileImageURI(); + $name = $user->getUsername(); + $href = urisprintf( + '/p/%s/', + $user->getUsername()); + + $photo = phutil_tag( + 'img', + array( + 'src' => $picture, + 'class' => 'people-menu-image', + )); + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $this->getViewer(), + $user, + PhabricatorPolicyCapability::CAN_EDIT); + + if ($can_edit) { + $id = $user->getID(); + $href = "/people/picture/{$id}/"; + } + + $view = phutil_tag_div('people-menu-image-container', $photo); + $view = phutil_tag( + 'a', + array( + 'href' => $href, + ), + $view); + + $item = $this->newItem() + ->appendChild($view); + + return array( + $item, + ); + } + +} diff --git a/webroot/rsrc/css/application/people/people-picture-menu-item.css b/webroot/rsrc/css/application/people/people-picture-menu-item.css new file mode 100644 index 0000000000..4f3d36fa9d --- /dev/null +++ b/webroot/rsrc/css/application/people/people-picture-menu-item.css @@ -0,0 +1,18 @@ +/** + * @provides people-picture-menu-item-css + */ + +.people-menu-image { + width: 160px; + height: 160px; + border: 1px solid {$thinblueborder}; +} + +.people-menu-image-container { + background: #fff; + padding: 4px; + border-radius: 3px; + border: 1px solid {$lightblueborder}; + margin: 4px 0px 16px 20px; + display: inline-block; +} diff --git a/webroot/rsrc/css/application/project/project-view.css b/webroot/rsrc/css/application/project/project-view.css index 5b72e1c9eb..9ba6a9f7e5 100644 --- a/webroot/rsrc/css/application/project/project-view.css +++ b/webroot/rsrc/css/application/project/project-view.css @@ -87,3 +87,11 @@ .profile-no-badges { padding: 24px 0; } + +.people-profile-header.phui-profile-header .phui-header-col1 { + display: none; +} + +.device .people-profile-header.phui-profile-header .phui-header-col1 { + display: table-cell; +} From c0e357345412f8e1d73029652e443db8722a4e36 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Thu, 2 Feb 2017 14:08:13 -0800 Subject: [PATCH 38/49] Break long words on txt files in Diffusion Summary: Fixes T12163. We don't send txt files through a pygment highlighter, so the break-word needs to also just apply to diffusion-source. Test Plan: Test in Chrome Inspector Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12163 Differential Revision: https://secure.phabricator.com/D17303 --- resources/celerity/map.php | 4 ++-- webroot/rsrc/css/application/diffusion/diffusion-source.css | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index e72d411649..f8cee9cf98 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -67,7 +67,7 @@ return array( 'rsrc/css/application/differential/table-of-contents.css' => 'ae4b7a55', 'rsrc/css/application/diffusion/diffusion-icons.css' => 'd678600a', 'rsrc/css/application/diffusion/diffusion-readme.css' => '297373eb', - 'rsrc/css/application/diffusion/diffusion-source.css' => '68b30fd3', + 'rsrc/css/application/diffusion/diffusion-source.css' => '750add59', 'rsrc/css/application/feed/feed.css' => 'ecd4ec57', 'rsrc/css/application/files/global-drag-and-drop.css' => '5c1b47c2', 'rsrc/css/application/flag/flag.css' => 'bba8f811', @@ -582,7 +582,7 @@ return array( 'differential-table-of-contents-css' => 'ae4b7a55', 'diffusion-icons-css' => 'd678600a', 'diffusion-readme-css' => '297373eb', - 'diffusion-source-css' => '68b30fd3', + 'diffusion-source-css' => '750add59', 'diviner-shared-css' => 'aa3656aa', 'font-aleo' => '8bdb2835', 'font-fontawesome' => 'e838e088', diff --git a/webroot/rsrc/css/application/diffusion/diffusion-source.css b/webroot/rsrc/css/application/diffusion/diffusion-source.css index 7f404e3b9b..1af068fe1a 100644 --- a/webroot/rsrc/css/application/diffusion/diffusion-source.css +++ b/webroot/rsrc/css/application/diffusion/diffusion-source.css @@ -26,6 +26,7 @@ padding-bottom: 1px; padding-left: 8px; width: 100%; + word-break: break-all; } .diffusion-browse-type-form { From d182d7eaf1d10e8969dbdb1efac6dce887585152 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 2 Feb 2017 07:37:53 -0800 Subject: [PATCH 39/49] Remove menu item pinning from Home and Favorites profile menus Summary: Ref T12174. - Home now always uses the topmost item (falling back to "magic home") and no longer supports pinning. If any personal item may be a default item, it will always be picked over any global item. - Favorites doesn't use defaults anyway, but no longer has misleading UI suggesting it might. Test Plan: - Saw no pinning UI on Home/Favorites. - Added a personal dashboard on Home, it automatically became the new default. - Pinned stuff normally on Projects. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17298 --- .../engine/PhabricatorProfileMenuEngine.php | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index 0df6befa82..8cd64763bb 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -287,6 +287,9 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $content = $this->buildItemHideContent($selected_item); break; case 'default': + if (!$this->isMenuEnginePinnable()) { + return new Aphront404Response(); + } $content = $this->buildItemDefaultContent( $selected_item, $item_list); @@ -459,9 +462,13 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { continue; } - if ($item->isDefault()) { - $default = $item; - break; + // If this engine doesn't support pinning items, don't respect any + // setting which might be present in the database. + if ($this->isMenuEnginePinnable()) { + if ($item->isDefault()) { + $default = $item; + break; + } } if ($first === null) { @@ -709,6 +716,18 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { return true; } + /** + * Does this engine support pinning items? + * + * Personalizable menus disable pinning by default since it creates a number + * of weird edge cases without providing many benefits for current menus. + * + * @return bool True if items may be pinned as default items. + */ + protected function isMenuEnginePinnable() { + return !$this->isMenuEnginePersonalizable(); + } + private function buildMenuEditModeContent() { $viewer = $this->getViewer(); @@ -833,14 +852,16 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { $default_uri = $this->getItemURI("default/{$builtin_key}/"); } - if ($item->isDefault()) { - $default_icon = 'fa-thumb-tack green'; - $default_text = pht('Current Default'); - } else if ($item->canMakeDefault()) { - $default_icon = 'fa-thumb-tack'; - $default_text = pht('Make Default'); - } else { - $default_text = null; + $default_text = null; + + if ($this->isMenuEnginePinnable()) { + if ($item->isDefault()) { + $default_icon = 'fa-thumb-tack green'; + $default_text = pht('Current Default'); + } else if ($item->canMakeDefault()) { + $default_icon = 'fa-thumb-tack'; + $default_text = pht('Make Default'); + } } if ($default_text !== null) { From dd068a071ee4bf21a7b1744611297143a723df55 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Thu, 2 Feb 2017 20:20:59 -0800 Subject: [PATCH 40/49] Add clearer saved search options in ApplicationSearch Summary: Ref T5307, Makes these buttons a little more clear visually and verbosely. Adds white icons for blue buttons. Test Plan: Test saving a search, viewing button changes on various form pages / uiexamples. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T5307 Differential Revision: https://secure.phabricator.com/D17305 --- resources/celerity/map.php | 6 +++--- ...PhabricatorApplicationSearchController.php | 11 ++++++---- .../form/control/AphrontFormSubmitControl.php | 21 +++++++++++-------- webroot/rsrc/css/phui/phui-button.css | 12 +++++++++++ 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index f8cee9cf98..1edffe21d4 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => '22581832', + 'core.pkg.css' => '022cdeed', 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -134,7 +134,7 @@ return array( 'rsrc/css/phui/phui-basic-nav-view.css' => '3d4b207b', 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', 'rsrc/css/phui/phui-box.css' => '269cbc99', - 'rsrc/css/phui/phui-button.css' => '00ddac15', + 'rsrc/css/phui/phui-button.css' => '7eaff361', 'rsrc/css/phui/phui-chart.css' => '6bf6f78e', 'rsrc/css/phui/phui-cms.css' => 'be43c8a8', 'rsrc/css/phui/phui-comment-form.css' => '48fbd65d', @@ -841,7 +841,7 @@ return array( 'phui-basic-nav-view-css' => '3d4b207b', 'phui-big-info-view-css' => 'bd903741', 'phui-box-css' => '269cbc99', - 'phui-button-css' => '00ddac15', + 'phui-button-css' => '7eaff361', 'phui-calendar-css' => '477acfaa', 'phui-calendar-day-css' => '572b1893', 'phui-calendar-list-css' => 'eb5c774b', diff --git a/src/applications/search/controller/PhabricatorApplicationSearchController.php b/src/applications/search/controller/PhabricatorApplicationSearchController.php index cdd6b9335a..c7c2b432b4 100644 --- a/src/applications/search/controller/PhabricatorApplicationSearchController.php +++ b/src/applications/search/controller/PhabricatorApplicationSearchController.php @@ -169,12 +169,15 @@ final class PhabricatorApplicationSearchController } $submit = id(new AphrontFormSubmitControl()) - ->setValue(pht('Execute Query')); + ->setValue(pht('Search')); if ($run_query && !$named_query && $user->isLoggedIn()) { - $submit->addCancelButton( - '/search/edit/'.$saved_query->getQueryKey().'/', - pht('Save Custom Query...')); + $save_button = id(new PHUIButtonView()) + ->setTag('a') + ->setHref('/search/edit/'.$saved_query->getQueryKey().'/') + ->setText(pht('Save Query')) + ->setIcon('fa-floppy-o'); + $submit->addButton($save_button); } // TODO: A "Create Dashboard Panel" action goes here somewhere once diff --git a/src/view/form/control/AphrontFormSubmitControl.php b/src/view/form/control/AphrontFormSubmitControl.php index 2d4bb09f5e..c2bf716848 100644 --- a/src/view/form/control/AphrontFormSubmitControl.php +++ b/src/view/form/control/AphrontFormSubmitControl.php @@ -2,20 +2,23 @@ final class AphrontFormSubmitControl extends AphrontFormControl { - private $cancelButton; + private $buttons = array(); public function addCancelButton($href, $label = null) { if (!$label) { $label = pht('Cancel'); } + $button = id(new PHUIButtonView()) + ->setTag('a') + ->setHref($href) + ->setText($label) + ->setColor(PHUIButtonView::GREY); + $this->addButton($button); + return $this; + } - $this->cancelButton = phutil_tag( - 'a', - array( - 'href' => $href, - 'class' => 'button grey', - ), - $label); + public function addButton(PHUIButtonView $button) { + $this->buttons[] = $button; return $this; } @@ -38,7 +41,7 @@ final class AphrontFormSubmitControl extends AphrontFormControl { return array( $submit_button, - $this->cancelButton, + $this->buttons, ); } diff --git a/webroot/rsrc/css/phui/phui-button.css b/webroot/rsrc/css/phui/phui-button.css index 5d35688c1f..d801cdb513 100644 --- a/webroot/rsrc/css/phui/phui-button.css +++ b/webroot/rsrc/css/phui/phui-button.css @@ -47,6 +47,18 @@ input[type="submit"] { border-radius: 3px; } +button .phui-icon-view, +a.button .phui-icon-view, +button.green .phui-icon-view, +a.button.green .phui-icon-view { + color: white; +} + +button.grey .phui-icon-view, +a.button.grey .phui-icon-view { + color: {$darkbluetext}; +} + /* Buttons with images (full size only) */ button.icon, a.icon, From 4686769273740b88ba520027ff4ab91d75df07d6 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Thu, 2 Feb 2017 13:27:01 -0800 Subject: [PATCH 41/49] Widen property list key value Summary: Ref T12180. Seems we widened the value side, but not the key. Test Plan: Review application property page. Set item to stacked, see non-cutoff layout. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12180 Differential Revision: https://secure.phabricator.com/D17302 --- resources/celerity/map.php | 10 +++++----- webroot/rsrc/css/phui/phui-property-list-view.css | 2 +- webroot/rsrc/css/phui/phui-two-column-view.css | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 1edffe21d4..7bf3396ca8 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -9,7 +9,7 @@ return array( 'names' => array( 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => '022cdeed', + 'core.pkg.css' => '867a3ad4', 'core.pkg.js' => '1fa7c0c5', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => '4815647b', @@ -162,14 +162,14 @@ return array( 'rsrc/css/phui/phui-object-box.css' => '8b289e3d', 'rsrc/css/phui/phui-pager.css' => 'bea33d23', 'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', - 'rsrc/css/phui/phui-property-list-view.css' => '6d8e58ac', + 'rsrc/css/phui/phui-property-list-view.css' => '2dc7993f', 'rsrc/css/phui/phui-remarkup-preview.css' => '1a8f2591', 'rsrc/css/phui/phui-segment-bar-view.css' => 'b1d1b892', 'rsrc/css/phui/phui-spacing.css' => '042804d6', 'rsrc/css/phui/phui-status.css' => 'd5263e49', 'rsrc/css/phui/phui-tag-view.css' => '84d65f26', 'rsrc/css/phui/phui-timeline-view.css' => 'bc523970', - 'rsrc/css/phui/phui-two-column-view.css' => 'f63cad3c', + 'rsrc/css/phui/phui-two-column-view.css' => '8a1074c7', 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'f0551a33', 'rsrc/css/phui/workboards/phui-workboard.css' => '3bc85455', 'rsrc/css/phui/workboards/phui-workcard.css' => 'cca5fa92', @@ -882,7 +882,7 @@ return array( 'phui-oi-simple-ui-css' => 'a8beebea', 'phui-pager-css' => 'bea33d23', 'phui-pinboard-view-css' => '2495140e', - 'phui-property-list-view-css' => '6d8e58ac', + 'phui-property-list-view-css' => '2dc7993f', 'phui-remarkup-preview-css' => '1a8f2591', 'phui-segment-bar-view-css' => 'b1d1b892', 'phui-spacing-css' => '042804d6', @@ -890,7 +890,7 @@ return array( 'phui-tag-view-css' => '84d65f26', 'phui-theme-css' => '9f261c6b', 'phui-timeline-view-css' => 'bc523970', - 'phui-two-column-view-css' => 'f63cad3c', + 'phui-two-column-view-css' => '8a1074c7', 'phui-workboard-color-css' => 'f0551a33', 'phui-workboard-view-css' => '3bc85455', 'phui-workcard-view-css' => 'cca5fa92', diff --git a/webroot/rsrc/css/phui/phui-property-list-view.css b/webroot/rsrc/css/phui/phui-property-list-view.css index 769a139664..16a78e219c 100644 --- a/webroot/rsrc/css/phui/phui-property-list-view.css +++ b/webroot/rsrc/css/phui/phui-property-list-view.css @@ -61,7 +61,7 @@ } .device .phui-property-list-key, -.phui-property-list-stacked .phui-property-list-properties +div.phui-property-list-stacked .phui-property-list-properties .phui-property-list-key { padding-left: 4px; text-align: left; diff --git a/webroot/rsrc/css/phui/phui-two-column-view.css b/webroot/rsrc/css/phui/phui-two-column-view.css index 80e51d95da..5418644b28 100644 --- a/webroot/rsrc/css/phui/phui-two-column-view.css +++ b/webroot/rsrc/css/phui/phui-two-column-view.css @@ -121,7 +121,7 @@ .device-desktop .phui-main-column .phui-property-list-key { margin-left: 0; - width: 160px; + width: 180px; } .device-desktop .phui-main-column .phui-property-list-value { From fd0591e168802ee6178307101376166c10452542 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 3 Feb 2017 06:12:51 -0800 Subject: [PATCH 42/49] Restore "Auditor" as an alias for the commit message field "Auditors" Summary: Fixes T12197. I //think// this field was never recognized by Differential (it doesn't appear in D17070, but maybe that isn't the right change). It was recognized by the ad-hoc regular expression which I replaced with a formal parser in D17262. Allow the former parser to accept "Auditor" as an alias for "Auditors". Test Plan: Committed a change with `Auditor: dog`, saw the audit trigger correctly in the web UI. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12197 Differential Revision: https://secure.phabricator.com/D17306 --- .../field/DifferentialAuditorsCommitMessageField.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php b/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php index 42e6b5ecd5..bd4d9f3009 100644 --- a/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php +++ b/src/applications/differential/field/DifferentialAuditorsCommitMessageField.php @@ -9,6 +9,12 @@ final class DifferentialAuditorsCommitMessageField return pht('Auditors'); } + public function getFieldAliases() { + return array( + 'Auditor', + ); + } + public function parseFieldValue($value) { return $this->parseObjectList( $value, From f54dfe7567697f6817d194296634a5dd953ab47e Mon Sep 17 00:00:00 2001 From: Chad Little Date: Fri, 3 Feb 2017 09:19:17 -0800 Subject: [PATCH 43/49] Add a basic icon typeahead Summary: Fixes T11971, adds a basic typeahead for selecting an icon. Test Plan: http://local.phacility.com/typeahead/browse/PhabricatorIconDatasource/ {F2561013} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T11971 Differential Revision: https://secure.phabricator.com/D17301 --- src/__phutil_library_map__.php | 2 + .../typeahead/PhabricatorIconDatasource.php | 46 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/applications/files/typeahead/PhabricatorIconDatasource.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 8743fc205b..033e7c15d2 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2848,6 +2848,7 @@ phutil_register_library_map(array( 'PhabricatorIDsSearchEngineExtension' => 'applications/search/engineextension/PhabricatorIDsSearchEngineExtension.php', 'PhabricatorIDsSearchField' => 'applications/search/field/PhabricatorIDsSearchField.php', 'PhabricatorIRCProtocolAdapter' => 'infrastructure/daemon/bot/adapter/PhabricatorIRCProtocolAdapter.php', + 'PhabricatorIconDatasource' => 'applications/files/typeahead/PhabricatorIconDatasource.php', 'PhabricatorIconRemarkupRule' => 'applications/macro/markup/PhabricatorIconRemarkupRule.php', 'PhabricatorIconSet' => 'applications/files/iconset/PhabricatorIconSet.php', 'PhabricatorIconSetEditField' => 'applications/transactions/editfield/PhabricatorIconSetEditField.php', @@ -7907,6 +7908,7 @@ phutil_register_library_map(array( 'PhabricatorIDsSearchEngineExtension' => 'PhabricatorSearchEngineExtension', 'PhabricatorIDsSearchField' => 'PhabricatorSearchField', 'PhabricatorIRCProtocolAdapter' => 'PhabricatorProtocolAdapter', + 'PhabricatorIconDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorIconRemarkupRule' => 'PhutilRemarkupRule', 'PhabricatorIconSet' => 'Phobject', 'PhabricatorIconSetEditField' => 'PhabricatorEditField', diff --git a/src/applications/files/typeahead/PhabricatorIconDatasource.php b/src/applications/files/typeahead/PhabricatorIconDatasource.php new file mode 100644 index 0000000000..63b554a9b7 --- /dev/null +++ b/src/applications/files/typeahead/PhabricatorIconDatasource.php @@ -0,0 +1,46 @@ +buildResults(); + return $this->filterResultsAgainstTokens($results); + } + + protected function renderSpecialTokens(array $values) { + return $this->renderTokensFromResults($this->buildResults(), $values); + } + + private function buildResults() { + $raw_query = $this->getRawQuery(); + + $icons = id(new PHUIIconView())->getIcons(); + + $results = array(); + foreach ($icons as $icon) { + $display_name = str_replace('fa-', '', $icon); + $result = id(new PhabricatorTypeaheadResult()) + ->setPHID($icon) + ->setName($icon) + ->setIcon($icon) + ->setDisplayname($display_name) + ->addAttribute($icon); + + $results[$icon] = $result; + } + return $results; + } + +} From d054f87f93e5598b8312393e0b396e03d6d2f343 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 3 Feb 2017 09:20:17 -0800 Subject: [PATCH 44/49] Make drag-and-drop to upload files work on any Home dashboard, not just "Magic Home" Summary: Ref T12174. Drag-and-drop-to-upload requires some stuff in the document. Put that stuff on all the content pages (currently: dashboards, magic home), not just the builtin home. Test Plan: - Dragged-and-dropped onto a Home dashbboard to upload. - Viewed, and dragged-and-dropped onto "builtin home" to upload. - Dragged onto "Edit Menu" for home, no upload. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17307 --- .../PhabricatorHomeProfileMenuEngine.php | 18 ++++++++++++++++++ src/applications/home/view/PHUIHomeView.php | 9 --------- .../engine/PhabricatorProfileMenuEngine.php | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php index d7ecd9db6f..cbfe62aaa6 100644 --- a/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php +++ b/src/applications/home/engine/PhabricatorHomeProfileMenuEngine.php @@ -11,6 +11,24 @@ final class PhabricatorHomeProfileMenuEngine return "/home/menu/{$path}"; } + protected function buildItemViewContent( + PhabricatorProfileMenuItemConfiguration $item) { + $viewer = $this->getViewer(); + + // Add content to the document so that you can drag-and-drop files onto + // the home page or any home dashboard to upload them. + + $upload = id(new PhabricatorGlobalUploadTargetView()) + ->setUser($viewer); + + $content = parent::buildItemViewContent($item); + + return array( + $content, + $upload, + ); + } + protected function getBuiltinProfileItems($object) { $viewer = $this->getViewer(); $items = array(); diff --git a/src/applications/home/view/PHUIHomeView.php b/src/applications/home/view/PHUIHomeView.php index e68643f6d3..c511908326 100644 --- a/src/applications/home/view/PHUIHomeView.php +++ b/src/applications/home/view/PHUIHomeView.php @@ -12,15 +12,6 @@ final class PHUIHomeView } protected function getTagContent() { - $viewer = $this->getViewer(); - - return array( - $this->buildMainResponse(), - id(new PhabricatorGlobalUploadTargetView())->setUser($viewer), - ); - } - - private function buildMainResponse() { require_celerity_resource('phabricator-dashboard-css'); $viewer = $this->getViewer(); diff --git a/src/applications/search/engine/PhabricatorProfileMenuEngine.php b/src/applications/search/engine/PhabricatorProfileMenuEngine.php index 8cd64763bb..f41424a4e7 100644 --- a/src/applications/search/engine/PhabricatorProfileMenuEngine.php +++ b/src/applications/search/engine/PhabricatorProfileMenuEngine.php @@ -685,7 +685,7 @@ abstract class PhabricatorProfileMenuEngine extends Phobject { ->setURI($this->getConfigureURI()); } - private function buildItemViewContent( + protected function buildItemViewContent( PhabricatorProfileMenuItemConfiguration $item) { return $item->newPageContent(); } From 42743810e91416d9e0ab1c66f72cb131008296be Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 3 Feb 2017 09:54:39 -0800 Subject: [PATCH 45/49] When a viewer can't see some of a dashboard's panels, only hide those panels Summary: Ref T12174. Ref T8033. Currently, if you can't see one panel on a dashboard, you can't see the dashboard at all. This is confusing and hard to debug. Improve this behavior at least slightly: render the dashboard, with a big "you can't see this" panel in place of any panels you can't see. This should at least make the behavior obvious, even if it isn't the best or most comprehensive way we can handle it in all cases. Test Plan: {F2566003} Reviewers: chad Reviewed By: chad Maniphest Tasks: T12174, T8033 Differential Revision: https://secure.phabricator.com/D17308 --- ...abricatorDashboardPanelRenderingEngine.php | 22 +++++++++++++---- .../PhabricatorDashboardRenderingEngine.php | 24 +++++++++++++------ .../query/PhabricatorDashboardQuery.php | 5 ++++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php index 22ab5b20bf..d39dd826eb 100644 --- a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php +++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php @@ -72,8 +72,10 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject { if (!$panel) { return $this->renderErrorPanel( - pht('Missing Panel'), - pht('This panel does not exist.')); + pht('Missing or Restricted Panel'), + pht( + 'This panel does not exist, or you do not have permission '. + 'to see it.')); } $panel_type = $panel->getImplementation(); @@ -166,10 +168,13 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject { } $icon = id(new PHUIIconView()) ->setIcon('fa-warning red msr'); + $content = id(new PHUIBoxView()) ->addClass('dashboard-box') + ->addMargin(PHUI::MARGIN_MEDIUM) ->appendChild($icon) ->appendChild($body); + return $this->renderPanelDiv( $content, $header); @@ -203,10 +208,17 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject { $box->appendChild($content); } - $box->setHeader($header) + $box + ->setHeader($header) ->setID($id) - ->addSigil('dashboard-panel') - ->setMetadata(array('objectPHID' => $panel->getPHID())); + ->addSigil('dashboard-panel'); + + if ($panel) { + $box->setMetadata( + array( + 'objectPHID' => $panel->getPHID(), + )); + } return phutil_tag_div('dashboard-pane', $box); } diff --git a/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php index 8f0c43a914..f9af84973e 100644 --- a/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php +++ b/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php @@ -32,7 +32,7 @@ final class PhabricatorDashboardRenderingEngine extends Phobject { $dashboard_id = celerity_generate_unique_node_id(); $result = id(new AphrontMultiColumnView()) ->setID($dashboard_id) - ->setFluidlayout(true) + ->setFluidLayout(true) ->setGutter(AphrontMultiColumnView::GUTTER_LARGE); if ($this->arrangeMode) { @@ -43,17 +43,27 @@ final class PhabricatorDashboardRenderingEngine extends Phobject { foreach ($panel_grid_locations as $column => $panel_column_locations) { $panel_phids = $panel_column_locations; - $column_panels = array_select_keys($panels, $panel_phids); + + // TODO: This list may contain duplicates when the dashboard itself + // does not? Perhaps this is related to T10612. For now, just unique + // the list before moving on. + $panel_phids = array_unique($panel_phids); + $column_result = array(); - foreach ($column_panels as $panel) { - $column_result[] = id(new PhabricatorDashboardPanelRenderingEngine()) + foreach ($panel_phids as $panel_phid) { + $panel_engine = id(new PhabricatorDashboardPanelRenderingEngine()) ->setViewer($viewer) - ->setPanel($panel) ->setDashboardID($dashboard->getID()) ->setEnableAsyncRendering(true) ->setParentPanelPHIDs(array()) - ->setHeaderMode($h_mode) - ->renderPanel(); + ->setHeaderMode($h_mode); + + $panel = idx($panels, $panel_phid); + if ($panel) { + $panel_engine->setPanel($panel); + } + + $column_result[] = $panel_engine->renderPanel(); } $column_class = $layout_config->getColumnClass( $column, diff --git a/src/applications/dashboard/query/PhabricatorDashboardQuery.php b/src/applications/dashboard/query/PhabricatorDashboardQuery.php index a54cfbc47c..c005197df2 100644 --- a/src/applications/dashboard/query/PhabricatorDashboardQuery.php +++ b/src/applications/dashboard/query/PhabricatorDashboardQuery.php @@ -70,8 +70,13 @@ final class PhabricatorDashboardQuery $panel_phids = $edge_query->getDestinationPHIDs(); if ($panel_phids) { + // NOTE: We explicitly disable policy exceptions when loading panels. + // If a particular panel is invalid or not visible to the viewer, + // we'll still render the dashboard, just not that panel. + $panels = id(new PhabricatorDashboardPanelQuery()) ->setParentQuery($this) + ->setRaisePolicyExceptions(false) ->setViewer($this->getViewer()) ->withPHIDs($panel_phids) ->execute(); From ab923e0a752b9dc03a850be74d198832a5620373 Mon Sep 17 00:00:00 2001 From: Austin Seipp Date: Fri, 3 Feb 2017 20:06:29 +0000 Subject: [PATCH 46/49] Implement new reCAPTCHA interface Summary: Fixes T12195. For the past few years, Recaptcha (now part of Google) has supported a new, "no captcha" one-click user interface. This new UI is stable, doesn't require any typing or reading words, and can even work without JavaScript (if the administrator enables it on the Recaptcha side). Furthermore, the new Recaptcha has a completely trivial API that can be dealt with in a few lines of code. Thus, the external `recaptcha` php library is now gone. This API is a complete replacement for the old one, and does not require any upgrade path for users or Phabricator administrators - public and secret keys for the "new" Recaptcha UI are the exact same as the "classic" Recaptcha. Any old Recaptcha keys for a domain will continue to work. Note that Google is currently testing Yet Another new Captcha API, called "Invisible reCAPTCHA", that will not require user interaction at all. In fact, the user will not even be aware there //is even a captcha form//, as far as I understand. However, this new API is 1) in beta, 2) requires new Recaptcha keys (so it cannot be a drop-in replacement), and 3) requires more drastic API changes, as form submission buttons must instead invoke JavaScript code, rather than a token being passed along with the form submission. This would require far more extensive changes to the controllers. Maybe when it's several years old, it can be considered. Signed-off-by: Austin Seipp Test Plan: Created a brand-new Phabricator installation, saw the new Captcha UI on administrator sign up. Logged out, made 5 invalid login attempts, and saw the new Captcha UI. Reworked the conditional to invert the condition, etc to test and make sure the API responded properly. Reviewers: epriestley, #blessed_reviewers, chad Reviewed By: epriestley, #blessed_reviewers Subscribers: avivey, Korvin Maniphest Tasks: T12195 Differential Revision: https://secure.phabricator.com/D17304 --- externals/recaptcha/LICENSE | 22 -- externals/recaptcha/recaptchalib.php | 277 ------------------ .../PhabricatorRecaptchaConfigOptions.php | 2 + .../control/AphrontFormRecaptchaControl.php | 53 ++-- 4 files changed, 26 insertions(+), 328 deletions(-) delete mode 100644 externals/recaptcha/LICENSE delete mode 100644 externals/recaptcha/recaptchalib.php diff --git a/externals/recaptcha/LICENSE b/externals/recaptcha/LICENSE deleted file mode 100644 index b612f71f01..0000000000 --- a/externals/recaptcha/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net -AUTHORS: - Mike Crawford - Ben Maurer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/externals/recaptcha/recaptchalib.php b/externals/recaptcha/recaptchalib.php deleted file mode 100644 index 32c4f4d758..0000000000 --- a/externals/recaptcha/recaptchalib.php +++ /dev/null @@ -1,277 +0,0 @@ - $value ) - $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; - - // Cut the last '&' - $req=substr($req,0,strlen($req)-1); - return $req; -} - - - -/** - * Submits an HTTP POST to a reCAPTCHA server - * @param string $host - * @param string $path - * @param array $data - * @param int port - * @return array response - */ -function _recaptcha_http_post($host, $path, $data, $port = 80) { - - $req = _recaptcha_qsencode ($data); - - $http_request = "POST $path HTTP/1.0\r\n"; - $http_request .= "Host: $host\r\n"; - $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; - $http_request .= "Content-Length: " . strlen($req) . "\r\n"; - $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; - $http_request .= "\r\n"; - $http_request .= $req; - - $response = ''; - if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { - die ('Could not open socket'); - } - - fwrite($fs, $http_request); - - while ( !feof($fs) ) - $response .= fgets($fs, 1160); // One TCP-IP packet - fclose($fs); - $response = explode("\r\n\r\n", $response, 2); - - return $response; -} - - - -/** - * Gets the challenge HTML (javascript and non-javascript version). - * This is called from the browser, and the resulting reCAPTCHA HTML widget - * is embedded within the HTML form it was called from. - * @param string $pubkey A public key for reCAPTCHA - * @param string $error The error given by reCAPTCHA (optional, default is null) - * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) - - * @return string - The HTML to be embedded in the user's form. - */ -function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false) -{ - if ($pubkey == null || $pubkey == '') { - die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); - } - - if ($use_ssl) { - $server = RECAPTCHA_API_SECURE_SERVER; - } else { - $server = RECAPTCHA_API_SERVER; - } - - $errorpart = ""; - if ($error) { - $errorpart = "&error=" . $error; - } - return ' - - '; -} - - - - -/** - * A ReCaptchaResponse is returned from recaptcha_check_answer() - */ -class ReCaptchaResponse { - var $is_valid; - var $error; -} - - -/** - * Calls an HTTP POST function to verify if the user's guess was correct - * @param string $privkey - * @param string $remoteip - * @param string $challenge - * @param string $response - * @param array $extra_params an array of extra variables to post to the server - * @return ReCaptchaResponse - */ -function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) -{ - if ($privkey == null || $privkey == '') { - die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); - } - - if ($remoteip == null || $remoteip == '') { - die ("For security reasons, you must pass the remote ip to reCAPTCHA"); - } - - - - //discard spam submissions - if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { - $recaptcha_response = new ReCaptchaResponse(); - $recaptcha_response->is_valid = false; - $recaptcha_response->error = 'incorrect-captcha-sol'; - return $recaptcha_response; - } - - $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", - array ( - 'privatekey' => $privkey, - 'remoteip' => $remoteip, - 'challenge' => $challenge, - 'response' => $response - ) + $extra_params - ); - - $answers = explode ("\n", $response [1]); - $recaptcha_response = new ReCaptchaResponse(); - - if (trim ($answers [0]) == 'true') { - $recaptcha_response->is_valid = true; - } - else { - $recaptcha_response->is_valid = false; - $recaptcha_response->error = $answers [1]; - } - return $recaptcha_response; - -} - -/** - * gets a URL where the user can sign up for reCAPTCHA. If your application - * has a configuration page where you enter a key, you should provide a link - * using this function. - * @param string $domain The domain where the page is hosted - * @param string $appname The name of your application - */ -function recaptcha_get_signup_url ($domain = null, $appname = null) { - return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); -} - -function _recaptcha_aes_pad($val) { - $block_size = 16; - $numpad = $block_size - (strlen ($val) % $block_size); - return str_pad($val, strlen ($val) + $numpad, chr($numpad)); -} - -/* Mailhide related code */ - -function _recaptcha_aes_encrypt($val,$ky) { - if (! function_exists ("mcrypt_encrypt")) { - die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); - } - $mode=MCRYPT_MODE_CBC; - $enc=MCRYPT_RIJNDAEL_128; - $val=_recaptcha_aes_pad($val); - return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); -} - - -function _recaptcha_mailhide_urlbase64 ($x) { - return strtr(base64_encode ($x), '+/', '-_'); -} - -/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ -function recaptcha_mailhide_url($pubkey, $privkey, $email) { - if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { - die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . - "you can do so at http://www.google.com/recaptcha/mailhide/apikey"); - } - - - $ky = pack('H*', $privkey); - $cryptmail = _recaptcha_aes_encrypt ($email, $ky); - - return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); -} - -/** - * gets the parts of the email to expose to the user. - * eg, given johndoe@example,com return ["john", "example.com"]. - * the email is then displayed as john...@example.com - */ -function _recaptcha_mailhide_email_parts ($email) { - $arr = preg_split("/@/", $email ); - - if (strlen ($arr[0]) <= 4) { - $arr[0] = substr ($arr[0], 0, 1); - } else if (strlen ($arr[0]) <= 6) { - $arr[0] = substr ($arr[0], 0, 3); - } else { - $arr[0] = substr ($arr[0], 0, 4); - } - return $arr; -} - -/** - * Gets html to display an email address given a public an private key. - * to get a key, go to: - * - * http://www.google.com/recaptcha/mailhide/apikey - */ -function recaptcha_mailhide_html($pubkey, $privkey, $email) { - $emailparts = _recaptcha_mailhide_email_parts ($email); - $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); - - return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); - -} - - -?> diff --git a/src/applications/config/option/PhabricatorRecaptchaConfigOptions.php b/src/applications/config/option/PhabricatorRecaptchaConfigOptions.php index 356bcfd4dd..59bbc5c62f 100644 --- a/src/applications/config/option/PhabricatorRecaptchaConfigOptions.php +++ b/src/applications/config/option/PhabricatorRecaptchaConfigOptions.php @@ -23,6 +23,7 @@ final class PhabricatorRecaptchaConfigOptions return array( $this->newOption('recaptcha.enabled', 'bool', false) + ->setLocked(true) ->setBoolOptions( array( pht('Enable Recaptcha'), @@ -35,6 +36,7 @@ final class PhabricatorRecaptchaConfigOptions 'failed login attempts. This hinders brute-force attacks against '. 'user passwords. For more information, see http://recaptcha.net/')), $this->newOption('recaptcha.public-key', 'string', null) + ->setLocked(true) ->setDescription( pht('Recaptcha public key, obtained by signing up for Recaptcha.')), $this->newOption('recaptcha.private-key', 'string', null) diff --git a/src/view/form/control/AphrontFormRecaptchaControl.php b/src/view/form/control/AphrontFormRecaptchaControl.php index 078eb1afc2..8c056b5bf6 100644 --- a/src/view/form/control/AphrontFormRecaptchaControl.php +++ b/src/view/form/control/AphrontFormRecaptchaControl.php @@ -1,10 +1,5 @@ getBool('recaptcha_response_field'); + return $request->getBool('g-recaptcha-response'); } public static function processCaptcha(AphrontRequest $request) { @@ -33,30 +23,35 @@ final class AphrontFormRecaptchaControl extends AphrontFormControl { return true; } - self::requireLib(); + $uri = 'https://www.google.com/recaptcha/api/siteverify'; + $params = array( + 'secret' => PhabricatorEnv::getEnvConfig('recaptcha.private-key'), + 'response' => $request->getStr('g-recaptcha-response'), + 'remoteip' => $request->getRemoteAddress(), + ); - $challenge = $request->getStr('recaptcha_challenge_field'); - $response = $request->getStr('recaptcha_response_field'); - $resp = recaptcha_check_answer( - PhabricatorEnv::getEnvConfig('recaptcha.private-key'), - $_SERVER['REMOTE_ADDR'], - $challenge, - $response); + list($body) = id(new HTTPSFuture($uri, $params)) + ->setMethod('POST') + ->resolvex(); - return (bool)@$resp->is_valid; + $json = phutil_json_decode($body); + return (bool)idx($json, 'success'); } protected function renderInput() { - self::requireLib(); + $js = 'https://www.google.com/recaptcha/api.js'; + $pubkey = PhabricatorEnv::getEnvConfig('recaptcha.public-key'); - $uri = new PhutilURI(PhabricatorEnv::getEnvConfig('phabricator.base-uri')); - $protocol = $uri->getProtocol(); - $use_ssl = ($protocol == 'https'); + return array( + phutil_tag('div', array( + 'class' => 'g-recaptcha', + 'data-sitekey' => $pubkey, + )), - return phutil_safe_html(recaptcha_get_html( - PhabricatorEnv::getEnvConfig('recaptcha.public-key'), - $error = null, - $use_ssl)); + phutil_tag('script', array( + 'type' => 'text/javascript', + 'src' => $js, + )), + ); } - } From 281e9849ed236b3f86a50219dc102d9212484177 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 3 Feb 2017 17:02:50 -0800 Subject: [PATCH 47/49] Fix display of current file on Macro creation Summary: This could hit an obscure fatal. Test Plan: - Create a macro. - Upload a file, but don't give it a name. - Before: fatal. - After: {F2569846} Reviewers: chad, 20after4 Reviewed By: chad Differential Revision: https://secure.phabricator.com/D17310 --- .../macro/controller/PhabricatorMacroEditController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/applications/macro/controller/PhabricatorMacroEditController.php b/src/applications/macro/controller/PhabricatorMacroEditController.php index 4e6fa314b0..110296c172 100644 --- a/src/applications/macro/controller/PhabricatorMacroEditController.php +++ b/src/applications/macro/controller/PhabricatorMacroEditController.php @@ -185,6 +185,7 @@ final class PhabricatorMacroEditController extends PhabricatorMacroController { if (!$macro->getID()) { if ($current_file) { $current_file_view = id(new PhabricatorFileLinkView()) + ->setViewer($viewer) ->setFilePHID($current_file->getPHID()) ->setFileName($current_file->getName()) ->setFileViewable(true) From c8de563622cb11c5ebd74e893682608f40088baf Mon Sep 17 00:00:00 2001 From: Chad Little Date: Fri, 3 Feb 2017 18:23:58 -0800 Subject: [PATCH 48/49] Update Profile Menu diviner Summary: Ref T12174, Updates documentation to better match current functionality. Test Plan: I keep getting exceptions trying to generate diviner locally, not sure what's up. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12174 Differential Revision: https://secure.phabricator.com/D17309 --- src/docs/user/userguide/profile_menu.diviner | 55 ++++++++++++-------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/docs/user/userguide/profile_menu.diviner b/src/docs/user/userguide/profile_menu.diviner index 2b4ffc4be8..2725e71851 100644 --- a/src/docs/user/userguide/profile_menu.diviner +++ b/src/docs/user/userguide/profile_menu.diviner @@ -16,21 +16,12 @@ Supported Applications These applications currently support profile menus: -| Application | Support | -|-----|-----| -| Projects | Full | -| People | //Read-Only// | - - -Collapsing and Expanding -======================== - -To collapse a full-width profile menu, click -{nav icon="angle-left", name="Collapse"}. To expand a narrow menu, click -{nav icon="angle-right", name="Expand"}. - -If you're logged in, this setting is sticky, and all menus will respect your -preference. +| Application | Customization | Support | +|-----|-----|-----| +| Home | Global/Personal | Full | +| Projects | Per Project | Full | +| Favorites Menu | Global/Personal | Full | +| People | None | //Read-Only// | Editing Menus @@ -40,7 +31,10 @@ You can only edit an object's menu if you can edit the object. For example, you must have permission to edit a project in order to reconfigure the menu for the project. -To edit a menu, click {nav icon="cogs", name="Manage"} in the menu, then click +To edit a menu, click {nav icon="cogs", name="Manage"} or {nav icon="pencil", +name="Edit ..."} in the menu itself. If you are an administrator and the +application supports Global/Personal customization, you'll have the option +of editing either the Global settings or your own Personal menu, otherwise click {nav icon="th-list", name="Edit Menu"}. This brings you to the menu configuration interface which allows you to add and remove items, reorder the menu, edit existing items, and choose a default item. @@ -94,7 +88,7 @@ To remove items, click the {nav icon="times", name="Delete"} action. Builtin items can not be deleted and have a {nav icon="times", name="Disable"} action instead, which will hide them but not delete them. You an re-enable a disabled item with the -{nav icon="plus', name="Enable"} action. +{nav icon="plus", name="Enable"} action. A few items can not be hidden or deleted. For example, the {nav icon="cogs", name="Manage"} item must always be available in the menu @@ -130,17 +124,36 @@ When you add items, you can choose between different types of items to add. Which item types are available depends on what sort of object you are editing the menu for, but most objects support these items: - - {icon link} **Link**: Allows you to create an item which links to - somewhere else in Phabricator, or to an external site. + - {icon minus} **Divider**: Adds a visual separator to the menu. This is purely cosmetic. - - {icon coffee} **Motivator**: Motivate your employees with inspirational - quotes. A new quote every day! + - {icon map-marker} **Label**: Lets you label sections of menu items. + This is also purely cosmetic. + - {icon link} **Link**: Allows you to create an item which links to + somewhere else in Phabricator, or to an external site. + - {icon plus} **Form**: Provides quick access to custom and built-in forms + from any application that supports EditEngine. + - {icon briefcase} **Projects**: Provides quick access to a project. + - {icon globe} **Applications**: Provides quick access to your favorite + applications. Can be renamed. + - {icon tachometer} **Dashboard**: Provides quick access to your favorite + dashboard. These items will display with the current nav on the item + you've attached it to. + To learn more about how an item works, try adding it. You can always delete it later if it doesn't do what you wanted. +Dashboard Integration +===================== + +Dashboards are directly integrated with Profile Menus. If you add a Dashboard +to a Project or to a Home menu, that Dashboard will be presented in the +context of that menu. This allows customization of different pages of content +without having the user leave Home or the Project. + + Writing New Item Types ====================== From 9c62a10989e03e518f855de3fc0a610543287c71 Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 3 Feb 2017 18:30:21 -0800 Subject: [PATCH 49/49] Limit damage caused by bad panels on dashboards you can manage Summary: Fixes T12203. If you tried to //manage// a dashboard which had a panel you can't see, we'd try to render bogus actions for it and fatal. Instead, for the moment, survive. Presumably we'll ship a real fix for this in the next release or so, and tackle T10612 / T10145, which I think are closely related. Test Plan: {F2570418} Reviewers: chad Reviewed By: chad Maniphest Tasks: T12203 Differential Revision: https://secure.phabricator.com/D17311 --- .../engine/PhabricatorDashboardPanelRenderingEngine.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php index d39dd826eb..286d749a18 100644 --- a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php +++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php @@ -255,6 +255,10 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject { PHUIHeaderView $header) { $panel = $this->getPanel(); + if (!$panel) { + return $header; + } + $dashboard_id = $this->getDashboardID(); $edit_uri = id(new PhutilURI( '/dashboard/panel/edit/'.$panel->getID().'/'));