ID, $user)) { return; } // Check how many posts user has created in last 5 minutes $postsCount = Feed::query()->withoutGlobalScopes()->where('user_id', $user->ID) ->where('created_at', '>', gmdate('Y-m-d H:i:s', current_time('timestamp') - 300)) ->count(); $limitPer5Minutes = apply_filters('fluent_community/rate_limit/posts_per_5_minutes', 5); if ($postsCount >= $limitPer5Minutes) { throw new \Exception(esc_html__('You have reached the limit of posting. Please try after some time', 'fluent-community')); } } public function maybeLimitComment(User $user) { if (Helper::isSiteAdmin($user->ID, $user)) { return; } // Check how many comments user has created in last 1 minute $commentsCount = Comment::query()->withoutGlobalScopes()->where('user_id', $user->ID) ->where('created_at', '>', gmdate('Y-m-d H:i:s', current_time('timestamp') - 60)) ->count(); $limitPerMinute = apply_filters('fluent_community/rate_limit/comments_per_minute', 5); if ($commentsCount >= $limitPerMinute) { throw new \Exception(esc_html__('You have reached the limit of commenting. Please try after some time', 'fluent-community')); } } public function maybeLimitMediaUpload(User $user) { if (Helper::isSiteAdmin($user->ID, $user)) { return; } // Check how many media items user has uploaded in last 1 minute $mediaCount = Media::query()->withoutGlobalScopes()->where('user_id', $user->ID) ->where('created_at', '>', gmdate('Y-m-d H:i:s', current_time('timestamp') - 60)) ->count(); $limitPerMinute = apply_filters('fluent_community/rate_limit/media_upload_per_minute', 10); if ($mediaCount >= $limitPerMinute) { throw new \Exception(esc_html__('You have reached the limit of media uploads. Please try after some time', 'fluent-community')); } } public function maybeLimitOembed(User $user) { if (Helper::isSiteAdmin($user->ID, $user)) { return; } $limitPerMinute = apply_filters('fluent_community/rate_limit/oembed_per_minute', 20); if (wp_using_ext_object_cache()) { $cacheKey = 'oembed_rate_limit_' . $user->ID; wp_cache_add($cacheKey, 0, 'fluent-community', MINUTE_IN_SECONDS); $previewCount = (int) wp_cache_incr($cacheKey, 1, 'fluent-community'); } else { $transientKey = 'fcom_oembed_rate_limit_' . $user->ID; $previewCount = (int) get_transient($transientKey) + 1; set_transient($transientKey, $previewCount, MINUTE_IN_SECONDS); } if ($previewCount > $limitPerMinute) { throw new \Exception(esc_html__('You have reached the limit of link previews. Please try after some time', 'fluent-community')); } } }