Changeset 3705828
- Timestamp:
- 09/21/2026 03:06:04 PM (5 weeks ago)
- Location:
- skfaktura-sk-for-woocommerce/trunk
- Files:
-
- 5 edited
-
assets/admin.css (modified) (1 diff)
-
assets/admin.js (modified) (1 diff)
-
includes/class-skfaktura-woocommerce.php (modified) (11 diffs)
-
readme.txt (modified) (2 diffs)
-
skfaktura-sk-for-woocommerce.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
skfaktura-sk-for-woocommerce/trunk/assets/admin.css
r3643720 r3705828 382 382 } 383 383 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 384 408 @media screen and (max-width: 782px) { 385 409 .skfaktura-settings { -
skfaktura-sk-for-woocommerce/trunk/assets/admin.js
r3627236 r3705828 5 5 } 6 6 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]'); 9 10 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 12 29 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); 18 31 }); 32 preview.addEventListener('click', function (event) { 33 event.preventDefault(); 34 }); 35 updatePreview(); 36 }); 19 37 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'; 26 54 } 27 55 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 } 30 61 }); 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(); 35 68 }); -
skfaktura-sk-for-woocommerce/trunk/includes/class-skfaktura-woocommerce.php
r3699779 r3705828 66 66 67 67 private array $inventory_syncs_in_request = []; 68 69 private array $shipment_tracking_in_request = []; 68 70 69 71 public static function instance(): self … … 325 327 </form> 326 328 <?php } else { 327 $button = $settings['button_style']; ?> 329 $button = $settings['button_style']; 330 $trackingButton = $settings['tracking_button_style']; ?> 328 331 <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> 329 332 <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> 331 334 <table class="form-table" role="presentation"> 332 335 <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> … … 338 341 </table> 339 342 <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> 340 365 </div> 341 366 <?php submit_button('Uložiť vzhľad'); ?> … … 606 631 if ($tab === 'appearance') { 607 632 $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'] ?? []); 608 640 } 609 641 … … 1731 1763 public function render_shipment_tracking_in_email($order, $sentToAdmin, $plainText, $email): void 1732 1764 { 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'])) { 1735 1771 return; 1736 1772 } … … 1744 1780 return; 1745 1781 } 1746 if ($this->email_output_contains_tracking_url($tracking['url'])) {1747 return;1748 }1749 1782 1750 1783 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"; 1752 1786 echo esc_html($tracking['provider_label'].' – '.$tracking['number'])."\n"; 1753 1787 echo esc_html($tracking['url'])."\n"; … … 1756 1790 } 1757 1791 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 } 1759 1798 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 } 1771 1805 } 1772 1806 … … 1793 1827 } 1794 1828 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')) { 1801 1838 try { 1802 1839 wc_st_add_tracking_number( … … 1831 1868 $url = esc_url_raw((string) $order->get_meta(self::META_TRACKING_URL)); 1832 1869 if ($provider === '' || $number === '' || $url === '') { 1833 return null;1870 return $this->shipment_tracking_in_request[$order->get_id()] ?? null; 1834 1871 } 1835 1872 … … 2914 2951 { 2915 2952 $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' => []]); 2917 2954 $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 } 2918 2959 2919 2960 return $settings; … … 3160 3201 private function button_style(): string 3161 3202 { 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 { 3163 3213 3164 3214 return sprintf( -
skfaktura-sk-for-woocommerce/trunk/readme.txt
r3699779 r3705828 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 0.9.1 77 Stable tag: 0.9.18 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 79 79 == Changelog == 80 80 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 81 86 = 0.9.17 = 82 87 * 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 3 3 * Plugin Name: skFaktura.sk for WooCommerce 4 4 * Description: Synchronizuje doklady, skladové množstvo a vybrané ceny podľa SKU medzi WooCommerce a skFaktura.sk. 5 * Version: 0.9.1 75 * Version: 0.9.18 6 6 * Plugin URI: https://skfaktura.sk 7 7 * Requires at least: 6.0 … … 16 16 defined('ABSPATH') || exit; 17 17 18 define('SKFAKTURA_WOO_VERSION', '0.9.1 7');18 define('SKFAKTURA_WOO_VERSION', '0.9.18'); 19 19 define('SKFAKTURA_WOO_FILE', __FILE__); 20 20 define('SKFAKTURA_WOO_DIR', plugin_dir_path(__FILE__));
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)