PluginProbe
PostNL for WooCommerce / 4.4.0
PostNL for WooCommerce v4.4.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.4.0, at includes/admin/settings/class-wcpn-settings-callbacks-enhanced-select.php

115 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 * @throws Exception
21 */
22 public function __construct(SettingsFieldArguments $class)
23 {
24 if ($class->getArgument('loop')) {
25 $this->createMultipleSearchBoxes($class->getArgument('loop'), $class);
26 } else {
27 $optionId = self::getOptionId($class);
28 $value = get_option($optionId)[$class->getId()];
29
30 $this->createSearchBox($class, null, $value);
31 }
32 }
33
34 /**
35 * @param array $loop
36 * @param SettingsFieldArguments $class
37 *
38 * @throws Exception
39 */
40 public function createMultipleSearchBoxes(array $loop, SettingsFieldArguments $class): void
41 {
42 foreach ($loop as $id => $human) {
43 $value = null;
44 $newClass = clone $class;
45 $optionId = self::getOptionId($newClass);
46 $optionValue = get_option($optionId)[$newClass->getId()];
47
48 printf('<h4 class="title">%s:</h4>', $human);
49
50 if (array_key_exists($id, $optionValue)) {
51 $value = $optionValue[$id];
52 }
53
54 $newClass->setId($optionId . '_' . $id);
55 $this->createSearchBox($newClass, $id, $value ?? []);
56 }
57 }
58
59 /**
60 * Shipping method search callback.
61 *
62 * @param SettingsFieldArguments $class
63 * @param string|null $id
64 * @param $value
65 */
66 public function createSearchBox(SettingsFieldArguments $class, ?string $id, $value): void
67 {
68 $args = $class->getArguments();
69
70 printf(
71 '<select id="%s"
72 name="%s"
73 class="wc-enhanced-select"
74 multiple="multiple"
75 data-placeholder="%s"
76 %s>',
77 $class->getId(),
78 $class->getName() . ($id ? "[$id][]" : "[]"),
79 $args["placeholder"] ?? "",
80 $class->getCustomAttributesAsString()
81 );
82
83 foreach ($args["options"] as $key => $label) {
84 printf(
85 "<option value=\"%s\"%s>%s</option>",
86 esc_attr($key),
87 selected(
88 in_array($key, $value),
89 true,
90 false
91 ),
92 esc_html($label)
93 );
94 }
95
96 echo "</select>";
97 }
98
99 /**
100 * @param SettingsFieldArguments $class
101 *
102 * @return string|null
103 */
104 private static function getOptionId(SettingsFieldArguments $class): ?string
105 {
106 preg_match('/(\w+)\[/', $class->getName(), $matches);
107
108 if (!isset($matches[1])) {
109 return $class->getName();
110 }
111
112 return $matches[1];
113 }
114 }
115