| <?php | |
| /** | |
| * ***************************************************************************** | |
| * Copyright (c) 2016 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Christopher Guindon (Eclipse Foundation) - Initial implementation | |
| * ***************************************************************************** | |
| */ | |
| require_once ('lib/eclipseussblob.class.php'); | |
| /** | |
| * GerritApi class | |
| * | |
| * Usage example: | |
| * | |
| * include_once('gerritApi.class.php'); | |
| * $GerritApi = new GerritApi(); | |
| * $GerritApi->getRequest("changes/?q=reviewer:chris.guindon@eclipse.org+status:merged"); | |
| * | |
| * @author chrisguindon | |
| */ | |
| class GerritApi extends EclipseUSSBlob { | |
| /** | |
| * Constuctor | |
| */ | |
| function __construct(App $App = NULL) { | |
| parent::__construct($App); | |
| $this->setBaseUrl("https://git.eclipse.org/r"); | |
| } | |
| /** | |
| * Fetch all merged reviews for a particular user | |
| * | |
| * @param string $endoint | |
| * @param number $start | |
| * @param number $pagesize | |
| * @param bool $get_all | |
| * | |
| * @return Response[] | |
| */ | |
| public function getRequest($endoint = "", $start = 0, $pagesize = 100, $get_all = TRUE) { | |
| $arguments = array( | |
| 'endpoint' => $endoint, | |
| 'start' => $start, | |
| 'pagesize' => $pagesize | |
| ); | |
| // Simple validation before making a request to gerrit | |
| if (empty($arguments['endpoint']) || !is_numeric($arguments['start']) || !is_numeric($arguments['pagesize'])) { | |
| return array(); | |
| } | |
| $return = array(); | |
| while ($data = $this->_getAllPages($arguments)) { | |
| $return[] = $data; | |
| if (!$data->continue || $get_all === FALSE) { | |
| break; | |
| } | |
| $arguments['start'] += $arguments['pagesize']; | |
| } | |
| return $return; | |
| } | |
| /** | |
| * Fetch all pages from gerrit API. | |
| * | |
| * @param array $arguments | |
| * | |
| * @return Response | |
| */ | |
| private function _getAllPages($arguments) { | |
| $data = $this->get($arguments['endpoint'] . "&start=" . $arguments['start'] . "&n=" . $arguments['pagesize']); | |
| $data->body = json_decode(preg_replace('/^.+\n/', '', $data->body, 1)); | |
| $last_item = end($data->body); | |
| $data->continue = TRUE; | |
| if (!isset($last_item->_more_changes) || $last_item->_more_changes === FALSE) { | |
| $data->continue = FALSE; | |
| } | |
| return $data; | |
| } | |
| } |