vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 2.x Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=4)
-   -   Preview Private Message Before Sending (https://vborg.vbsupport.ru/showthread.php?t=32695)

bira 11-25-2001 10:00 PM

OK, I wrote this hack seeing as my users were nagging about it and I could not find one here (if there is one, I apologise - please give me the URL).

This works exactly like post preview:

http://www.atlasf1.com/personal/bira/privmsgpreview.gif

How to install:

Open private.php

1) First we need to move "newmessage" after "dosend". Highlight the entire section between:

Code:

    // ############################### start new message ###############################
Until (but not including):

Code:

    // ############################### start send message ###############################

Cut this entire section (a total of 83 lines in 2.2.1) and paste it right above:

Code:

    // ############################### start do stuff (move, etc) ###############################
2) Now we need to insert the following code:

a) Find:

Code:

    $savecopy=iif($savecopy=="yes",1,0);
Right under it insert:

Code:


    // preview hack
    $pmreceipt=iif($pmreceipt=="yes",1,0);
    // preview hack
   

b) Find:

Code:

    if ($pmquota>0 and $touserinfo[usergroupid] != 6 and $bbuserinfo[usergroupid] != 6) {
Right above it insert:

Code:


    // preview hack
    if ($preview) {
        $previewpost=1;
        $previewmessage=bbcodeparse($message,0,$allowsmilie);

        if ($signature) {
            $post['signature'] = bbcodeparse($bbuserinfo['signature'],0,$allowsmilie);
            eval("\$post[signature] = \"".gettemplate("postbit_signature")."\";");
            $previewmessage.=$post['signature'];
        }

        eval("\$postpreview=\"".gettemplate("priv_sendpreview")."\";");

        $parseurlchecked=iif($parseurl,"checked","");
        $pmreceiptchecked=iif($pmreceipt,"checked","");
        $savecopychecked=iif($savecopy,"checked","");
        $signaturechecked=iif($signature,"checked","");
        $previewchecked=0;
       
        $title = htmlspecialchars($title);
       
        $privatemessageid = $prevmessageid;
        $forward;               
        $subject = $title;
        $privmessage = $message;
        $action="newmessage";
    } else {
    // preview hack
   

c) Find:

Code:

    } #end dosend
Right above it insert:

Code:


    } // preview hack
   

d) Find:

Code:

    //show new message form
Right under it insert:

Code:


    // preview hack
    if (!$pagetext) {
        // parse message for html if previewing
        $message = htmlspecialchars($message); // Without this, a </textarea> in the message breaks the form on preview
    }
    // preview hack
   

e) Find:

Code:

    if ($bbuserinfo[userid]!=0 and !$previewpost and $bbuserinfo[signature]!="") {
        $signaturechecked="CHECKED";
    }

Right under it insert:

Code:


    // preview hack
    if (!isset($parseurl)) {
        $parseurlchecked="CHECKED";
    }

    if (!isset($savecopy)) {
        $savecopychecked="CHECKED";
    }
   
    if (!isset($pmreceipt)) { 
        $pmreceiptchecked="CHECKED";
    }
    // preview hack
   

f) Find:

Code:

    // /enhanced
    eval("dooutput(\"".gettemplate("priv_sendprivmsg")."\");");

Right above it insert:

Code:


    // preview hack
    if (!isset($privmessage)) {
        $privmessage = $message[message];
    }
    // preview hack
   


g) Find:

Code:

    // enhanced
  $receipt=iif($pmreceipt=="yes",1,0);
  // /enhanced

And replace it with (the code to remove is marked in red):

Code:

    // enhanced
  $receipt=iif($pmreceipt,1,0);
  // /enhanced


Save private.php and upload to server.


In the Administration control panel -> Templates

1) ADD template priv_sendpreview and insert to it:

Code:


    <br>

    <table cellpadding="0" cellspacing="0" border="0" bgcolor="#555576"  width="100%" align="center"><tr><td>
    <table cellpadding="4" cellspacing="1" border="0"  width="100%">
    <tr>
        <td bgcolor="#8080A6"><smallfont color="#EEEEFF"><b>Message Preview:</b></smallfont></td>
    </tr>
    <tr>
        <td bgcolor="#F1F1F1"><normalfont>$previewmessage</normalfont></td>
    </tr>
    </table>
    </td></tr></table>
   

(you may edit this to your liking).

2) Open template priv_sendprivmsg

a) place $postpreview where you want the message preview to appear (normally would be under $cpnav).

