first commit

This commit is contained in:
2026-03-05 13:07:40 +01:00
commit 64ba0721ee
25709 changed files with 4691006 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
{
"name": "wpdesk\/wp-woocommerce-shipping-method",
"description": "WooCommerce Shipping Method",
"license": "MIT",
"keywords": [
"wordpress",
"woocommerce",
"shipping"
],
"homepage": "https:\/\/gitlab.com\/wpdesk\/predators\/library\/wp-woocommerce-shipping-method",
"authors": [
{
"name": "grola",
"email": "grola@wpdesk.net"
}
],
"prefer-stable": true,
"minimum-stability": "stable",
"require": {
"php": ">=7.0",
"wpdesk\/abstract-shipping": "^2.6.0",
"psr\/log": "^1.1",
"wpdesk\/wp-view": "^1.1|^2.0.0",
"wpdesk\/wp-plugin-flow": "^2.4|^3.0"
},
"require-dev": {
"phpunit\/phpunit": "<7",
"wp-coding-standards\/wpcs": "^0.14.1",
"squizlabs\/php_codesniffer": "^3.0.2",
"mockery\/mockery": "*",
"10up\/wp_mock": "*",
"phpcompatibility\/php-compatibility": "^9.1",
"wpdesk\/wp-persistence": "^3.0"
},
"autoload": {
"psr-4": {
"DPDVendor\\WPDesk\\WooCommerceShippingMethod\\": "src"
}
},
"autoload-dev": {
"classmap": [
"tests\/unit"
]
},
"extra": {
"text-domain": "wp-woocommerce-shipping-method",
"translations-folder": "lang",
"po-files": {
"pl_PL": "pl_PL.po"
}
},
"scripts": {
"phpcs": "phpcs",
"phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
"phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
"phpunit-integration": "phpunit --configuration phpunit-integration.xml --coverage-text --colors=never",
"phpunit-integration-fast": "phpunit --configuration phpunit-integration.xml --no-coverage"
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus;
trait ApiConnectionRenderer
{
/**
* Generate Api Connection Status HTML.
*
* @param string $key Field key.
* @param array $data Field data.
* @return string
*/
public function generate_api_connection_status_html($key, $data)
{
$field = new \DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus\ApiConnectionStatus();
\ob_start();
$field->output_connection_status($key, $data, $this->id);
return \ob_get_clean();
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus;
/**
* Can render settings field.
*/
class ApiConnectionStatus
{
const FIELD_TYPE = 'api_connection_status';
/**
* @param string $key .
* @param string[] $data .
* @param string $method_id .
*s
* @return void
*/
public function output_connection_status($key, $data, $method_id)
{
$ajax = ['action' => \DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus\ApiConnectionStatusAjax::AJAX_ACTION, 'nonce' => \wp_create_nonce(\DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus\ApiConnectionStatusAjax::AJAX_ACTION), 'url' => \admin_url('admin-ajax.php')];
include __DIR__ . '/views/html-connection-status-field.php';
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus;
/**
* Can check Api Connection Status.
*/
abstract class ApiConnectionStatusAjax implements \DPDVendor\WPDesk\PluginBuilder\Plugin\Hookable
{
const AJAX_ACTION = 'fs_api_connection_status';
/**
* @var string
*/
private $integration;
/**
* @param string $integration
*/
public function __construct(string $integration)
{
$this->integration = $integration;
}
/**
* @inheritDoc
*/
public function hooks()
{
\add_action('wp_ajax_' . self::AJAX_ACTION, [$this, 'check_connection_status']);
}
/**
* @return void
*/
public function check_connection_status()
{
\check_ajax_referer(self::AJAX_ACTION);
$integration = isset($_POST['integration']) ? \sanitize_key($_POST['integration']) : '';
if ($integration === $this->integration) {
try {
$field = \sanitize_key($_POST['field']);
$this->check_api_connection($field);
\wp_send_json_success(['message' => \__('Connected', 'woocommerce-dpd')]);
} catch (\Exception $e) {
\wp_send_json_error(['message' => \sprintf(
// Translators: error.
\__('Connection error: %1$s', 'woocommerce-dpd'),
$e->getMessage()
)]);
}
}
}
/**
* @param string $field .
* @return void
*
* @throws \Exception
*/
public abstract function check_api_connection($field);
}

View File

@@ -0,0 +1,15 @@
<?php
namespace DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus;
interface HasApiConnectionStatusField
{
/**
* Generate Api Connection Status HTML.
*
* @param string $key Field key.
* @param array $data Field data.
* @return string
*/
public function generate_api_connection_status_html($key, $data);
}

View File

@@ -0,0 +1,72 @@
<?php
namespace DPDVendor;
/**
* @var string[] $data .
* @var string[] $ajax .
* @var string $key .
* @var string $method_id .
*
* @package WPDesk\GLS\WooCommerceSettings
*/
// @phpstan-ignore-next-line
\defined('ABSPATH') || exit;
$field_id = \esc_attr(\DPDVendor\WPDesk\WooCommerceShippingMethod\Field\ApiConnectionStatus\ApiConnectionStatus::FIELD_TYPE . '_' . $key);
?>
<tr valign="top">
<th scope="row" class="titledesc">
<?php
echo \wp_kses_post($data['title']);
?>
</th>
<td class="forminp forminp-text" id="<?php
echo \esc_attr($field_id);
?>">
<strong class="js--result-field"><span style="float: left; margin: unset;" class="spinner is-active"></span></strong>
<script type="text/javascript">
document.addEventListener( "DOMContentLoaded", function ( event ) {
var request = new XMLHttpRequest();
var params = new FormData();
params.append( 'integration', '<?php
echo \esc_js($method_id);
?>' );
params.append( 'field', '<?php
echo \esc_js($key);
?>' );
params.append( 'action', '<?php
echo \esc_js($ajax['action']);
?>' );
params.append( '_wpnonce', '<?php
echo \esc_js($ajax['nonce']);
?>' );
request.open( 'POST', '<?php
echo \esc_url($ajax['url']);
?>', true );
request.onload = function () {
if ( this.status >= 200 && this.status < 400 ) {
var response = JSON.parse( this.response );
var elem = document.querySelector( '#<?php
echo \esc_attr($field_id);
?> .js--result-field' );
if ( response.success ) {
elem.style.color = 'green';
} else {
elem.style.color = 'red';
}
elem.innerHTML = response.data.message;
}
};
request.send( params );
} );
</script>
</td>
</tr>
<?php