Sid Gifari File Manager
🏠 Root
/
home
/
genremedia08
/
thepassage.overlookedtracks.com
/
wp-content9
/
plugins
/
bp-better-messages
/
inc
/
Editing: hooks.php
<?php defined( 'ABSPATH' ) || exit; if ( !class_exists( 'Better_Messages_Hooks' ) ): class Better_Messages_Hooks { public static function instance() { static $instance = null; if ( null === $instance ) { $instance = new Better_Messages_Hooks(); } return $instance; } public function __construct() { add_action( 'admin_init', array( $this, 'update_db_if_needed' ) ); add_filter( 'cron_schedules', array( $this, 'cron_intervals' ) ); add_action('pre_get_posts', array($this, 'exclude_attachments_global')); if( Better_Messages()->settings['attachmentsHide'] === '1' ) { add_action('ajax_query_attachments_args', array($this, 'exclude_attachments')); } add_action( 'wp_head', array( $this, 'themes_adaptation' ) ); if( Better_Messages()->settings['chatPage'] !== '0' ){ add_filter( 'the_content', array( $this, 'chat_page' ), 12 ); } add_action( 'admin_notices', array( $this, 'admin_notice') ); //if( Better_Messages()->settings['fastStart'] == '1' ) { add_action( 'template_redirect', array($this, 'catch_fast_thread'), 0 ); //} if( Better_Messages()->settings['friendsMode'] == '1' && function_exists('friends_check_friendship') ) { add_filter( 'better_messages_can_send_message', array( $this, 'disable_non_friends_reply' ), 10, 3); add_action( 'better_messages_before_new_thread', array( $this, 'disable_start_thread_for_non_friends' ), 10, 2 ); } if( Better_Messages()->settings['allowUsersRestictNewThreads'] === '1' ){ add_filter( 'better_messages_before_new_thread', array( $this, 'disable_start_thread_if_user_restricted' ), 9, 2); } add_filter( 'better_messages_can_send_message', array( $this, 'disable_archived_reply' ), 10, 3); /* * Block, Suspend, Report for BuddyPress integration */ add_filter('better_messages_can_send_message', array($this, 'disable_message_for_blocked_user'), 10, 3); if( isset(Better_Messages()->settings['restrictNewReplies']) && is_array(Better_Messages()->settings['restrictNewReplies']) && count(Better_Messages()->settings['restrictNewReplies']) > 0 ) { add_filter( 'better_messages_can_send_message', array( $this, 'disable_message_for_blocked_restricted_role' ), 10, 3); } if( isset(Better_Messages()->settings['restrictNewThreads']) && is_array(Better_Messages()->settings['restrictNewThreads']) && count(Better_Messages()->settings['restrictNewThreads']) > 0 ) { add_action( 'better_messages_before_new_thread', array( $this, 'disable_thread_for_blocked_restricted_role' ), 10, 2); if( Better_Messages()->settings['restrictNewThreadsRemoveNewThreadButton'] === '1' ){ add_filter('bp_better_messages_script_variable', array( $this, 'disable_new_thread_button_if_needed' ), 10, 1 ); } } if( isset(Better_Messages()->settings['restrictViewMessages']) && is_array(Better_Messages()->settings['restrictViewMessages']) && count(Better_Messages()->settings['restrictViewMessages']) > 0 ) { add_filter( 'bp_better_messages_after_format_message', array( $this, 'hide_message_for_restricted_role' ), 10, 4 ); add_filter( 'bp_better_messages_fast', array( $this, 'disable_fast_mode' ), 10, 1 ); } if( Better_Messages()->settings['restrictRoleType'] === 'allow' && isset(Better_Messages()->settings['restrictRoleBlock']) && is_array(Better_Messages()->settings['restrictRoleBlock']) && count(Better_Messages()->settings['restrictRoleBlock']) > 0 ) { add_filter( 'better_messages_can_send_message', array( $this, 'disable_replied_role_to_role_block' ), 10, 3 ); add_filter( 'better_messages_before_new_thread', array( $this, 'disable_start_thread_role_to_role_block' ), 10, 2 ); add_filter( 'better_messages_search_user_sql_condition', array( $this, 'role_to_role_block_search_user_sql_condition'), 10, 4 ); } if( Better_Messages()->settings['restrictRoleType'] === 'disallow' ){ add_filter( 'better_messages_can_send_message', array( $this, 'disable_replied_role_to_role_allow' ), 10, 3 ); add_filter( 'better_messages_before_new_thread', array( $this, 'disable_start_thread_role_to_role_allow' ), 10, 2 ); add_filter( 'better_messages_search_user_sql_condition', array( $this, 'role_to_role_allow_search_user_sql_condition'), 10, 4 ); if( Better_Messages()->settings['restrictNewThreadsRemoveNewThreadButton'] === '1' ){ $this->disable_new_thread_button_if_disallowed(); } } if( Better_Messages()->settings['singleThreadMode'] == '1' ) { add_action( 'better_messages_before_new_thread', array( $this, 'disable_start_thread_if_thread_exist' ), 10, 2 ); } if( Better_Messages()->settings['disableGroupThreads'] == '1' ) { add_action( 'better_messages_before_new_thread', array( $this, 'disable_group_threads' ), 10, 2 ); } if( Better_Messages()->settings['mechanism'] == 'websocket' && Better_Messages()->settings['messagesStatus'] == '0'){ add_action( 'wp_head', array( $this, 'disableStatuses'), 1 ); add_action( 'bm_app_head', array( $this, 'disableStatuses' ) ); } add_action( 'template_redirect', array( $this, 'update_last_activity' ) ); /* * BuddyBoss trying to fix */ add_action('wp_enqueue_scripts', array( $this, 'inbox_counter_javascript' ) ); add_filter('messages_thread_get_inbox_count', array( $this, 'replace_unread_count' ), 10, 2 ); add_action( 'wp_footer', array( $this, 'mobile_popup_button') ); /* * BeeHive premium theme integration * https://www.wordplus.org/beehive */ add_action('wp_head', array( $this, 'beehive_theme_integration' ), 100 ); add_action('wp_head', array( $this, 'max_height_css' ), 100 ); add_filter( 'update_user_metadata', array( $this, 'override_last_activity' ), 1, 5 ); /** * PMPRO Access */ if( defined('PMPROBP_DIR') && function_exists('pmpro_bp_user_can') ){ add_action( 'better_messages_before_new_thread', array( $this, 'disable_thread_for_pmpro_restricted_role' ), 10, 2); add_filter( 'better_messages_can_send_message', array( $this, 'disable_messages_for_pmpro_restricted_role' ), 10, 3); } add_action('admin_head', array($this, 'hide_admin_counter' ) ); add_filter( 'bp_messages_allowed_tags', array($this, 'allow_additional_tags'), 10, 1 ); add_filter( 'better_messages_can_send_message', array( $this, 'disable_message_to_deleted_users' ), 10, 3); /** * https://wordpress.org/plugins/asgaros-forum/ */ if( class_exists('AsgarosForum') ){ add_action('asgarosforum_custom_profile_menu', array( $this, 'asragaros_profile_link')); if( apply_filters('asgarosforum_filter_show_header', true) ){ add_action('asgarosforum_content_header', array( $this, 'asragaros_profile_messages')); } else { add_action('asgarosforum_profile_custom_content_top', array( $this, 'asragaros_profile_messages')); } add_action('asgarosforum_after_post_author', array( $this, 'asragaros_thread_view'), 10, 2); } /** * BBPress */ if( class_exists('bbPress') ){ if( Better_Messages()->settings['bbPressAuthorDetailsLink'] === '1' ) { add_action('bbp_theme_after_reply_author_details', array($this, 'pm_link_bbpress')); } } if( Better_Messages()->settings['allowMuteThreads'] === '1' ) { /** * Remove standard Email & Notifications */ add_filter('bp_email_validate', array($this, 'mute_thread_remove_standard_email'), 10, 2); add_action('bp_notification_after_save', array( $this, 'mute_thread_delete_notification'), 10, 1 ); } if( Better_Messages()->settings['rateLimitNewThread'] > 0 ){ add_action( 'better_messages_before_new_thread', array( $this, 'new_thread_rate_limit' ), 10, 2 ); add_action( 'bp_better_messages_new_thread_created', array( $this, 'new_thread_record_last_thread_time' ), 10, 2 ); } add_action( 'better_messages_before_message_send', array( $this, 'new_replies_rate_limit' ), 10, 2 ); add_filter( 'better_messages_can_send_message', array( $this, 'disable_message_for_new_replies_rate_limited' ), 10, 3 ); if( Better_Messages()->settings['enableReplies'] === '1' ) { add_filter('bp_better_messages_after_format_message', array($this, 'reply_message_formatting'), 101, 4); } if( ! empty( Better_Messages()->settings['badWordsList'] ) ){ add_action( 'better_messages_before_new_thread', array( $this, 'disable_new_thread_with_bad_word' ), 10, 2 ); add_action( 'better_messages_before_message_send', array( $this, 'disable_reply_with_bad_word' ), 10, 2 ); } if( class_exists('WooCommerce') && Better_Messages()->settings['chatPage'] === 'woocommerce' ) { add_action( 'init', array( $this, 'woocommerce_add_messages_endpoint' ) ); add_filter( 'query_vars', array( $this, 'woocommerce_messages_query_vars' ), 0 ); $slug = Better_Messages()->settings['bpProfileSlug']; add_filter( 'woocommerce_account_menu_items', array( $this, 'woocommerce_add_messages_link_my_account' ) ); add_action( 'woocommerce_account_' . $slug . '_endpoint', array( $this, 'woocommerce_messages_content' ) ); } if( defined('ultimatemember_version') ){ require_once Better_Messages()->path . 'addons/ultimate-member.php'; Better_Messages_Ultimate_Member::instance(); } if( Better_Messages()->settings['allowUsersBlock'] === '1' ) { require_once Better_Messages()->path . 'addons/users-block.php'; Better_Messages_Block_Users::instance(); } if( Better_Messages()->settings['allowReports'] === '1' ) { require_once Better_Messages()->path . 'addons/user-reports/user-reports.php'; Better_Messages_User_Reports::instance(); } if( Better_Messages()->settings['enableReactions'] === '1' ) { Better_Messages_Reactions::instance(); } if( Better_Messages()->settings['pinnedThreads'] === '1' ) { require_once Better_Messages()->path . 'addons/pinned-conversations.php'; Better_Messages_Pinned_Conversations::instance(); } if ( class_exists( 'myCRED_Core' ) ){ require_once Better_Messages()->path . 'addons/mycred.php'; Better_Messages_MyCred::instance(); } if ( class_exists( 'GamiPress' ) ) { require_once Better_Messages()->path . 'addons/gamipress.php'; Better_Messages_GamiPress::instance(); } if( Better_Messages()->settings['pinnedMessages'] === '1' ) { require_once Better_Messages()->path . 'addons/pinned-message.php'; Better_Messages_Pinned_Message::instance(); } if( class_exists( 'PeepSo' ) ) { require_once Better_Messages()->path . 'addons/peepso.php'; Better_Messages_Peepso::instance(); } if( class_exists('WP_User_Manager') ){ require_once Better_Messages()->path . 'addons/wp-user-manager.php'; Better_Messages_WP_User_Manager::instance(); } if( class_exists('WP_Job_Manager') ){ require_once Better_Messages()->path . 'addons/wp-job-manager.php'; Better_Messages_WP_Job_Manager::instance(); } if( defined('PROGRID_PLUGIN_VERSION') ){ require_once Better_Messages()->path . 'addons/profile-grid.php'; Better_Messages_Profile_Grid::instance(); } if( defined('USERSWP_VERSION') ){ require_once Better_Messages()->path . 'addons/userswp.php'; Better_Messages_UsersWP::instance(); } if( defined('WPFORO_VERSION') ){ require_once Better_Messages()->path . 'addons/wpforo.php'; Better_Messages_wpForo::instance(); } if( class_exists( 'WooCommerce' ) ){ require_once Better_Messages()->path . 'addons/woocommerce.php'; Better_Messages_WooCommerce::instance(); } if( class_exists( 'WooCommerce' ) && class_exists('WeDevs_Dokan') ){ require_once Better_Messages()->path . 'addons/dokan.php'; Better_Messages_Dokan::instance(); } if( defined('MVX_PLUGIN_VERSION') ){ require_once Better_Messages()->path . 'addons/multi-vendor-x.php'; Better_Messages_MultiVendorX::instance(); } if( function_exists('hivepress') ){ require_once Better_Messages()->path . 'addons/hivepress.php'; Better_Messages_HivePress::instance(); } add_action('init', array( $this, 'flush_rewrite_rules' ) ); add_action( 'better_messages_thread_updated', array( $this, 'thread_updated' ), 10, 1 ); if( function_exists('buddypress') && apply_filters( 'better_messages_replace_buddypress', true ) ) { require_once Better_Messages()->path . 'addons/buddypress.php'; Better_Messages_BuddyPress::instance(); } if( defined('BP_PLATFORM_VERSION') && apply_filters( 'better_messages_replace_buddyboss', true ) ) { require_once Better_Messages()->path . 'addons/buddyboss.php'; Better_Messages_BuddyBoss::instance(); } if( defined('ONESIGNAL_PLUGIN_URL') ) { require_once Better_Messages()->path . 'addons/onesignal.php'; Better_Messages_OneSignal::instance(); } if( defined('FLUENT_COMMUNITY_PLUGIN_VERSION') ){ require_once Better_Messages()->path . 'addons/fluent-community/fluent-community.php'; Better_Messages_Fluent_Community::instance(); } if( class_exists('DaftPlug\Progressify\Plugin') ){ require_once Better_Messages()->path . 'addons/progressify.php'; Better_Messages_Progressify::instance(); } add_action('template_redirect', array( $this, 'redirect_to_messages'), 0 ); if( Better_Messages()->settings['redirectUnlogged'] === '1' ){ add_filter( 'template_redirect', array( $this, 'redirect_unlogged') ); } if( Better_Messages()->settings['enableReplies'] === '1' ){ add_filter( 'better_messages_rest_message_meta', array( $this, 'reply_message_meta'), 10, 4 ); } if( function_exists('jet_engine') ){ require_once Better_Messages()->path . 'addons/jet-engine.php'; Better_Messages_Jet_Engine::instance(); } add_filter('bp_better_messages_script_variable', array( $this, 'script_variables'), 10, 1 ); add_filter( 'better_messages_message_content_before_save', [ Better_Messages()->functions, 'messages_filter_kses' ], 1 ); add_action( 'deleted_user', array( $this, 'wp_on_deleted_user' ), 10, 3 ); add_action( 'better_messages_on_deleted_user', array( $this, 'bm_on_deleted_user'), 10, 1 ); add_filter('bp_better_messages_after_format_message', array($this, 'system_message_formatting'), 101, 4); } public function system_message_formatting( $message, $message_id, $context, $user_id ) { if( $message !== '<!-- BM-SYSTEM-MESSAGE -->' ) return $message; $message = 'User iphone joined'; return $message; } public function wp_on_deleted_user( $user_id, $reassign = null, $user = null ){ if( Better_Messages()->settings['deleteMessagesOnUserDelete'] === '1' && ! wp_get_scheduled_event( 'better_messages_on_deleted_user', [ $user_id ] ) ){ wp_schedule_single_event( time(), 'better_messages_on_deleted_user', [ $user_id ] ); } } public function bm_on_deleted_user( $user_id ){ global $wpdb; ignore_user_abort(true); set_time_limit(0); $messages = $wpdb->get_results( $wpdb->prepare("SELECT id, thread_id FROM `" . bm_get_table('messages') . "` WHERE `sender_id` = %d", $user_id) ); $thread_ids = []; if( count( $messages ) > 0 ) { foreach ($messages as $message) { Better_Messages()->functions->delete_message($message->id, $message->thread_id, false, 'replace'); $thread_ids[] = $message->thread_id; } $thread_ids = array_unique($thread_ids); foreach ($thread_ids as $thread_id) { do_action('better_messages_thread_updated', $thread_id); } } } public function update_db_if_needed(){ if( current_user_can('manage_options') ) { Better_Messages_Rest_Api_DB_Migrate()->install_tables(); Better_Messages_Rest_Api_DB_Migrate()->migrations(); } } public function css_customizations(){ $rules = []; if( ! empty( BP_Better_Messages()->settings['mobilePopupLocationBottom'] ) && BP_Better_Messages()->settings['mobilePopupLocationBottom'] !== 20 ){ $bottom = (int) BP_Better_Messages()->settings['mobilePopupLocationBottom']; $rules[] = '#bp-better-messages-mini-mobile-open{bottom:' . $bottom . 'px!important}'; } $rules = apply_filters( 'better_messages_css_customizations', $rules ); ob_start(); if( count( $rules ) > 0 ) { echo implode('', $rules); } return ob_get_clean(); } public function script_variables( $script_variables ){ $user_id = Better_Messages()->functions->get_current_user_id(); $roles = Better_Messages()->functions->get_user_roles( $user_id ); if( isset($script_variables['miniMessages']) && $script_variables['miniMessages'] === '1' ){ $restricted_roles = Better_Messages()->settings['restrictViewMiniThreads']; $is_restricted = false; if( count( $restricted_roles ) > 0 ) { foreach( $restricted_roles as $restricted_role ){ if( in_array( $restricted_role, $roles ) ){ $is_restricted = true; } } } if( $is_restricted ) { $script_variables['miniMessages'] = '0'; } } if( isset($script_variables['miniFriends']) && $script_variables['miniFriends'] === '1' ){ $restricted_roles = Better_Messages()->settings['restrictViewMiniFriends']; $is_restricted = false; if( count( $restricted_roles ) > 0 ) { foreach( $restricted_roles as $restricted_role ){ if( in_array( $restricted_role, $roles ) ){ $is_restricted = true; } } } if( $is_restricted ) { $script_variables['miniFriends'] = '0'; } } if( isset($script_variables['miniGroups']) && $script_variables['miniGroups'] === '1' ){ $restricted_roles = Better_Messages()->settings['restrictViewMiniGroups']; $is_restricted = false; if( count( $restricted_roles ) > 0 ) { foreach( $restricted_roles as $restricted_role ){ if( in_array( $restricted_role, $roles ) ){ $is_restricted = true; } } } if( $is_restricted ) { $script_variables['miniGroups'] = '0'; } } return $script_variables; } public function reply_message_meta( $meta, $message_id, $thread_id, $content ){ $reply_to = Better_Messages()->functions->get_message_meta( $message_id, 'reply_to', true ); if( $reply_to ){ $meta['replyTo'] = (int) $reply_to; } return $meta; } public function redirect_to_messages(){ if( isset( $_GET['bm-redirect-to-messages'] ) ) { $redirect_url = Better_Messages()->functions->get_user_messages_url(get_current_user_id()); if ( isset( $_GET['thread-id'] ) ) { $redirect_url = Better_Messages()->functions->get_user_messages_url(get_current_user_id(), intval($_GET['thread-id'])); } wp_redirect($redirect_url); exit; } } public function redirect_unlogged() { if( Better_Messages()->guests->guest_access_enabled() ) return; $page_id = Better_Messages()->settings['chatPage']; if( is_numeric( $page_id ) && (int) $page_id > 0 ) { if ( ! is_user_logged_in() && is_page( $page_id ) ) { $link = add_query_arg('redirect', urlencode( get_permalink($page_id) ), apply_filters( 'better_messages_login_url', wp_login_url( add_query_arg([]) ) ) ); wp_redirect( $link ); exit; } } } public function thread_updated( $thread_id ){ global $wpdb; $wpdb->update( bm_get_table('recipients'), [ 'last_update' => Better_Messages()->functions->get_microtime() ], [ 'thread_id' => $thread_id ], ['%d'], ['%d'] ); Better_Messages()->hooks->clean_thread_cache( $thread_id ); } public function flush_rewrite_rules(){ if( ! is_admin() ) return false; global $wp_rewrite; $is_updated = get_option( 'bp-better-chat-settings-updated', false ); if( $is_updated ) { flush_rewrite_rules(); $wp_rewrite->init(); delete_option( 'bp-better-chat-settings-updated' ); } } public function role_to_role_allow_search_user_sql_condition( $sql_array, $user_ids, $search, $user_id ) { if( user_can($user_id, 'manage_options') ){ return $sql_array; } global $wpdb; $restrict_to = Better_Messages()->functions->get_restrict_to_roles( $user_id ); if( count( $restrict_to ) > 0 ){ $roles = array_keys( $restrict_to ); $arguments = []; foreach( $roles as $role ){ $arguments[] = $wpdb->prepare('%s', $role ); } $sql = "AND `ID` IN(SELECT DISTINCT(user_id) FROM `" . bm_get_table('roles') . "` WHERE role IN (". implode(',', $arguments ) .") )"; $sql_array[] = $sql; } else { $sql_array[] = "AND `ID` IS NULL"; } return $sql_array; } public function role_to_role_block_search_user_sql_condition( $sql_array, $user_ids, $search, $user_id ){ if( user_can($user_id, 'manage_options') ){ return $sql_array; } global $wpdb; $restrict_to = Better_Messages()->functions->get_restrict_to_roles( $user_id ); if( count( $restrict_to ) > 0 ){ $roles = array_keys( $restrict_to ); $arguments = []; foreach( $roles as $role ){ $arguments[] = $wpdb->prepare('%s', $role ); } $sql = "AND `ID` NOT IN(SELECT DISTINCT(user_id) FROM `" . bm_get_table('roles') . "` WHERE role IN (". implode(',', $arguments ) .") )"; $sql_array[] = $sql; } return $sql_array; } public function disable_start_thread_role_to_role_allow(&$args, &$errors){ $user_id = Better_Messages()->functions->get_current_user_id(); if( user_can($user_id, 'manage_options') ){ return null; } $recipients = $args['recipients']; if( ! is_array( $recipients ) ) return false; if( count($recipients) === 0 ) return false; $restrict_to = Better_Messages()->functions->get_restrict_to_roles( Better_Messages()->functions->get_current_user_id() ); $is_restricted = true; $restricted_message = Better_Messages()->settings['restrictRoleMessage']; if( count( $restrict_to ) > 0 ) { foreach ($recipients as $recipient) { $recipient_roles = Better_Messages()->functions->get_user_roles( $recipient ); foreach( $recipient_roles as $recipient_role ){ if( isset( $restrict_to[$recipient_role] ) ){ $is_restricted = false; $restricted_message = $restrict_to[$recipient_role]; } } } } if( $is_restricted ) { $errors[] = $restricted_message; } } public function disable_start_thread_role_to_role_block(&$args, &$errors){ $user_id = Better_Messages()->functions->get_current_user_id(); if( user_can($user_id, 'manage_options') ){ return null; } $recipients = $args['recipients']; if( ! is_array( $recipients ) ) return false; if( count($recipients) === 0 ) return false; $restrict_to = Better_Messages()->functions->get_restrict_to_roles( Better_Messages()->functions->get_current_user_id() ); $is_restricted = false; $restricted_message = false; if( count( $restrict_to ) > 0 ) { foreach ($recipients as $recipient) { $recipient_roles = Better_Messages()->functions->get_user_roles( $recipient ); foreach( $recipient_roles as $recipient_role ){ if( isset( $restrict_to[$recipient_role] ) ){ $is_restricted = true; $restricted_message = $restrict_to[$recipient_role]; } } } } if( $is_restricted ) { $errors[] = $restricted_message; } } public function disable_replied_role_to_role_block( $allowed, $user_id, $thread_id ){ $user_id = Better_Messages()->functions->get_current_user_id(); if( user_can($user_id, 'manage_options') ){ return $allowed; } $restrict_to = Better_Messages()->functions->get_restrict_to_roles( $user_id ); $is_restricted = false; $restricted_message = false; if( count( $restrict_to ) > 0 ){ $type = Better_Messages()->functions->get_thread_type( $thread_id ); if( $type !== 'thread' ) return $allowed; $recipients = Better_Messages()->functions->get_recipients( $thread_id ); if( count( $recipients ) > 2 ){ return $allowed; } foreach( $recipients as $recipient ){ if( $recipient->user_id === $user_id ) continue; if( ! Better_Messages()->functions->is_valid_user_id( $recipient->user_id ) ) continue; $recipient_roles = Better_Messages()->functions->get_user_roles( $recipient->user_id ); foreach( $recipient_roles as $recipient_role ){ if( isset( $restrict_to[$recipient_role] ) ){ $is_restricted = true; $restricted_message = $restrict_to[$recipient_role]; } } } } if( $is_restricted ) { $allowed = false; global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['role_block_restricted'] = $restricted_message; } return $allowed; } public function disable_replied_role_to_role_allow( $allowed, $user_id, $thread_id ){ $user_id = Better_Messages()->functions->get_current_user_id(); if( user_can($user_id, 'manage_options') ){ return $allowed; } $restrict_to = Better_Messages()->functions->get_restrict_to_roles( $user_id ); $is_restricted = true; $restricted_message = Better_Messages()->settings['restrictRoleMessage']; $type = Better_Messages()->functions->get_thread_type( $thread_id ); if( $type !== 'thread' ) return $allowed; $recipients = Better_Messages()->functions->get_recipients( $thread_id ); if( count( $recipients ) > 2 ){ return $allowed; } if( count( $restrict_to ) > 0 ){ foreach( $recipients as $recipient ){ if( $recipient->user_id === $user_id ) continue; if( ! Better_Messages()->functions->is_valid_user_id( $recipient->user_id ) ) continue; $recipient_roles = Better_Messages()->functions->get_user_roles( $recipient->user_id ); foreach( $recipient_roles as $recipient_role ){ if( isset( $restrict_to[$recipient_role] ) ){ $is_restricted = false; } } } } if( $is_restricted ) { $allowed = false; global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['role_block_restricted'] = $restricted_message; } return $allowed; } public function clean_thread_cache( $thread_id ){ wp_cache_delete('thread_' . $thread_id, 'bm_messages'); wp_cache_delete('thread_' . $thread_id . '_type', 'bm_messages'); wp_cache_delete('bm_thread_recipients_' . $thread_id, 'bm_messages'); } public function woocommerce_add_messages_endpoint(){ $page = get_option('woocommerce_myaccount_page_id'); $page = get_post($page); $slug = Better_Messages()->settings['bpProfileSlug']; if( !! $page ) { add_rewrite_endpoint($slug, EP_ROOT | EP_PAGES); } } public function woocommerce_messages_query_vars( $vars ){ $slug = Better_Messages()->settings['bpProfileSlug']; $vars[] = $slug; return $vars; } public function woocommerce_add_messages_link_my_account( $items ){ $slug = Better_Messages()->settings['bpProfileSlug']; $label = __('Messages', 'bp-better-messages'); if( isset( $items['customer-logout']) ) { $items = Better_Messages()->functions->array_insert_before('customer-logout', $items, $slug, $label); } else { $items['bp-messages'] = $label; } return $items; } public function woocommerce_messages_content(){ echo Better_Messages()->functions->get_page(); } public function reply_message_formatting( $message, $message_id, $context, $user_id ){ if( $context !== 'stack' ) return $message; $is_reply = strpos( $message, '<!-- BPBM REPLY -->' ) !== false; if( ! $is_reply ) return $message; $reply_message_id = (int) Better_Messages()->functions->get_message_meta( $message_id, 'reply_to_message_id', true ); if( ! $reply_message_id ) return $message; global $wpdb; $reply_message = $wpdb->get_row($wpdb->prepare("SELECT sender_id, message FROM " . bm_get_table('messages') . " WHERE `id` = %d", $reply_message_id)); if( ! $reply_message ) return $message; $sender_id = $reply_message->sender_id; $message_content = str_replace('<!-- BPBM REPLY -->', '', $reply_message->message); #remove_filter( 'bp_better_messages_after_format_message', array( Better_Messages()->urls, 'nice_links' ), 100 ); $message_content = Better_Messages()->functions->format_message($message_content, $reply_message_id, 'stack', $user_id); #add_filter( 'bp_better_messages_after_format_message', array( Better_Messages()->urls, 'nice_links' ), 100, 4 ); $sender = get_userdata( $sender_id ); if( ! $sender ) { $display_name = __('Deleted User', 'bp-better-messages'); } else { $display_name = esc_attr( $sender->display_name ); } $newMessage = '<span class="bpbm-replied-message" data-reply-message-id="' . $reply_message_id . '">'; $newMessage .= '<span class="bpbm-replied-message-name">' . $display_name . '</span>'; $newMessage .= '<span class="bpbm-replied-message-text">' . $message_content . '</span>'; $newMessage .= '</span>'; $newMessage .= '<span class="bpbm-replied-message-reply">' . $message . '</span>'; return $newMessage; } public function new_thread_record_last_thread_time($sent, $bpbm_last_message_id){ $user_id = Better_Messages()->functions->get_current_user_id(); Better_Messages()->functions->update_user_meta( $user_id, 'bpbm_last_thread_created', time() ); } public function new_replies_rate_limit( &$args, &$errors ){ global $wpdb; $sender_id = (isset($args['sender_id'])) ? $args['sender_id'] : Better_Messages()->functions->get_current_user_id(); $rate_limit_reply = (array) Better_Messages()->settings['rateLimitReply']; $user_roles = Better_Messages()->functions->get_user_roles( $sender_id ); if( count( $user_roles ) === 0 ){ return; } foreach( $user_roles as $user_role ){ if( isset($rate_limit_reply[$user_role]) ) { $value = (int) $rate_limit_reply[$user_role]['value']; if( $value === 0 ) continue; $type = $rate_limit_reply[$user_role]['type']; $timeAgo = 0; switch ( $type ){ case 'hour': $timeAgo = 3600; break; case 'day': $timeAgo = 3600 * 24; break; } $since = Better_Messages()->functions->get_microtime() - $timeAgo * 10000; $count = $wpdb->get_var($wpdb->prepare( " SELECT COUNT(*) FROM " . bm_get_table('messages') . " WHERE `sender_id` = %d AND `created_at` > %d ", $sender_id, $since )); if( $count >= $value ){ $errors['restrictRateLimitReply'] = Better_Messages()->settings['rateLimitReplyMessage']; break; } } } } public function disable_new_thread_with_bad_word( &$args, &$errors ){ if( Better_Messages()->settings['badWordsSkipAdmins'] === '1' && current_user_can('manage_options') ){ return; } $words_list = array_map('trim', explode("\n", Better_Messages()->settings['badWordsList'])); $contains_word = false; if( isset( $args['content'] ) ) { $message = strip_tags($args['content']); foreach ($words_list as $word) { if ( preg_match('/\b' . $word . '\b/iu', $message ) ) { $contains_word = true; break; } } } if( $contains_word ) { $errors['restrictBadWord'] = Better_Messages()->settings['restrictBadWordsList']; } } public function disable_reply_with_bad_word( &$args, &$errors ){ if( Better_Messages()->settings['badWordsSkipAdmins'] === '1' && current_user_can('manage_options') ){ return; } $words_list = array_map('trim', explode("\n", Better_Messages()->settings['badWordsList'])); $contains_word = false; $message = strip_tags($args['content']); foreach ($words_list as $word) { if ( preg_match('/\b' . $word . '\b/iu', $message ) ) { $contains_word = true; break; } } if( $contains_word ) { $errors['restrictBadWord'] = Better_Messages()->settings['restrictBadWordsList']; } } public function disable_message_for_new_replies_rate_limited( $allowed, $user_id, $thread_id ){ global $wpdb; if( ! Better_Messages()->functions->is_valid_user_id($user_id) ) { return $allowed; } $rate_limit_reply = (array) Better_Messages()->settings['rateLimitReply']; $user_roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach( $user_roles as $user_role ){ if( isset($rate_limit_reply[$user_role]) ) { $value = (int) $rate_limit_reply[$user_role]['value']; if( $value === 0 ) continue; $type = $rate_limit_reply[$user_role]['type']; $timeAgo = 0; switch ( $type ){ case 'hour': $timeAgo = 3600; break; case 'day': $timeAgo = 3600 * 24; break; } $since = Better_Messages()->functions->get_microtime() - $timeAgo * 10000; $count = $wpdb->get_var($wpdb->prepare( " SELECT COUNT(*) FROM " . bm_get_table('messages') . " WHERE `sender_id` = %d AND `created_at` > %d ", $user_id, $since )); if( $count >= $value ){ $is_restricted = true; break; } } } if( $is_restricted ) { $allowed = false; global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['restrictRateLimitReply'] = Better_Messages()->settings['rateLimitReplyMessage']; } return $allowed; } public function new_thread_rate_limit( &$args, &$errors ){ if( current_user_can('manage_options' ) ) return false; $user_id = Better_Messages()->functions->get_current_user_id(); $last_thread_created = (int) Better_Messages()->functions->get_user_meta( $user_id, 'bpbm_last_thread_created', true ); if( $last_thread_created !== 0 ){ $rateLimit = Better_Messages()->settings['rateLimitNewThread']; $last_thread_created_ago = time() - $last_thread_created; if( $last_thread_created_ago < $rateLimit ){ $errors['restrictNewThreadsRateLimit'] = sprintf(__('You cant start new conversation now. Please wait %s seconds.', 'bp-better-messages'), $rateLimit - $last_thread_created_ago); } } } public function mute_thread_delete_notification( $notification ){ if( $notification->component_name !== 'messages') return false; if( $notification->component_action !== 'new_message') return false; if( ! isset( $_REQUEST['thread_id'] ) ) return false; $thread_id = intval($_REQUEST['thread_id']); $user_id = $notification->user_id; $muted_threads = Better_Messages()->functions->get_user_muted_threads( $user_id ); if( isset( $muted_threads[ $thread_id ] ) ){ BP_Notifications_Notification::delete( array( 'id' => $notification->id ) ); } return true; } public function mute_thread_remove_standard_email($retval, $email){ if($email->get('type') !== 'messages-unread') return $retval; if( ! isset( $_REQUEST['thread_id'] ) ) return $retval; $user_id = $email->get_to()[0]->get_user()->ID; $thread_id = intval($_REQUEST['thread_id']); $muted_threads = Better_Messages()->functions->get_user_muted_threads( $user_id ); if( isset( $muted_threads[ $thread_id ] ) ){ $error_code = 'messages_user_muted_thread'; $feedback = 'Your message was not sent. User muted this thread.'; return new WP_Error( $error_code, $feedback ); } return $retval; } public function pm_link_bbpress(){ if( ! is_user_logged_in() ) return false; $reply_id = bbp_get_reply_id(); if ( bbp_is_reply_anonymous( $reply_id ) ) return false; $user_id = bbp_get_reply_author_id( $reply_id ); if( Better_Messages()->functions->get_current_user_id() === $user_id ) return false; $user = get_userdata($user_id); if( ! $user ) return false; $link = Better_Messages()->functions->create_conversation_link( $user->ID, '', '', Better_Messages()->settings['fastStart'] === '1' ); echo '<a href="' . $link . '" class="bpbm-private-message-link-buddypress">' . __('Private Message', 'bp-better-messages') . '</a>'; } public function asragaros_thread_view($author_id, $author_posts){ if( ! is_user_logged_in() ) return false; if( Better_Messages()->functions->get_current_user_id() === intval($author_id) ) return false; $view_user = get_userdata( $author_id ); $link = Better_Messages()->functions->add_hash_arg('new-conversation', [ 'to' => $view_user->ID ], Better_Messages()->functions->get_link( Better_Messages()->functions->get_current_user_id() )); echo '<a href="' . $link .'" class="bpbm-asragaros-messages-link">' . __('Private Message', 'bp-better-messages') . ' </a>'; } public function asragaros_profile_messages(){ if( ! is_user_logged_in() ) return false; $url_parts = explode('/', $_SERVER['REQUEST_URI']); if( ! in_array('profile', $url_parts) || ! in_array('messages', $url_parts) ) return false; global $asgarosforum; $asgarosforum->current_view = 'messages'; $asgarosforum->error = 'No error'; echo '<style type="text/css">#af-wrapper .error{display:none}</style>'; $user_id = $asgarosforum->current_element; $userData = get_user_by('id', $user_id); if ($userData) { if ($asgarosforum->profile->hideProfileLink()) { _e('You need to login to have access to profiles.', 'asgaros-forum'); } else { $asgarosforum->profile->show_profile_header($userData); $asgarosforum->profile->show_profile_navigation($userData); echo '<div id="profile-content" style="padding: 0">'; echo Better_Messages()->functions->get_page(); echo '</div>'; } } else { _e('This user does not exist.', 'asgaros-forum'); } } public function asragaros_profile_link(){ if( ! is_user_logged_in() ) return false; global $asgarosforum; $user_id = Better_Messages()->functions->get_current_user_id(); $view_id = $asgarosforum->current_element; if( $user_id !== $view_id ) { $view_user = get_userdata( $view_id ); $link = Better_Messages()->functions->add_hash_arg('new-conversation', [ 'to' => $view_user->ID ], Better_Messages()->functions->get_link( Better_Messages()->functions->get_current_user_id() )); echo '<a href="' . $link .'">' . __('Private Message', 'bp-better-messages') . ' </a>'; } else { $messages_total = Better_Messages()->functions->get_total_threads_for_user( $user_id, 'unread' ); $class = 'bp-better-messages-unread'; $class .= ( 0 === $messages_total ) ? ' no-count' : ' count'; $title = sprintf( _x( 'Messages <span class="%s">%s</span>', 'Messages list sub nav', 'bp-better-messages' ), esc_attr( $class ), bp_core_number_format( $messages_total ) ); $link = $asgarosforum->get_link('profile', $user_id) . 'messages/'; if( $asgarosforum->current_view === 'messages' ) { echo '<a class="active" href="' . $link .'">' . $title . ' </a>'; } else { echo '<a href="' . $link .'">' . $title . ' </a>'; } } } public function disable_message_to_deleted_users( $allowed, $user_id, $thread_id ){ $type = Better_Messages()->functions->get_thread_type( $thread_id ); if( $type !== 'thread' ) return $allowed; $recipients = Better_Messages()->functions->get_recipients( $thread_id ); unset( $recipients[$user_id] ); if( count( $recipients ) === 1 ){ $user_id = array_keys($recipients)[0]; if( ! Better_Messages()->functions->is_valid_user_id( $user_id ) ) return false; } else if ( count( $recipients ) === 0 ){ return false; } return $allowed; } public function allow_additional_tags( $tags ){ $tags['u'] = []; $tags['sub'] = []; $tags['sup'] = []; return $tags; } public function hide_admin_counter(){ echo '<style type="text/css">.no-count.bp-better-messages-unread{display:none!important}</style>'; } public function disable_thread_for_pmpro_restricted_role( &$args, &$errors ){ if( ! pmpro_bp_user_can( 'private_messaging', Better_Messages()->functions->get_current_user_id() ) ) { $errors['pmpro_restricted'] = __('Your membership does not allow to use messages', 'bp-better-messages'); } } public function disable_messages_for_pmpro_restricted_role( $allowed, $user_id, $thread_id ){ if( ! pmpro_bp_user_can( 'private_messaging', $user_id ) ) { $allowed = false; global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['pmpro_restricted'] = __('Your membership does not allow to use messages', 'bp-better-messages'); } return $allowed; } public function override_last_activity($null, $object_id, $meta_key, $meta_value, $prev_value){ if( $meta_key === 'last_activity' ) { Better_Messages()->users->update_last_activity( $object_id, $meta_value ); } return $null; } public function max_height_css(){ if( ! is_user_logged_in() ) return false; $max_height = (int) apply_filters('bp_better_messages_max_height', Better_Messages()->settings['messagesHeight']); $fixed_header_height = (int) Better_Messages()->settings['fixedHeaderHeight']; if( $fixed_header_height > 0 ){ $max_height = $max_height - $fixed_header_height; } #echo '<style type="text/css">body:not(.bp-messages-mobile) .bp-messages-wrap.bp-messages-wrap-main > .scroller,body:not(.bp-messages-mobile) .bp-messages-wrap.bp-messages-wrap-main > .bp-messages-side-threads-wrapper > .bp-messages-column > .scroller,body:not(.bp-messages-mobile) .bp-messages-wrap.bp-messages-wrap-main > .bp-messages-side-threads-wrapper > .bp-messages-column > .scroller > .scroller,body:not(.bp-messages-mobile) .bp-messages-wrap.bp-messages-wrap-main > .scroller > .scroller{max-height:'. $max_height .'px;}body:not(.bp-messages-mobile) .bp-messages-threads-wrapper{max-height:' . ($max_height) .'px!important;}</style>'; echo '<style type="text/css">.bp-messages-threads-wrapper{height:' . $max_height . 'px}</style>'; } public function beehive_theme_integration(){ if( ! class_exists('Beehive') ) return false; $options = get_option('beehive_opts', [ 'primary' => '#21759b' ]); if( is_array($options) && isset($options['primary'] ) ) { $main_color = $options['primary']; $rgba_color_075 = Better_Messages()->functions->hex2rgba($main_color, 0.075); $rgba_color_06 = Better_Messages()->functions->hex2rgba($main_color, 0.6); ?><style type="text/css"> body.bp-messages-mobile header{ display: none; } .bp-messages-wrap.bp-messages-mobile .reply .send button[type=submit]{ background: #f7f7f7 !important; } .bp-better-messages-list .tabs>div[data-tab=messages] .unread-count, .bp-better-messages-mini .chats .chat .head .unread-count{ background: <?php echo $main_color; ?> !important; } .bp-messages-wrap .chat-header .fas, .bp-messages-wrap .chat-header>a, .bp-messages-wrap .reply .send button[type=submit], .uppy-Dashboard-browse, .bp-messages-wrap.mobile-ready:not(.bp-messages-mobile) .bp-messages-mobile-tap{ color: <?php echo $main_color; ?> !important; } .uppy-Dashboard-close{ color: <?php echo $main_color; ?> !important; } .bp-messages-wrap .bp-emojionearea.focused, .bp-messages-wrap .new-message form>div input:focus, .bp-messages-wrap .active .taggle_list, .bp-messages-wrap .chat-header .bpbm-search form input:focus{ border-color: <?php echo $main_color; ?>!important; -moz-box-shadow: inset 0 1px 1px <?php echo $rgba_color_075; ?>, 0 0 8px <?php echo $rgba_color_06; ?>; -webkit-box-shadow: inset 0 1px 1px <?php echo $rgba_color_075; ?>, 0 0 8px <?php echo $rgba_color_06; ?>; box-shadow: inset 0 1px 1px <?php echo $rgba_color_075; ?>, 0 0 8px <?php echo $rgba_color_06; ?>; } .bp-messages-wrap #send-to .ui-autocomplete{ border-color: <?php echo $main_color; ?>; -moz-box-shadow: inset 0 0 0 <?php echo $rgba_color_075; ?>, 0 3px 3px <?php echo $rgba_color_06; ?>; -webkit-box-shadow: inset 0 0 0 <?php echo $rgba_color_075; ?>, 0 3px 3px <?php echo $rgba_color_06; ?>; box-shadow: inset 0 0 0 <?php echo $rgba_color_075; ?>, 0 3px 3px <?php echo $rgba_color_06; ?>; } </style> <script type="text/javascript"> wp.hooks.addAction('better_messages_update_unread', 'better_messages', function( unread ) { var private_messages = jQuery('#nav_private_messages'); if( unread > 0 ){ var count = private_messages.find('span.count'); if( count.length === 0 ){ private_messages.append('<span class="count">' + unread + '</span>'); } else { private_messages.find('.count').text(unread); } } else { private_messages.find('span.count').remove(); } }); </script> <?php } } public function update_last_activity(){ $user_id = Better_Messages()->functions->get_current_user_id(); if( is_user_logged_in() ) { Better_Messages()->users->update_last_activity( $user_id ); if( function_exists('bp_update_user_last_activity') ) { bp_update_user_last_activity($user_id); } } } public function mobile_popup_button(){ if( ! is_user_logged_in() && ! Better_Messages()->guests->guest_access_enabled() ) return ''; echo '<div id="bp-better-messages-mini-mobile-container"></div>'; if( Better_Messages()->settings['mobilePopup'] == '0' ) return ''; $user_id = Better_Messages()->functions->get_current_user_id(); $restricted_roles = Better_Messages()->settings['restrictMobilePopup']; if( count($restricted_roles) > 0 ) { $roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach ($restricted_roles as $restricted_role) { if (in_array($restricted_role, $roles)) { $is_restricted = true; } } if( $is_restricted ) return ''; } if( Better_Messages()->settings['mechanism'] === 'websocket') { $count = 0; } else { $count = Better_Messages()->functions->get_total_threads_for_user( $user_id, 'unread' ); } $class = ($count === 0) ? 'no-count' : ''; $positionClass = ( Better_Messages()->settings['mobilePopupLocation'] === 'left' ) ? ' bpbm-mobile-open-left' : ''; echo '<div id="bp-better-messages-mini-mobile-open" class="' . $positionClass . '">'; echo '<span class="bp-better-messages-mini-mobile-open-icon"></span>'; echo '<span class="count ' . $class . ' bp-better-messages-unread">' . $count . '</span></div>'; } public function heartbeat_unread_notifications( $response = array() ){ if( Better_Messages()->settings['mechanism'] === 'websocket') { if (isset($response['total_unread_messages'])) { unset($response['total_unread_messages']); } } return $response; } public function replace_unread_count( $unread_count, $user_id ){ /** Replacing BuddyBoss Messages Count */ if( class_exists('BuddyBoss_Theme') || function_exists( 'buddyboss_theme_register_required_plugins' ) ) { return 0; } if( Better_Messages()->settings['mechanism'] === 'websocket'){ /** BuddyX Counter */ if( defined('BUDDYX_MINIMUM_WP_VERSION') ){ return 0; } /** BuddyXPro Counter */ if( defined('BUDDYXPRO_MINIMUM_WP_VERSION') ){ return 0; } /** CERA Counter */ if( defined('GRIMLOCK_BUDDYPRESS_VERSION')){ return 0; } } return Better_Messages()->functions->get_total_threads_for_user( $user_id, 'unread' ); } public function inbox_counter_javascript(){ if( ! is_user_logged_in() ) return false; ob_start(); if(class_exists('WooCommerce')){ ?> wp.hooks.addAction('better_messages_update_unread', 'better_messages', function( unread ) { var element = document.querySelector('.woocommerce-MyAccount-navigation-link--bp-messages a .bp-better-messages-unread'); if ( ! element ) { var newElement = document.createElement('span'); newElement.className = 'bp-better-messages-unread bpbmuc bpbmuc-preserve-space bpbmuc-hide-when-null'; newElement.dataset.count = unread; newElement.textContent = unread; var parentElement = document.querySelector('.woocommerce-MyAccount-navigation-link--bp-messages a'); if( parentElement ) { parentElement.appendChild(newElement); } } }); <?php } if( class_exists('BuddyBoss_Theme') ){ ?> wp.hooks.addAction('better_messages_update_unread', 'better_messages', function( unread ) { var messages_count = jQuery('.header-notifications.user-messages span'); if( unread > 0 ){ messages_count.text(unread).attr('class', 'count'); } else { messages_count.text(unread).attr('class', 'no-alert'); } }); <?php } else if( function_exists( 'buddyboss_theme_register_required_plugins' ) ){ ?> wp.hooks.addAction('better_messages_update_unread', 'better_messages', function( unread ) { var iconSelector = '.bb-icon-inbox-small'; if( jQuery('body').hasClass('bb-template-v2') || jQuery('body').hasClass('bb-template-v1') ){ iconSelector = '.bb-icon-inbox'; } var messages_count = jQuery('.notification-wrap.messages-wrap .count'); if( unread > 0 ){ if( messages_count.length === 0 ){ jQuery('.notification-wrap.messages-wrap').find(iconSelector).parent().append( '<span class="count">' + unread + '</span>' ); } else { messages_count.text(unread).show(); } } else { messages_count.text(unread).hide(); } var buddypanel = jQuery('.buddypanel-menu .bp-messages-nav > a'); if( buddypanel.length > 0 ){ var messages_count = buddypanel.find('.count'); if( unread > 0 ){ if( messages_count.length === 0 ){ buddypanel.append( '<span class="count">' + unread + '</span>' ); } else { messages_count.text(unread).show(); } } else { messages_count.text(unread).hide(); } } }); <?php } else if( defined('BUDDYX_MINIMUM_WP_VERSION') || defined('BUDDYXPRO_MINIMUM_WP_VERSION') ){ ?> wp.hooks.addAction('better_messages_update_unread', 'better_messages', function( unread ) { var messages_count = jQuery('.buddypress-icons-wrapper .bp-msg .bp-icon-wrap sup'); if( unread === 0 ){ messages_count.hide(); } else { if( messages_count.length === 0 ){ jQuery('.buddypress-icons-wrapper .bp-msg .bp-icon-wrap').append('<sup>' + unread + '</sup>'); } else { messages_count.text(unread).show(); } } }); <?php } else if( defined('GRIMLOCK_BUDDYPRESS_VERSION') ){ ?> wp.hooks.addAction('better_messages_update_unread', 'better_messages', function( unread ) { var container = jQuery('.menu-item--messages'); var bubbleSpan = container.find('.bubble-count'); if( unread > 0 ){ if( bubbleSpan.length > 0 ){ bubbleSpan.text(unread); } else { var bubble = '<span class="bubble-count messages-count">' + unread + '</span>'; jQuery(bubble).prependTo( container ); } } else { bubbleSpan.remove(); } if( jQuery('body').hasClass('my-account') ) { var grimlock_counter = jQuery('#profile-content__nav ul.settings-nav #user-bp_better_messages_tab'); var count = grimlock_counter.find('span.count'); if (unread > 0) { if (count.length > 0) { count.text(unread); } else { jQuery('<span class="count">' + unread + '</span>').appendTo(grimlock_counter); } } else { count.remove(); } } }); <?php } $js = ob_get_clean(); if( trim( $js ) !== '' ){ wp_add_inline_script( 'better-messages', Better_Messages()->functions->minify_js( $js ), 'before' ); } } public function themes_adaptation(){ $theme = wp_get_theme(); $theme_name = $theme->get_template(); switch ($theme_name){ case 'boss': echo '<style type="text/css">'; echo 'body.bp-messages-mobile #mobile-header{display:none}'; echo 'body.bp-messages-mobile #inner-wrap{margin-top:0}'; echo 'body.bp-messages-mobile .site{min-height:auto}'; echo '</style>'; break; } } public function disableStatuses(){ ?><style type="text/css">.bp-messages-wrap .list .messages-stack .content .messages-list li .status{display: none !important;}.bp-messages-wrap .list .messages-stack .content .messages-list li .favorite{right: 5px !important;}</style><?php } public function disable_group_threads(&$args, &$errors){ if( ! is_array($args['recipients']) ) return false; $recipients = $args['recipients']; if(count($recipients) > 1) { $message = _x('You can start conversation only with 1 user per time', 'Error message when group threads are disabled', 'bp-better-messages'); $errors[] = $message; } } public function disable_message_for_blocked_user( $allowed, $user_id, $thread_id ){ if( ! class_exists('BPTK_Block') ) return $allowed; $participants = Better_Messages()->functions->get_participants($thread_id); if( ! isset( $participants['recipients'] ) ) { return $allowed; } /** * Not block in group thread */ if( count($participants['recipients']) > 1 ){ return $allowed; } foreach( $participants['recipients'] as $recipient_user_id ){ $list = Better_Messages()->functions->get_user_meta( $recipient_user_id, 'bptk_block', true ); if ( empty($list) ) { $list = array(); } $_list = apply_filters( 'get_blocked_users', $list, $recipient_user_id ); $recipient_blocked = array_filter( $_list ); if( in_array( $user_id, $recipient_blocked ) ){ global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['blocked_by_user'] = __('You were blocked by recipient', 'bp-better-messages'); $allowed = false; } } return $allowed; } public function disable_message_for_blocked_restricted_role( $allowed, $user_id, $thread_id ){ $user_id = Better_Messages()->functions->get_current_user_id(); $restricted_roles = (array) Better_Messages()->settings['restrictNewReplies']; $user_roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach( $user_roles as $user_role ){ if( in_array( $user_role, $restricted_roles ) ){ $is_restricted = true; } } if( $is_restricted ) { $allowed = false; global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['role_reply_restricted'] = Better_Messages()->settings['restrictNewRepliesMessage']; } return $allowed; } public function disable_fast_mode( $enabled ){ $user_id = Better_Messages()->functions->get_current_user_id(); $restricted_roles = (array) Better_Messages()->settings['restrictViewMessages']; $user_roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach( $user_roles as $user_role ){ if( in_array( $user_role, $restricted_roles ) ){ $is_restricted = true; } } if( $is_restricted ){ return '0'; } return $enabled; } public function hide_message_for_restricted_role( $message, $message_id, $context, $user_id ){ if( ! Better_Messages()->functions->is_valid_user_id( $user_id ) ){ return $message; } $restricted_roles = (array) Better_Messages()->settings['restrictViewMessages']; $user_roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach( $user_roles as $user_role ){ if( in_array( $user_role, $restricted_roles ) ){ $is_restricted = true; } } if( $is_restricted ){ return Better_Messages()->settings['restrictViewMessagesMessage']; } return $message; } public function disable_new_thread_button_if_needed( $vars ){ $user_id = Better_Messages()->functions->get_current_user_id(); if( $user_id > 0 && user_can( $user_id, 'manage_options' ) ) return $vars; $restricted_roles = (array) Better_Messages()->settings['restrictNewThreads']; $user_roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach( $user_roles as $user_role ){ if( in_array( $user_role, $restricted_roles ) ){ $is_restricted = true; } } if( $is_restricted ) { $vars['newThread'] = '0'; } return $vars; } public function disable_new_thread_button_if_disallowed(){ $user_id = Better_Messages()->functions->get_current_user_id(); $roles = Better_Messages()->functions->get_restrict_to_roles( $user_id ); $is_restricted = count( $roles ) === 0; if( $is_restricted ) { Better_Messages()->settings['disableNewThread'] = '1'; } } public function disable_thread_for_blocked_restricted_role( &$args, &$errors ){ $user_id = Better_Messages()->functions->get_current_user_id(); $restricted_roles = (array) Better_Messages()->settings['restrictNewThreads']; $user_roles = Better_Messages()->functions->get_user_roles( $user_id ); $is_restricted = false; foreach( $user_roles as $user_role ){ if( in_array( $user_role, $restricted_roles ) ){ $is_restricted = true; } } if( $is_restricted ) { $errors['restrictNewThreadsMessage'] = Better_Messages()->settings['restrictNewThreadsMessage']; } } public function disable_archived_reply($allowed, $user_id, $thread_id){ $participants = Better_Messages()->functions->get_recipients($thread_id); if( isset( $participants[$user_id] ) ){ if( (int) $participants[$user_id]->is_deleted === 1 ){ global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['thread_archived_1'] = __("This conversation is deleted.", 'bp-better-messages'); $bp_better_messages_restrict_send_message['thread_archived'] = __("You need to recover this conversation to continue.", 'bp-better-messages'); return false; } } return $allowed; } public function disable_non_friends_reply( $allowed, $user_id, $thread_id ){ $type = Better_Messages()->functions->get_thread_type( $thread_id ); if( $type !== 'thread' ) return $allowed; $participants = Better_Messages()->functions->get_participants($thread_id); if( count($participants['recipients']) !== 1) return $allowed; reset($participants['recipients']); $friend_id = key($participants['recipients']); /** * Allow users reply to admins even if not friends */ if( current_user_can('manage_options') || user_can( $friend_id, 'manage_options' ) || $friend_id < 0 ) { return $allowed; } $allowed = Better_Messages()->functions->is_friends($user_id, $friend_id); if( ! $allowed ){ global $bp_better_messages_restrict_send_message; $bp_better_messages_restrict_send_message['friendship_needed'] = __('You must become friends to send messages', 'bp-better-messages'); } return $allowed; } public function disable_start_thread_if_thread_exist(&$args, &$errors){ $recipients = $args['recipients']; if( ! is_array( $recipients ) ) return false; if(count($recipients) > 1) return false; $threadExists = array(); foreach( $recipients as $user_id ){ $from = Better_Messages()->functions->get_current_user_id(); $user = Better_Messages()->functions->rest_user_item( $user_id ); $threads = Better_Messages()->functions->find_existing_threads($from, $user_id); if( count($threads) > 0) { $threadExists[] = $user['name']; } } if(count($threadExists) > 0){ $message = sprintf(__('You already have conversations with %s', 'bp-better-messages'), implode(', ', $threadExists)); $errors[] = $message; } } public function disable_start_thread_if_user_restricted(&$args, &$errors){ if( current_user_can('manage_options' ) ) { return null; } $current_user_id = Better_Messages()->functions->get_current_user_id(); $recipients = $args['recipients']; if( ! is_array( $recipients ) ) $recipients = [ $recipients ]; foreach($recipients as $recipient){ if( $recipient < 0 ) continue; $user = get_userdata($recipient); $who_can_start = Better_Messages_User_Config()->get_who_can_start_value( $user->ID ); if( in_array( 'everyone', $who_can_start ) ) { continue; } if( in_array('nobody', $who_can_start) ){ $errors[] = sprintf(__('%s not allow to message him', 'bp-better-messages'), Better_Messages()->functions->get_name($user->ID) ); continue; } $friends_allowed = in_array('only_friends', $who_can_start); $followers_allowed = in_array('only_followers', $who_can_start); if( $friends_allowed && $followers_allowed ){ if( ! Better_Messages()->functions->is_friends( $current_user_id, $user->ID) ){ $errors['not_friends'] = sprintf( __('<strong>%s</strong> allows only friends to message him', 'bp-better-messages'), Better_Messages()->functions->get_name($user->ID) ); } else if( ! Better_Messages()->functions->is_followers( $current_user_id, $user->ID) ){ $errors['not_friends'] = sprintf(_x('<strong>%s</strong> allows only followers to message him', 'Ultimate Member User Restriction', 'bp-better-messages'), Better_Messages()->functions->get_name($user->ID)); } } else if( $friends_allowed ){ if( ! Better_Messages()->functions->is_friends( $current_user_id, $user->ID) ){ $errors['not_friends'] = sprintf( __('<strong>%s</strong> allows only friends to message him', 'bp-better-messages'), Better_Messages()->functions->get_name($user->ID) ); } } else if( $followers_allowed ){ if( ! Better_Messages()->functions->is_friends( $current_user_id, $user->ID) ){ $errors['not_friends'] = sprintf( __('<strong>%s</strong> allows only friends to message him', 'bp-better-messages'), Better_Messages()->functions->get_name($user->ID) ); } } } } public function disable_start_thread_for_non_friends(&$args, &$errors){ if( current_user_can('manage_options' ) ) { return null; } $recipients = $args['recipients']; if( ! is_array( $recipients ) ) $recipients = [ $recipients ]; $notFriends = array(); foreach( $recipients as $recipient ){ if( $recipient > 0 && ! friends_check_friendship( Better_Messages()->functions->get_current_user_id(), $recipient ) ) { $notFriends[] = Better_Messages()->functions->get_name($recipient); } } if(count($notFriends) > 0){ $message = sprintf(__('You must become friends with <strong>%s</strong> to start conversation', 'bp-better-messages'), implode(', ', $notFriends)); $errors['not_friends'] = $message; } } public function catch_fast_thread(){ if( ! is_user_logged_in() ) return; if( ! isset($_SERVER['QUERY_STRING']) ) return; if( isset($_GET['bm-fast-start']) && isset($_GET['to']) && ! empty($_GET['bm-fast-start']) && ! empty($_GET['to']) ){ $getTo = sanitize_text_field($_GET['to']); $to = false; if( is_numeric($getTo) ){ $to = get_userdata( $getTo ); } if( ! $to ) { $to = get_user_by('slug', $getTo ); } if( ! $to ) return false; if( Better_Messages()->settings['singleThreadMode'] == '1' ) { $threads = Better_Messages()->functions->find_existing_threads(Better_Messages()->functions->get_current_user_id(), $to->ID); if( count($threads) > 0) { $url = Better_Messages()->functions->get_link(); $url = Better_Messages()->functions->add_hash_arg('conversation/' . $threads[0], ['scrollToContainer' => '' ], $url ); wp_redirect($url); exit; } } $result = Better_Messages()->functions->get_pm_thread_id($to->ID); $url = Better_Messages()->functions->get_link( Better_Messages()->functions->get_current_user_id() ) ; if( isset($result['errors']) ){ $url = Better_Messages()->functions->add_hash_arg('', ['bmErrors' => urlencode( json_encode( $result['errors'] ) ) . 'end' ], $url ); wp_redirect($url); exit; } $url = Better_Messages()->functions->get_link(); $url = Better_Messages()->functions->add_hash_arg('conversation/' . $result['thread_id'], ['scrollToContainer' => '' ], $url ); wp_redirect($url); exit; } } public function admin_notice(){ if( ! class_exists('BuddyPress') && ! defined('ultimatemember_version') ){ if( Better_Messages()->settings['chatPage'] == '0' ){ echo '<div class="notice notice-error">'; echo '<p><b>Better Messages</b> require <b><a href="'. admin_url('options-general.php?page=bp-better-messages#general').'">installing Messages Location</a></b>.</p>'; echo '</div>'; } } else { if( ! bm_bp_is_active('messages') && ! defined('ultimatemember_version') ) { $url = admin_url('options-general.php?page=bp-components'); if( defined('BP_PLATFORM_VERSION') ){ $url = admin_url('admin.php?page=bp-components'); } echo '<div class="notice notice-error">'; echo '<p><b>Better Messages</b> require <b>BuddyPress</b> <b>Messages Component</b> to be active. <a href="'.$url.'">Activate</a></p>'; echo '</div>'; } } } public function chat_page($content){ $page_id = get_the_ID(); $chat_page_id = Better_Messages()->settings['chatPage']; if( ! is_numeric( $chat_page_id ) ) return $content; if( defined('ICL_LANGUAGE_CODE') ){ $chat_page_id = apply_filters( 'wpml_object_id', $chat_page_id, 'page', true, ICL_LANGUAGE_CODE ); } if( $chat_page_id != $page_id ) return $content; if( ! is_user_logged_in() && ! Better_Messages()->guests->guest_access_enabled() ){ $messages_content = Better_Messages()->functions->render_login_form(); if( strpos($content, '[bp-better-messages]') !== FALSE ){ return str_replace( '[bp-better-messages]', $messages_content, $content ); } else { return $messages_content; } } if( function_exists('pmpro_has_membership_access') ) { // PM PRO PLUGIN ACTIVE $hasaccess = pmpro_has_membership_access(NULL, NULL, false); if( ! $hasaccess ) return $content; } $messages_content = Better_Messages()->functions->get_page(); if( strpos($content, '[bp-better-messages]') !== FALSE || strpos($content, 'wp-block-better-messages-user-inbox') !== FALSE ){ $content = str_replace( '[bp-better-messages]', $messages_content, $content ); } else { $content = $messages_content; } return $content; } public function exclude_attachments_global( $query ){ if( Better_Messages()->settings['attachmentsHide'] === '1' ) { if( is_admin() && $query->is_main_query() && ( isset( $query->query['post_type'] ) && $query->query['post_type'] === 'attachment' ) ) { $meta_query = $query->get('meta_query'); if( ! is_array($meta_query) ) $meta_query = array(); $meta_query[] = array( 'key' => 'bp-better-messages-attachment', 'value' => '1', 'compare' => 'NOT EXISTS' ); $query->set('meta_query', $meta_query); } } if( ! is_admin() && $query->is_main_query() && isset( $query->query['pagename'] ) ){ $meta_query = $query->get('meta_query'); if( ! is_array($meta_query) ) $meta_query = array(); $meta_query[] = array( 'key' => 'bp-better-messages-attachment', 'value' => '1', 'compare' => 'NOT EXISTS' ); $query->set('meta_query', $meta_query); } } function exclude_attachments($query){ if( isset( $query['meta_query'] ) ) { $meta_query = $query['meta_query']; } else { $meta_query = array(); } if( ! is_array($meta_query) ) $meta_query = array(); $meta_query[] = array( 'key' => 'bp-better-messages-attachment', 'value' => '1', 'compare' => 'NOT EXISTS' ); $query['meta_query'] = $meta_query; return $query; } function cron_intervals( $schedules ) { /* * Cron for our new mailer! */ $schedules[ 'fifteen_minutes' ] = array( 'interval' => 60 * 15, 'display' => 'Every Fifteen Minutes', ); $schedules[ 'one_minute' ] = array( 'interval' => 60, 'display' => 'Every Minute' , ); $notifications_interval = (int) Better_Messages()->settings['notificationsInterval']; if( $notifications_interval < 1 ) $notifications_interval = 1; $schedules['bp_better_messages_notifications'] = array( 'interval' => 60 * $notifications_interval, 'display' => 'Better Messages Notifications Interval', ); $schedules['better_messages_cleaner_job'] = array( 'interval' => 60 * 5, 'display' => 'Better Messages Cleaner Job Interval', ); $schedules['better_messages_ai_ensure_completion_job'] = array( 'interval' => 60 * 5, 'display' => 'Better Messages AI Bots Ensure Completion Interval', ); return $schedules; } } // Fallback if( ! class_exists('BP_Better_Messages_Hooks') ){ class BP_Better_Messages_Hooks extends Better_Messages_Hooks {} } endif; function Better_Messages_Hooks() { return Better_Messages_Hooks::instance(); } if( ! function_exists('BP_Better_Messages_Hooks') ) { function BP_Better_Messages_Hooks() { return Better_Messages_Hooks(); } }
Save
Cancel