b) Find:

Code:

    <textarea name="message" rows="20" cols="$textareacols" wrap="virtual" tabindex="3">$message[message]</textarea>
And replace it with (change marked in red):

Code:

    <textarea name="message" rows="20" cols="$textareacols" wrap="virtual" tabindex="3"> $privmessage</textarea>
c) Find:

Code:

    <input type="checkbox" name="parseurl" value="yes" checked>
And replace it with (change marked in red):

Code:

    <input type="checkbox" name="parseurl" value="yes" $parseurlchecked>
d) Find:

Code:

    <input type="checkbox" name="savecopy" value="yes" checked>
And replace it with (change marked in red):

Code:

    <input type="checkbox" name="savecopy" value="yes" $savecopychecked>
e) Find:

Code:

    <input type="submit" class="bginput" name="submit" value="Send Message" accesskey="s" tabindex="4">
And replace it with (change marked in red):

Code:

    <input type="submit" class="bginput" name="submit" value="Send Message" accesskey="s" tabindex="4">
    <input type="submit" class="bginput" name="preview" value="Preview Message" accesskey="p" tabindex="4">


3) Open template priv_requestreceipt

Find:

Code:

    <input type="checkbox" name="pmreceipt" value="yes" checked>
And replace it with (change marked in red):

Code:

    <input type="checkbox" name="pmreceipt" value="yes" $pmreceiptchecked>
That's it!

Comments and additions welcome.

Cheers,

Bira

bira 11-26-2001 02:39 AM

Sorry, forgot to attack the instructions in a txt file as well (the same instructions as posted above).

JJR512 11-26-2001 02:55 AM

bira, in the attached text file, you left a [/code] in. :o

It's in this part:
PHP Code:

Right under it insert:

    
// preview hack
    
if (!isset($parseurl)) {
        
$parseurlchecked="CHECKED";
    }

    if (!isset(
$savecopy)) {
        
$savecopychecked="CHECKED";
    }
    
    if (!isset(
$pmreceipt)) {   
        
$pmreceiptchecked="CHECKED";
    }
    
// preview hack
    
[/code


bira 11-26-2001 02:59 AM

:o

fixed, thanks

bira 11-26-2001 03:12 AM

Not that I think anyone managed to install this hack so fast, but just in case - I made the following change to the above hack installation instructions:


In the private.php:

Quote:

f) Find:

Code:

    // /enhanced
    eval("dooutput(\"".gettemplate("priv_sendprivmsg")."\");");

Right above it insert:

Code:


    // preview hack
    if (!isset($privmessage)) {
        $privmessage = $message[message];
    }
    // preview hack
   


And, in editing template priv_sendprivmsg please remove $message[message] from the textarea code.

JJR512 11-26-2001 03:21 AM

[QUOTE]Originally posted by bira
Not that I think anyone managed to install this hack so fast, but just in case...

bira 11-26-2001 03:24 AM

Thanks :)

bira 11-27-2001 03:45 PM

If you haven't installed the hack, ignore this message -- the installation instructions in the first thread and the downloadable attachment txt file have been modified.


I've had a bug on my BB after installing this hack, so if anyone who installed this hack experiences the same problem, here's the fix:

Problem: even if you select the option to "request read receipt", the PM doesn't appear in the message tracking page.

Fix: in private.php find:

Code:

  // enhanced
  $receipt=iif($pmreceipt=="yes",1,0);
  // /enhanced

And replace with:

Code:

  // enhanced
  $receipt=iif($pmreceipt,1,0);
  // /enhanced

(the part removed is coloured in red in the original code).

JJR512 11-27-2001 03:55 PM

After reading your message, I tested, and found I had the same problem. Your fix works fine. But I have to wonder, since it looks like this isn't part of your hack code, but rather part of the original code...does this fix have any other side effects?

bira 11-27-2001 04:51 PM

JJR512 it shouldn't.

There is no difference as far as the private.php script goes between $pmreceipt=="yes" and just $pmreceipt not NULL.

For some reason, the preview hack alters the "yes". But it's still either NULL (empty) or not (has value).

So, the original code does:

Code:

if ($pmreceipt=="yes") {
  return 1;
} else {
  return 0;
}

My fix does:

Code:

if ($pmrecepit) { //does $pmreceipt have a value?
  return 1;
} else {
  return 0;
}

Hope I;m clear :)

Cheers,

Bira

