176 lines
5.0 KiB
PHP
Executable File
176 lines
5.0 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Opalestate_Rating_MetaBox
|
|
*
|
|
* @package opalestate
|
|
* @author Opal Team <info@wpopal.com >
|
|
* @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';
|
|
}
|
|
}
|