blob: e7c8debf959354d774030e52212e04f8b8a46464 [file] [log] [blame]
<?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;
}
}