<?php

if (!class_exists('acf_form_attachment')) {
    class acf_form_attachment
    {
        function __construct()
        {
            add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
            add_filter('attachment_fields_to_edit', array($this, 'edit_attachment'), 10, 2);
            add_filter('attachment_fields_to_save', array($this, 'save_attachment'), 10, 2);
        }
        function admin_enqueue_scripts()
        {
            if (!acf_is_screen(array('attachment', 'upload'))) {
                return;
            }
            acf_enqueue_scripts(array('uploader' => true));
            if (acf_is_screen('upload')) {
                add_action('admin_footer', array($this, 'admin_footer'), 0);
            }
        }
        function admin_footer()
        {
            acf_form_data(array('screen' => 'attachment', 'post_id' => 0));
            ?>
<script type="text/javascript">
	
// WP saves attachment on any input change, so unload is not needed
acf.unload.active = 0;

</script>
			<?php 
        }
        function edit_attachment($form_fields, $post)
        {
            $is_page = acf_is_screen('attachment');
            $post_id = $post->ID;
            $el = 'tr';
            $field_groups = acf_get_field_groups(array('attachment_id' => $post_id, 'attachment' => $post_id));
            if (!empty($field_groups)) {
                ob_start();
                acf_form_data(array('screen' => 'attachment', 'post_id' => $post_id));
                echo '</td></tr>';
                foreach ($field_groups as $field_group) {
                    $fields = acf_get_fields($field_group);
                    if (!$is_page) {
                        $field_group['instruction_placement'] = 'field';
                    }
                    acf_render_fields($fields, $post_id, $el, $field_group['instruction_placement']);
                }
                echo '<tr class="compat-field-acf-blank"><td>';
                $html = ob_get_contents();
                ob_end_clean();
                $form_fields['acf-form-data'] = array('label' => '', 'input' => 'html', 'html' => $html);
            }
            return $form_fields;
        }
        function save_attachment($post, $attachment)
        {
            if (!acf_verify_nonce('attachment')) {
                return $post;
            }
            if (acf_is_ajax('save-attachment-compat')) {
                acf_save_post($post['ID']);
            } elseif (acf_validate_save_post(true)) {
                acf_save_post($post['ID']);
            }
            return $post;
        }
    }
    new acf_form_attachment();
}