123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly
- }
- if ( ! class_exists( 'ACF_Admin_Tool_Import' ) ) :
- class ACF_Admin_Tool_Import extends ACF_Admin_Tool {
- /**
- * initialize
- *
- * This function will initialize the admin tool
- *
- * @date 10/10/17
- * @since 5.6.3
- *
- * @param n/a
- * @return n/a
- */
- function initialize() {
- // vars
- $this->name = 'import';
- $this->title = __( 'Import Field Groups', 'acf' );
- $this->icon = 'dashicons-upload';
- }
- /**
- * html
- *
- * This function will output the metabox HTML
- *
- * @date 10/10/17
- * @since 5.6.3
- *
- * @param n/a
- * @return n/a
- */
- function html() {
- ?>
- <div class="acf-postbox-header">
- <h2 class="acf-postbox-title"><?php _e( 'Import Field Groups', 'acf' ); ?></h2>
- <div class="acf-tip"><i tabindex="0" class="acf-icon acf-icon-help acf-js-tooltip" title="<?php esc_attr_e( 'Select the Advanced Custom Fields JSON file you would like to import. When you click the import button below, ACF will import the field groups', 'acf' ); ?>">?</i></div>
- </div>
- <div class="acf-postbox-inner">
- <div class="acf-fields">
- <?php
- acf_render_field_wrap(
- array(
- 'label' => __( 'Select File', 'acf' ),
- 'type' => 'file',
- 'name' => 'acf_import_file',
- 'value' => false,
- 'uploader' => 'basic',
- )
- );
- ?>
- </div>
- <p class="acf-submit">
- <input type="submit" class="acf-btn" value="<?php _e( 'Import JSON', 'acf' ); ?>" />
- </p>
- </div>
- <?php
- }
- /**
- * submit
- *
- * This function will run when the tool's form has been submit
- *
- * @date 10/10/17
- * @since 5.6.3
- *
- * @param n/a
- * @return n/a
- */
- function submit() {
- // Check file size.
- if ( empty( $_FILES['acf_import_file']['size'] ) ) {
- return acf_add_admin_notice( __( 'No file selected', 'acf' ), 'warning' );
- }
- $file = acf_sanitize_files_array( $_FILES['acf_import_file'] );
- // Check errors.
- if ( $file['error'] ) {
- return acf_add_admin_notice( __( 'Error uploading file. Please try again', 'acf' ), 'warning' );
- }
- // Check file type.
- if ( pathinfo( $file['name'], PATHINFO_EXTENSION ) !== 'json' ) {
- return acf_add_admin_notice( __( 'Incorrect file type', 'acf' ), 'warning' );
- }
- // Read JSON.
- $json = file_get_contents( $file['tmp_name'] );
- $json = json_decode( $json, true );
- // Check if empty.
- if ( ! $json || ! is_array( $json ) ) {
- return acf_add_admin_notice( __( 'Import file empty', 'acf' ), 'warning' );
- }
- // Ensure $json is an array of groups.
- if ( isset( $json['key'] ) ) {
- $json = array( $json );
- }
- // Remeber imported field group ids.
- $ids = array();
- // Loop over json
- foreach ( $json as $field_group ) {
- // Search database for existing field group.
- $post = acf_get_field_group_post( $field_group['key'] );
- if ( $post ) {
- $field_group['ID'] = $post->ID;
- }
- // Import field group.
- $field_group = acf_import_field_group( $field_group );
- // append message
- $ids[] = $field_group['ID'];
- }
- // Count number of imported field groups.
- $total = count( $ids );
- // Generate text.
- $text = sprintf( _n( 'Imported 1 field group', 'Imported %s field groups', $total, 'acf' ), $total );
- // Add links to text.
- $links = array();
- foreach ( $ids as $id ) {
- $links[] = '<a href="' . get_edit_post_link( $id ) . '">' . get_the_title( $id ) . '</a>';
- }
- $text .= ' ' . implode( ', ', $links );
- // Add notice
- acf_add_admin_notice( $text, 'success' );
- }
- }
- // initialize
- acf_register_admin_tool( 'ACF_Admin_Tool_Import' );
- endif; // class_exists check
- ?>
|