bira 11-27-2001 05:00 PM

A-ha!!!!

Silly me, I found the culprit :blush:

In the hack details, I have the following code added:

Code:

    // preview hack
    $pmreceipt=iif($pmreceipt=="yes",1,0);
    // preview hack

This alters $pmreceipt's value from "yes" to "1" (which for this matter is the same thing.)

In any event, doing this fix will NOT harm your script.

JJR512 11-27-2001 05:10 PM

OK, I think it makes sense. :)

BTW, I just noticed that the name of this hack doesn't really suit what it does..."Preview Sent Private Message"...you haven't really sent the message yet, when you preview it. ;)

bira 11-27-2001 05:21 PM

yeah, it should have been 'Preview Private Message before Sending' -- but I can't change it :/

bira 11-27-2001 06:05 PM

If you haven't installed the hack, ignore this message -- the installation instructions in the first thread and the downloadable attachment txt file have been modified.


ok, found - and corrected - another bug.

Problem: if you are replying to a PM or forwarding it, the icon in the folder for that PM does not change from a regular "read PM" to a "replied to PM" or a "forwarded PM".

The reason is that if you preview a message, the values for "privatemessageid" and "forward" -- hidden fields in the form -- are not stored.

For this, we have to redclare them in the 'preview' part of the hack.

If you already installed this hack, find in private.php:

Code:

$subject = $title;
And add below or above it:

Code:

$privatemessageid = $prevmessageid;
$forward;


Admin 11-28-2001 03:00 PM

Love it, installed here. :D

Thanks. :)

bira 11-28-2001 03:06 PM

wow, thanks :)

Admin 11-28-2001 03:11 PM

Thank you. :)

One problem though, with this code:
Code:

$privatemessageid = $prevmessageid;
$forward;

If I'm not replying to a message or forwarding one, whenever I try to preview I get the error_noid message.

So I had to remove that bit for now, let us when you get a fix. :)

(and sorry about my test message :D)

bira 11-28-2001 03:27 PM

FireFly, you shouldn't remove it. I'll explain:

In the send new pm form, there are two hidden fields (original code):

Code:

<input type="hidden" name="prevmessageid" value="$privatemessageid">
<input type="hidden" name="forward" value="$forward">

These determine the behaviour of your icons in the PM folder:

if $privatemessageid has a value, then it means you are now replying to or forwarding a message. If it doesn't have a value, it means you are writing a new message.

if $privatemessageid has a value and $forward=1, it means you are forwarding a message and not replying.

These then determine which icon will be displayed in your inbox next to that message.

Now, when you click on "Reply" for a message, these values are filled.

When you hit "Preview", these values are lost.

So we need to "reinstate" them.

That's what these two lines are for:

Code:

$privatemessageid = $prevmessageid;
$forward;

From what you are telling me, I can only assume you have high error reporting set in php.ini.

For the vast majority of the people, that error won't show up because they are not in development environment with high error reporting, and functionality is not tampered.

However, if you want to be "holier than the pope" so to speak, do this instead:

PHP Code:

if ($prevmessageid) {
       
$privatemessageid $prevmessageid;
}

$forward iif($forward,1,0); 

I think this should work. Try it out and let me know :)

Cheers,

Bira

Admin 11-28-2001 03:33 PM

[QUOTE]Originally posted by bira
From what you are telling me, I can only assume you have high error reporting set in php.ini.

Wayne Luke 12-10-2001 04:11 AM

OKay.. I have installed this as well and come across another pecularity.

