private function handleActionEvent($event) { $user = $event->getUser(); $object = $event->getValue('object'); if (!$object || !$object->getPHID()) { // No object, or the object has no PHID yet.. return; } if (!$object instanceof PhrequentTrackableInterface) { // This object isn't a time trackable object. return; } if (!$this->canUseApplication($event->getUser())) { return; } $tracking = PhrequentUserTimeQuery::isUserTrackingObject($user, $object->getPHID()); if (!$tracking) { $track_action = id(new PhabricatorActionView())->setName(pht('Start Tracking Time'))->setIcon('fa-clock-o')->setWorkflow(true)->setHref('/phrequent/track/start/' . $object->getPHID() . '/'); } else { $track_action = id(new PhabricatorActionView())->setName(pht('Stop Tracking Time'))->setIcon('fa-clock-o red')->setWorkflow(true)->setHref('/phrequent/track/stop/' . $object->getPHID() . '/'); } if (!$user->isLoggedIn()) { $track_action->setDisabled(true); } $this->addActionMenuItems($event, $track_action); }
public function buildSearchForm(AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $user_phids = $saved_query->getParameter('userPHIDs', array()); $ended = $saved_query->getParameter('ended', PhrequentUserTimeQuery::ENDED_ALL); $order = $saved_query->getParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); $form->appendControl(id(new AphrontFormTokenizerControl())->setDatasource(new PhabricatorPeopleDatasource())->setName('users')->setLabel(pht('Users'))->setValue($user_phids))->appendChild(id(new AphrontFormSelectControl())->setLabel(pht('Ended'))->setName('ended')->setValue($ended)->setOptions(PhrequentUserTimeQuery::getEndedSearchOptions()))->appendChild(id(new AphrontFormSelectControl())->setLabel(pht('Order'))->setName('order')->setValue($order)->setOptions(PhrequentUserTimeQuery::getOrderSearchOptions())); }
public function loadStatus(PhabricatorUser $user) { $status = array(); // Show number of objects that are currently // being tracked for a user. $count = PhrequentUserTimeQuery::getUserTotalObjectsTracked($user); $type = PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION; $status[] = id(new PhabricatorApplicationStatusView())->setType($type)->setText(pht('%d Object(s) Tracked', $count))->setCount($count); return $status; }
public function stopTracking(PhabricatorUser $user, $phid, $timestamp, $note) { if (!PhrequentUserTimeQuery::isUserTrackingObject($user, $phid)) { // Don't do anything, it's not being tracked. return null; } $usertime_dao = new PhrequentUserTime(); $conn = $usertime_dao->establishConnection('r'); queryfx($conn, 'UPDATE %T usertime ' . 'SET usertime.dateEnded = %d, ' . 'usertime.note = %s ' . 'WHERE usertime.userPHID = %s ' . 'AND usertime.objectPHID = %s ' . 'AND usertime.dateEnded IS NULL ' . 'ORDER BY usertime.dateStarted, usertime.id DESC ' . 'LIMIT 1', $usertime_dao->getTableName(), $timestamp, $note, $user->getPHID(), $phid); return $phid; }
public function loadStatus(PhabricatorUser $user) { $status = array(); $limit = self::MAX_STATUS_ITEMS; // Show number of objects that are currently // being tracked for a user. $count = PhrequentUserTimeQuery::getUserTotalObjectsTracked($user, $limit); if ($count >= $limit) { $count_str = pht('%s+ Object(s) Tracked', new PhutilNumber($limit - 1)); } else { $count_str = pht('%s Object(s) Tracked', new PhutilNumber($count)); } $type = PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION; $status[] = id(new PhabricatorApplicationStatusView())->setType($type)->setText($count_str)->setCount($count); return $status; }