PluginProbe ʕ •ᴥ•ʔ
Pods – Custom Content Types and Fields / trunk
Pods – Custom Content Types and Fields vtrunk
trunk 1.14.8 2.7.31.3 2.8.23.3 2.9.19.3 3.0.10.3 3.1.4.1 3.2.0 3.2.1 3.2.1.1 3.2.2 3.2.4 3.2.5 3.2.6 3.2.7 3.2.7.1 3.2.8 3.2.8.1 3.2.8.2 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9
pods / components / Migrate-Packages / ui / wizard.php
pods / components / Migrate-Packages / ui Last commit date
wizard.php 4 months ago
wizard.php
516 lines
1 <?php
2
3 // Don't load directly.
4 if ( ! defined( 'ABSPATH' ) ) {
5 die( '-1' );
6 }
7
8 // phpcs:ignoreFile WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound
9 ?>
10 <div class="wrap pods-admin">
11 <div id="icon-pods" class="icon32"><br /></div>
12
13 <form action="" method="post" class="pods-submittable">
14 <div class="pods-submittable-fields">
15 <?php PodsForm::output_field( 'action', 'pods_admin_components', 'hidden' ); ?>
16 <?php PodsForm::output_field( 'component', $component, 'hidden' ); ?>
17 <?php PodsForm::output_field( 'method', $method, 'hidden' ); ?>
18 <?php PodsForm::output_field( '_wpnonce', wp_create_nonce( 'pods-component-' . $component . '-' . $method ), 'hidden' ); ?>
19 <?php PodsForm::output_field( 'import_export', 'export', 'hidden' ); ?>
20
21 <h2 class="italicized"><?php esc_html_e( 'Migrate: Packages', 'pods' ); ?></h2>
22
23 <img src="<?php echo esc_url( PODS_URL ); ?>ui/images/pods-logo-notext-rgb-transparent.png" class="pods-leaf-watermark-right" />
24
25 <div id="pods-wizard-box" class="pods-wizard-steps-2 pods-wizard-hide-first" data-step-process="1">
26 <div id="pods-wizard-heading">
27 <ul>
28 <li class="pods-wizard-menu-current" data-step="1">
29 <i></i> <span>1</span> <?php esc_html_e( 'Step 1: Choose', 'pods' ); ?> <em></em>
30 </li>
31 <li data-step="2">
32 <i></i> <span>2</span> <?php esc_html_e( 'Step 2: Import / Export Package', 'pods' ); ?> <em></em>
33 </li>
34 </ul>
35 </div>
36
37 <div id="pods-wizard-main">
38 <?php
39 $api = pods_api();
40
41 $pods = $api->load_pods( array( 'fields' => false ) );
42 $pod_templates = $api->load_templates();
43 $pod_pages = $api->load_pages();
44
45 $export = true;
46
47 if ( empty( $pods ) && empty( $pod_templates ) && empty( $pod_pages ) ) {
48 $export = false;
49 }
50 ?>
51
52 <div id="pods-wizard-panel-1" class="pods-wizard-panel">
53 <div class="pods-wizard-content">
54 <p><?php esc_html_e( 'Packages allow you to import/export your Pods, Groups, Fields, and other settings between any Pods sites.', 'pods' ); ?></p>
55 <p><?php esc_html_e( 'A Pods package is stored in JSON format and can be copied or downloaded for import on another site with Pods installed.', 'pods' ); ?></p>
56 </div>
57
58 <div id="pods-wizard-options">
59 <div class="pods-wizard-options-list">
60 <div class="pods-wizard-option">
61 <a href="#pods-wizard-import" data-opt="import">
62 <div>
63 <h2><?php esc_html_e( 'Import Package', 'pods' ); ?></h2>
64
65 <p><?php esc_html_e( 'Import a package of Pods, Groups, Fields, and other settings from another site.', 'pods' ); ?></p>
66 </div>
67 <span>&#10095;</span>
68 </a>
69 </div>
70
71 <?php
72 if ( $export ) {
73 ?>
74 <div class="pods-wizard-option">
75 <a href="#pods-wizard-export" data-opt="export">
76 <div>
77 <h2><?php esc_html_e( 'Export Package', 'pods' ); ?></h2>
78
79 <p><?php esc_html_e( 'Choose which Pods, Groups, Fields, and other settings to export into a package.', 'pods' ); ?></p>
80 </div>
81 <span>&#10095;</span>
82 </a>
83 </div>
84 <?php
85 }
86 ?>
87 </div>
88 </div>
89 </div>
90
91 <div id="pods-wizard-panel-2" class="pods-wizard-panel">
92 <div class="pods-wizard-option-content" id="pods-wizard-import">
93 <div class="pods-wizard-content">
94 <p><?php esc_html_e( 'Packages allow you to import/export your Pods, Groups, Fields, and other settings between any Pods sites.', 'pods' ); ?></p>
95 </div>
96
97 <div class="stuffbox">
98 <h3><?php esc_html_e( 'Import your Package', 'pods' ); ?></h3>
99
100 <div class="inside pods-manage-field pods-dependency">
101 <div class="pods-field__container pods-field-option">
102 <?php
103 PodsForm::output_label( 'import_package_file', __( 'Upload your pods-package.json', 'pods' ) );
104 ?>
105 <input type="file" name="import_package_file" id="pods-form-ui-import-package-file" accept=".json" />
106 <button type="button"
107 id="pods-form-ui-import-package-file-reset"
108 class="button button-secondary button-small hidden"
109 aria-hidden="true">
110 <?php esc_html_e( 'Clear file', 'pods' ); ?>
111 </button>
112 </div>
113 <div class="pods-field__container pods-field-option">
114 <?php
115 PodsForm::output_label( 'import_package', __( 'Or paste the Package code', 'pods' ), __( 'If you paste the code, you may encounter issues on certain hosts where mod_security will block the submission. If you encounter an error message on submit, contact your host and let them know that you believe you are seeing a mod_security issue with /wp-admin/admin-ajax.php and they can look through your error logs to help solve it.', 'pods' ) );
116 PodsForm::output_field( 'import_package', pods_v( 'import_package', 'post' ), 'paragraph', [
117 'attributes' => [
118 'style' => 'width: 100%; max-width: 100%; height: 250px;',
119 ],
120 'disable_dfv' => true,
121 ] );
122 ?>
123 </div>
124 </div>
125 </div>
126 </div>
127
128 <div class="pods-wizard-option-content" id="pods-wizard-export">
129 <div class="pods-wizard-content">
130 <p><?php esc_html_e( 'Packages allow you to import/export your Pods, Groups, Fields, and other settings between any Pods sites.', 'pods' ); ?></p>
131
132 <p>
133 <a href="#toggle" class="button pods-wizard-toggle-all" data-toggle="all"><?php esc_html_e( 'Toggle everything on / off', 'pods' ); ?></a>
134 </p>
135 </div>
136
137 <div class="stuffbox pods-package-import-group">
138 <h3>
139 <label for="link_name"><?php esc_html_e( 'Choose whether to export Settings', 'pods' ); ?></label>
140 </h3>
141
142 <div class="inside pods-manage-field pods-dependency">
143 <div class="pods-field-option-group">
144 <div class="pods-pick-values pods-pick-checkbox pods-zebra">
145 <ul>
146 <?php
147 $data_name = 'settings';
148 $data = [
149 'all' => __( 'All Settings', 'pods' ),
150 ];
151
152 $zebra = false;
153
154 foreach ( $data as $key => $label ) {
155 $checked = true;
156
157 $class = ( $zebra ? 'even' : 'odd' );
158
159 $zebra = ( ! $zebra );
160 ?>
161 <li class="pods-zebra-<?php echo esc_attr( $class ); ?>">
162 <?php
163 PodsForm::output_field( $data_name . '[' . $key . ']', true, 'boolean', [
164 'boolean_yes_label' => $label,
165 'disable_dfv' => true,
166 ] );
167 ?>
168 </li>
169 <?php
170 }
171 ?>
172 </ul>
173 </div>
174 </div>
175 </div>
176 </div>
177
178 <?php
179 if ( ! empty( $pods ) ) {
180 $data = $pods;
181 $data_name = 'pods';
182 ?>
183 <div class="stuffbox pods-package-import-group">
184 <h3>
185 <label for="link_name"><?php esc_html_e( 'Choose which Pods to export', 'pods' ); ?></label>
186 </h3>
187
188 <div class="inside pods-manage-field pods-dependency">
189 <div class="pods-field-option-group">
190 <div class="pods-pick-values pods-pick-checkbox pods-zebra">
191 <p>
192 <a href="#toggle" class="button pods-wizard-toggle-all" data-toggle="<?php echo esc_attr( $data_name ); ?>"><?php esc_html_e( 'Toggle all on / off', 'pods' ); ?></a>
193 </p>
194
195 <ul>
196 <?php
197 $zebra = false;
198
199 foreach ( $data as $item ) {
200 $checked = true;
201
202 $class = ( $zebra ? 'even' : 'odd' );
203
204 $zebra = ( ! $zebra );
205 ?>
206 <li class="pods-zebra-<?php echo esc_attr( $class ); ?>">
207 <?php
208 PodsForm::output_field( $data_name . '[' . $item['id'] . ']', $checked, 'boolean', [
209 'boolean_yes_label' => $item['name'] . ( ! empty( $item['label'] ) ? ' (' . $item['label'] . ')' : '' ),
210 'disable_dfv' => true,
211 ] );
212 ?>
213 </li>
214 <?php
215 }
216 ?>
217 </ul>
218 </div>
219 </div>
220 </div>
221 </div>
222 <?php
223 }//end if
224
225 if ( ! empty( $pod_templates ) ) {
226 $data = $pod_templates;
227 $data_name = 'templates';
228 ?>
229 <div class="stuffbox pods-package-import-group">
230 <h3>
231 <label for="link_name"><?php esc_html_e( 'Choose which Pod Templates to export', 'pods' ); ?></label>
232 </h3>
233
234 <div class="inside pods-manage-field pods-dependency">
235 <div class="pods-field-option-group">
236 <div class="pods-pick-values pods-pick-checkbox pods-zebra">
237 <p>
238 <a href="#toggle" class="button pods-wizard-toggle-all" data-toggle="<?php echo esc_attr( $data_name ); ?>"><?php esc_html_e( 'Toggle all on / off', 'pods' ); ?></a>
239 </p>
240
241 <ul>
242 <?php
243 $zebra = false;
244
245 foreach ( $data as $item ) {
246 $checked = true;
247
248 $class = ( $zebra ? 'even' : 'odd' );
249
250 $zebra = ( ! $zebra );
251 ?>
252 <li class="pods-zebra-<?php echo esc_attr( $class ); ?>">
253 <?php
254 PodsForm::output_field( $data_name . '[' . $item['id'] . ']', $checked, 'boolean', [
255 'boolean_yes_label' => $item['name'] . ( ! empty( $item['label'] ) ? ' (' . $item['label'] . ')' : '' ),
256 'disable_dfv' => true,
257 ] );
258 ?>
259 </li>
260 <?php
261 }
262 ?>
263 </ul>
264 </div>
265 </div>
266 </div>
267 </div>
268 <?php
269 }//end if
270
271 if ( ! empty( $pod_pages ) ) {
272 $data = $pod_pages;
273 $data_name = 'pages';
274 ?>
275 <div class="stuffbox pods-package-import-group">
276 <h3>
277 <label for="link_name"><?php esc_html_e( 'Choose which Pod Pages to export', 'pods' ); ?></label>
278 </h3>
279
280 <div class="inside pods-manage-field pods-dependency">
281 <div class="pods-field-option-group">
282 <div class="pods-pick-values pods-pick-checkbox pods-zebra">
283 <p>
284 <a href="#toggle" class="button pods-wizard-toggle-all" data-toggle="<?php echo esc_attr( $data_name ); ?>"><?php esc_html_e( 'Toggle all on / off', 'pods' ); ?></a>
285 </p>
286
287 <ul>
288 <?php
289 $zebra = false;
290
291 foreach ( $data as $item ) {
292 $checked = true;
293
294 $class = ( $zebra ? 'even' : 'odd' );
295
296 $zebra = ( ! $zebra );
297 ?>
298 <li class="pods-zebra-<?php echo esc_attr( $class ); ?>">
299 <?php
300 PodsForm::output_field( $data_name . '[' . $item['id'] . ']', $checked, 'boolean', [
301 'boolean_yes_label' => $item['name'] . ( ! empty( $item['label'] ) ? ' (' . $item['label'] . ')' : '' ),
302 'disable_dfv' => true,
303 ] );
304 ?>
305 </li>
306 <?php
307 }
308 ?>
309 </ul>
310 </div>
311 </div>
312 </div>
313 </div>
314 <?php
315 }//end if
316
317 do_action( 'pods_packages_export_options', $pods, $pod_templates, $pod_pages, [] );
318 ?>
319 </div>
320
321 <span id="import-export"></span>
322
323 <div class="stuffbox hidden" id="pods-import-results">
324 <h3><?php esc_html_e( 'Imported Package', 'pods' ); ?></h3>
325
326 <div class="inside pods-manage-field pods-dependency">
327 <div class="pods-wizard-results"></div>
328 </div>
329 </div>
330
331 <div class="stuffbox hidden" id="pods-export-results">
332 <h3><?php esc_html_e( 'Exported Package', 'pods' ); ?></h3>
333
334 <div class="inside pods-manage-field pods-dependency">
335 <p>
336 <button id="pods-wizard-export-download" class="button button-secondary"><?php esc_html_e( 'Download pods-package.json', 'pods' ); ?></button>
337 <button id="pods-wizard-export-copy" class="button button-secondary"><?php esc_html_e( 'Copy the Package JSON', 'pods' ); ?></button>
338 </p>
339
340 <div class="pods-wizard-results"></div>
341 </div>
342 </div>
343 </div>
344
345 <div id="pods-wizard-actions" class="pods-wizard-button-interface">
346 <div id="pods-wizard-toolbar">
347 <button id="pods-wizard-start" class="button button-secondary hidden"><?php esc_html_e( 'Start Over', 'pods' ); ?></button>
348 <button id="pods-wizard-next" class="button button-primary hidden" data-again="<?php esc_attr_e( 'Process Again', 'pods' ); ?>" data-next="<?php esc_attr_e( 'Continue', 'pods' ); ?>" data-finished="<?php esc_attr_e( 'Finished', 'pods' ); ?>" data-processing="<?php esc_attr_e( 'Processing', 'pods' ); ?>.."><?php esc_html_e( 'Continue', 'pods' ); ?></button>
349 </div>
350 <div id="pods-wizard-finished">
351
352 </div>
353 </div>
354 </div>
355 </div>
356 </div>
357 </form>
358 </div>
359
360 <script type="text/javascript">
361 const $pods_admin_package_import_export = jQuery( '#pods-form-ui-import-export' );
362 const $pods_admin_package_import_results = jQuery( '#pods-import-results' );
363 const $pods_admin_package_export_results = jQuery( '#pods-export-results' );
364
365 var pods_admin_wizard_callback = function ( step, completed ) {
366 if ( 2 == step || !step ) {
367 $pods_admin_package_import_results.slideUp( 'fast', function () {
368 jQuery( 'div.pods-wizard-results', $pods_admin_package_import_results ).html( '' );
369 } );
370
371 $pods_admin_package_export_results.slideUp( 'fast', function () {
372 jQuery( 'div.pods-wizard-results', $pods_admin_package_export_results ).html( '' );
373 } );
374 }
375
376 return true;
377 };
378
379 var pods_admin_submit_callback = function ( id ) {
380 jQuery( '#pods-wizard-next' ).css( 'cursor', 'pointer' );
381 jQuery( '#pods-wizard-next' ).prop( 'disabled', false );
382 jQuery( '#pods-wizard-next' ).text( jQuery( '#pods-wizard-next' ).data( 'again' ) );
383
384 window.location.hash = 'import-export';
385
386 if ( 'export' === $pods_admin_package_import_export.val() ) {
387 jQuery( 'div.pods-wizard-results', $pods_admin_package_export_results ).html( id );
388 $pods_admin_package_export_results.slideDown( 'fast' );
389 } else {
390 jQuery( 'div.pods-wizard-results', $pods_admin_package_import_results ).html( id );
391 $pods_admin_package_import_results.slideDown( 'fast' );
392 }
393
394 return false;
395 };
396
397 var pods_admin_option_select_callback = function ( $opt ) {
398 $pods_admin_package_import_export.val( $opt.data( 'opt' ) );
399 jQuery( '#pods-wizard-next' ).show().removeClass( 'hidden' );
400 };
401
402 var pods_admin_wizard_startover_callback = function () {
403 $pods_admin_package_import_results.hide();
404 jQuery( 'div.pods-wizard-results', $pods_admin_package_import_results ).html( '' );
405
406 $pods_admin_package_export_results.hide();
407 jQuery( 'div.pods-wizard-results', $pods_admin_package_export_results ).html( '' );
408 };
409
410 const $pods_admin_package_import_package_code = jQuery( '#pods-form-ui-import-package' );
411 const $pods_admin_package_import_package_file = jQuery( '#pods-form-ui-import-package-file' );
412
413 let pods_admin_submit_validation = function ( valid_form ) {
414 if ( ! valid_form || 'import' !== $pods_admin_package_import_export.val() ) {
415 return valid_form;
416 }
417
418 // Check for at least one of these.
419 return (
420 '' !== $pods_admin_package_import_package_code.val()
421 || '' !== $pods_admin_package_import_package_file.val()
422 );
423 };
424
425 jQuery( function ( $ ) {
426 $( document ).Pods( 'validate' );
427 $( document ).Pods( 'submit' );
428 $( document ).Pods( 'wizard' );
429 $( document ).Pods( 'dependency' );
430 $( document ).Pods( 'advanced' );
431 $( document ).Pods( 'confirm' );
432 $( document ).Pods( 'sluggable' );
433
434 const toggle_all = {
435 all: true
436 };
437
438 $( '.pods-wizard-toggle-all' ).on( 'click', function ( e ) {
439 e.preventDefault();
440
441 const toggleData = $( this ).data( 'toggle' );
442
443 if ( 'undefined' == typeof toggle_all[toggleData] ) {
444 toggle_all[toggleData] = true;
445 }
446
447 let $parent;
448
449 if ( 'all' !== toggleData ) {
450 $parent = $( this ).closest( '.pods-field-option-group' );
451 } else {
452 $parent = $( this ).closest( '.pods-wizard-option-content' );
453 }
454
455 $parent.find( '.pods-field.pods-boolean input[type="checkbox"]' ).prop( 'checked', (!toggle_all[toggleData]) );
456
457 toggle_all[toggleData] = (!toggle_all[toggleData]);
458 } );
459
460 const $import_package_reset = $( '#pods-form-ui-import-package-file-reset' );
461 const $import_package_code_parent = $pods_admin_package_import_package_code.parent();
462
463 $pods_admin_package_import_package_file.on( 'change', function( e ) {
464 if ( ! e.target.files[0] ) {
465 $pods_admin_package_import_package_code.prop( 'readonly', false );
466 $pods_admin_package_import_package_code.prop( 'disabled', false );
467 $import_package_reset.prop( 'aria-hidden', true );
468 $import_package_reset.addClass( 'hidden' );
469 $import_package_code_parent.show();
470
471 return;
472 }
473
474 $pods_admin_package_import_package_code.val( '' );
475 $pods_admin_package_import_package_code.prop( 'readonly', true );
476 $pods_admin_package_import_package_code.prop( 'disabled', true );
477 $import_package_reset.prop( 'aria-hidden', false );
478 $import_package_reset.removeClass( 'hidden' );
479 $import_package_code_parent.hide();
480 } );
481
482 $import_package_reset.on( 'click', function() {
483 $pods_admin_package_import_package_file.val( '' );
484 $pods_admin_package_import_package_file.change();
485 } );
486
487 const $export_results = $( 'div.pods-wizard-results', $pods_admin_package_export_results );
488
489 $( '#pods-wizard-export-copy' ).on( 'click', function( e ) {
490 e.preventDefault();
491
492 const $export_textarea = $( 'textarea', $export_results );
493 const packageData = $export_textarea;
494
495 $export_textarea.select();
496
497 document.execCommand( 'copy' );
498 } );
499
500 $( '#pods-wizard-export-download' ).on( 'click', function( e ) {
501 e.preventDefault();
502
503 const packageData = $( 'textarea', $export_results ).val();
504 const fileName = 'pods-package-' + new Date().toISOString().split( 'T' )[0] + '.json';
505 const fileType = 'application/json;charset=utf-8';
506 const fileContent = new Blob( [ packageData ], { type: fileType } );
507
508 try {
509 saveAs( fileContent, fileName );
510 } catch( e ) {
511 window.open( 'data:' + fileType + ',' + encodeURIComponent( fileContent ), '_blank', '' );
512 }
513 } );
514 } );
515 </script>
516