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,95 @@
fieldset.settings-field-sender-address {
margin: 0;
padding: 0;
boder: 0;
}
table.sender-address {
position: relative;
table-layout: fixed;
background: #fff;
border: 1px solid #e5e5e5;
box-shadow: 0 1px 1px rgba(0,0,0,.04);
border-spacing: 0;
width: 100%;
clear: both;
margin: 0;
}
table.sender-address thead td {
display: table-cell;
padding: 1em;
vertical-align: top;
line-height: 1.75em;
text-align: left;
font-weight: 600;
text-shadow: none;
font-size: 14px;
}
table.sender-address tbody td {
margin-bottom: 9px;
padding: 15px 10px;
line-height: 1.3;
vertical-align: top;
border-top: 1px solid #e5e5e5;
}
table.sender-address tfoot td {
border-top: 1px solid #e1e1e1;
}
table.sender-address tbody tr:nth-child(even) td {
background: #f9f9f9;
}
table.sender-address input.non-unique {
background: #d62728;
}
table.sender-address tbody td span {
display: none;
}
table.sender-address tbody td.non-unique span {
display: block;
}
table.sender-address input[type="text"] {
max-width: 100%;
width: 100%;
}
table.sender-address input[type="email"] {
max-width: 100%;
width: 100%;
}
table.sender-address tbody tr td:first-child select {
width: 100%;
}
@media only screen and (max-width: 600px) {
table.sender-address tbody tr td:first-child select {
width: auto;
max-width: 100%;
}
table.sender-address, table.sender-address tbody {
display: block;
}
table.sender-address thead {
display: none;
}
table.sender-address tbody tr td:first-child,
table.sender-address thead tr td:first-child {
width: 100%;
display: block;
}
table.sender-address tbody tr, table.sender-address tbody td {
display: block;
width: 100%;
}
}

View File

