2012-08-05 14:12:43 -07:00
|
|
|
<?php
|
|
|
|
|
2014-07-23 10:03:09 +10:00
|
|
|
final class PhabricatorPeopleApplication extends PhabricatorApplication {
|
2012-08-05 14:12:43 -07:00
|
|
|
|
2014-07-23 23:52:50 +10:00
|
|
|
public function getName() {
|
|
|
|
return pht('People');
|
|
|
|
}
|
|
|
|
|
2012-08-05 14:12:43 -07:00
|
|
|
public function getShortDescription() {
|
2014-05-29 12:17:54 -07:00
|
|
|
return pht('User Accounts and Profiles');
|
2012-08-05 14:12:43 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
public function getBaseURI() {
|
|
|
|
return '/people/';
|
|
|
|
}
|
|
|
|
|
2012-08-13 15:27:21 -07:00
|
|
|
public function getTitleGlyph() {
|
|
|
|
return "\xE2\x99\x9F";
|
|
|
|
}
|
|
|
|
|
2015-01-24 23:41:43 -08:00
|
|
|
public function getFontIcon() {
|
|
|
|
return 'fa-users';
|
|
|
|
}
|
|
|
|
|
(Redesign) Clean up older "Tile" code
Summary:
This does some backend cleanup of the tile stuff, and some general cleanup of other application things:
- Users who haven't customized preferences get a small, specific set of pinned applications: Differential, Maniphest, Diffusion, Audit, Phriction, Projects (and, for administrators, Auth, Config and People).
- Old tile size methods are replaced with `isPinnnedByDefault()`.
- Shortened some short descriptions.
- `shouldAppearInLaunchView()` replaced by less ambiguous `isLaunchable()`.
- Added a marker for third-party / extension applications.
Test Plan: Faked away my preferences and viewed the home page, saw a smaller set of default pins.
Reviewers: chad
Reviewed By: chad
Subscribers: epriestley
Differential Revision: https://secure.phabricator.com/D9358
2014-06-03 15:47:27 -07:00
|
|
|
public function isPinnedByDefault(PhabricatorUser $viewer) {
|
|
|
|
return $viewer->getIsAdmin();
|
|
|
|
}
|
|
|
|
|
2012-10-03 15:16:26 -07:00
|
|
|
public function getFlavorText() {
|
|
|
|
return pht('Sort of a social utility.');
|
|
|
|
}
|
|
|
|
|
2013-01-29 09:14:03 -08:00
|
|
|
public function canUninstall() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2012-08-05 14:12:43 -07:00
|
|
|
public function getRoutes() {
|
|
|
|
return array(
|
|
|
|
'/people/' => array(
|
2013-05-31 10:51:20 -07:00
|
|
|
'(query/(?P<key>[^/]+)/)?' => 'PhabricatorPeopleListController',
|
2014-04-27 17:31:35 -07:00
|
|
|
'logs/(?:query/(?P<queryKey>[^/]+)/)?'
|
|
|
|
=> 'PhabricatorPeopleLogsController',
|
2015-02-11 06:05:53 -08:00
|
|
|
'invite/' => array(
|
|
|
|
'(?:query/(?P<queryKey>[^/]+)/)?'
|
|
|
|
=> 'PhabricatorPeopleInviteListController',
|
|
|
|
'send/'
|
|
|
|
=> 'PhabricatorPeopleInviteSendController',
|
|
|
|
),
|
2013-11-13 11:24:18 -08:00
|
|
|
'approve/(?P<id>[1-9]\d*)/' => 'PhabricatorPeopleApproveController',
|
2014-04-02 12:05:49 -07:00
|
|
|
'(?P<via>disapprove)/(?P<id>[1-9]\d*)/'
|
|
|
|
=> 'PhabricatorPeopleDisableController',
|
|
|
|
'(?P<via>disable)/(?P<id>[1-9]\d*)/'
|
|
|
|
=> 'PhabricatorPeopleDisableController',
|
|
|
|
'empower/(?P<id>[1-9]\d*)/' => 'PhabricatorPeopleEmpowerController',
|
2014-04-02 12:05:07 -07:00
|
|
|
'delete/(?P<id>[1-9]\d*)/' => 'PhabricatorPeopleDeleteController',
|
2014-04-02 12:05:19 -07:00
|
|
|
'rename/(?P<id>[1-9]\d*)/' => 'PhabricatorPeopleRenameController',
|
2014-04-02 12:06:17 -07:00
|
|
|
'welcome/(?P<id>[1-9]\d*)/' => 'PhabricatorPeopleWelcomeController',
|
2014-04-02 12:06:27 -07:00
|
|
|
'create/' => 'PhabricatorPeopleCreateController',
|
|
|
|
'new/(?P<type>[^/]+)/' => 'PhabricatorPeopleNewController',
|
2012-08-05 14:12:43 -07:00
|
|
|
'ldap/' => 'PhabricatorPeopleLdapController',
|
2013-06-07 09:55:55 -07:00
|
|
|
'editprofile/(?P<id>[1-9]\d*)/' =>
|
|
|
|
'PhabricatorPeopleProfileEditController',
|
2013-07-09 16:23:54 -07:00
|
|
|
'picture/(?P<id>[1-9]\d*)/' =>
|
|
|
|
'PhabricatorPeopleProfilePictureController',
|
2016-01-24 07:07:17 -08:00
|
|
|
'manage/(?P<id>[1-9]\d*)/' =>
|
|
|
|
'PhabricatorPeopleProfileManageController',
|
2015-02-02 12:13:48 -08:00
|
|
|
),
|
2016-01-14 06:47:06 -08:00
|
|
|
'/p/(?P<username>[\w._-]+)/' => array(
|
|
|
|
'' => 'PhabricatorPeopleProfileViewController',
|
|
|
|
'panel/'
|
|
|
|
=> $this->getPanelRouting('PhabricatorPeopleProfilePanelController'),
|
|
|
|
'calendar/' => 'PhabricatorPeopleCalendarController',
|
|
|
|
),
|
2012-08-05 14:12:43 -07:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2013-07-09 16:23:33 -07:00
|
|
|
public function getRemarkupRules() {
|
|
|
|
return array(
|
2014-08-05 00:55:43 +10:00
|
|
|
new PhabricatorMentionRemarkupRule(),
|
2013-07-09 16:23:33 -07:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2014-01-30 11:53:49 -08:00
|
|
|
protected function getCustomCapabilities() {
|
|
|
|
return array(
|
2015-01-12 15:18:16 -08:00
|
|
|
PeopleCreateUsersCapability::CAPABILITY => array(
|
|
|
|
'default' => PhabricatorPolicies::POLICY_ADMIN,
|
|
|
|
),
|
2014-07-25 08:20:39 +10:00
|
|
|
PeopleBrowseUserDirectoryCapability::CAPABILITY => array(),
|
2014-01-30 11:53:49 -08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2013-11-13 11:24:38 -08:00
|
|
|
public function loadStatus(PhabricatorUser $user) {
|
|
|
|
if (!$user->getIsAdmin()) {
|
|
|
|
return array();
|
|
|
|
}
|
2015-12-02 11:35:24 -08:00
|
|
|
$limit = self::MAX_STATUS_ITEMS;
|
2013-11-13 11:24:38 -08:00
|
|
|
|
|
|
|
$need_approval = id(new PhabricatorPeopleQuery())
|
|
|
|
->setViewer($user)
|
|
|
|
->withIsApproved(false)
|
2014-03-10 16:20:49 -07:00
|
|
|
->withIsDisabled(false)
|
2015-12-02 11:35:24 -08:00
|
|
|
->setLimit($limit)
|
2013-11-13 11:24:38 -08:00
|
|
|
->execute();
|
|
|
|
if (!$need_approval) {
|
|
|
|
return array();
|
|
|
|
}
|
|
|
|
|
|
|
|
$status = array();
|
|
|
|
|
|
|
|
$count = count($need_approval);
|
2015-12-02 11:35:24 -08:00
|
|
|
if ($count >= $limit) {
|
|
|
|
$count_str = pht(
|
|
|
|
'%s+ User(s) Need Approval',
|
|
|
|
new PhutilNumber($limit - 1));
|
|
|
|
} else {
|
|
|
|
$count_str = pht(
|
|
|
|
'%s User(s) Need Approval',
|
|
|
|
new PhutilNumber($count));
|
|
|
|
}
|
|
|
|
|
2013-11-13 11:24:38 -08:00
|
|
|
$type = PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION;
|
|
|
|
$status[] = id(new PhabricatorApplicationStatusView())
|
|
|
|
->setType($type)
|
2014-12-12 12:02:25 -08:00
|
|
|
->setText($count_str)
|
2013-11-13 11:24:38 -08:00
|
|
|
->setCount($count);
|
|
|
|
|
|
|
|
return $status;
|
|
|
|
}
|
|
|
|
|
2014-04-02 12:06:27 -07:00
|
|
|
public function getQuickCreateItems(PhabricatorUser $viewer) {
|
|
|
|
$items = array();
|
|
|
|
|
2015-02-05 16:47:09 -08:00
|
|
|
$can_create = PhabricatorPolicyFilter::hasCapability(
|
|
|
|
$viewer,
|
|
|
|
$this,
|
|
|
|
PeopleCreateUsersCapability::CAPABILITY);
|
|
|
|
|
|
|
|
if ($can_create) {
|
2014-04-02 12:06:27 -07:00
|
|
|
$item = id(new PHUIListItemView())
|
|
|
|
->setName(pht('User Account'))
|
2014-05-12 13:34:00 -07:00
|
|
|
->setIcon('fa-users')
|
2014-04-02 12:06:27 -07:00
|
|
|
->setHref($this->getBaseURI().'create/');
|
|
|
|
$items[] = $item;
|
2015-02-05 16:47:09 -08:00
|
|
|
} else if ($viewer->getIsAdmin()) {
|
|
|
|
$item = id(new PHUIListItemView())
|
|
|
|
->setName(pht('Bot Account'))
|
|
|
|
->setIcon('fa-android')
|
|
|
|
->setHref($this->getBaseURI().'new/bot/');
|
|
|
|
$items[] = $item;
|
2014-04-02 12:06:27 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return $items;
|
|
|
|
}
|
|
|
|
|
Implement a scope selector for the global search
Summary:
See M1433. Fixes T7266. Fixes T4475. Ref T7314.
Future work/notes/etc:
- Write the User Guide (see TODO).
- This might needs some design tweaks -- I think it's functionally almost-equivalent to the mock, but the UI isn't quite the same.
- (Mobile design is a touch off-looking I think?)
- When you use a custom query, the duplicate "magnifying glass" icons are a little weird. Maybe change one or the other.
- Maybe worth adding an "Open Documents in Current Application" option? Planning to wait for feedback on that.
- Need a Quicksand integration to change the current application at some point.
- Searching in "Current Application" from, e.g., the 404 page just searches all documents. Current plan is to just document this behavior, since the icon is a pretty good callout and it seems plausible that this is intuitive enough that users won't have a hard time with it.
Test Plan:
New dropdown:
{F379150}
Device-ish:
{F379151}
Normal search (current application, from maniphest, selects tasks):
{F379153}
Application search from non-application:
{F379154}
Reviewers: btrahan, chad
Reviewed By: chad
Subscribers: johnny-bit, epriestley
Maniphest Tasks: T7266, T7314, T4475
Differential Revision: https://secure.phabricator.com/D12509
2015-04-22 14:31:36 -07:00
|
|
|
public function getApplicationSearchDocumentTypes() {
|
|
|
|
return array(
|
|
|
|
PhabricatorPeopleUserPHIDType::TYPECONST,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2012-08-05 14:12:43 -07:00
|
|
|
}
|