@@ -239,99 +239,49 @@ function anonymous_bbpress_init() {
239239 anonymous_bbpress_initialize_posting ( $ anonymous_users );
240240}
241241
242- /**
243- * Set up anonymous posting.
244- *
245- * @param array $anonymous_users Anonymous users array.
246- */
247- function anonymous_bbpress_initialize_posting ($ anonymous_users ) {
248- global $ anonymous_bbpress_users ;
249- $ anonymous_bbpress_users = $ anonymous_users ;
242+ // initialize anonymous posting
243+ function anonymous_bbpress_initialize_posting ( $ anonymous_users ) {
244+ global $ anonymous_bbpress_users ;
245+ $ anonymous_bbpress_users = $ anonymous_users ;
250246
251- add_filter ('bbp_before_filter_anonymous_post_data_parse_args ' , 'anonymous_bbpress_select_random_user ' , 10 );
252- add_filter ('bbp_pre_anonymous_post_author_name ' , 'anonymous_bbpress_set_random_name ' );
253- add_filter ('bbp_pre_anonymous_post_author_email ' , 'anonymous_bbpress_set_random_email ' );
254- add_filter ('bbp_filter_anonymous_post_data ' , 'anonymous_bbpress_filter_anonymous_post_data ' , 11 , 2 );
255- }
256-
257- /**
258- * Select a random user for the post.
259- *
260- * @param array $r Post data.
261- * @return array Modified data.
262- */
263- function anonymous_bbpress_select_random_user ($ r ) {
264- global $ anonymous_bbpress_users , $ anonymous_bbpress_user_index ;
265-
266- if (!empty ($ anonymous_bbpress_users )) {
267- $ anonymous_bbpress_user_index = array_rand ($ anonymous_bbpress_users );
268- }
269-
270- return $ r ;
271- }
247+ // inject name/email early
248+ add_filter ( 'bbp_before_filter_anonymous_post_data_parse_args ' , 'anonymous_bbpress_set_random_identity ' , 5 );
272249
273- /**
274- * Set a random anonymous name if none provided.
275- *
276- * @param string $name Anonymous user name.
277- * @return string Name.
278- */
279- function anonymous_bbpress_set_random_name ($ name ) {
280- global $ anonymous_bbpress_users , $ anonymous_bbpress_user_index ;
281-
282- remove_filter (current_filter (), 'anonymous_bbpress_set_random_name ' );
283-
284- if (empty ($ name ) && !empty ($ anonymous_bbpress_users )) {
285- $ name = sanitize_text_field ($ anonymous_bbpress_users [$ anonymous_bbpress_user_index ][0 ]);
286- }
287-
288- return $ name ;
250+ // run flood protection
251+ add_filter ( 'bbp_filter_anonymous_post_data ' , 'anonymous_bbpress_filter_anonymous_post_data ' , 11 , 2 );
289252}
290253
291- /**
292- * Set a random anonymous email if none provided.
293- *
294- * @param string $email Anonymous user email.
295- * @return string Email.
296- */
297- function anonymous_bbpress_set_random_email ($ email ) {
298- global $ anonymous_bbpress_users , $ anonymous_bbpress_user_index ;
254+ // inject random name/email into post data
255+ function anonymous_bbpress_set_random_identity ( $ r ) {
256+ global $ anonymous_bbpress_users , $ anonymous_bbpress_user_index ;
299257
300- remove_filter (current_filter (), 'anonymous_bbpress_set_random_email ' );
258+ if ( ! empty ( $ anonymous_bbpress_users ) ) {
259+ $ anonymous_bbpress_user_index = array_rand ( $ anonymous_bbpress_users );
260+ $ r ['bbp_anonymous_name ' ] = sanitize_text_field ( $ anonymous_bbpress_users [ $ anonymous_bbpress_user_index ][0 ] );
261+ $ r ['bbp_anonymous_email ' ] = sanitize_email ( $ anonymous_bbpress_users [ $ anonymous_bbpress_user_index ][1 ] );
262+ }
301263
302- if (empty ($ email ) && !empty ($ anonymous_bbpress_users )) {
303- $ email = sanitize_email ($ anonymous_bbpress_users [$ anonymous_bbpress_user_index ][1 ]);
304- }
305-
306- return $ email ;
264+ return $ r ;
307265}
308266
309- /**
310- * Filter anonymous post data to prevent spam and flooding.
311- *
312- * @param array $retval Filtered data.
313- * @param array $r Post data.
314- * @return array Modified data.
315- */
316- function anonymous_bbpress_filter_anonymous_post_data ($ retval , $ r ) {
317- global $ anonymous_bbpress_users , $ anonymous_bbpress_user_index ;
318-
319- if (empty ($ anonymous_bbpress_users )) {
320- return $ retval ;
321- }
267+ // prevent duplicate post by same identity
268+ function anonymous_bbpress_filter_anonymous_post_data ( $ retval , $ r ) {
269+ global $ anonymous_bbpress_users , $ anonymous_bbpress_user_index ;
322270
323- if (
324- $ anonymous_bbpress_users [$ anonymous_bbpress_user_index ][0 ] === $ r ['bbp_anonymous_name ' ] &&
325- $ anonymous_bbpress_users [$ anonymous_bbpress_user_index ][1 ] === $ r ['bbp_anonymous_email ' ]
326- ) {
327- // Reset input to skip cookie writing
328- $ retval = array ();
271+ if ( empty ( $ anonymous_bbpress_users ) ) {
272+ return $ retval ;
273+ }
329274
330- // Activate flood check
331- $ retval ['bbp_anonymous_flood_check ' ] = '1 ' ;
332- }
275+ if (
276+ isset ( $ r ['bbp_anonymous_name ' ], $ r ['bbp_anonymous_email ' ] ) &&
277+ $ anonymous_bbpress_users [ $ anonymous_bbpress_user_index ][0 ] === $ r ['bbp_anonymous_name ' ] &&
278+ $ anonymous_bbpress_users [ $ anonymous_bbpress_user_index ][1 ] === $ r ['bbp_anonymous_email ' ]
279+ ) {
280+ $ retval = array (); // reset post data
281+ $ retval ['bbp_anonymous_flood_check ' ] = '1 ' ; // trigger flood check
282+ }
333283
334- return $ retval ;
284+ return $ retval ;
335285}
336286
337287// Ref: ChatGPT
0 commit comments