[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorCalendarEventSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Calendar Events'); 8 } 9 10 public function getApplicationClassName() { 11 return 'PhabricatorCalendarApplication'; 12 } 13 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 15 $saved = new PhabricatorSavedQuery(); 16 17 $saved->setParameter( 18 'rangeStart', 19 $this->readDateFromRequest($request, 'rangeStart')); 20 21 $saved->setParameter( 22 'rangeEnd', 23 $this->readDateFromRequest($request, 'rangeEnd')); 24 25 $saved->setParameter( 26 'upcoming', 27 $this->readBoolFromRequest($request, 'upcoming')); 28 29 $saved->setParameter( 30 'invitedPHIDs', 31 $this->readUsersFromRequest($request, 'invited')); 32 33 $saved->setParameter( 34 'creatorPHIDs', 35 $this->readUsersFromRequest($request, 'creators')); 36 37 return $saved; 38 } 39 40 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 41 $query = id(new PhabricatorCalendarEventQuery()); 42 43 $min_range = null; 44 $max_range = null; 45 46 if ($saved->getParameter('rangeStart')) { 47 $min_range = $saved->getParameter('rangeStart'); 48 } 49 50 if ($saved->getParameter('rangeEnd')) { 51 $max_range = $saved->getParameter('rangeEnd'); 52 } 53 54 if ($saved->getParameter('upcoming')) { 55 if ($min_range) { 56 $min_range = max(time(), $min_range); 57 } else { 58 $min_range = time(); 59 } 60 } 61 62 if ($min_range || $max_range) { 63 $query->withDateRange($min_range, $max_range); 64 } 65 66 $invited_phids = $saved->getParameter('invitedPHIDs'); 67 if ($invited_phids) { 68 $query->withInvitedPHIDs($invited_phids); 69 } 70 71 $creator_phids = $saved->getParameter('creatorPHIDs'); 72 if ($creator_phids) { 73 $query->withCreatorPHIDs($creator_phids); 74 } 75 76 return $query; 77 } 78 79 public function buildSearchForm( 80 AphrontFormView $form, 81 PhabricatorSavedQuery $saved) { 82 83 $range_start = $saved->getParameter('rangeStart'); 84 $range_end = $saved->getParameter('rangeEnd'); 85 $upcoming = $saved->getParameter('upcoming'); 86 87 $invited_phids = $saved->getParameter('invitedPHIDs', array()); 88 $creator_phids = $saved->getParameter('creatorPHIDs', array()); 89 90 $all_phids = array_merge( 91 $invited_phids, 92 $creator_phids); 93 94 if ($all_phids) { 95 $handles = id(new PhabricatorHandleQuery()) 96 ->setViewer($this->requireViewer()) 97 ->withPHIDs($all_phids) 98 ->execute(); 99 } else { 100 $handles = array(); 101 } 102 103 $invited_handles = array_select_keys($handles, $invited_phids); 104 $creator_handles = array_select_keys($handles, $creator_phids); 105 106 $form 107 ->appendChild( 108 id(new AphrontFormTokenizerControl()) 109 ->setDatasource(new PhabricatorPeopleDatasource()) 110 ->setName('creators') 111 ->setLabel(pht('Created By')) 112 ->setValue($creator_handles)) 113 ->appendChild( 114 id(new AphrontFormTokenizerControl()) 115 ->setDatasource(new PhabricatorPeopleDatasource()) 116 ->setName('invited') 117 ->setLabel(pht('Invited')) 118 ->setValue($invited_handles)) 119 ->appendChild( 120 id(new AphrontFormDateControl()) 121 ->setLabel(pht('Occurs After')) 122 ->setUser($this->requireViewer()) 123 ->setName('rangeStart') 124 ->setAllowNull(true) 125 ->setValue($range_start)) 126 ->appendChild( 127 id(new AphrontFormDateControl()) 128 ->setLabel(pht('Occurs Before')) 129 ->setUser($this->requireViewer()) 130 ->setName('rangeEnd') 131 ->setAllowNull(true) 132 ->setValue($range_end)) 133 ->appendChild( 134 id(new AphrontFormCheckboxControl()) 135 ->addCheckbox( 136 'upcoming', 137 1, 138 pht('Show only upcoming events.'), 139 $upcoming)); 140 } 141 142 protected function getURI($path) { 143 return '/calendar/event/'.$path; 144 } 145 146 public function getBuiltinQueryNames() { 147 $names = array( 148 'upcoming' => pht('Upcoming Events'), 149 'all' => pht('All Events'), 150 ); 151 152 return $names; 153 } 154 155 public function buildSavedQueryFromBuiltin($query_key) { 156 $query = $this->newSavedQuery(); 157 $query->setQueryKey($query_key); 158 159 switch ($query_key) { 160 case 'upcoming': 161 return $query->setParameter('upcoming', true); 162 case 'all': 163 return $query; 164 } 165 166 return parent::buildSavedQueryFromBuiltin($query_key); 167 } 168 169 protected function getRequiredHandlePHIDsForResultList( 170 array $objects, 171 PhabricatorSavedQuery $query) { 172 $phids = array(); 173 foreach ($objects as $event) { 174 $phids[$event->getUserPHID()] = 1; 175 } 176 return array_keys($phids); 177 } 178 179 protected function renderResultList( 180 array $events, 181 PhabricatorSavedQuery $query, 182 array $handles) { 183 assert_instances_of($events, 'PhabricatorCalendarEvent'); 184 185 $viewer = $this->requireViewer(); 186 187 $list = new PHUIObjectItemListView(); 188 foreach ($events as $event) { 189 if ($event->getUserPHID() == $viewer->getPHID()) { 190 $href = $this->getApplicationURI('/event/edit/'.$event->getID().'/'); 191 } else { 192 $from = $event->getDateFrom(); 193 $month = phabricator_format_local_time($from, $viewer, 'm'); 194 $year = phabricator_format_local_time($from, $viewer, 'Y'); 195 $uri = new PhutilURI($this->getApplicationURI()); 196 $uri->setQueryParams( 197 array( 198 'month' => $month, 199 'year' => $year, 200 )); 201 $href = (string) $uri; 202 } 203 $from = phabricator_datetime($event->getDateFrom(), $viewer); 204 $to = phabricator_datetime($event->getDateTo(), $viewer); 205 $creator_handle = $handles[$event->getUserPHID()]; 206 207 $color = ($event->getStatus() == PhabricatorCalendarEvent::STATUS_AWAY) 208 ? 'red' 209 : 'yellow'; 210 211 $item = id(new PHUIObjectItemView()) 212 ->setHeader($event->getTerseSummary($viewer)) 213 ->setHref($href) 214 ->setBarColor($color) 215 ->addByline(pht('Creator: %s', $creator_handle->renderLink())) 216 ->addAttribute(pht('From %s to %s', $from, $to)) 217 ->addAttribute(id(new PhutilUTF8StringTruncator()) 218 ->setMaximumGlyphs(64) 219 ->truncateString($event->getDescription())); 220 221 $list->addItem($item); 222 } 223 224 return $list; 225 } 226 227 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |