343 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
| *  ACF Comment Form Class
 | |
| *
 | |
| *  All the logic for adding fields to comments
 | |
| *
 | |
| *  @class       acf_form_comment
 | |
| *  @package     ACF
 | |
| *  @subpackage  Forms
 | |
| */
 | |
| 
 | |
| if ( ! class_exists( 'acf_form_comment' ) ) :
 | |
| 
 | |
| 	class acf_form_comment {
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  __construct
 | |
| 		*
 | |
| 		*  This function will setup the class functionality
 | |
| 		*
 | |
| 		*  @type    function
 | |
| 		*  @date    5/03/2014
 | |
| 		*  @since   5.0.0
 | |
| 		*
 | |
| 		*  @param   n/a
 | |
| 		*  @return  n/a
 | |
| 		*/
 | |
| 
 | |
| 		function __construct() {
 | |
| 
 | |
| 			// actions
 | |
| 			add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
 | |
| 
 | |
| 			// render
 | |
| 			add_filter( 'comment_form_field_comment', array( $this, 'comment_form_field_comment' ), 999, 1 );
 | |
| 
 | |
| 			// add_action( 'comment_form_logged_in_after',       array( $this, 'add_comment') );
 | |
| 			// add_action( 'comment_form',                       array( $this, 'add_comment') );
 | |
| 
 | |
| 			// save
 | |
| 			add_action( 'edit_comment', array( $this, 'save_comment' ), 10, 1 );
 | |
| 			add_action( 'comment_post', array( $this, 'save_comment' ), 10, 1 );
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  validate_page
 | |
| 		*
 | |
| 		*  This function will check if the current page is for a post/page edit form
 | |
| 		*
 | |
| 		*  @type    function
 | |
| 		*  @date    23/06/12
 | |
| 		*  @since   3.1.8
 | |
| 		*
 | |
| 		*  @param   n/a
 | |
| 		*  @return  (boolean)
 | |
| 		*/
 | |
| 
 | |
| 		function validate_page() {
 | |
| 
 | |
| 			// global
 | |
| 			global $pagenow;
 | |
| 
 | |
| 			// validate page
 | |
| 			if ( $pagenow == 'comment.php' ) {
 | |
| 
 | |
| 				return true;
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			// return
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  admin_enqueue_scripts
 | |
| 		*
 | |
| 		*  This action is run after post query but before any admin script / head actions.
 | |
| 		*  It is a good place to register all actions.
 | |
| 		*
 | |
| 		*  @type    action (admin_enqueue_scripts)
 | |
| 		*  @date    26/01/13
 | |
| 		*  @since   3.6.0
 | |
| 		*
 | |
| 		*  @param   n/a
 | |
| 		*  @return  n/a
 | |
| 		*/
 | |
| 
 | |
| 		function admin_enqueue_scripts() {
 | |
| 
 | |
| 			// validate page
 | |
| 			if ( ! $this->validate_page() ) {
 | |
| 
 | |
| 				return;
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			// load acf scripts
 | |
| 			acf_enqueue_scripts();
 | |
| 
 | |
| 			// actions
 | |
| 			add_action( 'admin_footer', array( $this, 'admin_footer' ), 10, 1 );
 | |
| 			add_action( 'add_meta_boxes_comment', array( $this, 'edit_comment' ), 10, 1 );
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  edit_comment
 | |
| 		*
 | |
| 		*  This function is run on the admin comment.php page and will render the ACF fields within custom metaboxes to look native
 | |
| 		*
 | |
| 		*  @type    function
 | |
| 		*  @date    19/10/13
 | |
| 		*  @since   5.0.0
 | |
| 		*
 | |
| 		*  @param   $comment (object)
 | |
| 		*  @return  n/a
 | |
| 		*/
 | |
| 
 | |
| 		function edit_comment( $comment ) {
 | |
| 
 | |
| 			// vars
 | |
| 			$post_id = "comment_{$comment->comment_ID}";
 | |
| 
 | |
| 			// get field groups
 | |
| 			$field_groups = acf_get_field_groups(
 | |
| 				array(
 | |
| 					'comment' => get_post_type( $comment->comment_post_ID ),
 | |
| 				)
 | |
| 			);
 | |
| 
 | |
| 			// render
 | |
| 			if ( ! empty( $field_groups ) ) {
 | |
| 
 | |
| 				// render post data
 | |
| 				acf_form_data(
 | |
| 					array(
 | |
| 						'screen'  => 'comment',
 | |
| 						'post_id' => $post_id,
 | |
| 					)
 | |
| 				);
 | |
| 
 | |
| 				foreach ( $field_groups as $field_group ) {
 | |
| 
 | |
| 						// load fields
 | |
| 						$fields = acf_get_fields( $field_group );
 | |
| 
 | |
| 						// vars
 | |
| 						$o = array(
 | |
| 							'id'         => 'acf-' . $field_group['ID'],
 | |
| 							'key'        => $field_group['key'],
 | |
| 							// 'style'           => $field_group['style'],
 | |
| 							'label'      => $field_group['label_placement'],
 | |
| 							'edit_url'   => '',
 | |
| 							'edit_title' => __( 'Edit field group', 'acf' ),
 | |
| 							// 'visibility'  => $visibility
 | |
| 						);
 | |
| 
 | |
| 						// edit_url
 | |
| 						if ( $field_group['ID'] && acf_current_user_can_admin() ) {
 | |
| 
 | |
| 							$o['edit_url'] = admin_url( 'post.php?post=' . $field_group['ID'] . '&action=edit' );
 | |
| 
 | |
| 						}
 | |
| 
 | |
| 						?>
 | |
| 				<div id="acf-<?php echo $field_group['ID']; ?>" class="stuffbox">
 | |
| 					<h3 class="hndle"><?php echo $field_group['title']; ?></h3>
 | |
| 					<div class="inside">
 | |
| 							<?php acf_render_fields( $fields, $post_id, 'div', $field_group['instruction_placement'] ); ?>
 | |
| 						<script type="text/javascript">
 | |
| 						if( typeof acf !== 'undefined' ) {
 | |
| 								
 | |
| 							acf.newPostbox(<?php echo json_encode( $o ); ?>);	
 | |
| 						
 | |
| 						}
 | |
| 						</script>
 | |
| 					</div>
 | |
| 				</div>
 | |
| 							<?php
 | |
| 
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  comment_form_field_comment
 | |
| 		*
 | |
| 		*  description
 | |
| 		*
 | |
| 		*  @type    function
 | |
| 		*  @date    18/04/2016
 | |
| 		*  @since   5.3.8
 | |
| 		*
 | |
| 		*  @param   $post_id (int)
 | |
| 		*  @return  $post_id (int)
 | |
| 		*/
 | |
| 
 | |
| 		function comment_form_field_comment( $html ) {
 | |
| 
 | |
| 			// global
 | |
| 			global $post;
 | |
| 
 | |
| 			// vars
 | |
| 			$post_id = false;
 | |
| 
 | |
| 			// get field groups
 | |
| 			$field_groups = acf_get_field_groups(
 | |
| 				array(
 | |
| 					'comment' => $post->post_type,
 | |
| 				)
 | |
| 			);
 | |
| 
 | |
| 			// bail early if no field groups
 | |
| 			if ( ! $field_groups ) {
 | |
| 				return $html;
 | |
| 			}
 | |
| 
 | |
| 			// enqueue scripts
 | |
| 			acf_enqueue_scripts();
 | |
| 
 | |
| 			// ob
 | |
| 			ob_start();
 | |
| 
 | |
| 				// render post data
 | |
| 				acf_form_data(
 | |
| 					array(
 | |
| 						'screen'  => 'comment',
 | |
| 						'post_id' => $post_id,
 | |
| 					)
 | |
| 				);
 | |
| 
 | |
| 				echo '<div class="acf-comment-fields acf-fields -clear">';
 | |
| 
 | |
| 			foreach ( $field_groups as $field_group ) {
 | |
| 
 | |
| 				$fields = acf_get_fields( $field_group );
 | |
| 
 | |
| 				acf_render_fields( $fields, $post_id, 'p', $field_group['instruction_placement'] );
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 				echo '</div>';
 | |
| 
 | |
| 			// append
 | |
| 			$html .= ob_get_contents();
 | |
| 			ob_end_clean();
 | |
| 
 | |
| 			// return
 | |
| 			return $html;
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  save_comment
 | |
| 		*
 | |
| 		*  This function will save the comment data
 | |
| 		*
 | |
| 		*  @type    function
 | |
| 		*  @date    19/10/13
 | |
| 		*  @since   5.0.0
 | |
| 		*
 | |
| 		*  @param   comment_id (int)
 | |
| 		*  @return  n/a
 | |
| 		*/
 | |
| 
 | |
| 		function save_comment( $comment_id ) {
 | |
| 
 | |
| 			// bail early if not valid nonce
 | |
| 			if ( ! acf_verify_nonce( 'comment' ) ) {
 | |
| 				return $comment_id;
 | |
| 			}
 | |
| 
 | |
| 			// kses
 | |
| 			if ( isset( $_POST['acf'] ) ) {
 | |
| 				$_POST['acf'] = wp_kses_post_deep( $_POST['acf'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized with wp_kses_post_deep().
 | |
| 			}
 | |
| 
 | |
| 			// validate and save
 | |
| 			if ( acf_validate_save_post( true ) ) {
 | |
| 				acf_save_post( "comment_{$comment_id}" );
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/*
 | |
| 		*  admin_footer
 | |
| 		*
 | |
| 		*  description
 | |
| 		*
 | |
| 		*  @type    function
 | |
| 		*  @date    27/03/2015
 | |
| 		*  @since   5.1.5
 | |
| 		*
 | |
| 		*  @param   $post_id (int)
 | |
| 		*  @return  $post_id (int)
 | |
| 		*/
 | |
| 
 | |
| 		function admin_footer() {
 | |
| 
 | |
| 			?>
 | |
| <script type="text/javascript">
 | |
| (function($) {
 | |
| 	
 | |
| 	// vars
 | |
| 	var $spinner = $('#publishing-action .spinner');
 | |
| 	
 | |
| 	
 | |
| 	// create spinner if not exists (may exist in future WP versions)
 | |
| 	if( !$spinner.exists() ) {
 | |
| 		
 | |
| 		// create spinner
 | |
| 		$spinner = $('<span class="spinner"></span>');
 | |
| 		
 | |
| 		
 | |
| 		// append
 | |
| 		$('#publishing-action').prepend( $spinner );
 | |
| 		
 | |
| 	}
 | |
| 	
 | |
| })(jQuery);	
 | |
| </script>
 | |
| 			<?php
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	new acf_form_comment();
 | |
| 
 | |
| endif;
 | |
| 
 | |
| ?>
 |