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