Changeset 3435948
- Timestamp:
- 01/09/2026 01:46:37 PM (6 weeks ago)
- Location:
- logistra-woocommerce-integrasjon-fra-wildrobot-app
- Files:
-
- 4 added
- 4 deleted
- 6 edited
- 1 copied
-
tags/7.14.4 (copied) (copied from logistra-woocommerce-integrasjon-fra-wildrobot-app/trunk)
-
tags/7.14.4/README.txt (modified) (2 diffs)
-
tags/7.14.4/admin/partials/frontend/admin.2f0d92a8.js (added)
-
tags/7.14.4/admin/partials/frontend/admin.91639a41.js (deleted)
-
tags/7.14.4/logistra-robots.php (modified) (2 diffs)
-
tags/7.14.4/public/class-wildrobot-logistra-public.php (modified) (1 diff)
-
tags/7.14.4/public/partials/frontend/public.2f0d92a8.js (added)
-
tags/7.14.4/public/partials/frontend/public.91639a41.js (deleted)
-
trunk/README.txt (modified) (2 diffs)
-
trunk/admin/partials/frontend/admin.2f0d92a8.js (added)
-
trunk/admin/partials/frontend/admin.91639a41.js (deleted)
-
trunk/logistra-robots.php (modified) (2 diffs)
-
trunk/public/class-wildrobot-logistra-public.php (modified) (1 diff)
-
trunk/public/partials/frontend/public.2f0d92a8.js (added)
-
trunk/public/partials/frontend/public.91639a41.js (deleted)
Legend:
- Unmodified
- Added
- Removed
-
logistra-woocommerce-integrasjon-fra-wildrobot-app/tags/7.14.4/README.txt
r3435235 r3435948 5 5 Requires at least: 5.1 6 6 Tested up to: 6.7.2 7 Stable tag: 7.14. 37 Stable tag: 7.14.4 8 8 WC requires at least: 3.0.0 9 9 WC tested up to: 9.8.1 … … 49 49 == Changelog == 50 50 51 == 7.14.2- 3==51 == 7.14.2-4 == 52 52 * FIX Bust cache for Fallback delivery point. 53 53 -
logistra-woocommerce-integrasjon-fra-wildrobot-app/tags/7.14.4/logistra-robots.php
r3435235 r3435948 17 17 * Plugin URI: https://wildrobot.app/wildrobot-logistra-cargonizer-woocommerce-integrasjon/ 18 18 * Description: Integrate WooCommerce with Profrakt or Logistra - Freight administration made easy by Wildrobot! 19 * Version: 7.14. 319 * Version: 7.14.4 20 20 * Author: Robertosnap 21 21 * Author URI: https://wildrobot.app/wildrobot-logistra-cargonizer-woocommerce-integrasjon/ … … 39 39 * Rename this for your plugin and update it as you release new versions. 40 40 */ 41 define('WILDROBOT_LOGISTRA_VERSION', '7.14. 3');41 define('WILDROBOT_LOGISTRA_VERSION', '7.14.4'); 42 42 43 43 /** -
logistra-woocommerce-integrasjon-fra-wildrobot-app/tags/7.14.4/public/class-wildrobot-logistra-public.php
r3321591 r3435948 23 23 class Wildrobot_Logistra_Public 24 24 { 25 26 private $plugin_name; 27 28 /** 29 * The version of this plugin. 30 * 31 * @since 1.0.0 32 * @access private 33 * @var string $version The current version of this plugin. 34 */ 35 private $version; 36 37 /** 38 * Initialize the class and set its properties. 39 * 40 * @since 1.0.0 41 * @param string $plugin_name The name of the plugin. 42 * @param string $version The version of this plugin. 43 */ 44 public function __construct($plugin_name, $version) 45 { 46 47 $this->plugin_name = $plugin_name; 48 $this->version = $version; 49 50 add_action('wp_ajax_logistra_save_service_partner', array($this, 'save_service_partner_to_session')); 51 add_action('wp_ajax_nopriv_logistra_save_service_partner', array($this, 'save_service_partner_to_session')); 52 add_filter('logistra_robots_service_partner_select', array($this, "logistra_robots_cart_shipping_template_args"), 1, 2); 53 // Cart 54 add_action("woocommerce_cart_totals_after_shipping", array($this, "add_pickup_point_to_cart")); 55 // Checkout 56 add_action("woocommerce_review_order_after_shipping", array($this, "add_pickup_point_to_cart"), 1); 57 } 58 59 function wildrobot_logistra_locate_template($template, $template_name, $template_path) 60 { 61 global $woocommerce; 62 $_template = $template; 63 if (!$template_path) 64 $template_path = $woocommerce->template_url; 65 66 // $plugin_path = untrailingslashit(plugin_dir_path(__FILE__)) . '/template/woocommerce/'; 67 $plugin_path = plugin_dir_path(dirname(__FILE__)) . 'templates/woocommerce/'; 68 // $plugin_path = plugin_dir_path(dirname(__FILE__) . '/template/woocommerce/'); 69 70 // Look within passed path within the theme - this is priority 71 $template = locate_template( 72 array( 73 $template_path . $template_name, 74 $template_name 75 ) 76 ); 77 78 if (!$template && file_exists($plugin_path . $template_name)) 79 $template = $plugin_path . $template_name; 80 81 if (!$template) 82 $template = $_template; 83 84 return $template; 85 } 86 87 public function add_picklist_to_page($content = null) 88 { 89 $page_id = get_the_ID(); 90 if (is_page() && (get_option("wildrobot_logistra_picklist_active") === "yes") && !empty($page_id)) { 91 if ($page_id == get_option('wildrobot_logistra_picklist_page', null)) { 92 $content = '<div id="wildrobot-complete-picklist-order">Laster plukkliste fullføring...</div>'; 93 } 94 } 95 return $content; 96 } 97 98 public function add_service_partner_picker_field($fields) 99 { 100 $fields['billing']['shipping_service_partner'] = array( 101 'label' => __('Utleveringssted', 'logistra-robots'), 102 'placeholder' => _x('Velg utleveringssted', 'placeholder', 'logistra-robots'), 103 'required' => false, 104 'class' => array('form-row-wide hidden'), 105 'clear' => true, 106 'type' => 'text', 107 ); 108 109 return $fields; 110 } 111 112 public function save_service_partner_to_session() 113 { 114 check_ajax_referer('wildrobot_logistra_select_servicepartner', 'nonce'); 115 116 $service_partner_number = sanitize_text_field($_POST['service_partner_number']); 117 $service_partner_customer_number = sanitize_text_field($_POST['service_partner_customer_number']); 118 $service_partner_name = sanitize_text_field($_POST['service_partner_name']); 119 $service_partner_postcode = sanitize_text_field($_POST['service_partner_postcode']); 120 $service_partner_city = sanitize_text_field($_POST['service_partner_city']); 121 $service_partner_country = sanitize_text_field($_POST['service_partner_country']); 122 $chosen_shipping_methods = maybe_serialize(WC()->session->get('chosen_shipping_methods')); 123 124 WC()->session->set('wildrobot_logistra_service_partner_number', $service_partner_number); 125 WC()->session->set('wildrobot_logistra_service_partner_customer_number', $service_partner_customer_number); 126 WC()->session->set('wildrobot_logistra_service_partner_name', $service_partner_name); 127 WC()->session->set('wildrobot_logistra_service_partner_postcode', $service_partner_postcode); 128 WC()->session->set('wildrobot_logistra_service_partner_city', $service_partner_city); 129 WC()->session->set('wildrobot_logistra_service_partner_country', $service_partner_country); 130 WC()->session->set('wildrobot_logistra_service_partner_for_chosen_shipping_methods', $chosen_shipping_methods); 131 wp_send_json_success(); 132 } 133 134 function wildrobot_logistra_woocommerce_checkout_process($order_id, $posted_data, $order) 135 { 136 137 $service_partner_number = WC()->session->get('wildrobot_logistra_service_partner_number'); 138 $service_partner_customer_number = WC()->session->get('wildrobot_logistra_service_partner_customer_number'); 139 $service_partner_name = WC()->session->get('wildrobot_logistra_service_partner_name'); 140 $service_partner_postcode = WC()->session->get('wildrobot_logistra_service_partner_postcode'); 141 $service_partner_city = WC()->session->get('wildrobot_logistra_service_partner_city'); 142 $service_partner_country = WC()->session->get('wildrobot_logistra_service_partner_country'); 143 144 if (!empty($service_partner_number)) { 145 $order->update_meta_data("_wildrobot_logistra_service_partner_number", $service_partner_number); 146 $order->update_meta_data("_wildrobot_logistra_service_partner_customer_number", $service_partner_customer_number); 147 $order->update_meta_data("_wildrobot_logistra_service_partner_name", $service_partner_name); 148 $order->update_meta_data("_wildrobot_logistra_service_partner_postcode", $service_partner_postcode); 149 $order->update_meta_data("_wildrobot_logistra_service_partner_city", $service_partner_city); 150 $order->update_meta_data("_wildrobot_logistra_service_partner_country", $service_partner_country); 151 $order->save(); 152 WC()->session->__unset('wildrobot_logistra_service_partner_number'); 153 WC()->session->__unset('wildrobot_logistra_service_partner_customer_number'); 154 WC()->session->__unset('wildrobot_logistra_service_partner_name'); 155 WC()->session->__unset('wildrobot_logistra_service_partner_postcode'); 156 WC()->session->__unset('wildrobot_logistra_service_partner_city'); 157 WC()->session->__unset('wildrobot_logistra_service_partner_country'); 158 WC()->session->__unset('wildrobot_logistra_service_partner_for_chosen_shipping_methods'); 159 return; 160 } 161 162 // TO BE DEPRECATED 163 if (isset($_POST["logistra_robots_select_servicepartner"]) && !empty($_POST["logistra_robots_select_servicepartner"])) { 164 $service_partner_number = $_POST["logistra_robots_select_servicepartner"]; 165 } else if (isset($_POST["shipping_service_partner"]) && !empty($_POST["shipping_service_partner"])) { 166 $service_partner_number = $_POST["shipping_service_partner"]; 167 } 168 if (!empty($service_partner_number)) { 169 $order->update_meta_data("_shipping_service_partner", $service_partner_number); 170 $order->save(); 171 } 172 } 173 174 public function stop_checkout_if_service_partner_not_set($order_id) 175 { 176 $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods'); 177 $shipping_methods = WC()->shipping()->get_shipping_methods(); 178 179 foreach ($chosen_shipping_methods as $chosen_method) { 180 if (strpos($chosen_method, 'logistra_robots_shipping_method') !== false) { 181 list($method_id, $instance_id) = explode(':', $chosen_method); 182 if (isset($shipping_methods[$method_id])) { 183 $shipping_method = new $shipping_methods[$method_id]($instance_id); 184 if (method_exists($shipping_method, 'get_option')) { 185 $require_service_partner = $shipping_method->get_option('require_service_partner'); 186 if ($require_service_partner === 'yes') { 187 $service_partner_number = WC()->session->get('wildrobot_logistra_service_partner_number'); 188 $service_partner_for_chosen_shipping_methods = maybe_unserialize(WC()->session->get('wildrobot_logistra_service_partner_for_chosen_shipping_methods')); 189 if (empty($service_partner_number) || !in_array($chosen_method, $service_partner_for_chosen_shipping_methods)) { 190 wc_add_notice(__('Må velge utleveringssted på denne fraktmetoden.', 'logistra-robots'), 'error'); 191 return; 192 } 193 } 194 } 195 } 196 } 197 } 198 } 199 200 201 /** 202 * Generates the service partner object for the cart shipping template based on the selected shipping method. 203 * 204 * This function retrieves the delivery relation and transport agreement based on the chosen shipping method. 205 * It checks if service partners are possible and filters out certain carriers. It then fetches service partners 206 * based on the destination postcode and country. The function returns a service partner object which includes 207 * details like carrier name, identifier, and available service partners. 208 * 209 * @param object $service_partner_object An object to be populated with service partner details. 210 * @param array $args An array containing shipping method and destination details. Minimum values required are "chosen_method" and "package" with "destination" containing "postcode" and "country". 211 * [ 212 * "chosen_method": string, 213 * "package": [ 214 * "destination": [ 215 * "postcode": string, 216 * "country": string 217 * ] 218 * ] 219 * ] 220 * @return object|bool Returns the service partner object with populated details or false on failure. 221 * { 222 * "carrier_name": string, 223 * "carrier_identifier": string, 224 * "service_partner_possible": bool, 225 * "requires_service_partner": bool, 226 * "service_partners": array, 227 * "service_partner_select_values": array 228 * } 229 */ 230 function logistra_robots_cart_shipping_template_args($service_partner_object, $args = []) 231 { 232 try { 233 $packages = WC()->shipping()->get_packages(); 234 // START Maybe its a subscription 235 if (empty($packages)) { 236 // Check if WooCommerce Subscriptions is active and the class/method exists 237 if (class_exists('WC_Subscriptions_Cart') && method_exists('WC_Subscriptions_Cart', 'get_recurring_shipping_packages')) { 238 foreach (WC_Subscriptions_Cart::get_recurring_shipping_packages() as $shipping_package_key => $shipping_package) { 239 foreach ($shipping_package as $i => $package) { 240 $packages[$i] = $package; 241 } 242 } 243 } 244 } 245 // END Maybe its a subscription 246 foreach ($packages as $i => $package) { 247 $chosen_method = isset(WC()->session->chosen_shipping_methods[$i]) ? WC()->session->chosen_shipping_methods[$i] : ''; 248 $package = $packages[$i]; 249 if (!empty($chosen_method)) { 250 break; 251 } 252 } 253 if (empty($chosen_method) || empty($package)) { 254 return false; 255 } 256 257 $delivery_realtion = Wildrobot_Logistra_DB::get_delivery_relation_with_transport_agreement($chosen_method); 258 if (empty($delivery_realtion)) { 259 return false; 260 } 261 $transportAgreement = $delivery_realtion["transport_agreement"]; 262 $service_partner_possible = false; 263 if ($transportAgreement["service_partner_possible"]) { 264 $service_partner_possible = true; 265 } 266 if (in_array($transportAgreement["identifier"], ["bring_small_parcel_a_no_rfid", "bring_small_parcel_a", "bring2_small_parcel_a_no_rfid", "bring2_small_parcel_a", "postnord_mypack_home_small"])) { 267 $service_partner_possible = false; 268 } 269 $carrier_identifier = $transportAgreement["ta_carrier"]["identifier"]; 270 $carrier_name = $transportAgreement["ta_carrier"]["name"]; 271 272 $postcode = $package["destination"]["postcode"]; 273 $country = $package["destination"]["country"]; 274 $address_1 = $package["destination"]["address"]; 275 $city = $package["destination"]["city"]; 276 if (empty($postcode)) { 277 return false; 278 } 279 $service_partner_type = null; 280 foreach ($delivery_realtion["services"] as $service) { 281 if ($service === "wildrobot_only_manned_service_partner") { 282 $service_partner_type = "manned"; 283 } 284 if ($service === "wildrobot_only_unmanned_service_partner") { 285 $service_partner_type = "locker"; 286 } 287 } 288 $res = Wildrobot_Logistra_Cargonizer::get_service_partners( 289 $country, 290 $postcode, 291 $carrier_identifier, 292 $delivery_realtion["wr_id"], 293 empty($address_1) ? null : $address_1, 294 empty($city) ? null : $city, 295 $service_partner_type 296 ); 297 if (empty($res["service_partners"])) { 298 $service_partner_possible = false; 299 } 300 // Velg dag og tid for utlevering 301 302 $service_partner_key_label = [ 303 "" => apply_filters("wildrobot_logistra_service_partner_select_label", get_option("wildrobot_logistra_service_partner_select_default_value", "Velg nærmeste for meg"), $chosen_method, $transportAgreement["ta_carrier"]["identifier"]), 304 ]; 305 foreach ($res["service_partners"] as $service_partner) { 306 $key = $service_partner["number"] . "@@@" . 307 (is_string($service_partner["customer-number"]) ? $service_partner["customer-number"] : ""); 308 $service_partner_key_label[$key] = $service_partner["name"] . ", " . $service_partner["postcode"] . ($service_partner["city"] === "Unknown" ? "" : " " . $service_partner["city"]); 309 } 310 311 $service_partner_object = (object) [ 312 "carrier_name" => $carrier_name, 313 "carrier_identifier" => $carrier_identifier, 314 "service_partner_possible" => $service_partner_possible, 315 "requires_service_partner" => $transportAgreement["requires_service_partner"], 316 "service_partners" => $res["service_partners"], 317 "service_partner_select_values" => $service_partner_key_label, 318 // "service_partner_select_objects" => $service_partner_select_objects, 319 ]; 320 321 return apply_filters("logistra_robots_cart_shipping_service_partner_object", $service_partner_object); 322 } catch (\Throwable $error) { 323 return false; 324 } 325 } 326 /** 327 * Adds pickup point selection to cart totals if enabled 328 * Hooked to: woocommerce_cart_totals_after_shipping 329 */ 330 public function add_pickup_point_to_cart() 331 { 332 // Early return if pickup point is not enabled 333 if (get_option("wildrobot_logistra_pickuppoint_checkout_inline_hook") !== "yes") { 334 return; 335 } 336 337 $service_partner_object = self::logistra_robots_cart_shipping_template_args(null); 338 339 // Early return if service partner is not possible 340 if (!$service_partner_object || !$service_partner_object->service_partner_possible) { 341 return; 342 } 343 344 // Get current service partner value from session 345 $value = !empty(WC()->session->get('wildrobot_logistra_service_partner_number')) 346 ? WC()->session->get('wildrobot_logistra_service_partner_number') . "@@@" . 347 WC()->session->get('wildrobot_logistra_service_partner_customer_number') 348 : null; 349 350 // Add data attributes instead of wp_localize_script 351 $service_partner_data = array( 352 'servicePartners' => $service_partner_object->service_partners, 353 'ajaxUrl' => admin_url('admin-ajax.php'), 354 'nonce' => wp_create_nonce('wildrobot_logistra_select_servicepartner') 355 ); 356 ?> 25 private $plugin_name; 26 27 /** 28 * The version of this plugin. 29 * 30 * @since 1.0.0 31 * @access private 32 * @var string $version The current version of this plugin. 33 */ 34 private $version; 35 36 /** 37 * Initialize the class and set its properties. 38 * 39 * @since 1.0.0 40 * @param string $plugin_name The name of the plugin. 41 * @param string $version The version of this plugin. 42 */ 43 public function __construct($plugin_name, $version) 44 { 45 $this->plugin_name = $plugin_name; 46 $this->version = $version; 47 48 add_action("wp_ajax_logistra_save_service_partner", [ 49 $this, 50 "save_service_partner_to_session", 51 ]); 52 add_action("wp_ajax_nopriv_logistra_save_service_partner", [ 53 $this, 54 "save_service_partner_to_session", 55 ]); 56 add_filter( 57 "logistra_robots_service_partner_select", 58 [$this, "logistra_robots_cart_shipping_template_args"], 59 1, 60 2, 61 ); 62 // Cart 63 add_action("woocommerce_cart_totals_after_shipping", [ 64 $this, 65 "add_pickup_point_to_cart", 66 ]); 67 // Checkout 68 add_action( 69 "woocommerce_review_order_after_shipping", 70 [$this, "add_pickup_point_to_cart"], 71 1, 72 ); 73 } 74 75 function wildrobot_logistra_locate_template( 76 $template, 77 $template_name, 78 $template_path, 79 ) { 80 global $woocommerce; 81 $_template = $template; 82 if (!$template_path) { 83 $template_path = $woocommerce->template_url; 84 } 85 86 // $plugin_path = untrailingslashit(plugin_dir_path(__FILE__)) . '/template/woocommerce/'; 87 $plugin_path = 88 plugin_dir_path(dirname(__FILE__)) . "templates/woocommerce/"; 89 // $plugin_path = plugin_dir_path(dirname(__FILE__) . '/template/woocommerce/'); 90 91 // Look within passed path within the theme - this is priority 92 $template = locate_template([ 93 $template_path . $template_name, 94 $template_name, 95 ]); 96 97 if (!$template && file_exists($plugin_path . $template_name)) { 98 $template = $plugin_path . $template_name; 99 } 100 101 if (!$template) { 102 $template = $_template; 103 } 104 105 return $template; 106 } 107 108 public function add_picklist_to_page($content = null) 109 { 110 $page_id = get_the_ID(); 111 if ( 112 is_page() && 113 get_option("wildrobot_logistra_picklist_active") === "yes" && 114 !empty($page_id) 115 ) { 116 if ( 117 $page_id == get_option("wildrobot_logistra_picklist_page", null) 118 ) { 119 $content = 120 '<div id="wildrobot-complete-picklist-order">Laster plukkliste fullføring...</div>'; 121 } 122 } 123 return $content; 124 } 125 126 public function add_service_partner_picker_field($fields) 127 { 128 $fields["billing"]["shipping_service_partner"] = [ 129 "label" => __("Utleveringssted", "logistra-robots"), 130 "placeholder" => _x( 131 "Velg utleveringssted", 132 "placeholder", 133 "logistra-robots", 134 ), 135 "required" => false, 136 "class" => ["form-row-wide hidden"], 137 "clear" => true, 138 "type" => "text", 139 ]; 140 141 return $fields; 142 } 143 144 public function save_service_partner_to_session() 145 { 146 check_ajax_referer("wildrobot_logistra_select_servicepartner", "nonce"); 147 148 $service_partner_number = sanitize_text_field( 149 $_POST["service_partner_number"], 150 ); 151 $service_partner_customer_number = sanitize_text_field( 152 $_POST["service_partner_customer_number"], 153 ); 154 $service_partner_name = sanitize_text_field( 155 $_POST["service_partner_name"], 156 ); 157 $service_partner_postcode = sanitize_text_field( 158 $_POST["service_partner_postcode"], 159 ); 160 $service_partner_city = sanitize_text_field( 161 $_POST["service_partner_city"], 162 ); 163 $service_partner_country = sanitize_text_field( 164 $_POST["service_partner_country"], 165 ); 166 $chosen_shipping_methods = maybe_serialize( 167 WC()->session->get("chosen_shipping_methods"), 168 ); 169 170 WC()->session->set( 171 "wildrobot_logistra_service_partner_number", 172 $service_partner_number, 173 ); 174 WC()->session->set( 175 "wildrobot_logistra_service_partner_customer_number", 176 $service_partner_customer_number, 177 ); 178 WC()->session->set( 179 "wildrobot_logistra_service_partner_name", 180 $service_partner_name, 181 ); 182 WC()->session->set( 183 "wildrobot_logistra_service_partner_postcode", 184 $service_partner_postcode, 185 ); 186 WC()->session->set( 187 "wildrobot_logistra_service_partner_city", 188 $service_partner_city, 189 ); 190 WC()->session->set( 191 "wildrobot_logistra_service_partner_country", 192 $service_partner_country, 193 ); 194 WC()->session->set( 195 "wildrobot_logistra_service_partner_for_chosen_shipping_methods", 196 $chosen_shipping_methods, 197 ); 198 wp_send_json_success(); 199 } 200 201 function wildrobot_logistra_woocommerce_checkout_process( 202 $order_id, 203 $posted_data, 204 $order, 205 ) { 206 $service_partner_number = WC()->session->get( 207 "wildrobot_logistra_service_partner_number", 208 ); 209 $service_partner_customer_number = WC()->session->get( 210 "wildrobot_logistra_service_partner_customer_number", 211 ); 212 $service_partner_name = WC()->session->get( 213 "wildrobot_logistra_service_partner_name", 214 ); 215 $service_partner_postcode = WC()->session->get( 216 "wildrobot_logistra_service_partner_postcode", 217 ); 218 $service_partner_city = WC()->session->get( 219 "wildrobot_logistra_service_partner_city", 220 ); 221 $service_partner_country = WC()->session->get( 222 "wildrobot_logistra_service_partner_country", 223 ); 224 225 if (!empty($service_partner_number)) { 226 $order->update_meta_data( 227 "_wildrobot_logistra_service_partner_number", 228 $service_partner_number, 229 ); 230 $order->update_meta_data( 231 "_wildrobot_logistra_service_partner_customer_number", 232 $service_partner_customer_number, 233 ); 234 $order->update_meta_data( 235 "_wildrobot_logistra_service_partner_name", 236 $service_partner_name, 237 ); 238 $order->update_meta_data( 239 "_wildrobot_logistra_service_partner_postcode", 240 $service_partner_postcode, 241 ); 242 $order->update_meta_data( 243 "_wildrobot_logistra_service_partner_city", 244 $service_partner_city, 245 ); 246 $order->update_meta_data( 247 "_wildrobot_logistra_service_partner_country", 248 $service_partner_country, 249 ); 250 $order->save(); 251 WC()->session->__unset("wildrobot_logistra_service_partner_number"); 252 WC()->session->__unset( 253 "wildrobot_logistra_service_partner_customer_number", 254 ); 255 WC()->session->__unset("wildrobot_logistra_service_partner_name"); 256 WC()->session->__unset( 257 "wildrobot_logistra_service_partner_postcode", 258 ); 259 WC()->session->__unset("wildrobot_logistra_service_partner_city"); 260 WC()->session->__unset( 261 "wildrobot_logistra_service_partner_country", 262 ); 263 WC()->session->__unset( 264 "wildrobot_logistra_service_partner_for_chosen_shipping_methods", 265 ); 266 return; 267 } 268 269 // TO BE DEPRECATED 270 if ( 271 isset($_POST["logistra_robots_select_servicepartner"]) && 272 !empty($_POST["logistra_robots_select_servicepartner"]) 273 ) { 274 $service_partner_number = 275 $_POST["logistra_robots_select_servicepartner"]; 276 } elseif ( 277 isset($_POST["shipping_service_partner"]) && 278 !empty($_POST["shipping_service_partner"]) 279 ) { 280 $service_partner_number = $_POST["shipping_service_partner"]; 281 } 282 if (!empty($service_partner_number)) { 283 $order->update_meta_data( 284 "_shipping_service_partner", 285 $service_partner_number, 286 ); 287 $order->save(); 288 } 289 } 290 291 public function stop_checkout_if_service_partner_not_set($order_id) 292 { 293 $chosen_shipping_methods = WC()->session->get( 294 "chosen_shipping_methods", 295 ); 296 $shipping_methods = WC()->shipping()->get_shipping_methods(); 297 298 foreach ($chosen_shipping_methods as $chosen_method) { 299 if ( 300 strpos($chosen_method, "logistra_robots_shipping_method") !== 301 false 302 ) { 303 [$method_id, $instance_id] = explode(":", $chosen_method); 304 if (isset($shipping_methods[$method_id])) { 305 $shipping_method = new ($shipping_methods[$method_id])( 306 $instance_id, 307 ); 308 if (method_exists($shipping_method, "get_option")) { 309 $require_service_partner = $shipping_method->get_option( 310 "require_service_partner", 311 ); 312 if ($require_service_partner === "yes") { 313 $service_partner_number = WC()->session->get( 314 "wildrobot_logistra_service_partner_number", 315 ); 316 $service_partner_for_chosen_shipping_methods = maybe_unserialize( 317 WC()->session->get( 318 "wildrobot_logistra_service_partner_for_chosen_shipping_methods", 319 ), 320 ); 321 if ( 322 empty($service_partner_number) || 323 !in_array( 324 $chosen_method, 325 $service_partner_for_chosen_shipping_methods, 326 ) 327 ) { 328 wc_add_notice( 329 __( 330 "Må velge utleveringssted på denne fraktmetoden.", 331 "logistra-robots", 332 ), 333 "error", 334 ); 335 return; 336 } 337 } 338 } 339 } 340 } 341 } 342 } 343 344 /** 345 * Generates the service partner object for the cart shipping template based on the selected shipping method. 346 * 347 * This function retrieves the delivery relation and transport agreement based on the chosen shipping method. 348 * It checks if service partners are possible and filters out certain carriers. It then fetches service partners 349 * based on the destination postcode and country. The function returns a service partner object which includes 350 * details like carrier name, identifier, and available service partners. 351 * 352 * @param object $service_partner_object An object to be populated with service partner details. 353 * @param array $args An array containing shipping method and destination details. Minimum values required are "chosen_method" and "package" with "destination" containing "postcode" and "country". 354 * [ 355 * "chosen_method": string, 356 * "package": [ 357 * "destination": [ 358 * "postcode": string, 359 * "country": string 360 * ] 361 * ] 362 * ] 363 * @return object|bool Returns the service partner object with populated details or false on failure. 364 * { 365 * "carrier_name": string, 366 * "carrier_identifier": string, 367 * "service_partner_possible": bool, 368 * "requires_service_partner": bool, 369 * "service_partners": array, 370 * "service_partner_select_values": array 371 * } 372 */ 373 function logistra_robots_cart_shipping_template_args( 374 $service_partner_object, 375 $args = [], 376 ) { 377 try { 378 $packages = WC()->shipping()->get_packages(); 379 // START Maybe its a subscription 380 if (empty($packages)) { 381 // Check if WooCommerce Subscriptions is active and the class/method exists 382 if ( 383 class_exists("WC_Subscriptions_Cart") && 384 method_exists( 385 "WC_Subscriptions_Cart", 386 "get_recurring_shipping_packages", 387 ) 388 ) { 389 foreach ( 390 WC_Subscriptions_Cart::get_recurring_shipping_packages() 391 as $shipping_package_key => $shipping_package 392 ) { 393 foreach ($shipping_package as $i => $package) { 394 $packages[$i] = $package; 395 } 396 } 397 } 398 } 399 // END Maybe its a subscription 400 foreach ($packages as $i => $package) { 401 $chosen_method = isset( 402 WC()->session->chosen_shipping_methods[$i], 403 ) 404 ? WC()->session->chosen_shipping_methods[$i] 405 : ""; 406 $package = $packages[$i]; 407 if (!empty($chosen_method)) { 408 break; 409 } 410 } 411 if (empty($chosen_method) || empty($package)) { 412 return false; 413 } 414 415 $delivery_realtion = Wildrobot_Logistra_DB::get_delivery_relation_with_transport_agreement( 416 $chosen_method, 417 ); 418 if (empty($delivery_realtion)) { 419 return false; 420 } 421 $transportAgreement = $delivery_realtion["transport_agreement"]; 422 $service_partner_possible = false; 423 if ($transportAgreement["service_partner_possible"]) { 424 $service_partner_possible = true; 425 } 426 if ( 427 in_array($transportAgreement["identifier"], [ 428 "bring_small_parcel_a_no_rfid", 429 "bring_small_parcel_a", 430 "bring2_small_parcel_a_no_rfid", 431 "bring2_small_parcel_a", 432 "postnord_mypack_home_small", 433 ]) 434 ) { 435 $service_partner_possible = false; 436 } 437 $carrier_identifier = 438 $transportAgreement["ta_carrier"]["identifier"]; 439 $carrier_name = $transportAgreement["ta_carrier"]["name"]; 440 441 $postcode = $package["destination"]["postcode"]; 442 $country = $package["destination"]["country"]; 443 $address_1 = $package["destination"]["address"]; 444 $city = $package["destination"]["city"]; 445 if (empty($postcode)) { 446 return false; 447 } 448 $service_partner_type = null; 449 foreach ($delivery_realtion["services"] as $service) { 450 if ($service === "wildrobot_only_manned_service_partner") { 451 $service_partner_type = "manned"; 452 } 453 if ($service === "wildrobot_only_unmanned_service_partner") { 454 $service_partner_type = "locker"; 455 } 456 } 457 $res = Wildrobot_Logistra_Cargonizer::get_service_partners( 458 $country, 459 $postcode, 460 $carrier_identifier, 461 $delivery_realtion["wr_id"], 462 empty($address_1) ? null : $address_1, 463 empty($city) ? null : $city, 464 $service_partner_type, 465 ); 466 467 // Filter out fallback service partners (e.g., Postens Godssenter) 468 $real_service_partners = array_filter( 469 $res["service_partners"] ?? [], 470 function ($sp) { 471 return empty($sp["is_fallback"]); 472 }, 473 ); 474 475 // If only fallback partners exist, hide the dropdown entirely 476 if (empty($real_service_partners)) { 477 $service_partner_possible = false; 478 } 479 480 $service_partner_key_label = [ 481 "" => apply_filters( 482 "wildrobot_logistra_service_partner_select_label", 483 get_option( 484 "wildrobot_logistra_service_partner_select_default_value", 485 "Velg nærmeste for meg", 486 ), 487 $chosen_method, 488 $transportAgreement["ta_carrier"]["identifier"], 489 ), 490 ]; 491 foreach ($real_service_partners as $service_partner) { 492 $key = 493 $service_partner["number"] . 494 "@@@" . 495 (is_string($service_partner["customer-number"]) 496 ? $service_partner["customer-number"] 497 : ""); 498 $service_partner_key_label[$key] = 499 $service_partner["name"] . 500 ", " . 501 $service_partner["postcode"] . 502 ($service_partner["city"] === "Unknown" 503 ? "" 504 : " " . $service_partner["city"]); 505 } 506 507 $service_partner_object = (object) [ 508 "carrier_name" => $carrier_name, 509 "carrier_identifier" => $carrier_identifier, 510 "service_partner_possible" => $service_partner_possible, 511 "requires_service_partner" => 512 $transportAgreement["requires_service_partner"], 513 "service_partners" => array_values($real_service_partners), 514 "service_partner_select_values" => $service_partner_key_label, 515 // "service_partner_select_objects" => $service_partner_select_objects, 516 ]; 517 518 return apply_filters( 519 "logistra_robots_cart_shipping_service_partner_object", 520 $service_partner_object, 521 ); 522 } catch (\Throwable $error) { 523 return false; 524 } 525 } 526 /** 527 * Adds pickup point selection to cart totals if enabled 528 * Hooked to: woocommerce_cart_totals_after_shipping 529 */ 530 public function add_pickup_point_to_cart() 531 { 532 // Early return if pickup point is not enabled 533 if ( 534 get_option( 535 "wildrobot_logistra_pickuppoint_checkout_inline_hook", 536 ) !== "yes" 537 ) { 538 return; 539 } 540 541 $service_partner_object = self::logistra_robots_cart_shipping_template_args( 542 null, 543 ); 544 545 // Early return if service partner is not possible 546 if ( 547 !$service_partner_object || 548 !$service_partner_object->service_partner_possible 549 ) { 550 return; 551 } 552 553 // Get current service partner value from session 554 $value = !empty( 555 WC()->session->get("wildrobot_logistra_service_partner_number") 556 ) 557 ? WC()->session->get("wildrobot_logistra_service_partner_number") . 558 "@@@" . 559 WC()->session->get( 560 "wildrobot_logistra_service_partner_customer_number", 561 ) 562 : null; 563 564 // Add data attributes instead of wp_localize_script 565 $service_partner_data = [ 566 "servicePartners" => $service_partner_object->service_partners, 567 "ajaxUrl" => admin_url("admin-ajax.php"), 568 "nonce" => wp_create_nonce( 569 "wildrobot_logistra_select_servicepartner", 570 ), 571 ]; 572 ?> 357 573 <tr class="woocommerce-wildrobot-pickuppoint-checkout-inline" 358 data-logistra-service-partner='<?php echo esc_attr(json_encode($service_partner_data)); ?>'> 359 <th><?php echo esc_html__('Utleveringssted', 'logistra-robots'); ?></th> 574 data-logistra-service-partner='<?php echo esc_attr( 575 json_encode($service_partner_data), 576 ); ?>'> 577 <th><?php echo esc_html__("Utleveringssted", "logistra-robots"); ?></th> 360 578 <td> 361 <?php 362 woocommerce_form_field("logistra_robots_select_servicepartner", [ 363 'type' => 'select', 364 'class' => array('logistra_robots_select_servicepartner form-row-wide'), 365 'required' => false, 366 'options' => $service_partner_object->service_partner_select_values, 367 'default' => $value, 368 ]); 369 ?> 579 <?php woocommerce_form_field("logistra_robots_select_servicepartner", [ 580 "type" => "select", 581 "class" => ["logistra_robots_select_servicepartner form-row-wide"], 582 "required" => false, 583 "options" => $service_partner_object->service_partner_select_values, 584 "default" => $value, 585 ]); ?> 370 586 </td> 371 587 </tr> 372 588 <?php 373 } 374 375 public function enqueue_styles() 376 { 377 // wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/ReactToastify.css', array(), $this->version, 'all'); 378 } 379 380 public function enqueue_scripts() 381 { 382 383 $pickup_page_id = (int) get_option('wildrobot_logistra_picklist_page'); 384 $current_page_id = get_queried_object_id(); 385 $is_pickup_page = $current_page_id == $pickup_page_id; 386 387 // Get current page ID 388 // Only enqueue scripts on cart, checkout, or pickup page 389 if (!is_cart() && !is_checkout() && !$is_pickup_page) { 390 return; 391 } 392 $php_to_js_variables = array( 393 'version' => $this->version, 394 'wc_ajax_url' => WC()->ajax_url(), 395 'security' => wp_create_nonce("randomTextForLogistraIntegration"), 396 ); 397 398 $options = Wildrobot_Logistra_Options::get_public_options(); 399 400 $plugin_js = self::get_js_file_path('partials/frontend', 'public'); 401 wp_enqueue_script($this->plugin_name . "-public-js", $plugin_js, ['wp-element'], $this->version, true); 402 wp_localize_script($this->plugin_name . '-public-js', 'wildrobotLogistraPublic', array_merge($php_to_js_variables, $options)); 403 404 // Enqueue the service partner handler script 405 wp_enqueue_script( 406 $this->plugin_name . '-service-partner', 407 plugin_dir_url(__FILE__) . 'js/service-partner-handler.js', 408 array('jquery'), 409 $this->version, 410 true 411 ); 412 } 413 414 private static function get_js_file_path($folder, $file) 415 { 416 $files = glob(plugin_dir_path(__FILE__) . $folder . '/' . $file . '*.js'); 417 if (!empty($files)) { 418 $full_path = $files[0]; 419 $app_pos = strpos($full_path, $file . '.'); 420 $file_name = substr($full_path, $app_pos); 421 return plugin_dir_url(__FILE__) . $folder . '/' . $file_name; 422 } else { 423 return 'http://localhost:3000/static/js/client.js'; 424 } 425 } 589 } 590 591 public function enqueue_styles() 592 { 593 // wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/ReactToastify.css', array(), $this->version, 'all'); 594 } 595 596 public function enqueue_scripts() 597 { 598 $pickup_page_id = (int) get_option("wildrobot_logistra_picklist_page"); 599 $current_page_id = get_queried_object_id(); 600 $is_pickup_page = $current_page_id == $pickup_page_id; 601 602 // Get current page ID 603 // Only enqueue scripts on cart, checkout, or pickup page 604 if (!is_cart() && !is_checkout() && !$is_pickup_page) { 605 return; 606 } 607 $php_to_js_variables = [ 608 "version" => $this->version, 609 "wc_ajax_url" => WC()->ajax_url(), 610 "security" => wp_create_nonce("randomTextForLogistraIntegration"), 611 ]; 612 613 $options = Wildrobot_Logistra_Options::get_public_options(); 614 615 $plugin_js = self::get_js_file_path("partials/frontend", "public"); 616 wp_enqueue_script( 617 $this->plugin_name . "-public-js", 618 $plugin_js, 619 ["wp-element"], 620 $this->version, 621 true, 622 ); 623 wp_localize_script( 624 $this->plugin_name . "-public-js", 625 "wildrobotLogistraPublic", 626 array_merge($php_to_js_variables, $options), 627 ); 628 629 // Enqueue the service partner handler script 630 wp_enqueue_script( 631 $this->plugin_name . "-service-partner", 632 plugin_dir_url(__FILE__) . "js/service-partner-handler.js", 633 ["jquery"], 634 $this->version, 635 true, 636 ); 637 } 638 639 private static function get_js_file_path($folder, $file) 640 { 641 $files = glob( 642 plugin_dir_path(__FILE__) . $folder . "/" . $file . "*.js", 643 ); 644 if (!empty($files)) { 645 $full_path = $files[0]; 646 $app_pos = strpos($full_path, $file . "."); 647 $file_name = substr($full_path, $app_pos); 648 return plugin_dir_url(__FILE__) . $folder . "/" . $file_name; 649 } else { 650 return "http://localhost:3000/static/js/client.js"; 651 } 652 } 426 653 } -
logistra-woocommerce-integrasjon-fra-wildrobot-app/trunk/README.txt
r3435235 r3435948 5 5 Requires at least: 5.1 6 6 Tested up to: 6.7.2 7 Stable tag: 7.14. 37 Stable tag: 7.14.4 8 8 WC requires at least: 3.0.0 9 9 WC tested up to: 9.8.1 … … 49 49 == Changelog == 50 50 51 == 7.14.2- 3==51 == 7.14.2-4 == 52 52 * FIX Bust cache for Fallback delivery point. 53 53 -
logistra-woocommerce-integrasjon-fra-wildrobot-app/trunk/logistra-robots.php
r3435235 r3435948 17 17 * Plugin URI: https://wildrobot.app/wildrobot-logistra-cargonizer-woocommerce-integrasjon/ 18 18 * Description: Integrate WooCommerce with Profrakt or Logistra - Freight administration made easy by Wildrobot! 19 * Version: 7.14. 319 * Version: 7.14.4 20 20 * Author: Robertosnap 21 21 * Author URI: https://wildrobot.app/wildrobot-logistra-cargonizer-woocommerce-integrasjon/ … … 39 39 * Rename this for your plugin and update it as you release new versions. 40 40 */ 41 define('WILDROBOT_LOGISTRA_VERSION', '7.14. 3');41 define('WILDROBOT_LOGISTRA_VERSION', '7.14.4'); 42 42 43 43 /** -
logistra-woocommerce-integrasjon-fra-wildrobot-app/trunk/public/class-wildrobot-logistra-public.php
r3321591 r3435948 23 23 class Wildrobot_Logistra_Public 24 24 { 25 26 private $plugin_name; 27 28 /** 29 * The version of this plugin. 30 * 31 * @since 1.0.0 32 * @access private 33 * @var string $version The current version of this plugin. 34 */ 35 private $version; 36 37 /** 38 * Initialize the class and set its properties. 39 * 40 * @since 1.0.0 41 * @param string $plugin_name The name of the plugin. 42 * @param string $version The version of this plugin. 43 */ 44 public function __construct($plugin_name, $version) 45 { 46 47 $this->plugin_name = $plugin_name; 48 $this->version = $version; 49 50 add_action('wp_ajax_logistra_save_service_partner', array($this, 'save_service_partner_to_session')); 51 add_action('wp_ajax_nopriv_logistra_save_service_partner', array($this, 'save_service_partner_to_session')); 52 add_filter('logistra_robots_service_partner_select', array($this, "logistra_robots_cart_shipping_template_args"), 1, 2); 53 // Cart 54 add_action("woocommerce_cart_totals_after_shipping", array($this, "add_pickup_point_to_cart")); 55 // Checkout 56 add_action("woocommerce_review_order_after_shipping", array($this, "add_pickup_point_to_cart"), 1); 57 } 58 59 function wildrobot_logistra_locate_template($template, $template_name, $template_path) 60 { 61 global $woocommerce; 62 $_template = $template; 63 if (!$template_path) 64 $template_path = $woocommerce->template_url; 65 66 // $plugin_path = untrailingslashit(plugin_dir_path(__FILE__)) . '/template/woocommerce/'; 67 $plugin_path = plugin_dir_path(dirname(__FILE__)) . 'templates/woocommerce/'; 68 // $plugin_path = plugin_dir_path(dirname(__FILE__) . '/template/woocommerce/'); 69 70 // Look within passed path within the theme - this is priority 71 $template = locate_template( 72 array( 73 $template_path . $template_name, 74 $template_name 75 ) 76 ); 77 78 if (!$template && file_exists($plugin_path . $template_name)) 79 $template = $plugin_path . $template_name; 80 81 if (!$template) 82 $template = $_template; 83 84 return $template; 85 } 86 87 public function add_picklist_to_page($content = null) 88 { 89 $page_id = get_the_ID(); 90 if (is_page() && (get_option("wildrobot_logistra_picklist_active") === "yes") && !empty($page_id)) { 91 if ($page_id == get_option('wildrobot_logistra_picklist_page', null)) { 92 $content = '<div id="wildrobot-complete-picklist-order">Laster plukkliste fullføring...</div>'; 93 } 94 } 95 return $content; 96 } 97 98 public function add_service_partner_picker_field($fields) 99 { 100 $fields['billing']['shipping_service_partner'] = array( 101 'label' => __('Utleveringssted', 'logistra-robots'), 102 'placeholder' => _x('Velg utleveringssted', 'placeholder', 'logistra-robots'), 103 'required' => false, 104 'class' => array('form-row-wide hidden'), 105 'clear' => true, 106 'type' => 'text', 107 ); 108 109 return $fields; 110 } 111 112 public function save_service_partner_to_session() 113 { 114 check_ajax_referer('wildrobot_logistra_select_servicepartner', 'nonce'); 115 116 $service_partner_number = sanitize_text_field($_POST['service_partner_number']); 117 $service_partner_customer_number = sanitize_text_field($_POST['service_partner_customer_number']); 118 $service_partner_name = sanitize_text_field($_POST['service_partner_name']); 119 $service_partner_postcode = sanitize_text_field($_POST['service_partner_postcode']); 120 $service_partner_city = sanitize_text_field($_POST['service_partner_city']); 121 $service_partner_country = sanitize_text_field($_POST['service_partner_country']); 122 $chosen_shipping_methods = maybe_serialize(WC()->session->get('chosen_shipping_methods')); 123 124 WC()->session->set('wildrobot_logistra_service_partner_number', $service_partner_number); 125 WC()->session->set('wildrobot_logistra_service_partner_customer_number', $service_partner_customer_number); 126 WC()->session->set('wildrobot_logistra_service_partner_name', $service_partner_name); 127 WC()->session->set('wildrobot_logistra_service_partner_postcode', $service_partner_postcode); 128 WC()->session->set('wildrobot_logistra_service_partner_city', $service_partner_city); 129 WC()->session->set('wildrobot_logistra_service_partner_country', $service_partner_country); 130 WC()->session->set('wildrobot_logistra_service_partner_for_chosen_shipping_methods', $chosen_shipping_methods); 131 wp_send_json_success(); 132 } 133 134 function wildrobot_logistra_woocommerce_checkout_process($order_id, $posted_data, $order) 135 { 136 137 $service_partner_number = WC()->session->get('wildrobot_logistra_service_partner_number'); 138 $service_partner_customer_number = WC()->session->get('wildrobot_logistra_service_partner_customer_number'); 139 $service_partner_name = WC()->session->get('wildrobot_logistra_service_partner_name'); 140 $service_partner_postcode = WC()->session->get('wildrobot_logistra_service_partner_postcode'); 141 $service_partner_city = WC()->session->get('wildrobot_logistra_service_partner_city'); 142 $service_partner_country = WC()->session->get('wildrobot_logistra_service_partner_country'); 143 144 if (!empty($service_partner_number)) { 145 $order->update_meta_data("_wildrobot_logistra_service_partner_number", $service_partner_number); 146 $order->update_meta_data("_wildrobot_logistra_service_partner_customer_number", $service_partner_customer_number); 147 $order->update_meta_data("_wildrobot_logistra_service_partner_name", $service_partner_name); 148 $order->update_meta_data("_wildrobot_logistra_service_partner_postcode", $service_partner_postcode); 149 $order->update_meta_data("_wildrobot_logistra_service_partner_city", $service_partner_city); 150 $order->update_meta_data("_wildrobot_logistra_service_partner_country", $service_partner_country); 151 $order->save(); 152 WC()->session->__unset('wildrobot_logistra_service_partner_number'); 153 WC()->session->__unset('wildrobot_logistra_service_partner_customer_number'); 154 WC()->session->__unset('wildrobot_logistra_service_partner_name'); 155 WC()->session->__unset('wildrobot_logistra_service_partner_postcode'); 156 WC()->session->__unset('wildrobot_logistra_service_partner_city'); 157 WC()->session->__unset('wildrobot_logistra_service_partner_country'); 158 WC()->session->__unset('wildrobot_logistra_service_partner_for_chosen_shipping_methods'); 159 return; 160 } 161 162 // TO BE DEPRECATED 163 if (isset($_POST["logistra_robots_select_servicepartner"]) && !empty($_POST["logistra_robots_select_servicepartner"])) { 164 $service_partner_number = $_POST["logistra_robots_select_servicepartner"]; 165 } else if (isset($_POST["shipping_service_partner"]) && !empty($_POST["shipping_service_partner"])) { 166 $service_partner_number = $_POST["shipping_service_partner"]; 167 } 168 if (!empty($service_partner_number)) { 169 $order->update_meta_data("_shipping_service_partner", $service_partner_number); 170 $order->save(); 171 } 172 } 173 174 public function stop_checkout_if_service_partner_not_set($order_id) 175 { 176 $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods'); 177 $shipping_methods = WC()->shipping()->get_shipping_methods(); 178 179 foreach ($chosen_shipping_methods as $chosen_method) { 180 if (strpos($chosen_method, 'logistra_robots_shipping_method') !== false) { 181 list($method_id, $instance_id) = explode(':', $chosen_method); 182 if (isset($shipping_methods[$method_id])) { 183 $shipping_method = new $shipping_methods[$method_id]($instance_id); 184 if (method_exists($shipping_method, 'get_option')) { 185 $require_service_partner = $shipping_method->get_option('require_service_partner'); 186 if ($require_service_partner === 'yes') { 187 $service_partner_number = WC()->session->get('wildrobot_logistra_service_partner_number'); 188 $service_partner_for_chosen_shipping_methods = maybe_unserialize(WC()->session->get('wildrobot_logistra_service_partner_for_chosen_shipping_methods')); 189 if (empty($service_partner_number) || !in_array($chosen_method, $service_partner_for_chosen_shipping_methods)) { 190 wc_add_notice(__('Må velge utleveringssted på denne fraktmetoden.', 'logistra-robots'), 'error'); 191 return; 192 } 193 } 194 } 195 } 196 } 197 } 198 } 199 200 201 /** 202 * Generates the service partner object for the cart shipping template based on the selected shipping method. 203 * 204 * This function retrieves the delivery relation and transport agreement based on the chosen shipping method. 205 * It checks if service partners are possible and filters out certain carriers. It then fetches service partners 206 * based on the destination postcode and country. The function returns a service partner object which includes 207 * details like carrier name, identifier, and available service partners. 208 * 209 * @param object $service_partner_object An object to be populated with service partner details. 210 * @param array $args An array containing shipping method and destination details. Minimum values required are "chosen_method" and "package" with "destination" containing "postcode" and "country". 211 * [ 212 * "chosen_method": string, 213 * "package": [ 214 * "destination": [ 215 * "postcode": string, 216 * "country": string 217 * ] 218 * ] 219 * ] 220 * @return object|bool Returns the service partner object with populated details or false on failure. 221 * { 222 * "carrier_name": string, 223 * "carrier_identifier": string, 224 * "service_partner_possible": bool, 225 * "requires_service_partner": bool, 226 * "service_partners": array, 227 * "service_partner_select_values": array 228 * } 229 */ 230 function logistra_robots_cart_shipping_template_args($service_partner_object, $args = []) 231 { 232 try { 233 $packages = WC()->shipping()->get_packages(); 234 // START Maybe its a subscription 235 if (empty($packages)) { 236 // Check if WooCommerce Subscriptions is active and the class/method exists 237 if (class_exists('WC_Subscriptions_Cart') && method_exists('WC_Subscriptions_Cart', 'get_recurring_shipping_packages')) { 238 foreach (WC_Subscriptions_Cart::get_recurring_shipping_packages() as $shipping_package_key => $shipping_package) { 239 foreach ($shipping_package as $i => $package) { 240 $packages[$i] = $package; 241 } 242 } 243 } 244 } 245 // END Maybe its a subscription 246 foreach ($packages as $i => $package) { 247 $chosen_method = isset(WC()->session->chosen_shipping_methods[$i]) ? WC()->session->chosen_shipping_methods[$i] : ''; 248 $package = $packages[$i]; 249 if (!empty($chosen_method)) { 250 break; 251 } 252 } 253 if (empty($chosen_method) || empty($package)) { 254 return false; 255 } 256 257 $delivery_realtion = Wildrobot_Logistra_DB::get_delivery_relation_with_transport_agreement($chosen_method); 258 if (empty($delivery_realtion)) { 259 return false; 260 } 261 $transportAgreement = $delivery_realtion["transport_agreement"]; 262 $service_partner_possible = false; 263 if ($transportAgreement["service_partner_possible"]) { 264 $service_partner_possible = true; 265 } 266 if (in_array($transportAgreement["identifier"], ["bring_small_parcel_a_no_rfid", "bring_small_parcel_a", "bring2_small_parcel_a_no_rfid", "bring2_small_parcel_a", "postnord_mypack_home_small"])) { 267 $service_partner_possible = false; 268 } 269 $carrier_identifier = $transportAgreement["ta_carrier"]["identifier"]; 270 $carrier_name = $transportAgreement["ta_carrier"]["name"]; 271 272 $postcode = $package["destination"]["postcode"]; 273 $country = $package["destination"]["country"]; 274 $address_1 = $package["destination"]["address"]; 275 $city = $package["destination"]["city"]; 276 if (empty($postcode)) { 277 return false; 278 } 279 $service_partner_type = null; 280 foreach ($delivery_realtion["services"] as $service) { 281 if ($service === "wildrobot_only_manned_service_partner") { 282 $service_partner_type = "manned"; 283 } 284 if ($service === "wildrobot_only_unmanned_service_partner") { 285 $service_partner_type = "locker"; 286 } 287 } 288 $res = Wildrobot_Logistra_Cargonizer::get_service_partners( 289 $country, 290 $postcode, 291 $carrier_identifier, 292 $delivery_realtion["wr_id"], 293 empty($address_1) ? null : $address_1, 294 empty($city) ? null : $city, 295 $service_partner_type 296 ); 297 if (empty($res["service_partners"])) { 298 $service_partner_possible = false; 299 } 300 // Velg dag og tid for utlevering 301 302 $service_partner_key_label = [ 303 "" => apply_filters("wildrobot_logistra_service_partner_select_label", get_option("wildrobot_logistra_service_partner_select_default_value", "Velg nærmeste for meg"), $chosen_method, $transportAgreement["ta_carrier"]["identifier"]), 304 ]; 305 foreach ($res["service_partners"] as $service_partner) { 306 $key = $service_partner["number"] . "@@@" . 307 (is_string($service_partner["customer-number"]) ? $service_partner["customer-number"] : ""); 308 $service_partner_key_label[$key] = $service_partner["name"] . ", " . $service_partner["postcode"] . ($service_partner["city"] === "Unknown" ? "" : " " . $service_partner["city"]); 309 } 310 311 $service_partner_object = (object) [ 312 "carrier_name" => $carrier_name, 313 "carrier_identifier" => $carrier_identifier, 314 "service_partner_possible" => $service_partner_possible, 315 "requires_service_partner" => $transportAgreement["requires_service_partner"], 316 "service_partners" => $res["service_partners"], 317 "service_partner_select_values" => $service_partner_key_label, 318 // "service_partner_select_objects" => $service_partner_select_objects, 319 ]; 320 321 return apply_filters("logistra_robots_cart_shipping_service_partner_object", $service_partner_object); 322 } catch (\Throwable $error) { 323 return false; 324 } 325 } 326 /** 327 * Adds pickup point selection to cart totals if enabled 328 * Hooked to: woocommerce_cart_totals_after_shipping 329 */ 330 public function add_pickup_point_to_cart() 331 { 332 // Early return if pickup point is not enabled 333 if (get_option("wildrobot_logistra_pickuppoint_checkout_inline_hook") !== "yes") { 334 return; 335 } 336 337 $service_partner_object = self::logistra_robots_cart_shipping_template_args(null); 338 339 // Early return if service partner is not possible 340 if (!$service_partner_object || !$service_partner_object->service_partner_possible) { 341 return; 342 } 343 344 // Get current service partner value from session 345 $value = !empty(WC()->session->get('wildrobot_logistra_service_partner_number')) 346 ? WC()->session->get('wildrobot_logistra_service_partner_number') . "@@@" . 347 WC()->session->get('wildrobot_logistra_service_partner_customer_number') 348 : null; 349 350 // Add data attributes instead of wp_localize_script 351 $service_partner_data = array( 352 'servicePartners' => $service_partner_object->service_partners, 353 'ajaxUrl' => admin_url('admin-ajax.php'), 354 'nonce' => wp_create_nonce('wildrobot_logistra_select_servicepartner') 355 ); 356 ?> 25 private $plugin_name; 26 27 /** 28 * The version of this plugin. 29 * 30 * @since 1.0.0 31 * @access private 32 * @var string $version The current version of this plugin. 33 */ 34 private $version; 35 36 /** 37 * Initialize the class and set its properties. 38 * 39 * @since 1.0.0 40 * @param string $plugin_name The name of the plugin. 41 * @param string $version The version of this plugin. 42 */ 43 public function __construct($plugin_name, $version) 44 { 45 $this->plugin_name = $plugin_name; 46 $this->version = $version; 47 48 add_action("wp_ajax_logistra_save_service_partner", [ 49 $this, 50 "save_service_partner_to_session", 51 ]); 52 add_action("wp_ajax_nopriv_logistra_save_service_partner", [ 53 $this, 54 "save_service_partner_to_session", 55 ]); 56 add_filter( 57 "logistra_robots_service_partner_select", 58 [$this, "logistra_robots_cart_shipping_template_args"], 59 1, 60 2, 61 ); 62 // Cart 63 add_action("woocommerce_cart_totals_after_shipping", [ 64 $this, 65 "add_pickup_point_to_cart", 66 ]); 67 // Checkout 68 add_action( 69 "woocommerce_review_order_after_shipping", 70 [$this, "add_pickup_point_to_cart"], 71 1, 72 ); 73 } 74 75 function wildrobot_logistra_locate_template( 76 $template, 77 $template_name, 78 $template_path, 79 ) { 80 global $woocommerce; 81 $_template = $template; 82 if (!$template_path) { 83 $template_path = $woocommerce->template_url; 84 } 85 86 // $plugin_path = untrailingslashit(plugin_dir_path(__FILE__)) . '/template/woocommerce/'; 87 $plugin_path = 88 plugin_dir_path(dirname(__FILE__)) . "templates/woocommerce/"; 89 // $plugin_path = plugin_dir_path(dirname(__FILE__) . '/template/woocommerce/'); 90 91 // Look within passed path within the theme - this is priority 92 $template = locate_template([ 93 $template_path . $template_name, 94 $template_name, 95 ]); 96 97 if (!$template && file_exists($plugin_path . $template_name)) { 98 $template = $plugin_path . $template_name; 99 } 100 101 if (!$template) { 102 $template = $_template; 103 } 104 105 return $template; 106 } 107 108 public function add_picklist_to_page($content = null) 109 { 110 $page_id = get_the_ID(); 111 if ( 112 is_page() && 113 get_option("wildrobot_logistra_picklist_active") === "yes" && 114 !empty($page_id) 115 ) { 116 if ( 117 $page_id == get_option("wildrobot_logistra_picklist_page", null) 118 ) { 119 $content = 120 '<div id="wildrobot-complete-picklist-order">Laster plukkliste fullføring...</div>'; 121 } 122 } 123 return $content; 124 } 125 126 public function add_service_partner_picker_field($fields) 127 { 128 $fields["billing"]["shipping_service_partner"] = [ 129 "label" => __("Utleveringssted", "logistra-robots"), 130 "placeholder" => _x( 131 "Velg utleveringssted", 132 "placeholder", 133 "logistra-robots", 134 ), 135 "required" => false, 136 "class" => ["form-row-wide hidden"], 137 "clear" => true, 138 "type" => "text", 139 ]; 140 141 return $fields; 142 } 143 144 public function save_service_partner_to_session() 145 { 146 check_ajax_referer("wildrobot_logistra_select_servicepartner", "nonce"); 147 148 $service_partner_number = sanitize_text_field( 149 $_POST["service_partner_number"], 150 ); 151 $service_partner_customer_number = sanitize_text_field( 152 $_POST["service_partner_customer_number"], 153 ); 154 $service_partner_name = sanitize_text_field( 155 $_POST["service_partner_name"], 156 ); 157 $service_partner_postcode = sanitize_text_field( 158 $_POST["service_partner_postcode"], 159 ); 160 $service_partner_city = sanitize_text_field( 161 $_POST["service_partner_city"], 162 ); 163 $service_partner_country = sanitize_text_field( 164 $_POST["service_partner_country"], 165 ); 166 $chosen_shipping_methods = maybe_serialize( 167 WC()->session->get("chosen_shipping_methods"), 168 ); 169 170 WC()->session->set( 171 "wildrobot_logistra_service_partner_number", 172 $service_partner_number, 173 ); 174 WC()->session->set( 175 "wildrobot_logistra_service_partner_customer_number", 176 $service_partner_customer_number, 177 ); 178 WC()->session->set( 179 "wildrobot_logistra_service_partner_name", 180 $service_partner_name, 181 ); 182 WC()->session->set( 183 "wildrobot_logistra_service_partner_postcode", 184 $service_partner_postcode, 185 ); 186 WC()->session->set( 187 "wildrobot_logistra_service_partner_city", 188 $service_partner_city, 189 ); 190 WC()->session->set( 191 "wildrobot_logistra_service_partner_country", 192 $service_partner_country, 193 ); 194 WC()->session->set( 195 "wildrobot_logistra_service_partner_for_chosen_shipping_methods", 196 $chosen_shipping_methods, 197 ); 198 wp_send_json_success(); 199 } 200 201 function wildrobot_logistra_woocommerce_checkout_process( 202 $order_id, 203 $posted_data, 204 $order, 205 ) { 206 $service_partner_number = WC()->session->get( 207 "wildrobot_logistra_service_partner_number", 208 ); 209 $service_partner_customer_number = WC()->session->get( 210 "wildrobot_logistra_service_partner_customer_number", 211 ); 212 $service_partner_name = WC()->session->get( 213 "wildrobot_logistra_service_partner_name", 214 ); 215 $service_partner_postcode = WC()->session->get( 216 "wildrobot_logistra_service_partner_postcode", 217 ); 218 $service_partner_city = WC()->session->get( 219 "wildrobot_logistra_service_partner_city", 220 ); 221 $service_partner_country = WC()->session->get( 222 "wildrobot_logistra_service_partner_country", 223 ); 224 225 if (!empty($service_partner_number)) { 226 $order->update_meta_data( 227 "_wildrobot_logistra_service_partner_number", 228 $service_partner_number, 229 ); 230 $order->update_meta_data( 231 "_wildrobot_logistra_service_partner_customer_number", 232 $service_partner_customer_number, 233 ); 234 $order->update_meta_data( 235 "_wildrobot_logistra_service_partner_name", 236 $service_partner_name, 237 ); 238 $order->update_meta_data( 239 "_wildrobot_logistra_service_partner_postcode", 240 $service_partner_postcode, 241 ); 242 $order->update_meta_data( 243 "_wildrobot_logistra_service_partner_city", 244 $service_partner_city, 245 ); 246 $order->update_meta_data( 247 "_wildrobot_logistra_service_partner_country", 248 $service_partner_country, 249 ); 250 $order->save(); 251 WC()->session->__unset("wildrobot_logistra_service_partner_number"); 252 WC()->session->__unset( 253 "wildrobot_logistra_service_partner_customer_number", 254 ); 255 WC()->session->__unset("wildrobot_logistra_service_partner_name"); 256 WC()->session->__unset( 257 "wildrobot_logistra_service_partner_postcode", 258 ); 259 WC()->session->__unset("wildrobot_logistra_service_partner_city"); 260 WC()->session->__unset( 261 "wildrobot_logistra_service_partner_country", 262 ); 263 WC()->session->__unset( 264 "wildrobot_logistra_service_partner_for_chosen_shipping_methods", 265 ); 266 return; 267 } 268 269 // TO BE DEPRECATED 270 if ( 271 isset($_POST["logistra_robots_select_servicepartner"]) && 272 !empty($_POST["logistra_robots_select_servicepartner"]) 273 ) { 274 $service_partner_number = 275 $_POST["logistra_robots_select_servicepartner"]; 276 } elseif ( 277 isset($_POST["shipping_service_partner"]) && 278 !empty($_POST["shipping_service_partner"]) 279 ) { 280 $service_partner_number = $_POST["shipping_service_partner"]; 281 } 282 if (!empty($service_partner_number)) { 283 $order->update_meta_data( 284 "_shipping_service_partner", 285 $service_partner_number, 286 ); 287 $order->save(); 288 } 289 } 290 291 public function stop_checkout_if_service_partner_not_set($order_id) 292 { 293 $chosen_shipping_methods = WC()->session->get( 294 "chosen_shipping_methods", 295 ); 296 $shipping_methods = WC()->shipping()->get_shipping_methods(); 297 298 foreach ($chosen_shipping_methods as $chosen_method) { 299 if ( 300 strpos($chosen_method, "logistra_robots_shipping_method") !== 301 false 302 ) { 303 [$method_id, $instance_id] = explode(":", $chosen_method); 304 if (isset($shipping_methods[$method_id])) { 305 $shipping_method = new ($shipping_methods[$method_id])( 306 $instance_id, 307 ); 308 if (method_exists($shipping_method, "get_option")) { 309 $require_service_partner = $shipping_method->get_option( 310 "require_service_partner", 311 ); 312 if ($require_service_partner === "yes") { 313 $service_partner_number = WC()->session->get( 314 "wildrobot_logistra_service_partner_number", 315 ); 316 $service_partner_for_chosen_shipping_methods = maybe_unserialize( 317 WC()->session->get( 318 "wildrobot_logistra_service_partner_for_chosen_shipping_methods", 319 ), 320 ); 321 if ( 322 empty($service_partner_number) || 323 !in_array( 324 $chosen_method, 325 $service_partner_for_chosen_shipping_methods, 326 ) 327 ) { 328 wc_add_notice( 329 __( 330 "Må velge utleveringssted på denne fraktmetoden.", 331 "logistra-robots", 332 ), 333 "error", 334 ); 335 return; 336 } 337 } 338 } 339 } 340 } 341 } 342 } 343 344 /** 345 * Generates the service partner object for the cart shipping template based on the selected shipping method. 346 * 347 * This function retrieves the delivery relation and transport agreement based on the chosen shipping method. 348 * It checks if service partners are possible and filters out certain carriers. It then fetches service partners 349 * based on the destination postcode and country. The function returns a service partner object which includes 350 * details like carrier name, identifier, and available service partners. 351 * 352 * @param object $service_partner_object An object to be populated with service partner details. 353 * @param array $args An array containing shipping method and destination details. Minimum values required are "chosen_method" and "package" with "destination" containing "postcode" and "country". 354 * [ 355 * "chosen_method": string, 356 * "package": [ 357 * "destination": [ 358 * "postcode": string, 359 * "country": string 360 * ] 361 * ] 362 * ] 363 * @return object|bool Returns the service partner object with populated details or false on failure. 364 * { 365 * "carrier_name": string, 366 * "carrier_identifier": string, 367 * "service_partner_possible": bool, 368 * "requires_service_partner": bool, 369 * "service_partners": array, 370 * "service_partner_select_values": array 371 * } 372 */ 373 function logistra_robots_cart_shipping_template_args( 374 $service_partner_object, 375 $args = [], 376 ) { 377 try { 378 $packages = WC()->shipping()->get_packages(); 379 // START Maybe its a subscription 380 if (empty($packages)) { 381 // Check if WooCommerce Subscriptions is active and the class/method exists 382 if ( 383 class_exists("WC_Subscriptions_Cart") && 384 method_exists( 385 "WC_Subscriptions_Cart", 386 "get_recurring_shipping_packages", 387 ) 388 ) { 389 foreach ( 390 WC_Subscriptions_Cart::get_recurring_shipping_packages() 391 as $shipping_package_key => $shipping_package 392 ) { 393 foreach ($shipping_package as $i => $package) { 394 $packages[$i] = $package; 395 } 396 } 397 } 398 } 399 // END Maybe its a subscription 400 foreach ($packages as $i => $package) { 401 $chosen_method = isset( 402 WC()->session->chosen_shipping_methods[$i], 403 ) 404 ? WC()->session->chosen_shipping_methods[$i] 405 : ""; 406 $package = $packages[$i]; 407 if (!empty($chosen_method)) { 408 break; 409 } 410 } 411 if (empty($chosen_method) || empty($package)) { 412 return false; 413 } 414 415 $delivery_realtion = Wildrobot_Logistra_DB::get_delivery_relation_with_transport_agreement( 416 $chosen_method, 417 ); 418 if (empty($delivery_realtion)) { 419 return false; 420 } 421 $transportAgreement = $delivery_realtion["transport_agreement"]; 422 $service_partner_possible = false; 423 if ($transportAgreement["service_partner_possible"]) { 424 $service_partner_possible = true; 425 } 426 if ( 427 in_array($transportAgreement["identifier"], [ 428 "bring_small_parcel_a_no_rfid", 429 "bring_small_parcel_a", 430 "bring2_small_parcel_a_no_rfid", 431 "bring2_small_parcel_a", 432 "postnord_mypack_home_small", 433 ]) 434 ) { 435 $service_partner_possible = false; 436 } 437 $carrier_identifier = 438 $transportAgreement["ta_carrier"]["identifier"]; 439 $carrier_name = $transportAgreement["ta_carrier"]["name"]; 440 441 $postcode = $package["destination"]["postcode"]; 442 $country = $package["destination"]["country"]; 443 $address_1 = $package["destination"]["address"]; 444 $city = $package["destination"]["city"]; 445 if (empty($postcode)) { 446 return false; 447 } 448 $service_partner_type = null; 449 foreach ($delivery_realtion["services"] as $service) { 450 if ($service === "wildrobot_only_manned_service_partner") { 451 $service_partner_type = "manned"; 452 } 453 if ($service === "wildrobot_only_unmanned_service_partner") { 454 $service_partner_type = "locker"; 455 } 456 } 457 $res = Wildrobot_Logistra_Cargonizer::get_service_partners( 458 $country, 459 $postcode, 460 $carrier_identifier, 461 $delivery_realtion["wr_id"], 462 empty($address_1) ? null : $address_1, 463 empty($city) ? null : $city, 464 $service_partner_type, 465 ); 466 467 // Filter out fallback service partners (e.g., Postens Godssenter) 468 $real_service_partners = array_filter( 469 $res["service_partners"] ?? [], 470 function ($sp) { 471 return empty($sp["is_fallback"]); 472 }, 473 ); 474 475 // If only fallback partners exist, hide the dropdown entirely 476 if (empty($real_service_partners)) { 477 $service_partner_possible = false; 478 } 479 480 $service_partner_key_label = [ 481 "" => apply_filters( 482 "wildrobot_logistra_service_partner_select_label", 483 get_option( 484 "wildrobot_logistra_service_partner_select_default_value", 485 "Velg nærmeste for meg", 486 ), 487 $chosen_method, 488 $transportAgreement["ta_carrier"]["identifier"], 489 ), 490 ]; 491 foreach ($real_service_partners as $service_partner) { 492 $key = 493 $service_partner["number"] . 494 "@@@" . 495 (is_string($service_partner["customer-number"]) 496 ? $service_partner["customer-number"] 497 : ""); 498 $service_partner_key_label[$key] = 499 $service_partner["name"] . 500 ", " . 501 $service_partner["postcode"] . 502 ($service_partner["city"] === "Unknown" 503 ? "" 504 : " " . $service_partner["city"]); 505 } 506 507 $service_partner_object = (object) [ 508 "carrier_name" => $carrier_name, 509 "carrier_identifier" => $carrier_identifier, 510 "service_partner_possible" => $service_partner_possible, 511 "requires_service_partner" => 512 $transportAgreement["requires_service_partner"], 513 "service_partners" => array_values($real_service_partners), 514 "service_partner_select_values" => $service_partner_key_label, 515 // "service_partner_select_objects" => $service_partner_select_objects, 516 ]; 517 518 return apply_filters( 519 "logistra_robots_cart_shipping_service_partner_object", 520 $service_partner_object, 521 ); 522 } catch (\Throwable $error) { 523 return false; 524 } 525 } 526 /** 527 * Adds pickup point selection to cart totals if enabled 528 * Hooked to: woocommerce_cart_totals_after_shipping 529 */ 530 public function add_pickup_point_to_cart() 531 { 532 // Early return if pickup point is not enabled 533 if ( 534 get_option( 535 "wildrobot_logistra_pickuppoint_checkout_inline_hook", 536 ) !== "yes" 537 ) { 538 return; 539 } 540 541 $service_partner_object = self::logistra_robots_cart_shipping_template_args( 542 null, 543 ); 544 545 // Early return if service partner is not possible 546 if ( 547 !$service_partner_object || 548 !$service_partner_object->service_partner_possible 549 ) { 550 return; 551 } 552 553 // Get current service partner value from session 554 $value = !empty( 555 WC()->session->get("wildrobot_logistra_service_partner_number") 556 ) 557 ? WC()->session->get("wildrobot_logistra_service_partner_number") . 558 "@@@" . 559 WC()->session->get( 560 "wildrobot_logistra_service_partner_customer_number", 561 ) 562 : null; 563 564 // Add data attributes instead of wp_localize_script 565 $service_partner_data = [ 566 "servicePartners" => $service_partner_object->service_partners, 567 "ajaxUrl" => admin_url("admin-ajax.php"), 568 "nonce" => wp_create_nonce( 569 "wildrobot_logistra_select_servicepartner", 570 ), 571 ]; 572 ?> 357 573 <tr class="woocommerce-wildrobot-pickuppoint-checkout-inline" 358 data-logistra-service-partner='<?php echo esc_attr(json_encode($service_partner_data)); ?>'> 359 <th><?php echo esc_html__('Utleveringssted', 'logistra-robots'); ?></th> 574 data-logistra-service-partner='<?php echo esc_attr( 575 json_encode($service_partner_data), 576 ); ?>'> 577 <th><?php echo esc_html__("Utleveringssted", "logistra-robots"); ?></th> 360 578 <td> 361 <?php 362 woocommerce_form_field("logistra_robots_select_servicepartner", [ 363 'type' => 'select', 364 'class' => array('logistra_robots_select_servicepartner form-row-wide'), 365 'required' => false, 366 'options' => $service_partner_object->service_partner_select_values, 367 'default' => $value, 368 ]); 369 ?> 579 <?php woocommerce_form_field("logistra_robots_select_servicepartner", [ 580 "type" => "select", 581 "class" => ["logistra_robots_select_servicepartner form-row-wide"], 582 "required" => false, 583 "options" => $service_partner_object->service_partner_select_values, 584 "default" => $value, 585 ]); ?> 370 586 </td> 371 587 </tr> 372 588 <?php 373 } 374 375 public function enqueue_styles() 376 { 377 // wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/ReactToastify.css', array(), $this->version, 'all'); 378 } 379 380 public function enqueue_scripts() 381 { 382 383 $pickup_page_id = (int) get_option('wildrobot_logistra_picklist_page'); 384 $current_page_id = get_queried_object_id(); 385 $is_pickup_page = $current_page_id == $pickup_page_id; 386 387 // Get current page ID 388 // Only enqueue scripts on cart, checkout, or pickup page 389 if (!is_cart() && !is_checkout() && !$is_pickup_page) { 390 return; 391 } 392 $php_to_js_variables = array( 393 'version' => $this->version, 394 'wc_ajax_url' => WC()->ajax_url(), 395 'security' => wp_create_nonce("randomTextForLogistraIntegration"), 396 ); 397 398 $options = Wildrobot_Logistra_Options::get_public_options(); 399 400 $plugin_js = self::get_js_file_path('partials/frontend', 'public'); 401 wp_enqueue_script($this->plugin_name . "-public-js", $plugin_js, ['wp-element'], $this->version, true); 402 wp_localize_script($this->plugin_name . '-public-js', 'wildrobotLogistraPublic', array_merge($php_to_js_variables, $options)); 403 404 // Enqueue the service partner handler script 405 wp_enqueue_script( 406 $this->plugin_name . '-service-partner', 407 plugin_dir_url(__FILE__) . 'js/service-partner-handler.js', 408 array('jquery'), 409 $this->version, 410 true 411 ); 412 } 413 414 private static function get_js_file_path($folder, $file) 415 { 416 $files = glob(plugin_dir_path(__FILE__) . $folder . '/' . $file . '*.js'); 417 if (!empty($files)) { 418 $full_path = $files[0]; 419 $app_pos = strpos($full_path, $file . '.'); 420 $file_name = substr($full_path, $app_pos); 421 return plugin_dir_url(__FILE__) . $folder . '/' . $file_name; 422 } else { 423 return 'http://localhost:3000/static/js/client.js'; 424 } 425 } 589 } 590 591 public function enqueue_styles() 592 { 593 // wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/ReactToastify.css', array(), $this->version, 'all'); 594 } 595 596 public function enqueue_scripts() 597 { 598 $pickup_page_id = (int) get_option("wildrobot_logistra_picklist_page"); 599 $current_page_id = get_queried_object_id(); 600 $is_pickup_page = $current_page_id == $pickup_page_id; 601 602 // Get current page ID 603 // Only enqueue scripts on cart, checkout, or pickup page 604 if (!is_cart() && !is_checkout() && !$is_pickup_page) { 605 return; 606 } 607 $php_to_js_variables = [ 608 "version" => $this->version, 609 "wc_ajax_url" => WC()->ajax_url(), 610 "security" => wp_create_nonce("randomTextForLogistraIntegration"), 611 ]; 612 613 $options = Wildrobot_Logistra_Options::get_public_options(); 614 615 $plugin_js = self::get_js_file_path("partials/frontend", "public"); 616 wp_enqueue_script( 617 $this->plugin_name . "-public-js", 618 $plugin_js, 619 ["wp-element"], 620 $this->version, 621 true, 622 ); 623 wp_localize_script( 624 $this->plugin_name . "-public-js", 625 "wildrobotLogistraPublic", 626 array_merge($php_to_js_variables, $options), 627 ); 628 629 // Enqueue the service partner handler script 630 wp_enqueue_script( 631 $this->plugin_name . "-service-partner", 632 plugin_dir_url(__FILE__) . "js/service-partner-handler.js", 633 ["jquery"], 634 $this->version, 635 true, 636 ); 637 } 638 639 private static function get_js_file_path($folder, $file) 640 { 641 $files = glob( 642 plugin_dir_path(__FILE__) . $folder . "/" . $file . "*.js", 643 ); 644 if (!empty($files)) { 645 $full_path = $files[0]; 646 $app_pos = strpos($full_path, $file . "."); 647 $file_name = substr($full_path, $app_pos); 648 return plugin_dir_url(__FILE__) . $folder . "/" . $file_name; 649 } else { 650 return "http://localhost:3000/static/js/client.js"; 651 } 652 } 426 653 }
Note: See TracChangeset
for help on using the changeset viewer.