PluginProbe
Float menu – awesome floating side menu / 6.1
Float menu – awesome floating side menu v6.1
7.2.5 trunk 2.1 2.2 3.0.1 3.1 3.2.2 3.3.1 3.5 3.5.1 3.5.2 3.5.3. 3.5.4 4.0 4.1 4.1.1 4.2 4.3 4.3.1 4.3.2 5.0 5.0.1 5.0.2 5.0.3 5.1 All 57 releases
float-menu / classes / Admin / ImporterExporter.php

ImporterExporter.php in Float menu – awesome floating side menu 6.1, at classes/Admin/ImporterExporter.php

217 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class ImporterExporter
5 *
6 * This class provides functionality for exporting and importing data.
7 *
8 * @package WowPlugin
9 * @subpackage Admin
10 * @author Dmytro Lobov <dev@wow-company.com>, Wow-Company
11 * @copyright 2024 Dmytro Lobov
12 * @license GPL-2.0+
13 *
14 */
15
16 namespace FloatMenuLite\Admin;
17
18 defined( 'ABSPATH' ) || exit;
19
20 use FloatMenuLite\Update\UpdateDB;
21 use FloatMenuLite\WOWP_Plugin;
22
23 /**
24 * Class ImporterExporter
25 *
26 * This class provides functionality for exporting and importing data.
27 */
28 class ImporterExporter {
29
30 public static function form_export(): void {
31 ?>
32 <form method="post">
33 <p></p>
34 <p>
35 <?php
36 submit_button( __( 'Export All Data', 'float-menu' ), 'primary', 'submit', false ); ?><?php
37 wp_nonce_field( WOWP_Plugin::PREFIX . '_nonce', WOWP_Plugin::PREFIX . '_export_data' ); ?>
38 </p>
39 </form>
40
41 <?php
42 }
43
44 public static function form_import(): void {
45 ?>
46 <form method="post" enctype="multipart/form-data" action="">
47 <p>
48 <span class="wpie-file">
49 <input type="file" name="import_file" class="" accept="*.json"/>
50 </span>
51 </p>
52 <p>
53 <label>
54 <input type="checkbox" name="wpie_import_update" value="1">
55 <?php esc_html_e( 'Update item if item already exists.', 'float-menu' ); ?>
56 </label>
57
58 </p>
59
60 <p>
61 <?php
62 submit_button( __( 'Import', 'float-menu' ), 'primary', 'submit', false ); ?><?php
63 wp_nonce_field( WOWP_Plugin::PREFIX . '_nonce', WOWP_Plugin::PREFIX . '_import_data' ); ?>
64 </p>
65 </form>
66
67 <?php
68 }
69
70 /**
71 * @throws \JsonException
72 */
73 public static function import_data(): void {
74
75 $verify = AdminActions::verify( WOWP_Plugin::PREFIX . '_import_data' );
76
77 if ( ! $verify ) {
78 return;
79 }
80
81 if ( ! isset( $_FILES['import_file'] ) || empty( $_FILES['import_file']['name'] ) ) {
82 wp_die( esc_attr__( 'Please select a file to import', 'float-menu' ),
83 esc_attr__( 'Error', 'float-menu' ),
84 [ 'response' => 400 ] );
85 }
86
87 if ( self::get_file_extension( sanitize_text_field( $_FILES['import_file']['name'] ) ) !== 'json' ) {
88 wp_die(
89 esc_html__( 'Please upload a valid .json file', 'float-menu' ),
90 esc_html__( 'Error', 'float-menu' ),
91 [ 'response' => 400 ] );
92 }
93
94 if ( empty( $_FILES['import_file']['tmp_name'] ) ) {
95 wp_die( esc_attr__( 'Please select a file to import', 'float-menu' ),
96 esc_attr__( 'Error', 'float-menu' ),
97 [ 'response' => 400 ] );
98 }
99
100 $import_file = sanitize_text_field( $_FILES['import_file']['tmp_name'] );
101 $settings = wp_json_file_decode( $import_file );
102
103 $columns = DBManager::get_columns();
104
105 $update = ! empty( $_POST['wpie_import_update'] ) ? '1' : '';
106
107 foreach ( $settings as $key => $val ) {
108 $data = [];
109 $formats = [];
110
111 foreach ( $columns as $column ) {
112 $name = $column->Field;
113
114 if ( $name === 'param' ) {
115 $param_input = maybe_unserialize( $val->$name );
116 $new_param = UpdateDB::update_param( $param_input );
117 $param_output = maybe_serialize( $new_param );
118 $data[ $name ] = $param_output;
119 } else {
120 $data[ $name ] = ! empty( $val->$name ) ? $val->$name : '';
121 }
122
123 if ( $name === 'id' || $name === 'status' || $name === 'mode' ) {
124 $formats[] = '%d';
125 } else {
126 $formats[] = '%s';
127 }
128 }
129
130 $check_row = DBManager::check_row( $data['id'] );
131
132 if ( ! empty( $update ) && ! empty( $check_row ) ) {
133 $where = [
134 'id' => absint( $data['id'] ),
135 ];
136 $index = array_search( 'id', array_keys( $data ), true );
137 unset( $data['id'], $formats[ $index ] );
138
139 DBManager::update( $data, $where, $formats );
140 } elseif ( ! empty( $check_row ) ) {
141 $index = array_search( 'id', array_keys( $data ), true );
142 unset( $data['id'], $formats[ $index ] );
143
144 DBManager::insert( $data, $formats );
145 } else {
146 DBManager::insert( $data, $formats );
147 }
148 }
149
150 $redirect_link = add_query_arg( [
151 'page' => WOWP_Plugin::SLUG,
152 ], admin_url( 'admin.php' ) );
153
154 wp_safe_redirect( $redirect_link );
155 exit;
156 }
157
158 private static function get_file_extension( $str ) {
159 $parts = explode( '.', $str );
160
161 return end( $parts );
162 }
163
164 /**
165 * @throws \JsonException
166 */
167 public static function export_item( $id = 0, $action = '' ) {
168 $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
169 $action = isset( $_GET['action'] ) ? sanitize_text_field( wp_unslash( $_GET['action'] ) ) : $action;
170 $id = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : $id;
171
172 if ( ( $page !== WOWP_Plugin::SLUG ) || ( $action !== 'export' ) || empty( $id ) ) {
173 return false;
174 }
175
176 $data = DBManager::get_data_by_id( $id );
177 if ( ! $data ) {
178 return false;
179 }
180
181 $name = trim( $data->title );
182 $name = str_replace( ' ', '-', $name );
183 $file_name = $name . '-database-' . gmdate( 'm-d-Y' ) . '.json';
184 self::export( $file_name, [ $data ] );
185
186 return true;
187 }
188
189 /**
190 * @throws \JsonException
191 */
192 public static function export_data(): bool {
193 $file_name = WOWP_Plugin::SHORTCODE . '-database-' . gmdate( 'm-d-Y' ) . '.json';
194 $data = DBManager::get_all_data();
195 if ( empty( $data ) ) {
196 return false;
197 }
198 self::export( $file_name, $data );
199
200 return true;
201 }
202
203 /**
204 * @throws \JsonException
205 */
206 private static function export( $file_name, $data ): void {
207 ignore_user_abort( true );
208 nocache_headers();
209 header( 'Content-Type: application/json; charset=utf-8' );
210 header( 'Content-Disposition: attachment; filename=' . $file_name );
211 header( "Expires: 0" );
212
213 echo wp_json_encode( $data );
214 exit;
215 }
216
217 }