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:
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 :)