Making WordPress.org


Ignore:
Timestamp:
09/07/2016 07:13:46 PM (10 years ago)
Author:
jmdodd
Message:

Support Forums: Enable new/edit reviews.

These will be visible once the review forum is opened.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-ratings-compat.php

    r3969 r3997  
    55class Ratings_Compat {
    66
    7         var $compat = null;
    8         var $slug   = null;
    9         var $object = null;
     7        var $compat   = null;
     8        var $slug     = null;
     9        var $object   = null;
     10        var $taxonomy = null;
    1011
    1112        var $filter = false;
    1213
    13         public function __construct( $compat, $slug, $object, $rating = 0 ) {
     14        public function __construct( $compat, $slug, $taxonomy, $object ) {
    1415                if ( ! class_exists( 'WPORG_Ratings' ) ) {
    1516                        return;
    1617                }
    1718
    18                 if ( empty( $compat ) || empty( $slug ) || empty( $object ) ) {
    19                         return;
    20                 }
    21 
    22                 $this->compat = $compat;
    23                 $this->slug   = $slug;
    24                 $this->object = $object;
    25                 $this->rating = $rating;
    26 
    27                 $this->reviews_count = \WPORG_Ratings::get_rating_count( $this->compat, $this->slug, $this->rating );
     19                if ( empty( $compat ) || empty( $slug ) || empty( $taxonomy ) || empty( $object ) ) {
     20                        return;
     21                }
     22
     23                $this->compat   = $compat;
     24                $this->slug     = $slug;
     25                $this->taxonomy = $taxonomy;
     26                $this->object   = $object;
     27
    2828                $this->ratings_counts = \WPORG_Ratings::get_rating_counts( $this->compat, $this->slug );
    2929                $this->avg_rating = \WPORG_Ratings::get_avg_rating( $this->compat, $this->slug );
     
    4141                }
    4242
     43                // Total reviews count. Can be altered using $this->filter if needed.
     44                $this->reviews_count = \WPORG_Ratings::get_rating_count( $this->compat, $this->slug, 0 );
     45
    4346                // Set up the single topic.
    4447                add_action( 'bbp_template_before_lead_topic', array( $this, 'add_topic_stars' ) );
     
    4750                add_action( 'wporg_compat_before_single_view', array( $this, 'do_view_header' ) );
    4851                add_filter( 'bbp_get_topic_title', array( $this, 'get_topic_title' ), 10, 2 );
     52
     53                // Add the topic form as either a new or edit form.
     54                add_action( 'wporg_compat_new_review_notice', array( $this, 'do_template_notice' ) );
     55                add_action( 'wporg_compat_after_single_view', array( $this, 'add_topic_form' ) );
     56                add_action( 'bbp_theme_before_topic_form_content', array( $this, 'add_topic_form_stars' ), 8 );
     57
     58                // Check to see if a topic is being created/edited.
     59                add_action( 'bbp_new_topic_post_extras', array( $this, 'topic_post_extras' ) );
     60                add_action( 'bbp_edit_topic_post_extras', array( $this, 'topic_post_extras' ) );
    4961        }
    5062
     
    153165                <?php
    154166                        if ( is_user_logged_in() ) {
    155                                 echo '<a href="#postform" class="btn">';
     167                                echo '<a href="#new-post" class="btn">';
    156168                                _e( 'Add your own review', 'wporg-forums' );
    157169                                echo '</a>';
     
    184196        <?php
    185197        }
     198
     199        /**
     200         * Set the rating on topic creation or edit.
     201         *
     202         * @param int $topic_id The topic id
     203         */
     204        public function topic_post_extras( $topic_id ) {
     205                if ( isset( $_POST['rating'] ) && in_array( (int) $_POST['rating'], array( 1, 2, 3, 4, 5 ) ) ) {
     206                        if (
     207                                Plugin::REVIEWS_FORUM_ID == bbp_get_topic_forum_id( $topic_id )
     208                        &&
     209                                bbp_get_topic_author_id( $topic_id ) == get_current_user_id()
     210                        ) {
     211                                \WPORG_Ratings::set_rating( $topic_id, $this->compat, $this->slug, bbp_get_topic_author_id( $topic_id ), absint( $_POST['rating'] ) );
     212                        }
     213                }
     214        }
     215
     216        public function add_topic_form() {
     217                if ( ! $this->is_rating_view() ) {
     218                        return;
     219                }
     220
     221                if ( ! is_user_logged_in() ) {
     222                        echo '<p>';
     223                        printf(
     224                        __( 'You must %s to submit a review.You can also log in or register using the form near the top of this page.' ),
     225                        sprintf( '<a href="https://login.wordpress.org/">%s</a>', esc_html_x( 'log in', 'verb: You must log in to submit a review.', 'wporg-forums' ) ) );
     226                        echo '</p>';
     227                        return;
     228                }
     229
     230                if ( bbp_has_topics( array(
     231                        'author'       => get_current_user_id(),
     232                        'post_status'  => 'any',
     233                        'post_type'    => bbp_get_topic_post_type(),
     234                        'post_parent'  => Plugin::REVIEWS_FORUM_ID,
     235                        'tax_query'    => array( array(
     236                                'taxonomy' => $this->taxonomy,
     237                                'field'    => 'slug',
     238                                'terms'    => $this->slug,
     239                        ) ),
     240                        'no_found_rows' => true,
     241                        'orderby'       => 'ID',
     242                ) ) ) {
     243                        bbp_the_topic();
     244                        add_filter( 'bbp_is_topic_edit', '__return_true' );
     245                } else {
     246                        add_filter( 'bbp_is_topic_edit', '__return_false' );
     247                }
     248
     249                bbp_get_template_part( 'form', 'topic' );
     250        }
     251
     252        public function do_template_notice() {
     253                $report = $rate = '';
     254                switch( $this->compat ) {
     255                        case 'plugin' :
     256                                $report = __( 'If you are reporting an issue with this plugin, please post %s instead.', 'wporg-forums' );
     257                                $rate   = __( 'In order to rate a plugin, you must also submit a review.', 'wporg-forums' );
     258                                break;
     259                        case 'theme' :
     260                                $report = __( 'If you are reporting an issue with this theme, please post %s instead.', 'wporg-forums' );
     261                                $rate   = __( 'In order to rate a theme, you must also submit a review.', 'wporg-forums' );
     262                                break;
     263                }
     264                ?>
     265                <p><?php _e( 'When posting a review, follow these guidelines:', 'wporg-forums' ); ?></p>
     266                <ul>
     267                        <li><?php printf( esc_html( $report ), sprintf( '<a href="%s">%s</a>',
     268                                        esc_url( sprintf( 'https://wordpress.org/support/%s/%s/', $this->compat, $this->slug ) ),
     269                                        _x( 'here', 'please post here instead', 'wporg-forums' )
     270                                ) ); ?></li>
     271                        <li><?php echo esc_html( $rate ); ?></li>
     272                        <li><?php esc_html_e( 'Please provide as much detail as you can to justify your rating and to help others.', 'wporg-forums' ); ?></li>
     273                </ul>
     274                <?php
     275        }
     276
     277        public function add_topic_form_stars() {
     278                if ( ! $this->is_rating_view() ) {
     279                        return;
     280                }
     281
     282                if ( bbp_is_topic_edit() && bbp_get_topic_author_id() != get_current_user_id() ) {
     283                        return;
     284                }
     285
     286                \WPORG_Ratings::get_dashicons_form( $this->compat, $this->slug, true );
     287        }
     288
     289        public function is_rating_view() {
     290                if ( bbp_is_single_view() && 'reviews' == bbp_get_view_id() ) {
     291                        return true;
     292                }
     293
     294                if ( bbp_is_topic_edit() && bbp_get_topic_forum_id() == Plugin::REVIEWS_FORUM_ID ) {
     295                        return true;
     296                }
     297
     298                return false;
     299        }
    186300}
Note: See TracChangeset for help on using the changeset viewer.