Skip to:
Content

BuddyPress.org

Changeset 56


Ignore:
Timestamp:
05/03/2008 01:16:23 AM (18 years ago)
Author:
apeatling
Message:

Complete re-write of messaging component. Added profile avatar integration, new threaded conversation style messaging, better TinyMCE support, new mailbox interfaces, WP2.5 speech bubble message count support. Please see Trac for known bugs and features left to add.

Location:
trunk
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-messages.php

    r36 r56  
    11<?php
     2
     3$bp_messages_table_name = $wpdb->base_prefix . 'bp_messages';
     4$bp_messages_table_name_deleted = $bp_messages_table_name . '_deleted';
     5$bp_messages_image_base = get_option('siteurl') . '/wp-content/mu-plugins/bp-messages/images';
     6
     7include_once( 'bp-messages/bp-messages-classes.php' );
     8include_once( 'bp-messages/bp-messages-cssjs.php' );
     9
     10/*
     11include_once( 'bp-messages/bp-messages-admin.php' );
     12include_once( 'bp-messages/bp-messages-templatetags.php' );
     13*/
    214
    315/**************************************************************************
     
    719 **************************************************************************/
    820
    9 function messages_install()
    10 {
    11     global $wpdb, $table_name;
    12 
    13     $sql = "CREATE TABLE ". $table_name ." (
    14           id int(11) NOT NULL AUTO_INCREMENT,
    15           sender_id int(11) NOT NULL,
    16           recipient_id int(11) NOT NULL,
    17           folder_id tinyint(1) NOT NULL DEFAULT 1,
    18           subject varchar(200) NOT NULL,
    19           message longtext NOT NULL,
    20           is_read bool DEFAULT 0,
    21           is_draft bool DEFAULT 0,
    22           date_sent int(11) NOT NULL,
    23           UNIQUE KEY id (id)
    24          );";
    25 
    26     require_once(ABSPATH . 'wp-admin/upgrade-functions.php');
     21function messages_install() {
     22    global $wpdb, $bp_messages_table_name, $bp_messages_table_name_deleted;
     23
     24    $sql[0] = "CREATE TABLE ". $bp_messages_table_name ." (
     25                id int(11) NOT NULL AUTO_INCREMENT,
     26                sender_id int(11) NOT NULL,
     27                recipient_id int(11) NOT NULL,
     28                thread_id int(11) NOT NULL,
     29                subject varchar(200) NOT NULL,
     30                message longtext NOT NULL,
     31                is_read bool DEFAULT 0,
     32                date_sent int(11) NOT NULL,
     33                PRIMARY KEY id (id)
     34               );";
     35   
     36    $sql[1] = "CREATE TABLE ". $bp_messages_table_name_deleted ." (
     37                id int(11) NOT NULL AUTO_INCREMENT,
     38                thread_id int(11) NOT NULL,
     39                user_id int(11) NOT NULL,
     40                is_deleted tinyint(1) NOT NULL DEFAULT 0,
     41                PRIMARY KEY id (id)
     42                );";
     43
     44    require_once( ABSPATH . 'wp-admin/upgrade-functions.php' );
    2745    dbDelta($sql);
    2846}
     
    3654 **************************************************************************/
    3755
    38 function messages_add_menu()
    39 {   
    40     global $wpdb, $table_name, $wpmuBaseTablePrefix, $bp_messages, $userdata;
    41     $table_name = $wpmuBaseTablePrefix . "bp_messages";
    42 
    43     if($wpdb->blogid == $userdata->primary_blog)
    44     {   
    45         /* Instantiate bp_Messages class to do the real work. */
    46         $bp_messages = new BP_Messages;
    47         $bp_messages->bp_messages();
    48    
    49         $inbox_count = $bp_messages->get_inbox_count();
    50    
    51         add_menu_page("Messages", "Messages$inbox_count", 1, basename(__FILE__), "messages_write_new");
    52         add_submenu_page(basename(__FILE__), "Write New", "Write New", 1, basename(__FILE__), "messages_write_new");
    53         add_submenu_page(basename(__FILE__), "Inbox", "Inbox$inbox_count", 1, "messages_inbox", "messages_inbox"); 
    54         add_submenu_page(basename(__FILE__), "Sentbox", "Sentbox", 1, "messages_sentbox", "messages_sentbox");
    55         add_submenu_page(basename(__FILE__), "Drafts", "Drafts", 1, "messages_drafts", "messages_drafts");
    56 
    57         /* Add the administration tab under the "Site Admin" tab for site administrators */
    58         add_submenu_page('wpmu-admin.php', "Messages", "Messages", 1, basename(__FILE__), "messages_settings");
    59 
     56function messages_add_menu() { 
     57    global $wpdb, $bp_messages_table_name, $bp_messages, $userdata;
     58
     59    if ( $wpdb->blogid == $userdata->primary_blog ) {   
     60        if ( $inbox_count = BP_Messages_Message::get_inbox_count() ) {
     61            $count_indicator = ' <span id="awaiting-mod" class="count-1"><span class="message-count">' . $inbox_count . '</span></span>';
     62        }
     63       
     64        add_menu_page    ( __('Messages'), sprintf( __('Messages%s'), $count_indicator ), 1, basename(__FILE__), "messages_inbox" );
     65        add_submenu_page ( basename(__FILE__), __('Messages &rsaquo; Inbox'), __('Inbox'), 1, basename(__FILE__), "messages_inbox" );   
     66        add_submenu_page ( basename(__FILE__), __('Messages &rsaquo; Sent Messages'), __('Sent Messages'), 1, "messages_sentbox", "messages_sentbox" );
     67        add_submenu_page ( basename(__FILE__), __('Messages &rsaquo; Compose'), __('Compose'), 1, "messages_write_new", "messages_write_new" );
     68
     69        // Add the administration tab under the "Site Admin" tab for site administrators
     70        add_submenu_page ( 'wpmu-admin.php', __('Messages'), __('Messages'), 1, basename(__FILE__), "messages_settings" );
    6071    }
    6172   
    6273    /* Need to check db tables exist, activate hook no-worky in mu-plugins folder. */
    63     if($wpdb->get_var("show tables like '%" . $table_name . "%'") == false) messages_install();
    64 }
    65 add_action('admin_menu','messages_add_menu');
    66 
    67 
    68 /**************************************************************************
    69  messages_write_new(), messages_inbox(), messages_sentbox(),
    70  messages_drafts(), messages_add_js(), messages_add_css()
     74    if ( $wpdb->get_var( "show tables like '%" . $bp_messages_table_name . "%'" ) == false )
     75        messages_install();
     76}
     77add_action( 'admin_menu', 'messages_add_menu' );
     78
     79
     80/**************************************************************************
     81 messages_setup()
    7182 
    72  These are all wrapper functions used in Wordpress hooks to pass through to
    73  correct functions within the bp_messages object. Seems the only way
    74  Wordpress will handle this.
    75  **************************************************************************/
    76 
    77 function messages_write_new() { global $bp_messages; $bp_messages->write_new($_POST['username'], $_POST['subject'], $_POST['message']); }
    78 function messages_inbox()     { global $bp_messages; $bp_messages->inbox(); }
    79 function messages_sentbox()   { global $bp_messages; $bp_messages->sentbox(); }
    80 function messages_drafts()    { global $bp_messages; $bp_messages->drafts(); }
    81 function messages_add_js()    { global $bp_messages; $bp_messages->add_js(); }
    82 function messages_add_css()   { global $bp_messages; $bp_messages->add_css(); }
    83 
    84 
    85 /**************************************************************************
    86  bp_Messages [Class]
     83 Setup CSS, JS and other things needed for the messaging component.
     84 **************************************************************************/
     85
     86function messages_setup() {     
     87    add_action( 'admin_head', 'messages_add_css' );
     88    add_action( 'admin_head', 'messages_add_js' );
     89}
     90add_action( 'admin_menu', 'messages_setup' );
     91
     92
     93/**************************************************************************
     94 messages_write_new()
    8795 
    88  Where all the magic happens.
    89  **************************************************************************/
    90  
    91 class BP_Messages
    92 {
    93     var $wpdb;
    94     var $tableName;
    95     var $basePrefix;
    96     var $userdata;
    97     var $imageBase;
    98     var $inboxCount;
    99 
    100 
    101     /**************************************************************************
    102      bp_messages()
    103      
    104      Contructor function.
    105      **************************************************************************/
    106     function bp_messages()
    107     {
    108         global $wpdb, $wpmuBaseTablePrefix, $userdata, $table_name;
    109          
    110         $this->wpdb = &$wpdb;
    111         $this->userdata = &$userdata;
    112         $this->basePrefix = $wpmuBaseTablePrefix;
    113         $this->tableName = $table_name; // need a root prefix, not a wp_X_ prefix.
    114         $this->imageBase = get_option('siteurl') . '/wp-content/mu-plugins/bp_messages/images/';
    115 
    116         /* Set up Constants */
    117         define("IS_DRAFT", 1);
    118         define("INBOX", 1);
    119         define("SENTBOX", 2);
    120        
    121         /* Setup CSS and JS */
    122         add_action("admin_print_scripts", "messages_add_css");
    123         add_action("admin_print_scripts", "messages_add_js");
    124     }
    125 
    126    
    127     /**************************************************************************
    128      write_new()
    129      
    130      Handles the generation of the write new message form, as well as handling
    131      validation and directing saving to the DB to the correct function.
    132      **************************************************************************/   
    133      
    134     function write_new($username = '', $subject = '', $message = '', $alert_type = '', $alert_message = '')
    135     {
    136         if(isset($_GET['mode']) && isset($_POST['send']) && $_GET['mode'] == "send_message")
    137         {
    138             /* Validate submission */
    139             if($_POST['username'] == "" || $_POST['subject'] == "" || $_POST['message_input'] == "")
    140             {
    141                 $alert_type = 'error';
    142                 $alert_message = __("Please make sure you fill in all fields.");
    143             }
    144             else if(!bp_core_get_userid($_POST['username']))
    145             {
    146                 $alert_type = 'error';
    147                 $alert_message = __("The username you gave was a member who doesn't exist, please check and make sure you entered it correctly.");
    148             }
    149             else
    150             {
    151                 /* Send message - add to DB */
    152                 $this->send($_POST['username'], $_POST['subject'], $_POST['message_input']); die;
    153             }
    154         }
    155         else if(isset($_GET['mode']) && isset($_POST['send']) && $_GET['mode'] == "send_message")
    156         {
    157            
    158             if($_POST['subject'] == '')
    159             {
    160                 $alert_type = 'error';
    161                 $message = __("To save a draft you must at minimum enter a subject.");
    162             }
    163             else
    164             {
    165                 /* Save message - add to DB */
    166                 $this->send($_POST['username'], $_POST['subject'], $_POST['message_input'], IS_DRAFT); die;
    167             }
    168         }
     96 Handle and display the write new messages screen.
     97 **************************************************************************/
     98
     99function messages_write_new( $username = '', $subject = '', $content = '', $type = '', $message = '' ) { ?>
     100    <div class="wrap">
     101        <h2><?php _e('Compose Message') ?></h2>
     102       
     103        <?php
     104            if ( $message != '' ) {
     105                $type = ( $type == 'error' ) ? 'error' : 'updated';
    169106        ?>
    170        
    171         <div class="wrap">
    172             <h2><?php _e("Write New Message") ?></h2>
    173            
    174             <?php if($alert_type != '') { ?>
    175                 <?php if($alert_type == 'error') { $type = "error"; } else { $type = "updated"; } ?>
    176                 <div id="message" class="<?php echo $type; ?> fade">
    177                     <p><?php echo $alert_message; ?></p>
    178                 </div>
    179             <?php } ?>                 
    180            
    181             <form action="admin.php?page=bp-messages.php&amp;mode=send_message" method="post" id="send_message_form">
    182 
    183                 <p>         
    184                 <div id="usernamediv">
    185                     <label for="username"><?php _e("Send To Username") ?></label>
    186                     <div>
    187                         <input type="text" name="username" id="username" value="<?php echo $username; ?>" style="width:30%" />
    188                     </div>
    189                 </div>
    190                 </p>
    191 
    192                 <p>
    193                 <div id="subjectdiv">
    194                     <label for="subject"><?php _e("Subject") ?></label>
    195                     <div>
    196                         <input type="text" name="subject" id="subject" value="<?php echo $subject; ?>" style="width: 75%" />
    197                     </div>
    198                 </div>
    199                 </p>
    200                
    201                 <p>
    202                     <div id="messagediv">
    203                         <label for="message_input"><?php _e("Message") ?></label>
    204                         <div>
    205                             <textarea name="message_input" id="message_input" rows="15" cols="40"><?php echo $message; ?></textarea>
    206                         </div>
    207                     </div>
    208                 </p>
    209                
    210                
    211                 <p class="submit">
    212                         <input type="submit" value="<?php _e("Save as Draft"); ?>" name="save_as_draft" id="save_as_draft" />
    213                         <input type="submit" value="<?php _e("Send") ?> &raquo;" name="send" id="send" style="font-weight: bold" />
    214                 </p>
    215                
    216             </form>
    217             <script type="text/javascript">
    218                 document.getElementById("username").focus();
    219             </script>
    220            
    221         </div>
    222         <?php
    223     }
    224    
    225 
    226     /**************************************************************************
    227      inbox()
    228      
    229      Displays the list of messages in the inbox as well as redirects to the
    230      edit, delete and view functions.
    231      **************************************************************************/   
    232        
    233     function inbox($message = '', $type = 'error')
    234     {
    235 
    236         if(isset($_GET['mode']) && isset($_GET['id']) && $_GET['mode'] == "view")
    237         {
    238             if(bp_core_validate(bp_core_clean($_GET['id']))) {
    239                 $this->view_message($_GET['id'], 'inbox'); die;
    240             }
    241         }
    242         else if(isset($_GET['mode']) && isset($_GET['id']) && $_GET['mode'] == "delete")
    243         {
    244             if(bp_core_validate(bp_core_clean($_GET['id']))) {
    245                 $this->delete_message($_GET['id']); die;
    246             }
    247         }
    248         else if(isset($_GET['mode']) && isset($_POST['message_ids']) && $_GET['mode'] == "delete_bulk")
    249         {
    250             if(bp_core_validate(bp_core_clean($_POST['message_ids']))) {
    251                 $this->delete_messages($_POST['message_ids']); die;
    252             }
    253         }
    254         else if(isset($_GET['mode']) && $_GET['mode'] == "send_response")
    255         {
    256             $this->validate_response($_GET['mid'], $_POST['is_forward'], $_POST['respond_forward_username'], $_POST['respond_reply_username'], $_POST['respond_subject'], $_POST['respond_message']); die;
    257         }
    258         ?>
    259 
    260         <div class="wrap">
    261             <h2><?php _e('Inbox'); ?></h2>
    262             <form action="admin.php?page=messages_inbox&amp;mode=delete_bulk" method="post">
    263            
    264         <?php if($message != '') { ?>
    265             <?php if($type == 'error') { $type = "error"; } else { $type = "updated"; } ?>
    266107            <div id="message" class="<?php echo $type; ?> fade">
    267108                <p><?php echo $message; ?></p>
    268109            </div>
    269110        <?php } ?>
     111                       
     112        <form action="admin.php?page=bp-messages.php&amp;mode=send" method="post" id="send_message_form">
     113
     114            <p>         
     115            <div id="usernamediv">
     116                <label for="send_to"><?php _e("Send To Username") ?></label>
     117                <div>
     118                    <input type="text" name="send_to" id="send_to" value="<?php echo $username; ?>" style="width:30%" />
     119                </div>
     120            </div>
     121            </p>
     122
     123            <p>
     124            <div id="subjectdiv">
     125                <label for="subject"><?php _e("Subject") ?></label>
     126                <div>
     127                    <input type="text" name="subject" id="subject" value="<?php echo $subject; ?>" style="width: 75%" />
     128                </div>
     129            </div>
     130            </p>
    270131           
    271             <table class="widefat">
    272                 <thead>
    273                     <tr>
    274                         <th scope="col" width="1%"></th>
    275                         <th scope="col" width="15%">From</th>
    276                         <th scope="col">Subject</th>
    277                         <th scope="col" width="21%">Date Recieved</th>
    278                         <th scope="col" colspan="2" style="text-align:center;" width="15%">Action</th>
    279                         <th scope="col" width="1%"><input type="checkbox" id="check_all" onclick="checkAll();" name="check_all" /></th>
    280                     </tr>
    281                 </thead>
     132            <p>
     133                <div id="messagediv">
     134                    <label for="content"><?php _e("Message") ?></label>
     135                    <div>
     136                        <textarea name="content" id="content" rows="15" cols="40"><?php echo $content; ?></textarea>
     137                    </div>
     138                </div>
     139            </p>
     140           
     141            <p class="submit">
     142                    <input type="submit" value="<?php _e("Send") ?> &raquo;" name="send" id="send" style="font-weight: bold" />
     143            </p>
     144           
     145            <input type="hidden" name="thread_id" id="thread_id" value="<?php BP_Messages_Thread::get_new_thread_id() ?>" />
     146           
     147        </form>
     148        <script type="text/javascript">
     149            $("username").focus();
     150        </script>
     151       
     152    </div>
     153    <?php
     154}
     155
     156function messages_inbox() {
     157    messages_box( 'inbox', __('Inbox') );
     158}
     159
     160function messages_sentbox() {
     161    messages_box( 'sentbox', __('Sent Messages') );
     162}
     163
     164
     165/**************************************************************************
     166 messages_box()
     167 
     168 Handles and displays the messages in a particular box for the current user.
     169 **************************************************************************/
     170
     171function messages_box( $box = 'inbox', $display_name = 'Inbox', $message = '', $type = '' ) {
     172    global $bp_messages_image_base, $userdata;
     173   
     174    if ( isset($_GET['mode']) && isset($_GET['thread_id']) && $_GET['mode'] == 'view' ) {
     175        messages_view_thread( $_GET['thread_id'], 'inbox' );
     176    } else if ( isset($_GET['mode']) && isset($_GET['thread_id']) && $_GET['mode'] == 'delete' ) {
     177        messages_delete_thread( $_GET['thread_id'], $box, $display_name );
     178    } else if ( isset($_GET['mode']) && isset($_POST['thread_ids']) && $_GET['mode'] == 'delete_bulk' ) {
     179        messages_delete_thread( $_POST['thread_ids'], $box, $display_name );
     180    } else if ( isset($_GET['mode']) && $_GET['mode'] == 'send' ) {
     181        messages_send_message( $_POST['send_to'], $_POST['subject'], $_POST['content'], $_POST['thread_id'] );
     182    } else {
     183    ?>
     184        <div class="wrap">
     185            <h2><?php echo $display_name ?></h2>
     186            <form action="admin.php?page=bp-messages.php&amp;mode=delete_bulk" method="post">
     187   
     188            <?php
     189                if ( $message != '' ) {
     190                    $type = ( $type == 'error' ) ? 'error' : 'updated';
     191            ?>
     192                <div id="message" class="<?php echo $type; ?> fade">
     193                    <p><?php echo $message; ?></p>
     194                </div>
     195            <?php } ?>
     196   
     197            <table class="widefat" id="message-list" style="margin-top: 10px;">
    282198                <tbody id="the-list">
    283         <?php   
    284        
    285         $messages = $this->get_messages('inbox');
    286        
    287         if(count($messages) > 0)
    288         {
     199        <?php
     200
     201        $threads = BP_Messages_Thread::get_threads_for_user( $box, $userdata->ID, false, $userdata->ID );
     202       
     203        if ( $threads && $threads['have_messages'] ) {
    289204            $counter = 0;
    290             foreach($messages as $message)
    291             {
    292                 if(!$message->is_read)
    293                 {
    294                     $is_read = '<img src="' . $this->imageBase .'email.gif" alt="New Message" />';
    295                     $new = " unread";
     205            foreach ( $threads as $thread ) {
     206                if ( $thread->messages ) {
     207                    if ( $thread->unread_count ) {
     208                        $is_read = '<img src="' . $bp_messages_image_base .'/email.gif" alt="New Message" />';
     209                        $new = " unread";
     210                    } else {
     211                        $is_read = '<img src="' . $bp_messages_image_base .'/email_open.gif" alt="Older Message" />';
     212                    }
     213                   
     214                    if ( $counter % 2 == 0 )
     215                        $class = "alternate";
     216                    ?>
     217                        <tr class="<?php echo $class . $new ?>" id="<?php echo $message->id ?>">
     218                            <td class="is-read"><?php echo $is_read ?></td>
     219                            <td class="avatar">
     220                                <?php if ( function_exists('xprofile_get_avatar') )
     221                                        echo xprofile_get_avatar($thread->creator_id, 1);
     222                                ?>
     223                            </td>
     224                            <td class="sender-details">
     225                                <?php if ( $box == 'sentbox') { ?>
     226                                    <h3>To: <?php echo $thread->recipients ?></h3>
     227                                <?php } else { ?>
     228                                    <h3><?php echo bp_core_get_userlink($thread->creator_id) ?></h3>
     229                                <?php } ?>
     230                                <?php echo bp_format_time($thread->last_post_date) ?>
     231                            </td>
     232                            <td class="message-details">
     233                                <h4><a href="admin.php?page=bp-messages.php&amp;mode=view&amp;thread_id=<?php echo $thread->thread_id ?>"><?php echo stripslashes($thread->subject) ?></a></h4>
     234                                <?php echo bp_create_excerpt($thread->message, 20); ?>
     235                            </td>
     236                            <td width="50"><a href="admin.php?page=bp-messages.php&amp;mode=view&amp;thread_id=<?php echo $thread->thread_id ?>">View</a></td>
     237                            <td width="50"><a href="admin.php?page=bp-messages.php&amp;mode=delete&amp;thread_id=<?php echo $thread->thread_id ?>">Delete</a></td>
     238                            <td width="25"><input type="checkbox" name="message_ids[]" value="<?php echo $thread->thread_id ?>" /></td>
     239                        </tr>
     240                    <?php
     241       
     242                    $counter++;
     243                    unset($class);
     244                    unset($new);
     245                    unset($is_read);
    296246                }
    297                 else { $is_read = '<img src="' . $this->imageBase .'email_open.gif" alt="Older Message" />'; }
    298                 if($counter % 2 == 0) $class = "alternate";
    299                
    300                 echo '
    301                     <tr class="' . $class . $new . '">
    302                         <td>' . $is_read . '</td>
    303                         <td>' . bp_core_get_username($message->sender_id) . '</td>
    304                         <td>' . stripslashes($message->subject) . '</td>
    305                         <td>' . bp_format_time($message->date_sent) . '</td>
    306                         <td><a class="edit" href="admin.php?page=messages_inbox&amp;mode=view&amp;id=' . $message->id . '">View</a></td>
    307                         <td><a class="delete" href="admin.php?page=messages_inbox&amp;mode=delete&amp;id=' . $message->id . '">Delete</a></td>
    308                         <td><input type="checkbox" name="message_ids[]" value="' . $message->id . '" /></td>
    309                     </tr>               
    310                 ';
    311                
    312                 $counter++;
    313                 unset($class);
    314                 unset($new);
    315                 unset($is_read);
    316247            }
    317            
    318 
    319         }
    320         else {
     248        } else {
    321249            ?>
    322250                <tr class="alternate">
    323251                <td colspan="7" style="text-align: center; padding: 15px 0;">
    324                     You have no messages in your Inbox.
     252                    <?php _e('You have no messages in your'); echo ' ' . $display_name . '.'; ?>
    325253                </td>
    326254                </tr>
    327255            <?php
    328256        }
    329    
    330257        echo '
    331258            </tbody>
     
    337264        </div>';
    338265    }
    339    
    340 
    341     /**************************************************************************
    342      sentbox()
    343      
    344      Displays the list of messages in the sentbox as well as redirects to the
    345      delete and view functions.
    346      **************************************************************************/   
    347    
    348     function sentbox($message = '', $type = 'error')
    349     {
    350         if($_GET['mode'] == "delete" && isset($_GET['id']))
    351         {
    352             if(bp_core_validate(bp_core_clean($_GET['id'])))
    353             {
    354                 $this->delete_message($_GET['id'], 'sentbox'); die;
     266}
     267
     268/**************************************************************************
     269 messages_send()
     270 
     271 Send a message.
     272 **************************************************************************/
     273
     274function messages_send_message($to_user, $subject, $content, $thread_id) {
     275    global $userdata;
     276   
     277    if ( is_numeric($to_user) ) {
     278        $to_username = bp_core_get_username($to_user);
     279    } else {
     280        $to_username = $to_user;
     281        $to_user = bp_core_get_userid($to_user);
     282    }
     283
     284    if ( is_null($to_user) ) {
     285        messages_write_new( '', $subject, $content, 'error', __('The username you provided was invalid.') );
     286    } else if ( $subject == '' || $content == '' || $thread_id == '' ) {
     287        messages_write_new( $to_user, $subject, $content, 'error', __('Please make sure you fill in all the fields.') );
     288    } else {
     289        $message = new BP_Messages_Message;
     290        $message->recipient_id = $to_user;
     291        $message->recipient_username = $to_username;
     292        $message->subject = $subject;
     293        $message->message = $content;
     294        $message->is_read = 0;
     295        $message->thread_id = $thread_id;
     296       
     297        unset($_GET['mode']);
     298       
     299        if ( !$message->send() ) {
     300            // Could not send, try saving as draft.
     301            messages_box( 'inbox', __('Inbox'), __('Message could not be sent, please try again.'), 'error' );
     302        } else {
     303            messages_box( 'inbox', __('Inbox'), __('Message sent successfully!'), 'success' );
     304        }
     305    }
     306}
     307
     308/**************************************************************************
     309 messages_delete_thread()
     310 
     311 Handles the deletion of a single or multiple threads.
     312 **************************************************************************/
     313
     314function messages_delete_thread( $thread_ids, $box, $display_name ) {
     315    global $wpdb;
     316   
     317    $type = 'success';
     318   
     319    if ( is_array($thread_ids) ) {
     320        $message = __('Messages deleted successfully!');
     321       
     322        for ( $i = 0; $i < count($thread_ids); $i++ ) {
     323            if ( !$status = BP_Messages_Thread::delete($thread_ids) ) {
     324                $message = __('There was an error when deleting messages. Please try again.');
     325                $type = 'error';
    355326            }
    356327        }
    357         else if($_GET['mode'] == "view" && isset($_GET['id']))
    358         {
    359             if(bp_core_validate(bp_core_clean($_GET['id']))) {
    360                 $this->view_message($_GET['id'], 'sentbox'); die;
    361             }
    362         }
    363         else if(isset($_GET['mode']) && isset($_POST['message_ids']) && $_GET['mode'] == "delete_bulk")
    364         {
    365             if(bp_core_validate(bp_core_clean($_POST['message_ids']))) {
    366                 $this->delete_messages($_POST['message_ids'], 'sentbox'); die;
    367             }
    368         }
    369         else if(isset($_GET['mode']) && $_GET['mode'] == "send_response")
    370         {
    371             $this->validate_response($_GET['mid'], $_POST['is_forward'], $_POST['respond_forward_username'], $_POST['respond_reply_username'], $_POST['respond_subject'], $_POST['respond_message']); die;
    372         }
    373        
    374         ?>
     328    } else {
     329        $message = __('Message deleted successfully!');
     330       
     331        if ( !$status = BP_Messages_Thread::delete($thread_ids) ) {
     332            $message = __('There was an error when deleting that message. Please try again.');
     333            $type = 'error';
     334        }
     335    }
     336   
     337    unset($_GET['mode']);
     338    messages_box( $box, $display_name, $message, $type );
     339}
     340
     341
     342function messages_view_thread( $thread_id ) {
     343    global $bp_messages_image_base, $userdata;
     344
     345    $thread = new BP_Messages_Thread($thread_id, true, null, 'all');
     346   
     347    if ( !$thread->has_access ) {
     348        unset($_GET['mode']);
     349        messages_inbox( __('There was an error viewing this message, please try again.'), 'error' );
     350    } else {
     351        if ( $thread->messages ) { ?>   
    375352            <div class="wrap">
    376                 <h2><?php _e('Sentbox'); ?></h2>
    377                 <form action="admin.php?page=messages_sentbox&amp;mode=delete_bulk" method="post">
    378        
    379                 <table class="widefat">
    380                     <thead>
     353                <h2 id="message-subject"><?php echo $thread->subject; ?></h2>
     354                <table class="form-table">
     355                    <tbody>
    381356                        <tr>
    382                             <th scope="col" width="1%"></th>
    383                             <th scope="col" width="15%">From</th>
    384                             <th scope="col">Subject</th>
    385                             <th scope="col" width="21%">Date Sent</th>
    386                             <th scope="col" colspan="2" style="text-align:center;" width="15%">Action</th>
    387                             <th scope="col" width="1%"><input type="checkbox" id="check_all" onclick="checkAll();" name="check_all" /></th>
     357                            <td>
     358                                <img src="<?php echo $bp_messages_image_base ?>/email_open.gif" alt="Message" style="vertical-align: top;" /> &nbsp;
     359                                <?php _e('Sent by') ?> <?php echo bp_core_get_userlink($thread->creator_id) ?>
     360                                <?php _e('to') ?> <?php echo $thread->recipients ?>.
     361                                <?php _e('Started on') ?> <?php echo bp_format_time($thread->last_post_date) ?>
     362                            </td>
    388363                        </tr>
    389                     </thead>
    390                     <tbody id="the-list">
    391                    
    392                 <?php if($message != '') { ?>
    393                     <?php if($type == 'error') { $type = "error"; } else { $type = "updated"; } ?>
    394                     <div id="message" class="<?php echo $type; ?> fade">
    395                         <p><?php echo $message; ?></p>
     364                    </tbody>
     365                </table>
     366        <?php
     367            foreach ( $thread->messages as $message ) {
     368                $message->mark_as_read();               
     369                ?>
     370                    <a name="<?php echo 'm-' . $message->id ?>"></a>
     371                    <div class="message-box">
     372                        <div class="avatar-box">
     373                            <?php if ( function_exists('xprofile_get_avatar') )
     374                                echo xprofile_get_avatar($message->sender_id, 1);
     375                            ?>
     376               
     377                            <h3><?php echo bp_core_get_userlink($message->sender_id) ?></h3>
     378                            <small><?php echo bp_format_time($message->date_sent) ?></small>
     379                        </div>
     380                        <?php echo $message->message; ?>
     381                        <div class="clear"></div>
    396382                    </div>
    397                 <?php } ?>
    398            
    399             <?php   
    400 
    401             $messages = $this->get_messages('sentbox');
    402 
    403             if(count($messages) > 0)
    404             {
    405                 $counter = 0;
    406                 foreach($messages as $message)
    407                 {
    408                     if($counter % 2 == 0) $class = "alternate";
    409 
    410                     echo '
    411                         <tr class="' . $class . '">
    412                             <td><img src="' . $this->imageBase  . 'email_sent.gif" alt="Sent Message" /></td>
    413                             <td>' . bp_core_get_username($message->sender_id) . '</td>
    414                             <td>' . stripslashes($message->subject) . '</td>
    415                             <td>' . bp_format_time($message->date_sent) . '</td>
    416                             <td><a class="edit" href="admin.php?page=messages_sentbox&amp;mode=view&amp;id=' . $message->id . '">View</a></td>
    417                             <td><a class="delete" href="admin.php?page=messages_sentbox&amp;mode=delete&amp;id=' . $message->id . '">Delete</a></td>
    418                             <td><input type="checkbox" name="message_ids[]" value="' . $message->id . '" /></td>
    419                         </tr>               
    420                     ';
    421 
    422                     $counter++;
    423                     unset($class);
    424                     unset($new);
    425                     unset($is_read);
    426                 }
    427 
    428             }
    429             else {
    430                 ?>
    431                     <tr class="alternate">
    432                     <td colspan="7" style="text-align: center; padding: 15px 0;">
    433                         You have no messages in your Sentbox.
    434                     </td>
    435                     </tr>
    436383                <?php
    437384            }
    438 
    439             echo '
    440                 </tbody>
    441                 </table>   
    442                 <p class="submit">
    443                     <input id="deletebookmarks" class="button" type="submit" onclick="return confirm(\'You are about to delete these messages permanently.\n[Cancel] to stop, [OK] to delete.\')" value="Delete Checked Messages &raquo;" name="deletebookmarks"/>
    444                 </p>
    445                 </form>
    446             </div>';
    447     }
    448    
    449 
    450     /**************************************************************************
    451      drafts()
    452      
    453      Displays the list of draft messages in the sentbox as well as redirects
    454      to the delete and view functions.
    455      **************************************************************************/   
    456    
    457     function drafts($message = '', $type = 'error')
    458     {
    459         if($_GET['mode'] == "delete" && isset($_GET['id']))
    460         {
    461             if(bp_core_validate(bp_core_clean($_GET['id'])))
    462             {
    463                 $this->delete_message($_GET['id'], 'drafts'); die;
    464             }
    465         }
    466         else if($_GET['mode'] == "view" && isset($_GET['id']))
    467         {
    468             if(bp_core_validate(bp_core_clean($_GET['id']))) {
    469                 $this->view_message($_GET['id'], 'drafts'); die;
    470             }
    471         }
    472         else if(isset($_GET['mode']) && isset($_POST['message_ids']) && $_GET['mode'] == "delete_bulk")
    473         {
    474             if(bp_core_validate(bp_core_clean($_POST['message_ids']))) {
    475                 $this->delete_messages($_POST['message_ids'], 'drafts'); die;
    476             }
    477         }
    478         else if(isset($_GET['mode']) && $_GET['mode'] == "send_response")
    479         {
    480             $this->validate_response($_GET['mid'], $_POST['is_forward'], $_POST['respond_forward_username'], $_POST['respond_reply_username'], $_POST['respond_subject'], $_POST['respond_message']); die;
    481         }
    482385       
    483386            ?>
    484             <div class="wrap">
    485                 <h2><?php _e('Drafts'); ?></h2>
    486                 <form action="admin.php?page=messages_drafts&amp;mode=delete_bulk" method="post">
    487        
    488                 <table class="widefat">
    489                     <thead>
    490                         <tr>
    491                             <th scope="col" width="1%"></th>
    492                             <th scope="col" width="15%">From</th>
    493                             <th scope="col">Subject</th>
    494                             <th scope="col" width="21%">Date Created</th>
    495                             <th scope="col" colspan="2" style="text-align:center;" width="15%">Action</th>
    496                             <th scope="col" width="1%"><input type="checkbox" id="check_all" onclick="checkAll();" name="check_all" /></th>
    497                         </tr>
    498                     </thead>
    499                     <tbody id="the-list">
     387                <form id="send-reply" action="admin.php?page=bp-messages.php&amp;mode=send" method="post">
     388                    <div class="message-box">
     389                            <div id="messagediv">
     390                                <div class="avatar-box">
     391                                    <?php if ( function_exists('xprofile_get_avatar') )
     392                                        echo xprofile_get_avatar($userdata->ID, 1);
     393                                    ?>
    500394                   
    501                 <?php if($message != '') { ?>
    502                     <?php if($type == 'error') { $type = "error"; } else { $type = "updated"; } ?>
    503                     <div id="message" class="<?php echo $type; ?> fade">
    504                         <p><?php echo $message; ?></p>
    505                     </div>
    506                 <?php } ?>
    507            
    508             <?php   
    509 
    510             $messages = $this->get_messages('drafts');
    511 
    512             if(count($messages) > 0)
    513             {
    514                 $counter = 0;
    515                 foreach($messages as $message)
    516                 {
    517                     if(!$message->is_read)
    518                     {
    519                         $is_read = "(*)";
    520                         $new = " unread";
    521                     }
    522                     if($counter % 2 == 0) $class = "alternate";
    523 
    524                     echo '
    525                         <tr class="' . $class . '">
    526                             <td><img src="' . $this->imageBase  . 'email_draft.gif" alt="Draft Message" /></td>
    527                             <td>' . bp_core_get_username($message->sender_id) . '</td>
    528                             <td>' . stripslashes($message->subject) . '</td>
    529                             <td>' . bp_format_time($message->date_sent) . '</td>
    530                             <td><a class="edit" href="admin.php?page=messages_drafts&amp;mode=edit&amp;id=' . $message->id . '">Edit</a></td>
    531                             <td><a class="delete" href="admin.php?page=messages_drafts&amp;mode=delete&amp;id=' . $message->id . '">Delete</a></td>
    532                             <td><input type="checkbox" name="message_ids[]" value="' . $message->id . '" /></td>
    533                         </tr>               
    534                     ';
    535 
    536                     $counter++;
    537                     unset($class);
    538                     unset($new);
    539                     unset($is_read);
    540                 }
    541 
    542             }
    543             else {
    544                 ?>
    545                     <tr class="alternate">
    546                     <td colspan="7" style="text-align: center; padding: 15px 0;">
    547                         You have no draft messages.
    548                     </td>
    549                     </tr>
    550                 <?php
    551             }
    552 
    553             echo '
    554                 </tbody>
    555                 </table>   
    556                 <p class="submit">
    557                     <input id="deletebookmarks" class="button" type="submit" onclick="return confirm(\'You are about to delete these messages permanently.\n[Cancel] to stop, [OK] to delete.\')" value="Delete Checked Messages &raquo;" name="deletebookmarks"/>
    558                 </p>
    559                 </form>
    560             </div>';
    561     }
    562    
    563    
    564     /**************************************************************************
    565      get_messages()
    566      
    567      Gets an array of message objects based on the current box and returns it.
    568      **************************************************************************/   
    569 
    570     function get_messages($box = 'inbox')
    571     {
    572         if($box == "sentbox") {
    573             $sql = "SELECT * FROM " . $this->tableName . "
    574                     WHERE folder_id = " . SENTBOX . "
    575                     AND sender_id = " . $this->userdata->ID . "
    576                     ORDER BY date_sent DESC";
    577 
    578         } else if($box == "drafts") {
    579             $sql = "SELECT * FROM " . $this->tableName . "
    580                     WHERE is_draft = 1
    581                     AND sender_id = " . $this->userdata->ID . "
    582                     ORDER BY date_sent DESC";
    583         }
    584         else {
    585             $sql = "SELECT * FROM " . $this->tableName . "
    586                     WHERE folder_id = " . INBOX . "
    587                     AND recipient_id = " . $this->userdata->ID . "
    588                     ORDER BY date_sent DESC";               
    589         }
    590 
    591         $messages = $this->wpdb->get_results($sql);
    592        
    593         return $messages;
    594     }
    595        
    596    
    597     /**************************************************************************
    598      delete_message()
    599      
    600      Removes a message from the database.
    601      **************************************************************************/   
    602 
    603     function delete_message($message_id, $redirect = 'inbox')
    604     {
    605         /** Check that user can access this message **/
    606         $sql = "SELECT id FROM " . $this->tableName . "
    607                 WHERE id = " . $message_id . "
    608                 AND (sender_id = " . $this->userdata->ID . "
    609                      OR recipient_id = " . $this->userdata->ID . ")";
    610        
    611         if(!$this->wpdb->get_var($sql))
    612         {
    613             /** No access to this message **/
    614             unset($_GET['mode']);
    615             $message = __("That was not a valid message.");
    616             $this->callback($message, 'error', $redirect);
    617         }
    618         else
    619         {
    620             /** User has access to this message **/
    621             $sql = "DELETE FROM " . $this->tableName . "
    622                     WHERE id = " . $message_id . "
    623                     LIMIT 1";
    624            
    625             if(!$this->wpdb->query($sql))
    626             {
    627                 unset($_GET['mode']);
    628                 $message = __("There was a problem deleting that message. Please try again.");
    629                 $this->callback($message, 'error', $redirect);
    630             }
    631             else
    632             {
    633                 unset($_GET['mode']);
    634                 $message = __("The message was deleted successfully!");
    635                 $this->callback($message, 'success', $redirect);
    636             }
    637            
    638         }
    639     }
    640 
    641 
    642     /**************************************************************************
    643      delete_messages()
    644 
    645      Removes multiple messages from the database.
    646      **************************************************************************/   
    647 
    648     function delete_messages($message_ids, $redirect = 'inbox')
    649     {
    650         if(is_array($message_ids))
    651         {
    652             for($i=0; $i<count($message_ids); $i++)
    653             {
    654                 /** Check that user can access this message **/
    655                 $sql = "SELECT id FROM " . $this->tableName . "
    656                         WHERE id = " . $message_ids[$i] . "
    657                         AND (sender_id = " . $this->userdata->ID . "
    658                              OR recipient_id = " . $this->userdata->ID . ")";
    659 
    660                 if($this->wpdb->get_var($sql))
    661                 {
    662                     /** User has access to this message **/
    663                     $sql = "DELETE FROM " . $this->tableName . "
    664                             WHERE id = " . $message_ids[$i] . "
    665                             LIMIT 1";
    666 
    667                     if(!$this->wpdb->query($sql))
    668                     {
    669                         $errors = 1;
    670                     }
    671                 }
    672             }
    673            
    674             if($errors)
    675             {
    676                 unset($_GET['mode']);
    677                 $message = __("Some messages were not deleted, please try again.");
    678                 $this->callback($message, 'error', $redirect); die;
    679             }
    680            
    681             unset($_GET['mode']);
    682             $message = __("Messages were deleted successfully!");
    683             $this->callback($message, 'success', $redirect); die;
    684         }
    685     }
    686    
    687    
    688     /**************************************************************************
    689      addto_sentbox()
    690      
    691      Duplicates a sent message into the senders sentbox.
    692      **************************************************************************/   
    693 
    694     function addto_sentbox($username, $subject, $message, $date_sent)
    695     {
    696         $sql = "INSERT INTO " . $this->tableName . " (
    697                     sender_id,
    698                     recipient_id,
    699                     subject,
    700                     message,
    701                     folder_id,
    702                     date_sent
    703                 )
    704                 VALUES (
    705                     " . $this->userdata->ID . ",
    706                     " . bp_core_get_userid($username) . ",
    707                     '" . bp_core_clean($subject) . "',
    708                     '" . bp_core_clean($message) . "',
    709                     " . SENTBOX . ",
    710                     " . $date_sent . "                             
    711                 )";
    712                
    713         $this->wpdb->query($sql);
    714     }
    715 
    716 
    717     /**************************************************************************
    718      send()
    719      
    720      Insert a message into the database.
    721      **************************************************************************/       
    722    
    723     function send($username, $subject, $message, $is_draft = 0)
    724     {
    725         $date_sent = time();
    726        
    727         $sql = "INSERT INTO " . $this->tableName . " (
    728                     sender_id,
    729                     recipient_id,
    730                     subject,
    731                     message,
    732                     is_draft,
    733                     date_sent
    734                 )
    735                 VALUES (
    736                     " . $this->userdata->ID . ",
    737                     " . bp_core_get_userid($username) . ",
    738                     '" . bp_core_clean($subject) . "',
    739                     '" . bp_core_clean($message) . "',
    740                     " . bp_core_clean($is_draft) . ",
    741                     " . $date_sent . "                             
    742                 )";
    743 
    744         if($this->wpdb->query($sql))
    745         {
    746             if($is_draft)
    747             {
    748                 unset($_POST['save_as_draft']);
    749                 $this->write_new('', '', '', 'success', __("Your message has been saved."));       
    750             }
    751             else
    752             {
    753                 unset($_POST['send']);
    754                 $this->addto_sentbox($username, $subject, $message, $date_sent);
    755                 $this->write_new('', '', '', 'success', __("Your message was sent successfully!"));
    756             }   
    757         }
    758         else
    759         {
    760             if($is_draft)
    761             {
    762                 unset($_POST['save_as_draft']);
    763                 $this->write_new($username, $subject, $message, 'error', __("There was a problem saving your message, please try again."));
    764             }
    765             else
    766             {
    767                 unset($_POST['send']);
    768                 $this->write_new($username, $subject, $message, 'error', __("There was a problem sending your message, please try again."));       
    769             }
    770         }
    771     }
    772 
    773 
    774     /**************************************************************************
    775      validate_response()
    776      
    777      Check to see if a reply or forward of a message is valid. Used in Inbox
    778      Sentbox and Drafts, so needs to be extracted into its own function.
    779      **************************************************************************/       
    780        
    781     function validate_response($mid, $response_type, $forward_username, $reply_username, $subject, $message)
    782     {
    783         if($response_type == "1" ) { $response_type = "forward"; } else { $response_type = "reply"; }
    784         $reply = array("subject" => $subject, "message" => $message, "type" => $response_type);
    785        
    786         if($response_type == "forward")
    787         {
    788             if($subject == "" || $forward_username == "")
    789             {
    790                 $this->view_message(bp_core_clean($mid), 'inbox', $response_type, $reply, __('Please fill in all fields')); die;
    791             }
    792             else if(!bp_core_get_userid($forward_username)) {
    793                 $this->view_message(bp_core_clean($mid), 'inbox', $response_type, $reply, __('That username was invalid')); die;   
    794             }
    795             else {
    796                 //echo "sending"; die;
    797                 $this->send($forward_username, $subject, $message); die;
    798             }
    799         }
    800         else
    801         {
    802             if($subject == "" || $reply_username == "")
    803             {
    804 
    805                 $this->view_message(bp_core_clean($mid), 'inbox', $response_type, $reply, __('Please fill in all fields')); die;
    806             }
    807             else if(!bp_core_get_userid($reply_username)) {
    808                 $this->view_message(bp_core_clean($mid), 'inbox', $response_type, $reply, __('That username was invalid')); die;   
    809             }
    810             else {
    811                 //echo "sending"; die;
    812                 $this->send($reply_username, $subject, $message); die;
    813             }
    814            
    815         }
    816     }
    817    
    818    
    819        
    820     /**************************************************************************
    821      mark_as_read()
    822      
    823      Marks a message as read, once it's been viewed.
    824      **************************************************************************/       
    825    
    826     function mark_as_read($mid)
    827     {
    828         $sql = "UPDATE " . $this->tableName . "
    829                 SET is_read = 1
    830                 WHERE id = " . $mid;
    831                
    832         $this->wpdb->query($sql);
    833     }
    834    
    835        
    836     /**************************************************************************
    837      get_message()
    838      
    839      Select and return a message.
    840      **************************************************************************/   
    841    
    842     function get_message($mid)
    843     {
    844         $sql = "SELECT * FROM " . $this->tableName . "
    845                 WHERE id = " . $mid;
    846        
    847         return $this->wpdb->get_row($sql);
    848     }
    849    
    850    
    851     /**************************************************************************
    852      view_message()
    853      
    854      Selects and displays a message and handles reply/forward form.
    855      **************************************************************************/       
    856    
    857     function view_message($mid, $redirect_to, $show_respond = false, $callback = null, $error_message = null)
    858     {
    859        
    860         /* Check if user can view. */
    861         $sql = "SELECT * FROM " . $this->tableName . "
    862                 WHERE id = " . $mid . "
    863                 AND (recipient_id = " . $this->userdata->ID . "
    864                 OR sender_id = " . $this->userdata->ID . ")
    865                 LIMIT 1";
    866        
    867         if(!$message = $this->wpdb->get_row($sql))
    868         {
    869             unset($_GET['mode']);
    870             $this->callback(__("There was a problem viewing that message, please try again."), 'error', $redirect_to);
    871         }
    872         else {
    873            
    874             /* All good, now show the message */
    875             ?>
    876            
    877             <div class="wrap">
    878                 <h2 id="message_subject"><?php echo "\"" . $message->subject . "\""; ?></h2>
    879            
    880                 <ul>
    881                     <li><?php _e("From") ?>: <?php echo bp_core_get_username($message->sender_id) ?></li>
    882                     <li><?php _e("Subject") ?>: <strong><?php echo $message->subject ?></strong></li>
    883                     <li><?php _e("Date Sent") ?>: <?php echo bp_format_time($message->date_sent) ?></li>
    884                     <li><?php _e("To") ?>: <?php echo bp_core_get_username($message->recipient_id) ?></li>
    885                 </ul>
    886                 <hr />
    887                
    888                 <div id="message_view">
    889                     <?php echo $message->message; ?>
    890                 </div>
    891                 <hr />
    892                 <p>
    893                     <a href="javascript:sendReply();">Reply</a>
    894                     <a href="javascript:forwardMessage();">Forward</a>
    895                 </p>
    896                
    897                 <?php if($error_message != '') { ?>
    898                     <div id="message" class="error fade">
    899                         <p><?php echo $error_message; ?></p>
    900                     </div>
    901                 <?php } ?>
    902 
    903                 <div id="respond"<?php if(!$show_respond) { ?>style="display: none;"<?php } ?>>
    904                     <form action="admin.php?page=messages_<?php echo $redirect_to ?>&amp;mode=send_response&amp;mid=<?php echo $message->id; ?>" method="post" id="send_message_form">
    905                        
    906                         <input type="hidden" name="respond_reply_username" id="respond_reply_username" value="<?php echo bp_core_get_username($message->sender_id) ?>" />
    907 
    908                         <div id="recipientdiv"<?php if($show_respond != "forward") { ?>style="display:none;"<?php } ?>>
    909                             <label for="respond_forward_username"><?php _e("Forward to Username:") ?></label>
    910                             <div>
    911                                 <input type="text" name="respond_forward_username" id="respond_forward_username" style="width: 50%;" value="<?php if(isset($callback["forward_username"])) { echo $callback["forward_username"]; } ?>" />
    912                             </div>
    913                         </div>
    914 
    915                         <div id="subjectdiv">
    916                             <label for="respond_subject"><?php _e("Subject") ?></label>
    917                             <div>
    918                                 <input type="text" name="respond_subject" id="respond_subject" value="<?php if(isset($callback["subject"])) { echo $callback["subject"]; } else { echo $subject; } ?>" />
    919                             </div>
    920                         </fieldset>
    921 
    922                         <p>
    923                             <div id="messagediv">
    924                                 <label for="respond_message"><?php _e("Message") ?></label>
     395                                    <h3><?php _e("Reply: ") ?></h3>
     396                                </div>
     397                                <label for="reply"></label>
    925398                                <div>
    926                                     <textarea name="respond_message" id="respond_message" rows="15" cols="40"><?php if(isset($callback["message"])) { echo $callback["message"]; } else { ?><br /><br />-------- Original Message -------------------------------------<br /><br /><?php echo $message->message; ?></fieldset><?php } ?></textarea>
     399                                    <textarea name="content" id="content" rows="15" cols="40"><?php echo $content; ?></textarea>
    927400                                </div>
    928401                            </div>
    929                         </p>
    930 
    931 
    932                         <p class="submit">
    933                                 <input type="submit" value="<?php _e("Save as Draft"); ?>" name="save_as_draft" id="save_as_draft" />
    934                                 <input type="submit" value="<?php _e("Send") ?> &raquo;" name="send" id="send" style="font-weight: bold" />
    935                         </p>
    936                        
    937                         <input type="hidden" name="is_forward" id="is_forward" value="<?php if($callback["type"] == "forward") { ?>1<?php }else{ ?>0<?php } ?>" />
    938                     </form>
    939                 </div>
    940                
    941                
     402                            <p class="submit">
     403                                <input type="submit" name="send" value="Send Reply &raquo;" id="send" />
     404                            </p>
     405                    </div>
     406                    <input type="hidden" name="thread_id" id="thread_id" value="<?php echo $thread->thread_id ?>" />
     407                    <input type="hidden" name="send_to" id="send_to" value="<?php echo $thread->creator_id ?>" />
     408                    <input type="hidden" name="subject" id="subject" value="<?php _e('Re: '); echo $thread->subject; ?>" />
     409                </form>
    942410            </div>
    943 
    944411            <?php
    945            
    946             /** Now mark this message as read. **/
    947             $this->mark_as_read($message->id);
    948            
    949         }
    950     }
    951    
    952    
    953     /**************************************************************************
    954      get_inbox_count()
    955      
    956      Counts unread messages in Inbox, to display unread count on tab.
    957      **************************************************************************/   
    958    
    959     function get_inbox_count()
    960     {
    961         $sql = "SELECT count(id) FROM " . $this->tableName . "
    962                 WHERE recipient_id = " . $this->userdata->ID . "
    963                 AND folder_id = 1 
    964                 AND is_read = 0";
    965 
    966         $count = $this->wpdb->get_var($sql);
    967 
    968         if($count > 0)
    969         {
    970             return " <strong>(" . $count . ")</strong>";
    971         }
    972        
    973         return false;
    974     }
    975 
    976    
    977     /**************************************************************************
    978      callback()
    979      
    980      Callback to specfic functions - this keeps correct tabs selected.
    981      **************************************************************************/   
    982    
    983     function callback($message, $type = 'error', $callback)
    984     {
    985 
    986         switch($callback)
    987         {
    988             case "inbox":
    989                 $this->inbox($message, $type);
    990             break;
    991             case "sentbox":
    992                 $this->sentbox($message, $type);
    993             break;
    994             case "drafts":
    995                 $this->drafts($message, $type);
    996             break;
    997             default:
    998                 $this->inbox($message, $type); 
    999         }
    1000     }
    1001    
    1002     /**************************************************************************
    1003      add_js()
    1004      
    1005      Inserts the TinyMCE Js that's needed for the WYSIWYG message editor.
    1006      **************************************************************************/   
    1007    
    1008     function add_js()
    1009     {
    1010         if(isset($_GET['page']))
    1011         {
    1012             ?>
    1013             <script type="text/javascript">
    1014                 function checkAll() {
    1015                     var checkboxes = document.getElementsByTagName("input");
    1016                     for(var i=0; i<checkboxes.length; i++) {
    1017                         if(checkboxes[i].type == "checkbox") {
    1018                             if(document.getElementById("check_all").checked == "") {
    1019                                 checkboxes[i].checked = "";
    1020                             }
    1021                             else {
    1022                                 checkboxes[i].checked = "checked";
    1023                             }
    1024                         }
    1025                     }
    1026                 }
    1027                
    1028                 function sendReply() {
    1029                     var subject = document.getElementById("message_subject").innerHTML;
    1030                    
    1031                     document.getElementById("respond").style.display = "block";
    1032                     document.getElementById("recipientdiv").style.display = "none";
    1033                     document.getElementById("respond_subject").value = "Re: " + subject.substr(1).replace('"', '');
    1034                     document.getElementById("respond_forward_username").value = "";
    1035                     document.getElementById("is_forward").value = "0";
    1036                 }
    1037                
    1038                 function forwardMessage() {
    1039                     var subject = document.getElementById("message_subject").innerHTML;
    1040                    
    1041                     document.getElementById("respond").style.display = "block";
    1042                     document.getElementById("recipientdiv").style.display = "block";
    1043                     document.getElementById("respond_subject").value = "Fwd: " + subject.substr(1).replace('"', '');
    1044                     document.getElementById("respond_forward_username").value = "";
    1045                     document.getElementById("is_forward").value = "1";
    1046                 }
    1047                
    1048             </script>
    1049             <script type="text/javascript" src="../wp-includes/js/tinymce/tiny_mce.js"></script>
    1050             <script type="text/javascript">
    1051                 <!--
    1052                 tinyMCE.init({
    1053                 theme : "advanced",
    1054                 theme : "advanced",
    1055                 language : "en",
    1056                 theme_advanced_toolbar_location : "top",
    1057                 theme_advanced_toolbar_align : "left",
    1058                 theme_advanced_path_location : "bottom",
    1059                 theme_advanced_resizing : true,
    1060                 theme_advanced_resize_horizontal : false,
    1061                 theme_advanced_buttons1 : "bold,italic,strikethrough,separator,bullist,numlist,outdent,indent,separator,justifyleft,justifycenter,justifyright,separator,link,unlink,spellchecker,forecolor,fontsizeselect",
    1062                 theme_advanced_buttons2 : "",
    1063                 theme_advanced_buttons3 : "",
    1064                 content_css : "<?php echo get_option('siteurl') . '/wp-includes/js/tinymce/plugins/wordpress/wordpress.css'; ?>",
    1065                 mode : "exact",
    1066                 elements : "message_input, respond_message",
    1067                 width : "99%",
    1068                 height : "200"
    1069                 });
    1070                 -->
    1071             </script>
    1072             <?php
    1073         }
    1074     }
    1075    
    1076 
    1077     /**************************************************************************
    1078      add_css()
    1079      
    1080      Inserts the CSS needed to style the messages pages.
    1081      **************************************************************************/   
    1082    
    1083     function add_css()
    1084     {
    1085         ?>
    1086         <style type="text/css">
    1087             .unread td {
    1088                 font-weight: bold;
    1089                 background: #ffffec;
    1090             }
    1091            
    1092             #send_message_form fieldset input {
    1093                 width: 98%;
    1094                 font-size: 1.7em;
    1095                 padding: 4px 3px;
    1096             }
    1097            
    1098            
    1099         </style>
    1100         <?php
    1101     }
    1102 
    1103 } // End Class
     412        }
     413    }
     414}
    1104415
    1105416
  • trunk/bp-xprofile.php

    r53 r56  
    66$bp_xprofile_table_name_data   = $wpdb->base_prefix . 'bp_xprofile_data';
    77
    8 $image_base             = get_option('siteurl') . '/wp-content/mu-plugins/bp-xprofile/images';
     8$image_base = get_option('siteurl') . '/wp-content/mu-plugins/bp-xprofile/images';
    99
    1010require_once( 'bp-xprofile/bp-xprofile-classes.php' );
Note: See TracChangeset for help on using the changeset viewer.