public function getEditorValue(PhabricatorUser $viewer, $target) { try { $type = $this->getHeraldActionStandardType(); } catch (PhutilMethodNotImplementedException $ex) { return $target; } switch ($type) { case self::STANDARD_PHID_LIST: $handles = $viewer->loadHandles($target); $handles = iterator_to_array($handles); return mpull($handles, 'getName', 'getPHID'); } return $target; }
public function getEditorValue(PhabricatorUser $viewer, $value) { // TODO: This should be better structured and pushed down into individual // fields. As it is used to manually build tokenizer tokens, it can // probably be removed entirely. if (is_array($value)) { $handles = $viewer->loadHandles($value); $value_map = array(); foreach ($value as $k => $phid) { $value_map[$phid] = $handles[$phid]->getName(); } $value = $value_map; } return $value; }
protected function renderPostList(array $posts, PhabricatorUser $viewer, $nodata) { assert_instances_of($posts, 'PhamePost'); $handle_phids = array(); foreach ($posts as $post) { $handle_phids[] = $post->getBloggerPHID(); if ($post->getBlog()) { $handle_phids[] = $post->getBlog()->getPHID(); } } $handles = $viewer->loadHandles($handle_phids); $stories = array(); foreach ($posts as $post) { $blogger = $handles[$post->getBloggerPHID()]->renderLink(); $blogger_uri = $handles[$post->getBloggerPHID()]->getURI(); $blogger_image = $handles[$post->getBloggerPHID()]->getImageURI(); $blog = null; if ($post->getBlog()) { $blog = $handles[$post->getBlog()->getPHID()]->renderLink(); } $phame_post = ''; if ($post->getBody()) { $phame_post = PhabricatorMarkupEngine::summarize($post->getBody()); } $blog_view = $post->getViewURI(); $phame_title = phutil_tag('a', array('href' => $blog_view), $post->getTitle()); $blogger = phutil_tag('strong', array(), $blogger); if ($post->isDraft()) { $title = pht('%s drafted a blog post on %s.', $blogger, $blog); $title = phutil_tag('em', array(), $title); } else { $title = pht('%s wrote a blog post on %s.', $blogger, $blog); } $item = id(new PHUIObjectItemView())->setObject($post)->setHeader($post->getTitle())->setHref($this->getApplicationURI('post/view/' . $post->getID() . '/')); $story = id(new PHUIFeedStoryView())->setTitle($title)->setImage($blogger_image)->setImageHref($blogger_uri)->setAppIcon('fa-star')->setUser($viewer)->setPontification($phame_post, $phame_title); if (PhabricatorPolicyFilter::hasCapability($viewer, $post, PhabricatorPolicyCapability::CAN_EDIT)) { $story->addAction(id(new PHUIIconView())->setHref($this->getApplicationURI('post/edit/' . $post->getID() . '/'))->setIconFont('fa-pencil')); } if ($post->getDatePublished()) { $story->setEpoch($post->getDatePublished()); } $stories[] = $story; } if (empty($stories)) { return id(new PHUIBoxView())->appendChild($nodata)->addClass('mlt mlb msr msl'); } return $stories; }
public function newIntermediateEventNode(PhabricatorUser $viewer, array $children) { $base_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/')); $domain = $base_uri->getDomain(); // NOTE: For recurring events, all of the events in the series have the // same UID (the UID of the parent). The child event instances are // differentiated by the "RECURRENCE-ID" field. if ($this->isChildEvent()) { $parent = $this->getParentEvent(); $instance_datetime = PhutilCalendarAbsoluteDateTime::newFromEpoch($this->getUTCInstanceEpoch()); $recurrence_id = $instance_datetime->getISO8601(); $rrule = null; } else { $parent = $this; $recurrence_id = null; $rrule = $this->newRecurrenceRule(); } $uid = $parent->getPHID() . '@' . $domain; $created = $this->getDateCreated(); $created = PhutilCalendarAbsoluteDateTime::newFromEpoch($created); $modified = $this->getDateModified(); $modified = PhutilCalendarAbsoluteDateTime::newFromEpoch($modified); $date_start = $this->newStartDateTime(); $date_end = $this->newEndDateTime(); if ($this->getIsAllDay()) { $date_start->setIsAllDay(true); $date_end->setIsAllDay(true); } $host_phid = $this->getHostPHID(); $invitees = $this->getInvitees(); foreach ($invitees as $key => $invitee) { if ($invitee->isUninvited()) { unset($invitees[$key]); } } $phids = array(); $phids[] = $host_phid; foreach ($invitees as $invitee) { $phids[] = $invitee->getInviteePHID(); } $handles = $viewer->loadHandles($phids); $host_handle = $handles[$host_phid]; $host_name = $host_handle->getFullName(); // NOTE: Gmail shows "Who: Unknown Organizer*" if the organizer URI does // not look like an email address. Use a synthetic address so it shows // the host name instead. $install_uri = PhabricatorEnv::getProductionURI('/'); $install_uri = new PhutilURI($install_uri); // This should possibly use "metamta.reply-handler-domain" instead, but // we do not currently accept mail for users anyway, and that option may // not be configured. $mail_domain = $install_uri->getDomain(); $host_uri = "mailto:{$host_phid}@{$mail_domain}"; $organizer = id(new PhutilCalendarUserNode())->setName($host_name)->setURI($host_uri); $attendees = array(); foreach ($invitees as $invitee) { $invitee_phid = $invitee->getInviteePHID(); $invitee_handle = $handles[$invitee_phid]; $invitee_name = $invitee_handle->getFullName(); $invitee_uri = $invitee_handle->getURI(); $invitee_uri = PhabricatorEnv::getURI($invitee_uri); switch ($invitee->getStatus()) { case PhabricatorCalendarEventInvitee::STATUS_ATTENDING: $status = PhutilCalendarUserNode::STATUS_ACCEPTED; break; case PhabricatorCalendarEventInvitee::STATUS_DECLINED: $status = PhutilCalendarUserNode::STATUS_DECLINED; break; case PhabricatorCalendarEventInvitee::STATUS_INVITED: default: $status = PhutilCalendarUserNode::STATUS_INVITED; break; } $attendees[] = id(new PhutilCalendarUserNode())->setName($invitee_name)->setURI($invitee_uri)->setStatus($status); } // TODO: Use $children to generate EXDATE/RDATE information. $node = id(new PhutilCalendarEventNode())->setUID($uid)->setName($this->getName())->setDescription($this->getDescription())->setCreatedDateTime($created)->setModifiedDateTime($modified)->setStartDateTime($date_start)->setEndDateTime($date_end)->setOrganizer($organizer)->setAttendees($attendees); if ($rrule) { $node->setRecurrenceRule($rrule); } if ($recurrence_id) { $node->setRecurrenceID($recurrence_id); } return $node; }
public function newIntermediateEventNode(PhabricatorUser $viewer) { $base_uri = new PhutilURI(PhabricatorEnv::getProductionURI('/')); $domain = $base_uri->getDomain(); $uid = $this->getPHID() . '@' . $domain; $created = $this->getDateCreated(); $created = PhutilCalendarAbsoluteDateTime::newFromEpoch($created); $modified = $this->getDateModified(); $modified = PhutilCalendarAbsoluteDateTime::newFromEpoch($modified); $date_start = $this->getDateFrom(); $date_start = PhutilCalendarAbsoluteDateTime::newFromEpoch($date_start); $date_end = $this->getDateTo(); $date_end = PhutilCalendarAbsoluteDateTime::newFromEpoch($date_end); if ($this->getIsAllDay()) { $date_start->setIsAllDay(true); $date_end->setIsAllDay(true); } $host_phid = $this->getHostPHID(); $invitees = $this->getInvitees(); foreach ($invitees as $key => $invitee) { if ($invitee->isUninvited()) { unset($invitees[$key]); } } $phids = array(); $phids[] = $host_phid; foreach ($invitees as $invitee) { $phids[] = $invitee->getInviteePHID(); } $handles = $viewer->loadHandles($phids); $host_handle = $handles[$host_phid]; $host_name = $host_handle->getFullName(); $host_uri = $host_handle->getURI(); $host_uri = PhabricatorEnv::getURI($host_uri); $organizer = id(new PhutilCalendarUserNode())->setName($host_name)->setURI($host_uri); $attendees = array(); foreach ($invitees as $invitee) { $invitee_phid = $invitee->getInviteePHID(); $invitee_handle = $handles[$invitee_phid]; $invitee_name = $invitee_handle->getFullName(); $invitee_uri = $invitee_handle->getURI(); $invitee_uri = PhabricatorEnv::getURI($invitee_uri); switch ($invitee->getStatus()) { case PhabricatorCalendarEventInvitee::STATUS_ATTENDING: $status = PhutilCalendarUserNode::STATUS_ACCEPTED; break; case PhabricatorCalendarEventInvitee::STATUS_DECLINED: $status = PhutilCalendarUserNode::STATUS_DECLINED; break; case PhabricatorCalendarEventInvitee::STATUS_INVITED: default: $status = PhutilCalendarUserNode::STATUS_INVITED; break; } $attendees[] = id(new PhutilCalendarUserNode())->setName($invitee_name)->setURI($invitee_uri)->setStatus($status); } $node = id(new PhutilCalendarEventNode())->setUID($uid)->setName($this->getName())->setDescription($this->getDescription())->setCreatedDateTime($created)->setModifiedDateTime($modified)->setStartDateTime($date_start)->setEndDateTime($date_end)->setOrganizer($organizer)->setAttendees($attendees); return $node; }