protected function execute(ConduitAPIRequest $request)
 {
     $query = new PhabricatorChatLogQuery();
     $channels = $request->getValue('channels');
     if ($channels) {
         $query->withChannels($channels);
     }
     $limit = $request->getValue('limit');
     if (!$limit) {
         $limit = 100;
     }
     $query->setLimit($limit);
     $logs = $query->execute();
     $results = array();
     foreach ($logs as $log) {
         $results[] = array('channel' => $log->getChannel(), 'epoch' => $log->getEpoch(), 'author' => $log->getAuthor(), 'type' => $log->getType(), 'message' => $log->getMessage(), 'loggedByPHID' => $log->getLoggedByPHID());
     }
     return $results;
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $offset = $request->getInt('offset', 0);
     $page_size = 1000;
     $pager = new AphrontPagerView();
     $request_uri = $request->getRequestURI();
     $pager->setURI($request_uri, 'offset');
     $pager->setPageSize($page_size);
     $pager->setOffset($offset);
     $query = new PhabricatorChatLogQuery();
     $query->withChannels(array($this->channel));
     $logs = $query->executeWithPager($pager);
     require_celerity_resource('phabricator-chatlog-css');
     $last_author = null;
     $last_epoch = null;
     $row_idx = 0;
     $row_colors = array('normal', 'alternate');
     $out = array();
     $out[] = '<table class="phabricator-chat-log">';
     foreach ($logs as $log) {
         $this_author = $log->getAuthor();
         $this_epoch = $log->getEpoch();
         if ($this_author !== $last_author || $this_epoch - 60 * 5 > $last_epoch) {
             ++$row_idx;
             $out[] = '<tr class="initial ' . $row_colors[$row_idx % 2] . '">';
             $out[] = '<td class="timestamp">' . phabricator_datetime($log->getEpoch(), $user) . '</td>';
             $author = $log->getAuthor();
             $author = phutil_utf8_shorten($author, 18);
             $out[] = '<td class="author">' . phutil_escape_html($author) . '</td>';
         } else {
             $out[] = '<tr class="' . $row_colors[$row_idx % 2] . '">';
             $out[] = '<td class="similar" colspan="2"></td>';
         }
         $out[] = '<td class="message">' . phutil_escape_html($log->getMessage()) . '</td>';
         $out[] = '</tr>';
         $last_author = $this_author;
         $last_epoch = $this_epoch;
     }
     $out[] = '</table>';
     return $this->buildStandardPageResponse(array(implode("\n", $out), $pager), array('title' => 'Channel Log'));
 }