diff --git a/src/aphront/request/AphrontRequest.php b/src/aphront/request/AphrontRequest.php index 118119e6a2..d7f5fe8be5 100644 --- a/src/aphront/request/AphrontRequest.php +++ b/src/aphront/request/AphrontRequest.php @@ -303,7 +303,8 @@ final class AphrontRequest { final public function getRequestURI() { $get = $_GET; unset($get['__path__']); - return id(new PhutilURI($this->getPath()))->setQueryParams($get); + $path = phutil_escape_uri($this->getPath()); + return id(new PhutilURI($path))->setQueryParams($get); } final public function isDialogFormPost() { diff --git a/src/aphront/request/__init__.php b/src/aphront/request/__init__.php index 7e0a7e8115..61fb9f861c 100644 --- a/src/aphront/request/__init__.php +++ b/src/aphront/request/__init__.php @@ -9,6 +9,7 @@ phutil_require_module('phabricator', 'aphront/exception/csrf'); phutil_require_module('phabricator', 'infrastructure/env'); +phutil_require_module('phutil', 'markup'); phutil_require_module('phutil', 'parser/uri'); phutil_require_module('phutil', 'utils'); diff --git a/src/applications/chatlog/controller/channellog/PhabricatorChatLogChannelLogController.php b/src/applications/chatlog/controller/channellog/PhabricatorChatLogChannelLogController.php index bcf1d35a0f..2f89b40a49 100644 --- a/src/applications/chatlog/controller/channellog/PhabricatorChatLogChannelLogController.php +++ b/src/applications/chatlog/controller/channellog/PhabricatorChatLogChannelLogController.php @@ -27,13 +27,19 @@ final class PhabricatorChatLogChannelLogController public function processRequest() { - $request = $this->getRequest(); - $user = $request->getUser(); + $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)); - $query->setLimit(1000); - $logs = $query->execute(); + $logs = $query->executeWithPager($pager); require_celerity_resource('phabricator-chatlog-css'); @@ -78,7 +84,10 @@ final class PhabricatorChatLogChannelLogController return $this->buildStandardPageResponse( - implode("\n", $out), + array( + implode("\n", $out), + $pager + ), array( 'title' => 'Channel Log', )); diff --git a/src/applications/chatlog/controller/channellog/__init__.php b/src/applications/chatlog/controller/channellog/__init__.php index ca4927c293..0dfed22523 100644 --- a/src/applications/chatlog/controller/channellog/__init__.php +++ b/src/applications/chatlog/controller/channellog/__init__.php @@ -9,6 +9,7 @@ phutil_require_module('phabricator', 'applications/chatlog/controller/base'); phutil_require_module('phabricator', 'applications/chatlog/query'); phutil_require_module('phabricator', 'infrastructure/celerity/api'); +phutil_require_module('phabricator', 'view/control/pager'); phutil_require_module('phabricator', 'view/utils'); phutil_require_module('phutil', 'markup'); diff --git a/src/applications/chatlog/query/PhabricatorChatLogQuery.php b/src/applications/chatlog/query/PhabricatorChatLogQuery.php index f15454a11b..9a52e37ee1 100644 --- a/src/applications/chatlog/query/PhabricatorChatLogQuery.php +++ b/src/applications/chatlog/query/PhabricatorChatLogQuery.php @@ -16,35 +16,20 @@ * limitations under the License. */ -final class PhabricatorChatLogQuery { - +final class PhabricatorChatLogQuery extends PhabricatorOffsetPagedQuery { private $channels; - private $limit; - public function withChannels(array $channels) { $this->channels = $channels; return $this; } - public function setLimit($limit) { - $this->limit = $limit; - return $this; - } - public function execute() { - $table = new PhabricatorChatLogEvent(); + $table = new PhabricatorChatLogEvent(); $conn_r = $table->establishConnection('r'); $where_clause = $this->buildWhereClause($conn_r); - - $limit_clause = ''; - if ($this->limit) { - $limit_clause = qsprintf( - $conn_r, - 'LIMIT %d', - $this->limit); - } + $limit_clause = $this->buildLimitClause($conn_r); $data = queryfx_all( $conn_r, @@ -76,5 +61,4 @@ final class PhabricatorChatLogQuery { return $where; } - } diff --git a/src/applications/chatlog/query/__init__.php b/src/applications/chatlog/query/__init__.php index 6af86c96a0..5afb603820 100644 --- a/src/applications/chatlog/query/__init__.php +++ b/src/applications/chatlog/query/__init__.php @@ -7,6 +7,7 @@ phutil_require_module('phabricator', 'applications/chatlog/storage/event'); +phutil_require_module('phabricator', 'infrastructure/query/offsetpaged'); phutil_require_module('phabricator', 'storage/qsprintf'); phutil_require_module('phabricator', 'storage/queryfx');