abr = $abr; $this->version = $version; } /** * Register admin page * * @since 1.0.0 */ public function register_options_page() { add_options_page( esc_html__( 'Reviews', 'absolute-reviews' ), esc_html__( 'Reviews', 'absolute-reviews' ), 'manage_options', 'absolute-reviews', array( $this, 'build_options_page' ) ); } /** * Build admin page * * @since 1.0.0 */ public function build_options_page() { if ( ! current_user_can( 'manage_options' ) ) { wp_die( esc_html__( 'You do not have sufficient rights to view this page.', 'absolute-reviews' ) ); } $indicators = abr_default_indicators(); $this->save_options_page(); ?>

">
>

1, '_builtin' => false, ) ); unset( $post_types['attachment'] ); // Merge post types. $post_types = array_merge( abr_default_post_types(), $post_types ); // Get types of option. $option_types = get_option( 'abr_review_post_types', abr_default_post_types() ); foreach ( $post_types as $post_type ) { ?>

%s

', esc_html__( 'Settings saved.', 'absolute-reviews' ) ); } } /** * Addd new Meta Box for Review. */ public function metabox_review_register() { // Get types of option. $option_types = get_option( 'abr_review_post_types', abr_default_post_types() ); if ( $option_types ) { add_meta_box( 'abr_review_metabox', esc_html__( 'Review Options', 'absolute-reviews' ), array( $this, 'metabox_review_callback' ), $option_types, 'normal', 'high', null ); } } /** * Callback for Review Meta Box. * * @param object $post Object of post. */ public function metabox_review_callback( $post ) { $review_settings = abr_get_post_metadata( $post->ID, '_abr_review_settings', true ); $review_heading = abr_get_post_metadata( $post->ID, '_abr_review_heading', true ); $review_desc = abr_get_post_metadata( $post->ID, '_abr_review_desc', true ); $review_legend = abr_get_post_metadata( $post->ID, '_abr_review_legend', true ); $review_type = abr_get_post_metadata( $post->ID, '_abr_review_type', true, 'percentage' ); $review_items = abr_get_post_metadata( $post->ID, '_abr_review_items', true, array() ); $review_main_scale = abr_get_post_metadata( $post->ID, '_abr_review_main_scale', true, true ); $review_auto_score = abr_get_post_metadata( $post->ID, '_abr_review_auto_score', true, true ); $review_total_score = abr_get_post_metadata( $post->ID, '_abr_review_total_score', true ); $review_pros_heading = abr_get_post_metadata( $post->ID, '_abr_review_pros_heading', true ); $review_pros_items = abr_get_post_metadata( $post->ID, '_abr_review_pros_items', true, array() ); $review_cons_heading = abr_get_post_metadata( $post->ID, '_abr_review_cons_heading', true ); $review_cons_items = abr_get_post_metadata( $post->ID, '_abr_review_cons_items', true, array() ); $review_schema_heading = abr_get_post_metadata( $post->ID, '_abr_review_schema_heading', true ); $review_schema_desc = abr_get_post_metadata( $post->ID, '_abr_review_schema_desc', true ); $review_schema_author = abr_get_post_metadata( $post->ID, '_abr_review_schema_author', true ); $review_schema_author_custom = abr_get_post_metadata( $post->ID, '_abr_review_schema_author_custom', true ); ?>
>
>
>
$name ) { ?>
' . esc_html__( 'Criterion', 'absolute-reviews' ) . ''; ?>
$name ) { ?>



$name ) { ?>

">
$value ) { if ( $value > $max ) { $review_items['val'][ $key ] = $max; } } } } update_post_meta( $post_id, '_abr_review_items', $review_items ); } else { update_post_meta( $post_id, '_abr_review_items', array() ); } if ( isset( $_POST['abr_review_main_scale'] ) ) { // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_main_scale', 1 ); } else { update_post_meta( $post_id, '_abr_review_main_scale', '' ); } if ( isset( $_POST['abr_review_auto_score'] ) ) { // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_auto_score', 1 ); } else { update_post_meta( $post_id, '_abr_review_auto_score', '' ); } if ( isset( $_POST['abr_review_total_score'] ) ) { $review_total_score = sanitize_text_field( $_POST['abr_review_total_score'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_total_score', $review_total_score ); } if ( isset( $_POST['abr_review_desc'] ) ) { // Input var ok; sanitization ok. $review_desc = sanitize_text_field( $_POST['abr_review_desc'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_desc', $review_desc ); } if ( isset( $_POST['abr_review_pros_heading'] ) ) { $review_pros_heading = sanitize_text_field( $_POST['abr_review_pros_heading'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_pros_heading', $review_pros_heading ); } if ( isset( $_POST['abr_review_pros_items'] ) ) { // Input var ok; sanitization ok. $review_pros_items = map_deep( $_POST['abr_review_pros_items'], 'sanitize_text_field' ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_pros_items', $review_pros_items ); } else { update_post_meta( $post_id, '_abr_review_pros_items', array() ); } if ( isset( $_POST['abr_review_cons_heading'] ) ) { $review_cons_heading = sanitize_text_field( $_POST['abr_review_cons_heading'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_cons_heading', $review_cons_heading ); } if ( isset( $_POST['abr_review_cons_items'] ) ) { // Input var ok; sanitization ok. $review_cons_items = map_deep( $_POST['abr_review_cons_items'], 'sanitize_text_field' ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_cons_items', $review_cons_items ); } else { update_post_meta( $post_id, '_abr_review_cons_items', array() ); } if ( isset( $_POST['abr_review_legend'] ) ) { // Input var ok; sanitization ok. $review_legend = sanitize_text_field( $_POST['abr_review_legend'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_legend', $review_legend ); } if ( isset( $_POST['abr_review_schema_heading'] ) ) { $review_schema_heading = sanitize_text_field( $_POST['abr_review_schema_heading'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_schema_heading', $review_schema_heading ); } if ( isset( $_POST['abr_review_schema_desc'] ) ) { $review_schema_desc = sanitize_text_field( $_POST['abr_review_schema_desc'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_schema_desc', $review_schema_desc ); } if ( isset( $_POST['abr_review_schema_author'] ) ) { $review_schema_author = sanitize_text_field( $_POST['abr_review_schema_author'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_schema_author', $review_schema_author ); } if ( isset( $_POST['abr_review_schema_author_custom'] ) ) { $review_schema_author_custom = sanitize_text_field( $_POST['abr_review_schema_author_custom'] ); // Input var ok; sanitization ok. update_post_meta( $post_id, '_abr_review_schema_author_custom', $review_schema_author_custom ); } // Review total score. $total_score = (float) $this->calc_review_total_score( $post_id, $review_type, $review_items ); /* ------------------------ */ // Save total score number. $review_type = abr_get_post_metadata( $post_id, '_abr_review_type', true, 'percentage' ); $review_auto_score = abr_get_post_metadata( $post_id, '_abr_review_auto_score', true, true ); if ( empty( $review_auto_score ) ) { $total_score = (float) abr_get_post_metadata( $post_id, '_abr_review_total_score', true ); } // Vars. switch ( $review_type ) { case 'percentage': $max = 100; break; case 'point-5': $max = 5; break; case 'point-10': $max = 10; break; case 'star': $max = 5; break; } // Validate value. switch ( $review_type ) { case 'percentage': case 'point-5': case 'point-10': $total_score = ( $total_score <= $max ) ? round( $total_score ) : $max; break; case 'star': $total_score = ( $total_score <= $max ) ? round( $total_score, 1 ) : $max; break; } update_post_meta( $post_id, '_abr_review_total_score_number', (float) $total_score ); } } /** * Calc Total Score * * @param int $post_id Post ID. * @param string $review_type Type of review. * @param array $review_items Array list items. */ public function calc_review_total_score( $post_id, $review_type, $review_items ) { /* Review Type */ if ( $review_type ) { /* Set Score */ switch ( $review_type ) { case 'star': $stars_count = 5; break; case 'point-5': $points_count = 5; break; case 'point-10': $points_count = 10; break; } if ( isset( $review_items['name'] ) && $review_items['name'] ) { $average = 0; $review_items_count = 0; foreach ( $review_items['name'] as $key => $item_name ) { if ( ! $item_name ) { continue; } $item_value = floatval( $review_items['val'][ $key ] ); /* Get Item Value */ switch ( $review_type ) { case 'star': $item_value = ( $item_value <= $stars_count ) ? $item_value : $stars_count; break; case 'point-5': case 'point-10': $item_value = ( $item_value <= $points_count ) ? $item_value : $points_count; break; } $review_items_count++; $average += floatval( $item_value ); } if ( $average > 0 ) { $average = $average / $review_items_count; $average = round( $average, 1 ); } return $average; } } } /** * Register the stylesheets and JavaScript for the admin area. * * @param string $page Current page. */ public function admin_enqueue_scripts( $page ) { // Styles. wp_enqueue_style( $this->abr, abr_style( plugin_dir_url( __FILE__ ) . 'css/absolute-reviews-admin.css' ), array(), $this->version, 'all' ); if ( in_array( $page, array( 'post.php', 'post-new.php' ), true ) ) { wp_enqueue_script( 'jquery-ui-sortable' ); wp_enqueue_script( 'jquery-ui-tabs' ); // Scripts. wp_enqueue_script( $this->abr, plugin_dir_url( __FILE__ ) . 'js/absolute-reviews-admin.js', array( 'jquery', 'jquery-ui-tabs', 'jquery-ui-sortable' ), $this->version, false ); } } }