PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
← All changes | inc/admin/views/meta-boxes/fields/select.php +88 -29 4.1.74.4.8 View file →
@@ -3,9 +3,9 @@
3 3 /**
4 4 * LP_Meta_Box_Duration_Attribute
5 5 *
6 6 * @author Nhamdv
7 - * @version 1.0.0
7 + * @version 1.0.2
8 8 * @since 4.0.0
9 9 */
10 10 class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {
11 11
@@ -11,24 +11,24 @@
11 11
12 12 /**
13 13 * Constructor.
14 14 *
15 - * @param string $id
16 15 * @param string $label
17 16 * @param string $description
18 - * @param mixed $default
19 - * @param array $extra
17 + * @param mixed $default
18 + * @param array $extra
20 19 */
21 20 public function __construct( $label = '', $description = '', $default = '', $extra = array() ) {
22 21 parent::__construct( $label, $description, $default, $extra );
23 22 }
24 23
25 - public function meta_value( $thepostid ) {
26 - $multil_meta = isset( $this->extra['multil_meta'] ) ? $this->extra['multil_meta'] : false;
27 - return $multil_meta ? get_post_meta( $thepostid, $this->id, false ) : get_post_meta( $thepostid, $this->id, true );
24 + public function meta_value( $post_id ) {
25 + $multil_meta = $this->extra['multil_meta'] ?? false;
26 +
27 + return $multil_meta ? get_post_meta( $post_id, $this->id, false ) : get_post_meta( $post_id, $this->id, true );
28 28 }
29 29
30 - public function output( $thepostid ) {
30 + public function output( $post_id ) {
31 31 if ( empty( $this->id ) ) {
32 32 return;
33 33 }
34 34
@@ -37,11 +37,16 @@
37 37 $field['default'] = $this->default;
38 38 $field['description'] = $this->description;
39 39 $field['label'] = $this->label;
40 40
41 - $field['multil_meta'] = isset( $field['multil_meta'] ) ? $field['multil_meta'] : false;
42 - $meta = $this->meta_value( $thepostid );
41 + $field['multil_meta'] = $field['multil_meta'] ?? false;
42 + $meta = $this->meta_value( $post_id );
43 43
44 + // Fix case select multiple but meta is array with single empty value.
45 + if ( is_array($meta) && count($meta) === 1 && empty( $meta[0] ) ) {
46 + $meta = [];
47 + }
48 +
44 49 $default = ( ! $meta && isset( $field['default'] ) ) ? $field['default'] : $meta;
45 50
46 51 $field = wp_parse_args(
47 52 $field,
@@ -48,36 +53,68 @@
48 53 array(
49 54 'class' => 'select',
50 55 'style' => '',
51 56 'wrapper_class' => '', // Use "lp-select-2" for select2.
52 - 'value' => isset( $field['value'] ) ? $field['value'] : $default,
57 + 'value' => $field['value'] ?? $default,
53 58 'name' => $field['id'],
54 59 'desc_tip' => false,
55 60 'multiple' => false,
56 61 'custom_attributes' => array(),
62 + 'tom_select' => false,
63 + 'wrapper_attr' => [],
64 + 'options' => array(),
57 65 )
58 66 );
59 67
60 - $label_attributes = array(
61 - 'for' => $field['id'],
62 - );
68 + if ( isset( $field['options'] ) && ! is_array( $field['options'] ) ) {
69 + $field['options'] = (array) $field['options'];
70 + }
63 71
64 72 $field_attributes = (array) $field['custom_attributes'];
65 73 $field_attributes['style'] = $field['style'];
66 74 $field_attributes['id'] = $field['id'];
67 75 $field_attributes['name'] = $field['multiple'] ? $field['name'] . '[]' : $field['name'];
76 + if ( isset( $field['name_no_bracket'] ) ) {
77 + $field_attributes['name'] = $field['name'];
78 + }
68 79 $field_attributes['class'] = $field['class'];
69 80
70 81 if ( $field['multiple'] ) {
71 - $field['wrapper_class'] = 'lp-select-2';
72 82 $field_attributes['multiple'] = true;
73 83 }
74 84
85 + if ( $field['tom_select'] ) {
86 + $field_attributes['class'] .= ' lp-tom-select';
87 + if ( ! empty( $field['ts-remove-button'] ) ) {
88 + $field_attributes['data-ts-remove-button'] = $field['ts-remove-button'];
89 + }
90 + } elseif ( $field['multiple'] ) {
91 + $field['wrapper_class'] = 'lp-select-2';
92 + }
93 +
94 + if ( isset( $field['data-saved'] ) ) {
95 + $field_attributes['data-saved'] = htmlentities2( json_encode( $field['data-saved'] ) );
96 + } elseif ( ! empty( $meta ) ) {
97 + $field_attributes['data-saved'] = htmlentities2( json_encode( $meta ) );
98 + } else {
99 + $field_attributes['data-saved'] = htmlentities2( json_encode( $default ) );
100 + }
101 +
75 102 $tooltip = ! empty( $field['description'] ) && false !== $field['desc_tip'] ? $field['description'] : '';
76 103 $description = ! empty( $field['description'] ) && false === $field['desc_tip'] ? $field['description'] : '';
104 +
105 + $dependency_check = $field['dependency'] ?? [];
106 + if ( ! empty( $dependency_check ) ) {
107 + if ( $dependency_check['is_disable'] ) {
108 + $field['wrapper_class'] .= ' lp-option-disabled';
109 + }
110 +
111 + $field['wrapper_attr'][] = 'data-dependency=' . $dependency_check['name'];
112 + }
77 113 ?>
78 114
79 115 <p class="form-field <?php echo esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ); ?>"
116 + <?php echo esc_attr( implode( ' ', $field['wrapper_attr'] ) ); ?>
80 117 <?php learn_press_echo_vuejs_write_on_php( $this->condition ? $this->condition : '' ); ?>>
81 118 <label for="<?php echo esc_attr( $field['id'] ); ?>">
82 119 <?php echo wp_kses_post( $field['label'] ); ?>
83 120 </label>
@@ -84,18 +121,28 @@
84 121 <select <?php echo lp_implode_html_attributes( $field_attributes ); ?>>
85 122 <option value="" hidden style="display: none"></option>
86 123 <?php
87 124 foreach ( $field['options'] as $key => $value ) {
88 - echo '<option value="' . esc_attr( $key ) . '"' . ( is_array( $field['value'] ) ? selected( in_array( (string) $key, $field['value'], true ), true ) : selected( $key, $field['value'], false ) ) . '>' . esc_html( $value ) . '</option>';
125 + if ( is_array( $field['value'] ) ) {
126 + $selected = in_array( $key, $field['value'] ) ? 'selected="selected"' : '';
127 + } else {
128 + $selected = selected( $key, $field['value'], false );
129 + }
130 + printf(
131 + '<option value="%s" %s>%s</option>',
132 + esc_attr( $key ),
133 + esc_attr( $selected ),
134 + esc_html( $value )
135 + );
89 136 }
90 137 ?>
91 138 </select>
92 139 <?php
93 140 if ( ! empty( $field['description'] ) ) {
94 - echo '<span class="description">' . wp_kses_post( $field['description'] ) . '</span>';
141 + echo '<span class="description">' . wp_kses_post( $description ) . '</span>';
95 142
96 143 if ( ! empty( $field['desc_tip'] ) ) {
97 - learn_press_quick_tip( $field['desc_tip'] );
144 + learn_press_quick_tip( $tooltip );
98 145 }
99 146 }
100 147 ?>
101 148 </p>
@@ -104,18 +151,21 @@
104 151
105 152 public function save( $post_id ) {
106 153 $multiple_meta = $this->extra['multil_meta'] ?? false;
107 154
108 - if ( ! isset( $_POST[ $this->id ] ) ) {
109 - return;
155 + if ( ! empty( $this->extra['custom_save'] ) ) {
156 + do_action( 'learnpress/admin/metabox/select/save', $this->id, $_POST[ $this->id ] ?? '', $post_id );
157 +
158 + return '';
110 159 }
111 160
112 161 if ( $multiple_meta ) {
113 - $get_values = get_post_meta( $post_id, $this->id ) ?? array();
114 - $new_values = LP_Helper::sanitize_params_submitted( $_POST[ $this->id ] ?? [] );
162 + $data = LP_Request::get_param( $this->id, $this->default ?? [] );
163 + $get_values = get_post_meta( $post_id, $this->id ) ?? [];
164 + $new_values = $data;
115 165
116 - $array_get_values = ! empty( $get_values ) ? array_values( $get_values ) : array();
117 - $array_new_values = ! empty( $new_values ) ? array_values( $new_values ) : array();
166 + $array_get_values = ! empty( $get_values ) ? array_values( $get_values ) : [];
167 + $array_new_values = ! empty( $new_values ) ? array_values( $new_values ) : [];
118 168
119 169 $del_val = array_diff( $array_get_values, $array_new_values );
120 170 $new_val = array_diff( $array_new_values, $array_get_values );
121 171
@@ -125,27 +175,36 @@
125 175
126 176 foreach ( $new_val as $level_id ) {
127 177 add_post_meta( $post_id, $this->id, $level_id, false );
128 178 }
179 +
180 + // Fix case select multiple but meta is array with single empty value.
181 + if ( empty( $data ) ) {
182 + delete_post_meta( $post_id, $this->id );
183 + }
184 +
185 + return $data;
129 186 } else {
130 187 $multiple = ! empty( $this->extra['multiple'] );
131 -
132 188 if ( $multiple ) {
133 - $value_tmp = ! empty( $_POST[ $this->id ] ) ? LP_Helper::sanitize_params_submitted( $_POST[ $this->id ] ) : array();
189 + $data = LP_Request::get_param( $this->id, $this->default ?? [] );
134 190 // Clear item has value empty.
135 191 $value = [];
136 192 array_map(
137 - function( $item ) use ( &$value ) {
193 + function ( $item ) use ( &$value ) {
138 194 if ( $item !== '' ) {
139 195 $value[] = $item;
140 196 }
141 197 },
142 - $value_tmp
198 + $data
143 199 );
144 200 } else {
145 - $value = ! empty( $_POST[ $this->id ] ) ? sanitize_text_field( wp_unslash( $_POST[ $this->id ] ) ) : '';
201 + $data = LP_Request::get_param( $this->id, $this->default ?? '' );
202 + $value = $data;
146 203 }
147 204
148 205 update_post_meta( $post_id, $this->id, $value );
206 +
207 + return $value;
149 208 }
150 209 }
151 210 }