Home › Forums › JavaScript › How to add post notification to wordpress plugin named buddypress
- This topic is empty.
-
AuthorPosts
-
September 19, 2018 at 12:07 pm #276765Erik ModinParticipant
Hi! I am at the moment trying to add a notification for the notification system in the wordpress plugin called buddypress. i am pretty new to some of the coding language used in the plugin and there are no guides out there which is working for me so that is why I am here asking for help. Here is a link to the buddypress plugin guide on how to add the notification but I do not understand it so if you could please help me it would help so much!
Here is the file code at where the function need to be added to —>
0,
‘item_id’ => 0,
‘secondary_item_id’ => 0,
‘component_name’ => ”,
‘component_action’ => ”,
‘date_notified’ => bp_core_current_time(),
‘is_new’ => 1,
‘allow_duplicate’ => false,
), ‘notifications_add_notification’ );// Check for existing duplicate notifications. if ( ! $r['allow_duplicate'] ) { // Date_notified, allow_duplicate don't count toward // duplicate status. $existing = BP_Notifications_Notification::get( array( 'user_id' => $r['user_id'], 'item_id' => $r['item_id'], 'secondary_item_id' => $r['secondary_item_id'], 'component_name' => $r['component_name'], 'component_action' => $r['component_action'], 'is_new' => $r['is_new'], ) ); if ( ! empty( $existing ) ) { return false; } } // Setup the new notification. $notification = new BP_Notifications_Notification; $notification->user_id = $r['user_id']; $notification->item_id = $r['item_id']; $notification->secondary_item_id = $r['secondary_item_id']; $notification->component_name = $r['component_name']; $notification->component_action = $r['component_action']; $notification->date_notified = $r['date_notified']; $notification->is_new = $r['is_new']; // Save the new notification. return $notification->save();
}
/**
* Get a specific notification by its ID.
*
* @since 1.9.0
*
* @param int $id ID of the notification.
* @return BP_Notifications_Notification Notification object for ID specified.
*/
function bp_notifications_get_notification( $id ) {
return new BP_Notifications_Notification( $id );
}/**
* Delete a specific notification by its ID.
*
* @since 1.9.0
*
* @param int $id ID of the notification to delete.
* @return false|int True on success, false on failure.
*/
function bp_notifications_delete_notification( $id ) {
if ( ! bp_notifications_check_notification_access( bp_displayed_user_id(), $id ) ) {
return false;
}return BP_Notifications_Notification::delete( array( 'id' => $id ) );
}
/**
* Mark notification read/unread for a user by ID.
*
* Used when clearing out notifications for a specific notification item.
*
* @since 1.9.0
*
* @param int $id ID of the notification.
* @param int|bool $is_new 0 for read, 1 for unread.
* @return false|int True on success, false on failure.
*/
function bp_notifications_mark_notification( $id, $is_new = false ) {
if ( ! bp_notifications_check_notification_access( bp_displayed_user_id(), $id ) ) {
return false;
}return BP_Notifications_Notification::update( array( 'is_new' => $is_new ), array( 'id' => $id ) );
}
/**
* Get all notifications for a user and cache them.
*
* @since 2.1.0
*
* @param int $user_id ID of the user whose notifications are being fetched.
* @return array $notifications Array of notifications for user.
*/
function bp_notifications_get_all_notifications_for_user( $user_id = 0 ) {// Default to displayed user if no ID is passed. if ( empty( $user_id ) ) { $user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id(); } // Get notifications out of the cache, or query if necessary. $notifications = wp_cache_get( 'all_for_user_' . $user_id, 'bp_notifications' ); if ( false === $notifications ) { $notifications = BP_Notifications_Notification::get( array( 'user_id' => $user_id ) ); wp_cache_set( 'all_for_user_' . $user_id, $notifications, 'bp_notifications' ); } /** * Filters all notifications for a user. * * @since 2.1.0 * * @param array $notifications Array of notifications for user. * @param int $user_id ID of the user being fetched. */ return apply_filters( 'bp_notifications_get_all_notifications_for_user', $notifications, $user_id );
}
/**
* Get a user’s unread notifications, grouped by component and action.
*
* This function returns a list of notifications collapsed by component + action.
* See BP_Notifications_Notification::get_grouped_notifications_for_user() for
* more details.
*
* @since 3.0.0
*
* @param int $user_id ID of the user whose notifications are being fetched.
* @return array $notifications
*/
function bp_notifications_get_grouped_notifications_for_user( $user_id = 0 ) {
if ( empty( $user_id ) ) {
$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
}$notifications = wp_cache_get( $user_id, 'bp_notifications_grouped_notifications' ); if ( false === $notifications ) { $notifications = BP_Notifications_Notification::get_grouped_notifications_for_user( $user_id ); wp_cache_set( $user_id, $notifications, 'bp_notifications_grouped_notifications' ); } return $notifications;
}
/**
* Get notifications for a specific user.
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose notifications are being fetched.
* @param string $format Format of the returned values. ‘string’ returns HTML,
* while ‘object’ returns a structured object for parsing.
* @return mixed Object or array on success, false on failure.
*/
function bp_notifications_get_notifications_for_user( $user_id, $format = ‘string’ ) {
$bp = buddypress();$notifications = bp_notifications_get_grouped_notifications_for_user( $user_id ); // Calculate a renderable output for each notification type. foreach ( $notifications as $notification_item ) { $component_name = $notification_item->component_name; // We prefer that extended profile component-related notifications use // the component_name of 'xprofile'. However, the extended profile child // object in the $bp object is keyed as 'profile', which is where we need // to look for the registered notification callback. if ( 'xprofile' == $notification_item->component_name ) { $component_name = 'profile'; } // Callback function exists. if ( isset( $bp->{$component_name}->notification_callback ) && is_callable( $bp->{$component_name}->notification_callback ) ) { // Function should return an object. if ( 'object' === $format ) { // Retrieve the content of the notification using the callback. $content = call_user_func( $bp->{$component_name}->notification_callback, $notification_item->component_action, $notification_item->item_id, $notification_item->secondary_item_id, $notification_item->total_count, 'array', $notification_item->id ); // Create the object to be returned. $notification_object = $notification_item; // Minimal backpat with non-compatible notification // callback functions. if ( is_string( $content ) ) { $notification_object->content = $content; $notification_object->href = bp_loggedin_user_domain(); } else { $notification_object->content = $content['text']; $notification_object->href = $content['link']; } $renderable[] = $notification_object; // Return an array of content strings. } else { $content = call_user_func( $bp->{$component_name}->notification_callback, $notification_item->component_action, $notification_item->item_id, $notification_item->secondary_item_id, $notification_item->total_count, 'string', $notification_item->id ); $renderable[] = $content; } // @deprecated format_notification_function - 1.5 } elseif ( isset( $bp->{$component_name}->format_notification_function ) && function_exists( $bp->{$component_name}->format_notification_function ) ) { $renderable[] = call_user_func( $bp->{$component_name}->notification_callback, $notification_item->component_action, $notification_item->item_id, $notification_item->secondary_item_id, $notification_item->total_count ); // Allow non BuddyPress components to hook in. } else { // The array to reference with apply_filters_ref_array(). $ref_array = array( $notification_item->component_action, $notification_item->item_id, $notification_item->secondary_item_id, $notification_item->total_count, $format, $notification_item->component_action, // Duplicated so plugins can check the canonical action name. $component_name, $notification_item->id, ); // Function should return an object. if ( 'object' === $format ) { /** * Filters the notification content for notifications created by plugins. * If your plugin extends the {@link BP_Component} class, you should use the * 'notification_callback' parameter in your extended * {@link BP_Component::setup_globals()} method instead. * * @since 1.9.0 * @since 2.6.0 Added $component_action_name, $component_name, $id as parameters. * * @param string $content Component action. Deprecated. Do not do checks against this! Use * the 6th parameter instead - $component_action_name. * @param int $item_id Notification item ID. * @param int $secondary_item_id Notification secondary item ID. * @param int $action_item_count Number of notifications with the same action. * @param string $format Format of return. Either 'string' or 'object'. * @param string $component_action_name Canonical notification action. * @param string $component_name Notification component ID. * @param int $id Notification ID. * * @return string|array If $format is 'string', return a string of the notification content. * If $format is 'object', return an array formatted like: * array( 'text' => 'CONTENT', 'link' => 'LINK' ) */ $content = apply_filters_ref_array( 'bp_notifications_get_notifications_for_user', $ref_array ); // Create the object to be returned. $notification_object = $notification_item; // Minimal backpat with non-compatible notification // callback functions. if ( is_string( $content ) ) { $notification_object->content = $content; $notification_object->href = bp_loggedin_user_domain(); } else { $notification_object->content = $content['text']; $notification_object->href = $content['link']; } $renderable[] = $notification_object; // Return an array of content strings. } else { /** This filters is documented in bp-notifications/bp-notifications-functions.php */ $renderable[] = apply_filters_ref_array( 'bp_notifications_get_notifications_for_user', $ref_array ); } } } // If renderable is empty array, set to false. if ( empty( $renderable ) ) { $renderable = false; } /** * Filters the final array of notifications to be displayed for a user. * * @since 1.6.0 * * @param array|bool $renderable Array of notifications to render or false if no notifications. * @param int $user_id ID of the user whose notifications are being displayed. * @param string $format Display format requested for the notifications. */ return apply_filters( 'bp_core_get_notifications_for_user', $renderable, $user_id, $format );
}
/** Delete ********************************************************************/
/**
* Delete notifications for a user by type.
*
* Used when clearing out notifications for a specific component when the user
* has visited that component.
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose notifications are being deleted.
* @param string $component_name Name of the associated component.
* @param string $component_action Name of the associated action.
* @return int|false True on success, false on failure.
*/
function bp_notifications_delete_notifications_by_type( $user_id, $component_name, $component_action ) {
return BP_Notifications_Notification::delete( array(
‘user_id’ => $user_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action,
) );
}/**
* Delete notifications for an item ID.
*
* Used when clearing out notifications for a specific component when the user
* has visited that component.
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose notifications are being deleted.
* @param int $item_id ID of the associated item.
* @param string $component_name Name of the associated component.
* @param string $component_action Name of the associated action.
* @param int|bool $secondary_item_id ID of the secondary associated item.
* @return int|false True on success, false on failure.
*/
function bp_notifications_delete_notifications_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id = false ) {
return BP_Notifications_Notification::delete( array(
‘user_id’ => $user_id,
‘item_id’ => $item_id,
‘secondary_item_id’ => $secondary_item_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action,
) );
}/**
* Delete all notifications by type.
*
* Used when clearing out notifications for an entire component.
*
* @since 1.9.0
*
* @param int $item_id ID of the user whose notifications are being deleted.
* @param string $component_name Name of the associated component.
* @param string|bool $component_action Optional. Name of the associated action.
* @param int|bool $secondary_item_id Optional. ID of the secondary associated item.
* @return int|false True on success, false on failure.
*/
function bp_notifications_delete_all_notifications_by_type( $item_id, $component_name, $component_action = false, $secondary_item_id = false ) {
return BP_Notifications_Notification::delete( array(
‘item_id’ => $item_id,
‘secondary_item_id’ => $secondary_item_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action,
) );
}/**
* Delete all notifications from a user.
*
* Used when clearing out all notifications for a user, when deleted or spammed.
*
* @todo This function assumes that items with the user_id in the item_id slot
* are associated with that user. However, this will only be true with
* certain components (such as Friends). Use with caution!
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose associated items are being deleted.
* @param string $component_name Name of the associated component.
* @param string $component_action Name of the associated action.
* @return int|false True on success, false on failure.
*/
function bp_notifications_delete_notifications_from_user( $user_id, $component_name, $component_action ) {
return BP_Notifications_Notification::delete( array(
‘item_id’ => $user_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action,
) );
}/**
* Delete a user’s notifications when the user is deleted.
*
* @since 2.5.0
*
* @param int $user_id ID of the user who is about to be deleted.
* @return int|false The number of rows deleted, or false on error.
*/
function bp_notifications_delete_notifications_on_user_delete( $user_id ) {
return BP_Notifications_Notification::delete( array(
‘user_id’ => $user_id,
‘item_id’ => false,
‘secondary_item_id’ => false,
‘component_action’ => false,
‘component_name’ => false,
) );
}
add_action( ‘wpmu_delete_user’, ‘bp_notifications_delete_notifications_on_user_delete’ );
add_action( ‘delete_user’, ‘bp_notifications_delete_notifications_on_user_delete’ );/** Mark **********************************************************************/
/**
* Mark notifications read/unread for a user by type.
*
* Used when clearing out notifications for a specific component when the user
* has visited that component.
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose notifications are being deleted.
* @param string $component_name Name of the associated component.
* @param string $component_action Name of the associated action.
* @param int|bool $is_new 0 for read, 1 for unread.
* @return int|false True on success, false on failure.
*/
function bp_notifications_mark_notifications_by_type( $user_id, $component_name, $component_action, $is_new = false ) {
return BP_Notifications_Notification::update(
array(
‘is_new’ => $is_new
),
array(
‘user_id’ => $user_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action
)
);
}/**
* Mark notifications read/unread for an item ID.
*
* Used when clearing out notifications for a specific component when the user
* has visited that component.
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose notifications are being deleted.
* @param int $item_id ID of the associated item.
* @param string $component_name Name of the associated component.
* @param string $component_action Name of the associated action.
* @param int|bool $secondary_item_id ID of the secondary associated item.
* @param int|bool $is_new 0 for read, 1 for unread.
* @return int|false True on success, false on failure.
*/
function bp_notifications_mark_notifications_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id = false, $is_new = false ) {
return BP_Notifications_Notification::update(
array(
‘is_new’ => $is_new
),
array(
‘user_id’ => $user_id,
‘item_id’ => $item_id,
‘secondary_item_id’ => $secondary_item_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action
)
);
}/**
* Mark all notifications read/unread by type.
*
* Used when clearing out notifications for an entire component.
*
* @since 1.9.0
*
* @param int $item_id ID of the user whose notifications are being deleted.
* @param string $component_name Name of the associated component.
* @param string|bool $component_action Optional. Name of the associated action.
* @param int|bool $secondary_item_id Optional. ID of the secondary associated item.
* @param int|bool $is_new 0 for read, 1 for unread.
* @return int|false True on success, false on failure.
*/
function bp_notifications_mark_all_notifications_by_type( $item_id, $component_name, $component_action = false, $secondary_item_id = false, $is_new = false ) {
return BP_Notifications_Notification::update(
array(
‘is_new’ => $is_new
),
array(
‘item_id’ => $item_id,
‘secondary_item_id’ => $secondary_item_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action
)
);
}/**
* Mark all notifications read/unread from a user.
*
* Used when clearing out all notifications for a user, when deleted or spammed.
*
* @todo This function assumes that items with the user_id in the item_id slot
* are associated with that user. However, this will only be true with
* certain components (such as Friends). Use with caution!
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose associated items are being deleted.
* @param string $component_name Name of the associated component.
* @param string $component_action Name of the associated action.
* @param int|bool $is_new 0 for read, 1 for unread.
* @return int|false True on success, false on failure.
*/
function bp_notifications_mark_notifications_from_user( $user_id, $component_name, $component_action, $is_new = false ) {
return BP_Notifications_Notification::update(
array(
‘is_new’ => $is_new
),
array(
‘item_id’ => $user_id,
‘component_name’ => $component_name,
‘component_action’ => $component_action
)
);
}/** Helpers *******************************************************************/
/**
* Check if a user has access to a specific notification.
*
* Used before deleting a notification for a user.
*
* @since 1.9.0
*
* @param int $user_id ID of the user being checked.
* @param int $notification_id ID of the notification being checked.
* @return bool True if the notification belongs to the user, otherwise false.
*/
function bp_notifications_check_notification_access( $user_id, $notification_id ) {
return (bool) BP_Notifications_Notification::check_access( $user_id, $notification_id );
}/**
* Get a count of unread notification items for a user.
*
* @since 1.9.0
*
* @param int $user_id ID of the user whose unread notifications are being
* counted.
* @return int Unread notification count.
*/
function bp_notifications_get_unread_notification_count( $user_id = 0 ) {
if ( empty( $user_id ) ) {
$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
}$count = wp_cache_get( $user_id, 'bp_notifications_unread_count' ); if ( false === $count ) { $count = BP_Notifications_Notification::get_total_count( array( 'user_id' => $user_id, 'is_new' => true, ) ); wp_cache_set( $user_id, $count, 'bp_notifications_unread_count' ); } /** * Filters the count of unread notification items for a user. * * @since 1.9.0 * @since 2.7.0 Added user ID parameter. * * @param int $count Count of unread notification items for a user. * @param int $user_id User ID for notifications count. */ return apply_filters( 'bp_notifications_get_total_notification_count', (int) $count, $user_id );
}
/**
* Return an array of component names that are currently active and have
* registered Notifications callbacks.
*
* @since 1.9.1
*
* @see http://buddypress.trac.wordpress.org/ticket/5300
*
* @return array $component_names Array of registered components.
*/
function bp_notifications_get_registered_components() {// Load BuddyPress. $bp = buddypress(); // Setup return value. $component_names = array(); // Get the active components. $active_components = array_keys( $bp->active_components ); // Loop through components, look for callbacks, add to return value. foreach ( $active_components as $component ) { if ( !empty( $bp->$component->notification_callback ) ) { $component_names[] = $component; } // The extended profile component is identified in the active_components array as 'xprofile'. // However, the extended profile child object has the key 'profile' in the $bp object. if ( 'xprofile' == $component && ! empty( $bp->profile->notification_callback ) ) { $component_names[] = $component; } } /** * Filters active components with registered notifications callbacks. * * @since 1.9.1 * * @param array $component_names Array of registered component names. * @param array $active_components Array of active components. */ return apply_filters( 'bp_notifications_get_registered_components', $component_names, $active_components );
}
/**
* Catch and route the ‘settings’ notifications screen.
*
* This is currently unused.
*
* @since 1.9.0
*/
function bp_notifications_screen_settings() {}/** Meta **********************************************************************/
/**
* Delete a meta entry from the DB for a notification item.
*
* @since 2.3.0
*
* @global object $wpdb WordPress database access object.
*
* @param int $notification_id ID of the notification item whose metadata is being deleted.
* @param string $meta_key Optional. The key of the metadata being deleted. If
* omitted, all metadata associated with the notification
* item will be deleted.
* @param string $meta_value Optional. If present, the metadata will only be
* deleted if the meta_value matches this parameter.
* @param bool $delete_all Optional. If true, delete matching metadata entries
* for all objects, ignoring the specified object_id. Otherwise,
* only delete matching metadata entries for the specified
* notification item. Default: false.
* @return bool True on success, false on failure.
*/
function bp_notifications_delete_meta( $notification_id, $meta_key = ”, $meta_value = ”, $delete_all = false ) {// Legacy - if no meta_key is passed, delete all for the item. if ( empty( $meta_key ) ) { $all_meta = bp_notifications_get_meta( $notification_id ); $keys = ! empty( $all_meta ) ? array_keys( $all_meta ) : array(); // With no meta_key, ignore $delete_all. $delete_all = false; } else { $keys = array( $meta_key ); } $retval = true; add_filter( 'query', 'bp_filter_metaid_column_name' ); foreach ( $keys as $key ) { $retval = delete_metadata( 'notification', $notification_id, $key, $meta_value, $delete_all ); } remove_filter( 'query', 'bp_filter_metaid_column_name' ); return $retval;
}
/**
* Get metadata for a given notification item.
*
* @since 2.3.0
*
* @param int $notification_id ID of the notification item whose metadata is being requested.
* @param string $meta_key Optional. If present, only the metadata matching
* that meta key will be returned. Otherwise, all metadata for the
* notification item will be fetched.
* @param bool $single Optional. If true, return only the first value of the
* specified meta_key. This parameter has no effect if meta_key is not
* specified. Default: true.
* @return mixed The meta value(s) being requested.
*/
function bp_notifications_get_meta( $notification_id = 0, $meta_key = ”, $single = true ) {
add_filter( ‘query’, ‘bp_filter_metaid_column_name’ );
$retval = get_metadata( ‘notification’, $notification_id, $meta_key, $single );
remove_filter( ‘query’, ‘bp_filter_metaid_column_name’ );/** * Filters the metadata for a specified notification item. * * @since 2.3.0 * * @param mixed $retval The meta values for the notification item. * @param int $notification_id ID of the notification item. * @param string $meta_key Meta key for the value being requested. * @param bool $single Whether to return one matched meta key row or all. */ return apply_filters( 'bp_notifications_get_meta', $retval, $notification_id, $meta_key, $single );
}
/**
* Update a piece of notification meta.
*
* @since 1.2.0
*
* @param int $notification_id ID of the notification item whose metadata is being
* updated.
* @param string $meta_key Key of the metadata being updated.
* @param mixed $meta_value Value to be set.
* @param mixed $prev_value Optional. If specified, only update existing
* metadata entries with the specified value.
* Otherwise, update all entries.
* @return bool|int Returns false on failure. On successful
* update of existing metadata, returns true. On
* successful creation of new metadata, returns
* the integer ID of the new metadata row.
*/
function bp_notifications_update_meta( $notification_id, $meta_key, $meta_value, $prev_value = ” ) {
add_filter( ‘query’, ‘bp_filter_metaid_column_name’ );
$retval = update_metadata( ‘notification’, $notification_id, $meta_key, $meta_value, $prev_value );
remove_filter( ‘query’, ‘bp_filter_metaid_column_name’ );return $retval;
}
/**
* Add a piece of notification metadata.
*
* @since 2.3.0
*
* @param int $notification_id ID of the notification item.
* @param string $meta_key Metadata key.
* @param mixed $meta_value Metadata value.
* @param bool $unique Optional. Whether to enforce a single metadata value
* for the given key. If true, and the object already has a value for
* the key, no change will be made. Default: false.
* @return int|bool The meta ID on successful update, false on failure.
*/
function bp_notifications_add_meta( $notification_id, $meta_key, $meta_value, $unique = false ) {
add_filter( ‘query’, ‘bp_filter_metaid_column_name’ );
$retval = add_metadata( ‘notification’, $notification_id, $meta_key, $meta_value, $unique );
remove_filter( ‘query’, ‘bp_filter_metaid_column_name’ );return $retval;
}
-
AuthorPosts
- The forum ‘JavaScript’ is closed to new topics and replies.