If you look in private.php in the "New Message" section there is this line:
PHP Code:

  if (isset($privatemessageid)) { 

Well what this does is start a check to make sure the previous message actually exists. On my version and installation of PHP even though it was set to '0' this was returning true. I had to change the line to the following to prevent a "Invalid Message Error".

PHP Code:

  if (isset($privatemessageid) and $privatemessageid!=0) { 

With that it works great. I recommend that if the error doesn't occur then use Bira's original code. If it does then make this modification.

bira 12-10-2001 04:13 AM

Thanks wluke, good to know

FWC 12-10-2001 05:16 AM

[QUOTE]Originally posted by bira
However, if you want to be "holier than the pope" so to speak, do this instead:

PHP Code:

if ($prevmessageid) {
       
$privatemessageid $prevmessageid;
}

$forward iif($forward,1,0); 

I think this should work. Try it out and let me know :)

Cheers,

Bira

LuBi 12-12-2001 04:18 AM

Ok I press preview, and the page refreshes with nothing but a new blank priv message...

help!? :(

bira 12-12-2001 11:31 AM

LuBi, follow the instructions again and see what you missed out or did wrong

LuBi 12-12-2001 03:53 PM

From what I can see I have installed everything correctly, my only problem was that copy and paste part but the problem was no with what I did but that it was interesting ;) anyhow.. now my only worry is when I pree preview it's more like a refresh button and the page comes back blank, exactly what happened before so nothing has changed. I have this hack installed with the jscript hack similar to what firefly runs on here.. but for some reason my preview doesn't work...

LuBi 12-13-2001 03:30 PM

<<help>>

bira 12-13-2001 03:40 PM

LuBi, I honestly don't know how to help you.

If you installed the hack exactly as the instructions say then you shouldn't have any problem.

Your problem, from what you are describing, is that the action 'preview' is either not present in private.php, or misconfigured. If the page simply refreshes, it means it doesn't know what to "do" with 'preview'. That means you installed the hack wrongly.

LuBi 12-13-2001 03:53 PM

Ok well that was funny I missed $postpreview 5 times. Now my problem wil be getting this hack to work with the javascript hack. I think I just need to change this $privmessage for $message[message] and I'll be so fresh so clean. THANKS! :D

*Edit - Works now with the javascript hack, my mistake $privmessage had an extra e i.e. $privmessagee Thanks Again!

Lionel 12-24-2001 12:50 AM

I tried installing twice. and this is what I get printed on screen above my headers

(part of my VB title) Private Messaging - Send Message

then I get the screen to send PM

and underneath it printed on the screen

HTTP/1.1 200 OK Date: Mon, 24 Dec 2001 04:29:14 GMT Server: Apache/1.3.19 (Unix) PHP/4.0.5 mod_ssl/2.8.2 OpenSSL/0.9.6 X-Powered-By: PHP/4.0.5 Content-Length: 5331 Keep-Alive: timeout=15, max=97 Connection: Keep-Alive Content-Type: text/html

and then the vbulletin error message no private message specified...

???

Lionel 12-24-2001 01:14 AM

Stupid me instead of cutting and pasting I did a copy and paste... However I cannot preview. I still am getting the no message specified error....

I applied wluke's fix

if (isset($privatemessageid) and $privatemessageid!=0) {

and it is working now.

Thanks for the hack Bira.

Tommy Boy 01-02-2002 08:45 PM

Woah! That's what I call a HACK! Many thanks *again* bira! :D

Now could you make a preview when editing posts? ;)

Lucky 01-03-2002 11:09 AM

Liking this hack! Thanks:)


One thing though.

How can I modify the preview so that the text will use up more than what it is using now. I am only using 1/3 of the potential screen I could be using.

Any ideas?

Lionel 01-17-2002 01:47 AM

Bira I have a small problem with that hack:

when I do:priv_sendprivmsg

$message[message]

And replace it with:

$privmessage

that does not include the quotes when I reply.

When I do: $message[message] $privmessage

that include the quotes but in the new text box if you want to preview, it displays it twice.

How can I fix?

never mind... I was missing a line in private php

if (!isset($privmessage)) {
$privmessage = $message[message];
}

Tommy Boy 01-17-2002 06:03 PM

Just wanted to note that you seem to loose the subject when you preview a private message.

tkeil69575 02-06-2002 06:42 PM

hi bira,
ich just installed it and its working fine exept in the preview the formating is not taken over (ie. [quote] ist icons etc. are not converted). Any Idea what i might have done wrong - ive gone over the code serveral times and cant find the cause. Maybe it has something to do with my templates?

regards tina

Lucky 02-08-2002 12:47 PM

Works great in 2.2.2

Thanks

orozery 02-25-2002 06:13 PM

Great hack!

chrissysdaddy 04-21-2002 04:06 PM

Great Hack Man! Keep up the good work.

julius 05-02-2002 06:32 AM

Great Hack Bira! :)

I had to use the Wluke modification and it works fine, but when I click preview, selected icon is not selected anymore and smilies are not converted.

julius 05-04-2002 12:54 PM

Bira, I tried on another server and smilies are converted in preview. What could it be that on one server they are converted and on other are not? (on post preview I have non similiar problem)


All times are GMT. The time now is 11:04 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01745 seconds
  • Memory Usage 1,867KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (40)bbcode_code_printable
  • (5)bbcode_php_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (40)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete