From fc5a6c6be3966cebb5e91730d94522c4f9d1a944 Mon Sep 17 00:00:00 2001 From: Marek Isalski Date: Sun, 13 Mar 2016 09:34:06 +0100 Subject: [PATCH] call APIv2 --- fulcrm_apiv2.module | 58 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/fulcrm_apiv2.module b/fulcrm_apiv2.module index f3cfe6b..4903e26 100644 --- a/fulcrm_apiv2.module +++ b/fulcrm_apiv2.module @@ -30,8 +30,39 @@ function fulcrm_apiv2_menu() { return $items; } -function fulcrm_apiv2_http( $method, $object, $data = null ) { - $curl = curl_init( 'https://fulcrm.org' . $object ); +function fulcrm_apiv2_http( $method, $object = null, $data = null, $query = null ) { + $url = null; + + if ( substr( $object, 0, 8 ) === 'http://' ) { + throw new Exception( "cannot use HTTP on fulcrm APIv2" ); + } elseif ( substr( $object, 0, 8 ) === 'https://' ) { + $host = parse_url( $object, PHP_URL_HOST ); + if ( ( $host === 'fulcrm.org' ) || ( substr( $host, -10 ) === 'fulcrm.org' ) ) { + $object = parse_url( $object, PHP_URL_PATH ); + $url = 'https://' . variable_get( 'fulcrm_apiv2_hostname', 'fulcrm.org' ) . $object; + } else + throw new Exception( "cannot point fulcrm APIv2 away from fulcrm.org" ); + } elseif ( substr( $object, 0, 8 ) === '/api/v2/' ) { + $url = 'https://' . variable_get( 'fulcrm_apiv2_hostname', 'fulcrm.org' ) . $object; + } else { + $url = 'https://' . variable_get( 'fulcrm_apiv2_hostname', 'fulcrm.org' ) . '/api/v2/' . $object; + } + + if ( is_null( $object ) && is_array( $data ) ) { + if ( array_key_exists( 'url', $data ) ) { + if ( is_null( $url ) ) + $url = $data[ 'url' ]; + elseif ( $data[ 'url' ] !== $url ) + throw new Exception( '$object URL specified different from $data["url"]' ); + } + } + + if ( is_array( $query ) ) + $url = $url . '?' . http_build_query( $query ); + elseif ( is_string( $query ) ) + $url = $url . '?' . $query; + + $curl = curl_init( $url ); curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, $method ); $request_headers = array( 'Authorization: ApiKey ' . variable_get( 'fulcrm_apiv2_user' ) . ':' . variable_get( 'fulcrm_apiv2_key' ), @@ -82,25 +113,28 @@ function fulcrm_apiv2_http( $method, $object, $data = null ) { $r[ 'success' ] = false; } + $r[ 'data' ] = json_decode( $body, $assoc = true ); + $r[ 'data_error' ] = json_last_error(); + return $r; } -function fulcrm_apiv2_GET( $object ) { - return fulcrm_apiv2_http( 'GET', $object ); +function fulcrm_apiv2_GET( $object, $query = null ) { + return fulcrm_apiv2_http( 'GET', $object, $data = null, $query = $query ); } -function fulcrm_apiv2_POST( $object, $data ) { - return fulcrm_apiv2_http( 'POST', $object, $data ); +function fulcrm_apiv2_POST( $object, $data, $query = null ) { + return fulcrm_apiv2_http( 'POST', $object, $data = $data, $query = $query ); } -function fulcrm_apiv2_PUT( $object, $data ) { - return fulcrm_apiv2_http( 'PUT', $object, $data ); +function fulcrm_apiv2_PUT( $object, $data, $query = null ) { + return fulcrm_apiv2_http( 'PUT', $object, $data = $data, $query = $query ); } -function fulcrm_apiv2_PATCH( $object, $data ) { - return fulcrm_apiv2_http( 'PATCH', $object, $data ); +function fulcrm_apiv2_PATCH( $object, $data, $query = null ) { + return fulcrm_apiv2_http( 'PATCH', $object, $data = $data, $query = $query ); } -function fulcrm_apiv2_DELETE( $object ) { - return fulcrm_apiv2_http( 'DELETE', $object ); +function fulcrm_apiv2_DELETE( $object, $query = null ) { + return fulcrm_apiv2_http( 'DELETE', $object, $data = null, $query = $query ); }