· last year · Mar 01, 2024, 03:35 PM
1<?php
2/**
3 * Plugin Name: České služby pro WordPress
4 * Plugin URI: https://www.separatista.net
5 * Description: Implementace různých českých služeb do WordPressu.
6 * Version: 0.6-alpha
7 * Author: Pavel Hejn
8 * Author URI: https://www.separatista.net
9 * GitHub Plugin URI: pavelevap/ceske-sluzby
10 * License: GPL2
11 */
12
13define( 'CS_VERSION', '0.6-alpha' );
14
15$language = get_locale();
16if ( $language == "sk_SK" ) {
17 define( "HEUREKA_URL", "heureka.sk" );
18 define( "GLAMI_URL", "glami.sk" );
19 define( "HEUREKA_KONVERZE", "https://im9.cz/sk/js/ext/2-roi-async.js" );
20 define( "GOOGLE_MENA", "EUR" );
21}
22else {
23 define( "HEUREKA_URL", "heureka.cz" );
24 define( "GLAMI_URL", "glami.cz" );
25 define( "HEUREKA_KONVERZE", "https://im9.cz/js/ext/1-roi-async.js" );
26 define( "GOOGLE_MENA", "CZK" );
27}
28
29function ceske_sluzby_heureka_overeno_zakazniky( $order_id, $posted ) {
30 $api = get_option( 'wc_ceske_sluzby_heureka_overeno-api' );
31 $souhlas = get_option( 'wc_ceske_sluzby_heureka_overeno-souhlas' );
32 $souhlas_check = array();
33 $souhlas_text = "";
34 if ( ! empty( $souhlas ) ) {
35 if ( $souhlas == 'souhlas_optout' && isset( $_POST['heureka_overeno_zakazniky_souhlas_optout'] ) && (int)$_POST['heureka_overeno_zakazniky_souhlas_optout'] == 1 ) {
36 $souhlas_check = array( $souhlas => current_time( 'mysql' ) );
37 $souhlas_text = 'Objednávka byla úspěšně odeslána do služby Ověřeno zákazníky (Heureka) a zákazník neodmítl navržený souhlas se zpracováním dat.';
38 }
39 if ( $souhlas == 'nesouhlas_optout' && ! isset( $_POST['heureka_overeno_zakazniky_nesouhlas_optout'] ) ) {
40 $souhlas_check = array( $souhlas => current_time( 'mysql' ) );
41 $souhlas_text = 'Objednávka byla úspěšně odeslána do služby Ověřeno zákazníky (Heureka) a zákazník nepotvrdil nesouhlas se zpracováním dat.';
42 }
43 } else {
44 $souhlas_check = array( 'neaktivni' => current_time( 'mysql' ) );
45 $souhlas_text = 'Objednávka byla úspěšně odeslána do služby Ověřeno zákazníky (Heureka).';
46 }
47 if ( ! empty( $api ) && ! empty( $souhlas_check ) ) {
48 $order = wc_get_order( $order_id );
49
50 // https://github.com/heureka/heureka-overeno-php-api
51 require_once( dirname( __FILE__ ) . '/src/heureka/HeurekaOvereno.php' );
52
53 $language = get_locale();
54 try {
55 if ( $language == "sk_SK" ) {
56 $overeno = new HeurekaOvereno( $api, HeurekaOvereno::LANGUAGE_SK );
57 }
58 else {
59 $overeno = new HeurekaOvereno( $api );
60 }
61 $overeno->setEmail( $posted['billing_email'] );
62
63 $items = $order->get_items();
64 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
65 foreach ( $items as $item_data ) {
66 $overeno->addProduct( $item_data['name'] );
67 }
68 } else {
69 foreach ( $items as $item_id => $item_data ) {
70 $aktivace_xml = get_option( 'wc_ceske_sluzby_heureka_xml_feed-aktivace' );
71 $product = $item_data->get_product();
72 if ( $aktivace_xml == "yes" ) {
73 $overeno->addProductItemId( $product->get_id() );
74 } else {
75 $overeno->addProduct( $product->get_name() );
76 }
77 }
78 }
79
80 $overeno->addOrderId( $order_id );
81 $overeno->send();
82 update_post_meta( $order_id, 'ceske_sluzby_heureka_overeno_zakazniky_souhlas', $souhlas_check );
83 $order->add_order_note( $souhlas_text );
84 }
85 catch ( OverflowException $o ) {
86 $order->add_order_note( 'API klíč pro službu Ověřeno zákazníky nebyl správně nastaven: ' . $o->getMessage() );
87 }
88 catch ( HeurekaOverenoException $e ) {
89 $order->add_order_note( 'Odeslání dat pro službu Ověřeno zákazníky se nezdařilo: ' . $e->getMessage() );
90 }
91 }
92}
93
94function ceske_sluzby_heureka_mereni_konverzi( $order_id ) {
95 $api = get_option( 'wc_ceske_sluzby_heureka_konverze-api' );
96 if ( ! empty( $api ) ) {
97 $order = wc_get_order( $order_id );
98 $items = $order->get_items(); ?>
99
100<script type="text/javascript">
101var _hrq = _hrq || [];
102 _hrq.push(['setKey', '<?php echo $api; ?>']);
103 _hrq.push(['setOrderId', '<?php echo $order_id; ?>']);
104 <?php if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
105 foreach ( $items as $item ) {
106 $cena = wc_format_decimal( $order->get_item_subtotal( $item ) );
107 echo "_hrq.push(['addProduct', '" . $item['name'] . "', '" . $cena . "', '" . $item['qty'] . "']);";
108 }
109 } else {
110 foreach ( $items as $item_id => $item_data ) {
111 $product = $item_data->get_product();
112 $cena = wc_format_decimal( $item_data->get_total() / $item_data->get_quantity() );
113 echo "_hrq.push(['addProduct', '" . $product->get_name() . "', '" . $cena . "', '" . $item_data->get_quantity() . "']);";
114 }
115 } ?>
116 _hrq.push(['trackOrder']);
117
118(function() {
119 var ho = document.createElement('script'); ho.type = 'text/javascript'; ho.async = true;
120 ho.src = '<?php echo HEUREKA_KONVERZE; ?>';
121 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ho, s);
122})();
123</script>
124
125<?php
126 }
127}
128
129function ceske_sluzby_heureka_certifikat_spokojenosti() {
130 $api = get_option( 'wc_ceske_sluzby_heureka_konverze-api' );
131 $certifikat = get_option( 'wc_ceske_sluzby_heureka_certifikat_spokojenosti-aktivace' );
132 if ( ! empty( $api ) && $certifikat == "yes" ) {
133 $umisteni = get_option( 'wc_ceske_sluzby_heureka_certifikat_spokojenosti_umisteni' );
134 $odsazeni = get_option( 'wc_ceske_sluzby_heureka_certifikat_spokojenosti_odsazeni' );
135 if ( ! empty( $umisteni ) ) {
136 if ( $umisteni == "vlevo" ) {
137 $umisteni = 21;
138 } else {
139 $umisteni = 22;
140 }
141 } else {
142 $umisteni = 21;
143 }
144 if ( empty( $odsazeni ) ) {
145 $odsazeni = 60;
146 }
147 ?>
148
149<script type="text/javascript">
150//<![CDATA[
151var _hwq = _hwq || [];
152 _hwq.push(['setKey', '<?php echo $api; ?>']);_hwq.push(['setTopPos', '<?php echo $odsazeni; ?>']);_hwq.push(['showWidget', '<?php echo $umisteni; ?>']);(function() {
153 var ho = document.createElement('script'); ho.type = 'text/javascript'; ho.async = true;
154 ho.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.<?php echo HEUREKA_URL; ?>/direct/i/gjs.php?n=wdgt&sak=<?php echo $api; ?>';
155 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ho, s);
156})();
157//]]>
158</script>
159
160<?php
161 }
162}
163
164function ceske_sluzby_sklik_mereni_konverzi( $order_id ) {
165 $konverze = get_option( 'wc_ceske_sluzby_sklik_konverze-objednavky' );
166 if ( ! empty( $konverze ) ) {
167 $order = wc_get_order( $order_id );
168 $hodnota_objednavky = round( $order->get_subtotal() ); ?>
169<!-- Měřicí kód Sklik.cz -->
170<iframe width="119" height="22" frameborder="0" scrolling="no" src="//c.imedia.cz/checkConversion?c=<?php echo $konverze; ?>&color=ffffff&v=<?php echo $hodnota_objednavky; ?>"></iframe>
171 <?php
172 }
173}
174
175function ceske_sluzby_sklik_retargeting() {
176 $konverze = get_option( 'wc_ceske_sluzby_sklik_retargeting' );
177 if ( ! empty( $konverze ) ) { ?>
178<script type="text/javascript">
179/* <![CDATA[ */
180var seznam_retargeting_id = <?php echo $konverze; ?>;
181/* ]]> */
182</script>
183<script type="text/javascript" src="//c.imedia.cz/js/retargeting.js"></script>
184 <?php
185 }
186}
187
188function ceske_sluzby_srovname_mereni_konverzi( $order_id ) {
189 $klic = get_option( 'wc_ceske_sluzby_srovname_konverze-objednavky' );
190 if ( ! empty( $klic ) ) {
191 $order = wc_get_order( $order_id );
192 $items = $order->get_items(); ?>
193
194<script type="text/javascript">
195var _srt = _srt || [];
196 _srt.push(['_setShop', '<?php echo $klic; ?>']);
197 _srt.push(['_setTransId', '<?php echo $order_id; ?>']);
198 <?php if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
199 foreach ( $items as $item ) {
200 $cena = wc_format_decimal( $order->get_item_subtotal( $item ) );
201 echo "_srt.push(['_addProduct', '" . $item['name'] . "', '" . $cena . "', '" . $item['qty'] . "']);";
202 }
203 } else {
204 foreach ( $items as $item_id => $item_data ) {
205 $product = $item_data->get_product();
206 $cena = wc_format_decimal( $item_data->get_total() / $item_data->get_quantity() );
207 echo "_srt.push(['_addProduct', '" . $product->get_name() . "', '" . $cena . "', '" . $item_data->get_quantity() . "']);";
208 }
209 } ?>
210 _srt.push(['_trackTrans']);
211
212(function() {
213 var s = document.createElement("script");
214 s.type = "text/javascript";
215 s.async = true;
216 s.src = ("https:" == document.location.protocol ? "https" : "http") + "://www.srovname.cz/js/track-trans.js";
217 var x = document.getElementsByTagName("script")[0];
218 x.parentNode.insertBefore(s, x);
219})();
220</script>
221
222<?php
223 }
224}
225
226function ceske_sluzby_zbozi_mereni_konverzi( $order_id ) {
227 $id_obchodu = get_option( 'wc_ceske_sluzby_zbozi_konverze_id-obchodu' );
228 if ( ! empty( $id_obchodu ) ) {
229 $order = wc_get_order( $order_id );
230 $hodnota_objednavky = number_format( (float)( $order->get_total() ), 2, '.', '' ); ?>
231
232<script>
233(function(w,d,s,u,n,k,c,t){w.ZboziConversionObject=n;w[n]=w[n]||function(){
234(w[n].q=w[n].q||[]).push(arguments)};w[n].key=k;c=d.createElement(s);
235t=d.getElementsByTagName(s)[0];c.async=1;c.src=u;t.parentNode.insertBefore(c,t)
236})(window,document,"script","https://www.zbozi.cz/conversion/js/conv.js","zbozi","<?php echo $id_obchodu; ?>");
237zbozi("setOrder",{
238"orderId": "<?php echo $order_id; ?>",
239"totalPrice": "<?php echo $hodnota_objednavky; ?>"
240});
241zbozi("send");
242</script>
243
244<?php
245 }
246}
247
248function ceske_sluzby_sledovani_zasilek_email( $email_classes ) {
249 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-sledovani-zasilek-email.php';
250 $email_classes['WC_Email_Ceske_Sluzby_Sledovani_Zasilek'] = new WC_Email_Ceske_Sluzby_Sledovani_Zasilek();
251 return $email_classes;
252}
253
254function ceske_sluzby_sledovani_zasilek_email_akce( $email_actions ) {
255 $email_actions[] = 'woocommerce_ceske_sluzby_sledovani_zasilek_email_akce';
256 return $email_actions;
257}
258
259function ceske_sluzby_kontrola_aktivniho_pluginu() {
260 if ( defined( 'WOOCOMMERCE_VERSION' ) && version_compare( WOOCOMMERCE_VERSION, '2.2', '>=' ) ) {
261 require_once plugin_dir_path( __FILE__ ) . 'includes/ceske-sluzby-functions.php';
262 if ( is_admin() ) {
263 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-admin.php';
264 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-sledovani-zasilek.php';
265 WC_Settings_Tab_Ceske_Sluzby_Admin::init();
266 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-product-tab.php';
267 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-varianty.php';
268 new WC_Product_Tab_Ceske_Sluzby_Admin();
269 $xml_feed = get_option( 'wc_ceske_sluzby_heureka_xml_feed-aktivace' );
270 if ( $xml_feed == "yes" ) {
271 add_action( 'product_cat_add_form_fields', 'ceske_sluzby_xml_kategorie_pridat_pole', 99 );
272 add_action( 'product_cat_edit_form_fields', 'ceske_sluzby_xml_kategorie_upravit_pole', 99 );
273 add_action( 'created_term', 'ceske_sluzby_xml_kategorie_ulozit', 20, 3 );
274 add_action( 'edit_term', 'ceske_sluzby_xml_kategorie_ulozit', 20, 3 );
275 add_filter( 'manage_edit-product_cat_columns', 'ceske_sluzby_xml_kategorie_pridat_sloupec' );
276 add_filter( 'manage_product_cat_custom_column', 'ceske_sluzby_xml_kategorie_sloupec', 10, 3 );
277 }
278 }
279
280 add_action( 'woocommerce_shipping_init', 'ceske_sluzby_doprava_ulozenka_init' );
281 add_filter( 'woocommerce_shipping_methods', 'ceske_sluzby_doprava_ulozenka' );
282
283 add_action( 'woocommerce_shipping_init', 'ceske_sluzby_doprava_dpd_parcelshop_init' );
284 add_filter( 'woocommerce_shipping_methods', 'ceske_sluzby_doprava_dpd_parcelshop' );
285
286 add_action( 'woocommerce_checkout_order_processed', 'ceske_sluzby_heureka_overeno_zakazniky', 10, 2 );
287 add_action( 'woocommerce_review_order_before_submit', 'ceske_sluzby_heureka_overeno_zakazniky_souhlas' );
288 add_action( 'woocommerce_thankyou', 'ceske_sluzby_heureka_mereni_konverzi' );
289 add_action( 'woocommerce_thankyou', 'ceske_sluzby_zbozi_mereni_konverzi' );
290 add_action( 'woocommerce_thankyou', 'ceske_sluzby_sklik_mereni_konverzi' );
291 add_action( 'woocommerce_thankyou', 'ceske_sluzby_srovname_mereni_konverzi' );
292 add_action( 'wp_footer', 'ceske_sluzby_sklik_retargeting' );
293 add_filter( 'wc_order_is_editable', 'ceske_sluzby_moznost_menit_dobirku', 10, 2 );
294 add_filter( 'woocommerce_package_rates', 'ceske_sluzby_omezit_dopravu_pokud_dostupna_zdarma', 10, 2 );
295
296 add_action( 'woocommerce_review_order_after_shipping', 'ceske_sluzby_ulozenka_zobrazit_pobocky' );
297 add_action( 'woocommerce_new_order_item', 'ceske_sluzby_ulozenka_ulozeni_pobocky', 10, 2 );
298 add_action( 'woocommerce_checkout_process', 'ceske_sluzby_ulozenka_overit_pobocku' );
299 add_action( 'woocommerce_admin_order_data_after_billing_address', 'ceske_sluzby_ulozenka_objednavka_zobrazit_pobocku' );
300 add_action( 'woocommerce_email_after_order_table', 'ceske_sluzby_ulozenka_objednavka_zobrazit_pobocku' );
301 add_action( 'woocommerce_order_details_after_order_table', 'ceske_sluzby_ulozenka_objednavka_zobrazit_pobocku' );
302
303 add_action( 'woocommerce_review_order_after_shipping', 'ceske_sluzby_dpd_parcelshop_zobrazit_pobocky' );
304 add_action( 'woocommerce_new_order_item', 'ceske_sluzby_dpd_parcelshop_ulozeni_pobocky', 10, 2 );
305 add_action( 'woocommerce_checkout_process', 'ceske_sluzby_dpd_parcelshop_overit_pobocku' );
306 add_action( 'woocommerce_admin_order_data_after_billing_address', 'ceske_sluzby_dpd_parcelshop_objednavka_zobrazit_pobocku' );
307 add_action( 'woocommerce_email_after_order_table', 'ceske_sluzby_dpd_parcelshop_objednavka_zobrazit_pobocku' );
308 add_action( 'woocommerce_order_details_after_order_table', 'ceske_sluzby_dpd_parcelshop_objednavka_zobrazit_pobocku' );
309
310 $aktivace_zasilkovna = get_option( 'wc_ceske_sluzby_doprava_zasilkovna' );
311 if ( $aktivace_zasilkovna == "yes" ) {
312 add_action( 'woocommerce_shipping_init', 'ceske_sluzby_doprava_zasilkovna_init' );
313 add_filter( 'woocommerce_shipping_methods', 'ceske_sluzby_doprava_zasilkovna' );
314 $zasilkovna_settings = get_option( 'woocommerce_ceske_sluzby_zasilkovna_settings' );
315 if ( isset( $zasilkovna_settings['zasilkovna_api-klic'] ) && ! empty( $zasilkovna_settings['zasilkovna_api-klic'] ) ) {
316 add_action( 'wp_footer', 'ceske_sluzby_zasilkovna_scripts_checkout', 100 );
317 add_action( 'woocommerce_review_order_after_shipping', 'ceske_sluzby_zasilkovna_zobrazit_pobocky' );
318 add_action( 'woocommerce_new_order_item', 'ceske_sluzby_zasilkovna_ulozeni_pobocky', 10, 2 );
319 add_action( 'woocommerce_checkout_process', 'ceske_sluzby_zasilkovna_overit_pobocku' );
320 add_action( 'woocommerce_admin_order_data_after_billing_address', 'ceske_sluzby_zasilkovna_objednavka_zobrazit_pobocku' );
321 add_action( 'woocommerce_email_after_order_table', 'ceske_sluzby_zasilkovna_objednavka_zobrazit_pobocku' );
322 add_action( 'woocommerce_order_details_after_order_table', 'ceske_sluzby_zasilkovna_objednavka_zobrazit_pobocku' );
323 }
324 }
325 add_filter( 'woocommerce_pay4pay_cod_amount', 'ceske_sluzby_ulozenka_dobirka_pay4pay' );
326 add_filter( 'woocommerce_pay4pay_cod_amount', 'ceske_sluzby_dpd_parcelshop_dobirka_pay4pay' );
327
328 $aktivace_recenzi = get_option( 'wc_ceske_sluzby_heureka_recenze_obchodu-aktivace' );
329 if ( $aktivace_recenzi == "yes" ) {
330 add_shortcode( 'heureka-recenze-obchodu', 'ceske_sluzby_heureka_recenze_obchodu' );
331 }
332
333 $sledovani_zasilek = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_sledovani-zasilek' );
334 if ( $sledovani_zasilek == "yes" ) {
335 add_filter( 'woocommerce_email_classes', 'ceske_sluzby_sledovani_zasilek_email' );
336 if ( version_compare( WC_VERSION, '3.2', '>=' ) ) {
337 add_filter( 'woocommerce_email_actions', 'ceske_sluzby_sledovani_zasilek_email_akce' );
338 }
339 }
340
341 $aktivace_eet = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_eet-aktivace' );
342 if ( $aktivace_eet == "yes" ) {
343 add_filter( 'upload_mimes', 'ceske_sluzby_povolit_nahravani_certifikatu' );
344 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-eet.php';
345 add_action( 'wpo_wcpdf_after_order_details', 'ceske_sluzby_zobrazit_eet_faktura_externi', 10, 2 );
346 add_action( 'woocommerce_order_status_completed', 'ceske_sluzby_automaticky_ziskat_uctenku' );
347 add_action( 'woocommerce_payment_complete', 'ceske_sluzby_automaticky_ziskat_uctenku' );
348 add_action( 'woocommerce_email_order_meta', 'ceske_sluzby_zobrazit_eet_email', 10, 4 );
349 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
350 add_filter( 'woocommerce_order_tax_totals', 'ceske_sluzby_doplnit_danovou_sazbu' );
351 } else {
352 add_filter( 'woocommerce_order_get_tax_totals', 'ceske_sluzby_doplnit_danovou_sazbu' );
353 }
354 }
355
356 $aktivace_dodaci_doby = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_dodaci_doba-aktivace' );
357 if ( $aktivace_dodaci_doby == "yes" ) {
358 $dodaci_doba = get_option( 'wc_ceske_sluzby_dodaci_doba_zobrazovani' );
359 if ( ! empty( $dodaci_doba ) ) {
360 foreach ( $dodaci_doba as $zobrazeni ) {
361 if ( $zobrazeni == 'get_availability_text' ) {
362 // Původně použitý filtr woocommerce_get_availability_text je funkční až od WooCommerce 2.6.2
363 // https://github.com/woocommerce/woocommerce/commit/33346938855b334861678bccecef4a58e5fc0cfa
364 add_filter( 'woocommerce_get_availability', 'ceske_sluzby_zobrazit_dodaci_dobu_filtr', 10, 2 );
365 add_action( 'woocommerce_before_add_to_cart_form', 'ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_akce' );
366 add_filter( 'woocommerce_available_variation', 'ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_filtr', 10, 3 );
367 }
368 if ( $zobrazeni == 'before_add_to_cart_form' ) {
369 add_action( 'woocommerce_before_add_to_cart_form', 'ceske_sluzby_zobrazit_dodaci_dobu_akce' );
370 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
371 add_filter( 'woocommerce_stock_html', 'ceske_sluzby_nahradit_zobrazeny_text_deprecated', 10, 3 );
372 } else {
373 add_filter( 'woocommerce_get_stock_html', 'ceske_sluzby_nahradit_zobrazeny_text', 10, 2 );
374 }
375 add_action( 'woocommerce_before_add_to_cart_form', 'ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_akce' );
376 add_filter( 'woocommerce_available_variation', 'ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_filtr', 10, 3 );
377 }
378 if ( $zobrazeni == 'after_shop_loop_item' ) {
379 add_action( 'woocommerce_after_shop_loop_item', 'ceske_sluzby_zobrazit_dodaci_dobu_akce', 8 );
380 add_action( 'woocommerce_after_shop_loop_item', 'ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_akce', 9 );
381 }
382 }
383 }
384 add_filter( 'woocommerce_admin_stock_html', 'ceske_sluzby_zobrazeni_dodaci_doby_administrace', 10, 2 );
385 add_action( 'woocommerce_variation_header', 'ceske_sluzby_zobrazeni_dodaci_doby_varianty' );
386 add_action( 'admin_head', 'ceske_sluzby_zobrazeni_dodaci_doby_administrace_css' );
387 }
388
389 add_action( 'admin_enqueue_scripts', 'ceske_sluzby_load_admin_scripts' );
390 add_action( 'wp_footer', 'ceske_sluzby_heureka_certifikat_spokojenosti' ); // Pouze pro eshop nebo na celém webu?
391 add_action( 'woocommerce_cart_calculate_fees', 'ceske_sluzby_zaokrouhlovani_poplatek' );
392 add_action( 'woocommerce_after_calculate_totals', 'ceske_sluzby_spustit_zaokrouhlovani' );
393 add_action( 'wp_footer', 'ceske_sluzby_aktualizovat_checkout_javascript' );
394 add_filter( 'woocommerce_available_payment_gateways', 'ceske_sluzby_dostupne_platebni_metody' );
395
396 $nepresne_zaokrouhleni = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_nepresne-zaokrouhleni' );
397 if ( $nepresne_zaokrouhleni == "yes" ) {
398 add_filter( 'woocommerce_calc_tax', 'ceske_sluzby_zmena_kalkulace_dani' );
399 add_filter( 'woocommerce_tax_round', 'ceske_sluzby_zmena_zaokrouhlovani_dani' );
400 }
401 $zmena_platby_predem = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_zmena-platby-predem' );
402 if ( $zmena_platby_predem == "yes" ) {
403 add_filter( 'woocommerce_bacs_process_payment_order_status','ceske_sluzby_zmena_stavu_objednavky_platba_predem', 10, 2 );
404 add_filter( 'woocommerce_email_actions', 'ceske_sluzby_moznost_odesilat_emaily_zmena_stavu_platba_predem' );
405 add_action( 'woocommerce_email', 'ceske_sluzby_zmena_emailovych_notifikaci_platba_predem' );
406 add_action( 'init', 'ceske_sluzby_odebrat_bankovni_ucet_po_dokonceni_objednavky', 100 );
407 add_action( 'admin_head', 'ceske_sluzby_stylovani_tlacitek_objednavky_administrace_css' );
408 }
409 }
410}
411add_action( 'plugins_loaded', 'ceske_sluzby_kontrola_aktivniho_pluginu' );
412
413function ceske_sluzby_doprava_ulozenka_init() {
414 if ( ! class_exists( 'WC_Shipping_Ceske_Sluzby_Ulozenka' ) ) {
415 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-ulozenka.php';
416 }
417}
418
419function ceske_sluzby_doprava_ulozenka( $methods ) {
420 $methods[] = 'WC_Shipping_Ceske_Sluzby_Ulozenka';
421 return $methods;
422}
423
424function ceske_sluzby_ulozenka_zobrazit_pobocky() {
425 if ( is_ajax() ) {
426 // Do budoucna možná použít spíše woocommerce_checkout_update_order_review
427 $ulozenka_branches = '';
428 if ( isset( $_POST['post_data'] ) ) {
429 parse_str( $_POST['post_data'], $post_data );
430 if ( isset( $post_data['ulozenka_branches'] ) ) {
431 $ulozenka_branches = $post_data['ulozenka_branches'];
432 }
433 }
434 $available_shipping = WC()->shipping->load_shipping_methods();
435 $chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
436 $settings = array();
437 if ( $chosen_shipping_method[0] == "ceske_sluzby_ulozenka" ) {
438 $settings = $available_shipping[ $chosen_shipping_method[0] ]->settings;
439 if ( $settings['enabled'] == "yes" && ! empty( $settings['ulozenka_id-obchodu'] ) ) {
440 $json_class = new Ceske_Sluzby_Json_Loader();
441 // http://docs.ulozenkav3.apiary.io/#pepravnsluby
442 $zeme = WC()->customer->get_shipping_country();
443 if ( $zeme == "CZ" ) { $zeme_code = "CZE"; }
444 if ( $zeme == "SK" ) { $zeme_code = "SVK"; }
445 $parametry = array( 'provider' => 1, 'country' => $zeme_code ); ?>
446 <tr class="ulozenka">
447 <td>
448 <img src="https://www.ulozenka.cz/logo/ulozenka.png" width="140" border="0">
449 </td>
450 <td>
451 <font size="2">Uloženka - výběr pobočky:</font><br>
452 <div id="ulozenka-branch-select-options">
453 <select name="ulozenka_branches">
454 <option>Vyberte pobočku</option>
455 <?php $json = $json_class->load( $parametry );
456 if ( isset( $json->data->destination ) && ! empty( $json->data->destination ) ) {
457 $pobocky = $json_class->sortName( $json->data->destination );
458 foreach ( $pobocky as $pobocka ) {
459 echo '<option value="' . $pobocka . '"' . selected( $pobocka, $ulozenka_branches ) . '>' . $pobocka . '</option>';
460 }
461 } ?>
462 </select>
463 </div>
464 </td>
465 </tr>
466 <?php }
467 }
468 }
469}
470
471function ceske_sluzby_ulozenka_ulozeni_pobocky( $item_id, $item ) {
472 if ( isset( $_POST["ulozenka_branches"] ) ) {
473 if ( $_POST["ulozenka_branches"] && $_POST["shipping_method"][0] == "ceske_sluzby_ulozenka" ) {
474 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
475 $item_type = $item['order_item_type'];
476 } else {
477 $item_type = $item->get_type();
478 }
479 if ( $item_type == 'shipping' ) {
480 wc_add_order_item_meta( $item_id, 'ceske_sluzby_ulozenka_pobocka_nazev', esc_attr( $_POST['ulozenka_branches'] ), true );
481 }
482 }
483 }
484}
485
486function ceske_sluzby_ulozenka_overit_pobocku() {
487 if ( isset( $_POST["ulozenka_branches"] ) ) {
488 if ( $_POST["ulozenka_branches"] == "Vyberte pobočku" && $_POST["shipping_method"][0] == "ceske_sluzby_ulozenka" ) {
489 wc_add_notice( 'Pokud chcete doručit zboží prostřednictvím Uloženky, zvolte prosím pobočku.', 'error' );
490 }
491 }
492}
493
494function ceske_sluzby_ulozenka_objednavka_zobrazit_pobocku( $order ) {
495 if ( $order->has_shipping_method( 'ceske_sluzby_ulozenka' ) ) {
496 foreach ( $order->get_shipping_methods() as $shipping_item_id => $shipping_item ) {
497 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
498 $pobocka = $order->get_item_meta( $shipping_item_id, 'ceske_sluzby_ulozenka_pobocka_nazev', true );
499 } else {
500 $pobocka = wc_get_order_item_meta( $shipping_item_id, 'ceske_sluzby_ulozenka_pobocka_nazev', true );
501 }
502 if ( ! empty( $pobocka ) ) {
503 echo "<p><strong>Uloženka:</strong> " . $pobocka . "</p>";
504 }
505 }
506 }
507}
508
509function ceske_sluzby_ulozenka_dobirka_pay4pay( $amount ) {
510 $available_shipping = WC()->shipping->load_shipping_methods();
511 $chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
512 if ( $chosen_shipping_method[0] == "ceske_sluzby_ulozenka" ) {
513 $settings = $available_shipping[ $chosen_shipping_method[0] ]->settings;
514 $zeme = WC()->customer->get_shipping_country();
515 if ( $zeme == "CZ" ) {
516 if ( ! empty( $settings['ulozenka_dobirka'] ) ) {
517 $amount = $settings['ulozenka_dobirka'];
518 }
519 }
520 if ( $zeme == "SK" ) {
521 if ( ! empty( $settings['ulozenka_dobirka-slovensko'] ) ) {
522 $amount = $settings['ulozenka_dobirka-slovensko'];
523 }
524 }
525 if ( class_exists( 'WOOCS' ) ) {
526 $amount = apply_filters( 'woocs_exchange_value', $amount );
527 }
528 }
529 return $amount;
530}
531
532function ceske_sluzby_doprava_dpd_parcelshop_init() {
533 if ( ! class_exists( 'WC_Shipping_Ceske_Sluzby_DPD_ParcelShop' ) ) {
534 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-dpd-parcelshop.php';
535 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-json-loader.php';
536 }
537}
538
539function ceske_sluzby_doprava_dpd_parcelshop( $methods ) {
540 $methods[] = 'WC_Shipping_Ceske_Sluzby_DPD_ParcelShop';
541 return $methods;
542}
543
544function ceske_sluzby_dpd_parcelshop_zobrazit_pobocky() {
545 if ( is_ajax() ) {
546 $dpd_parcelshop_branches = '';
547 if ( isset( $_POST['post_data'] ) ) {
548 parse_str( $_POST['post_data'], $post_data );
549 if ( isset( $post_data['dpd_parcelshop_branches'] ) ) {
550 $dpd_parcelshop_branches = $post_data['dpd_parcelshop_branches'];
551 }
552 }
553 $available_shipping = WC()->shipping->load_shipping_methods();
554 $chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
555 $settings = array();
556 if ( $chosen_shipping_method[0] == "ceske_sluzby_dpd_parcelshop" ) {
557 $settings = $available_shipping[ $chosen_shipping_method[0] ]->settings;
558 if ( $settings['enabled'] == "yes" ) {
559 $json_class = new Ceske_Sluzby_Json_Loader();
560 $zeme = WC()->customer->get_shipping_country();
561 if ( $zeme == "CZ" ) { $zeme_code = "CZE"; }
562 if ( $zeme == "SK" ) { $zeme_code = "SVK"; }
563 $parametry = array( 'provider' => 5, 'country' => $zeme_code ); ?>
564 <tr class="dpd-parcelshop">
565 <td>
566 <img src="http://www.dpdparcelshop.cz/images/DPD-logo.png" width="140" border="0">
567 </td>
568 <td>
569 <font size="2">DPD ParcelShop - výběr pobočky:</font><br>
570 <div id="dpd-parcelshop-branch-select-options">
571 <select name="dpd_parcelshop_branches">
572 <option>Vyberte pobočku</option>
573 <?php $json = $json_class->load( $parametry );
574 if ( isset( $json->data->destination ) && ! empty( $json->data->destination ) ) {
575 $pobocky = $json_class->sortName( $json->data->destination );
576 foreach ( $pobocky as $pobocka ) {
577 echo '<option value="' . $pobocka . '"' . selected( $pobocka, $dpd_parcelshop_branches ) . '>' . $pobocka . '</option>';
578 }
579 } ?>
580 </select>
581 </div>
582 </td>
583 </tr>
584 <?php }
585 }
586 }
587}
588
589function ceske_sluzby_dpd_parcelshop_ulozeni_pobocky( $item_id, $item ) {
590 if ( isset( $_POST["dpd_parcelshop_branches"] ) ) {
591 if ( $_POST["dpd_parcelshop_branches"] && $_POST["shipping_method"][0] == "ceske_sluzby_dpd_parcelshop" ) {
592 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
593 $item_type = $item['order_item_type'];
594 } else {
595 $item_type = $item->get_type();
596 }
597 if ( $item_type == 'shipping' ) {
598 wc_add_order_item_meta( $item_id, 'ceske_sluzby_dpd_parcelshop_pobocka_nazev', esc_attr( $_POST['dpd_parcelshop_branches'] ), true );
599 }
600 }
601 }
602}
603
604function ceske_sluzby_dpd_parcelshop_overit_pobocku() {
605 if ( isset( $_POST["dpd_parcelshop_branches"] ) ) {
606 if ( $_POST["dpd_parcelshop_branches"] == "Vyberte pobočku" && $_POST["shipping_method"][0] == "ceske_sluzby_dpd_parcelshop" ) {
607 wc_add_notice( 'Pokud chcete doručit zboží prostřednictvím DPD ParcelShop, zvolte prosím pobočku.', 'error' );
608 }
609 }
610}
611
612function ceske_sluzby_dpd_parcelshop_objednavka_zobrazit_pobocku( $order ) {
613 if ( $order->has_shipping_method( 'ceske_sluzby_dpd_parcelshop' ) ) {
614 foreach ( $order->get_shipping_methods() as $shipping_item_id => $shipping_item ) {
615 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
616 $pobocka = $order->get_item_meta( $shipping_item_id, 'ceske_sluzby_dpd_parcelshop_pobocka_nazev', true );
617 } else {
618 $pobocka = wc_get_order_item_meta( $shipping_item_id, 'ceske_sluzby_dpd_parcelshop_pobocka_nazev', true );
619 }
620 if ( ! empty( $pobocka ) ) {
621 echo "<p><strong>DPD ParcelShop:</strong> " . $pobocka . "</p>";
622 }
623 }
624 }
625}
626
627function ceske_sluzby_dpd_parcelshop_dobirka_pay4pay( $amount ) {
628 $available_shipping = WC()->shipping->load_shipping_methods();
629 $chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
630 if ( $chosen_shipping_method[0] == "ceske_sluzby_dpd_parcelshop" ) {
631 $settings = $available_shipping[ $chosen_shipping_method[0] ]->settings;
632 $zeme = WC()->customer->get_shipping_country();
633 if ( $zeme == "CZ" ) {
634 if ( ! empty( $settings['dpd_parcelshop_dobirka'] ) ) {
635 $amount = $settings['dpd_parcelshop_dobirka'];
636 }
637 }
638 if ( $zeme == "SK" ) {
639 if ( ! empty( $settings['dpd_parcelshop_dobirka-slovensko'] ) ) {
640 $amount = $settings['dpd_parcelshop_dobirka-slovensko'];
641 }
642 }
643 if ( class_exists( 'WOOCS' ) ) {
644 $amount = apply_filters( 'woocs_exchange_value', $amount );
645 }
646 }
647 return $amount;
648}
649
650function ceske_sluzby_doprava_zasilkovna_init() {
651 if ( ! class_exists( 'WC_Shipping_Ceske_Sluzby_Zasilkovna' ) ) {
652 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-zasilkovna.php';
653 }
654}
655
656function ceske_sluzby_doprava_zasilkovna( $methods ) {
657 $methods['ceske_sluzby_zasilkovna'] = 'WC_Shipping_Ceske_Sluzby_Zasilkovna';
658 return $methods;
659}
660
661function ceske_sluzby_zasilkovna_zobrazit_pobocky() {
662 if ( is_ajax() ) {
663 $zasilkovna_branches = '';
664 if ( isset( $_POST['post_data'] ) ) {
665 parse_str( $_POST['post_data'], $post_data );
666 if ( isset( $post_data['packeta-point-id'] ) ) {
667 $zasilkovna_branches = $post_data['packeta-point-id'];
668 }
669 }
670 $chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
671 if ( strpos( $chosen_shipping_method[0], "ceske_sluzby_zasilkovna" ) !== false ) { ?>
672 <tr class="zasilkovna">
673 <td>
674 <img src="https://files.packeta.com/web/images/page/Zasilkovna_logo_WEB_tb_nove.png" width="200" border="0">
675 </td>
676 <td>
677 <input type="button" onclick="Packeta.Widget.pick(packetaApiKey, showSelectedPickupPoint)" value="Zvolit pobočku">
678 <div>Pobočka:
679 <input type="hidden" id="packeta-point-id" name="packeta-point-id" value="<?php echo $zasilkovna_branches; ?>">
680 <span id="packeta-point-info" style="font-weight:bold;"><?php if ( $zasilkovna_branches ) { echo $zasilkovna_branches; } else { echo "Zatím nevybráno"; } ?></span>
681 </div>
682 </td>
683 </tr>
684 <?php } else { ?>
685 <input type="hidden" id="packeta-point-id" name="packeta-point-id" value="<?php echo $zasilkovna_branches; ?>">
686 <?php }
687 }
688}
689
690function ceske_sluzby_zasilkovna_ulozeni_pobocky( $item_id, $item ) {
691 if ( isset( $_POST["packeta-point-id"] ) ) {
692 if ( ! empty( $_POST["packeta-point-id"] ) && strpos( $_POST["shipping_method"][0], "ceske_sluzby_zasilkovna" ) !== false ) {
693 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
694 $item_type = $item['order_item_type'];
695 } else {
696 $item_type = $item->get_type();
697 }
698 if ( $item_type == 'shipping' ) {
699 wc_add_order_item_meta( $item_id, 'ceske_sluzby_zasilkovna_pobocka_nazev', esc_attr( $_POST['packeta-point-id'] ), true );
700 }
701 }
702 }
703}
704
705function ceske_sluzby_zasilkovna_overit_pobocku() {
706 if ( isset( $_POST["packeta-point-id"] ) ) {
707 if ( empty( $_POST["packeta-point-id"] ) && strpos( $_POST["shipping_method"][0], "ceske_sluzby_zasilkovna" ) !== false ) {
708 wc_add_notice( 'Pokud chcete doručit zboží prostřednictvím Zásilkovny, zvolte prosím pobočku.', 'error' );
709 }
710 }
711}
712
713function ceske_sluzby_zasilkovna_objednavka_zobrazit_pobocku( $order ) {
714 if ( $order->has_shipping_method( 'ceske_sluzby_zasilkovna' ) ) {
715 foreach ( $order->get_shipping_methods() as $shipping_item_id => $shipping_item ) {
716 if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
717 $pobocka = $order->get_item_meta( $shipping_item_id, 'ceske_sluzby_zasilkovna_pobocka_nazev', true );
718 } else {
719 $pobocka = wc_get_order_item_meta( $shipping_item_id, 'ceske_sluzby_zasilkovna_pobocka_nazev', true );
720 }
721 if ( ! empty( $pobocka ) ) {
722 echo "<p><strong>Zásilkovna:</strong> " . $pobocka . "</p>";
723 }
724 }
725 }
726}
727
728function ceske_sluzby_moznost_menit_dobirku( $zmena, $objednavka ) {
729 // https://www.separatista.net/forum/tema/woocommerce-a-dobirka
730 $moznost_zmeny = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_dobirka-zmena' );
731 $status = $objednavka->get_status();
732 if ( $moznost_zmeny == "yes" && $status == "processing" ) {
733 $zmena = true;
734 }
735 return $zmena;
736}
737
738add_action( 'init', 'ceske_sluzby_aktivace_xml_feed' );
739function ceske_sluzby_aktivace_xml_feed() {
740 $aktivace_xml = get_option( 'wc_ceske_sluzby_heureka_xml_feed-aktivace' );
741 if ( $aktivace_xml == "yes" ) {
742 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-xml.php';
743 add_feed( 'heureka', 'xml_feed_zobrazeni' );
744 add_feed( 'glami', 'xml_feed_zobrazeni' );
745 add_feed( 'zbozi', 'zbozi_xml_feed_zobrazeni' );
746 add_feed( 'google', 'google_xml_feed_zobrazeni' );
747
748 $heureka_xml = get_option( 'wc_ceske_sluzby_xml_feed_heureka-aktivace' );
749 if ( $heureka_xml == "yes" ) {
750 if ( ! wp_next_scheduled( 'ceske_sluzby_heureka_aktualizace_xml' ) ) {
751 wp_schedule_event( current_time( 'timestamp', 1 ), 'daily', 'ceske_sluzby_heureka_aktualizace_xml' );
752 }
753 } else {
754 if ( wp_next_scheduled( 'ceske_sluzby_heureka_aktualizace_xml' ) ) {
755 $timestamp = wp_next_scheduled( 'ceske_sluzby_heureka_aktualizace_xml' );
756 wp_unschedule_event( $timestamp, 'ceske_sluzby_heureka_aktualizace_xml' );
757 }
758 }
759
760 $zbozi_xml = get_option( 'wc_ceske_sluzby_xml_feed_zbozi-aktivace' );
761 if ( $zbozi_xml == "yes" ) {
762 if ( ! wp_next_scheduled( 'ceske_sluzby_zbozi_aktualizace_xml' ) ) {
763 wp_schedule_event( current_time( 'timestamp', 1 ) + MINUTE_IN_SECONDS, 'daily', 'ceske_sluzby_zbozi_aktualizace_xml' );
764 }
765 } else {
766 if ( wp_next_scheduled( 'ceske_sluzby_zbozi_aktualizace_xml' ) ) {
767 $timestamp = wp_next_scheduled( 'ceske_sluzby_zbozi_aktualizace_xml' );
768 wp_unschedule_event( $timestamp, 'ceske_sluzby_zbozi_aktualizace_xml' );
769 }
770 }
771
772 $pricemania_xml = get_option( 'wc_ceske_sluzby_xml_feed_pricemania-aktivace' );
773 if ( $pricemania_xml == "yes" ) {
774 if ( ! wp_next_scheduled( 'ceske_sluzby_pricemania_aktualizace_xml' ) ) {
775 wp_schedule_event( current_time( 'timestamp', 1 ) + ( 2 * MINUTE_IN_SECONDS ), 'daily', 'ceske_sluzby_pricemania_aktualizace_xml' );
776 }
777 } else {
778 if ( wp_next_scheduled( 'ceske_sluzby_pricemania_aktualizace_xml' ) ) {
779 $timestamp = wp_next_scheduled( 'ceske_sluzby_pricemania_aktualizace_xml' );
780 wp_unschedule_event( $timestamp, 'ceske_sluzby_pricemania_aktualizace_xml' );
781 }
782 }
783
784 $glami_xml = get_option( 'wc_ceske_sluzby_xml_feed_glami-aktivace' );
785 if ( $glami_xml == "yes" ) {
786 if ( ! wp_next_scheduled( 'ceske_sluzby_glami_aktualizace_xml' ) ) {
787 wp_schedule_event( current_time( 'timestamp', 1 ) + ( 3 * MINUTE_IN_SECONDS ), 'daily', 'ceske_sluzby_glami_aktualizace_xml' );
788 }
789 } else {
790 if ( wp_next_scheduled( 'ceske_sluzby_glami_aktualizace_xml' ) ) {
791 $timestamp = wp_next_scheduled( 'ceske_sluzby_glami_aktualizace_xml' );
792 wp_unschedule_event( $timestamp, 'ceske_sluzby_glami_aktualizace_xml' );
793 }
794 }
795 } else {
796 if ( wp_next_scheduled( 'ceske_sluzby_heureka_aktualizace_xml' ) ) {
797 $timestamp = wp_next_scheduled( 'ceske_sluzby_heureka_aktualizace_xml' );
798 wp_unschedule_event( $timestamp, 'ceske_sluzby_heureka_aktualizace_xml' );
799 }
800 if ( wp_next_scheduled( 'ceske_sluzby_zbozi_aktualizace_xml' ) ) {
801 $timestamp = wp_next_scheduled( 'ceske_sluzby_zbozi_aktualizace_xml' );
802 wp_unschedule_event( $timestamp, 'ceske_sluzby_zbozi_aktualizace_xml' );
803 }
804 if ( wp_next_scheduled( 'ceske_sluzby_pricemania_aktualizace_xml' ) ) {
805 $timestamp = wp_next_scheduled( 'ceske_sluzby_pricemania_aktualizace_xml' );
806 wp_unschedule_event( $timestamp, 'ceske_sluzby_pricemania_aktualizace_xml' );
807 }
808 if ( wp_next_scheduled( 'ceske_sluzby_glami_aktualizace_xml' ) ) {
809 $timestamp = wp_next_scheduled( 'ceske_sluzby_glami_aktualizace_xml' );
810 wp_unschedule_event( $timestamp, 'ceske_sluzby_glami_aktualizace_xml' );
811 }
812 }
813}
814
815add_action( 'ceske_sluzby_heureka_aktualizace_xml', 'ceske_sluzby_heureka_xml_feed_aktualizace' );
816add_action( 'ceske_sluzby_heureka_aktualizace_xml_batch', 'ceske_sluzby_heureka_xml_feed_aktualizace' );
817function ceske_sluzby_heureka_xml_feed_aktualizace() {
818 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-xml.php';
819 xml_feed_aktualizace_nastaveni( 'heureka' );
820}
821
822add_action( 'ceske_sluzby_glami_aktualizace_xml', 'ceske_sluzby_glami_xml_feed_aktualizace' );
823add_action( 'ceske_sluzby_glami_aktualizace_xml_batch', 'ceske_sluzby_glami_xml_feed_aktualizace' );
824function ceske_sluzby_glami_xml_feed_aktualizace() {
825 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-xml.php';
826 xml_feed_aktualizace_nastaveni( 'glami' );
827}
828
829add_action( 'ceske_sluzby_zbozi_aktualizace_xml', 'ceske_sluzby_zbozi_xml_feed_aktualizace' );
830add_action( 'ceske_sluzby_zbozi_aktualizace_xml_batch', 'ceske_sluzby_zbozi_xml_feed_aktualizace' );
831function ceske_sluzby_zbozi_xml_feed_aktualizace() {
832 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-xml.php';
833 zbozi_xml_feed_aktualizace();
834}
835
836add_action( 'ceske_sluzby_pricemania_aktualizace_xml', 'ceske_sluzby_pricemania_xml_feed_aktualizace' );
837add_action( 'ceske_sluzby_pricemania_aktualizace_xml_batch', 'ceske_sluzby_pricemania_xml_feed_aktualizace' );
838function ceske_sluzby_pricemania_xml_feed_aktualizace() {
839 require_once plugin_dir_path( __FILE__ ) . 'includes/class-ceske-sluzby-xml.php';
840 pricemania_xml_feed_aktualizace();
841}
842
843// https://docs.woothemes.com/document/hide-other-shipping-methods-when-free-shipping-is-available/
844function ceske_sluzby_omezit_dopravu_pokud_dostupna_zdarma( $rates, $package ) {
845 $omezit_dopravu = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_doprava-pouze-zdarma' );
846 if ( $omezit_dopravu == "yes" ) {
847 $rates_omezeno = array();
848 if ( version_compare( WC_VERSION, '2.6', '<' ) ) {
849 if ( isset( $rates['free_shipping'] ) ) {
850 $free_shipping = $rates['free_shipping'];
851 if ( isset( $rates['local_pickup'] ) ) {
852 $local_pickup = $rates['local_pickup'];
853 }
854 $rates_omezeno['free_shipping'] = $free_shipping;
855 if ( isset( $local_pickup ) ) {
856 $rates_omezeno['local_pickup'] = $local_pickup;
857 }
858 }
859 } else {
860 if ( isset( $rates['legacy_free_shipping'] ) ) {
861 $free_shipping = $rates['legacy_free_shipping'];
862 if ( isset( $rates['legacy_local_pickup'] ) ) {
863 $local_pickup = $rates['legacy_local_pickup'];
864 }
865 $rates_omezeno['legacy_free_shipping'] = $free_shipping;
866 if ( isset( $local_pickup ) ) {
867 $rates_omezeno['legacy_local_pickup'] = $local_pickup;
868 }
869 }
870 $free = $pickup = array();
871 foreach ( $rates as $rate_id => $rate ) {
872 if ( 'free_shipping' === $rate->method_id ) {
873 $rates_omezeno[ $rate_id ] = $rate;
874 $free[] = $rate_id;
875 }
876 if ( 'local_pickup' === $rate->method_id ) {
877 $rates_omezeno[ $rate_id ] = $rate;
878 $pickup[] = $rate_id;
879 }
880 }
881 if ( empty( $free ) && ! empty( $pickup ) ) {
882 foreach ( $pickup as $pickup_id ) {
883 unset( $rates_omezeno[ $pickup_id ] );
884 }
885 }
886 }
887 }
888 if ( ! empty( $rates_omezeno ) ) {
889 return $rates_omezeno;
890 } else {
891 return $rates;
892 }
893}
894
895function ceske_sluzby_heureka_recenze_obchodu( $atts ) {
896 $process = true;
897 $output = '<div class="recenze-zakazniku">';
898 $api = get_option( 'wc_ceske_sluzby_heureka_overeno-api' );
899 if ( ! empty( $api ) ) {
900 if ( false === ( $source_xml = get_transient( 'ceske_sluzby_heureka_recenze_zakazniku' ) ) ) {
901 $url = "https://www." . HEUREKA_URL . "/direct/dotaznik/export-review.php?key=" . $api;
902 $response = wp_remote_get( $url );
903 if ( ! is_wp_error( $response ) ) {
904 $source_xml = wp_remote_retrieve_body( $response );
905 if ( ! empty( $source_xml ) && wp_remote_retrieve_response_code( $response ) == 200 ) {
906 set_transient( 'ceske_sluzby_heureka_recenze_zakazniku', $source_xml, 24 * HOUR_IN_SECONDS );
907 } else {
908 $process = false;
909 }
910 } else {
911 $output .= 'Nepodařilo se získat data:' . $response->get_error_message();
912 }
913 }
914
915 if ( $process ) {
916 $recenze_xml = simplexml_load_string( $source_xml, 'SimpleXMLElement', LIBXML_NOCDATA );
917 $atributy = shortcode_atts( array( 'limit' => null ), $atts );
918 $limit = $atributy['limit'];
919 $i = 0;
920
921 if ( ! empty( $recenze_xml ) && ! is_scalar( $recenze_xml ) ) {
922 foreach( $recenze_xml as $recenze ) {
923 if ( ( ! empty( $limit ) && $i < $limit ) || empty( $limit ) ) {
924 if ( ! empty( $recenze->summary ) ) {
925 $i = $i + 1;
926 $output .= '<ul>';
927 $output .= '<li>';
928 $output .= '<strong>' . $recenze->summary . '</strong><br />';
929 if ( ! empty( $recenze->total_rating ) ) {
930 $output .= 'Hodnocení: ' . $recenze->total_rating . '/5 | ';
931 }
932 $output .= 'Datum: před ' . human_time_diff( $recenze->unix_timestamp );
933 if ( ! empty( $recenze->name ) ) {
934 $output .= ' | Autor: ' . $recenze->name;
935 }
936 $output .= '</li>';
937 $output .= '</ul>';
938 }
939 }
940 else {
941 break;
942 }
943 }
944 }
945 else {
946 $output .= 'Zatím žádné hodnocení.';
947 }
948 } else {
949 $output .= 'Nepodařilo se získat data.';
950 }
951 } else {
952 $output .= 'Pro zobrazení recenzí musíte ještě <a href="' . admin_url(). 'admin.php?page=wc-settings&tab=ceske-sluzby">zadat</a> API klíč pro Ověřeno zákazníky.';
953 }
954 $output .= '</div>';
955 return $output;
956}
957
958function ceske_sluzby_heureka_overeno_zakazniky_souhlas() {
959 $api = get_option( 'wc_ceske_sluzby_heureka_overeno-api' );
960 $souhlas = get_option( 'wc_ceske_sluzby_heureka_overeno-souhlas' );
961 if ( ! empty( $api ) ) {
962 if ( $souhlas == 'nesouhlas_optout' ) {
963 woocommerce_form_field( 'heureka_overeno_zakazniky_nesouhlas_optout',
964 array(
965 'type' => 'checkbox',
966 'label' => 'Nesouhlasím se zasláním dotazníku spokojenosti v rámci programu Ověřeno zákazníky (Heureka), který pomáhá zlepšovat naše služby.',
967 )
968 );
969 }
970 if ( $souhlas == 'souhlas_optout' ) {
971 woocommerce_form_field( 'heureka_overeno_zakazniky_souhlas_optout',
972 array(
973 'type' => 'checkbox',
974 'label' => 'Souhlasím se zasláním dotazníku spokojenosti v rámci programu Ověřeno zákazníky (Heureka), který pomáhá zlepšovat naše služby.',
975 ), 1
976 );
977 }
978 }
979}
980
981function ceske_sluzby_xml_kategorie_pridat_pole() {
982 $global_data = ceske_sluzby_xml_ziskat_globalni_hodnoty();
983 $xml_feed_heureka = get_option( 'wc_ceske_sluzby_xml_feed_heureka-aktivace' );
984 $xml_feed_zbozi = get_option( 'wc_ceske_sluzby_xml_feed_zbozi-aktivace' );
985 $xml_feed_glami = get_option( 'wc_ceske_sluzby_xml_feed_glami-aktivace' );
986 if ( $xml_feed_heureka == "yes" ) { ?>
987 <div style="font-size: 14px; font-weight: bold;">České služby: Heureka</div>
988 <div class="form-field">
989 <label for="ceske-sluzby-xml-heureka-kategorie">Kategorie</label>
990 <input name="ceske-sluzby-xml-heureka-kategorie" id="ceske-sluzby-xml-heureka-kategorie" type="text" value="" placeholder="CATEGORYTEXT" size="70"/>
991 <p>
992 Zatím je nutné doplnit příslušnou kategorii z Heureky ručně (aktuální přehled naleznete <a href="https://www.<?php echo HEUREKA_URL; ?>/direct/xml-export/shops/heureka-sekce.xml">zde</a>).<br />
993 Příklad: <strong>Elektronika | Počítače a kancelář | Software | Antiviry</strong><br />
994 Poznámka: Z <code>CATEGORY_FULLNAME</code> je třeba vynechat část <code><?php echo ucfirst( HEUREKA_URL ); ?> | </code>.
995 </p>
996 </div>
997 <?php if ( empty( $global_data['nazev_produktu'] ) || strpos( $global_data['nazev_produktu'], '{KATEGORIE}' ) !== false ) { ?>
998 <div class="form-field">
999 <label for="ceske-sluzby-xml-heureka-productname">Název produktů</label>
1000 <input name="ceske-sluzby-xml-heureka-productname" id="ceske-sluzby-xml-heureka-productname" type="text" value="" placeholder="PRODUCTNAME" size="70"/>
1001 <p>
1002 Pomocí placeholderů můžete doplnit obecný název pro všechny produkty z příslušné kategorie Heureky (aktuální přehled naleznete <a href="https://sluzby.<?php echo HEUREKA_URL; ?>/napoveda/povinne-nazvy/" target="_blank">zde</a>).<br />
1003 Příklad (Svatební dekorace): <strong>Výrobce | Druh | Barva</strong><br />
1004 Pokud používáte nastavení výrobce, druh máte jako název produktu a barvu zase uloženou jako vlastnost v podobě taxonomie, tak můžete zadat: <code>{MANUFACTURER} {NAZEV} {pa_barva}</code>
1005 </p>
1006 </div>
1007 <?php } ?>
1008 <?php }
1009 if ( $xml_feed_zbozi == "yes" ) { ?>
1010 <div style="font-size: 14px; font-weight: bold;">České služby: Zboží.cz</div>
1011 <div class="form-field">
1012 <label for="ceske-sluzby-xml-zbozi-kategorie">Kategorie</label>
1013 <input name="ceske-sluzby-xml-zbozi-kategorie" id="ceske-sluzby-xml-zbozi-kategorie" type="text" value="" placeholder="CATEGORYTEXT" size="70" />
1014 <p>
1015 Zatím je nutné doplnit příslušnou kategorii ze Zbozi.cz ručně (aktuální přehled naleznete <a href="https://www.zbozi.cz/static/categories.csv">zde</a>).<br />
1016 Příklad: <strong>Počítače | Software | Grafický a video software</strong><br />
1017 </p>
1018 </div>
1019 <?php if ( empty( $global_data['nazev_produktu'] ) || strpos( $global_data['nazev_produktu'], '{KATEGORIE}' ) !== false ) { ?>
1020 <div class="form-field">
1021 <label for="ceske-sluzby-xml-zbozi-productname">Název produktů</label>
1022 <input name="ceske-sluzby-xml-zbozi-productname" id="ceske-sluzby-xml-zbozi-productname" type="text" value="" placeholder="PRODUCTNAME" size="70" />
1023 <p>
1024 Pomocí placeholderů můžete doplnit obecný název pro všechny produkty z příslušné kategorie Zboží.cz (aktuální přehled naleznete <a href="https://napoveda.seznam.cz/cz/zbozi/specifikace-xml-pro-obchody/pravidla-pojmenovani-nabidek/" target="_blank">zde</a>).<br />
1025 Příklad pro konrétní kategorii: <strong>Výrobce | Druh | Barva</strong><br />
1026 Pokud používáte nastavení výrobce, druh máte jako název produktu a barvu zase uloženou jako vlastnost v podobě taxonomie, tak můžete zadat: <code>{MANUFACTURER} {NAZEV} {pa_barva}</code>
1027 </p>
1028 </div>
1029 <?php }
1030 $extra_message_aktivace = get_option( 'wc_ceske_sluzby_xml_feed_zbozi_extra_message-aktivace' );
1031 if ( ! empty( $extra_message_aktivace ) ) {
1032 $extra_message_array = ceske_sluzby_ziskat_nastaveni_zbozi_extra_message();
1033 foreach ( $extra_message_aktivace as $extra_message ) {
1034 if ( array_key_exists( $extra_message, $global_data['extra_message'] ) ) { ?>
1035 <div class="form-field">
1036 <label for="ceske-sluzby-xml-zbozi-extra-message[<?php echo $extra_message; ?>]"><?php echo $extra_message_array[ $extra_message ]; ?></label>
1037 <span>
1038 Není potřeba nic zadávat, protože na úrovni eshopu je tato informace <a href="<?php echo admin_url(); ?>admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastavena</a> globálně pro všechny produkty.
1039 </span>
1040 </div>
1041 <?php } else { ?>
1042 <div class="form-field">
1043 <label for="ceske-sluzby-xml-zbozi-extra-message[<?php echo $extra_message; ?>]"><?php echo $extra_message_array[ $extra_message ]; ?></label>
1044 <input name="ceske-sluzby-xml-zbozi-extra-message[<?php echo $extra_message; ?>]" id="ceske-sluzby-xml-zbozi-extra-message[<?php echo $extra_message; ?>]" type="checkbox" value="yes" />
1045 <span>
1046 Po zaškrtnutí budou produkty v příslušné kategorii označeny příslušnou doplňkovou informací. Na úrovni eshopu zatím není nic <a href="<?php echo admin_url(); ?>admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastaveno</a>.
1047 </span>
1048 </div>
1049 <?php } ?>
1050 <?php }
1051 }
1052 }
1053 if ( $xml_feed_glami == "yes" ) { ?>
1054 <div style="font-size: 14px; font-weight: bold;">České služby: Glami</div>
1055 <div class="form-field">
1056 <label for="ceske-sluzby-xml-glami-kategorie">Kategorie</label>
1057 <input name="ceske-sluzby-xml-glami-kategorie" id="ceske-sluzby-xml-glami-kategorie" type="text" value="" placeholder="CATEGORYTEXT" size="70"/>
1058 <p>
1059 Zatím je nutné doplnit příslušnou kategorii z Glami ručně (aktuální přehled naleznete <a href="https://www.<?php echo GLAMI_URL; ?>/category-xml/">zde</a>).<br />
1060 Příklad: <strong>Dámské oblečení a obuv | Dámské boty | Dámské outdoorové boty</strong><br />
1061 Poznámka: Z <code>CATEGORY_FULLNAME</code> je třeba vynechat část <code><?php echo ucfirst( GLAMI_URL ); ?> | </code>.
1062 </p>
1063 </div>
1064 <?php } ?>
1065 <div style="font-size: 14px; font-weight: bold;">České služby: XML feedy</div>
1066 <div class="form-field">
1067 <label for="ceske-sluzby-xml-vynechano">Odebrat z XML</label>
1068 <input name="ceske-sluzby-xml-vynechano" id="ceske-sluzby-xml-vynechano" type="checkbox" value="yes" />
1069 <strong><span style="padding-right: 10px;">Vše</span></strong>
1070 <?php $feeds = ceske_sluzby_prehled_xml_feedu();
1071 foreach ( $feeds as $feed_id => $feed_name ) { ?>
1072 <input name="ceske-sluzby-xml-feed-vynechano[<?php echo $feed_id; ?>]" id="ceske-sluzby-xml-feed-vynechano[<?php echo $feed_id; ?>]" type="checkbox" value="yes" <?php checked( isset( $xml_feed_vynechano_ulozeno[$feed_id] ) ? $xml_feed_vynechano_ulozeno[$feed_id] : '', "yes" ); ?>/>
1073 <span style="padding-right: 10px;"><?php echo $feed_name; ?></span>
1074 <?php } ?>
1075 <p>
1076 Zaškrtněte pokud chcete odebrat produkty této kategorie z XML feedů.
1077 </p>
1078 </div>
1079 <?php
1080 if ( ! empty( $global_data['stav_produktu'] ) ) {
1081 if ( $global_data['stav_produktu'] == 'used' ) {
1082 $stav_produkt_hodnota = 'Použité (bazar)';
1083 } else {
1084 $stav_produkt_hodnota = 'Repasované';
1085 }
1086 $stav_produkt_text = 'Na úrovni eshopu je <a href="' . admin_url(). 'admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastavena</a> hodnota: <strong>' . $stav_produkt_hodnota . '</strong>. Nastavení kategorie bude mít ale přednost.';
1087 } else {
1088 $stav_produkt_text = 'Na úrovni eshopu zatím není nic <a href="' . admin_url(). 'admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastaveno</a>.';
1089 } ?>
1090 <div class="form-field">
1091 <label for="ceske-sluzby-xml-stav-produktu">Stav produktů</label>
1092 <select id="ceske-sluzby-xml-stav-produktu" name="ceske-sluzby-xml-stav-produktu" class="postform">
1093 <option value="">- Vyberte -</option>
1094 <option value="used">Použité (bazar)</option>
1095 <option value="refurbished">Repasované</option>
1096 </select>
1097 <span>
1098 <?php echo $stav_produkt_text; ?>
1099 </span>
1100 </div>
1101 <div class="form-field">
1102 <label for="ceske-sluzby-xml-erotika">Erotický obsah</label>
1103 <input name="ceske-sluzby-xml-erotika" id="ceske-sluzby-xml-erotika" type="checkbox" value="yes" />
1104 <span>
1105 Zaškrtněte pokud chcete označit obsah webu jako erotický.
1106 </span>
1107 </div>
1108<?php
1109}
1110
1111function ceske_sluzby_xml_kategorie_upravit_pole( $term ) {
1112 $checked = '';
1113 $global_data = ceske_sluzby_xml_ziskat_globalni_hodnoty();
1114 $heureka_kategorie = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-heureka-kategorie', true );
1115 $heureka_productname = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-heureka-productname', true );
1116 $zbozi_kategorie = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-zbozi-kategorie', true );
1117 $zbozi_productname = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-zbozi-productname', true );
1118 $glami_kategorie = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-glami-kategorie', true );
1119 $kategorie_extra_message_ulozeno = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-zbozi-extra-message', true );
1120 $xml_vynechano_ulozeno = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-vynechano', true );
1121 $xml_feed_vynechano_ulozeno = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-feed-vynechano', true );
1122 $xml_erotika_ulozeno = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-erotika', true );
1123 $xml_stav_produktu = get_woocommerce_term_meta( $term->term_id, 'ceske-sluzby-xml-stav-produktu', true );
1124 $xml_feed_heureka = get_option( 'wc_ceske_sluzby_xml_feed_heureka-aktivace' );
1125 $xml_feed_zbozi = get_option( 'wc_ceske_sluzby_xml_feed_zbozi-aktivace' );
1126 $xml_feed_glami = get_option( 'wc_ceske_sluzby_xml_feed_glami-aktivace' );
1127 if ( $xml_feed_heureka == "yes" ) { ?>
1128 <tr>
1129 <th scope="row" valign="top"><strong>České služby: Heureka</strong></th>
1130 </tr>
1131 <tr class="form-field">
1132 <th scope="row" valign="top"><label>Kategorie</label></th>
1133 <td>
1134 <input name="ceske-sluzby-xml-heureka-kategorie" id="ceske-sluzby-xml-heureka-kategorie" type="text" value="<?php echo esc_attr( $heureka_kategorie ); ?>" placeholder="CATEGORYTEXT" />
1135 <p class="description">
1136 Zatím je nutné doplnit příslušnou kategorii z Heureky ručně (aktuální přehled naleznete <a href="http://www.<?php echo HEUREKA_URL; ?>/direct/xml-export/shops/heureka-sekce.xml">zde</a>).<br />
1137 Příklad: <strong>Elektronika | Počítače a kancelář | Software | Antiviry</strong><br />
1138 Poznámka: Z <code>CATEGORY_FULLNAME</code> je třeba vynechat část <code><?php echo ucfirst( HEUREKA_URL ); ?> | </code>.
1139 </p>
1140 </td>
1141 </tr>
1142 <?php if ( empty( $global_data['nazev_produktu'] ) || strpos( $global_data['nazev_produktu'], '{KATEGORIE}' ) !== false ) { ?>
1143 <tr class="form-field">
1144 <th scope="row" valign="top"><label>Název produktů</label></th>
1145 <td>
1146 <input name="ceske-sluzby-xml-heureka-productname" id="ceske-sluzby-xml-heureka-productname" type="text" value="<?php echo esc_attr( $heureka_productname ); ?>" placeholder="PRODUCTNAME" />
1147 <p class="description">
1148 Pomocí placeholderů můžete doplnit obecný název pro všechny produkty z příslušné kategorie Heureky (aktuální přehled naleznete <a href="http://sluzby.<?php echo HEUREKA_URL; ?>/napoveda/povinne-nazvy/" target="_blank">zde</a>).<br />
1149 Příklad (Svatební dekorace): <strong>Výrobce | Druh | Barva</strong><br />
1150 Pokud používáte nastavení výrobce, druh máte jako název produktu a barvu zase uloženou jako vlastnost v podobě taxonomie, tak můžete zadat: <code>{MANUFACTURER} {NAZEV} {pa_barva}</code>
1151 </p>
1152 </td>
1153 </tr>
1154 <?php } ?>
1155 <?php }
1156 if ( $xml_feed_zbozi == "yes" ) { ?>
1157 <tr>
1158 <th scope="row" valign="top"><strong>České služby: Zboží.cz</strong></th>
1159 </tr>
1160 <tr class="form-field">
1161 <th scope="row" valign="top"><label>Kategorie</label></th>
1162 <td>
1163 <input name="ceske-sluzby-xml-zbozi-kategorie" id="ceske-sluzby-xml-zbozi-kategorie" type="text" value="<?php echo esc_attr( $zbozi_kategorie ); ?>" placeholder="CATEGORYTEXT" />
1164 <p class="description">
1165 Zatím je nutné doplnit příslušnou kategorii ze Zbozi.cz ručně (aktuální přehled naleznete <a href="http://www.zbozi.cz/static/categories.csv">zde</a>).<br />
1166 Příklad: <strong>Počítače | Software | Grafický a video software</strong><br />
1167 </p>
1168 </td>
1169 </tr>
1170 <?php if ( empty( $global_data['nazev_produktu'] ) || strpos( $global_data['nazev_produktu'], '{KATEGORIE}' ) !== false ) { ?>
1171 <tr class="form-field">
1172 <th scope="row" valign="top"><label>Název produktů</label></th>
1173 <td>
1174 <input name="ceske-sluzby-xml-zbozi-productname" id="ceske-sluzby-xml-zbozi-productname" type="text" value="<?php echo esc_attr( $zbozi_productname ); ?>" placeholder="PRODUCTNAME" />
1175 <p class="description">
1176 Pomocí placeholderů můžete doplnit obecný název pro všechny produkty z příslušné kategorie Zboží.cz (aktuální přehled naleznete <a href="http://napoveda.seznam.cz/cz/zbozi/specifikace-xml-pro-obchody/pravidla-pojmenovani-nabidek/" target="_blank">zde</a>).<br />
1177 Příklad pro konrétní kategorii: <strong>Výrobce | Druh | Barva</strong><br />
1178 Pokud používáte nastavení výrobce, druh máte jako název produktu a barvu zase uloženou jako vlastnost v podobě taxonomie, tak můžete zadat: <code>{MANUFACTURER} {NAZEV} {pa_barva}</code>
1179 </p>
1180 </td>
1181 </tr>
1182 <?php }
1183 $extra_message_aktivace = get_option( 'wc_ceske_sluzby_xml_feed_zbozi_extra_message-aktivace' );
1184 if ( ! empty( $extra_message_aktivace ) ) {
1185 $extra_message_array = ceske_sluzby_ziskat_nastaveni_zbozi_extra_message();
1186 foreach ( $extra_message_aktivace as $extra_message ) {
1187 if ( array_key_exists( $extra_message, $global_data['extra_message'] ) ) {
1188 $extra_message_text = ''; ?>
1189 <tr class="form-field">
1190 <th scope="row" valign="top"><label><?php echo $extra_message_array[ $extra_message ]; ?></label></th>
1191 <td>
1192 <span class="description">
1193 Není potřeba nic zadávat, protože na úrovni eshopu je tato informace <a href="<?php echo admin_url(); ?>admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastavena</a> globálně pro všechny produkty.
1194 </span>
1195 </td>
1196 </tr>
1197 <?php } else {
1198 $checked = "";
1199 if ( ! empty( $kategorie_extra_message_ulozeno ) && array_key_exists( $extra_message, $kategorie_extra_message_ulozeno ) ) {
1200 $checked = 'checked="checked"';
1201 } ?>
1202 <tr class="form-field">
1203 <th scope="row" valign="top"><label><?php echo $extra_message_array[ $extra_message ]; ?></label></th>
1204 <td>
1205 <input name="ceske-sluzby-xml-zbozi-extra-message[<?php echo $extra_message; ?>]" id="ceske-sluzby-xml-zbozi-extra-message[<?php echo $extra_message; ?>]" type="checkbox" value="yes" <?php echo $checked; ?>/>
1206 <span class="description">
1207 Po zaškrtnutí budou produkty v příslušné kategorii označeny příslušnou doplňkovou informací. Na úrovni eshopu zatím není nic <a href="<?php echo admin_url(); ?>admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastaveno</a>.
1208 </span>
1209 </td>
1210 </tr>
1211 <?php }
1212 }
1213 }
1214 }
1215 if ( $xml_feed_glami == "yes" ) { ?>
1216 <tr>
1217 <th scope="row" valign="top"><strong>České služby: Glami</strong></th>
1218 </tr>
1219 <tr class="form-field">
1220 <th scope="row" valign="top"><label>Kategorie</label></th>
1221 <td>
1222 <input name="ceske-sluzby-xml-glami-kategorie" id="ceske-sluzby-xml-glami-kategorie" type="text" value="<?php echo esc_attr( $glami_kategorie ); ?>" placeholder="CATEGORYTEXT" />
1223 <p class="description">
1224 Zatím je nutné doplnit příslušnou kategorii z Glami ručně (aktuální přehled naleznete <a href="http://www.<?php echo GLAMI_URL; ?>/category-xml/">zde</a>).<br />
1225 Příklad: <strong>Dámské oblečení a obuv | Dámské boty | Dámské outdoorové boty</strong><br />
1226 Poznámka: Z <code>CATEGORY_FULLNAME</code> je třeba vynechat část <code><?php echo ucfirst( GLAMI_URL ); ?> | </code>.
1227 </p>
1228 </td>
1229 </tr>
1230 <?php } ?>
1231 <tr>
1232 <th scope="row" valign="top"><strong>České služby: XML feedy</strong></th>
1233 </tr>
1234 <tr class="form-field">
1235 <th scope="row" valign="top"><label>Odebrat z XML</label></th>
1236 <td>
1237 <input name="ceske-sluzby-xml-vynechano" id="ceske-sluzby-xml-vynechano" type="checkbox" value="yes" <?php checked( $xml_vynechano_ulozeno, "yes" ); ?>/>
1238 <strong><span class="description" style="padding-right: 10px;">Vše</span></strong>
1239 <?php $feeds = ceske_sluzby_prehled_xml_feedu();
1240 foreach ( $feeds as $feed_id => $feed_name ) { ?>
1241 <input name="ceske-sluzby-xml-feed-vynechano[<?php echo $feed_id; ?>]" id="ceske-sluzby-xml-feed-vynechano[<?php echo $feed_id; ?>]" type="checkbox" value="yes" <?php checked( isset( $xml_feed_vynechano_ulozeno[$feed_id] ) ? $xml_feed_vynechano_ulozeno[$feed_id] : '', "yes" ); ?>/>
1242 <span class="description" style="padding-right: 10px;"><?php echo $feed_name; ?></span>
1243 <?php } ?>
1244 <p class="description">
1245 Zaškrtněte pokud chcete odebrat produkty této kategorie z XML feedů.
1246 </span>
1247 </td>
1248 </tr>
1249 <?php
1250 if ( ! empty( $global_data['stav_produktu'] ) ) {
1251 if ( $global_data['stav_produktu'] == 'used' ) {
1252 $stav_produkt_hodnota = 'Použité (bazar)';
1253 } else {
1254 $stav_produkt_hodnota = 'Repasované';
1255 }
1256 $stav_produkt_text = 'Na úrovni eshopu je <a href="' . admin_url(). 'admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastavena</a> hodnota: <strong>' . $stav_produkt_hodnota . '</strong>. Nastavení kategorie bude mít ale přednost.';
1257 } else {
1258 $stav_produkt_text = 'Na úrovni eshopu zatím není nic <a href="' . admin_url(). 'admin.php?page=wc-settings&tab=ceske-sluzby§ion=xml-feed">nastaveno</a>.';
1259 } ?>
1260 <tr class="form-field">
1261 <th scope="row" valign="top"><label>Stav produktů</label></th>
1262 <td>
1263 <select id="ceske-sluzby-xml-stav-produktu" name="ceske-sluzby-xml-stav-produktu" class="postform">
1264 <option value="" <?php selected( '', $xml_stav_produktu ); ?>>- Vyberte -</option>
1265 <option value="used" <?php selected( 'used', $xml_stav_produktu ); ?>>Použité (bazar)</option>
1266 <option value="refurbished" <?php selected( 'refurbished', $xml_stav_produktu ); ?>>Repasované</option>
1267 </select>
1268 <span class="description">
1269 <?php echo $stav_produkt_text; ?>
1270 </span>
1271 </td>
1272 </tr>
1273 <tr class="form-field">
1274 <th scope="row" valign="top"><label>Erotický obsah</label></th>
1275 <td>
1276 <input name="ceske-sluzby-xml-erotika" id="ceske-sluzby-xml-erotika" type="checkbox" value="yes" <?php checked( $xml_erotika_ulozeno, "yes" ); ?>/>
1277 <span class="description">
1278 Zaškrtněte pokud chcete označit obsah webu jako erotický.
1279 </span>
1280 </td>
1281 </tr>
1282<?php // http://themehybrid.com/weblog/introduction-to-wordpress-term-meta
1283}
1284
1285function ceske_sluzby_xml_kategorie_ulozit( $term_id, $tt_id = '', $taxonomy = '' ) {
1286 if ( 'product_cat' === $taxonomy ) {
1287 $ukladana_data_text = array(
1288 'ceske-sluzby-xml-heureka-kategorie',
1289 'ceske-sluzby-xml-heureka-productname',
1290 'ceske-sluzby-xml-zbozi-kategorie',
1291 'ceske-sluzby-xml-zbozi-productname',
1292 'ceske-sluzby-xml-glami-kategorie',
1293 'ceske-sluzby-xml-stav-produktu'
1294 );
1295 foreach ( $ukladana_data_text as $key ) {
1296 if ( isset( $_POST[ $key ] ) ) {
1297 $value = $_POST[ $key ];
1298 if ( $key == 'ceske-sluzby-xml-heureka-kategorie' ) {
1299 $value = str_replace( 'Heureka.cz | ', '', $value );
1300 $value = str_replace( 'Heureka.sk | ', '', $value );
1301 }
1302 if ( $key == 'ceske-sluzby-xml-glami-kategorie' ) {
1303 $value = str_replace( 'Glami.cz | ', '', $value );
1304 $value = str_replace( 'Glami.sk | ', '', $value );
1305 }
1306 $ulozeno_text = get_woocommerce_term_meta( $term_id, $key, true );
1307 if ( ! empty( $value ) ) {
1308 update_woocommerce_term_meta( $term_id, $key, esc_attr( $value ) );
1309 } elseif ( ! empty( $ulozeno_text ) ) {
1310 delete_woocommerce_term_meta( $term_id, $key );
1311 }
1312 }
1313 }
1314
1315 $ukladana_data_checkbox = array(
1316 'ceske-sluzby-xml-vynechano',
1317 'ceske-sluzby-xml-feed-vynechano',
1318 'ceske-sluzby-xml-erotika',
1319 'ceske-sluzby-xml-zbozi-extra-message'
1320 );
1321 foreach ( $ukladana_data_checkbox as $key ) {
1322 $ulozeno_checkbox = get_woocommerce_term_meta( $term_id, $key, true );
1323 if ( isset( $_POST[ $key ] ) ) {
1324 $value = $_POST[ $key ];
1325 if ( ! empty( $value ) ) {
1326 update_woocommerce_term_meta( $term_id, $key, $value );
1327 }
1328 } elseif ( ! empty( $ulozeno_checkbox ) ) {
1329 delete_woocommerce_term_meta( $term_id, $key );
1330 }
1331 }
1332 }
1333}
1334
1335function ceske_sluzby_xml_kategorie_pridat_sloupec( $columns ) {
1336 $new_columns = array();
1337 $new_columns['xml-heureka'] = 'Nastavení XML';
1338 return array_merge( $columns, $new_columns );
1339}
1340
1341function ceske_sluzby_xml_kategorie_sloupec( $columns, $column, $id ) {
1342 if ( 'xml-heureka' == $column ) {
1343 $heureka_kategorie = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-heureka-kategorie', true );
1344 $heureka_nazev = false;
1345 if ( $heureka_kategorie ) {
1346 $columns .= 'Heureka: <a href="#" title="' . $heureka_kategorie . '">KA</a>';
1347 $heureka_nazev = true;
1348 }
1349 $heureka_productname = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-heureka-productname', true );
1350 if ( $heureka_productname ) {
1351 if ( $heureka_nazev ) {
1352 $columns .= ' <a href="#" title="' . $heureka_productname . '">PR</a>';
1353 } else {
1354 $columns .= 'Heureka: <a href="#" title="' . $heureka_productname . '">PR</a>';
1355 $heureka_nazev = true;
1356 }
1357 }
1358 if ( $heureka_nazev ) {
1359 $columns .= '<br />';
1360 }
1361 $zbozi_kategorie = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-zbozi-kategorie', true );
1362 $zbozi_nazev = false;
1363 if ( $zbozi_kategorie ) {
1364 $columns .= 'Zboží: <a href="#" title="' . $zbozi_kategorie . '">KA</a>';
1365 $zbozi_nazev = true;
1366 }
1367 $zbozi_productname = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-zbozi-productname', true );
1368 if ( $zbozi_productname ) {
1369 if ( $zbozi_nazev ) {
1370 $columns .= ' <a href="#" title="' . $zbozi_productname . '">PR</a>';
1371 } else {
1372 $columns .= 'Zboží: <a href="#" title="' . $zbozi_productname . '">PR</a>';
1373 $zbozi_nazev = true;
1374 }
1375 }
1376 $glami_kategorie = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-glami-kategorie', true );
1377 $extra_message_aktivace = get_option( 'wc_ceske_sluzby_xml_feed_zbozi_extra_message-aktivace' );
1378 $kategorie_extra_message_ulozeno = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-zbozi-extra-message', true );
1379 if ( ! empty( $kategorie_extra_message_ulozeno ) ) {
1380 $extra_message_array = ceske_sluzby_ziskat_nastaveni_zbozi_extra_message();
1381 foreach ( $kategorie_extra_message_ulozeno as $key => $value ) {
1382 if ( ! empty( $extra_message_aktivace ) && in_array( $key, $extra_message_aktivace ) ) {
1383 $kategorie_extra_message[] = $extra_message_array[ $key ];
1384 }
1385 }
1386 if ( ! empty( $kategorie_extra_message ) ) {
1387 $kategorie_extra_message_text = implode( ', ', $kategorie_extra_message );
1388 if ( $zbozi_nazev ) {
1389 $columns .= ' <a href="#" title="' . $kategorie_extra_message_text . '">EM</a>';
1390 } else {
1391 $columns .= 'Zboží: <a href="#" title="' . $kategorie_extra_message_text . '">EM</a>';
1392 }
1393 }
1394 }
1395 if ( $glami_kategorie ) {
1396 if ( ! empty( $columns ) ) {
1397 $columns .= '<br />';
1398 }
1399 $columns .= 'Glami: <a href="#" title="' . $glami_kategorie . '">KA</a>';
1400 }
1401 $kategorie_vynechano = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-vynechano', true );
1402 $kategorie_feed_vynechano = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-feed-vynechano', true );
1403 if ( $kategorie_vynechano ) {
1404 $columns .= '<span style="margin-left: 10px; color: red; font-weight: bold;">X</span>';
1405 } elseif ( $kategorie_feed_vynechano ) {
1406 $feeds = ceske_sluzby_prehled_xml_feedu();
1407 $title = ' title="';
1408 $i = 0;
1409 foreach ( $kategorie_feed_vynechano as $feed => $value ) {
1410 if ( $i == 0 ) {
1411 $title .= $feeds[$feed];
1412 } else {
1413 $title .= ', ' . $feeds[$feed];
1414 };
1415 $i = $i + 1;
1416 }
1417 $title .= '"';
1418 $columns .= '<span style="margin-left: 10px; color: red;"' . $title . '>x</span>';
1419 }
1420 $stav_produktu = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-stav-produktu', true );
1421 if ( ! empty( $stav_produktu ) ) {
1422 if ( $stav_produktu == 'used' ) {
1423 $stav_produktu_hodnota = 'Použité (bazar)';
1424 } else {
1425 $stav_produktu_hodnota = 'Repasované';
1426 }
1427 $columns .= '<br />' . $stav_produktu_hodnota;
1428 }
1429 $erotika = get_woocommerce_term_meta( $id, 'ceske-sluzby-xml-erotika', true );
1430 if ( $erotika ) {
1431 if ( $erotika == 'yes' ) {
1432 $erotika_hodnota = 'Erotický obsah';
1433 }
1434 $columns .= '<br />' . $erotika_hodnota;
1435 }
1436 }
1437 return $columns;
1438}
1439
1440function ceske_sluzby_zobrazit_dodaci_dobu_filtr( $availability, $product ) {
1441 if ( ! $product->is_in_stock() ) {
1442 $dostupnost = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 99 );
1443 if ( ! empty( $dostupnost ) ) {
1444 $availability['availability'] = $dostupnost['text'];
1445 }
1446 return $availability;
1447 }
1448 $dostupnost = ceske_sluzby_ziskat_predobjednavku( $product, false );
1449 if ( ! empty( $dostupnost ) ) {
1450 $availability['availability'] = $dostupnost;
1451 return $availability;
1452 }
1453 if ( $product->managing_stock() && (int)$product->get_stock_quantity() > 0 ) {
1454 $dostupnost = ceske_sluzby_ziskat_interval_pocet_skladem( $availability, (int)$product->get_stock_quantity() );
1455 if ( ! empty( $dostupnost ) ) {
1456 return $dostupnost;
1457 }
1458 }
1459 $dostupnost = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $product, false );
1460 if ( ! empty( $dostupnost ) ) {
1461 if ( ( ! $product->is_on_backorder( 1 ) && (string)$dostupnost['value'] == '0' ) || (string)$dostupnost['value'] != '0' ) {
1462 $availability['availability'] = $dostupnost['text'];
1463 return $availability;
1464 }
1465 }
1466 if ( $product->is_on_backorder( 1 ) ) {
1467 $dostupnost = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 98 );
1468 if ( ! empty( $dostupnost ) ) {
1469 $availability['availability'] = $dostupnost['text'];
1470 }
1471 return $availability;
1472 }
1473 return $availability;
1474}
1475
1476function ceske_sluzby_zobrazit_dodaci_dobu_akce() {
1477 global $product;
1478 $format = "";
1479 if ( $product->is_type( 'variable' ) ) {
1480 return;
1481 }
1482 if ( ! $product->is_in_stock() ) {
1483 $dodaci_doba_text = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 99 );
1484 if ( ! empty( $dodaci_doba_text ) ) {
1485 $dostupnost['value'] = 99;
1486 $dostupnost['text'] = $dodaci_doba_text['text'];
1487 $format = ceske_sluzby_ziskat_format_dodaci_doby( $dostupnost );
1488 }
1489 echo $format;
1490 return;
1491 }
1492 $format = ceske_sluzby_ziskat_predobjednavku( $product, true );
1493 if ( ! empty( $format ) ) {
1494 echo $format;
1495 return;
1496 }
1497 $availability = $product->get_availability();
1498 if ( $product->managing_stock() && (int)$product->get_stock_quantity() > 0 ) {
1499 $dostupnost = ceske_sluzby_ziskat_interval_pocet_skladem( $availability, (int)$product->get_stock_quantity() );
1500 echo '<p class="skladem-' . $dostupnost['class']. '">' . $dostupnost['availability'] . '</p>';
1501 return;
1502 }
1503 $dostupnost = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $product, false );
1504 if ( ! empty( $dostupnost ) ) {
1505 if ( ( ! $product->is_on_backorder( 1 ) && (string)$dostupnost['value'] == '0' ) || (string)$dostupnost['value'] != '0' ) {
1506 $format = ceske_sluzby_ziskat_format_dodaci_doby( $dostupnost );
1507 echo $format;
1508 }
1509 }
1510 if ( $product->is_on_backorder( 1 ) ) {
1511 $dodaci_doba_text = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 98 );
1512 if ( ! empty( $dodaci_doba_text ) ) {
1513 $dostupnost['value'] = 98;
1514 $dostupnost['text'] = $dodaci_doba_text['text'];
1515 $format = ceske_sluzby_ziskat_format_dodaci_doby( $dostupnost );
1516 }
1517 echo $format;
1518 }
1519}
1520
1521function ceske_sluzby_nahradit_zobrazeny_text_deprecated( $html, $availability, $product ) {
1522 ceske_sluzby_nahradit_zobrazeny_text( $html, $product );
1523}
1524
1525function ceske_sluzby_nahradit_zobrazeny_text( $html, $product ) {
1526 if ( get_class( $product ) == "WC_Product_Simple" ) {
1527 $html = "";
1528 }
1529 elseif ( get_class( $product ) == "WC_Product_Variation" ) {
1530 if ( ! $product->is_in_stock() ) {
1531 $dodaci_doba_text = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 99 );
1532 if ( ! empty( $dodaci_doba_text ) ) {
1533 $dostupnost['value'] = 99;
1534 $dostupnost['text'] = $dodaci_doba_text;
1535 $html = ceske_sluzby_ziskat_format_dodaci_doby( $dostupnost );
1536 }
1537 return $html;
1538 }
1539 $html = ceske_sluzby_ziskat_predobjednavku( $product, true );
1540 if ( ! empty( $html ) ) {
1541 return $html;
1542 }
1543 if ( $product->managing_stock() && (int)$product->get_stock_quantity() > 0 ) {
1544 $availability = $product->get_availability();
1545 $dostupnost = ceske_sluzby_ziskat_interval_pocet_skladem( $availability, (int)$product->get_stock_quantity() );
1546 $html = '<p class="skladem-' . $dostupnost['class']. '">' . $dostupnost['availability'] . '</p>';
1547 return $html;
1548 }
1549 $dostupnost = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $product, false );
1550 if ( ! empty( $dostupnost ) ) {
1551 $html = ceske_sluzby_ziskat_format_dodaci_doby( $dostupnost );
1552 }
1553 }
1554 return $html;
1555}
1556
1557function ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_filtr( $data, $variable_product_object, $variation ) {
1558 $dostupnost = ceske_sluzby_ziskat_predobjednavku( $variation, false );
1559 if ( ! empty( $dostupnost ) ) {
1560 return $data;
1561 }
1562 $dostupnost = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $variation, true );
1563 if ( $variation->managing_stock() && (int)$variation->get_stock_quantity() > 0 ) {
1564 $format = ceske_sluzby_ziskat_format_dodatecneho_poctu( $dostupnost, $variation );
1565 $data['availability_html'] .= $format;
1566 }
1567 return $data;
1568}
1569
1570function ceske_sluzby_zobrazit_dodatecnou_dodaci_dobu_akce() {
1571 global $product;
1572 if ( ! $product->is_type( 'simple' ) ) {
1573 return;
1574 }
1575 $format = ceske_sluzby_ziskat_predobjednavku( $product, true );
1576 if ( ! empty( $format ) ) {
1577 return;
1578 }
1579 $dostupnost = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $product, true );
1580 if ( $product->managing_stock() && (int)$product->get_stock_quantity() > 0 ) {
1581 $format = ceske_sluzby_ziskat_format_dodatecneho_poctu( $dostupnost, $product );
1582 echo $format;
1583 }
1584}
1585
1586function ceske_sluzby_load_admin_scripts() {
1587 $screen = get_current_screen();
1588 $screen_id = $screen ? $screen->id : '';
1589 $predobjednavka = get_option( 'wc_ceske_sluzby_preorder-aktivace' );
1590 $aktivace_eet = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_eet-aktivace' );
1591 if ( ( in_array( $screen_id, array( 'product', 'edit-product' ) ) && $predobjednavka == "yes" ) || $screen_id == 'shop_order' ) {
1592 wp_register_script( 'wc-admin-ceske-sluzby', untrailingslashit( plugins_url( '/', __FILE__ ) ) . '/js/ceske-sluzby-admin.js', array( 'jquery-ui-datepicker' ), CS_VERSION );
1593 wp_enqueue_script( 'wc-admin-ceske-sluzby' );
1594 }
1595 if ( in_array( $screen_id, array( 'woocommerce_page_wc-settings' ) ) && $aktivace_eet == "yes" ) {
1596 if ( ! did_action( 'wp_enqueue_media' ) ) {
1597 wp_enqueue_media();
1598 }
1599 wp_register_script( 'wc-admin-ceske-sluzby-upload-button', untrailingslashit( plugins_url( '/', __FILE__ ) ) . '/js/ceske-sluzby-upload-button-admin.js', array( 'jquery' ), CS_VERSION );
1600 wp_enqueue_script( 'wc-admin-ceske-sluzby-upload-button' );
1601 }
1602}
1603
1604function ceske_sluzby_povolit_nahravani_certifikatu( $mime_types ) {
1605 $mime_types['p12'] = 'application/x-pkcs12';
1606 return $mime_types;
1607}
1608
1609function ceske_sluzby_zobrazit_eet_email( $order, $sent_to_admin, $plain_text, $email ) {
1610 if ( $email->id == 'customer_completed_order' || $email->id == 'customer_processing_order' || $email->id == 'customer_invoice' ) {
1611 $eet_format = zkontrolovat_nastavenou_hodnotu( $order, array( 'wc_ceske_sluzby_nastaveni_pokladna', 'wc_ceske_sluzby_nastaveni_pokladna_doprava' ), 'wc_ceske_sluzby_eet_format', 'eet_format', 'ceske_sluzby_eet_format' );
1612 if ( ! empty( $eet_format ) && ( $eet_format == 'email-completed' || $eet_format == 'email-processing' || $eet_format == 'email-faktura' ) ) {
1613 $eet = new Ceske_Sluzby_EET();
1614 $order_id = is_callable( array( $order, 'get_id' ) ) ? $order->get_id() : $order->id;
1615 if ( $plain_text ) {
1616 $eet->ceske_sluzby_zobrazit_eet_uctenku( $order_id, false, '', '', true );
1617 } else {
1618 $eet->ceske_sluzby_zobrazit_eet_uctenku( $order_id, false, '<br>' );
1619 }
1620 }
1621 }
1622}
1623
1624function ceske_sluzby_zobrazit_eet_faktura_externi( $template_type, $order ) {
1625 $eet_format = zkontrolovat_nastavenou_hodnotu( $order, array( 'wc_ceske_sluzby_nastaveni_pokladna', 'wc_ceske_sluzby_nastaveni_pokladna_doprava' ), 'wc_ceske_sluzby_eet_format', 'eet_format', 'ceske_sluzby_eet_format' );
1626 if ( ! empty( $eet_format ) && $eet_format == 'faktura-plugin' ) {
1627 $eet = new Ceske_Sluzby_EET();
1628 $order_id = is_callable( array( $order, 'get_id' ) ) ? $order->get_id() : $order->id;
1629 $eet->ceske_sluzby_zobrazit_eet_uctenku( $order_id, false );
1630 }
1631}
1632
1633function ceske_sluzby_automaticky_ziskat_uctenku( $order_id ) {
1634 $order = wc_get_order( $order_id );
1635 $eet_podminka = zkontrolovat_nastavenou_hodnotu( $order, array( 'wc_ceske_sluzby_nastaveni_pokladna', 'wc_ceske_sluzby_nastaveni_pokladna_doprava' ), 'wc_ceske_sluzby_eet_podminka', 'eet_podminka', 'ceske_sluzby_eet_podminka' );
1636 if ( ! empty( $eet_podminka ) && ( $eet_podminka == 'platba' || $eet_podminka == 'dokonceno' ) ) {
1637 $eet = new Ceske_Sluzby_EET();
1638 $odeslana_trzba = $eet->ziskat_odeslanou_trzbu( $order );
1639 if ( $odeslana_trzba > 0 ) {
1640 $eet->ceske_sluzby_ziskat_eet_uctenku( $order );
1641 }
1642 }
1643}
1644
1645function ceske_sluzby_spustit_zaokrouhlovani( $cart ) {
1646 $zaokrouhlovani = zkontrolovat_nastavenou_hodnotu( '', array( 'wc_ceske_sluzby_nastaveni_pokladna' ), 'wc_ceske_sluzby_dalsi_nastaveni_zaokrouhleni', 'zaokrouhlovani', 'ceske_sluzby_zaokrouhleni' );
1647 if ( $zaokrouhlovani == 'nahoru' ) {
1648 if ( version_compare( WC_VERSION, '3.2', '<' ) ) {
1649 $dalsi_poplatky = is_callable( array( $cart, 'get_fees' ) ) ? $cart->get_fees() : $cart->fees;
1650 $cart->calculate_fees();
1651 if ( ! empty( $dalsi_poplatky ) ) {
1652 foreach ( $dalsi_poplatky as $poplatek ) {
1653 if ( $poplatek->taxable ) {
1654 $id_sazby = key( $poplatek->tax_data );
1655 if ( array_key_exists( $id_sazby, $cart->taxes ) ) {
1656 $cart->taxes[$id_sazby] = $cart->taxes[$id_sazby] - $poplatek->tax;
1657 }
1658 }
1659 }
1660 }
1661 if ( $cart->round_at_subtotal && wc_tax_enabled() ) {
1662 $cart->tax_total = WC_Tax::get_tax_total( $cart->taxes );
1663 } else {
1664 $cart->tax_total = array_sum( $cart->taxes );
1665 }
1666 } else {
1667 new WC_Cart_Totals( $cart );
1668 }
1669 }
1670}
1671
1672function ceske_sluzby_zaokrouhlovani_poplatek_dane( $cart ) {
1673 $taxes['tax_class'] = '';
1674 $taxes['tax_rates'] = array();
1675 $shipping_tax_class = get_option( 'woocommerce_shipping_tax_class' );
1676 if ( ( version_compare( WC_VERSION, '3.0', '<' ) && $shipping_tax_class == '' ) || ( version_compare( WC_VERSION, '3.0', '=>' ) && $shipping_tax_class == 'inherit' ) ) {
1677 $cart_taxes = is_callable( array( $cart, 'get_cart_contents_taxes' ) ) ? $cart->get_cart_contents_taxes() : $cart->taxes;
1678 foreach ( $cart_taxes as $rate_id => $tax_rate ) {
1679 $shipping_taxes = is_callable( array( $cart, 'get_shipping_taxes' ) ) ? $cart->get_shipping_taxes() : $cart->shipping_taxes;
1680 if ( array_key_exists( $rate_id, $shipping_taxes ) ) {
1681 $tax_rate = $tax_rate + $shipping_taxes[$rate_id];
1682 }
1683 $kompletni_dane[$rate_id] = $tax_rate;
1684 }
1685 if ( ! empty( $kompletni_dane ) && is_array( $kompletni_dane ) ) {
1686 $max_dan = array_keys( $kompletni_dane, max( $kompletni_dane ) );
1687 if ( ! empty( $max_dan ) && is_array( $max_dan ) ) {
1688 foreach ( $max_dan as $rate_id ) {
1689 $tax_class_tmp = wc_get_tax_class_by_tax_id( $rate_id );
1690 $tax_rates_tmp = WC_Tax::get_rates( $tax_class_tmp );
1691 $sazba_tmp = $tax_rates_tmp[$rate_id]['rate'];
1692 if ( $sazba_tmp >= 0 ) {
1693 $taxes['tax_rates'] = $tax_rates_tmp;
1694 $taxes['tax_class'] = $tax_class_tmp;
1695 }
1696 }
1697 }
1698 }
1699 }
1700 else {
1701 $taxes['tax_rates'] = WC_Tax::get_rates( $shipping_tax_class );
1702 $taxes['tax_class'] = $shipping_tax_class;
1703 }
1704 return $taxes;
1705}
1706
1707function ceske_sluzby_zaokrouhlovani_poplatek( $cart ) {
1708 $dane = false;
1709 $tax_class = '';
1710 $decimals = get_option( 'woocommerce_price_num_decimals' );
1711 $poplatek = zkontrolovat_nastavenou_hodnotu( '', array( 'wc_ceske_sluzby_nastaveni_pokladna', 'wc_ceske_sluzby_nastaveni_pokladna_doprava' ), 'wc_ceske_sluzby_doprava_poplatek_platba', 'poplatek_platba', 'ceske_sluzby_poplatek_platba' );
1712 $poplatek = str_replace( ',', '.', $poplatek );
1713 $poplatek = floatval( $poplatek );
1714 if ( ! empty( $poplatek ) ) {
1715 $poplatek_celkem = $poplatek;
1716 $nazev_poplatku = get_option( 'wc_ceske_sluzby_doprava_poplatek_platba_nazev' );
1717 if ( empty( $nazev_poplatku ) ) {
1718 $nazev_poplatku = 'Poplatek za způsob platby';
1719 }
1720 if ( wc_tax_enabled() ) {
1721 $dane = true;
1722 $taxes = ceske_sluzby_zaokrouhlovani_poplatek_dane( $cart );
1723 $tax_class = $taxes['tax_class'];
1724 $cena_dan = get_option( 'woocommerce_prices_include_tax' );
1725 if ( $cena_dan == 'yes' ) {
1726 $dan_poplatek = WC_Tax::calc_tax( $poplatek, $taxes['tax_rates'], true );
1727 $poplatek_celkem = $poplatek - reset( $dan_poplatek );
1728 }
1729 }
1730 $cart->add_fee( $nazev_poplatku, $poplatek_celkem, $dane, $tax_class );
1731 }
1732 if ( $cart->total > 0 && $decimals > 0 ) {
1733 $zaokrouhlovani = zkontrolovat_nastavenou_hodnotu( '', array( 'wc_ceske_sluzby_nastaveni_pokladna' ), 'wc_ceske_sluzby_dalsi_nastaveni_zaokrouhleni', 'zaokrouhlovani', 'ceske_sluzby_zaokrouhleni' );
1734 if ( $zaokrouhlovani == 'nahoru' ) {
1735 $celkem = $cart->total;
1736 $zao_total = ceil( $cart->total ) - $celkem;
1737 $zao = $zao_total;
1738 if ( wc_tax_enabled() ) {
1739 $dane = true;
1740 $taxes = ceske_sluzby_zaokrouhlovani_poplatek_dane( $cart );
1741 $tax_class = $taxes['tax_class'];
1742 $zao_taxes = WC_Tax::calc_tax( $zao_total, $taxes['tax_rates'], true );
1743 $zao = $zao_total - reset( $zao_taxes );
1744 }
1745 if ( $zao > 0 ) {
1746 $cart->add_fee( 'Zaokrouhlení', $zao, $dane, $tax_class );
1747 $cart->total += $zao_total;
1748 }
1749 }
1750 }
1751}
1752
1753function ceske_sluzby_aktualizovat_checkout_javascript() {
1754 if ( is_checkout() ) {
1755 $nastaveni_pokladna = get_option( 'wc_ceske_sluzby_nastaveni_pokladna' );
1756 $nastaveni_pokladna_doprava = get_option( 'wc_ceske_sluzby_nastaveni_pokladna_doprava' );
1757 if ( ( is_array( $nastaveni_pokladna ) && ( in_array( 'zaokrouhlovani', $nastaveni_pokladna ) || in_array( 'poplatek_platba', $nastaveni_pokladna ) ) ) ||
1758 ( is_array( $nastaveni_pokladna_doprava ) && in_array( 'poplatek_platba', $nastaveni_pokladna_doprava ) ) ) { ?>
1759 <script type="text/javascript">
1760 jQuery(document).ready(function($){
1761 $(document.body).off().on('change', 'input[name="payment_method"]', function() {
1762 $('body').trigger('update_checkout');
1763 });
1764 });
1765 </script><?php
1766 }
1767 }
1768}
1769
1770function ceske_sluzby_compare_sazba( $a, $b ) {
1771 if ( $a->sazba == $b->sazba ) {
1772 return 0;
1773 }
1774 return ( $a->sazba > $b->sazba ) ? -1 : 1;
1775}
1776
1777function ceske_sluzby_doplnit_danovou_sazbu( $tax_totals ) {
1778 foreach ( $tax_totals as $code => $tax ) {
1779 $tax_class = wc_get_tax_class_by_tax_id( $tax->rate_id );
1780 $tax_rates = WC_Tax::get_rates( $tax_class );
1781 if ( array_key_exists( $tax->rate_id, $tax_rates ) && array_key_exists( 'rate', $tax_rates[$tax->rate_id] ) ) {
1782 $tax_totals[ $code ]->sazba = (float)$tax_rates[$tax->rate_id]['rate'];
1783 }
1784 }
1785 if ( ! empty( $tax_totals ) ) {
1786 usort( $tax_totals, 'ceske_sluzby_compare_sazba' );
1787 }
1788 return $tax_totals;
1789}
1790
1791function ceske_sluzby_dostupne_platebni_metody( $available_gateways ) {
1792 if ( ! is_admin() ) {
1793 $platebni_metody = zkontrolovat_nastavenou_hodnotu( '', array( 'wc_ceske_sluzby_nastaveni_doprava' ), '', 'platebni_metody', 'ceske_sluzby_platebni_metody' );
1794 if ( ! empty( $platebni_metody ) ) {
1795 foreach ( $platebni_metody as $platebni_metoda ) {
1796 if ( array_key_exists( $platebni_metoda, $available_gateways ) ) {
1797 unset( $available_gateways[$platebni_metoda] );
1798 }
1799 }
1800 }
1801 }
1802 return $available_gateways;
1803}
1804
1805function ceske_sluzby_zmena_zaokrouhlovani_dani( $in ) {
1806 return round( $in, wc_get_price_decimals() );
1807}
1808
1809function ceske_sluzby_zmena_kalkulace_dani( $taxes ) {
1810 $taxes = array_map( 'ceske_sluzby_rounding', $taxes );
1811 return $taxes;
1812};
1813
1814function ceske_sluzby_rounding( $in ) {
1815 return round( $in, wc_get_price_decimals() );
1816}
1817
1818function ceske_sluzby_zobrazeni_dodaci_doby_administrace( $stock_html, $produkt ) {
1819 $dodatek = "";
1820 if ( $produkt->is_type( 'simple' ) ) {
1821 $source = "";
1822 if ( ! $produkt->is_in_stock() ) {
1823 $dodaci_doba = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 99 );
1824 if ( ! empty( $dodaci_doba ) ) {
1825 $source = ' class="neni-skladem"';
1826 $stock_html .= '<br><span' . $source . '>' . $dodaci_doba['text'] . '</span>';
1827 }
1828 return $stock_html;
1829 }
1830 $dodaci_doba = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $produkt, false );
1831 if ( ! empty( $dodaci_doba ) ) {
1832 if ( ( ! $produkt->is_on_backorder( 1 ) && (string)$dodaci_doba['value'] == '0' ) || (string)$dodaci_doba['value'] != '0' ) {
1833 if ( isset( $dodaci_doba['source'] ) ) {
1834 $source = ' class="' . $dodaci_doba['source'] . '"';
1835 }
1836 $stock_html .= '<br><span' . $source . '>' . $dodaci_doba['text'] . '</span>';
1837 return $stock_html;
1838 }
1839 }
1840 if ( $produkt->is_on_backorder( 1 ) ) {
1841 $dodaci_doba = ceske_sluzby_ziskat_zadanou_dodaci_dobu( "", 98 );
1842 if ( ! empty( $dodaci_doba ) ) {
1843 $source = ' class="objednavka"';
1844 $stock_html .= '<br><span' . $source . '>' . $dodaci_doba['text'] . '</span>';
1845 }
1846 return $stock_html;
1847 }
1848 }
1849 if ( $produkt->is_type( 'variable' ) ) {
1850 $dostupne_varianty = $produkt->get_available_variations();
1851 if ( ! empty( $dostupne_varianty ) ) {
1852 foreach ( $dostupne_varianty as $variation ) {
1853 $varianta = wc_get_product( $variation['variation_id'] );
1854 $attributes_varianta = $varianta->get_variation_attributes();
1855 if ( ! empty( $attributes_varianta ) ) {
1856 $source = "";
1857 $dodaci_doba = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $varianta, false );
1858 $value_html = "";
1859 $i = 0;
1860 foreach ( $attributes_varianta as $key => $value ) {
1861 if ( $i == 0 ) {
1862 $value_html = $value;
1863 } else {
1864 $value_html .= ' & ' . $value;
1865 }
1866 $i = $i + 1;
1867 }
1868 if ( isset( $dodaci_doba['source'] ) ) {
1869 $source = ' class="' . $dodaci_doba['source'] .'"';
1870 if ( $dodaci_doba['source'] == "product" ) {
1871 $dodatek = ' title="Nastaveno na úrovni produktu"';
1872 }
1873 }
1874 if ( empty( $dodaci_doba ) ) {
1875 $availability = $varianta->get_availability();
1876 $dodaci_doba['text'] = $availability['availability'];
1877 }
1878 $stock_html .= '<br><span' . $source . $dodatek . '>' . $value_html . ': ' . $dodaci_doba['text'] . '</span>';
1879 }
1880 }
1881 }
1882 }
1883 return $stock_html;
1884}
1885
1886function ceske_sluzby_zobrazeni_dodaci_doby_administrace_css() {
1887 global $pagenow;
1888 if ( $pagenow == 'edit.php' || $pagenow == 'post.php' ) { ?>
1889 <style type="text/css">
1890 table.wp-list-table .manage-column.column-is_in_stock {
1891 width: 15%;
1892 }
1893 span.external {
1894 font-size: 11px;
1895 color: grey;
1896 }
1897 </style>
1898 <?php }
1899}
1900
1901function ceske_sluzby_zobrazeni_dodaci_doby_varianty( $variation ) {
1902 $source = "";
1903 $dodatek = "";
1904 $varianta = wc_get_product( $variation->ID );
1905 $dodaci_doba = ceske_sluzby_ziskat_nastavenou_dostupnost_produktu( $varianta, false );
1906 if ( $dodaci_doba ) {
1907 if ( isset( $dodaci_doba['source'] ) ) {
1908 $source = ' class="' . $dodaci_doba['source'] .'"';
1909 if ( $dodaci_doba['source'] == "product" ) {
1910 $dodatek = ' (nastaveno na úrovni produktu)';
1911 }
1912 }
1913 echo '<span' . $source . '>' . $dodaci_doba['text'] . $dodatek . '</span>';
1914 }
1915}
1916
1917// http://docs.packetery.com/01-pickup-point-selection/01-widget.html#toc-quick-start-examples
1918function ceske_sluzby_zasilkovna_scripts_checkout() {
1919 if ( is_checkout() ) {
1920 $zasilkovna_settings = get_option( 'woocommerce_ceske_sluzby_zasilkovna_settings' );
1921 if ( isset( $zasilkovna_settings['zasilkovna_api-klic'] ) && ! empty( $zasilkovna_settings['zasilkovna_api-klic'] ) ) {
1922 $api_klic = $zasilkovna_settings['zasilkovna_api-klic']; ?>
1923 <script src="https://widget.packeta.com/www/js/library.js"></script>
1924 <script type="text/javascript">
1925 var packetaApiKey = '<?php echo $api_klic; ?>';
1926 var $storage_support = true;
1927 try {
1928 $storage_support = ( 'sessionStorage' in window && window.sessionStorage !== null );
1929 window.localStorage.setItem( 'ceske_sluzby', 'test' );
1930 window.localStorage.removeItem( 'ceske_sluzby' );
1931 } catch( err ) {
1932 $storage_support = false;
1933 }
1934 if ( $storage_support ) {
1935 jQuery( document ).ready(function( $ ) {
1936 $( document.body ).on( 'updated_checkout', function() {
1937 var ceske_sluzby_zasilkovna = localStorage.getItem( 'ceske_sluzby_zasilkovna' );
1938 if ( document.getElementById( 'packeta-point-info' ) !== null ) {
1939 var paragraph = document.getElementById( 'packeta-point-info' ).firstChild;
1940 if ( ceske_sluzby_zasilkovna !== null ) {
1941 paragraph.nodeValue = ceske_sluzby_zasilkovna;
1942 document.getElementById( 'packeta-point-id' ).value = ceske_sluzby_zasilkovna;
1943 } else if ( paragraph !== "Zatím nevybráno" ) {
1944 paragraph.nodeValue = "Zatím nevybráno";
1945 }
1946 }
1947 })
1948 });
1949 }
1950 function showSelectedPickupPoint(point) {
1951 var spanElement = document.getElementById( 'packeta-point-info' );
1952 var idElement = document.getElementById( 'packeta-point-id' );
1953 if ( point ) {
1954 spanElement.innerText = point.name;
1955 idElement.value = point.name;
1956 if ( $storage_support ) {
1957 localStorage.setItem( 'ceske_sluzby_zasilkovna', point.name );
1958 }
1959 }
1960 else {
1961 if ( $storage_support ) {
1962 var ceske_sluzby_zasilkovna = localStorage.getItem( 'ceske_sluzby_zasilkovna' );
1963 } else {
1964 var ceske_sluzby_zasilkovna = null;
1965 }
1966 if ( ceske_sluzby_zasilkovna !== null ) {
1967 spanElement.innerText = ceske_sluzby_zasilkovna;
1968 idElement.value = ceske_sluzby_zasilkovna;
1969 } else {
1970 spanElement.innerText = "Zatím nevybráno";
1971 idElement.value = "";
1972 }
1973 }
1974 };
1975 </script>
1976 <?php }
1977 }
1978}
1979
1980add_filter( 'woocommerce_package_rates', 'ceske_sluzby_doprava_cenove_intervaly' );
1981function ceske_sluzby_doprava_cenove_intervaly( $rates ) {
1982 if ( ! is_admin() ) {
1983 $nastaveni_doprava = get_option( 'wc_ceske_sluzby_nastaveni_doprava' );
1984 if ( is_array( $nastaveni_doprava ) && in_array( 'cena_dopravy', $nastaveni_doprava ) ) {
1985 $available_shipping = WC()->shipping->load_shipping_methods();
1986 $cena_kosik = WC()->cart->subtotal;
1987 $ceny_doprava = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_doprava-zpusob-dane' );
1988 foreach( $rates as $key => $rate ) {
1989 $cena_dopravy_array = array();
1990 if ( strpos( $key, ':' ) === false ) {
1991 if ( isset( $available_shipping[ $key ] ) ) {
1992 $shipping_method = $available_shipping[$key];
1993 $settings = $shipping_method->settings;
1994 }
1995 } else {
1996 $pieces = explode( ":", $key );
1997 if ( is_array( $pieces ) && ! empty( $pieces ) && count( $pieces ) == 2 ) {
1998 $order_method = $pieces[0];
1999 $order_instance = $pieces[1];
2000 if ( is_numeric( $order_instance ) ) {
2001 $shipping_method = WC_Shipping_Zones::get_shipping_method( $order_instance );
2002 $settings = $shipping_method->instance_settings;
2003 }
2004 }
2005 }
2006 if ( isset( $settings['ceske_sluzby_cena_dopravy'] ) && ! empty( $settings['ceske_sluzby_cena_dopravy'] ) ) {
2007 $cena_dopravy_array = ceske_sluzby_zpracovat_ceny_dopravy( $settings['ceske_sluzby_cena_dopravy'], $cena_kosik );
2008 }
2009 if ( empty( $cena_dopravy_array ) && wc_prices_include_tax() && $ceny_doprava == 'yes' ) {
2010 $cena_dopravy_array['cena'] = $rates[$key]->cost;
2011 }
2012 if ( ! empty( $cena_dopravy_array ) ) {
2013 if ( $cena_dopravy_array['cena'] == 0 ) {
2014 $rates[$key]->taxes = 0;
2015 }
2016 $new_cost = wc_format_decimal( $cena_dopravy_array['cena'], wc_get_price_decimals() );
2017 $rates[$key]->cost = $new_cost;
2018 if ( wc_tax_enabled() && false !== $rates[$key]->taxes && $rates[$key]->cost > 0 && $shipping_method->is_taxable()) {
2019 if ( wc_prices_include_tax() ) {
2020 $taxes = WC_Tax::calc_inclusive_tax( $new_cost, WC_Tax::get_shipping_tax_rates() );
2021 } else {
2022 $taxes = WC_Tax::calc_exclusive_tax( $new_cost, WC_Tax::get_shipping_tax_rates() );
2023 }
2024 $rates[$key]->taxes = $taxes;
2025 }
2026 if ( wc_prices_include_tax() && $rates[$key]->cost > 0 ) {
2027 $rates[$key]->cost = $new_cost - current( $taxes );
2028 }
2029 }
2030 }
2031 }
2032 }
2033 return $rates;
2034}
2035
2036add_filter( 'woocommerce_cart_shipping_method_full_label', 'ceske_sluzby_doprava_text_pro_dopravu_zdarma', 10, 2 );
2037function ceske_sluzby_doprava_text_pro_dopravu_zdarma( $label, $method ) {
2038 if ( $method->cost == 0 ) {
2039 $text_doprava_zdarma = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_doprava-text-dopravy-zdarma' );
2040 if ( ! empty( $text_doprava_zdarma ) ) {
2041 if ( $text_doprava_zdarma == '{VALUE}' ) {
2042 $label .= ': ' . wc_price( $method->cost );
2043 } else {
2044 $label .= ': <span class="woocommerce-Price-amount amount">' . $text_doprava_zdarma . '</span>';
2045 }
2046 }
2047 }
2048 return $label;
2049}
2050
2051function ceske_sluzby_zmena_stavu_objednavky_platba_predem( $status, $order ) {
2052 return 'processing';
2053}
2054
2055function ceske_sluzby_moznost_odesilat_emaily_zmena_stavu_platba_predem( $email_actions ) {
2056 $email_actions[] = 'woocommerce_order_status_processing_to_on-hold';
2057 return $email_actions;
2058}
2059
2060function ceske_sluzby_zmena_emailovych_notifikaci_platba_predem( $email_class ) {
2061 remove_action( 'woocommerce_order_status_on-hold_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
2062 add_action( 'woocommerce_order_status_processing_to_on-hold_notification', array( $email_class->emails['WC_Email_Customer_On_Hold_Order'], 'trigger' ) );
2063}
2064
2065function ceske_sluzby_odebrat_bankovni_ucet_po_dokonceni_objednavky() {
2066 if ( ! function_exists( 'WC' ) ) {
2067 return;
2068 }
2069 $available_gateways = WC()->payment_gateways()->get_available_payment_gateways();
2070 $gateway = isset( $available_gateways['bacs'] ) ? $available_gateways['bacs'] : false;
2071 if ( false == $gateway ) {
2072 return;
2073 }
2074 remove_action( 'woocommerce_thankyou_bacs', array( $gateway, 'thankyou_page' ) );
2075}
2076
2077add_filter( 'woocommerce_admin_order_actions', 'ceske_sluzby_zmena_stavu_platba_predem_administrace_ikony', 100, 2 );
2078function ceske_sluzby_zmena_stavu_platba_predem_administrace_ikony( $actions, $order ) {
2079 $zmena_platby_predem = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_zmena-platby-predem' );
2080 $aktivace_odeslano = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_status-odeslano' );
2081 if ( $zmena_platby_predem == "yes" ) {
2082 if ( $order->has_status( 'processing' ) ) {
2083 $on_hold = array( 'on-hold' => array(
2084 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=on-hold&order_id=' . $order->get_id() ), 'woocommerce-mark-order-status' ),
2085 'name' => __( 'On-hold', 'woocommerce' ),
2086 'action' => 'on-hold',
2087 ) );
2088 $actions = array_merge( $on_hold, $actions );
2089 unset( $actions['complete'] );
2090 }
2091 if ( $order->has_status( 'odeslano' ) ) {
2092 $actions['complete'] = array(
2093 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=completed&order_id=' . $order->get_id() ), 'woocommerce-mark-order-status' ),
2094 'name' => __( 'Complete', 'woocommerce' ),
2095 'action' => 'complete',
2096 );
2097 }
2098 unset( $actions['processing'] );
2099 }
2100 elseif ( $aktivace_odeslano == "yes" ) {
2101 if ( $order->has_status( 'odeslano' ) ) {
2102 $actions['complete'] = array(
2103 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=woocommerce_mark_order_status&status=completed&order_id=' . $order->get_id() ), 'woocommerce-mark-order-status' ),
2104 'name' => __( 'Complete', 'woocommerce' ),
2105 'action' => 'complete',
2106 );
2107 }
2108 }
2109 return $actions;
2110}
2111
2112function ceske_sluzby_stylovani_tlacitek_objednavky_administrace_css() {
2113 global $pagenow;
2114 if ( $pagenow == 'edit.php' || $pagenow == 'post.php' ) { ?>
2115 <style type="text/css">
2116 .widefat .column-wc_actions a.on-hold::after {
2117 font-family: "WooCommerce";
2118 content: "\e00f";
2119 }
2120 </style>
2121 <?php }
2122}
2123
2124add_action( 'init', 'ceske_sluzby_registrace_stavu_objednavky_odeslano' );
2125function ceske_sluzby_registrace_stavu_objednavky_odeslano() {
2126 $aktivace_odeslano = get_option( 'wc_ceske_sluzby_dalsi_nastaveni_status-odeslano' );
2127 if ( $aktivace_odeslano == "yes" ) {
2128 register_post_status( 'wc-odeslano', array(
2129 'label' => 'Odesláno',
2130 'public' => true,
2131 'show_in_admin_status_list' => true,
2132 'show_in_admin_all_list' => true,
2133 'exclude_from_search' => false,
2134 'label_count' => _n_noop( 'Odesláno <span class="count">(%s)</span>', 'Odesláno <span class="count">(%s)</span>' )
2135 ) );
2136 add_filter( 'wc_order_statuses', 'ceske_sluzby_zobrazovat_status_objednano' );
2137 }
2138}
2139
2140function ceske_sluzby_zobrazovat_status_objednano( $order_statuses ) {
2141 $new_order_statuses = array();
2142 foreach ( $order_statuses as $key => $status ) {
2143 $new_order_statuses[ $key ] = $status;
2144 if ( 'wc-processing' === $key || 'wc-on-hold' === $key ) {
2145 $new_order_statuses['wc-odeslano'] = 'Odesláno';
2146 }
2147 }
2148 return $new_order_statuses;
2149}
2150
2151add_filter( 'woocommerce_order_number', 'ceske_sluzby_zmenit_cislo_objednavky', 10, 2 );
2152function ceske_sluzby_zmenit_cislo_objednavky( $order_id, $order ) {
2153 $format_cisla = get_option( 'wc_ceske_sluzby_format_cisla_objednavky' );
2154 if ( ! empty( $format_cisla ) && $format_cisla == "{DATE:Ymd}{SEQUENCE:d|2}" ) {
2155 $cislo_objednavky = get_post_meta( $order_id, '_ceske_sluzby_cislo_objednavky', true );
2156 if ( ! empty( $cislo_objednavky ) ) {
2157 return $cislo_objednavky;
2158 }
2159 }
2160 return $order_id;
2161}
2162
2163// https://github.com/joydipnath/Custom-Order-Number-Woo
2164add_action( 'woocommerce_new_order', 'ceske_sluzby_ulozit_nastavene_cislo_objednavky' );
2165function ceske_sluzby_ulozit_nastavene_cislo_objednavky( $order_id ) {
2166 $format_cisla = get_option( 'wc_ceske_sluzby_format_cisla_objednavky' );
2167 if ( ! empty( $format_cisla ) && $format_cisla == "{DATE:Ymd}{SEQUENCE:d|2}" ) {
2168 $last_order = get_option( 'ceske_sluzby_cislo_objednavky' );
2169 $actual_date = current_time( 'Ymd' );
2170 if ( ! empty( $last_order ) ) {
2171 $last_order_date = substr( $last_order, 0, 8 );
2172 $last_sequence = substr( $last_order, 8, 2 );
2173 $last_sequence_number = ltrim( $last_sequence, "0" );
2174 if ( $actual_date == $last_order_date ) {
2175 $sequence = $last_sequence_number + 1;
2176 $sequence = sprintf( '%02d', $sequence );
2177 } else {
2178 $sequence = sprintf( '%02d', 1 );
2179 }
2180 } else {
2181 $sequence = sprintf( '%02d', 1 );
2182 }
2183 $order_number = $actual_date . $sequence;
2184 update_post_meta( $order_id, '_ceske_sluzby_cislo_objednavky', $order_number );
2185 update_option( 'ceske_sluzby_cislo_objednavky', $order_number );
2186 }
2187};
2188
2189add_filter( 'woocommerce_bacs_account_fields', 'ceske_sluzby_platba_predem_variabilni_symbol', 10, 2 );
2190function ceske_sluzby_platba_predem_variabilni_symbol( $account_fields, $order_id ) {
2191 $bacs_settings = get_option( 'woocommerce_bacs_settings' );
2192 if ( isset( $bacs_settings['ceske_sluzby_variabilni_symbol'] ) && $bacs_settings['ceske_sluzby_variabilni_symbol'] == "yes" ) {
2193 if ( isset( $account_fields['account_number']['value'] ) && ! empty( $account_fields['account_number']['value'] ) ) {
2194 $order = wc_get_order( $order_id );;
2195 $account_fields_new = array();
2196 foreach( $account_fields as $key => $value ) {
2197 $account_fields_new[$key] = $value;
2198 if ( $key === 'account_number' ) {
2199 $account_fields_new['variabilni-symbol'] = array(
2200 'label' => 'Variabilní symbol',
2201 'value' => $order->get_order_number()
2202 );
2203 }
2204 }
2205 return $account_fields_new;
2206 }
2207 }
2208 return $account_fields;
2209}
2210