Making WordPress.org

Ticket #2016: 2016.diff

File 2016.diff, 13.0 KB (added by dd32, 6 years ago)
  • support-forums/inc/class-support-compat.php

    class Support_Compat { 
    342342
    343343                // Check the current view.
    344344                if ( bbp_is_single_view() ) {
    345345                        $retval = ( bbp_get_view_id() != 'reviews' );
    346346                }
    347347
    348348                return $retval;
    349349        }
    350350
    351351        /**
    352352         * Enable theme and plugin subscriptions.
    353353         */
    354354        public function load_compat_subscriptions() {
    355355                if ( class_exists( 'WordPressdotorg\Forums\Term_Subscription\Plugin' ) ) {
    356356                        Plugin::get_instance()->plugin_subscriptions = new Term_Subscription\Plugin( array(
    357                                 'taxonomy' => 'topic-plugin',
    358                                 'labels'   => array(
     357                                'taxonomy'  => 'topic-plugin',
     358                                'directory' => Plugin::get_instance()->plugins,
     359                                'labels'    => array(
    359360                                        'subscribed_header'      => __( 'Subscribed Plugins', 'wporg-forums' ),
    360361                                        'subscribed_user_notice' => __( 'You are not currently subscribed to any plugins.', 'wporg-forums' ),
    361362                                        'subscribed_anon_notice' => __( 'This user is not currently subscribed to any plugins.', 'wporg-forums' ),
    362363                                        'receipt'                => __( 'You are receiving this email because you are subscribed to a plugin.', 'wporg-forums' ),
    363364                                ),
    364365                        ) );
    365366                        Plugin::get_instance()->theme_subscriptions = new Term_Subscription\Plugin( array(
    366                                 'taxonomy' => 'topic-theme',
    367                                 'labels'   => array(
     367                                'taxonomy'  => 'topic-theme',
     368                                'directory' => Plugin::get_instance()->themes,
     369                                'labels'    => array(
    368370                                        'subscribed_header'      => __( 'Subscribed Themes', 'wporg-forums' ),
    369371                                        'subscribed_user_notice' => __( 'You are not currently subscribed to any themes.', 'wporg-forums' ),
    370372                                        'subscribed_anon_notice' => __( 'This user is not currently subscribed to any themes.', 'wporg-forums' ),
    371373                                        'receipt'                => __( 'You are receiving this email because you are subscribed to a theme.', 'wporg-forums' ),
    372374                                ),
    373375                        ) );
    374376                }
    375377        }
    376378
    377379        public static function get_compat_forums() {
    378380                return array( Plugin::PLUGINS_FORUM_ID, Plugin::THEMES_FORUM_ID, Plugin::REVIEWS_FORUM_ID );
    379381        }
    380382
    381383        public static function is_compat_forum( $post_id = 0 ) {
    382384                if ( empty( $post_id ) ) {
    383385                        return false;
    384386                }
    385387                return in_array( $post_id, self::get_compat_forums() );
    386388        }
    387389
    388390        public static function get_plugin_slugs_by_committer( $user_nicename ) {
    389391                global $wpdb;
    390392
    391393                $prefix = $wpdb->base_prefix . WPORG_PLUGIN_DIRECTORY_BLOGID . '_';
    392394                $slugs = $wpdb->get_col( $wpdb->prepare(
    393395                        "SELECT post_name
    394396                         FROM {$prefix}posts AS p
    395397                         LEFT JOIN {$prefix}term_relationships AS tr ON p.ID = tr.object_id
    396                          LEFT JOIN {$prefix}term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id 
     398                         LEFT JOIN {$prefix}term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
    397399                         LEFT JOIN {$prefix}terms AS t ON tt.term_id = t.term_id
    398400                         WHERE tt.taxonomy = 'plugin_committers' AND p.post_status = 'publish' AND p.post_type = 'plugin' AND t.slug = %s
    399401                         ORDER BY p.post_title ASC",
    400402                        $user_nicename
    401403                ) );
    402404
    403405                return $slugs;
    404406        }
    405407
    406408        public static function get_plugin_slugs_by_contributor( $user_nicename ) {
    407409                global $wpdb;
    408410
    409411                $prefix = $wpdb->base_prefix . WPORG_PLUGIN_DIRECTORY_BLOGID . '_';
    410412                $slugs = $wpdb->get_col( $wpdb->prepare(
    411413                        "SELECT post_name
    412414                         FROM {$prefix}posts AS p
    413415                         LEFT JOIN {$prefix}term_relationships AS tr ON p.ID = tr.object_id
    414                          LEFT JOIN {$prefix}term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id 
     416                         LEFT JOIN {$prefix}term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
    415417                         LEFT JOIN {$prefix}terms AS t ON tt.term_id = t.term_id
    416418                         WHERE tt.taxonomy = 'plugin_contributors' AND p.post_status = 'publish' AND p.post_type = 'plugin' AND t.slug = %s
    417419                         ORDER BY p.post_title ASC",
    418420                        $user_nicename
    419421                ) );
    420422
    421423                return $slugs;
    422424        }
    423425
    424426        public static function clean_slugs( $slugs ) {
    425427                $cleanslugs = array();
    426428                foreach ( $slugs as $slug ) {
    427429                        $slug = trim( $slug, '/' );
    428430                        if ( ! empty( $slug ) ) {
    429431                                $cleanslugs[] = $slug;
  • wporg-bbp-term-subscription/inc/class-plugin.php

     
    11<?php
    22
    33namespace WordPressdotorg\Forums\Term_Subscription;
    44
    55class Plugin {
    66
    77        /**
    88         * @todo AJAXify subscription action.
    99         * @todo Add unsubscribe link to outgoing emails.
    1010         */
    1111
    1212        private $subscribers = array();
    1313
    14         public $taxonomy = false;
    15         public $labels   = array();
     14        public $taxonomy  = false;
     15        public $labels    = array();
     16        public $directory = false;
    1617
    1718        const META_KEY = '_bbp_term_subscription';
    1819
    1920        public function __construct( $args = array() ) {
    2021                $r = wp_parse_args( $args, array(
    21                         'taxonomy' => 'topic-tag',
    22                         'labels'   => array(
     22                        'taxonomy'  => 'topic-tag',
     23                        'directory' => false,
     24                        'labels'    => array(
    2325                                'subscribed_header'      => __( 'Subscribed Topic Tags', 'wporg-forums' ),
    2426                                'subscribed_user_notice' => __( 'You are not currently subscribed to any topic tags.', 'wporg-forums' ),
    2527                                'subscribed_anon_notice' => __( 'This user is not currently subscribed to any topic tags.', 'wporg-forums' ),
    2628                                'receipt'                => __( 'You are receiving this email because you are subscribed to a topic tag.', 'wporg-forums'),
    2729                        ),
    2830                ) );
    2931
    30                 $this->taxonomy = $r['taxonomy'];
    31                 $this->labels   = $r['labels'];
     32                $this->taxonomy  = $r['taxonomy'];
     33                $this->labels    = $r['labels'];
     34                $this->directory = $r['directory'];
    3235
    3336                add_action( 'bbp_init', array( $this, 'bbp_init' ) );
    3437        }
    3538
    3639        /**
    3740         * Initialize the plugin.
    3841         */
    3942        public function bbp_init() {
    4043                // If the user isn't logged in, there will be no topics or replies added.
    4144                if ( ! is_user_logged_in() ) {
    4245                        return;
    4346                }
    4447
    4548                if ( ! $this->taxonomy ) {
    4649                        return;
    class Plugin { 
    172175                // Get users who were already notified and exclude them.
    173176                $forum_subscribers = bbp_get_forum_subscribers( $forum_id, true );
    174177                if ( ! empty( $forum_subscribers ) ) {
    175178                        $this->subscribers = array_diff( $this->subscribers, $forum_subscribers );
    176179                }
    177180
    178181                // Remove the author from being notified of their own topic.
    179182                $this->subscribers = array_diff( $this->subscribers, array( bbp_get_topic_author_id( $topic_id ) ) );
    180183
    181184                if ( empty( $this->subscribers ) ) {
    182185                        return;
    183186                }
    184187
    185188                // Replace forum-specific messaging with term subscription messaging.
    186189                add_filter( 'bbp_forum_subscription_mail_message', array( $this, 'replace_forum_subscription_mail_message' ), 10, 4 );
     190                add_filter( 'bbp_forum_subscription_mail_title',   array( $this, 'replace_forum_subscription_mail_title' ), 10, 2 );
    187191
    188192                // Replace forum subscriber list with term subscribers, avoiding duplicates.
    189193                add_filter( 'bbp_forum_subscription_user_ids', array( $this, 'add_term_subscribers_to_forum' ) );
    190194
    191195                // Actually notify our term subscribers.
    192196                bbp_notify_forum_subscribers( $topic_id, $forum_id );
    193197
    194198                // Remove filters.
    195                 remove_filter( 'bbp_forum_subscription_user_ids', array( $this, 'add_term_subscribers_to_forum' ) );
     199                remove_filter( 'bbp_forum_subscription_user_ids',     array( $this, 'add_term_subscribers_to_forum' ) );
    196200                remove_filter( 'bbp_forum_subscription_mail_message', array( $this, 'replace_forum_subscription_mail_message' ), 10 );
     201                remove_filter( 'bbp_forum_subscription_mail_title',   array( $this, 'replace_forum_subscription_mail_title' ) );
     202
    197203        }
    198204
    199205        /**
    200206         * Temporarily replace the forum subscriber list with any unincluded term subscribers.
    201207         */
    202208        public function add_term_subscribers_to_forum( $users ) {
    203209                return array_diff( $this->subscribers, $users );
    204210        }
    205211
    206212        /**
    207213         * Replace the forum subscription message with term-specific messaging.
    208214         *
    209215         * @param string $message The message
    210216         * @param int $topic_id The topic id
    211217         * @param int $forum_id The forum id
    Topic Link: %3$s 
    230236-----------
    231237
    232238%4$s
    233239
    234240Login and visit the topic to reply to the topic or unsubscribe from these emails. Note that replying to this email has no effect.', 'wporg-forums' ),
    235241                        $topic_author_name,
    236242                        $topic_content,
    237243                        $topic_url,
    238244                        $this->labels['receipt']
    239245                );
    240246
    241247                return $message;
    242248        }
    243249
    244250        /**
     251         * Replace the forum subscription subject/title with term-specific messaging.
     252         *
     253         * @param string $title The current title
     254         * @param int $topic_id The topic id
     255         * @param int $forum_id The forum id
     256         * @param int $user_id  The user id
     257         */
     258        public function replace_forum_subscription_mail_title( $title, $topic_id ) {
     259                if ( $this->directory && $this->directory->title() ) {
     260                        $blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
     261                        $topic_title = strip_tags( bbp_get_topic_title( $topic_id ) );
     262
     263                        // [WordPress.org] [Plugin Name] This is my threads
     264                        $title = sprintf( '[%s] [%s] %s', $blog_name, $this->directory->title(), $topic_title );
     265                }
     266
     267                return $title;
     268        }
     269
     270        /**
    245271         * Use the existing bbp_notify_topic_subscribers() to send out term subscriptions for replies.
    246272         * Avoid duplicate notifications for topic subscribers through the judicious use of filters within
    247273         * the function.
    248274         *
    249275         * @param int $reply_id The reply id
    250276         * @param int $topic_id The topic id
    251277         * @param int $forum_id The forum id
    252278         * @param mixed $anonymous_data
    253279         * @param int $reply_author
    254280         */
    255281        public function notify_term_subscribers_of_new_reply( $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author ) {
    256282                $terms = get_the_terms( $topic_id, $this->taxonomy );
    257283                if ( ! $terms ) {
    258284                        return;
    259285                }
    Login and visit the topic to reply to th 
    268294                // Get users who were already notified and exclude them.
    269295                $topic_subscribers = bbp_get_topic_subscribers( $topic_id, true );
    270296                if ( ! empty( $topic_subscribers ) ) {
    271297                        $this->subscribers = array_diff( $this->subscribers, $topic_subscribers );
    272298                }
    273299
    274300                // Remove the author from being notified of their own reply.
    275301                $this->subscribers = array_diff( $this->subscribers, array( bbp_get_reply_author_id( $reply_id ) ) );
    276302
    277303                if ( empty( $this->subscribers ) ) {
    278304                        return;
    279305                }
    280306
    281307                // Replace topic-specific messaging with term subscription messaging.
    282308                add_filter( 'bbp_subscription_mail_message', array( $this, 'replace_topic_subscription_mail_message' ), 10, 3 );
     309                add_filter( 'bbp_subscription_mail_title',   array( $this, 'replace_topic_subscription_mail_title' ), 10, 3 );
    283310
    284311                // Replace forum subscriber list with term subscribers, avoiding duplicates.
    285312                add_filter( 'bbp_topic_subscription_user_ids', array( $this, 'add_term_subscribers_to_topic' ) );
    286313
    287314                // Actually notify our term subscribers.
    288315                bbp_notify_topic_subscribers( $reply_id, $topic_id, $forum_id );
    289316
    290317                // Remove filters.
    291318                remove_filter( 'bbp_topic_subscription_user_ids', array( $this, 'add_term_subscribers_to_topic' ) );
    292                 remove_filter( 'bbp_subscription_mail_message', array( $this, 'replace_topic_subscription_mail_message' ), 10 );
     319                remove_filter( 'bbp_subscription_mail_message',   array( $this, 'replace_topic_subscription_mail_message' ) );
     320                remove_filter( 'bbp_subscription_mail_title',     array( $this, 'replace_topic_subscription_mail_title' ) );
    293321        }
    294322
    295323        /**
    296324         * Temporarily replace the forum subscriber list with any unincluded term subscribers.
    297325         */
    298326        public function add_term_subscribers_to_topic( $users ) {
    299327                return array_diff( $this->subscribers, $users );
    300328        }
    301329
    302330        /**
    303331         * Replace the topic subscription message with term-specific messaging.
    304332         *
    305333         * @param string $message The message
    306334         * @param int $reply_id The reply id
    307335         * @param int $topic_id The topic id
    Reply Link: %3$s 
    325353-----------
    326354
    327355%4$s
    328356
    329357Login and visit the topic to reply to the topic or unsubscribe from these emails. Note that replying to this email has no effect.', 'wporg-forums' ),
    330358                        $reply_author_name,
    331359                        $reply_content,
    332360                        $reply_url,
    333361                        $this->labels['receipt']
    334362                );
    335363
    336364                return $message;
    337365        }
    338366
    339367        /**
     368         * Replace the topic subscription subject/title with term-specific messaging.
     369         *
     370         * @param string $title The current title
     371         * @param int $reply_id The reply id
     372         * @param int $topic_id The topic id
     373         */
     374        public function replace_topic_subscription_mail_title( $title, $reply_id, $topic_id ) {
     375                if ( $this->directory && $this->directory->title() ) {
     376                        $blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
     377                        $topic_title = strip_tags( bbp_get_topic_title( $topic_id ) );
     378
     379                        // [WordPress.org] [Plugin Name] This is my threads
     380                        $title = sprintf( '[%s] [%s] %s', $blog_name, $this->directory->title(), $topic_title );
     381                }
     382
     383                return $title;
     384        }
     385
     386        /**
    340387         * Add a term subscription block to the user's profile.
    341388         */
    342389        public function user_subscriptions() {
    343390                $user_id = bbp_get_user_id();
    344391                if ( empty( $user_id ) ) {
    345392                        return;
    346393                }
    347394                $terms = self::get_user_taxonomy_subscriptions( $user_id, $this->taxonomy );
    348395                ?>
    349396
    350397                <div class="bbp-user-subscriptions">
    351398                        <h2 class="entry-title"><?php echo esc_html( $this->labels['subscribed_header'] ); ?></h2>
    352399                        <div class="bbp-user-section">
    353400                        <?php
    354401                        if ( $terms ) {