Add a Phrequent curtain extension
Summary: Fixes T10546. Some day, decades from now, we can revisit this when we iterate on Phrequent. Just don't regress for no real reason in the meantime, since it's easy enough to keep it working in reasonable shape.
Test Plan: {F1169096}
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T10546
Differential Revision: https://secure.phabricator.com/D15461
This commit is contained in:
@@ -3794,6 +3794,7 @@ phutil_register_library_map(array(
|
||||
'PhragmentZIPController' => 'applications/phragment/controller/PhragmentZIPController.php',
|
||||
'PhrequentConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentConduitAPIMethod.php',
|
||||
'PhrequentController' => 'applications/phrequent/controller/PhrequentController.php',
|
||||
'PhrequentCurtainExtension' => 'applications/phrequent/engineextension/PhrequentCurtainExtension.php',
|
||||
'PhrequentDAO' => 'applications/phrequent/storage/PhrequentDAO.php',
|
||||
'PhrequentListController' => 'applications/phrequent/controller/PhrequentListController.php',
|
||||
'PhrequentPopConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPopConduitAPIMethod.php',
|
||||
@@ -8498,6 +8499,7 @@ phutil_register_library_map(array(
|
||||
'PhragmentZIPController' => 'PhragmentController',
|
||||
'PhrequentConduitAPIMethod' => 'ConduitAPIMethod',
|
||||
'PhrequentController' => 'PhabricatorController',
|
||||
'PhrequentCurtainExtension' => 'PHUICurtainExtension',
|
||||
'PhrequentDAO' => 'PhabricatorLiskDAO',
|
||||
'PhrequentListController' => 'PhrequentController',
|
||||
'PhrequentPopConduitAPIMethod' => 'PhrequentConduitAPIMethod',
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
final class PhrequentCurtainExtension
|
||||
extends PHUICurtainExtension {
|
||||
|
||||
const EXTENSIONKEY = 'phrequent.time';
|
||||
|
||||
public function shouldEnableForObject($object) {
|
||||
return ($object instanceof PhrequentTrackableInterface);
|
||||
}
|
||||
|
||||
public function getExtensionApplication() {
|
||||
return new PhabricatorPhrequentApplication();
|
||||
}
|
||||
|
||||
public function buildCurtainPanel($object) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$events = id(new PhrequentUserTimeQuery())
|
||||
->setViewer($viewer)
|
||||
->withObjectPHIDs(array($object->getPHID()))
|
||||
->needPreemptingEvents(true)
|
||||
->execute();
|
||||
$event_groups = mgroup($events, 'getUserPHID');
|
||||
|
||||
if (!$events) {
|
||||
return;
|
||||
}
|
||||
|
||||
$handles = $viewer->loadHandles(array_keys($event_groups));
|
||||
$status_view = new PHUIStatusListView();
|
||||
|
||||
foreach ($event_groups as $user_phid => $event_group) {
|
||||
$item = new PHUIStatusItemView();
|
||||
$item->setTarget($handles[$user_phid]->renderLink());
|
||||
|
||||
$state = 'stopped';
|
||||
foreach ($event_group as $event) {
|
||||
if ($event->getDateEnded() === null) {
|
||||
if ($event->isPreempted()) {
|
||||
$state = 'suspended';
|
||||
} else {
|
||||
$state = 'active';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch ($state) {
|
||||
case 'active':
|
||||
$item->setIcon(
|
||||
PHUIStatusItemView::ICON_CLOCK,
|
||||
'green',
|
||||
pht('Working Now'));
|
||||
break;
|
||||
case 'suspended':
|
||||
$item->setIcon(
|
||||
PHUIStatusItemView::ICON_CLOCK,
|
||||
'yellow',
|
||||
pht('Interrupted'));
|
||||
break;
|
||||
case 'stopped':
|
||||
$item->setIcon(
|
||||
PHUIStatusItemView::ICON_CLOCK,
|
||||
'bluegrey',
|
||||
pht('Not Working Now'));
|
||||
break;
|
||||
}
|
||||
|
||||
$block = new PhrequentTimeBlock($event_group);
|
||||
$item->setNote(
|
||||
phutil_format_relative_time(
|
||||
$block->getTimeSpentOnObject(
|
||||
$object->getPHID(),
|
||||
time())));
|
||||
|
||||
$status_view->addItem($item);
|
||||
}
|
||||
|
||||
|
||||
return $this->newPanel()
|
||||
->setHeaderText(pht('Time Spent'))
|
||||
->setOrder(40000)
|
||||
->appendChild($status_view);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user