2011-01-16 22:51:39 +01:00
|
|
|
<?php
|
|
|
|
|
2014-07-23 02:03:09 +02:00
|
|
|
final class PhabricatorHomeMainController extends PhabricatorHomeController {
|
2011-01-16 22:51:39 +01:00
|
|
|
|
2014-06-13 04:16:53 +02:00
|
|
|
private $only;
|
2013-01-17 23:02:18 +01:00
|
|
|
private $minipanels = array();
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
2014-01-27 00:28:55 +01:00
|
|
|
public function shouldAllowPublic() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2012-02-16 02:48:14 +01:00
|
|
|
public function willProcessRequest(array $data) {
|
2014-06-13 04:16:53 +02:00
|
|
|
$this->only = idx($data, 'only');
|
2012-02-16 02:48:14 +01:00
|
|
|
}
|
|
|
|
|
2011-01-16 22:51:39 +01:00
|
|
|
public function processRequest() {
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
$user = $this->getRequest()->getUser();
|
2013-01-16 00:41:22 +01:00
|
|
|
|
2014-05-20 01:09:31 +02:00
|
|
|
$dashboard = PhabricatorDashboardInstall::getDashboard(
|
|
|
|
$user,
|
|
|
|
$user->getPHID(),
|
|
|
|
get_class($this->getCurrentApplication()));
|
2014-06-24 00:14:38 +02:00
|
|
|
|
|
|
|
if (!$dashboard) {
|
|
|
|
$dashboard = PhabricatorDashboardInstall::getDashboard(
|
|
|
|
$user,
|
2014-07-23 02:03:09 +02:00
|
|
|
PhabricatorHomeApplication::DASHBOARD_DEFAULT,
|
2014-06-24 00:14:38 +02:00
|
|
|
get_class($this->getCurrentApplication()));
|
|
|
|
}
|
|
|
|
|
2014-05-20 01:09:31 +02:00
|
|
|
if ($dashboard) {
|
2014-06-13 04:16:53 +02:00
|
|
|
$content = id(new PhabricatorDashboardRenderingEngine())
|
2014-05-20 01:09:31 +02:00
|
|
|
->setViewer($user)
|
|
|
|
->setDashboard($dashboard)
|
|
|
|
->renderDashboard();
|
|
|
|
} else {
|
|
|
|
$project_query = new PhabricatorProjectQuery();
|
|
|
|
$project_query->setViewer($user);
|
|
|
|
$project_query->withMemberPHIDs(array($user->getPHID()));
|
|
|
|
$projects = $project_query->execute();
|
|
|
|
|
2014-06-13 04:16:53 +02:00
|
|
|
$content = $this->buildMainResponse($projects);
|
2014-05-20 01:09:31 +02:00
|
|
|
}
|
|
|
|
|
2014-06-13 04:16:53 +02:00
|
|
|
if (!$this->only) {
|
|
|
|
$nav = $this->buildNav();
|
|
|
|
$nav->appendChild(
|
|
|
|
array(
|
|
|
|
$content,
|
|
|
|
id(new PhabricatorGlobalUploadTargetView())->setUser($user),
|
|
|
|
));
|
|
|
|
$content = $nav;
|
|
|
|
}
|
2012-02-16 02:48:14 +01:00
|
|
|
|
2014-05-20 01:09:31 +02:00
|
|
|
return $this->buildApplicationPage(
|
2014-06-13 04:16:53 +02:00
|
|
|
$content,
|
2014-05-20 01:09:31 +02:00
|
|
|
array(
|
|
|
|
'title' => 'Phabricator',
|
|
|
|
));
|
2012-02-16 02:48:14 +01:00
|
|
|
}
|
|
|
|
|
2014-06-13 04:16:53 +02:00
|
|
|
private function buildMainResponse(array $projects) {
|
2012-04-03 21:10:45 +02:00
|
|
|
assert_instances_of($projects, 'PhabricatorProject');
|
2014-03-15 19:28:02 +01:00
|
|
|
$viewer = $this->getRequest()->getUser();
|
2012-04-03 21:10:45 +02:00
|
|
|
|
2014-03-15 19:28:02 +01:00
|
|
|
$has_maniphest = PhabricatorApplication::isClassInstalledForViewer(
|
2014-07-23 02:03:09 +02:00
|
|
|
'PhabricatorManiphestApplication',
|
2014-03-15 19:28:02 +01:00
|
|
|
$viewer);
|
|
|
|
|
|
|
|
$has_audit = PhabricatorApplication::isClassInstalledForViewer(
|
2014-07-23 02:03:09 +02:00
|
|
|
'PhabricatorAuditApplication',
|
2014-03-15 19:28:02 +01:00
|
|
|
$viewer);
|
|
|
|
|
|
|
|
$has_differential = PhabricatorApplication::isClassInstalledForViewer(
|
2014-07-23 02:03:09 +02:00
|
|
|
'PhabricatorDifferentialApplication',
|
2014-03-15 19:28:02 +01:00
|
|
|
$viewer);
|
|
|
|
|
|
|
|
if ($has_maniphest) {
|
2013-09-17 20:31:32 +02:00
|
|
|
$unbreak_panel = $this->buildUnbreakNowPanel();
|
|
|
|
$triage_panel = $this->buildNeedsTriagePanel($projects);
|
2012-02-18 01:08:35 +01:00
|
|
|
$tasks_panel = $this->buildTasksPanel();
|
|
|
|
} else {
|
2013-09-17 20:31:32 +02:00
|
|
|
$unbreak_panel = null;
|
|
|
|
$triage_panel = null;
|
2012-02-18 01:08:35 +01:00
|
|
|
$tasks_panel = null;
|
|
|
|
}
|
2012-02-27 18:48:18 +01:00
|
|
|
|
2014-03-15 19:28:02 +01:00
|
|
|
if ($has_audit) {
|
2013-10-10 00:25:03 +02:00
|
|
|
$audit_panel = $this->buildAuditPanel();
|
|
|
|
$commit_panel = $this->buildCommitPanel();
|
|
|
|
} else {
|
|
|
|
$audit_panel = null;
|
|
|
|
$commit_panel = null;
|
|
|
|
}
|
|
|
|
|
2013-03-22 00:02:35 +01:00
|
|
|
if (PhabricatorEnv::getEnvConfig('welcome.html') !== null) {
|
|
|
|
$welcome_panel = $this->buildWelcomePanel();
|
|
|
|
} else {
|
|
|
|
$welcome_panel = null;
|
|
|
|
}
|
2013-10-10 00:25:03 +02:00
|
|
|
|
2014-03-15 19:28:02 +01:00
|
|
|
if ($has_differential) {
|
|
|
|
$revision_panel = $this->buildRevisionPanel();
|
|
|
|
} else {
|
|
|
|
$revision_panel = null;
|
|
|
|
}
|
2011-01-25 20:31:40 +01:00
|
|
|
|
2015-01-28 00:30:11 +01:00
|
|
|
require_celerity_resource('homepage-panel-css');
|
|
|
|
$home = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'homepage-panel',
|
|
|
|
),
|
|
|
|
array(
|
|
|
|
$welcome_panel,
|
|
|
|
$unbreak_panel,
|
|
|
|
$triage_panel,
|
|
|
|
$revision_panel,
|
|
|
|
$tasks_panel,
|
|
|
|
$audit_panel,
|
|
|
|
$commit_panel,
|
|
|
|
$this->minipanels,
|
|
|
|
));
|
|
|
|
return $home;
|
2012-02-16 02:48:14 +01:00
|
|
|
}
|
|
|
|
|
2013-09-17 20:31:32 +02:00
|
|
|
private function buildUnbreakNowPanel() {
|
|
|
|
$unbreak_now = PhabricatorEnv::getEnvConfig(
|
|
|
|
'maniphest.priorities.unbreak-now');
|
|
|
|
if (!$unbreak_now) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
|
|
|
|
$task_query = id(new ManiphestTaskQuery())
|
|
|
|
->setViewer($user)
|
2014-02-18 00:59:31 +01:00
|
|
|
->withStatuses(ManiphestTaskStatus::getOpenStatusConstants())
|
2013-09-17 20:31:32 +02:00
|
|
|
->withPriorities(array($unbreak_now))
|
2014-12-18 22:53:45 +01:00
|
|
|
->needProjectPHIDs(true)
|
2013-09-17 20:31:32 +02:00
|
|
|
->setLimit(10);
|
|
|
|
|
|
|
|
$tasks = $task_query->execute();
|
|
|
|
|
|
|
|
if (!$tasks) {
|
|
|
|
return $this->renderMiniPanel(
|
|
|
|
'No "Unbreak Now!" Tasks',
|
|
|
|
'Nothing appears to be critically broken right now.');
|
|
|
|
}
|
|
|
|
|
2014-05-10 20:37:38 +02:00
|
|
|
$href = urisprintf(
|
|
|
|
'/maniphest/?statuses=%s&priorities=%s#R',
|
2014-03-28 20:59:09 +01:00
|
|
|
implode(',', ManiphestTaskStatus::getOpenStatusConstants()),
|
|
|
|
$unbreak_now);
|
2014-01-21 23:23:36 +01:00
|
|
|
$title = pht('Unbreak Now!');
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-21 23:23:36 +01:00
|
|
|
$panel->setHeader($this->renderSectionHeader($title, $href));
|
2013-09-17 20:31:32 +02:00
|
|
|
$panel->appendChild($this->buildTaskListView($tasks));
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function buildNeedsTriagePanel(array $projects) {
|
|
|
|
assert_instances_of($projects, 'PhabricatorProject');
|
|
|
|
|
|
|
|
$needs_triage = PhabricatorEnv::getEnvConfig(
|
|
|
|
'maniphest.priorities.needs-triage');
|
|
|
|
if (!$needs_triage) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
if (!$user->isLoggedIn()) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($projects) {
|
|
|
|
$task_query = id(new ManiphestTaskQuery())
|
|
|
|
->setViewer($user)
|
2014-02-18 00:59:31 +01:00
|
|
|
->withStatuses(ManiphestTaskStatus::getOpenStatusConstants())
|
2013-09-17 20:31:32 +02:00
|
|
|
->withPriorities(array($needs_triage))
|
|
|
|
->withAnyProjects(mpull($projects, 'getPHID'))
|
2014-12-18 22:53:45 +01:00
|
|
|
->needProjectPHIDs(true)
|
2013-09-17 20:31:32 +02:00
|
|
|
->setLimit(10);
|
|
|
|
$tasks = $task_query->execute();
|
|
|
|
} else {
|
|
|
|
$tasks = array();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$tasks) {
|
|
|
|
return $this->renderMiniPanel(
|
|
|
|
'No "Needs Triage" Tasks',
|
|
|
|
hsprintf(
|
|
|
|
'No tasks in <a href="/project/">projects you are a member of</a> '.
|
|
|
|
'need triage.'));
|
|
|
|
}
|
|
|
|
|
2014-01-21 23:23:36 +01:00
|
|
|
$title = pht('Needs Triage');
|
2014-05-10 20:37:38 +02:00
|
|
|
$href = urisprintf(
|
|
|
|
'/maniphest/?statuses=%s&priorities=%s&userProjects=%s#R',
|
2014-03-28 20:59:09 +01:00
|
|
|
implode(',', ManiphestTaskStatus::getOpenStatusConstants()),
|
|
|
|
$needs_triage,
|
|
|
|
$user->getPHID());
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-21 23:23:36 +01:00
|
|
|
$panel->setHeader($this->renderSectionHeader($title, $href));
|
2013-09-17 20:31:32 +02:00
|
|
|
$panel->appendChild($this->buildTaskListView($tasks));
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
private function buildRevisionPanel() {
|
|
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
$user_phid = $user->getPHID();
|
|
|
|
|
2013-07-01 21:38:27 +02:00
|
|
|
$revision_query = id(new DifferentialRevisionQuery())
|
|
|
|
->setViewer($user)
|
|
|
|
->withStatus(DifferentialRevisionQuery::STATUS_OPEN)
|
|
|
|
->withResponsibleUsers(array($user_phid))
|
2014-02-19 02:57:45 +01:00
|
|
|
->needRelationships(true)
|
|
|
|
->needFlags(true)
|
|
|
|
->needDrafts(true);
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
|
|
|
$revisions = $revision_query->execute();
|
|
|
|
|
2013-01-24 01:37:08 +01:00
|
|
|
list($blocking, $active, ) = DifferentialRevisionQuery::splitResponsible(
|
|
|
|
$revisions,
|
|
|
|
array($user_phid));
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
2013-01-24 01:37:08 +01:00
|
|
|
if (!$blocking && !$active) {
|
2012-02-27 22:14:32 +01:00
|
|
|
return $this->renderMiniPanel(
|
|
|
|
'No Waiting Revisions',
|
|
|
|
'No revisions are waiting on you.');
|
|
|
|
}
|
|
|
|
|
2014-01-21 23:23:36 +01:00
|
|
|
$title = pht('Revisions Waiting on You');
|
|
|
|
$href = '/differential';
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-21 23:23:36 +01:00
|
|
|
$panel->setHeader($this->renderSectionHeader($title, $href));
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
2012-02-27 22:14:32 +01:00
|
|
|
$revision_view = id(new DifferentialRevisionListView())
|
2012-08-20 23:05:46 +02:00
|
|
|
->setHighlightAge(true)
|
2013-01-24 01:37:08 +01:00
|
|
|
->setRevisions(array_merge($blocking, $active))
|
2014-02-19 02:57:45 +01:00
|
|
|
->setUser($user);
|
2012-02-27 22:14:32 +01:00
|
|
|
$phids = array_merge(
|
|
|
|
array($user_phid),
|
|
|
|
$revision_view->getRequiredHandlePHIDs());
|
2012-09-05 04:02:56 +02:00
|
|
|
$handles = $this->loadViewerHandles($phids);
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
2012-02-27 22:14:32 +01:00
|
|
|
$revision_view->setHandles($handles);
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
2013-07-03 15:24:46 +02:00
|
|
|
$list_view = $revision_view->render();
|
|
|
|
$list_view->setFlush(true);
|
|
|
|
|
|
|
|
$panel->appendChild($list_view);
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
2013-03-22 00:02:35 +01:00
|
|
|
private function buildWelcomePanel() {
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
|
|
|
$panel->setHeaderText(pht('Welcome'));
|
2013-03-22 00:02:35 +01:00
|
|
|
$panel->appendChild(
|
|
|
|
phutil_safe_html(
|
|
|
|
PhabricatorEnv::getEnvConfig('welcome.html')));
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
private function buildTasksPanel() {
|
|
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
$user_phid = $user->getPHID();
|
|
|
|
|
2013-09-10 16:44:22 +02:00
|
|
|
$task_query = id(new ManiphestTaskQuery())
|
|
|
|
->setViewer($user)
|
2014-02-18 00:59:31 +01:00
|
|
|
->withStatuses(ManiphestTaskStatus::getOpenStatusConstants())
|
2013-09-10 16:44:22 +02:00
|
|
|
->setGroupBy(ManiphestTaskQuery::GROUP_PRIORITY)
|
|
|
|
->withOwners(array($user_phid))
|
2014-12-18 22:53:45 +01:00
|
|
|
->needProjectPHIDs(true)
|
2013-09-10 16:44:22 +02:00
|
|
|
->setLimit(10);
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
|
|
|
$tasks = $task_query->execute();
|
|
|
|
|
2012-02-27 22:14:32 +01:00
|
|
|
|
|
|
|
if (!$tasks) {
|
|
|
|
return $this->renderMiniPanel(
|
|
|
|
'No Assigned Tasks',
|
|
|
|
'You have no assigned tasks.');
|
|
|
|
}
|
|
|
|
|
2014-01-21 23:23:36 +01:00
|
|
|
$title = pht('Assigned Tasks');
|
|
|
|
$href = '/maniphest';
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-21 23:23:36 +01:00
|
|
|
$panel->setHeader($this->renderSectionHeader($title, $href));
|
2012-02-27 22:14:32 +01:00
|
|
|
$panel->appendChild($this->buildTaskListView($tasks));
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function buildTaskListView(array $tasks) {
|
2012-04-03 21:10:45 +02:00
|
|
|
assert_instances_of($tasks, 'ManiphestTask');
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
|
2012-04-02 19:27:31 +02:00
|
|
|
$phids = array_merge(
|
|
|
|
array_filter(mpull($tasks, 'getOwnerPHID')),
|
|
|
|
array_mergev(mpull($tasks, 'getProjectPHIDs')));
|
|
|
|
|
2012-09-05 04:02:56 +02:00
|
|
|
$handles = $this->loadViewerHandles($phids);
|
Replace home directory list with a dashboard
Summary:
Rough cut that still needs a lot of polish, but replace the directory list with
more of a dashboard type thing:
- Show "Unbreak Now", triage-in-your-projects, and other stuff that you're
supposed to deal with, then feed.
- Move tools a click a way behind nav -- this also lets us put more stuff
there and subtools, etc., later.
- Remove tabs.
- Merge the category/item editing views.
- I also added a light blue wash to the side nav, not sure if I like that or
not.
Test Plan:
- Viewed all elements in empty and nonempty states.
- Viewed applications, edited items/categories.
Reviewers: btrahan, aran
Reviewed By: btrahan
CC: aran, epriestley, davidreuss
Maniphest Tasks: T21, T631
Differential Revision: https://secure.phabricator.com/D1574
2012-02-08 01:04:48 +01:00
|
|
|
|
|
|
|
$view = new ManiphestTaskListView();
|
|
|
|
$view->setTasks($tasks);
|
|
|
|
$view->setUser($user);
|
|
|
|
$view->setHandles($handles);
|
|
|
|
|
|
|
|
return $view;
|
|
|
|
}
|
|
|
|
|
2014-01-21 23:23:36 +01:00
|
|
|
private function renderSectionHeader($title, $href) {
|
2015-01-28 00:30:11 +01:00
|
|
|
$title = phutil_tag(
|
2014-01-21 23:23:36 +01:00
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => $href,
|
|
|
|
),
|
|
|
|
$title);
|
2015-01-28 00:30:11 +01:00
|
|
|
$header = id(new PHUIHeaderView())
|
|
|
|
->setHeader($title);
|
2014-01-21 23:23:36 +01:00
|
|
|
return $header;
|
|
|
|
}
|
|
|
|
|
2012-02-27 22:14:32 +01:00
|
|
|
private function renderMiniPanel($title, $body) {
|
2015-02-21 01:00:39 +01:00
|
|
|
$panel = new PHUIErrorView();
|
|
|
|
$panel->setSeverity(PHUIErrorView::SEVERITY_NODATA);
|
2012-02-27 22:14:32 +01:00
|
|
|
$panel->appendChild(
|
2013-01-29 03:41:43 +01:00
|
|
|
phutil_tag(
|
2012-02-27 22:14:32 +01:00
|
|
|
'p',
|
|
|
|
array(
|
|
|
|
),
|
2013-01-29 03:41:43 +01:00
|
|
|
array(
|
Fix every HTML issue I could find
Summary:
I attempted to test every interface. I probably missed some stuff, but I at least have some level of confidence that the `phutil_tag` branch is fairly stable.
Fixed these issues:
[1] Fixed a Herald issue with object links in transcripts. Some actions return
links; this was previously hard-coded.
[2] DarkConsole refactoring created an issue where the "`" event handler registered too many times.
[3] Fixed a bug where `strlen($value)` was being checked, but fields may now return array(). Possibly we should implement phutil_is_empty_html() or similar.
[4] Fixed a undefined variable issue for image edit transactions.
[5] Fixed an issue with rendering participant transactions. This required phutil_safe_html() because `pht()` can't handle `array()` for `%s`.
[6] Fixed an issue where feed was entirely overescaped by reverting an overly ambitious render_tag -> tag.
[7] Fixed an issue with strict tables and inserting `''` instead of `0` into an integer column.
[8] Fixed an issue where • was shown escaped.
[9] Fixed an issue where "no data" was overescaped.
[10] Fixed an issue with strict tables and inserting `''` instead of `0` into an integer column.
[11] Fixed an issue with strict tables and inserting `''`.
[12] Fixed an issue with missing space after ":" for mini panels.
Encountered (but did not fix) these issues:
[X1] "e" works incorrectly on comments you are not allowed to edit. Did not fix.
[X2] Coverage currently interacts incorrectly with "--everything" for Phutil tests.
Test Plan:
- Viewed Differential.
- Created a diff via copy/paste.
- Viewed standalone diff.
- Jumped to diff via changeset table.
- Created a revision.
- Updated revision.
- Added a comment.
- Edited revision dependencies.
- Edited revision tasks.
- Viewed MetaMTA transcripts.
- Viewed Herald transcripts [1].
- Downloaded raw diff.
- Flagged / unflagged revision.
- Added/edited/deleted inline comment.
- Collapsed/expanded file.
- Did show raw left.
- Did show raw right.
- Checked previews for available actions.
- Clicked remarkup buttons
- Used filetree view.
- Used keyboard: F, j, k, J, K, n, p, t, h, "?" [2] [X1].
- Created a meme.
- Uploaded a file via drag and drop.
- Viewed a revision with no reviewers.
- Viewed a revision with >100 files.
- Viewed various other revisions [3].
- Viewed an image diff.
- Added image diff inline comments.
- Viewed Maniphest.
- Ran various queries.
- Created task.
- Created similar task.
- Added comments to tasks.
- Ran custom query.
- Saved custom query.
- Edited custom queries.
- Drag-reordered tasks.
- Batch edited tasks.
- Exported tasks to excel.
- Looked at reports (issue in T2311 notwithstanding).
- Viewed Diffusion.
- Browsed Git, SVN, HG repositories.
- Looked at history, browse, change, commit views.
- Viewed audit.
- Performed various audit searches.
- Viewed Paste.
- Performed paste searches.
- Created, edited, forked paste.
- Viewed Phriction.
- Edited a page.
- Viewed edit history.
- Used search typeahead to search for user / application.
- Used search to search for text.
- Viewed Phame.
- Viewed Blog, Post.
- Viewed live post.
- Published/unpublished post.
- Previewed post.
- Viewed Pholio.
- Edited/commented mock.
- Viewed ponder.
- Viewed question.
- Added answer/comment.
- Viewed Diviner.
- Viewed Conpherence [4] [5].
- Made Conpherence updates.
- Viewed calendar.
- Created status.
- Viewed status.
- Viewed Feed [6].
- Viewed Projects.
- Viewed project detail.
- Edited project.
- Viewed Owners.
- Viewed package detail.
- Edited package [7].
- Viewed flags.
- Edited flag.
- Deleted flag.
- Viewed Herald.
- Viewed rules.
- Created rule.
- Edited rule.
- Viewed edit log.
- Viewed transcripts.
- Inspected a transcript.
- Viewed People.
- Viewed list.
- Administrated user.
- Checked username/delete stuff.
- Looked at create/import LDAP/activity logs.
- Looked at a user profile.
- Looked at user about page.
- Looked at Repositories.
- Edited repository.
- Edited arcanist project.
- Looked at daemons.
- Looked at all daemons [8].
- Viewed combined log.
- Looked at configuration.
- Edited configuration.
- Looked at setup issues [9].
- Looked at current settings.
- Looked at application list.
- Installed / uninstalled applications [10].
- Looked at mailing lists.
- Created a mailing list.
- Edited a mailing list.
- Looked at sent mail.
- Looked at received mail.
- Looked at send/receive tests.
- Looked at settings.
- Clicked through all the panels.
- Looked at slowvote.
- Created a slowvote [11].
- Voted in a slowvote.
- Looked at Macro.
- Created a macro.
- Edited a macro.
- Commented on a macro.
- Looked at Countdown.
- Created a Countdown.
- Looked at it.
- Looked at Drydock.
- Poked around a bit.
- Looked at Fact.
- Poked around a bit.
- Looked at files.
- Looked at a file.
- Uploaded a file.
- Looked at Conduit.
- Made a Conduit call.
- Looked at UIExamples.
- Looked at PHPAST.
- Looked at PHIDs.
- Looked at notification menu.
- Looked at notification detail.
- Logged out.
- Logged in.
- Looked at homepage [12].
- Ran `arc unit --everything --no-coverage` [X2].
Reviewers: vrana, btrahan
Reviewed By: vrana
CC: aran
Maniphest Tasks: T2432
Differential Revision: https://secure.phabricator.com/D4807
2013-02-05 02:06:34 +01:00
|
|
|
phutil_tag('strong', array(), $title.': '),
|
2014-10-07 15:01:04 +02:00
|
|
|
$body,
|
2013-01-29 03:41:43 +01:00
|
|
|
)));
|
2013-01-17 23:02:18 +01:00
|
|
|
$this->minipanels[] = $panel;
|
2012-02-16 02:49:23 +01:00
|
|
|
}
|
|
|
|
|
2012-02-27 18:48:18 +01:00
|
|
|
public function buildAuditPanel() {
|
|
|
|
$request = $this->getRequest();
|
|
|
|
$user = $request->getUser();
|
|
|
|
|
|
|
|
$phids = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($user);
|
|
|
|
|
2014-04-27 18:43:05 +02:00
|
|
|
$query = id(new DiffusionCommitQuery())
|
|
|
|
->setViewer($user)
|
|
|
|
->withAuditorPHIDs($phids)
|
|
|
|
->withAuditStatus(DiffusionCommitQuery::AUDIT_STATUS_OPEN)
|
|
|
|
->withAuditAwaitingUser($user)
|
2014-04-28 17:26:08 +02:00
|
|
|
->needAuditRequests(true)
|
2014-04-27 18:43:05 +02:00
|
|
|
->needCommitData(true)
|
|
|
|
->setLimit(10);
|
2012-02-27 18:48:18 +01:00
|
|
|
|
2014-04-27 18:43:05 +02:00
|
|
|
$commits = $query->execute();
|
2012-02-27 18:48:18 +01:00
|
|
|
|
2014-04-27 18:43:05 +02:00
|
|
|
if (!$commits) {
|
2012-02-29 06:10:39 +01:00
|
|
|
return $this->renderMinipanel(
|
|
|
|
'No Audits',
|
|
|
|
'No commits are waiting for you to audit them.');
|
2012-02-27 18:48:18 +01:00
|
|
|
}
|
|
|
|
|
2014-04-27 18:43:05 +02:00
|
|
|
$view = id(new PhabricatorAuditListView())
|
|
|
|
->setCommits($commits)
|
|
|
|
->setUser($user);
|
2012-02-27 18:48:18 +01:00
|
|
|
|
|
|
|
$phids = $view->getRequiredHandlePHIDs();
|
2012-09-05 04:02:56 +02:00
|
|
|
$handles = $this->loadViewerHandles($phids);
|
2012-02-27 18:48:18 +01:00
|
|
|
$view->setHandles($handles);
|
|
|
|
|
2014-01-21 23:23:36 +01:00
|
|
|
$title = pht('Audits');
|
|
|
|
$href = '/audit/';
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-21 23:23:36 +01:00
|
|
|
$panel->setHeader($this->renderSectionHeader($title, $href));
|
2012-02-27 18:48:18 +01:00
|
|
|
$panel->appendChild($view);
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
2012-02-29 06:10:39 +01:00
|
|
|
public function buildCommitPanel() {
|
|
|
|
$request = $this->getRequest();
|
|
|
|
$user = $request->getUser();
|
|
|
|
|
|
|
|
$phids = array($user->getPHID());
|
|
|
|
|
2014-04-27 18:43:05 +02:00
|
|
|
$query = id(new DiffusionCommitQuery())
|
|
|
|
->setViewer($user)
|
|
|
|
->withAuthorPHIDs($phids)
|
|
|
|
->withAuditStatus(DiffusionCommitQuery::AUDIT_STATUS_CONCERN)
|
|
|
|
->needCommitData(true)
|
2014-04-28 17:26:08 +02:00
|
|
|
->needAuditRequests(true)
|
2014-04-27 18:43:05 +02:00
|
|
|
->setLimit(10);
|
2012-02-29 06:10:39 +01:00
|
|
|
|
|
|
|
$commits = $query->execute();
|
|
|
|
|
|
|
|
if (!$commits) {
|
|
|
|
return $this->renderMinipanel(
|
|
|
|
'No Problem Commits',
|
|
|
|
'No one has raised concerns with your commits.');
|
|
|
|
}
|
|
|
|
|
2014-04-27 18:43:05 +02:00
|
|
|
$view = id(new PhabricatorAuditListView())
|
|
|
|
->setCommits($commits)
|
|
|
|
->setUser($user);
|
2012-02-29 06:10:39 +01:00
|
|
|
|
|
|
|
$phids = $view->getRequiredHandlePHIDs();
|
2012-09-05 04:02:56 +02:00
|
|
|
$handles = $this->loadViewerHandles($phids);
|
2012-02-29 06:10:39 +01:00
|
|
|
$view->setHandles($handles);
|
|
|
|
|
2014-01-21 23:23:36 +01:00
|
|
|
$title = pht('Problem Commits');
|
|
|
|
$href = '/audit/';
|
2015-01-28 00:30:11 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-21 23:23:36 +01:00
|
|
|
$panel->setHeader($this->renderSectionHeader($title, $href));
|
2012-02-29 06:10:39 +01:00
|
|
|
$panel->appendChild($view);
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
2011-01-16 22:51:39 +01:00
|
|
|
}
|