<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[3898] sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc: Support Forums: Add some helper classes prior to inclusion.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/3898">3898</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/3898","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>jmdodd</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-09-01 02:03:54 +0000 (Thu, 01 Sep 2016)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Support Forums: Add some helper classes prior to inclusion.

Hooks provides some minor visual changes for common bbPress display filters.

Dropin replaces functions that walk ancestors with those that do not. In forums where there are several hundred thousand topics and millions of replies, these operations become prohibitively expensive.

This is intended to mitigate a white-screen-of-death problem experienced on front-end actions such as new topic, trash topic, etc. after we crossed the two million topic threshold.</pre>

<h3>Added Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginssupportforumsincclassdropinphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-dropin.php</a></li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginssupportforumsincclasshooksphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-hooks.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginssupportforumsincclassdropinphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-dropin.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-dropin.php                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-dropin.php        2016-09-01 02:03:54 UTC (rev 3898)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,326 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+namespace WordPressdotorg\Forums;
+
+class Dropin {
+
+       function __construct() {
+               add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ), 11 );
+       }
+
+       public function plugins_loaded() {
+               remove_action( 'bbp_trashed_topic',    'bbp_update_topic_walker' );
+               remove_action( 'bbp_untrashed_topic',  'bbp_update_topic_walker' );
+               remove_action( 'bbp_deleted_topic',    'bbp_update_topic_walker' );
+               remove_action( 'bbp_spammed_topic',    'bbp_update_topic_walker' );
+               remove_action( 'bbp_unspammed_topic',  'bbp_update_topic_walker' );
+               remove_action( 'bbp_approved_topic',   'bbp_update_topic_walker' );
+               remove_action( 'bbp_unapproved_topic', 'bbp_update_topic_walker' );
+
+               remove_action( 'bbp_trashed_reply',    'bbp_update_reply_walker' );
+               remove_action( 'bbp_untrashed_reply',  'bbp_update_reply_walker' );
+               remove_action( 'bbp_deleted_reply',    'bbp_update_reply_walker' );
+               remove_action( 'bbp_spammed_reply',    'bbp_update_reply_walker' );
+               remove_action( 'bbp_unspammed_reply',  'bbp_update_reply_walker' );
+               remove_action( 'bbp_approved_reply',   'bbp_update_reply_walker' );
+               remove_action( 'bbp_unapproved_reply', 'bbp_update_reply_walker' );
+
+               // Avoid bbp_update_topic_walker().
+               remove_action( 'bbp_new_topic',  'bbp_update_topic' );
+               remove_action( 'bbp_edit_topic', 'bbp_update_topic' );
+               add_action( 'bbp_new_topic',     array( $this, 'bbp_update_topic' ) );
+               add_action( 'bbp_edit_topic',    array( $this, 'bbp_update_topic' ) );
+
+               // Avoid bbp_update_reply_walker().
+               remove_action( 'bbp_new_reply',  'bbp_update_reply' );
+               remove_action( 'bbp_edit_reply', 'bbp_update_reply' );
+               add_action( 'bbp_new_reply',     array( $this, 'bbp_update_reply' ) );
+               add_action( 'bbp_edit_reply',    array( $this, 'bbp_update_reply' ) );
+       }
+
+       /**
+        * Handle only the necessary meta stuff from posting a new topic or editing a topic
+        *
+        * @param int $topic_id Optional. Topic id
+        * @param int $forum_id Optional. Forum id
+        * @param bool|array $anonymous_data Optional logged-out user data.
+        * @param int $author_id Author id
+        * @param bool $is_edit Optional. Is the post being edited? Defaults to false.
+        * @uses bbp_get_topic_id() To get the topic id
+        * @uses bbp_get_forum_id() To get the forum id
+        * @uses bbp_get_current_user_id() To get the current user id
+        * @yses bbp_get_topic_forum_id() To get the topic forum id
+        * @uses update_post_meta() To update the topic metas
+        * @uses set_transient() To update the flood check transient for the ip
+        * @uses bbp_update_user_last_posted() To update the users last posted time
+        * @uses bbp_is_subscriptions_active() To check if the subscriptions feature is
+        *                                      activated or not
+        * @uses bbp_is_user_subscribed() To check if the user is subscribed
+        * @uses bbp_remove_user_subscription() To remove the user's subscription
+        * @uses bbp_add_user_subscription() To add the user's subscription
+        * @uses bbp_update_topic_last_reply_id() To update the last reply id topic meta
+        * @uses bbp_update_topic_last_active_id() To update the topic last active id
+        * @uses bbp_update_topic_last_active_time() To update the last active topic meta
+        * @uses bbp_update_topic_reply_count() To update the topic reply count
+        * @uses bbp_update_topic_reply_count_hidden() To udpate the topic hidden reply count
+        * @uses bbp_update_topic_voice_count() To update the topic voice count
+        * @uses bbp_update_topic_walker() To udpate the topic's ancestors
+        */
+       function bbp_update_topic( $topic_id = 0, $forum_id = 0, $anonymous_data = false, $author_id = 0, $is_edit = false ) {
+
+               // Validate the ID's passed from 'bbp_new_topic' action
+               $topic_id = bbp_get_topic_id( $topic_id );
+               $forum_id = bbp_get_forum_id( $forum_id );
+
+               // Bail if there is no topic
+               if ( empty( $topic_id ) ) {
+                       return;
+               }
+
+               // Check author_id
+               if ( empty( $author_id ) ) {
+                               $author_id = bbp_get_current_user_id();
+               }
+
+               // Check forum_id
+               if ( empty( $forum_id ) ) {
+                       $forum_id = bbp_get_topic_forum_id( $topic_id );
+               }
+
+               // Get the topic types
+               $topic_types = bbp_get_topic_types( $topic_id );
+
+               // Sticky check after 'bbp_new_topic' action so forum ID meta is set
+               if ( ! empty( $_POST['bbp_stick_topic'] ) && in_array( $_POST['bbp_stick_topic'], array_keys( $topic_types ) ) ) {
+
+                       // What's the caps?
+                       if ( current_user_can( 'moderate', $topic_id ) ) {
+
+                               // What's the haps?
+                               switch ( $_POST['bbp_stick_topic'] ) {
+
+                                       // Sticky in this forum
+                                       case 'stick'   :
+                                               bbp_stick_topic( $topic_id );
+                                               break;
+
+                                       // Super sticky in all forums
+                                       case 'super'   :
+                                               bbp_stick_topic( $topic_id, true );
+                                               break;
+
+                                       // We can avoid this as it is a new topic
+                                       case 'unstick' :
+                                       default        :
+                                               break;
+                               }
+                       }
+               }
+
+               // If anonymous post, store name, email, website and ip in post_meta.
+               // It expects anonymous_data to be sanitized.
+               // Check bbp_filter_anonymous_post_data() for sanitization.
+               if ( ! empty( $anonymous_data ) && is_array( $anonymous_data ) ) {
+
+                       // Parse arguments against default values
+                       $r = bbp_parse_args( $anonymous_data, array(
+                               'bbp_anonymous_name'    => '',
+                               'bbp_anonymous_email'   => '',
+                               'bbp_anonymous_website' => '',
+                       ), 'update_topic' );
+
+                       // Update all anonymous metas
+                       foreach ( $r as $anon_key => $anon_value ) {
+                               update_post_meta( $topic_id, '_' . $anon_key, (string) $anon_value, false );
+                       }
+
+                       // Set transient for throttle check (only on new, not edit)
+                       if ( empty( $is_edit ) ) {
+                               set_transient( '_bbp_' . bbp_current_author_ip() . '_last_posted', time() );
+                       }
+
+               } else {
+                       if ( empty( $is_edit ) && ! current_user_can( 'throttle' ) ) {
+                               bbp_update_user_last_posted( $author_id );
+                       }
+               }
+
+               // Handle Subscription Checkbox
+               if ( bbp_is_subscriptions_active() && ! empty( $author_id ) ) {
+                       $subscribed = bbp_is_user_subscribed( $author_id, $topic_id );
+                       $subscheck  = ( ! empty( $_POST['bbp_topic_subscription'] ) && ( 'bbp_subscribe' === $_POST['bbp_topic_subscription'] ) ) ? true : false;
+
+                       // Subscribed and unsubscribing
+                       if ( true === $subscribed && false === $subscheck ) {
+                               bbp_remove_user_subscription( $author_id, $topic_id );
+
+                       // Subscribing
+                       } elseif ( false === $subscribed && true === $subscheck ) {
+                               bbp_add_user_subscription( $author_id, $topic_id );
+                       }
+               }
+
+               // Forum topic meta
+               bbp_update_topic_forum_id( $topic_id, $forum_id );
+
+               // Update associated topic values if this is a new topic
+               if ( empty( $is_edit ) ) {
+
+                       // Update poster IP if not editing
+                       update_post_meta( $topic_id, '_bbp_author_ip', bbp_current_author_ip(), false );
+
+                       // Last active time
+                       $last_active = get_post_field( 'post_date', $topic_id );
+
+                       // Reply topic meta
+                       bbp_update_topic_last_reply_id      ( $topic_id, 0            );
+                       bbp_update_topic_last_active_id     ( $topic_id, $topic_id    );
+                       bbp_update_topic_last_active_time   ( $topic_id, $last_active );
+                       bbp_update_topic_reply_count        ( $topic_id, 0            );
+                       bbp_update_topic_reply_count_hidden ( $topic_id, 0            );
+                       bbp_update_topic_voice_count        ( $topic_id               );
+
+               // Walk up ancestors and do the dirty work
+               // bbp_update_topic_walker( $topic_id, $last_active, $forum_id, 0, false );
+               }
+       }
+
+       /**
+        * Handle only the necessary meta stuff from posting a new reply or editing a reply
+        *
+        * @param int $reply_id Optional. Reply id
+        * @param int $topic_id Optional. Topic id
+        * @param int $forum_id Optional. Forum id
+        * @param bool|array $anonymous_data Optional logged-out user data.
+        * @param int $author_id Author id
+        * @param bool $is_edit Optional. Is the post being edited? Defaults to false.
+        * @param int $reply_to Optional. Reply to id
+        * @uses bbp_get_reply_id() To get the reply id
+        * @uses bbp_get_topic_id() To get the topic id
+        * @uses bbp_get_forum_id() To get the forum id
+        * @uses bbp_get_current_user_id() To get the current user id
+        * @uses bbp_get_reply_topic_id() To get the reply topic id
+        * @uses bbp_get_topic_forum_id() To get the topic forum id
+        * @uses update_post_meta() To update the reply metas
+        * @uses set_transient() To update the flood check transient for the ip
+        * @uses bbp_update_user_last_posted() To update the users last posted time
+        * @uses bbp_is_subscriptions_active() To check if the subscriptions feature is
+        *                                      activated or not
+        * @uses bbp_is_user_subscribed() To check if the user is subscribed
+        * @uses bbp_remove_user_subscription() To remove the user's subscription
+        * @uses bbp_add_user_subscription() To add the user's subscription
+        * @uses bbp_update_reply_forum_id() To update the reply forum id
+        * @uses bbp_update_reply_to() To update the reply to id
+        * @uses bbp_update_reply_walker() To update the reply's ancestors' counts
+        */
+       function bbp_update_reply( $reply_id = 0, $topic_id = 0, $forum_id = 0, $anonymous_data = false, $author_id = 0, $is_edit = false, $reply_to = 0 ) {
+
+               // Validate the ID's passed from 'bbp_new_reply' action
+               $reply_id = bbp_get_reply_id( $reply_id );
+               $topic_id = bbp_get_topic_id( $topic_id );
+               $forum_id = bbp_get_forum_id( $forum_id );
+               $reply_to = bbp_validate_reply_to( $reply_to, $reply_id );
+
+               // Bail if there is no reply
+               if ( empty( $reply_id ) ) {
+                       return;
+               }
+
+               // Check author_id
+               if ( empty( $author_id ) ) {
+                       $author_id = bbp_get_current_user_id();
+               }
+
+               // Check topic_id
+               if ( empty( $topic_id ) ) {
+                       $topic_id = bbp_get_reply_topic_id( $reply_id );
+               }
+
+               // Check forum_id
+               if ( ! empty( $topic_id ) && empty( $forum_id ) ) {
+                       $forum_id = bbp_get_topic_forum_id( $topic_id );
+               }
+
+               // If anonymous post, store name, email, website and ip in post_meta.
+               // It expects anonymous_data to be sanitized.
+               // Check bbp_filter_anonymous_post_data() for sanitization.
+               if ( ! empty( $anonymous_data ) && is_array( $anonymous_data ) ) {
+
+                       // Parse arguments against default values
+                       $r = bbp_parse_args( $anonymous_data, array(
+                               'bbp_anonymous_name'    => '',
+                               'bbp_anonymous_email'   => '',
+                               'bbp_anonymous_website' => '',
+                       ), 'update_reply' );
+
+                       // Update all anonymous metas
+                       foreach ( $r as $anon_key => $anon_value ) {
+                               update_post_meta( $reply_id, '_' . $anon_key, (string) $anon_value, false );
+                       }
+
+                       // Set transient for throttle check (only on new, not edit)
+                       if ( empty( $is_edit ) ) {
+                               set_transient( '_bbp_' . bbp_current_author_ip() . '_last_posted', time() );
+                       }
+
+               } else {
+                       if ( empty( $is_edit ) && !current_user_can( 'throttle' ) ) {
+                               bbp_update_user_last_posted( $author_id );
+                       }
+               }
+
+               // Handle Subscription Checkbox
+               if ( bbp_is_subscriptions_active() && ! empty( $author_id ) && ! empty( $topic_id ) ) {
+                       $subscribed = bbp_is_user_subscribed( $author_id, $topic_id );
+                       $subscheck  = ( ! empty( $_POST['bbp_topic_subscription'] ) && ( 'bbp_subscribe' === $_POST['bbp_topic_subscription'] ) ) ? true : false;
+
+                       // Subscribed and unsubscribing
+                       if ( true === $subscribed && false === $subscheck ) {
+                               bbp_remove_user_subscription( $author_id, $topic_id );
+
+                       // Subscribing
+                       } elseif ( false === $subscribed && true === $subscheck ) {
+                               bbp_add_user_subscription( $author_id, $topic_id );
+                       }
+               }
+
+               // Reply meta relating to reply position in tree
+               bbp_update_reply_forum_id( $reply_id, $forum_id );
+               bbp_update_reply_to      ( $reply_id, $reply_to );
+
+               // Update associated topic values if this is a new reply
+               if ( empty( $is_edit ) ) {
+
+                       // Update poster IP if not editing
+                       update_post_meta( $reply_id, '_bbp_author_ip', bbp_current_author_ip(), false );
+
+                       // Last active time
+                       $last_active_time = get_post_field( 'post_date', $reply_id );
+
+                       // Walk up ancestors and do the dirty work
+                       // bbp_update_reply_walker( $reply_id, $last_active_time, $forum_id, $topic_id, false );
+
+                       bbp_update_topic_last_reply_id( $topic_id, $reply_id );
+                       bbp_update_topic_last_active_id( $topic_id, $reply_id );
+
+                       // Get the last active time if none was passed
+                       $topic_last_active_time = $last_active_time;
+                       if ( empty( $last_active_time) ) {
+                               $topic_last_active_time = get_post_field( 'post_date', bbp_get_topic_last_active_id( $topic_id ) );
+                       }
+
+                       // Update the topic last active time regardless of reply status.
+                       // See https://bbpress.trac.wordpress.org/ticket/2838
+                       bbp_update_topic_last_active_time( $topic_id, $topic_last_active_time );
+
+                       // Counts
+                       bbp_update_topic_voice_count( $topic_id );
+
+                       // Only update reply count if we're deleting a reply, or in the dashboard.
+                       if ( in_array( current_filter(), array( 'bbp_deleted_reply', 'save_post' ), true ) ) {
+                               bbp_update_topic_reply_count( $topic_id );
+                               bbp_update_topic_reply_count_hidden( $topic_id );
+                       }
+               }
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-dropin.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginssupportforumsincclasshooksphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-hooks.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-hooks.php                               (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-hooks.php 2016-09-01 02:03:54 UTC (rev 3898)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,29 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+namespace WordPressdotorg\Forums;
+
+class Hooks {
+
+       public function __construct() {
+               // Basic behavior filters and actions.
+               add_filter( 'bbp_get_forum_pagination_count', '__return_empty_string' );
+
+               // Display-related filters and actions.
+               add_filter( 'bbp_get_topic_admin_links', array( $this, 'get_admin_links' ), 10, 3 );
+               add_filter( 'bbp_get_reply_admin_links', array( $this, 'get_admin_links' ), 10, 3 );
+       }
+
+       /**
+        * Remove "Trash" from admin links. Trashing a topic or reply will eventually
+        * permanently delete it when the trash is emptied. Better to mark it as
+        * pending or spam.
+        */
+       public function get_admin_links( $retval, $r, $args ) {
+               unset( $r['links']['trash'] );
+
+               $links = implode( $r['sep'], array_filter( $r['links'] ) );
+               $retval = $r['before'] . $links . $r['after'];
+
+               return $retval;
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-forums/inc/class-hooks.php
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span></div>

</body>
</html>