Making WordPress.org


Ignore:
Timestamp:
08/31/2016 04:58:29 PM (10 years ago)
Author:
jmdodd
Message:

Support Forums: Move logic into parent class, and display-specific functions into child compat classes.

Theme and plugin views share many behaviors; to avoid trying to keep both updated, this moves taxonomy registration, tests for loading actions and filters, view registration, rewrite rules, and general display logic into the general directory compat class.

Constants, helper functions, and unique display methods have been separated into their respective plugin or theme compat class.

File:
1 edited

Legend:

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

    r3846 r3892  
    77    const COMPAT = 'plugin';
    88
    9     var $slug = '';
    10     var $plugin = '';
     9    var $slug   = false;
     10    var $plugin = null;
    1111
    1212    function compat() {
    1313        return self::COMPAT;
     14    }
     15
     16    function compat_title() {
     17        return __( 'Plugin Support', 'wporg-forums' );
    1418    }
    1519
     
    3539
    3640    public function __construct() {
    37         if ( defined( 'WPORG_SUPPORT_FORUMS_BLOGID' ) && get_current_blog_id() == WPORG_SUPPORT_FORUMS_BLOGID ) {
    38             // We have to add the custom view before bbPress runs its own action
    39             // on parse_query at priority 2.
    40             add_action( 'parse_query', array( $this, 'parse_query' ), 1 );
    41 
    42             // Add parent class hooks.
    43             add_action( 'plugins_loaded', array( $this, 'init' ) );
    44         }
     41        $this->init();
    4542    }
    4643
     
    5451        }
    5552
    56         $plugin = $this->get_plugin_data( $slug );
     53        $plugin = $this->get_object( $slug );
    5754        if ( ! $plugin ) {
    5855            return;
    5956        } else {
    60             $this->slug  = $slug;
    61             $this->plugin = $plugin;
     57            $this->slug         = $slug;
     58            $this->plugin       = $plugin;
     59            $this->authors      = $this->get_authors( $slug );
     60            $this->contributors = $this->get_contributors( $slug );
    6261        }
    63 
    64         // Add plugin support view.
    65         bbp_register_view(
    66             self::COMPAT,
    67             __( 'Plugin Support', 'wporg-forums' ),
    68             array(
    69                 'post_parent'   => Plugin::PLUGINS_FORUM_ID,
    70                 'tax_query'     => array( array(
    71                     'taxonomy'  => $this->taxonomy(),
    72                     'field'     => 'slug',
    73                     'terms'     => $slug,
    74                 ) ),
    75                 'orderby'       => '',
    76                 'show_stickies' => false,
    77             )
    78         );
    79 
    80         // Add plugin review view.
    81         bbp_register_view(
    82             'reviews',
    83             __( 'Reviews', 'wporg-forums' ),
    84             array(
    85                 'post_parent'   => Plugin::REVIEWS_FORUM_ID,
    86                 'tax_query'     => array( array(
    87                     'taxonomy'  => $this->taxonomy(),
    88                     'field'     => 'slug',
    89                     'terms'     => $slug,
    90                 ) ),
    91                 'orderby'       => '',
    92                 'show_stickies' => false,
    93             )
    94         );
    9562    }
    9663
    97     public function get_plugin_data( $slug = '' ) {
    98         global $wpdb;
     64    public function do_view_sidebar() {
     65        ?>
     66        <div>
     67            <h3><?php _e( 'Browse Plugins', 'wporg-forums' ); ?></h3>
    9968
    100         if ( ! empty( $this->plugin ) ) {
    101             return $this->plugin;
    102         }
     69            <ul class="plugin-submenu">
     70                <li class="view"><a href='//wordpress.org/plugins/'><?php _e( 'Featured', 'wporg' ); ?></a></li>
     71                <li class="view"><a href='//wordpress.org/plugins/browse/popular/'><?php _e( 'Most Popular', 'wporg' ); ?></a></li>
     72                <li class="view"><a href='//wordpress.org/plugins/browse/favorites/'><?php _e( 'Favorites', 'wporg' ); ?></a></li>
     73                <li class="view"><a href='//wordpress.org/plugins/browse/beta/'><?php _e( 'Beta Testing', 'wporg' ); ?></a></li>
     74                <li class="view"><a href='/plugins/about/'><?php _e( 'Developers', 'wporg' ); ?></a></li>
     75            </ul>
     76        </div>
    10377
    104         $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->base_prefix}%d_posts WHERE post_name = %s AND post_type = 'plugin' LIMIT 1", WPORG_PLUGIN_DIRECTORY_BLOGID, $slug );
    105         $row = $wpdb->get_row( $sql );
    106         if ( ! $row ) {
    107             return false;
    108         } else {
    109             $plugin = $row;
    110             $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->base_prefix}%d_postmeta WHERE post_id = %d AND meta_key NOT LIKE %s", WPORG_PLUGIN_DIRECTORY_BLOGID, $row->ID, '_trac_ticket_%' );
    111             $results = $wpdb->get_results( $sql );
    112             if( $results ) {
    113                 foreach ( $results as $row ) {
    114                     if ( ! isset( $plugin->{$row->meta_key} ) ) {
    115                         $plugin->{$row->meta_key} = maybe_unserialize( $row->meta_value );
    116                     }
    117                 }
    118             }
    119         }
    120         return $plugin;
     78        <div>
     79            <h3><?php _e( 'Search Plugins', 'wporg-forums' ); ?></h3>
     80
     81            <form id="side-search" method="get" action="//wordpress.org/plugins/search.php">
     82            <div>
     83                <input type="text" class="text" name="q" value="" />
     84                <input type="submit" class="button" value="<?php _e( 'Search', 'wporg-forums' ); ?>" />
     85            </div>
     86            </form>
     87        </div>
     88        <?php
     89    }
     90
     91    public function do_topic_sidebar() {
     92        include_once WPORGPATH . 'extend/plugins-plugins/_plugin-icons.php';
     93        $plugin  = sprintf( '<a href="//wordpress.org/plugins/%s/">%s</a>', esc_attr( $this->slug() ), esc_html( $this->plugin->post_title ) );
     94        $faq     = sprintf( '<a href="//wordpress.org/plugins/%s/faq/">Frequently Asked Questions</a>', esc_attr( $this->slug() ) );
     95        $support = sprintf( '<a href="//wordpress.org/support/plugin/%s/">Support Threads</a>', esc_attr( $this->slug() ) );
     96        $reviews = sprintf( '<a href="//wordpress.org/support/plugin/%s/reviews/">Reviews</a>', esc_attr( $this->slug() ) );
     97        ?>
     98        <div>
     99            <h3>About this Plugin</h3>
     100            <ul>
     101                <li><?php echo wporg_get_plugin_icon( $this->slug, 128 ); ?></li>
     102                <li style="clear:both;"><?php echo $plugin; ?></li>
     103                <?php if ( ! empty( $this->plugin->post_content ) && false !== strpos( $this->plugin->post_content, '<!--section=faq-->' ) ) : ?>
     104                <li><?php echo $faq; ?></li>
     105                <?php endif; ?>
     106                <li><?php echo $support; ?></li>
     107                <li><?php echo $reviews; ?></li>
     108            </ul>
     109        </div>
     110        <?php
     111    }
     112
     113    /**
     114     * Return a custom view header string so that get_breadcrumbs will display it.
     115     */
     116    public function get_view_header() {
     117        $slug        = esc_attr( $this->slug );
     118        $description = esc_html__( 'Description', 'wporg-forums' );
     119        $support     = esc_html__( 'Support', 'wporg-forums' );
     120        $reviews     = esc_html__( 'Reviews', 'wporg-forums' );
     121
     122        $header = <<<EOT
     123        <ul id="sections">
     124            <li class="section-description">
     125                <a href="//wordpress.org/plugins/{$slug}/">{$description}</a>
     126            </li>
     127            <li class="section-support">
     128                <a href="//wordpress.org/support/plugin/{$slug}/">{$support}</a>
     129            <li>
     130            <li class="section-reviews">
     131                <a href="//wordpress.org/support/plugin/{$slug}/reviews/">{$reviews}</a>
     132            </li>
     133            </ul>
     134EOT;
     135        return $header;
    121136    }
    122137}
Note: See TracChangeset for help on using the changeset viewer.