All Users Messenger'; $links[] = '' . esc_html__( 'Donate to this plugin »' ) . ''; } return $links; } /** ================================================== * Add page and Remove admin footer version * * @since 1.00 */ public function add_pages_remove_admin_footer_version() { add_menu_page( apply_filters( 'all_users_messenger_page_title', 'All Users Messenger' ), apply_filters( 'all_users_messenger_menu_title', 'All Users Messenger' ), apply_filters( 'all_users_messenger_capability', 'read' ), 'AllUsersMessenger', array( $this, 'all_users_messenger_page' ), 'dashicons-groups' ); remove_filter( 'update_footer', 'core_update_footer' ); } /** ================================================== * All Users Messenger page * * @since 1.00 */ public function all_users_messenger_page() { echo '
'; } /** ================================================== * Load script * * @param string $hook_suffix hook_suffix. * @since 1.00 */ public function admin_scripts( $hook_suffix ) { if ( 'toplevel_page_AllUsersMessenger' === $hook_suffix ) { $asset_file = include( plugin_dir_path( __DIR__ ) . 'guten/dist/messenger/allusersmessenger.asset.php' ); wp_enqueue_style( 'allusersmessenger-style', plugin_dir_url( __DIR__ ) . 'guten/dist/messenger/allusersmessenger.css', array( 'wp-components' ), '1.0.0', ); wp_enqueue_script( 'allusersmessenger', plugin_dir_url( __DIR__ ) . 'guten/dist/messenger/allusersmessenger.js', $asset_file['dependencies'], $asset_file['version'], true ); $messages = get_option( 'all_users_messages', array() ); $interval_sec = apply_filters( 'all_users_messenger_interval', 1 ); $latest_time = 0; if ( ! empty( $messages ) ) { $latest_time = max( array_keys( $messages ) ); } wp_localize_script( 'allusersmessenger', 'allusersmessenger_data', array( 'userid' => get_current_user_id(), 'messages' => json_encode( $messages, JSON_UNESCAPED_SLASHES ), 'interval_sec' => $interval_sec, 'latest_time' => $latest_time, 'submit_label' => __( 'Submit' ), ) ); } else { $asset_file = include( plugin_dir_path( __DIR__ ) . 'guten/dist/notify/allusersmessengernotify.asset.php' ); wp_enqueue_style( 'allusersmessengernotify-style', plugin_dir_url( __DIR__ ) . 'guten/dist/notify/allusersmessengernotify.css', array( 'wp-components' ), '1.0.0', ); wp_enqueue_script( 'allusersmessengernotify', plugin_dir_url( __DIR__ ) . 'guten/dist/notify/allusersmessengernotify.js', $asset_file['dependencies'], $asset_file['version'], true ); $interval_sec = apply_filters( 'all_users_messenger_notify_interval', 60 ); $message_modal = false; $notify_message = array(); $messages = get_option( 'all_users_messages', array() ); if ( ! empty( $messages ) ) { $latest_time = max( array_keys( $messages ) ); $user_latest_time = get_user_option( 'all_users_messages_latest_time', get_current_user_id() ); if ( $latest_time > $user_latest_time ) { $message_modal = true; $notify_message = array( 'username' => $messages[ $latest_time ]['username'], 'avatar' => $messages[ $latest_time ]['avatar'], 'datetime' => $messages[ $latest_time ]['datetime'], 'message' => $messages[ $latest_time ]['message'], ); } } wp_localize_script( 'allusersmessengernotify', 'allusersmessengernotify_data', array( 'userid' => get_current_user_id(), 'interval_sec' => intval( $interval_sec ), 'message_modal' => $message_modal, 'notify_message' => json_encode( $notify_message, JSON_UNESCAPED_SLASHES ), 'modal_title' => __( 'There are new messages', 'all-users-messenger' ), 'description' => 'All Users Messenger', ) ); } } /** ================================================== * Register Rest API * * @since 1.00 */ public function register_rest() { register_rest_route( 'rf/all_users_messenger_view_api', '/token', array( 'methods' => 'POST', 'callback' => array( $this, 'messages_api_view' ), 'permission_callback' => array( $this, 'users_rest_permission' ), ), ); register_rest_route( 'rf/all_users_messenger_post_api', '/token', array( 'methods' => 'POST', 'callback' => array( $this, 'messages_api_post' ), 'permission_callback' => array( $this, 'users_rest_permission' ), ), ); register_rest_route( 'rf/all_users_messenger_notify_api', '/token', array( 'methods' => 'POST', 'callback' => array( $this, 'messages_api_notify' ), 'permission_callback' => array( $this, 'users_rest_permission' ), ), ); } /** ================================================== * Rest Permission for users * * @since 1.00 */ public function users_rest_permission() { $capability = apply_filters( 'all_users_messenger_capability', 'read' ); return current_user_can( $capability ); } /** ================================================== * Rest API view * * @param object $request changed data. * @since 1.00 */ public function messages_api_view( $request ) { $args = json_decode( $request->get_body(), true ); $messages = get_option( 'all_users_messages', array() ); $userid = intval( $args['userid'] ); $args['latest_time'] = 0; if ( ! empty( $messages ) ) { $args['latest_time'] = max( array_keys( $messages ) ); } update_user_option( $userid, 'all_users_messages_latest_time', $args['latest_time'] ); $args['messages'] = $messages; return new WP_REST_Response( $args, 200 ); } /** ================================================== * Rest API post * * @param object $request changed data. * @since 1.00 */ public function messages_api_post( $request ) { $args = json_decode( $request->get_body(), true ); $message = sanitize_textarea_field( wp_unslash( $args['message'] ) ); if ( $args['submit_message'] && ! empty( $message ) ) { $userid = intval( $args['userid'] ); $datetime = wp_date( 'Y-m-d H:i' ); $user = get_userdata( $userid ); $avatar = get_avatar_url( $userid ); $add_message = array( 'userid' => $userid, 'username' => $user->display_name, 'avatar' => $avatar, 'datetime' => $datetime, 'message' => $message, ); $time = time(); $messages_max = apply_filters( 'all_users_messenger_messages_max', 100 ); $messages = get_option( 'all_users_messages', array() ); $messages[ $time ] = $add_message; krsort( $messages ); $messages = array_slice( $messages, 0, $messages_max, true ); update_option( 'all_users_messages', $messages ); } return new WP_REST_Response( $args, 200 ); } /** ================================================== * Rest API notify * * @param object $request changed data. * @since 1.00 */ public function messages_api_notify( $request ) { $args = json_decode( $request->get_body(), true ); $messages = get_option( 'all_users_messages', array() ); if ( ! empty( $messages ) ) { $latest_time = max( array_keys( $messages ) ); $userid = intval( $args['userid'] ); $user_latest_time = get_user_option( 'all_users_messages_latest_time', $userid ); if ( $latest_time > $user_latest_time ) { $args['message_modal'] = true; $args['username'] = $messages[ $latest_time ]['username']; $args['avatar'] = $messages[ $latest_time ]['avatar']; $args['datetime'] = $messages[ $latest_time ]['datetime']; $args['message'] = $messages[ $latest_time ]['message']; } } return new WP_REST_Response( $args, 200 ); } /** ================================================== * Admin Bar Menu * * @param array $wp_admin_bar wp_admin_bar. * @since 1.00 */ public function customize_admin_bar_menu( $wp_admin_bar ) { $notify = ''; $wp_admin_bar->add_menu( array( 'id' => 'allusersmessenger-bar-menu', 'title' => $notify, ) ); } /** ================================================== * Change display name * * @param int $user_id user ID. * @param object $old_user_data old userdata. * @param array $userdata userdata. * @since 1.02 */ public function change_display_name( $user_id, $old_user_data, $userdata ) { $messages = get_option( 'all_users_messages', array() ); if ( ! empty( $messages ) ) { foreach ( $messages as $key => $value ) { if ( $user_id == $value['userid'] ) { $messages[ $key ]['username'] = $userdata['display_name']; } } update_option( 'all_users_messages', $messages ); } } }