Plugin Directory

Changeset 3705828


Ignore:
Timestamp:
09/21/2026 03:06:04 PM (5 weeks ago)
Author:
skfaktura
Message:

Release 0.9.18

Location:
skfaktura-sk-for-woocommerce/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • skfaktura-sk-for-woocommerce/trunk/assets/admin.css

    r3643720 r3705828  
    382382}
    383383
     384.skfaktura-settings-separator {
     385    margin: 34px 0 28px;
     386    border: 0;
     387    border-top: 1px solid #e4e7ec;
     388}
     389
     390.skfaktura-button-preview[data-tracking-preview] {
     391    gap: 14px;
     392    transition: opacity .15s ease;
     393}
     394
     395.skfaktura-button-preview[data-tracking-preview] > span {
     396    margin-bottom: 8px;
     397}
     398
     399.skfaktura-button-preview[data-tracking-preview] [data-tracking-link] {
     400    max-width: 100%;
     401    overflow-wrap: anywhere;
     402}
     403
     404.skfaktura-button-preview[data-tracking-preview].is-disabled {
     405    opacity: .42;
     406}
     407
    384408@media screen and (max-width: 782px) {
    385409    .skfaktura-settings {
  • skfaktura-sk-for-woocommerce/trunk/assets/admin.js

    r3627236 r3705828  
    55    }
    66
    7     var preview = form.querySelector('[data-skfaktura-preview]');
    8     var fields = form.querySelectorAll('[data-style]');
     7    form.querySelectorAll('[data-skfaktura-style-editor]').forEach(function (editor) {
     8        var preview = editor.querySelector('[data-skfaktura-preview]');
     9        var fields = editor.querySelectorAll('[data-style]');
    910
    10     function updatePreview() {
    11         var values = {};
     11        function updatePreview() {
     12            var values = {};
     13            fields.forEach(function (field) {
     14                values[field.dataset.style] = field.value;
     15                var output = editor.querySelector('[data-output="' + field.dataset.style + '"]');
     16                if (output) {
     17                    output.textContent = field.value + ' px';
     18                }
     19            });
     20
     21            preview.style.backgroundColor = values.background;
     22            preview.style.color = values.color;
     23            preview.style.borderColor = values.background;
     24            preview.style.borderRadius = values.border_radius + 'px';
     25            preview.style.padding = values.padding_vertical + 'px ' + values.padding_horizontal + 'px';
     26            preview.style.fontSize = values.font_size + 'px';
     27        }
     28
    1229        fields.forEach(function (field) {
    13             values[field.dataset.style] = field.value;
    14             var output = form.querySelector('[data-output="' + field.dataset.style + '"]');
    15             if (output) {
    16                 output.textContent = field.value + ' px';
    17             }
     30            field.addEventListener('input', updatePreview);
    1831        });
     32        preview.addEventListener('click', function (event) {
     33            event.preventDefault();
     34        });
     35        updatePreview();
     36    });
    1937
    20         preview.style.backgroundColor = values.background;
    21         preview.style.color = values.color;
    22         preview.style.borderColor = values.background;
    23         preview.style.borderRadius = values.border_radius + 'px';
    24         preview.style.padding = values.padding_vertical + 'px ' + values.padding_horizontal + 'px';
    25         preview.style.fontSize = values.font_size + 'px';
     38    var trackingEnabled = form.querySelector('[data-tracking-enabled]');
     39    var trackingDisplay = form.querySelector('[data-tracking-display]');
     40    var trackingLabel = form.querySelector('[data-tracking-button-label]');
     41    var trackingPreview = form.querySelector('[data-tracking-preview]');
     42    var trackingButton = trackingPreview ? trackingPreview.querySelector('[data-skfaktura-preview]') : null;
     43    var trackingLink = trackingPreview ? trackingPreview.querySelector('[data-tracking-link]') : null;
     44
     45    function updateTrackingPreview() {
     46        if (! trackingPreview) {
     47            return;
     48        }
     49        var display = trackingDisplay.value;
     50        trackingPreview.classList.toggle('is-disabled', ! trackingEnabled.checked);
     51        trackingButton.hidden = display === 'link';
     52        trackingLink.hidden = display === 'button';
     53        trackingButton.textContent = trackingLabel.value.trim() || 'Sledovať zásielku';
    2654    }
    2755
    28     fields.forEach(function (field) {
    29         field.addEventListener('input', updatePreview);
     56    [trackingEnabled, trackingDisplay, trackingLabel].forEach(function (field) {
     57        if (field) {
     58            field.addEventListener('input', updateTrackingPreview);
     59            field.addEventListener('change', updateTrackingPreview);
     60        }
    3061    });
    31     preview.addEventListener('click', function (event) {
    32         event.preventDefault();
    33     });
    34     updatePreview();
     62    if (trackingLink) {
     63        trackingLink.addEventListener('click', function (event) {
     64            event.preventDefault();
     65        });
     66    }
     67    updateTrackingPreview();
    3568});
  • skfaktura-sk-for-woocommerce/trunk/includes/class-skfaktura-woocommerce.php

    r3699779 r3705828  
    6666
    6767    private array $inventory_syncs_in_request = [];
     68
     69    private array $shipment_tracking_in_request = [];
    6870
    6971    public static function instance(): self
    … …  
    325327                </form>
    326328            <?php } else {
    327                 $button = $settings['button_style']; ?>
     329                $button = $settings['button_style'];
     330                $trackingButton = $settings['tracking_button_style']; ?>
    328331                <h2>Vzhľad tlačidiel s dokladmi</h2><p>Jedno nastavenie sa použije v HTML e-mailoch, na ďakovacej stránke aj v časti Môj účet. Náhľad sa mení okamžite.</p>
    329332                <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" class="skfaktura-button-style-form"><?php wp_nonce_field('skfaktura_save_settings'); ?><input type="hidden" name="action" value="skfaktura_save_settings"><input type="hidden" name="settings_tab" value="appearance">
    330                     <div class="skfaktura-style-editor">
     333                    <div class="skfaktura-style-editor" data-skfaktura-style-editor>
    331334                        <table class="form-table" role="presentation">
    332335                            <tr><th><label for="skfaktura_button_background">Farba pozadia</label></th><td><input id="skfaktura_button_background" type="color" name="button_style[background]" value="<?php echo esc_attr($button['background']); ?>" data-style="background"></td></tr>
    … …  
    338341                        </table>
    339342                        <div class="skfaktura-button-preview"><span>Náhľad</span><a href="#" data-skfaktura-preview>Zobraziť faktúru</a></div>
     343                    </div>
     344
     345                    <hr class="skfaktura-settings-separator">
     346                    <h2>Sledovanie zásielky v e-mailoch</h2>
     347                    <p>Nastav, či sa sledovanie zobrazí zákazníkovi a či má obsahovať tlačidlo, samostatnú adresu alebo oboje.</p>
     348                    <table class="form-table" role="presentation">
     349                        <tr><th>Zobrazenie sledovania</th><td><input type="hidden" name="tracking_email_enabled" value="0"><label><input type="checkbox" name="tracking_email_enabled" value="1" data-tracking-enabled <?php checked(! empty($settings['tracking_email_enabled'])); ?>> Zobrazovať sledovanie zásielky v zákazníckych e-mailoch</label></td></tr>
     350                        <tr><th><label for="skfaktura_tracking_email_display">Spôsob zobrazenia</label></th><td><select id="skfaktura_tracking_email_display" name="tracking_email_display" data-tracking-display><option value="button_and_link" <?php selected($settings['tracking_email_display'], 'button_and_link'); ?>>Tlačidlo aj samostatný odkaz</option><option value="button" <?php selected($settings['tracking_email_display'], 'button'); ?>>Iba tlačidlo</option><option value="link" <?php selected($settings['tracking_email_display'], 'link'); ?>>Iba samostatný odkaz</option></select></td></tr>
     351                        <tr><th><label for="skfaktura_tracking_email_heading">Nadpis</label></th><td><input class="regular-text" id="skfaktura_tracking_email_heading" name="tracking_email_heading" value="<?php echo esc_attr($settings['tracking_email_heading']); ?>"></td></tr>
     352                        <tr><th><label for="skfaktura_tracking_email_button_label">Text tlačidla</label></th><td><input class="regular-text" id="skfaktura_tracking_email_button_label" name="tracking_email_button_label" value="<?php echo esc_attr($settings['tracking_email_button_label']); ?>" data-tracking-button-label></td></tr>
     353                    </table>
     354
     355                    <div class="skfaktura-style-editor" data-skfaktura-style-editor>
     356                        <table class="form-table" role="presentation">
     357                            <tr><th><label for="skfaktura_tracking_button_background">Farba pozadia</label></th><td><input id="skfaktura_tracking_button_background" type="color" name="tracking_button_style[background]" value="<?php echo esc_attr($trackingButton['background']); ?>" data-style="background"></td></tr>
     358                            <tr><th><label for="skfaktura_tracking_button_color">Farba textu</label></th><td><input id="skfaktura_tracking_button_color" type="color" name="tracking_button_style[color]" value="<?php echo esc_attr($trackingButton['color']); ?>" data-style="color"></td></tr>
     359                            <tr><th><label for="skfaktura_tracking_button_radius">Zaoblenie rohov</label></th><td><input id="skfaktura_tracking_button_radius" type="range" min="0" max="30" name="tracking_button_style[border_radius]" value="<?php echo esc_attr((string) $trackingButton['border_radius']); ?>" data-style="border_radius"> <output data-output="border_radius"><?php echo esc_html((string) $trackingButton['border_radius']); ?> px</output></td></tr>
     360                            <tr><th><label for="skfaktura_tracking_button_vertical">Výška tlačidla</label></th><td><input id="skfaktura_tracking_button_vertical" type="range" min="4" max="24" name="tracking_button_style[padding_vertical]" value="<?php echo esc_attr((string) $trackingButton['padding_vertical']); ?>" data-style="padding_vertical"> <output data-output="padding_vertical"><?php echo esc_html((string) $trackingButton['padding_vertical']); ?> px</output></td></tr>
     361                            <tr><th><label for="skfaktura_tracking_button_horizontal">Šírka tlačidla</label></th><td><input id="skfaktura_tracking_button_horizontal" type="range" min="8" max="48" name="tracking_button_style[padding_horizontal]" value="<?php echo esc_attr((string) $trackingButton['padding_horizontal']); ?>" data-style="padding_horizontal"> <output data-output="padding_horizontal"><?php echo esc_html((string) $trackingButton['padding_horizontal']); ?> px</output></td></tr>
     362                            <tr><th><label for="skfaktura_tracking_button_font_size">Veľkosť textu</label></th><td><input id="skfaktura_tracking_button_font_size" type="range" min="11" max="22" name="tracking_button_style[font_size]" value="<?php echo esc_attr((string) $trackingButton['font_size']); ?>" data-style="font_size"> <output data-output="font_size"><?php echo esc_html((string) $trackingButton['font_size']); ?> px</output></td></tr>
     363                        </table>
     364                        <div class="skfaktura-button-preview" data-tracking-preview><span>Náhľad sledovania</span><a href="#" data-skfaktura-preview><?php echo esc_html($settings['tracking_email_button_label']); ?></a><a href="#" data-tracking-link>https://dopravca.example/sledovanie/123456</a></div>
    340365                    </div>
    341366                    <?php submit_button('Uložiť vzhľad'); ?>
    … …  
    606631        if ($tab === 'appearance') {
    607632            $updated['button_style'] = $this->sanitize_button_style($input['button_style'] ?? []);
     633            $updated['tracking_email_enabled'] = (string) ($input['tracking_email_enabled'] ?? '0') === '1';
     634            $updated['tracking_email_display'] = in_array(($input['tracking_email_display'] ?? ''), ['button_and_link', 'button', 'link'], true)
     635                ? $input['tracking_email_display']
     636                : 'button_and_link';
     637            $updated['tracking_email_heading'] = sanitize_text_field($input['tracking_email_heading'] ?? '');
     638            $updated['tracking_email_button_label'] = sanitize_text_field($input['tracking_email_button_label'] ?? '');
     639            $updated['tracking_button_style'] = $this->sanitize_button_style($input['tracking_button_style'] ?? []);
    608640        }
    609641
    … …  
    17311763    public function render_shipment_tracking_in_email($order, $sentToAdmin, $plainText, $email): void
    17321764    {
    1733         $emailId = is_object($email) && isset($email->id) ? (string) $email->id : '';
    1734         if (! $order instanceof WC_Order || $sentToAdmin || $emailId !== 'customer_completed_order') {
     1765        if (! $order instanceof WC_Order || $sentToAdmin) {
     1766            return;
     1767        }
     1768
     1769        $settings = $this->settings();
     1770        if (empty($settings['tracking_email_enabled'])) {
    17351771            return;
    17361772        }
    … …  
    17441780            return;
    17451781        }
    1746         if ($this->email_output_contains_tracking_url($tracking['url'])) {
    1747             return;
    1748         }
    17491782
    17501783        if ($plainText) {
    1751             echo "\nSledovanie zásielky:\n";
     1784            $heading = trim((string) $settings['tracking_email_heading']);
     1785            echo "\n".esc_html($heading !== '' ? $heading : 'Sledovanie zásielky').":\n";
    17521786            echo esc_html($tracking['provider_label'].' – '.$tracking['number'])."\n";
    17531787            echo esc_html($tracking['url'])."\n";
    … …  
    17561790        }
    17571791
    1758         echo '<h2>Sledovanie zásielky</h2>';
     1792        $heading = trim((string) $settings['tracking_email_heading']);
     1793        $buttonLabel = trim((string) $settings['tracking_email_button_label']);
     1794        $display = (string) $settings['tracking_email_display'];
     1795        if ($heading !== '') {
     1796            echo '<h2>'.esc_html($heading).'</h2>';
     1797        }
    17591798        echo '<p>'.esc_html($tracking['provider_label'].' – '.$tracking['number']).'</p>';
    1760         echo '<p><a href="'.esc_url($tracking['url']).'" target="_blank" rel="noopener" style="'.esc_attr($this->button_style()).'">Sledovať zásielku</a></p>';
    1761     }
    1762 
    1763     private function email_output_contains_tracking_url(string $trackingUrl): bool
    1764     {
    1765         $output = ob_get_contents();
    1766         if (! is_string($output) || $output === '') {
    1767             return false;
    1768         }
    1769 
    1770         return strpos(html_entity_decode($output, ENT_QUOTES | ENT_HTML5, 'UTF-8'), $trackingUrl) !== false;
     1799        if (in_array($display, ['button_and_link', 'button'], true)) {
     1800            echo '<p><a href="'.esc_url($tracking['url']).'" target="_blank" rel="noopener" style="'.esc_attr($this->tracking_button_style()).'">'.esc_html($buttonLabel !== '' ? $buttonLabel : 'Sledovať zásielku').'</a></p>';
     1801        }
     1802        if (in_array($display, ['button_and_link', 'link'], true)) {
     1803            echo '<p><a href="'.esc_url($tracking['url']).'" target="_blank" rel="noopener" style="word-break:break-all">'.esc_html($tracking['url']).'</a></p>';
     1804        }
    17711805    }
    17721806
    … …  
    17931827        }
    17941828
    1795         if ((string) $order->get_meta(self::META_TRACKING_EVENT_ID) === $eventId) {
    1796             return true;
    1797         }
    1798 
    1799         $native = false;
    1800         if (function_exists('wc_st_add_tracking_number')) {
     1829        $this->shipment_tracking_in_request[$order->get_id()] = [
     1830            'provider_label' => $this->shipment_tracking_provider_label($provider),
     1831            'number' => $trackingNumber,
     1832            'url' => $trackingUrl,
     1833        ];
     1834
     1835        $duplicateEvent = (string) $order->get_meta(self::META_TRACKING_EVENT_ID) === $eventId;
     1836        $native = (string) $order->get_meta(self::META_TRACKING_NATIVE) === 'yes';
     1837        if (! $duplicateEvent && function_exists('wc_st_add_tracking_number')) {
    18011838            try {
    18021839                wc_st_add_tracking_number(
    … …  
    18311868        $url = esc_url_raw((string) $order->get_meta(self::META_TRACKING_URL));
    18321869        if ($provider === '' || $number === '' || $url === '') {
    1833             return null;
     1870            return $this->shipment_tracking_in_request[$order->get_id()] ?? null;
    18341871        }
    18351872
    … …  
    29142951    {
    29152952        $legacyMode = (array) get_option(self::OPTION, []);
    2916         $settings = wp_parse_args($legacyMode, ['enabled' => false, 'api_url' => 'https://app.skfaktura.sk/api/v1', 'api_token' => '', 'api_abilities' => null, 'due_days' => 14, 'sync_catalog' => false, 'inventory_sync' => false, 'inventory_channel_key' => '', 'inventory_callback_secret' => '', 'order_status_callback_secret' => '', 'include_product_short_description' => false, 'show_exchange_rate_to_eur' => false, 'email_documents_heading' => 'Doklady k objednávke', 'email_documents_text' => 'Doklad si môžeš kedykoľvek otvoriť online alebo z neho stiahnuť PDF.', 'document_language' => 'sk', 'advance_paid_callback_enabled' => false, 'advance_paid_callback_secret' => '', 'final_invoice_followup_email_enabled' => false, 'refund_credit_note_enabled' => false, 'payment_methods' => [], 'payment_notes' => [], 'supplier' => [], 'rules' => [], 'button_style' => []]);
     2953        $settings = wp_parse_args($legacyMode, ['enabled' => false, 'api_url' => 'https://app.skfaktura.sk/api/v1', 'api_token' => '', 'api_abilities' => null, 'due_days' => 14, 'sync_catalog' => false, 'inventory_sync' => false, 'inventory_channel_key' => '', 'inventory_callback_secret' => '', 'order_status_callback_secret' => '', 'include_product_short_description' => false, 'show_exchange_rate_to_eur' => false, 'email_documents_heading' => 'Doklady k objednávke', 'email_documents_text' => 'Doklad si môžeš kedykoľvek otvoriť online alebo z neho stiahnuť PDF.', 'tracking_email_enabled' => true, 'tracking_email_display' => 'button_and_link', 'tracking_email_heading' => 'Sledovanie zásielky', 'tracking_email_button_label' => 'Sledovať zásielku', 'document_language' => 'sk', 'advance_paid_callback_enabled' => false, 'advance_paid_callback_secret' => '', 'final_invoice_followup_email_enabled' => false, 'refund_credit_note_enabled' => false, 'payment_methods' => [], 'payment_notes' => [], 'supplier' => [], 'rules' => [], 'button_style' => [], 'tracking_button_style' => []]);
    29172954        $settings['button_style'] = $this->sanitize_button_style($settings['button_style']);
     2955        $settings['tracking_button_style'] = $this->sanitize_button_style($settings['tracking_button_style'] ?: $settings['button_style']);
     2956        if (! in_array($settings['tracking_email_display'], ['button_and_link', 'button', 'link'], true)) {
     2957            $settings['tracking_email_display'] = 'button_and_link';
     2958        }
    29182959
    29192960        return $settings;
    … …  
    31603201    private function button_style(): string
    31613202    {
    3162         $style = $this->settings()['button_style'];
     3203        return $this->inline_button_style($this->settings()['button_style']);
     3204    }
     3205
     3206    private function tracking_button_style(): string
     3207    {
     3208        return $this->inline_button_style($this->settings()['tracking_button_style']);
     3209    }
     3210
     3211    private function inline_button_style(array $style): string
     3212    {
    31633213
    31643214        return sprintf(
  • skfaktura-sk-for-woocommerce/trunk/readme.txt

    r3699779 r3705828  
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 0.9.17
     7Stable tag: 0.9.18
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    7979== Changelog ==
    8080
     81= 0.9.18 =
     82* Sledovanie sa vloží aj do upraveného zákazníckeho e-mailu odoslaného pri stave Vybavená, bez závislosti od jeho interného identifikátora.
     83* E-mail obsahuje výrazné tlačidlo aj samostatný klikateľný odkaz a údaje sú dostupné už počas callbacku, ktorý mení stav objednávky.
     84* Vzhľad sledovacieho tlačidla, jeho text, nadpis aj zobrazenie tlačidla alebo odkazu možno nastaviť samostatne; sledovanie v e-mailoch možno aj vypnúť.
     85
    8186= 0.9.17 =
    8287* Odkaz na sledovanie sa spoľahlivo zobrazí v zákazníckom e-maile „Vybavená objednávka“ aj pri aktívnom kompatibilnom doplnku na sledovanie zásielok, bez zdvojenia už vykresleného odkazu.
  • skfaktura-sk-for-woocommerce/trunk/skfaktura-sk-for-woocommerce.php

    r3699779 r3705828  
    33 * Plugin Name: skFaktura.sk for WooCommerce
    44 * Description: Synchronizuje doklady, skladové množstvo a vybrané ceny podľa SKU medzi WooCommerce a skFaktura.sk.
    5  * Version: 0.9.17
     5 * Version: 0.9.18
    66 * Plugin URI: https://skfaktura.sk
    77 * Requires at least: 6.0
    … …  
    1616defined('ABSPATH') || exit;
    1717
    18 define('SKFAKTURA_WOO_VERSION', '0.9.17');
     18define('SKFAKTURA_WOO_VERSION', '0.9.18');
    1919define('SKFAKTURA_WOO_FILE', __FILE__);
    2020define('SKFAKTURA_WOO_DIR', plugin_dir_path(__FILE__));
Note: See TracChangeset for help on using the changeset viewer.