@@ -0,0 +1,54 @@
{
"name": "wpdesk\/wp-settings-field-sender-address",
"description": "Library for displaying sender address in WooCommerce.",
"license": "MIT",
"keywords": [
"woocommerce",
"sender"
],
"homepage": "https:\/\/gitlab.com\/wpdesk\/wp-settings-sender-address",
"minimum-stability": "stable",
"authors": [
{
"name": "grola",
"email": "grola@wpdesk.net"
}
],
"config": {
"sort-packages": true,
"platform": {
"php": "5.6"
}
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"10up\/wp_mock": "*",
"mockery\/mockery": "*",
"phpunit\/phpunit": "<7",
"wp-coding-standards\/wpcs": "^0.14.1",
"squizlabs\/php_codesniffer": "^3.0.2",
"wimg\/php-compatibility": "^8"
},
"autoload": {
"psr-4": {
"DPDVendor\\WpDesk\\WooCommerce\\ShippingMethod\\Fields\\SenderAddress\\": "src\/"
}
},
"autoload-dev": {},
"extra": {
"text-domain": "wp-settings-field-sender-address",
"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,176 @@
<?php
/**
* Abstract sender address.
*
* @package WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress
*/
namespace DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress;
/**
* Abstract sender address.
*/
abstract class AbstractSenderAddress implements \JsonSerializable
{
const ADDRESS_ID = 'address_id';
const COMPANY = 'company';
const NAME = 'name';
const ADDRESS = 'address';
const POSTAL_CODE = 'postal_code';
const CITY = 'city';
const PHONE = 'phone';
const EMAIL = 'email';
/**
* @var string
*/
private $address_id = '';
/**
* @var string
*/
private $company = '';
/**
* @var string
*/
private $name = '';
/**
* @var string
*/
private $address = '';
/**
* @var string
*/
private $postal_code = '';
/**
* @var string
*/
private $city = '';
/**
* @var string
*/
private $phone = '';
/**
* @var string
*/
private $email = '';
/**
* @return string
*/
public function get_address_id()
{
return $this->address_id;
}
/**
* @param string $address_id
*/
public function set_address_id($address_id)
{
$this->address_id = $address_id;
}
/**
* @return string
*/
public function get_company()
{
return $this->company;
}
/**
* @param string $company
*/
public function set_company($company)
{
$this->company = $company;
}
/**
* @return string
*/
public function get_name()
{
return $this->name;
}
/**
* @param string $name
*/
public function set_name($name)
{
$this->name = $name;
}
/**
* @return string
*/
public function get_address()
{
return $this->address;
}
/**
* @param string $address
*/
public function set_address($address)
{
$this->address = $address;
}
/**
* @return string
*/
public function get_postal_code()
{
return $this->postal_code;
}
/**
* @param string $postal_code
*/
public function set_postal_code($postal_code)
{
$this->postal_code = $postal_code;
}
/**
* @return string
*/
public function get_city()
{
return $this->city;
}
/**
* @param string $city
*/
public function set_city($city)
{
$this->city = $city;
}
/**
* @return string
*/
public function get_phone()
{
return $this->phone;
}
/**
* @param string $phone
*/
public function set_phone($phone)
{
$this->phone = $phone;
}
/**
* @return string
*/
public function get_email()
{
return $this->email;
}
/**
* @param string $email
*/
public function set_email($email)
{
$this->email = $email;
}
/**
* JSON serialize.
*
* @return array
*/
public function jsonSerialize()
{
return [self::ADDRESS_ID => $this->get_address_id(), self::COMPANY => $this->get_company(), self::NAME => $this->get_name(), self::ADDRESS => $this->get_address(), self::POSTAL_CODE => $this->get_postal_code(), self::CITY => $this->get_city(), self::PHONE => $this->get_phone(), self::EMAIL => $this->get_email()];
}
}

View File

@@ -0,0 +1,18 @@
<?php
/**
* Assets.
*
* @package WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress
*/
namespace DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress;
class Assets
{
public function enqueue($base_url, $suffix = '', $scripts_version = '')
{
\wp_register_style('fs_sender_address_css', \trailingslashit($base_url) . 'assets/css/style.css', array(), $scripts_version);
\wp_enqueue_style('fs_sender_address_css');
\wp_enqueue_script('fs_sender_address', \trailingslashit($base_url) . 'assets/js/settings-sender-address.js', array(), $scripts_version);
}
}

View File

@@ -0,0 +1,40 @@
<?php
/**
* Labels.
*
* @package WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress
*/
namespace DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress;
/**
* Labels for REACT component.
*/
class Labels
{
public $address_id;
public $company;
public $name;
public $address;
public $postal_code;
public $city;
public $phone;
public $email;
public $button_delete;
public $button_add;
public $non_unique_id;
public function __construct()
{
$this->address_id = \__('Identifier', 'woocommerce-dpd');
$this->company = \__('Company', 'woocommerce-dpd');
$this->name = \__('Name', 'woocommerce-dpd');
$this->address = \__('Address', 'woocommerce-dpd');
$this->postal_code = \__('Postal code', 'woocommerce-dpd');
$this->city = \__('City', 'woocommerce-dpd');
$this->phone = \__('Phone', 'woocommerce-dpd');
$this->email = \__('Email', 'woocommerce-dpd');
$this->button_add = \__('Add', 'woocommerce-dpd');
$this->button_delete = \__('Delete', 'woocommerce-dpd');
$this->non_unique_id = \__('Identifier is not unique!', 'woocommerce-dpd');
}
}

View File

@@ -0,0 +1,65 @@
<?php
/**
* Box.
*/
namespace DPDVendor\WpDesk\WooCommerce\ShippingMethod;
use DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress\AbstractSenderAddress;
/**
* Settings for box from saved settings.
*
* @package WpDesk\WooCommerce\ShippingMethod
*/
class SenderAddress extends \DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress\AbstractSenderAddress
{
/**
* @param array $sender_address_array .
*
* @return SenderAddress
*/
public static function create_from_array(array $sender_address_array)
{
$address = new \DPDVendor\WpDesk\WooCommerce\ShippingMethod\SenderAddress();
if (isset($sender_address_array[self::ADDRESS_ID])) {
$address->set_address_id($sender_address_array[self::ADDRESS_ID]);
}
if (isset($sender_address_array[self::COMPANY])) {
$address->set_company($sender_address_array[self::COMPANY]);
}
if (isset($sender_address_array[self::NAME])) {
$address->set_name($sender_address_array[self::NAME]);
}
if (isset($sender_address_array[self::ADDRESS])) {
$address->set_address($sender_address_array[self::ADDRESS]);
}
if (isset($sender_address_array[self::POSTAL_CODE])) {
$address->set_postal_code($sender_address_array[self::POSTAL_CODE]);
}
if (isset($sender_address_array[self::CITY])) {
$address->set_city($sender_address_array[self::CITY]);
}
if (isset($sender_address_array[self::PHONE])) {
$address->set_phone($sender_address_array[self::PHONE]);
}
if (isset($sender_address_array[self::EMAIL])) {
$address->set_email($sender_address_array[self::EMAIL]);
}
return $address;
}
/**
* Create addresses from settings.
*
* @param string $sender_address_settings JSON string.
*
* @return SenderAddress[]
*/
public static function create_sender_addresses_from_settings($sender_address_settings)
{
$sender_addresses = [];
foreach (\json_decode($sender_address_settings, \true) as $box_setting) {
$sender_addresses[] = \DPDVendor\WpDesk\WooCommerce\ShippingMethod\SenderAddress::create_from_array($box_setting);
}
return $sender_addresses;
}
}

View File

@@ -0,0 +1,66 @@
<?php
/**
* Settings field.
*/
namespace DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress;
/**
* Display field in settings and handle posted data.
*/
class SettingsField
{
const FIELD_TYPE = 'sender_addresses';
/**
* Field name.
*
* @var string
*/
private $field_name;
/**
* SettingsField constructor.
*
* @param string $field_name .
*/
public function __construct($field_name)
{
$this->field_name = $field_name;
}
/**
* Get field value from post as JSON.
*
* @param array|string $posted_value .
*
* @return string
*/
public function get_field_posted_value_as_json($posted_value)
{
if (!empty($posted_value) && \is_array($posted_value)) {
$value = \json_encode($posted_value);
} else {
$value = \json_encode(array());
}
return $value;
}
/**
* Render field settings.
*
* @param string $field_title
* @param string $tooltip_html
* @param string $settings_field_value_as_json .
* @param Labels $labels .
*/
public function render($field_title, $tooltip_html, $settings_field_value_as_json, $labels)
{
$field_key = $this->field_name;
$settings_field_value_as_array = \json_decode(!empty($settings_field_value_as_json) ? $settings_field_value_as_json : '{}', \true);
if (empty($settings_field_value_as_array)) {
$settings_field_value_as_array = array();
}
if (empty($labels)) {
$labels = new \DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress\Labels();
}
$json_value = \json_encode(\array_values($settings_field_value_as_array));
include __DIR__ . '/views/settings-field.php';
}
}

View File

@@ -0,0 +1,76 @@
<?php
/**
* Render settings HTML.
*
* @package WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress
*/
namespace DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress;
/**
* Can render settings html.
* For use in shipping method when sender_addresses field is used in shipping method settings.
*/
trait ShippingMethodRenderSettingsTrait
{
/**
* Prefix key for settings.
*
* @param string $key Field key.
* @return string
*/
public function get_field_key($key)
{
/** @var \WC_Shipping_Method $shipping_method */
$shipping_method = $this;
return $shipping_method->plugin_id . $shipping_method->id . '_' . $key;
}
/**
* Get field params
*
* @param string $key Field key.
* @param array $data Data.
*
* @return array
*/
private function get_field_params($key, $data)
{
$field_key = $this->get_field_key($key);
$defaults = ['field_key' => $field_key, 'title' => '', 'disabled' => \false, 'class' => '', 'css' => '', 'placeholder' => '', 'type' => 'text', 'desc_tip' => \false, 'description' => '', 'custom_attributes' => [], 'value' => ''];
$data = \wp_parse_args($data, $defaults);
return $data;
}
/**
* Generates settings HTML.
*
* @param string $key .
* @param array $data .
*
* @return string
*/
public function generate_sender_addresses_html($key, $data)
{
/** @var \WC_Shipping_Method $shipping_method */
$shipping_method = $this;
$data['value'] = $shipping_method->get_option($key);
$data = $this->get_field_params($key, $data);
$settings_field = new \DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress\SettingsField($data['field_key']);
\ob_start();
$settings_field->render($data['title'], '', $data['value'], null);
return \ob_get_clean();
}
/**
* Validate field.
*
* Convert field to json.
*
* @param string $key Field key.
* @param string $value Posted Value.
* @return string
*/
public function validate_sender_addresses_field($key, $value)
{
$settings_field = new \DPDVendor\WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress\SettingsField($key);
return $settings_field->get_field_posted_value_as_json(\wp_unslash($value));
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace DPDVendor;
/**
* Display field.
*
* @package WpDesk\WooCommerce\ShippingMethod\Fields\SenderAddress
*
* @var string $field_key
* @var string $field_title
* @var string $tooltip_html
* @var array $labels
* @var string $json_value
* @var array $built_in_boxes
*/
?><tr valign="top">
<th scope="row" class="titledesc">
<label for="<?php
echo \esc_attr($field_key);
?>"><?php
echo \wp_kses_post($field_title);
echo $tooltip_html;
?></label>
</th>
<td class="forminp">
<fieldset
class="settings-field-sender-address"
id="<?php
echo \esc_attr($field_key);
?>_fieldset"
data-value="<?php
echo \esc_attr($json_value);
?>"
data-name="<?php
echo \esc_attr($field_key);
?>"
data-labels="<?php
echo \esc_attr(\json_encode($labels, \JSON_FORCE_OBJECT));
?>"
>
</fieldset>
</td>
</tr>
<?php

View File

@@ -0,0 +1,14 @@
let mix = require( 'laravel-mix' );
mix.options( {
processCssUrls: false,
cssNano: {
discardComments: {
removeAll: true,
},
},
manifest: false
} );
mix.js( [ 'assets-src/settings-sender-address.jsx' ], 'assets/js/settings-sender-address.js' );