<?php if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly if( ! class_exists('ACF_Ajax_Local_JSON_Diff') ) : class ACF_Ajax_Local_JSON_Diff extends ACF_Ajax { /** @var string The AJAX action name. */ var $action = 'acf/ajax/local_json_diff'; /** @var bool Prevents access for non-logged in users. */ var $public = false; /** * get_response * * Returns the response data to sent back. * * @date 31/7/18 * @since 5.7.2 * * @param array $request The request args. * @return mixed The response data or WP_Error. */ function get_response( $request ) { $json = array(); // Extract props. $id = isset( $request['id'] ) ? intval( $request['id'] ) : 0; // Bail ealry if missing props. if( !$id ) { return new WP_Error( 'acf_invalid_param', __( 'Invalid field group parameter(s).', 'acf' ), array( 'status' => 404 ) ); } // Disable filters and load field group directly from database. acf_disable_filters(); $field_group = acf_get_field_group( $id ); if( !$field_group ) { return new WP_Error( 'acf_invalid_id', __( 'Invalid field group ID.', 'acf' ), array( 'status' => 404 ) ); } $field_group['fields'] = acf_get_fields( $field_group ); $field_group['modified'] = get_post_modified_time( 'U', true, $field_group['ID'] ); $field_group = acf_prepare_field_group_for_export( $field_group ); // Load local field group file. $files = acf_get_local_json_files(); $key = $field_group['key']; if( !isset( $files[ $key ] ) ) { return new WP_Error( 'acf_cannot_compare', __( 'Sorry, this field group is unavailable for diff comparison.', 'acf' ), array( 'status' => 404 ) ); } $local_field_group = json_decode( file_get_contents( $files[ $key ] ), true ); // Render diff HTML. $date_format = get_option( 'date_format' ) . ' ' . get_option( 'time_format' ); $date_template = __( 'Last updated: %s', 'acf' ); $json['html'] = ' <div class="acf-diff"> <div class="acf-diff-title"> <div class="acf-diff-title-left"> <strong>' . __( 'Original field group', 'acf' ) . '</strong> <span>' . sprintf( $date_template, wp_date( $date_format, $field_group['modified'] ) ) . '</span> </div> <div class="acf-diff-title-right"> <strong>' . __( 'JSON field group (newer)', 'acf' ) . '</strong> <span>' . sprintf( $date_template, wp_date( $date_format, $local_field_group['modified'] ) ) . '</span> </div> </div> <div class="acf-diff-content"> ' . wp_text_diff( acf_json_encode( $field_group ), acf_json_encode( $local_field_group ) ) . ' </div> </div>'; return $json; } } acf_new_instance('ACF_Ajax_Local_JSON_Diff'); endif; // class_exists check