blob: d626ac08591bb45a0e479389f015a8e01f041db4 [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');
/**
* CommitterPaperwork class
*
* Usage example:
*
* include_once('committerpaperwork.class.php');
* $CommitterPaperwork = new CommitterPaperwork();
* $CommitterPaperwork->loginSSO();
*
* @author chrisguindon
*/
class CommitterPaperwork extends EclipseUSSBlob {
private $data = array();
/**
* Class constructor
*/
function __construct(App $App = NULL) {
parent::__construct($App);
}
/**
* Create committer_paperwork record (POST)
*
* @param string $username
* @param array $data
*/
public function createCommitterPaperwork($username = NULL, $data = array()) {
return $this->post('foundation/paperwork/' . $username, json_encode($data));
}
/**
* Delete CommitterPaperwork (DELETE)
*
* @param string $username
* @param unknown $id
*/
public function deleteCommitterPaperwork($username = "", $id = "", $etag = "") {
$response = $this->delete('foundation/paperwork/' . $username . '/' . $id);
$this->unsetHeader('If-Match');
return $response;
}
/**
* Retrieve committer_paperwork (GET)
*
* @param string $username
* @param string $id
*/
public function retrieveCommitterPaperwork($username = "", $id = "", $etag = "") {
if (!empty($etag)) {
$this->setHeader(array(
'If-Match' => $etag
));
}
$response = $this->get('foundation/paperwork/' . $username . '/' . $id);
if (isset($response->code) && $response->code == 200) {
$data = json_decode($response->body);
$this->data[$data->id] = $data;
}
$this->unsetHeader('If-Match');
return $response;
}
/**
* Update committer paperwork record
* @param unknown $username
* @param unknown $id
* @param array $data
* @param string $etag
*/
public function updateCommitterPaperwork($username = NULL, $id = NULL, $data = array(), $etag = "") {
$this->setHeader(array(
'If-Match' => '"' . $etag . '"',
));
$response = $this->put('foundation/paperwork/' . $username . '/' . $id, json_encode($data));
$this->unsetHeader('If-Match');
return $response;
}
/**
* Fetch commiter Paperwork index
*
* @param unknown $username
* @param array $params
*
* @return array
*/
public function indexCommitterPaperwork($username = NULL, $params = array()) {
$url = 'foundation/paperwork';
if (!is_null($username) && is_string($username)) {
$url .= '/' . $username;
}
$query = http_build_query($params);
$response = $this->get($url . '?' . $query);
return $response;
}
/**
* Fetch all Committer Paperwork index
*
* @param unknown $username
* @param array $params
*
* @return array
*/
public function indexAllCommitterPaperwork($username = NULL, $params = array()) {
$data = $this->indexCommitterPaperwork($username, $params);
$return = array();
$return[] = $data;
if (!isset($data->error) && !empty($data->body) && $data) {
while ($data = $this->_getNextPage($data)) {
$return[] = $data;
}
}
return $return;
}
/**
* Start the committer provisioning process. (GET)
*
* @param string $username
* @param int $id
*/
public function targetedActionStartProvisioning($username = NULL, $id = "", $body = array()) {
return $this->post('foundation/paperwork/' . $username . '/provisioning/' . $id, json_encode($body));
}
/**
* Retire a committer from a specific project. (GET)
*
* @param string $username
* @param int $id
*/
public function targetedActionRetireCommitter($username = NULL, $body = array()) {
return $this->post('foundation/paperwork/' . $username . '/retire', json_encode($body));
}
/**
* Validate a username
*
* @param string $username
*
* @return bool
*/
function validateCommitterPaperworkUsername($username) {
if (empty($username) || !is_string($username)) {
return FALSE;
}
// Validate that the username is in LDAP
require_once("/home/data/httpd/eclipse-php-classes/system/ldapconnection.class.php");
$LDAPConnection = new LDAPConnection();
$dn = $LDAPConnection->getDNFromUID($username);
if (empty($dn)) {
return FALSE;
}
return TRUE;
}
/**
* Validate an id
*
* @param string $id
*
* @return bool
*/
function validateCommitterPaperworkId($id) {
$id = filter_var($id, FILTER_VALIDATE_INT);
if (empty($id) && !is_int($id) && $id !== 0) {
return FALSE;
}
return TRUE;
}
/**
* Validate an etag
*
* @param string $etag
*
* @return bool
*/
function validateCommitterPaperworkEtag($etag) {
if (empty($etag) || !is_string($etag)) {
return FALSE;
}
return TRUE;
}
/**
* Validate a page number
*
* @param int $page
*
* @return bool
*/
function validateCommitterPaperworkPage($page) {
if (!is_int($page)) {
return FALSE;
}
return TRUE;
}
/**
* Validate a pagesize
*
* @param string $pagesize
*
* @return bool
*/
function validateCommitterPaperworkPagesize($pagesize) {
if (!is_int($pagesize) || $pagesize > 100) {
return FALSE;
}
return $pagesize;
}
/**
* Validate fields
*
* @param array $data
*
* @return bool
*/
function validateCommitterPaperworkFields($data = array()) {
// If there are no parameters passed this is still valid
// but we can quit here
if (empty($data) || !isset($data['parameters'])) {
return TRUE;
}
$float_fields = array(
'id',
'election_nid',
'election_status',
'committer_paperwork_nid',
'committer_paperwork_status',
'spec_project_working_group'
);
$string_fields = array(
'project_id',
'forge',
);
foreach ($data['parameters'] as $data_field_name => $field_value) {
// Verify the the field name exist in the float and string fields
if (!in_array($data_field_name, $float_fields) && !in_array($data_field_name, $string_fields)) {
return FALSE;
}
foreach ($float_fields as $float_field_name) {
// If the default field name exist in the data array,
// Make sure it validates with the appropriate filter
if (isset($data[$float_field_name]) && filter_var($data[$float_field_name], FILTER_VALIDATE_FLOAT) === FALSE) {
return FALSE;
}
}
// Making sure we are dealing with strings
foreach ($string_fields as $string_field_name) {
if (isset($data[$string_field_name]) && !is_string($data[$string_field_name])) {
return FALSE;
}
}
}
return TRUE;
}
}