Skip to content
Snippets Groups Projects

Multi backend plugin

Merged Lucas García requested to merge feat/multi-backend into main
5 files
+ 157
57
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -4,42 +4,72 @@ namespace WPCT_HTTP;
use Exception;
/**
* HTTP Backend
*
* @since 3.0.0
*/
class Http_Backend
{
private $backend = null;
/**
* Handle backend data.
*
* @since 3.0.0
*/
private $data = null;
/**
* Store backend data
*
* @since 3.0.0
*/
public function __construct($name)
{
$this->backend = $this->get_backend($name);
if (!$this->backend) {
$this->data = $this->get_backend($name);
if (!$this->data) {
throw new Exception("Http backend error: Unkown backend with name {$name}");
}
}
/**
* Backend data getter.
*
* @since 3.0.0
*/
private function get_backend($name)
{
$setting = get_option('wpct-http-bridge_general');
if (!isset($setting['backends'])) {
return null;
}
$backends = $setting['backends'];
$backends = Settings::get_setting('wpct-http-bridge', 'general', 'backends');
foreach ($backends as $backend) {
if ($backend['name'] === $name) {
return $backend;
}
}
return null;
}
/**
* Intercept class gets and lookup on backend data.
*
* @since 3.0.0
*/
public function __get($attr)
{
if (isset($this->backend[$attr])) {
return $this->backend[$attr];
if (isset($this->data[$attr])) {
return $this->data[$attr];
}
return null;
}
/**
* Get backend absolute URL.
*
* @since 3.0.0
*
* @param string $path URL relative path.
* @return string $url Absolute URL.
*/
public function get_endpoint_url($path)
{
$url_data = parse_url($path);
@@ -48,21 +78,28 @@ class Http_Backend
}
$base_url = $this->base_url;
return preg_replace('/\/$', '', $base_url) . '/' . preg_replace('/^\//', '', $path);
return preg_replace('/\/$/', '', $base_url) . '/' . preg_replace('/^\//', '', $path);
}
/**
* Get backend default headers.
*
* @since 3.0.0
*
* @return array $headers Backend headers.
*/
public function get_headers()
{
$headers = [];
foreach ($this->headers as $header) {
[$name, $value] = explode(':', $header);
$headers[strtolower(trim($name))] = trim($value);
$headers[strtolower(trim($header['name']))] = trim($header['value']);
}
return $headers;
}
}
// Get new backend instance.
add_filter('wpct_http_backend', function ($null, $name) {
return new Http_Backend($name);
}, 10, 2);
Loading