PDA

View Full Version : PM or email a user, with a post quoted Ver. 1.3


sv1cec
05-10-2005, 10:00 PM
Well, this one was born, when I wanted to PM a user, and quoted a post he had made in my forums, in the PM.

Well, I could copy and paste, and then insert the quote tags, but instead, I did some code tweaking and here you go.

This hack will create a new menu item, in the drop-down menu which is shown when you click on a user's name in the postbit. When you click on that menu item, you will be taken to the PM form, with the Recipient field, filled with the poster, the title field filled with the original thread's title and in the message box, you will have the text of the post as a quote.

Also, it will add a small icon, in the first postbit line, which when clicked will redirect you to the new PM form, with only the text from the selected post, quoted. You are now free to enter any recipients you want. Thanks to Amykhar for this, more generic version.

Remember to save the third image below in your disk and then upload it in the images/buttons directory in your server.

Easy mod, just two edits.

Version 1.0

Initial version with only PM functionality, called from the user drop-down menu and sending the PM to the user who posted the post.

Version 1.1

More generic version, which allowed to send a PM with a quote of a post, to any member of your forums, via the small icon on the top of each postbit.

Version 1.2

This version added the same functionality as the one described above, but using an email instead of a PM. Users who want to upgrade, just scroll down in the installation instructions, until you find the section dealing with the email. Remember to save the fourth image below in your disk and then upload it in the images/buttons directory in your server, if you want to use the email functionality.

Version 1.3 (current)

One thing I didn't like about the way this hack worked, was that upon sending the PM or the email, it didn't return you to the post you were, when you started it. So I did some small changes to implement that functionality. Now, after the PM or the email is send, you are returned to the post you were before.

For a new installation, just follow the instructions in the txt file. For upgrading here is what you have to do:

1. Open your private.php file and find:


// change for pm with post quote
if ($_REQUEST['postid'])
{
$text = $DB_site->query_first("
SELECT pst.threadid, thrd.title, pst.pagetext
FROM " . TABLE_PREFIX . "post AS pst
LEFT JOIN " . TABLE_PREFIX . "thread AS thrd ON(thrd.threadid = pst.threadid)
WHERE pst.postid=" . intval($_REQUEST['postid']) . "
");
if ($_REQUEST['stripquote'])
{
$pagetext = strip_quotes($text['pagetext']);
}
else
{
$pagetext = $text['pagetext'];
}
$pagetext = trim(htmlspecialchars_uni($pagetext));


This is code you added, when you installed the hack. Below that, add:


$return_url="showthread.php?p=$_REQUEST[postid]";


In the same file find:


// ############################### start insert pm ###############################
// either insert a pm into the database, or process the preview and fall back to newpm
if ($_POST['do'] == 'insertpm')
{
// get an array of incoming data
$pm = &$_POST;


Below that, add:


$return_url=$_POST['return_url'];


In the same file find:


eval(print_standard_redirect('pm_messagesent'));


Above that, add:


if ($return_url!='')
{
$url=$return_url;
}
else
{
$url = "private.php?$session[sessionurl]";
}


Open your pm_newpm template and find:


<input type="hidden" name="receipt" value="0" />


Below that, add:


<input type="hidden" name="return_url" value="$return_url" />


Save template.

Open file sendmessage.php and find:


// for email with quote
if ($_REQUEST['postid'])
{


Right below that, add:


$url="showthread.php?p=$_REQUEST[postid]";


That's it, you will now be returned to the post you were, before sending the PM or the email.

I hope you like it.

amykhar
05-11-2005, 07:18 PM
Nicely done. Hopefully, I won't confuse anybody with what I'm about to share, because his hack works perfectly as described. But, I wanted a wee bit more. I wanted to be able to quote a post in a private message to ANY member, not just the author of the post.

To do this, I had to move his code snippet as follows:
In his directions, he said:

Open file private.php and find the first occurence of:

if (empty($recipients))
{
$pm['recipients'] = '';
}
else
{
$pm['recipients'] = implode('; ', $recipients);
}

Below that, add:


To do the more generic version, that should be:

Find:
// insert username(s) of specified recipients
if ($_REQUEST['userid'])

Above that add:


(Use his code.)

Then, in the postbit or postbit legacy templates, in addition to the edit he suggested,
Find:

<if condition="$show['reportlink']"><a href="report.php?$session[sessionurl]p=$post[postid]"> <img class="inlineimg" src="$stylevar[imgdir_button]/report.gif" alt="$vbphrase[report_bad_post]" border="0" /> </a> &nbsp;</if>
Add After:

<if condition="$show['pmlink']">
<a href="private.php?$session[sessionurl]do=newpm&amp;postid=$post[postid]&amp;userid="> <img class="inlineimg" src="$stylevar[imgdir_misc]/pmquote.gif" alt="Quote post in private message" border="0" /></a> </if>


I'm attaching the image that I used, which I put in the misc images directory

sv1cec
05-11-2005, 07:28 PM
Why don't you just delete the preselected recipient and add the recipients you want, to the PM form which will open?

You may even remove the part of the code which adds the "Re. your post in thread: this and that" and the "In your post, you wrote:" and have a more generic version.

amykhar
05-11-2005, 07:40 PM
True. That would work for me. But, sometimes users aren't that sophisticated.

sv1cec
05-11-2005, 08:05 PM
OK, here is the second version, which adds your functionality as well. The only thing it retains from the original post, is the quoted text.

If one uses the menu selection, all three fields get filled up as before.

Rgds

dsboyce8624
05-12-2005, 12:23 AM
Worked like a charm.

Thanks.

bigcurt
05-12-2005, 02:54 AM
Nice hack man! How do I add that admin cp edit user conditional in there?

sv1cec
05-12-2005, 03:42 AM
Nice hack man! How do I add that admin cp edit user conditional in there?
Easy, find this:


<if condition="$post['userid']">
<tr><td class="vbmenu_option"><a href="profile.php?$session[sessionurl]do=addlist&amp;userlist=buddy&amp;u=$post[userid]"><phrase 1="$post[username]">$vbphrase[add_x_to_buddy_list]</phrase></a></td></tr>


Add below:


<if condition="$bbuserinfo['usergroupid']=='6'">
<tr><td class="vbmenu_option"><span onmouseover="this.style.cursor='pointer';" onClick="window.open('admincp/user.php?do=edit&userid=$post[userid]','edit','width=1024,height=350,scrollbars=yes')"><b>AdminCP Edit $post[username]</b></span></td></tr>
</if>


Rgds

Adrian Schneider
05-12-2005, 04:46 AM
Nice hack, I could have used that alot in the past. :) It would be nice having that here for the service requests forum.

Adrian Schneider
05-12-2005, 04:58 AM
In your postbit template (or postbit_legacy).

dsboyce8624
05-12-2005, 05:09 AM
I found it.

Thanks though.

bigcurt
05-12-2005, 07:50 PM
Nice!, Thanks SV