Skip to:
Content
Pages
Categories
Search
Top
Bottom

Someone Update Say My Name Plugin

Viewing 10 replies - 1 through 10 (of 10 total)
  • @kawauso

    Member

    Doesn’t look like it’d be too hard to update. That said, what’s broken?

    @kawauso

    Member

    Okay, I’ve managed to optimise the code for this a bit. I’m a bit stuck though.

    At the moment, it’s checking for usernames, rather than display names and checking word-by-word. That’s fine for usernames, because they’re essentially always one word, but display names can be more than one and I intend to use those.

    Explosion took 0.000307083129883 seconds

    Strpos took 3.00407409668E-5 seconds

    :D

    @gerikg

    Member

    Thank you Kawauso for your help on this. Search by display , sometimes people put @kawauso, and it’s case sensitive.

    @kawauso

    Member
    <?php
    /*
    * Plugin Name: Say My Name
    * Plugin Description: Sends a notification email if someone mentions your name in a post (based on Notify Post by Thomas Klaiber).
    * Author: <a href="http://www.ellequadro.net">Matteo Crippa</a>, updated for bbPress 1.0 by Kawauso
    * Version: 0.2
    */

    function say_my_name ( $post_id, $args ) {

    global $bbdb, $topic;

    if ( isset( $args[ 'post_id' ] ) && false !== $args[ 'post_id' ] ) // Don't run on edits
    return;

    $post = strtolower( $args[ 'post_text' ] );

    $all_users = $bbdb->get_results( "SELECT * FROM $bbdb->users WHERE user_status=0" );

    foreach( $all_users as $userdata ) {

    if( !is_smn( $userdata->ID ) )
    continue;

    /* $notify = false;
    */ $display_name = strtolower( $userdata->display_name );

    /* if( strpos( $display_name, ' ' ) === false ) { // Use word-by-word searching if the display name is one word
    if( !isset( $words ) )
    $words = explode( ' ', $post ); // Only create the word list if necessary

    foreach ( $words as $word ) {

    if( $display_name == $word || "@$display_name" == $word ) {

    $notify = true;
    break;

    }

    }
    }

    else*/ if( strpos( " $post", " $display_name" ) !== false || strpos( " $post", " @$display_name" ) !== false) // Always require a leading space
    /* $notify = true;

    if( $notify ) */{

    $message = __( "Someone called you on: %1$s nn%2$s " );
    @mail( $userdata->user_email, bb_get_option( 'name' ) . ':' . __( 'Notification' ), sprintf( $message, $topic->topic_title, get_topic_link( $topic_id ) ), 'From: ' . bb_get_option( 'admin_email' ) );

    }

    }

    }
    add_action( 'bb_insert_post', 'say_my_name', 1, 2 );

    function smn_profile() {

    if( !bb_is_user_logged_in() )
    return;

    global $user_id;

    if( is_smn( $user_id ) )
    $checked = ' checked="checked"';
    else
    $checked = '';

    ?>
    </fieldset>
    <fieldset>
    <legend>Say My Name Notification</legend>
    <p><?php _e('If you want to get an email when someone call your name in a new post.')?></p>
    <table width="100%">
    <tr>
    <th width="21%" scope="row"><?php _e('Activate')?>:</th>
    <td width="79%"><input name="smn" id="smn" type="checkbox" value="1"<?php echo $checked?> /></td>
    </tr>
    </table>
    <?php
    }
    add_action( 'extra_profile_info', 'smn_profile' );

    function smn_edit() {
    global $user_id;

    if( $_POST[ 'smn' ] )
    bb_update_usermeta( $user_id, "smn", true );
    else
    bb_update_usermeta( $user_id, "smn", false );

    }
    add_action( 'profile_edited', 'smn_edit' );

    function is_smn ( $user_id ) {
    $user = bb_get_user( $user_id );
    if ( $user->smn )
    return true;
    else
    return false;
    }
    ?>

    Take out the /* */ around the commented out parts of the code if you want to re-enable the foreach() loop method for single word display names. I couldn’t find much of a difference in speed, but then again it might be quite different on a live server. You can also just delete all that code too if you want to make the file smaller :P I’ll upload this to the Extend section someday, along with the other plugin I keep meaning to finish and upload.

    Edit: Added support for @ :P

    This should be 100% case insensitive, but I’ve not tested with anything unicode. It’ll always look for a space before the name to avoid false positives, but if it’s at the very start of the post, it’ll still be detected.

    @gerikg

    Member

    thank you! there is one more plugin but I’m figuring I have to start a new thread.

    @kawauso

    Member

    Probably a good idea, let me know how this one works :P

    @gerikg

    Member

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d188981313/htdocs/kiaspeed2/mu/forums/my-plugins/say-my-name/smn.php:3) in /homepages/0/d188981313/htdocs/kiaspeed2/mu/forums/bb-includes/functions.bb-meta.php on line 708

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d188981313/htdocs/kiaspeed2/mu/forums/my-plugins/say-my-name/smn.php:3) in /homepages/0/d188981313/htdocs/kiaspeed2/mu/forums/bb-includes/functions.bb-meta.php on line 709

    WPMU+BB+BP if it matters

    @kawauso

    Member

    Output starts on line 3 of the plugin.. that’s either part of the description or the opening of the first function. Neither should generate anything. Check for whitespace around the PHP tags?

    @gerikg

    Member

    ah! didn’t even realize it matters. So far so good thanks! can you email me?

    @kawauso

    Member

    It matters when it’s involved with a filter or action that’s run on a processing page (that you don’t usually see), because if any text is passed it can’t send a redirect header for the nice pretty page you normally see straight away. Whatcha need an email for?

Viewing 10 replies - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.
Skip to toolbar