Well I got bored and decided to have a go at it myself.. it works pretty well!

I just use this code in my xoops/kernel/privmessage.php in place of the existing
insert function:
le="color: #000000"><?php function insert(&$pm) { if (get_class($pm) != 'xoopsprivmessage') { return false; } if (!$pm->isDirty()) { return true; } if (!$pm->cleanVars()) { return false; } foreach ($pm->cleanVars as $k => $v) { ${$k} = $v; } if ($pm->isNew()) { // ==================================== // IPBOARD HACK // ==================================== include(XOOPS_ROOT_PATH."/modules/ipboard/conf_global.php"); require(XOOPS_ROOT_PATH."/modules/ipboard/sources/Drivers/mySQL.php"); require XOOPS_ROOT_PATH."/modules/ipboard/sources/functions.php"; $std = new FUNC; $DB = new db_driver; $DB->obj['sql_database'] = $INFO['sql_database']; $DB->obj['sql_user'] = $INFO['sql_user']; $DB->obj['sql_pass'] = $INFO['sql_pass']; $DB->obj['sql_host'] = $INFO['sql_host']; $DB->obj['sql_tbl_prefix'] = $INFO['sql_tbl_prefix']; $DB->obj['debug'] = ($INFO['sql_debug'] == 1) ? $_GET['debug'] : 0; $DB->connect(); require XOOPS_ROOT_PATH."/modules/ipboard/sources/lib/emailer.php"; $email = new emailer(); //-------------------------------------- // Attempt to get the reciepient details //-------------------------------------- $to_member = array(); $DB->query("SELECT uname, uid, view_pop, mgroup, email_pm, language, email FROM ibf_members WHERE uid='$to_userid'"); $to_member = $DB->fetch_row(); if (empty($to_member['uid'])) { //echo "Member does not exist"; $DB->close_db(); return; } //-------------------------------------- // Can the reciepient use the PM system? //-------------------------------------- $DB->query("SELECT m.msg_total, g.g_use_pm, g.g_max_messages FROM ibf_groups g, ibf_members m WHERE m.uid='".$to_member['uid']."' AND g.g_id=m.mgroup"); $to_msg_stats = $DB->fetch_row(); if ($to_msg_stats['g_use_pm'] != 1) { //echo "Recipient cannot use PM system"; $DB->close_db(); return; } //-------------------------------------- // Does the target member have enough room // in their inbox for a new message? //-------------------------------------- if ( (($to_msg_stats['msg_total']) >= $to_msg_stats['g_max_messages']) and ($to_msg_stats['g_max_messages'] > 0) ) { //echo "No room"; $DB->close_db(); return; } //-------------------------------------- // Has the reciepient blocked us? //-------------------------------------- $DB->query("SELECT contact_id, allow_msg FROM ibf_contacts WHERE contact_id='1' AND member_id='".$to_member['uid']."'"); $can_msg = $DB->fetch_row(); if ( (isset($can_msg['contact_id'])) and ($can_msg['allow_msg'] != 1) ) { //echo "blocked"; $DB->close_db(); return; } //----------------------------------------- // Add our original ID to the pool and loop //----------------------------------------- $cc_array[$to_member['uid']] = $to_member; unset($to_member); foreach ($cc_array as $user_id => $to_member) { //-------------------------------------- // Sort out tracking and pop us status //-------------------------------------- $show_popup = $to_member['view_pop']; //-------------------------------------- // Enter the info into the DB // Target user side. //-------------------------------------- $db_string = $std->compile_db_string( array( 'member_id' => $to_member['uid'], 'msg_date' => time(), 'read_state' => '0', 'title' => $subject, 'message' => $std->remove_tags($msg_text), 'from_id' => 1, 'vid' => 'in', 'recipient_id' => $to_member['uid'], 'tracking' => 0, ) ); $DB->query("INSERT INTO ibf_messages (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")"); $new_id = $DB->get_insert_id(); unset($db_string); //----------------------------------------------------- $DB->query("UPDATE ibf_members SET ". "msg_total = msg_total + 1, " . "new_msg = new_msg + 1, " . "msg_from_id='1', ". "msg_msg_id='" . $new_id . "', ". "show_popup='" . $show_popup . "' ". "WHERE uid='" . $to_member['uid'] . "'"); /* //----------------------------------------------------- // Has this member requested a PM email nofity? //----------------------------------------------------- if (1)//($to_member['email_pm'] == 1) { $to_member['language'] = $to_member['language'] == "" ? 'en' : $to_member['language']; $email->get_template("pm_notify", $to_member['language']); $email->build_message( array( 'NAME' => $to_member['uname'], 'POSTER' => 'Samcrew', 'TITLE' => $input['msg_title'], 'LINK' => "?act=Msg&CODE=03&VID=in&MSID=$new_id", ) ); //$email->subject = lang['pm_email_subject']; $email->to = $to_member['email']; $email->send_mail(); } */ } //echo "OK! :)"; $DB->close_db(); // ===================================== } else { $sql = sprintf("UPDATE %s SET msg_image = %s, subject = %s, from_userid = %u, to_userid = %u, msg_text = %s, read_msg = %u WHERE msg_id = %u", $this->db->prefix('priv_msgs'), $this->db->quoteString($msg_image), $this->db->quoteString($subject), $from_userid, $to_userid, $this->db->quoteString($msg_text), $read_msg, $msg_id); } if (!$result = $this->db->query($sql)) { return false; } if (empty($msg_id)) { $msg_id = $this->db->getInsertId(); } $pm->assignVar('msg_id', $msg_id); return true; }
Comments/criticism/suggestions welcome :)