Advertisement
Guest User

BBPress : Replies Widget to show all latest posts

a guest
Mar 1st, 2013
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 30.12 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * bbPress Widgets
  5.  *
  6.  * Contains the forum list, topic list, reply list and login form widgets.
  7.  *
  8.  * @package bbPress
  9.  * @subpackage Widgets
  10.  */
  11.  
  12. // Exit if accessed directly
  13. if ( !defined( 'ABSPATH' ) ) exit;
  14.  
  15. /**
  16.  * bbPress Login Widget
  17.  *
  18.  * Adds a widget which displays the login form
  19.  *
  20.  * @since bbPress (r2827)
  21.  *
  22.  * @uses WP_Widget
  23.  */
  24. class BBP_Login_Widget extends WP_Widget {
  25.  
  26.     /**
  27.      * bbPress Login Widget
  28.      *
  29.      * Registers the login widget
  30.      *
  31.      * @since bbPress (r2827)
  32.      *
  33.      * @uses apply_filters() Calls 'bbp_login_widget_options' with the
  34.      *                        widget options
  35.      */
  36.     public function __construct() {
  37.         $widget_ops = apply_filters( 'bbp_login_widget_options', array(
  38.             'classname'   => 'bbp_widget_login',
  39.             'description' => __( 'A simple login form with optional links to sign-up and lost password pages.', 'bbpress' )
  40.         ) );
  41.  
  42.         parent::__construct( false, __( '(bbPress) Login Widget', 'bbpress' ), $widget_ops );
  43.     }
  44.  
  45.     /**
  46.      * Register the widget
  47.      *
  48.      * @since bbPress (r3389)
  49.      *
  50.      * @uses register_widget()
  51.      */
  52.     public static function register_widget() {
  53.         register_widget( 'BBP_Login_Widget' );
  54.     }
  55.  
  56.     /**
  57.      * Displays the output, the login form
  58.      *
  59.      * @since bbPress (r2827)
  60.      *
  61.      * @param mixed $args Arguments
  62.      * @param array $instance Instance
  63.      * @uses apply_filters() Calls 'bbp_login_widget_title' with the title
  64.      * @uses get_template_part() To get the login/logged in form
  65.      */
  66.     public function widget( $args, $instance ) {
  67.         extract( $args );
  68.  
  69.         $title    = apply_filters( 'bbp_login_widget_title',    $instance['title']    );
  70.         $register = apply_filters( 'bbp_login_widget_register', $instance['register'] );
  71.         $lostpass = apply_filters( 'bbp_login_widget_lostpass', $instance['lostpass'] );
  72.  
  73.         echo $before_widget;
  74.  
  75.         if ( !empty( $title ) )
  76.             echo $before_title . $title . $after_title;
  77.  
  78.         if ( !is_user_logged_in() ) : ?>
  79.  
  80.             <form method="post" action="<?php bbp_wp_login_action( array( 'context' => 'login_post' ) ); ?>" class="bbp-login-form">
  81.                 <fieldset>
  82.                     <legend><?php _e( 'Log In', 'bbpress' ); ?></legend>
  83.  
  84.                     <div class="bbp-username">
  85.                         <label for="user_login"><?php _e( 'Username', 'bbpress' ); ?>: </label>
  86.                         <input type="text" name="log" value="<?php bbp_sanitize_val( 'user_login', 'text' ); ?>" size="20" id="user_login" tabindex="<?php bbp_tab_index(); ?>" />
  87.                     </div>
  88.  
  89.                     <div class="bbp-password">
  90.                         <label for="user_pass"><?php _e( 'Password', 'bbpress' ); ?>: </label>
  91.                         <input type="password" name="pwd" value="<?php bbp_sanitize_val( 'user_pass', 'password' ); ?>" size="20" id="user_pass" tabindex="<?php bbp_tab_index(); ?>" />
  92.                     </div>
  93.  
  94.                     <div class="bbp-remember-me">
  95.                         <input type="checkbox" name="rememberme" value="forever" <?php checked( bbp_get_sanitize_val( 'rememberme', 'checkbox' ), true, true ); ?> id="rememberme" tabindex="<?php bbp_tab_index(); ?>" />
  96.                         <label for="rememberme"><?php _e( 'Remember Me', 'bbpress' ); ?></label>
  97.                     </div>
  98.  
  99.                     <div class="bbp-submit-wrapper">
  100.  
  101.                         <?php do_action( 'login_form' ); ?>
  102.  
  103.                         <button type="submit" name="user-submit" id="user-submit" tabindex="<?php bbp_tab_index(); ?>" class="button submit user-submit"><?php _e( 'Log In', 'bbpress' ); ?></button>
  104.  
  105.                         <?php bbp_user_login_fields(); ?>
  106.  
  107.                     </div>
  108.  
  109.                     <?php if ( !empty( $register ) || !empty( $lostpass ) ) : ?>
  110.  
  111.                         <div class="bbp-login-links">
  112.  
  113.                             <?php if ( !empty( $register ) ) : ?>
  114.  
  115.                                 <a href="<?php echo esc_url( $register ); ?>" title="<?php esc_attr_e( 'Register', 'bbpress' ); ?>" class="bbp-register-link"><?php _e( 'Register', 'bbpress' ); ?></a>
  116.  
  117.                             <?php endif; ?>
  118.  
  119.                             <?php if ( !empty( $lostpass ) ) : ?>
  120.  
  121.                                 <a href="<?php echo esc_url( $lostpass ); ?>" title="<?php esc_attr_e( 'Lost Password', 'bbpress' ); ?>" class="bbp-lostpass-link"><?php _e( 'Lost Password', 'bbpress' ); ?></a>
  122.  
  123.                             <?php endif; ?>
  124.  
  125.                         </div>
  126.  
  127.                     <?php endif; ?>
  128.  
  129.                 </fieldset>
  130.             </form>
  131.  
  132.         <?php else : ?>
  133.  
  134.             <div class="bbp-logged-in">
  135.                 <a href="<?php bbp_user_profile_url( bbp_get_current_user_id() ); ?>" class="submit user-submit"><?php echo get_avatar( bbp_get_current_user_id(), '16' ); ?></a>
  136.                 <h4><?php bbp_user_profile_link( bbp_get_current_user_id() ); ?></h4>
  137.  
  138.                 <?php bbp_logout_link(); ?>
  139.             </div>
  140.  
  141.         <?php endif;
  142.  
  143.         echo $after_widget;
  144.     }
  145.  
  146.     /**
  147.      * Update the login widget options
  148.      *
  149.      * @since bbPress (r2827)
  150.      *
  151.      * @param array $new_instance The new instance options
  152.      * @param array $old_instance The old instance options
  153.      */
  154.     public function update( $new_instance, $old_instance ) {
  155.         $instance             = $old_instance;
  156.         $instance['title']    = strip_tags( $new_instance['title'] );
  157.         $instance['register'] = esc_url( $new_instance['register'] );
  158.         $instance['lostpass'] = esc_url( $new_instance['lostpass'] );
  159.  
  160.         return $instance;
  161.     }
  162.  
  163.     /**
  164.      * Output the login widget options form
  165.      *
  166.      * @since bbPress (r2827)
  167.      *
  168.      * @param $instance Instance
  169.      * @uses BBP_Login_Widget::get_field_id() To output the field id
  170.      * @uses BBP_Login_Widget::get_field_name() To output the field name
  171.      */
  172.     public function form( $instance ) {
  173.  
  174.         // Form values
  175.         $title    = !empty( $instance['title'] )    ? esc_attr( $instance['title'] )    : '';
  176.         $register = !empty( $instance['register'] ) ? esc_attr( $instance['register'] ) : '';
  177.         $lostpass = !empty( $instance['lostpass'] ) ? esc_attr( $instance['lostpass'] ) : '';
  178.  
  179.         ?>
  180.  
  181.         <p>
  182.             <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bbpress' ); ?>
  183.             <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></label>
  184.         </p>
  185.  
  186.         <p>
  187.             <label for="<?php echo $this->get_field_id( 'register' ); ?>"><?php _e( 'Register URI:', 'bbpress' ); ?>
  188.             <input class="widefat" id="<?php echo $this->get_field_id( 'register' ); ?>" name="<?php echo $this->get_field_name( 'register' ); ?>" type="text" value="<?php echo $register; ?>" /></label>
  189.         </p>
  190.  
  191.         <p>
  192.             <label for="<?php echo $this->get_field_id( 'lostpass' ); ?>"><?php _e( 'Lost Password URI:', 'bbpress' ); ?>
  193.             <input class="widefat" id="<?php echo $this->get_field_id( 'lostpass' ); ?>" name="<?php echo $this->get_field_name( 'lostpass' ); ?>" type="text" value="<?php echo $lostpass; ?>" /></label>
  194.         </p>
  195.  
  196.         <?php
  197.     }
  198. }
  199.  
  200. /**
  201.  * bbPress Views Widget
  202.  *
  203.  * Adds a widget which displays the view list
  204.  *
  205.  * @since bbPress (r3020)
  206.  *
  207.  * @uses WP_Widget
  208.  */
  209. class BBP_Views_Widget extends WP_Widget {
  210.  
  211.     /**
  212.      * bbPress View Widget
  213.      *
  214.      * Registers the view widget
  215.      *
  216.      * @since bbPress (r3020)
  217.      *
  218.      * @uses apply_filters() Calls 'bbp_views_widget_options' with the
  219.      *                        widget options
  220.      */
  221.     public function __construct() {
  222.         $widget_ops = apply_filters( 'bbp_views_widget_options', array(
  223.             'classname'   => 'widget_display_views',
  224.             'description' => __( 'A list of registered optional topic views.', 'bbpress' )
  225.         ) );
  226.  
  227.         parent::__construct( false, __( '(bbPress) Topic Views List', 'bbpress' ), $widget_ops );
  228.     }
  229.  
  230.     /**
  231.      * Register the widget
  232.      *
  233.      * @since bbPress (r3389)
  234.      *
  235.      * @uses register_widget()
  236.      */
  237.     public static function register_widget() {
  238.         register_widget( 'BBP_Views_Widget' );
  239.     }
  240.  
  241.     /**
  242.      * Displays the output, the view list
  243.      *
  244.      * @since bbPress (r3020)
  245.      *
  246.      * @param mixed $args Arguments
  247.      * @param array $instance Instance
  248.      * @uses apply_filters() Calls 'bbp_view_widget_title' with the title
  249.      * @uses bbp_get_views() To get the views
  250.      * @uses bbp_view_url() To output the view url
  251.      * @uses bbp_view_title() To output the view title
  252.      */
  253.     public function widget( $args, $instance ) {
  254.  
  255.         // Only output widget contents if views exist
  256.         if ( bbp_get_views() ) :
  257.  
  258.             extract( $args );
  259.  
  260.             $title = apply_filters( 'bbp_view_widget_title', $instance['title'] );
  261.  
  262.             echo $before_widget;
  263.             echo $before_title . $title . $after_title; ?>
  264.  
  265.             <ul>
  266.  
  267.                 <?php foreach ( bbp_get_views() as $view => $args ) : ?>
  268.  
  269.                     <li><a class="bbp-view-title" href="<?php bbp_view_url( $view ); ?>" title="<?php bbp_view_title( $view ); ?>"><?php bbp_view_title( $view ); ?></a></li>
  270.  
  271.                 <?php endforeach; ?>
  272.  
  273.             </ul>
  274.  
  275.             <?php echo $after_widget;
  276.  
  277.         endif;
  278.     }
  279.  
  280.     /**
  281.      * Update the view widget options
  282.      *
  283.      * @since bbPress (r3020)
  284.      *
  285.      * @param array $new_instance The new instance options
  286.      * @param array $old_instance The old instance options
  287.      */
  288.     public function update( $new_instance, $old_instance ) {
  289.         $instance          = $old_instance;
  290.         $instance['title'] = strip_tags( $new_instance['title'] );
  291.  
  292.         return $instance;
  293.     }
  294.  
  295.     /**
  296.      * Output the view widget options form
  297.      *
  298.      * @since bbPress (r3020)
  299.      *
  300.      * @param $instance Instance
  301.      * @uses BBP_Views_Widget::get_field_id() To output the field id
  302.      * @uses BBP_Views_Widget::get_field_name() To output the field name
  303.      */
  304.     public function form( $instance ) {
  305.         $title = !empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; ?>
  306.  
  307.         <p>
  308.             <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bbpress' ); ?>
  309.                 <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" />
  310.             </label>
  311.         </p>
  312.  
  313.         <?php
  314.     }
  315. }
  316.  
  317. /**
  318.  * bbPress Forum Widget
  319.  *
  320.  * Adds a widget which displays the forum list
  321.  *
  322.  * @since bbPress (r2653)
  323.  *
  324.  * @uses WP_Widget
  325.  */
  326. class BBP_Forums_Widget extends WP_Widget {
  327.  
  328.     /**
  329.      * bbPress Forum Widget
  330.      *
  331.      * Registers the forum widget
  332.      *
  333.      * @since bbPress (r2653)
  334.      *
  335.      * @uses apply_filters() Calls 'bbp_forums_widget_options' with the
  336.      *                        widget options
  337.      */
  338.     public function __construct() {
  339.         $widget_ops = apply_filters( 'bbp_forums_widget_options', array(
  340.             'classname'   => 'widget_display_forums',
  341.             'description' => __( 'A list of forums with an option to set the parent.', 'bbpress' )
  342.         ) );
  343.  
  344.         parent::__construct( false, __( '(bbPress) Forums List', 'bbpress' ), $widget_ops );
  345.     }
  346.  
  347.     /**
  348.      * Register the widget
  349.      *
  350.      * @since bbPress (r3389)
  351.      *
  352.      * @uses register_widget()
  353.      */
  354.     public static function register_widget() {
  355.         register_widget( 'BBP_Forums_Widget' );
  356.     }
  357.  
  358.     /**
  359.      * Displays the output, the forum list
  360.      *
  361.      * @since bbPress (r2653)
  362.      *
  363.      * @param mixed $args Arguments
  364.      * @param array $instance Instance
  365.      * @uses apply_filters() Calls 'bbp_forum_widget_title' with the title
  366.      * @uses get_option() To get the forums per page option
  367.      * @uses current_user_can() To check if the current user can read
  368.      *                           private() To resety name
  369.      * @uses bbp_has_forums() The main forum loop
  370.      * @uses bbp_forums() To check whether there are more forums available
  371.      *                     in the loop
  372.      * @uses bbp_the_forum() Loads up the current forum in the loop
  373.      * @uses bbp_forum_permalink() To display the forum permalink
  374.      * @uses bbp_forum_title() To display the forum title
  375.      */
  376.     public function widget( $args, $instance ) {
  377.         extract( $args );
  378.  
  379.         $title        = apply_filters( 'bbp_forum_widget_title', $instance['title'] );
  380.         $parent_forum = !empty( $instance['parent_forum'] ) ? $instance['parent_forum'] : '0';
  381.  
  382.         // Note: private and hidden forums will be excluded via the
  383.         // bbp_pre_get_posts_exclude_forums filter and function.
  384.         $widget_query = new WP_Query( array(
  385.             'post_parent'    => $parent_forum,
  386.             'post_type'      => bbp_get_forum_post_type(),
  387.             'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
  388.             'orderby'        => 'menu_order',
  389.             'order'          => 'ASC'
  390.         ) );
  391.  
  392.         if ( $widget_query->have_posts() ) :
  393.  
  394.             echo $before_widget;
  395.             echo $before_title . $title . $after_title; ?>
  396.  
  397.             <ul>
  398.  
  399.                 <?php while ( $widget_query->have_posts() ) : $widget_query->the_post(); ?>
  400.  
  401.                     <li><a class="bbp-forum-title" href="<?php bbp_forum_permalink( $widget_query->post->ID ); ?>" title="<?php bbp_forum_title( $widget_query->post->ID ); ?>"><?php bbp_forum_title( $widget_query->post->ID ); ?></a></li>
  402.  
  403.                 <?php endwhile; ?>
  404.  
  405.             </ul>
  406.  
  407.             <?php echo $after_widget;
  408.  
  409.             // Reset the $post global
  410.             wp_reset_postdata();
  411.  
  412.         endif;
  413.     }
  414.  
  415.     /**
  416.      * Update the forum widget options
  417.      *
  418.      * @since bbPress (r2653)
  419.      *
  420.      * @param array $new_instance The new instance options
  421.      * @param array $old_instance The old instance options
  422.      */
  423.     public function update( $new_instance, $old_instance ) {
  424.         $instance                 = $old_instance;
  425.         $instance['title']        = strip_tags( $new_instance['title'] );
  426.         $instance['parent_forum'] = $new_instance['parent_forum'];
  427.  
  428.         // Force to any
  429.         if ( !empty( $instance['parent_forum'] ) && !is_numeric( $instance['parent_forum'] ) ) {
  430.             $instance['parent_forum'] = 'any';
  431.         }
  432.  
  433.         return $instance;
  434.     }
  435.  
  436.     /**
  437.      * Output the forum widget options form
  438.      *
  439.      * @since bbPress (r2653)
  440.      *
  441.      * @param $instance Instance
  442.      * @uses BBP_Forums_Widget::get_field_id() To output the field id
  443.      * @uses BBP_Forums_Widget::get_field_name() To output the field name
  444.      */
  445.     public function form( $instance ) {
  446.         $title        = !empty( $instance['title']        ) ? esc_attr( $instance['title']        ) : '';
  447.         $parent_forum = !empty( $instance['parent_forum'] ) ? esc_attr( $instance['parent_forum'] ) : '0'; ?>
  448.  
  449.         <p>
  450.             <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'bbpress' ); ?>
  451.                 <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" />
  452.             </label>
  453.         </p>
  454.  
  455.         <p>
  456.             <label for="<?php echo $this->get_field_id( 'parent_forum' ); ?>"><?php _e( 'Parent Forum ID:', 'bbpress' ); ?>
  457.                 <input class="widefat" id="<?php echo $this->get_field_id( 'parent_forum' ); ?>" name="<?php echo $this->get_field_name( 'parent_forum' ); ?>" type="text" value="<?php echo $parent_forum; ?>" />
  458.             </label>
  459.  
  460.             <br />
  461.  
  462.             <small><?php _e( '"0" to show only root - "any" to show all', 'bbpress' ); ?></small>
  463.         </p>
  464.  
  465.         <?php
  466.     }
  467. }
  468.  
  469. /**
  470.  * bbPress Topic Widget
  471.  *
  472.  * Adds a widget which displays the topic list
  473.  *
  474.  * @since bbPress (r2653)
  475.  *
  476.  * @uses WP_Widget
  477.  */
  478. class BBP_Topics_Widget extends WP_Widget {
  479.  
  480.     /**
  481.      * bbPress Topic Widget
  482.      *
  483.      * Registers the topic widget
  484.      *
  485.      * @since bbPress (r2653)
  486.      *
  487.      * @uses apply_filters() Calls 'bbp_topics_widget_options' with the
  488.      *                        widget options
  489.      */
  490.     public function __construct() {
  491.         $widget_ops = apply_filters( 'bbp_topics_widget_options', array(
  492.             'classname'   => 'widget_display_topics',
  493.             'description' => __( 'A list of recent topics, sorted by popularity or freshness.', 'bbpress' )
  494.         ) );
  495.  
  496.         parent::__construct( false, __( '(bbPress) Recent Topics', 'bbpress' ), $widget_ops );
  497.     }
  498.  
  499.     /**
  500.      * Register the widget
  501.      *
  502.      * @since bbPress (r3389)
  503.      *
  504.      * @uses register_widget()
  505.      */
  506.     public static function register_widget() {
  507.         register_widget( 'BBP_Topics_Widget' );
  508.     }
  509.  
  510.     /**
  511.      * Displays the output, the topic list
  512.      *
  513.      * @since bbPress (r2653)
  514.      *
  515.      * @param mixed $args
  516.      * @param array $instance
  517.      * @uses apply_filters() Calls 'bbp_topic_widget_title' with the title
  518.      * @uses bbp_topic_permalink() To display the topic permalink
  519.      * @uses bbp_topic_title() To display the topic title
  520.      * @uses bbp_get_topic_last_active_time() To get the topic last active
  521.      *                                         time
  522.      * @uses bbp_get_topic_id() To get the topic id
  523.      */
  524.     public function widget( $args, $instance ) {
  525.  
  526.         extract( $args );
  527.  
  528.         $title        = apply_filters( 'bbp_topic_widget_title', $instance['title'] );
  529.         $max_shown    = !empty( $instance['max_shown']    ) ? (int) $instance['max_shown'] : 5;
  530.         $show_date    = !empty( $instance['show_date']    ) ? 'on'                         : false;
  531.         $show_user    = !empty( $instance['show_user']    ) ? 'on'                         : false;
  532.         $parent_forum = !empty( $instance['parent_forum'] ) ? $instance['parent_forum']    : 'any';
  533.         $order_by     = !empty( $instance['order_by']     ) ? $instance['order_by']        : false;
  534.  
  535.         // How do we want to order our results?
  536.         switch ( $order_by ) {
  537.  
  538.             // Order by most recent replies
  539.             case 'freshness' :
  540.                 $topics_query = array(
  541.                     'author'         => 0,
  542.                     'post_type'      => bbp_get_topic_post_type(),
  543.                     'post_parent'    => $parent_forum,
  544.                     'posts_per_page' => $max_shown,
  545.                     'post_status'    => join( ',', array( bbp_get_public_status_id(), bbp_get_closed_status_id() ) ),
  546.                     'show_stickes'   => false,
  547.                     'meta_key'       => '_bbp_last_active_time',
  548.                     'orderby'        => 'meta_value',
  549.                     'order'          => 'DESC',
  550.                     'meta_query'     => array( bbp_exclude_forum_ids( 'meta_query' ) )
  551.                 );
  552.                 break;
  553.  
  554.             // Order by total number of replies
  555.             case 'popular' :
  556.                 $topics_query = array(
  557.                     'author'         => 0,
  558.                     'post_type'      => bbp_get_topic_post_type(),
  559.                     'post_parent'    => $parent_forum,
  560.                     'posts_per_page' => $max_shown,
  561.                     'post_status'    => join( ',', array( bbp_get_public_status_id(), bbp_get_closed_status_id() ) ),
  562.                     'show_stickes'   => false,
  563.                     'meta_key'       => '_bbp_reply_count',
  564.                     'orderby'        => 'meta_value',
  565.                     'order'          => 'DESC',
  566.                     'meta_query'     => array( bbp_exclude_forum_ids( 'meta_query' ) )
  567.                 );         
  568.                 break;
  569.  
  570.             // Order by which topic was created most recently
  571.             case 'newness' :
  572.             default :
  573.                 $topics_query = array(
  574.                     'author'         => 0,
  575.                     'post_type'      => bbp_get_topic_post_type(),
  576.                     'post_parent'    => $parent_forum,
  577.                     'posts_per_page' => $max_shown,
  578.                     'post_status'    => join( ',', array( bbp_get_public_status_id(), bbp_get_closed_status_id() ) ),
  579.                     'show_stickes'   => false,
  580.                     'order'          => 'DESC',
  581.                     'meta_query'     => array( bbp_exclude_forum_ids( 'meta_query' ) )
  582.                 );         
  583.                 break;
  584.         }
  585.        
  586.         // Note: private and hidden forums will be excluded via the
  587.         // bbp_pre_get_posts_exclude_forums filter and function.
  588.         $widget_query = new WP_Query( $topics_query );
  589.  
  590.         // Topics exist
  591.         if ( $widget_query->have_posts() ) :
  592.            
  593.             echo $before_widget;
  594.             echo $before_title . $title . $after_title; ?>
  595.  
  596.             <ul>
  597.  
  598.                 <?php while ( $widget_query->have_posts() ) :
  599.  
  600.                     $widget_query->the_post();
  601.                     $topic_id    = bbp_get_topic_id( $widget_query->post->ID );
  602.                     $author_link = bbp_get_topic_author_link( array( 'post_id' => $topic_id, 'type' => 'both', 'size' => 16 ) ); ?>
  603.  
  604.                     <li>
  605.                         <a class="bbp-forum-title" href="<?php bbp_topic_permalink( $topic_id ); ?>" title="<?php bbp_topic_title( $topic_id ); ?>"><?php bbp_topic_title( $topic_id ); ?></a>
  606.  
  607.                         <?php if ( 'on' == $show_user ) : ?>
  608.  
  609.                             <?php printf( _x( 'by %1$s', 'widgets', 'bbpress' ), '<span class="topic-author">' . $author_link . '</span>' ); ?>
  610.  
  611.                         <?php endif; ?>
  612.  
  613.                         <?php if ( 'on' == $show_date ) : ?>
  614.  
  615.                             <div><?php bbp_topic_last_active_time( $topic_id ); ?></div>
  616.  
  617.                         <?php endif; ?>
  618.  
  619.                     </li>
  620.  
  621.                 <?php endwhile; ?>
  622.  
  623.             </ul>
  624.  
  625.             <?php echo $after_widget;
  626.  
  627.             // Reset the $post global
  628.             wp_reset_postdata();
  629.  
  630.         endif;
  631.     }
  632.  
  633.     /**
  634.      * Update the topic widget options
  635.      *
  636.      * @since bbPress (r2653)
  637.      *
  638.      * @param array $new_instance The new instance options
  639.      * @param array $old_instance The old instance options
  640.      */
  641.     public function update( $new_instance, $old_instance ) {
  642.         $instance              = $old_instance;
  643.         $instance['title']     = strip_tags( $new_instance['title']     );
  644.         $instance['max_shown'] = strip_tags( $new_instance['max_shown'] );
  645.         $instance['show_date'] = strip_tags( $new_instance['show_date'] );
  646.         $instance['show_user'] = strip_tags( $new_instance['show_user'] );
  647.         $instance['order_by']  = strip_tags( $new_instance['order_by']  );
  648.  
  649.         return $instance;
  650.     }
  651.  
  652.     /**
  653.      * Output the topic widget options form
  654.      *
  655.      * @since bbPress (r2653)
  656.      *
  657.      * @param $instance Instance
  658.      * @uses BBP_Topics_Widget::get_field_id() To output the field id
  659.      * @uses BBP_Topics_Widget::get_field_name() To output the field name
  660.      */
  661.     public function form( $instance ) {
  662.         $title     = !empty( $instance['title']     ) ? esc_attr( $instance['title']     ) : '';
  663.         $max_shown = !empty( $instance['max_shown'] ) ? esc_attr( $instance['max_shown'] ) : '';
  664.         $show_date = !empty( $instance['show_date'] ) ? esc_attr( $instance['show_date'] ) : '';
  665.         $show_user = !empty( $instance['show_user'] ) ? esc_attr( $instance['show_user'] ) : '';
  666.         $order_by  = !empty( $instance['order_by']  ) ? esc_attr( $instance['order_by']  ) : ''; ?>
  667.  
  668.         <p><label for="<?php echo $this->get_field_id( 'title'     ); ?>"><?php _e( 'Title:',                  'bbpress' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'title'     ); ?>" name="<?php echo $this->get_field_name( 'title'     ); ?>" type="text" value="<?php echo $title; ?>" /></label></p>
  669.         <p><label for="<?php echo $this->get_field_id( 'max_shown' ); ?>"><?php _e( 'Maximum topics to show:', 'bbpress' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'max_shown' ); ?>" name="<?php echo $this->get_field_name( 'max_shown' ); ?>" type="text" value="<?php echo $max_shown; ?>" /></label></p>
  670.         <p><label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Show post date:',         'bbpress' ); ?> <input type="checkbox" id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" <?php checked( 'on', $show_date ); ?> /></label></p>
  671.         <p><label for="<?php echo $this->get_field_id( 'show_user' ); ?>"><?php _e( 'Show topic author:',      'bbpress' ); ?> <input type="checkbox" id="<?php echo $this->get_field_id( 'show_user' ); ?>" name="<?php echo $this->get_field_name( 'show_user' ); ?>" <?php checked( 'on', $show_user ); ?> /></label></p>
  672.  
  673.         <p>
  674.             <label for="<?php echo $this->get_field_id( 'order_by' ); ?>"><?php _e( 'Order By:',        'bbpress' ); ?></label>
  675.             <select name="<?php echo $this->get_field_name( 'order_by' ); ?>" id="<?php echo $this->get_field_name( 'order_by' ); ?>">
  676.                 <option <?php selected( $order_by, 'newness' );   ?> value="newness"><?php _e( 'Newest Topics',                'bbpress' ); ?></option>
  677.                 <option <?php selected( $order_by, 'popular' );   ?> value="popular"><?php _e( 'Popular Topics',               'bbpress' ); ?></option>
  678.                 <option <?php selected( $order_by, 'freshness' ); ?> value="freshness"><?php _e( 'Topics With Recent Replies', 'bbpress' ); ?></option>
  679.             </select>
  680.         </p>
  681.  
  682.         <?php
  683.     }
  684. }
  685.  
  686. /**
  687.  * bbPress Replies Widget
  688.  *
  689.  * Adds a widget which displays the replies list
  690.  *
  691.  * @since bbPress (r2653)
  692.  *
  693.  * @uses WP_Widget
  694.  */
  695. class BBP_Replies_Widget extends WP_Widget {
  696.  
  697.     /**
  698.      * bbPress Replies Widget
  699.      *
  700.      * Registers the replies widget
  701.      *
  702.      * @since bbPress (r2653)
  703.      *
  704.      * @uses apply_filters() Calls 'bbp_replies_widget_options' with the
  705.      *                        widget options
  706.      */
  707.     public function __construct() {
  708.         $widget_ops = apply_filters( 'bbp_replies_widget_options', array(
  709.             'classname'   => 'widget_display_replies',
  710.             'description' => __( 'A list of the most recent replies.', 'bbpress' )
  711.         ) );
  712.  
  713.         parent::__construct( false, __( '(bbPress) Recent Replies', 'bbpress' ), $widget_ops );
  714.     }
  715.  
  716.     /**
  717.      * Register the widget
  718.      *
  719.      * @since bbPress (r3389)
  720.      *
  721.      * @uses register_widget()
  722.      */
  723.     public static function register_widget() {
  724.         register_widget( 'BBP_Replies_Widget' );
  725.     }
  726.  
  727.     /**
  728.      * Displays the output, the replies list
  729.      *
  730.      * @since bbPress (r2653)
  731.      *
  732.      * @param mixed $args
  733.      * @param array $instance
  734.      * @uses apply_filters() Calls 'bbp_reply_widget_title' with the title
  735.      * @uses bbp_get_reply_author_link() To get the reply author link
  736.      * @uses bbp_get_reply_author() To get the reply author name
  737.      * @uses bbp_get_reply_id() To get the reply id
  738.      * @uses bbp_get_reply_url() To get the reply url
  739.      * @uses bbp_get_reply_excerpt() To get the reply excerpt
  740.      * @uses bbp_get_reply_topic_title() To get the reply topic title
  741.      * @uses get_the_date() To get the date of the reply
  742.      * @uses get_the_time() To get the time of the reply
  743.      */
  744.     public function widget( $args, $instance ) {
  745.  
  746.         extract( $args );
  747.  
  748.         $title      = apply_filters( 'bbp_replies_widget_title', $instance['title'] );
  749.         $max_shown  = !empty( $instance['max_shown'] ) ? $instance['max_shown'] : '5';
  750.         $show_date  = !empty( $instance['show_date'] ) ? 'on'                   : false;
  751.         $show_user  = !empty( $instance['show_user'] ) ? 'on'                   : false;
  752.         $post_types = !empty( $instance['post_type'] ) ? bbp_get_reply_post_type() : array( bbp_get_topic_post_type(), bbp_get_reply_post_type() );
  753.  
  754.         // Note: private and hidden forums will be excluded via the
  755.         // bbp_pre_get_posts_exclude_forums filter and function.
  756.         $widget_query = new WP_Query( array(
  757.             'post_type'      => $post_types,
  758.             'post_status'    => join( ',', array( bbp_get_public_status_id(), bbp_get_closed_status_id() ) ),
  759.             'posts_per_page' => $max_shown,
  760.             'meta_query'     => array( bbp_exclude_forum_ids( 'meta_query' ) )
  761.         ) );
  762.  
  763.         // Get replies and display them
  764.         if ( $widget_query->have_posts() ) :
  765.  
  766.             echo $before_widget;
  767.             echo $before_title . $title . $after_title; ?>
  768.  
  769.             <ul>
  770.  
  771.                 <?php while ( $widget_query->have_posts() ) : $widget_query->the_post(); ?>
  772.  
  773.                     <li>
  774.  
  775.                         <?php
  776.  
  777.                         $reply_id    = bbp_get_reply_id( $widget_query->post->ID );
  778.                         $author_link = bbp_get_reply_author_link( array( 'post_id' => $reply_id, 'type' => 'both', 'size' => 16 ) );
  779.                         $reply_link  = '<a class="bbp-reply-topic-title" href="' . esc_url( bbp_get_reply_url( $reply_id ) ) . '" title="' . bbp_get_reply_excerpt( $reply_id, 50 ) . '">' . bbp_get_reply_topic_title( $reply_id ) . '</a>';
  780.  
  781.                         // Reply author, link, and timestamp
  782.                         if ( ( 'on' == $show_date ) && ( 'on' == $show_user ) ) :
  783.  
  784.                             // translators: 1: reply author, 2: reply link, 3: reply timestamp
  785.                             printf( _x( '%1$s on %2$s %3$s', 'widgets', 'bbpress' ), $author_link, $reply_link, '<div>' . bbp_get_time_since( get_the_time( 'U' ) ) . '</div>' );
  786.  
  787.                         // Reply link and timestamp
  788.                         elseif ( $show_date == 'on' ) :
  789.  
  790.                             // translators: 1: reply link, 2: reply timestamp
  791.                             printf( _x( '%1$s %2$s',         'widgets', 'bbpress' ), $reply_link,  '<div>' . bbp_get_time_since( get_the_time( 'U' ) ) . '</div>'              );
  792.  
  793.                         // Reply author and title
  794.                         elseif ( $show_user == 'on' ) :
  795.  
  796.                             // translators: 1: reply author, 2: reply link
  797.                             printf( _x( '%1$s on %2$s',      'widgets', 'bbpress' ), $author_link, $reply_link                                                                 );
  798.  
  799.                         // Only the reply title
  800.                         else :
  801.  
  802.                             // translators: 1: reply link
  803.                             printf( _x( '%1$s',              'widgets', 'bbpress' ), $reply_link                                                                               );
  804.  
  805.                         endif;
  806.  
  807.                         ?>
  808.  
  809.                     </li>
  810.  
  811.                 <?php endwhile; ?>
  812.  
  813.             </ul>
  814.  
  815.             <?php echo $after_widget;
  816.  
  817.             // Reset the $post global
  818.             wp_reset_postdata();
  819.  
  820.         endif;
  821.     }
  822.  
  823.     /**
  824.      * Update the reply widget options
  825.      *
  826.      * @since bbPress (r2653)
  827.      *
  828.      * @param array $new_instance The new instance options
  829.      * @param array $old_instance The old instance options
  830.      */
  831.     public function update( $new_instance, $old_instance ) {
  832.         $instance              = $old_instance;
  833.         $instance['title']     = strip_tags( $new_instance['title']     );
  834.         $instance['max_shown'] = strip_tags( $new_instance['max_shown'] );
  835.         $instance['show_date'] = strip_tags( $new_instance['show_date'] );
  836.         $instance['show_user'] = strip_tags( $new_instance['show_user'] );
  837.         $instance['post_type'] = strip_tags( $new_instance['post_type'] );
  838.         return $instance;
  839.     }
  840.  
  841.     /**
  842.      * Output the reply widget options form
  843.      *
  844.      * @since bbPress (r2653)
  845.      *
  846.      * @param $instance Instance
  847.      * @uses BBP_Replies_Widget::get_field_id() To output the field id
  848.      * @uses BBP_Replies_Widget::get_field_name() To output the field name
  849.      */
  850.     public function form( $instance ) {
  851.         $title     = !empty( $instance['title']     ) ? esc_attr( $instance['title']     ) : '';
  852.         $max_shown = !empty( $instance['max_shown'] ) ? esc_attr( $instance['max_shown'] ) : '';
  853.         $show_date = !empty( $instance['show_date'] ) ? esc_attr( $instance['show_date'] ) : '';
  854.         $show_user = !empty( $instance['show_user'] ) ? esc_attr( $instance['show_user'] ) : '';       
  855.         $post_type = !empty( $instance['post_type'] ) ? esc_attr( $instance['post_type'] ) : ''; ?>
  856.  
  857.         <p><label for="<?php echo $this->get_field_id( 'title'     ); ?>"><?php _e( 'Title:',                   'bbpress' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'title'     ); ?>" name="<?php echo $this->get_field_name( 'title'     ); ?>" type="text" value="<?php echo $title; ?>" /></label></p>
  858.         <p><label for="<?php echo $this->get_field_id( 'max_shown' ); ?>"><?php _e( 'Maximum replies to show:', 'bbpress' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'max_shown' ); ?>" name="<?php echo $this->get_field_name( 'max_shown' ); ?>" type="text" value="<?php echo $max_shown; ?>" /></label></p>
  859.         <p><label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Show post date:',          'bbpress' ); ?> <input type="checkbox" id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" <?php checked( 'on', $show_date ); ?> /></label></p>
  860.         <p><label for="<?php echo $this->get_field_id( 'show_user' ); ?>"><?php _e( 'Show reply author:',       'bbpress' ); ?> <input type="checkbox" id="<?php echo $this->get_field_id( 'show_user' ); ?>" name="<?php echo $this->get_field_name( 'show_user' ); ?>" <?php checked( 'on', $show_user ); ?> /></label></p>      
  861.         <p><label for="<?php echo $this->get_field_id( 'post_type' ); ?>"><?php _e( 'Only replies:',       'bbpress' ); ?> <input type="checkbox" id="<?php echo $this->get_field_id( 'post_type' ); ?>" name="<?php echo $this->get_field_name( 'post_type' ); ?>" <?php checked( 'on', $post_type ); ?> /></label></p>
  862.  
  863.         <?php
  864.     }
  865. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement