PluginProbe ʕ •ᴥ•ʔ
Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager / trunk
Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager vtrunk
4.1.41 4.1.40 4.1.39 4.1.38 trunk 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3 1.4 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.10 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.9.2 1.9.3 2.0.0 2.0.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1.0 2.1.1 2.1.4 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.7.0 2.7.1 2.8.0 2.9.0 2.9.1 2.9.2 3.0.0 3.0.1 3.0.10 3.0.11 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.3.0 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.10 3.5.11 3.5.12 3.5.13 3.5.14 3.5.15 3.5.16 3.5.17 3.5.18 3.5.19 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 4.0.0 4.1.0 4.1.1 4.1.10 4.1.11 4.1.12 4.1.13 4.1.14 4.1.15 4.1.16 4.1.17 4.1.18 4.1.19 4.1.2 4.1.20 4.1.21 4.1.22 4.1.23 4.1.24 4.1.25 4.1.26 4.1.27 4.1.28 4.1.29 4.1.3 4.1.30 4.1.31 4.1.32 4.1.34 4.1.35 4.1.36 4.1.37 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9
flexible-checkout-fields / src / Settings / Migrations / Migration320.php
flexible-checkout-fields / src / Settings / Migrations Last commit date
Migration.php 2 weeks ago Migration320.php 2 weeks ago Migration400.php 2 weeks ago
Migration320.php
179 lines
1 <?php
2
3 namespace WPDesk\FCF\Free\Settings\Migrations;
4
5 use WPDesk\FCF\Free\Field\Type\FileType;
6 use WPDesk\FCF\Free\Field\Type\MultiSelectType;
7 use WPDesk\FCF\Free\Field\Type\RadioType;
8 use WPDesk\FCF\Free\Field\Type\SelectType;
9 use WPDesk\FCF\Free\Settings\Form\EditFieldsForm;
10
11 /**
12 * {@inheritdoc}
13 */
14 class Migration320 implements Migration {
15
16 /**
17 * {@inheritdoc}
18 */
19 public function get_version(): string {
20 return '3.2.0';
21 }
22
23 /**
24 * {@inheritdoc}
25 */
26 public function up() {
27 $plugin_settings = get_option( EditFieldsForm::SETTINGS_OPTION_NAME, [] );
28
29 foreach ( $plugin_settings as $section_id => $section_fields ) {
30 foreach ( $section_fields as $field_id => $field_data ) {
31 switch ( $field_data['type'] ?? '' ) {
32 case RadioType::FIELD_TYPE:
33 case SelectType::FIELD_TYPE:
34 case MultiSelectType::FIELD_TYPE:
35 $field_data = $this->convert_option_string_to_options_array( $field_data );
36 break;
37 case FileType::FIELD_TYPE:
38 $field_data = $this->convert_extensions_to_mime_types( $field_data );
39 break;
40 }
41
42 $plugin_settings[ $section_id ][ $field_id ] = $field_data;
43 }
44 }
45
46 update_option( EditFieldsForm::SETTINGS_OPTION_NAME, $plugin_settings );
47 }
48
49 /**
50 * Rolls back migration operations.
51 *
52 * @return void
53 */
54 public function down() {
55 $plugin_settings = get_option( EditFieldsForm::SETTINGS_OPTION_NAME, [] );
56
57 foreach ( $plugin_settings as $section_id => $section_fields ) {
58 foreach ( $section_fields as $field_id => $field_data ) {
59 switch ( $field_data['type'] ?? '' ) {
60 case RadioType::FIELD_TYPE:
61 case SelectType::FIELD_TYPE:
62 case MultiSelectType::FIELD_TYPE:
63 $field_data = $this->convert_options_array_to_option_string( $field_data );
64 break;
65 case FileType::FIELD_TYPE:
66 $field_data = $this->convert_mime_types_to_extensions( $field_data );
67 break;
68 }
69
70 $plugin_settings[ $section_id ][ $field_id ] = $field_data;
71 }
72 }
73
74 update_option( EditFieldsForm::SETTINGS_OPTION_NAME, $plugin_settings );
75 }
76
77 /**
78 * Converts "value1 : Value 1\nvalue2 : Value 2" to array structure.
79 */
80 private function convert_option_string_to_options_array( array $field_data ): array {
81 if ( isset( $field_data['options'] ) ) {
82 return $field_data;
83 }
84
85 $options = explode( "\n", $field_data['option'] ?? '' );
86 $rows = [];
87 foreach ( $options as $option ) {
88 $values = explode( ':', $option );
89 if ( ! $values ) {
90 continue;
91 }
92
93 $rows[] = [
94 'key' => trim( $values[0] ),
95 'value' => trim( implode( ':', array_slice( $values, 1 ) ) ),
96 ];
97 }
98
99 $field_data['options'] = $rows;
100 if ( isset( $field_data['option'] ) ) {
101 unset( $field_data['option'] );
102 }
103
104 return $field_data;
105 }
106
107 /**
108 * Converts array structure to "value1 : Value 1\nvalue2 : Value 2".
109 */
110 private function convert_options_array_to_option_string( array $field_data ): array {
111 if ( isset( $field_data['option'] ) ) {
112 return $field_data;
113 }
114
115 $options = $field_data['options'] ?? [];
116 $rows = [];
117 foreach ( $options as $option ) {
118 $rows[] = sprintf( '%1$s : %2$s', $option['key'], $option['value'] );
119 }
120
121 $field_data['option'] = implode( "\n", $rows );
122 if ( isset( $field_data['options'] ) ) {
123 unset( $field_data['options'] );
124 }
125
126 return $field_data;
127 }
128
129 /**
130 * Converts "jpg,pdf" to "image/jpeg,application/pdf".
131 */
132 private function convert_extensions_to_mime_types( array $field_data ): array {
133 $values = array_map( 'trim', explode( ',', $field_data['file_types'] ?? '' ) );
134 $mime_types = get_allowed_mime_types();
135 $mime_values = [];
136 foreach ( $mime_types as $mime_extensions => $mime_type ) {
137 foreach ( explode( '|', $mime_extensions ) as $mime_extension ) {
138 $mime_values[ $mime_extension ] = $mime_type;
139 }
140 }
141
142 $new_values = [];
143 foreach ( $values as $value ) {
144 if ( in_array( $value, $mime_values, true ) ) {
145 $new_values[] = $value;
146 } elseif ( isset( $mime_values[ $value ] ) ) {
147 $new_values[] = $mime_values[ $value ];
148 }
149 }
150
151 $field_data['file_types'] = implode( ',', array_unique( $new_values ) );
152 return $field_data;
153 }
154
155 /**
156 * Converts "image/jpeg,application/pdf" to "jpg,jpeg,jpe,pdf".
157 */
158 private function convert_mime_types_to_extensions( array $field_data ): array {
159 $values = array_map( 'trim', explode( ',', $field_data['file_types'] ?? '' ) );
160 $mime_types = get_allowed_mime_types();
161 $mime_values = [];
162 foreach ( $mime_types as $mime_extensions => $mime_type ) {
163 $mime_values[ $mime_type ] = explode( '|', $mime_extensions );
164 }
165
166 $new_values = [];
167 foreach ( $values as $value ) {
168 if ( isset( $mime_values[ $value ] ) ) {
169 $new_values[] = implode( ',', $mime_values[ $value ] );
170 } else {
171 $new_values[] = $value;
172 }
173 }
174
175 $field_data['file_types'] = implode( ',', array_unique( $new_values ) );
176 return $field_data;
177 }
178 }
179