PDA

View Full Version : How to access pmid replies in private_insertpm_complete hook location?


Majidm
06 Mar 2011, 07:23
I'm working on a plugin that hooks into private_insertpm_complete

I'm having a really difficult time finding the proper pmid variable in replies

$pmdm->info['parentpmid'] works for the initial message, but I can't use this for replies because the replies have a different pmid

I've tried the following:
$vbulletin->input->clean_gpc('r', 'pmid', TYPE_UINT)
$pmdm->info['replypmid']
$pm['pmid']
$pm[pmid]

Anyone know how to access the pmid for replies? :confused:

kh99
06 Mar 2011, 16:02
It looks like there's an id for the text, then a different id for the message (one for each recipient). I assume you're talking about the second one (pmid in the pm table)? I'm not sure why parentid doesn't work for replys, but if you use hook location pmdata_postsave_recipient it gets called once per recipient, and you can call $this->dbobject->insert_id() to get the pmid.

Majidm
06 Mar 2011, 16:33
It looks like there's an id for the text, then a different id for the message (one for each recipient). I assume you're talking about the second one (pmid in the pm table)? I'm not sure why parentid doesn't work for replys, but if you use hook location pmdata_postsave_recipient it gets called once per recipient, and you can call $this->dbobject->insert_id() to get the pmid.

Thanks I will try that, this is for a custom notifications system (Arrowchat)

I was also accessing these variables:
$pmdm->info['recipients']; (recipients array)
$userid (user PM being sent to)
$vbulletin->userinfo[userid] (user PM being sent from)
$vbulletin->userinfo[username] (username PM being sent from)
$pm['title'] (subject of PM)

Will they be accessible too? If not, do you know what the var names are in that hook location?

p.s If so, how do you know these?

Thanks

kh99
06 Mar 2011, 16:57
I think you could access all those things. I think you'd have to put "global $vbulletin" in your code, use "$this" in place of $pmdm, and call $this->fetch_field('title') to get the title (or use variable $plaintext_title for the title that's been run through unhtmlspecialchars). Also the user id is in $user[userid].

Look at file includes/class_dm_pm.php and search for private_insertpm_complete (it's around line 581 in my file). it's in function post_save_each() which is called near the end of save()

Another thing you could do is make a plugin for private_insertpm_complete that saves the pmid's in a global variable, then use them in your existing plugin.

Majidm
06 Mar 2011, 17:47
Nice thanks a lot again kh99!

I used the pmdata_postsave_recipient hook location

/* ARROWCHAT NEW MESSAGE NOTIFICATION */
global $vbulletin;
global $db;

$db->query_write("INSERT INTO arrowchat_notifications (to_id, author_id, author_name, type, alert_time, misc1, misc2) VALUES ('".$user[userid]."', '".$vbulletin->userinfo[userid]."', '".$vbulletin->userinfo[username]."', '1', '".time()."', '".addslashes($plaintext_title)."', '".$this->dbobject->insert_id()."')");
/* END ARROWCHAT MESSAGE NOTIFICATION */

Works perfectly, cheers!