* @copyright Copyright (C) 2019 wpopal.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * @website http://www.wpopal.com * @support http://www.wpopal.com/support/forum.html */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } /** * Class Opalestate_Rating_MetaBox */ class Opalestate_Rating_MetaBox { public function register_admin_comment_fields() { $rating_supports = Opalestate_Rating::get_rating_supports(); foreach ( $rating_supports as $key => $support ) { $this->register_comment_metabox( $support['post_type'], $support['features_cpt'] ); } } public function register_admin_feature_fields() { $rating_supports = Opalestate_Rating::get_rating_supports(); foreach ( $rating_supports as $key => $support ) { $this->register_feature_metabox( $support['features_cpt'] ); } } /** * Hook in and register a metabox for the admin comment edit page. */ public function register_comment_metabox( $cpt_support, $cpt_feature ) { if ( ! isset( $_GET['c'] ) ) { return; } $comment_type = get_comment_type( sanitize_text_field( $_GET['c'] ) ); if ( $comment_type !== $this->get_comment_type( $cpt_support ) ) { return; } $features = Opalestate_Rating_Helper::get_features( $cpt_feature ); $cmb = new_cmb2_box( [ 'id' => $cpt_support . '_comment_meta', 'title' => $features ? esc_html__( 'Rating features', 'opalestate-pro' ) : esc_html__( 'Rating', 'opalestate-pro' ), 'object_types' => [ 'comment' ], ] ); if ( $features ) { foreach ( $features as $feature_slug => $feature_title ) { $id = $cpt_feature . '_' . $feature_slug; $cmb->add_field( [ 'id' => $id, 'type' => 'select', 'name' => $feature_title, 'options' => [ '1' => '1 ★', '2' => '2 ★★', '3' => '3 ★★★', '4' => '4 ★★★★', '5' => '5 ★★★★★', ], // 'show_on_cb' => function ( $cmb ) { // return isset( $_GET['c'] ); // }, ] ); } } else { $cmb->add_field( [ 'id' => 'opalestate_rating', 'type' => 'select', 'options' => [ '1' => '1 ★', '2' => '2 ★★', '3' => '3 ★★★', '4' => '4 ★★★★', '5' => '5 ★★★★★', ], // 'show_on_cb' => function ( $cmb ) { // return isset( $_GET['c'] ); // }, ] ); } } /** * Hook in and register a metabox for the admin comment edit page. */ public function register_feature_metabox( $cpt_feature ) { $cmb = new_cmb2_box( [ 'id' => $cpt_feature . '_meta', 'title' => esc_html__( 'Data', 'opalestate-pro' ), 'object_types' => [ $cpt_feature ], ] ); $cmb->add_field( [ 'name' => esc_html__( 'Description', 'opalestate-pro' ), 'id' => 'opalestate_feature_desc', 'type' => 'textarea_small', ] ); $cmb->add_field( [ 'name' => esc_html__( 'Order', 'opalestate-pro' ), 'desc' => esc_html__( 'Set a priority to display', 'opalestate-pro' ), 'id' => 'opalestate_feature_order', 'type' => 'text_small', 'attributes' => [ 'type' => 'number', ], 'default' => 0, ] ); } /** * Save meta box data * * @param mixed $data Data to save. * @return mixed */ public static function save( $data ) { if ( ! isset( $data['comment_post_ID'] ) || ! $data['comment_post_ID'] ) { return $data; } $comment_post_ID = $data['comment_post_ID']; $cpt_support = get_post_type( $comment_post_ID ); $rating_supports = Opalestate_Rating::get_rating_supports(); if ( ! isset( $rating_supports[ $cpt_support ] ) || ! isset( $rating_supports[ $cpt_support ]['features_cpt'] ) ) { return $data; } $cpt_feature = $rating_supports[ $cpt_support ]['features_cpt']; $comment_id = $data['comment_ID']; $features = Opalestate_Rating_Helper::get_features( $cpt_feature ); if ( $features ) { foreach ( $features as $feature_slug => $feature_title ) { $id = $cpt_feature . '_' . $feature_slug; if ( isset( $_POST[ $id ] ) && ( $_POST[ $id ] > 0 ) && ( $_POST[ $id ] <= 5 ) ) { update_comment_meta( $comment_id, $id, intval( wp_unslash( $_POST[ $id ] ) ) ); // WPCS: input var ok. } } } else { if ( isset( $_POST['opalestate_rating'] ) && ( $_POST['opalestate_rating'] > 0 ) && ( $_POST['opalestate_rating'] <= 5 ) ) { update_comment_meta( $comment_id, 'opalestate_rating', intval( wp_unslash( $_POST['opalestate_rating'] ) ) ); // WPCS: input var ok. } } // Return regular value after updating. return $data; } /** * Gets comment type. * * @return string */ public function get_comment_type( $cpt_support ) { return str_replace( 'opalestate_', '', $cpt_support ) . '_review'; } }