insert( $wpdb->prefix . 'frontglut_notifications', array( 'user_id' => (int) $user_id, 'type' => sanitize_key( $type ), 'title' => substr( sanitize_text_field( $title ), 0, 200 ), 'message' => sanitize_textarea_field( $message ), 'url' => esc_url_raw( $url ), 'created' => current_time( 'mysql', true ), ) ); wp_cache_delete( 'frontglut_unread_' . $user_id, 'frontglut' ); $id = (int) $wpdb->insert_id; do_action( 'frontglut_notified', $id, (int) $user_id, $title, $message, $url, $type ); return $id; } /** Send to everyone holding a capability. */ public static function send_to_cap( $cap, $title, $message = '', $url = '', $exclude = 0 ) { $users = get_users( array( 'capability' => $cap, 'fields' => 'ID', 'number' => 200 ) ); foreach ( $users as $uid ) { if ( (int) $uid !== (int) $exclude ) { self::send( $uid, $title, $message, $url ); } } } public static function unread( $user_id = 0 ) { global $wpdb; $user_id = $user_id ? $user_id : get_current_user_id(); if ( ! $user_id ) { return 0; } $k = 'frontglut_unread_' . $user_id; $v = wp_cache_get( $k, 'frontglut' ); if ( false === $v ) { $v = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}frontglut_notifications WHERE user_id = %d AND is_read = 0", $user_id ) ); wp_cache_set( $k, $v, 'frontglut', 60 ); } return $v; } public static function latest( $user_id, $limit = 20, $offset = 0 ) { global $wpdb; return (array) $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}frontglut_notifications WHERE user_id = %d ORDER BY id DESC LIMIT %d OFFSET %d", $user_id, $limit, $offset ), ARRAY_A ); } public static function mark_read( $user_id, $id = 0 ) { global $wpdb; $where = array( 'user_id' => (int) $user_id ); if ( $id ) { $where['id'] = (int) $id; } $wpdb->update( $wpdb->prefix . 'frontglut_notifications', array( 'is_read' => 1 ), $where ); wp_cache_delete( 'frontglut_unread_' . $user_id, 'frontglut' ); } }