BuddyDev

Search

[Resolved] Can you help me with this code.

Tagged: 

  • Participant
    Level: Guru
    Posts: 772
    Tosin on #36540

    Gentle reminder sir

  • Keymaster
    (BuddyDev Team)
    Posts: 22513
    Brajesh Singh on #36558

    Hi Tosin,
    Thank you for the code and the suggestion.

    Please allow us to look at this weekend and assist you by early next week. We need some time to test it. Our current schedule is packed for this week limiting our ability to assist you with it quickly.

    Regards
    Brajesh

    PS:- Is this code from some plugin?

  • Participant
    Level: Guru
    Posts: 772
    Tosin on #36581

    PS:- The code was from github at this url https://github.com/r-a-y/buddypress-followers/issues/68 but the link to the source code is no longer available with a 404 error, I had converted the code to a plugin earlier since last year.

    I think this would be a great addon for the buddypress follow plugin.

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36587

    Hi, brajesh but the email notification code is not working for me,i am not sure why as I also install mail log plugin but it is not showing any log.

  • Participant
    Level: Guru
    Posts: 772
    Tosin on #36784

    Hello Brajesh I would like to remind you about this request

  • Keymaster
    Level: Yogi
    (BuddyDev Team)
    Posts: 2541
    Ravi on #36791

    Hello Tosin,

    Try the follow code.

    
    
    /*  Add settings page to WP Admin */
    add_action( 'admin_menu', 'bp_follow_notify_add_admin_menu' );
    add_action( 'admin_init', 'bp_follow_notify_settings_init' );
    function bp_follow_notify_add_admin_menu(  ) {
    	add_options_page(
    		'Buddypress Followers Notify',
    		'Buddypress Folllowers Notify',
    		'manage_options',
    		'buddypress_folllowers_notify',
    		'bp_follow_notify_options_page'
    	);
    }
    function bp_follow_notify_settings_init(  ) {
    	register_setting( 'pluginPage', 'bp_follow_notify_settings' );
    
    	add_settings_section(
    		'bp_follow_notify_pluginPage_section',
    		__( '', 'bp_follow_notify' ),
    		'bp_follow_notify_settings_section_callback',
    		'pluginPage'
    	);
    
    	add_settings_field(
    		'bp_follow_notify_sender_name',
    		__( 'Sender Name', 'bp_follow_notify' ),
    		'bp_follow_notify_sender_name_render',
    		'pluginPage',
    		'bp_follow_notify_pluginPage_section'
    	);
    	add_settings_field(
    		'bp_follow_notify_sender_email',
    		__( 'Sender Email', 'bp_follow_notify' ),
    		'bp_follow_notify_sender_email_render',
    		'pluginPage',
    		'bp_follow_notify_pluginPage_section'
    	);
    
    	add_settings_field(
    		'bp_follow_notify_post_types',
    		__( 'Post Types', 'bp_follow_notify' ),
    		'bp_follow_notify_post_types_render',
    		'pluginPage',
    		'bp_follow_notify_pluginPage_section'
    	);
    }
    function bp_follow_notify_sender_name_render() {
    	$options = get_option( 'bp_follow_notify_settings', array() );
    	$sender_name = empty( $options['bp_follow_notify_sender_name_render'] ) ? '' : $options['bp_follow_notify_sender_name_render'];
    	?>
    	<input type='text' name='bp_follow_notify_settings[bp_follow_notify_sender_name_render]' value='<?php echo $sender_name; ?>'>
    	<?php
    }
    function bp_follow_notify_sender_email_render(  ) {
    	$options = get_option( 'bp_follow_notify_settings', array() );
    	$sender_email = empty( $options['bp_follow_notify_sender_email'] ) ? '' : $options['bp_follow_notify_sender_email'];
    	?>
    	<input type='text' name='bp_follow_notify_settings[bp_follow_notify_sender_email]' value='<?php echo $sender_email; ?>'>
    	<?php
    }
    function bp_follow_notify_post_types_render(  ) {
    	$options = get_option( 'bp_follow_notify_settings', array() );
    
    	$selected_post_types = empty( $options['bp_follow_notify_post_types'] ) ? array() : $options['bp_follow_notify_post_types'];
    
    	$args = array( 'public' => true );
    	$post_types = get_post_types( $args );
    	?>
    	<select name='bp_follow_notify_settings[bp_follow_notify_post_types][]' multiple='multiple'>
    		<?php foreach ( $post_types as $post_type ) : ?>
    			<option value='<?php echo $post_type; ?>' <?php selected( in_array( $post_type, $selected_post_types ) ); ?>><?php echo $post_type; ?></option>
    		<?php endforeach; ?>
    	</select>
    
    	<?php
    }
    function bp_follow_notify_settings_section_callback(  ) {
    	echo __( 'Notify', 'bp_follow_notify' );
    }
    function bp_follow_notify_options_page(  ) {
    	?>
    	<form action='options.php' method='post'>
    
    		<h2>Buddypress Folllowers Notify</h2>
    
    		<?php
    		settings_fields( 'pluginPage' );
    		do_settings_sections( 'pluginPage' );
    		submit_button();
    		?>
    
    	</form>
    	<?php
    }
    add_action( 'new_to_publish', 'bp_follow_notify_author_followers', 99, 1 );
    add_action( 'draft_to_publish', 'bp_follow_notify_author_followers', 99, 1 );
    
    /**
     * @param WP_Post $post Post object.
     */
    function  bp_follow_notify_author_followers( $post ){
    
    	$options = get_option( 'bp_follow_notify_settings' );
    	$selected_post_types = empty( $options['bp_follow_notify_post_types'] ) ? array() : $options['bp_follow_notify_post_types'];
    
    	if ( ! in_array( $post->post_type, $selected_post_types ) ) {
    		return;
    	}
    
    	$author_id = $post->post_author;
    	$author_name = get_the_author_meta( 'display_name' , $author_id );
    	$counts  = bp_follow_total_follow_counts( array( 'user_id' => $author_id ) );
    
    	if ( $counts['followers'] > 0 ) {
    
    		$followers = bp_follow_get_followers( array( 'user_id' => $author_id ) );
    
    		$blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
    
    		$subject = '[' . $blog_name . '] New Post From ' . $author_name;
    
    		$message = sprintf( __( '
    				%2$s
    				
    				%3$s
    				
    				Link: %4$s
    				-----------
    				You are receiving this email because you are following %1$s.', 'bp-follow-notify' ),
    			$author_name,
    			$post->post_title,
    			wp_trim_words( $post->post_content ),
    			get_permalink( $post->ID )
    		);
    
    		$notifying_email = array();
    		foreach($followers as $follower){
    
    			/* Email Notification */
    
    			$user = get_user_by( 'id' , $follower );
    			$notifying_email[] = $user->user_email;
    
    			/* BP Notification */
    
    			if ( bp_is_active( 'notifications' ) ) {
    
    				bp_notifications_add_notification( array(
    					'user_id'           => $user->ID,
    					'item_id'			=> $post->ID,
    					'secondary_item_id' => $author_id,
    					'component_name'    => 'bp_follow_notify',
    					'component_action'  => 'follow_new_post',
    					'date_notified'     => bp_core_current_time(),
    					'is_new'            => 1,
    				) );
    
    			}
    		} //end loop
    
    		$sender_name = ( !empty( $options['bp_follow_notify_sender_name']) ? $options['bp_follow_notify_sender_name'] : $blog_name );
    		$sender_email = ( !empty( $options['bp_follow_notify_sender_email'] ) ? $options['bp_follow_notify_sender_email'] : 'no-reply@' . $blog_name );
    
    		$headers = '';
    
    		$headers  = "MIME-Version: 1.0" . "\r\n";
    		$headers .= "Content-type: text/html; charset=" . get_bloginfo('charset') . "" . "\r\n";
    		$headers .= "From: " . $sender_name . " <" . $sender_email . ">" . "\r\n";
    
    		@wp_mail( $notifying_email, $subject , $message, $headers );
    	}
    
    }
    /*  Register component */
    function bp_follow_notify_filter_notifications_get_registered_components( $component_names = array() ) {
    	// Force $component_names to be an array
    	if ( ! is_array( $component_names ) ) {
    		$component_names = array();
    	}
    
    	array_push( $component_names, 'bp_follow_notify' );
    
    	return $component_names;
    }
    add_filter( 'bp_notifications_get_registered_components', 'bp_follow_notify_filter_notifications_get_registered_components' );
    /* Format screen notfications */
    add_filter( 'bp_notifications_get_notifications_for_user', 'bp_follow_notify_format_notifications', 9, 5  );
    function bp_follow_notify_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
    
    	if ( 'follow_new_post' === $action ) {
    
    		if ( (int) $total_items > 1 ) {
    			$title = sprintf( __( '%d new posts have been published', 'bp-follow-notify' ), (int) $total_items );
    			$link  = bp_get_notifications_permalink();
    		} else {
    			$title = sprintf( __( '%s has published a new post.', 'bp-follow-notify' ), bp_core_get_user_displayname( $secondary_item_id ) );
    			$link = get_permalink( $item_id );
    		}
    
    		// WordPress Toolbar
    		if ( 'string' === $format ) {
    			$return = apply_filters( 'bp_follow_notify_notification', '<a href="' . esc_url( $link ) . '" title="' . esc_attr( title ) . '">' . esc_html( $title ) . '</a>', $title, $link );
    			// Deprecated BuddyBar
    		} else {
    			$return = apply_filters( 'bp_follow_notify_notification', array(
    				'text' => $title,
    				'link' => $link
    			), $link, (int) $total_items, $title, $title );
    		}
    
    		return $return;
    
    	}
    
    	return $action;
    }
    
    

    Please do let me know if it works or not.

    Regards
    Ravi

  • Participant
    Level: Guru
    Posts: 772
    Tosin on #36797
    This reply has been marked as private.
  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36809

    Thanks, Ravi your code is working correctly but it has some security issue, it exposes the follower’s email to everyone in the email inbox.

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36838

    Any idea of sending BCC email as in this way the follower’s email is exposed to everyone who gets the email.

  • Keymaster
    Level: Yogi
    (BuddyDev Team)
    Posts: 2541
    Ravi on #36839

    Hello Kumar,

    Thank you for the acknowledgment. Please have a look here.

    https://developer.wordpress.org/reference/functions/wp_mail/#using-headers-to-set-from-cc-and-bcc-parameters

    Regards
    Ravi

You must be logged in to reply to this topic.

This topic is: resolved