PluginProbe
PostNL for WooCommerce / 4.0.0
PostNL for WooCommerce v4.0.0
5.9.12 5.9.11 5.9.10 5.9.9 5.9.8 5.9.7 5.9.6 trunk 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 3.1.4 3.1.5 3.1.6 3.1.7 4.0.0 4.0.1 4.0.2 4.3.2 4.3.3 4.4.0 4.4.1 All 72 releases
woo-postnl / includes / admin / settings / class-wcpn-settings-callbacks-enhanced-select.php

class-wcpn-settings-callbacks-enhanced-select.php in PostNL for WooCommerce 4.0.0, at includes/admin/settings/class-wcpn-settings-callbacks-enhanced-select.php

113 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 use WPO\WC\PostNL\Entity\SettingsFieldArguments;
4
5 if (! defined('ABSPATH')) {
6 exit;
7 } // Exit if accessed directly
8
9 if (class_exists('WCPN_Settings_Callbacks_Enhanced_Select')) {
10 return;
11 }
12
13 class WCPN_Settings_Callbacks_Enhanced_Select
14 {
15 /**
16 * WCPN_Settings_Callbacks_Enhanced_Select constructor.
17 *
18 * @param \WPO\WC\PostNL\Entity\SettingsFieldArguments $class
19 */
20 public function __construct(SettingsFieldArguments $class)
21 {
22 if ($class->getArgument('loop')) {
23 $this->createMultipleSearchBoxes($class->getArgument('loop'), $class);
24 } else {
25 $optionId = self::getOptionId($class);
26 $value = get_option($optionId)[$class->getId()];
27
28 $this->createSearchBox($class, null, $value);
29 }
30 }
31
32 /**
33 * @param array $loop
34 * @param SettingsFieldArguments $class
35 *
36 * @throws Exception
37 */
38 public function createMultipleSearchBoxes(array $loop, SettingsFieldArguments $class): void
39 {
40 foreach ($loop as $id => $human) {
41 $value = null;
42 $newClass = clone $class;
43 $optionId = self::getOptionId($newClass);
44 $optionValue = get_option($optionId)[$newClass->getId()];
45
46 printf('<h4 class="title">%s:</h4>', $human);
47
48 if (array_key_exists($id, $optionValue)) {
49 $value = $optionValue[$id];
50 }
51
52 $newClass->setId($optionId . '_' . $id);
53 $this->createSearchBox($class, $id, $value ?? []);
54 }
55 }
56
57 /**
58 * Shipping method search callback.
59 *
60 * @param SettingsFieldArguments $class
61 * @param string|null $id
62 * @param $value
63 */
64 public function createSearchBox(SettingsFieldArguments $class, ?string $id, $value): void
65 {
66 $args = $class->getArguments();
67
68 printf(
69 '<select id="%s"
70 name="%s"
71 class="wc-enhanced-select"
72 multiple="multiple"
73 data-placeholder="%s"
74 %s>',
75 $class->getId(),
76 $class->getName() . ($id ? "[$id][]" : "[]"),
77 $args["placeholder"] ?? "",
78 $class->getCustomAttributesAsString()
79 );
80
81 foreach ($args["options"] as $key => $label) {
82 printf(
83 "<option value=\"%s\"%s>%s</option>",
84 esc_attr($key),
85 selected(
86 in_array($key, $value),
87 true,
88 false
89 ),
90 esc_html($label)
91 );
92 }
93
94 echo "</select>";
95 }
96
97 /**
98 * @param SettingsFieldArguments $class
99 *
100 * @return string|null
101 */
102 private static function getOptionId(SettingsFieldArguments $class): ?string
103 {
104 preg_match('/(\w+)\[/', $class->getName(), $matches);
105
106 if (!isset($matches[1])) {
107 return $class->getName();
108 }
109
110 return $matches[1];
111 }
112 }
113