PDA

View Full Version : Mini-Hack: Improved PM Popup JavaScript


TWTCommish
15 Jan 2002, 14:26
Alright, this is pretty straightforward. Using this, your users will be redirected right to their most recent PM, rather than just their Inbox. Furthermore, you'll be able to use the username and title of the message in the popup. Only known downside: if they have more than one PM, it just takes them to the most recent one. I might work on this later to let them know that they've got a few waiting for them, but I've found that this is a very minor problem that rarely comes up.

This is in the Beta forum for one simple reason: I had trouble putting it together, and strongly suspect there's an easier way to do this. I figured I'd take a chance and post it anyway. Started off just for my own board, but I found it so useful I thought I'd post it. Here's how it's done:

Open global.php in your main forums directory. Find this:

$newpmmsg=1;

RIGHT after it (before the eval() line), put this:

$latest_pm = $DB_site->query_first("SELECT p.privatemessageid AS pm_popup_id, p.title AS pm_popup_title, u.username AS pm_popup_username FROM privatemessage p, user u WHERE readtime = '0' AND touserid = '$bbuserinfo[userid]' AND p.fromuserid = u.userid ORDER BY dateline DESC LIMIT 1");
extract($latest_pm);

Save and upload. Then, edit the template head_newpm. You can now use $pm_popup_id, $pm_popup_username, and $pm_popup_title within this template to refer to the ID of the PM, the username of the person who sent it, and the title of the message.

I'm sure you can all figure out for yourselves from then on how to get it to redirect and all that. Here's the template I'm using:


<script language="JavaScript">
<!--
function confirm_newpm() {
input_box=confirm("You have a new private message from $pm_popup_username entitled \"$pm_popup_title\".\nClick OK to view it, or cancel to hide this prompt.");
if (input_box==true) { // Output when OK is clicked
second_box=confirm("Open in new window?\n\n(Press cancel to open your $inboxname in the current window.)");
if (second_box==true) {
window.open('private.php?s=$session[sessionhash]&action=show&privatemessageid=$pm_popup_id','pmnew','width=600,height=500,menubar=yes,scrollb ars=yes,toolbar=yes,location=yes,directories=yes,resizable=yes,top=50,left=50');
} else {
window.location="private.php?s=$session[sessionhash]&action=show&privatemessageid=$pm_popup_id";
}
} else {
// Output when Cancel is clicked
}
}
-->
</script>

Enjoy! Screenshot attached. :) Please let me know if I'm being a moron, if I've missed something, etc.

Scott MacVicar
15 Jan 2002, 15:40
This only shows the last pm though you could have had multiple, anyway as your onyl selecting one use query_first instead of query and then fetch array.

$latest_pm = $DB_site->query("SELECT p.privatemessageid AS pm_popup_id, p.title AS pm_popup_title, u.username AS pm_popup_username FROM privatemessage p, user u WHERE readtime = '0' AND touserid = '$bbuserinfo[userid]' AND p.fromuserid = u.userid ORDER BY dateline DESC LIMIT 1");
extract($DB_site->fetch_array($latest_pm));

can be
$latest_pm = $DB_site->query_first("SELECT p.privatemessageid AS pm_popup_id, p.title AS pm_popup_title, u.username AS pm_popup_username FROM privatemessage p, user u WHERE readtime = '0' AND touserid = '$bbuserinfo[userid]' AND p.fromuserid = u.userid ORDER BY dateline DESC LIMIT 1");
extract($latest_pm);

TWTCommish
15 Jan 2002, 15:44
Ah, I see. Well, I'm glad no larger problems exist. Is it particularly faster either way? I've edited the original post anyway.

And yeah, I'm aware of it taking you to the latest one. Hence this, from my post. Maybe you missed it. :)

Only known downside: if they have more than one PM, it just takes them to the most recent one. I might work on this later to let them know that they've got a few waiting for them, but I've found that this is a very minor problem that rarely comes up.

ptbyjason
16 Jan 2002, 16:04
Thanks, I thought about this a while back, but I didn't think it was possible.

TWTCommish
16 Jan 2002, 16:25
Naw, 'tis very possible. I've been trying to have it detect whether there's more than one, and display the typical message and all that...but it's giving me a hard time, even though it seems like it ought to work. If I get it working, I'll be sure to post it as a hack. :)