Page MenuHomePhabricator

D15461.diff
No OneTemporary

D15461.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3794,6 +3794,7 @@
'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 @@
'PhragmentZIPController' => 'PhragmentController',
'PhrequentConduitAPIMethod' => 'ConduitAPIMethod',
'PhrequentController' => 'PhabricatorController',
+ 'PhrequentCurtainExtension' => 'PHUICurtainExtension',
'PhrequentDAO' => 'PhabricatorLiskDAO',
'PhrequentListController' => 'PhrequentController',
'PhrequentPopConduitAPIMethod' => 'PhrequentConduitAPIMethod',
diff --git a/src/applications/phrequent/engineextension/PhrequentCurtainExtension.php b/src/applications/phrequent/engineextension/PhrequentCurtainExtension.php
new file mode 100644
--- /dev/null
+++ b/src/applications/phrequent/engineextension/PhrequentCurtainExtension.php
@@ -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);
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
May 9 2024, 8:21 PM (5 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6276661
Default Alt Text
D15461.diff (3 KB)

Event Timeline