Skip to:
Content

BuddyPress.org

Ticket #6719: 6719.01.patch

File 6719.01.patch, 10.2 KB (added by r-a-y, 4 years ago)

Refreshed for trunk.

  • src/bp-activity/bp-activity-filters.php

     
    152152
    153153        // Unset the activity component so activity stream update fails
    154154        // @todo This is temporary until some kind of moderation is built.
    155         if ( !bp_core_check_for_moderation( $activity->user_id, '', $activity->content ) )
     155        $moderate = bp_core_check_for_moderation( $activity->user_id, '', $activity->content, 'wp_error' );
     156        if ( is_wp_error( $moderate ) ) {
     157                // Send back the same error object.
     158                $activity->errors = $moderate;
     159
     160                // Backpat.
    156161                $activity->component = false;
     162        }
    157163}
    158164
    159165/**
  • src/bp-activity/bp-activity-functions.php

     
    18361836 * Add an activity item.
    18371837 *
    18381838 * @since 1.1.0
    1839  *
    1840  * @uses wp_parse_args()
    1841  * @uses BP_Activity_Activity::save() {@link BP_Activity_Activity}
    1842  * @uses BP_Activity_Activity::rebuild_activity_comment_tree() {@link BP_Activity_Activity}
    1843  * @uses wp_cache_delete()
    1844  * @uses do_action() To call the 'bp_activity_add' hook.
     1839 * @since 2.x.0 Added 'error_type' parameter to $args.
    18451840 *
    18461841 * @param array|string $args {
    18471842 *     An array of arguments.
     
    18731868 *     @type bool     $hide_sitewide     Should the item be hidden on sitewide streams?
    18741869 *                                       Default: false.
    18751870 *     @type bool     $is_spam           Should the item be marked as spam? Default: false.
     1871 *     @type string   $error_type        Optional. Error type. Either 'bool' or 'wp_error'. Default: 'bool'.
    18761872 * }
    18771873 * @return int|bool The ID of the activity on success. False on error.
    18781874 */
     
    18911887                'recorded_time'     => bp_core_current_time(), // The GMT time that this activity was recorded.
    18921888                'hide_sitewide'     => false,                  // Should this be hidden on the sitewide activity stream?
    18931889                'is_spam'           => false,                  // Is this activity item to be marked as spam?
     1890                'error_type'        => 'bool'
    18941891        ), 'activity_add' );
    18951892
    18961893        // Make sure we are backwards compatible.
     
    19141911        $activity->date_recorded     = $r['recorded_time'];
    19151912        $activity->hide_sitewide     = $r['hide_sitewide'];
    19161913        $activity->is_spam           = $r['is_spam'];
     1914        $activity->error_type        = $r['error_type'];
    19171915        $activity->action            = ! empty( $r['action'] )
    1918                                                                                 ? $r['action']
    1919                                                                                 : bp_activity_generate_action_string( $activity );
     1916                                                ? $r['action']
     1917                                                : bp_activity_generate_action_string( $activity );
    19201918
    1921         if ( ! $activity->save() ) {
     1919        $save = $activity->save();
     1920        if ( 'wp_error' === $r['error_type'] && is_wp_error( $save ) ) {
     1921                return $save;
     1922        } elseif ('bool' === $r['error_type'] && false === $save ) {
    19221923                return false;
    19231924        }
    19241925
     
    19701971
    19711972        $r = wp_parse_args( $args, array(
    19721973                'content' => false,
    1973                 'user_id' => bp_loggedin_user_id()
     1974                'user_id' => bp_loggedin_user_id(),
     1975                'error_type' => 'bool',
    19741976        ) );
    19751977
    19761978        if ( empty( $r['content'] ) || !strlen( trim( $r['content'] ) ) ) {
     
    20102012                'primary_link' => $add_primary_link,
    20112013                'component'    => buddypress()->activity->id,
    20122014                'type'         => 'activity_update',
     2015                'error_type'   => $r['error_type']
    20132016        ) );
    20142017
     2018        if ( is_wp_error( $activity_id ) ) {
     2019                return $activity_id;
     2020        }
     2021
    20152022        /**
    20162023         * Filters the latest update content for the activity item.
    20172024         *
  • src/bp-activity/classes/class-bp-activity-activity.php

     
    134134        var $is_spam;
    135135
    136136        /**
     137         * Error holder.
     138         *
     139         * @since 2.5.0
     140         *
     141         * @var WP_Error
     142         */
     143        public $errors;
     144
     145        /**
     146         * Error type to return. Either 'bool' or 'wp_error'.
     147         *
     148         * @since 2.5.0
     149         *
     150         * @var string
     151         */
     152        public $error_type = 'bool';
     153
     154        /**
    137155         * Constructor method.
    138156         *
    139157         * @since 1.5.0
     
    141159         * @param int|bool $id Optional. The ID of a specific activity item.
    142160         */
    143161        public function __construct( $id = false ) {
     162                // Instantiate errors object.
     163                $this->errors = new WP_Error;
     164
    144165                if ( !empty( $id ) ) {
    145166                        $this->id = $id;
    146167                        $this->populate();
     
    235256                 */
    236257                do_action_ref_array( 'bp_activity_before_save', array( &$this ) );
    237258
     259                if ( 'wp_error' === $this->error_type && ! empty( $this->errors->errors ) ) {
     260                        return $this->errors;
     261                }
     262
    238263                if ( empty( $this->component ) || empty( $this->type ) ) {
    239                         return false;
     264                        if ( 'bool' === $this->error_type ) {
     265                                return false;
     266                        } else {
     267                                if ( empty( $this->component ) ) {
     268                                        $this->errors->add( 'bp_activity_missing_component' );
     269                                } else {
     270                                        $this->errors->add( 'bp_activity_missing_type' );
     271                                }
     272
     273                                return $this->errors;
     274                        }
    240275                }
    241276
    242277                if ( empty( $this->primary_link ) ) {
  • src/bp-core/bp-core-moderation.php

     
    5252 * Check for moderation keys and too many links.
    5353 *
    5454 * @since 1.6.0
     55 * @since 2.x.0 Added $error_type parameter.
    5556 *
    56  * @uses bp_current_author_ip() To get current user IP address.
    57  * @uses bp_current_author_ua() To get current user agent.
    58  * @uses bp_current_user_can() Allow super admins to bypass blacklist.
    59  *
    60  * @param int    $user_id Topic or reply author ID.
    61  * @param string $title   The title of the content.
    62  * @param string $content The content being posted.
     57 * @param int    $user_id    Topic or reply author ID.
     58 * @param string $title      The title of the content.
     59 * @param string $content    The content being posted.
     60 * @param string $error_type The error type to return. Either 'bool' or 'wp_error'.
    6361 * @return bool True if test is passed, false if fail.
    6462 */
    65 function bp_core_check_for_moderation( $user_id = 0, $title = '', $content = '' ) {
     63function bp_core_check_for_moderation( $user_id = 0, $title = '', $content = '', $error_type = 'bool' ) {
    6664
    6765        /**
    6866         * Filters whether or not to bypass checking for moderation keys and too many links.
     
    136134
    137135                // Das ist zu viele links!
    138136                if ( $num_links >= $max_links ) {
    139                         return false;
     137                        if ( 'bool' === $error_type ) {
     138                                return false;
     139                        } else {
     140                                return new WP_Error( 'bp_moderation_too_many_links', __( 'You have inputted too many links', 'buddypress' ) );
     141                        }
    140142                }
    141143        }
    142144
     
    174176                                // Check each user data for current word.
    175177                                if ( preg_match( $pattern, $post_data ) ) {
    176178
    177                                         // Post does not pass.
    178                                         return false;
     179                                        if ( 'bool' === $error_type ) {
     180                                                return false;
     181                                        } else {
     182                                                return new WP_Error( 'bp_moderation_blacklist_match', __( 'You have inputted an inappropriate word.', 'buddypress' ) );
     183                                        }
    179184                                }
    180185                        }
    181186                }
  • src/bp-groups/bp-groups-activity.php

     
    379379                'item_id'           => false,
    380380                'secondary_item_id' => false,
    381381                'recorded_time'     => bp_core_current_time(),
    382                 'hide_sitewide'     => $hide_sitewide
     382                'hide_sitewide'     => $hide_sitewide,
     383                'error_type'        => 'bool'
    383384        ) );
    384385
    385386        return bp_activity_add( $r );
  • src/bp-groups/bp-groups-functions.php

     
    944944 * Post an Activity status update affiliated with a group.
    945945 *
    946946 * @since 1.2.0
     947 * @since 2.x.0 Added 'error_type' parameter to $args.
    947948 *
    948949 * @param array|string $args {
    949950 *     Array of arguments.
     
    963964        $bp = buddypress();
    964965
    965966        $defaults = array(
    966                 'content'  => false,
    967                 'user_id'  => bp_loggedin_user_id(),
    968                 'group_id' => 0
     967                'content'    => false,
     968                'user_id'    => bp_loggedin_user_id(),
     969                'group_id'   => 0,
     970                'error_type' => 'bool'
    969971        );
    970972
    971973        $r = wp_parse_args( $args, $defaults );
     
    10061008        $content_filtered = apply_filters( 'groups_activity_new_update_content', $activity_content );
    10071009
    10081010        $activity_id = groups_record_activity( array(
    1009                 'user_id' => $user_id,
    1010                 'action'  => $action,
    1011                 'content' => $content_filtered,
    1012                 'type'    => 'activity_update',
    1013                 'item_id' => $group_id
     1011                'user_id'    => $user_id,
     1012                'action'     => $action,
     1013                'content'    => $content_filtered,
     1014                'type'       => 'activity_update',
     1015                'item_id'    => $group_id,
     1016                'error_type' => $error_type
    10141017        ) );
    10151018
    10161019        groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() );
  • src/bp-templates/bp-legacy/buddypress-functions.php

     
    945945        }
    946946
    947947        if ( ! $object && bp_is_active( 'activity' ) ) {
    948                 $activity_id = bp_activity_post_update( array( 'content' => $_POST['content'] ) );
     948                $activity_id = bp_activity_post_update( array( 'content' => $_POST['content'], 'error_type' => 'wp_error' ) );
    949949
    950950        } elseif ( 'groups' === $object ) {
    951951                if ( $item_id && bp_is_active( 'groups' ) )
    952                         $activity_id = groups_post_update( array( 'content' => $_POST['content'], 'group_id' => $item_id ) );
     952                        $activity_id = groups_post_update( array( 'content' => $_POST['content'], 'group_id' => $item_id, 'error_type' => 'wp_error' ) );
    953953
    954954        } else {
    955955
     
    957957                $activity_id = apply_filters( 'bp_activity_custom_update', false, $object, $item_id, $_POST['content'] );
    958958        }
    959959
    960         if ( empty( $activity_id ) )
     960        if ( false === $activity_id ) {
    961961                exit( '-1<div id="message" class="error bp-ajax-message"><p>' . __( 'There was a problem posting your update. Please try again.', 'buddypress' ) . '</p></div>' );
     962        } elseif ( is_wp_error( $activity_id ) && ! empty( $activity_id->errors ) ) {
     963                exit( '-1<div id="message" class="error bp-ajax-message"><p>' . $activity_id->get_error_message() . '</p></div>' );
     964        }
    962965
    963966        $last_recorded = ! empty( $_POST['since'] ) ? date( 'Y-m-d H:i:s', intval( $_POST['since'] ) ) : 0;
    964967        if ( $last_recorded ) {