@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 101 lines 2.8 kB view raw
1<?php 2 3final class AphlictDropdownDataQuery extends Phobject { 4 5 private $viewer; 6 private $notificationData; 7 private $conpherenceData; 8 9 public function setViewer(PhabricatorUser $viewer) { 10 $this->viewer = $viewer; 11 return $this; 12 } 13 14 public function getViewer() { 15 return $this->viewer; 16 } 17 18 private function setNotificationData(array $data) { 19 $this->notificationData = $data; 20 return $this; 21 } 22 23 public function getNotificationData() { 24 if ($this->notificationData === null) { 25 throw new Exception(pht('You must %s first!', 'execute()')); 26 } 27 return $this->notificationData; 28 } 29 30 private function setConpherenceData(array $data) { 31 $this->conpherenceData = $data; 32 return $this; 33 } 34 35 public function getConpherenceData() { 36 if ($this->conpherenceData === null) { 37 throw new Exception(pht('You must %s first!', 'execute()')); 38 } 39 return $this->conpherenceData; 40 } 41 42 public function execute() { 43 $viewer = $this->getViewer(); 44 45 $conpherence_app = PhabricatorConpherenceApplication::class; 46 $is_c_installed = PhabricatorApplication::isClassInstalledForViewer( 47 $conpherence_app, 48 $viewer); 49 if ($is_c_installed) { 50 $raw_message_count_number = $viewer->getUnreadMessageCount(); 51 $message_count_number = $this->formatNumber($raw_message_count_number); 52 } else { 53 $raw_message_count_number = null; 54 $message_count_number = null; 55 } 56 57 58 $conpherence_data = array( 59 'isInstalled' => $is_c_installed, 60 'countType' => 'messages', 61 'count' => $message_count_number, 62 'rawCount' => $raw_message_count_number, 63 ); 64 $this->setConpherenceData($conpherence_data); 65 66 $notification_app = PhabricatorNotificationsApplication::class; 67 $is_n_installed = PhabricatorApplication::isClassInstalledForViewer( 68 $notification_app, 69 $viewer); 70 if ($is_n_installed) { 71 $raw_notification_count_number = $viewer->getUnreadNotificationCount(); 72 $notification_count_number = $this->formatNumber( 73 $raw_notification_count_number); 74 } else { 75 $notification_count_number = null; 76 $raw_notification_count_number = null; 77 } 78 79 $notification_data = array( 80 'isInstalled' => $is_n_installed, 81 'countType' => 'notifications', 82 'count' => $notification_count_number, 83 'rawCount' => $raw_notification_count_number, 84 ); 85 $this->setNotificationData($notification_data); 86 87 return array( 88 $notification_app => $this->getNotificationData(), 89 $conpherence_app => $this->getConpherenceData(), 90 ); 91 } 92 93 private function formatNumber($number) { 94 $formatted = $number; 95 if ($number > 999) { 96 $formatted = "\xE2\x88\x9E"; 97 } 98 return $formatted; 99 } 100 101}