<?php
/**
* Admin Columns Pro website connection API
*
* @since 3.0
*/
class ACP_API {
/**
* API url
*
* @since 3.1.2
* @var type string
*/
public $url;
/**
* Request args
*
* @since 3.1.2
* @var type array
*/
public $request_args;
/**
* Constructor
*
* @since 3.1.2
*/
public function __construct() {
$this->request_args = array(
'timeout' => 15,
'sslverify' => false,
'body' => array(
'wc-api' => 'software-licence-api',
),
);
}
/**
* Set url
*
* @since 3.1.2
* @return ACP_API
*/
public function set_url( $api_url ) {
$this->url = $api_url;
return $this;
}
/**
* Get url
*
* @since 3.1.2
* @return string
*/
public function get_url() {
return $this->url;
}
/**
* Set request arg
*
* @since 3.1.2
* @return ACP_API
*/
public function set_request_arg( $key, $value ) {
$this->request_args[ $key ] = $value;
return $this;
}
/**
* Get request args
*
* @since 3.1.2
* @return array
*/
public function get_request_args() {
return $this->request_args;
}
/**
* Activate a license by its license key
*
* @since 3.0
*
* @param string $licence_key Licence Key
* @return mixed API Response
*/
public function activate_licence( $licence_key ) {
$response = $this->request( array(
'request' => 'activation',
'licence_key' => $licence_key,
'site_url' => site_url()
) );
return $response;
}
/**
* Activate a license by its license key
*
* @since 3.0
*
* @return mixed API Response
*/
public function deactivate_licence( $licence_key ) {
$response = $this->request( array(
'request' => 'deactivation',
'licence_key' => $licence_key,
'site_url' => site_url() // identifying
) );
return $response;
}
/**
* Plugin HTML changelog
*
* @since 3.0
*
* @return mixed API Response
*/
public function get_plugin_changelog( $plugin_basename ) {
$response = $this->request( array(
'request' => 'pluginchangelog',
'plugin_name' => $plugin_basename,
), 'html' );
return $response;
}
/**
* Get remote plugin update data in the WP format: url, slug, package, new_version, id
*
* @since 1.1
*
* @param string $licence_key Licence Key
* @param string $plugin_basename Plugin basename
* @return mixed API Response
*/
public function get_plugin_install_data( $licence_key, $plugin_basename ) {
$response = $this->request( array(
'request' => 'plugininstall',
'licence_key' => $licence_key,
'plugin_name' => $plugin_basename
));
return $response;
}
/**
* Get remote plugin update data in the WP format: name, slug, download_link, version
*
* @since 1.1
*
* @param string $licence_key Licence Key
* @param string $plugin_basename Plugin basename
* @param string $current_version Plugin's current version
* @return mixed API Response
*/
public function get_plugin_update_data( $licence_key, $plugin_basename, $current_version ) {
$response = $this->request( array(
'request' => 'pluginupdate',
'licence_key' => $licence_key,
'plugin_name' => $plugin_basename,
'version' => $current_version
));
return $response;
}
/**
* Get remote plugin update data in the WP format: ...
*
* @since 1.1
* @param string $plugin_basename
* @return mixed API Response
*/
public function get_plugin_details( $plugin_basename ) {
$response = $this->request( array(
'request' => 'plugindetails',
'plugin_name' => $plugin_basename,
));
return $response;
}
/**
* Get license details
*
* @since 3.4.3
* @param string $license_key
* @return mixed API Response
*/
public function get_license_details( $license_key ) {
$response = $this->request( array(
'request' => 'licensedetails',
'license_key' => $license_key,
));
return $response;
}
/**
* Test request
*
* @since 3.1.2
* @param string $plugin_basename
* @return mixed API response
*/
public function test_request( $plugin_basename ) {
$response = $this->get_plugin_details( $plugin_basename );
return is_wp_error( $response ) && 'http_request_failed' == $response->get_error_code() ? false : true;
}
/**
* API Request
*
* @since 1.1
*
* @param array $body
* @return mixed API Response
*/
protected function request( $body, $format = 'json' ) {
$this->request_args['body'] = array_merge( $this->request_args['body'], $body );
$result = wp_remote_post( $this->url, $this->request_args );
if ( is_wp_error( $result ) ) {
return $result;
}
$response = wp_remote_retrieve_body( $result );
if ( 'json' == $format ) {
$response = json_decode( $response );
}
if ( isset( $response->error ) ) {
return new WP_Error( $response->code, $response->message );
}
elseif ( empty( $response ) ) {
return new WP_Error( 'empty_response', __( 'Empty response from API.', 'codepress-admin-columns' ) );
}
return $response;
}
}