[RC1] reCAPTCHA Guest Post MOD

A place for MOD Authors to post and receive feedback on MODs still in development. No MODs within this forum should be used within a live environment! No new topics are allowed in this forum.
Forum rules
READ: phpBB.com Board-Wide Rules and Regulations

IMPORTANT: MOD Development Forum rules

On February 1, 2009 this forum will be set to read only as part of retiring of phpBB2.

[RC1] reCAPTCHA Guest Post MOD

Postby REAgentForeclosures » Wed Oct 31, 2007 1:29 am

MOD Title: reCAPTCHA - Guest Post MOD
MOD Description: This MOD adds reCAPTCHA visual confirmation for guest posts, eliminating spam.
MOD Version: v1.0.0

Based upon Visual Confirmation For Guests MOD (v2.0.12)
Also Based upon reCAPTCHA MOD

DIY Instructions
Code: Select all
***DO THIS PRIOR TO INSTALL***
You will need to obtain reCAPTCHA API keys (http://recaptcha.net/api/getkey)
and place the API keys in the required fields below on lines 83 & 84:
$recaptcha_public_key = '';  // You need to put your public key here
$recaptcha_private_key = ''; // You need to put your private key here
***DO THIS PRIOR TO INSTALL***


Screenshot:
Image (click to view larger)

Demonstration: http://recaptcha.net/learnmore.html

View/Download:
http://www.ChrisRutter.com/phpBB/GP/reC ... stPost.zip

Files Included:
Revision History:
Code: Select all
## MOD History:
##   2007-10-30 - Version 1.0.0


Comments:
I tested this in EasyMOD v0.3.0, and it worked flawlessly.
I must say however this is only my 2nd MOD creation, so take it easy on me if it doesn't work for you. :P

I believe this MOD will do wonders in stopping SPAM-BOT's right in their tracks. It uses the reCAPTCHA API to create a very difficult CAPTCHA verification for SPAM-BOT's to break. While at the same time helps the world by "Digitizing Books One Word at a Time".

Not only do you have image verification but reCAPTCHA also provides an audio challenge for the visually impaired.

Ok, it's ready for prime time... I've done my testing, and I've submitted it to the MOD-DB, and if all goes well, it should be "officially approved" soon.

Good-Luck getting by this one SPAM-BOTs :lol:

Let me know what you think: any/all feedback will be much appreciated

Getting Support for this MOD
  1. Ask any questions relating to this MOD directly in this topic; please don't PM me.
  2. If you receive an error, please post the error.
  3. If the error points to a specific line in a file, please post the code on that line with around 10 lines on either side of it (if the error is on line 30, post lines 20-40).
  4. If you post code, please use the [code] bbcode tags.
Last edited by REAgentForeclosures on Thu Nov 01, 2007 9:48 pm, edited 3 times in total.
- reCAPTCHA MOD - Replace phpBB's CAPTCHA with the much better reCAPTCHA
- reCAPTCHA Guest Post MOD - Adds reCAPTCHA to guest posts, eliminating spam

SPAM Registrations and/or Posts since installation of the above mods: 0
How secure is reCAPTCHA? VERY ;)
reCAPTCHA = "Digitizing Books One Word at a Time"
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Re: reCAPTCHA Guest Post MOD

Postby battye » Wed Oct 31, 2007 8:24 am

Hello,

Please edit your topic title with a prefix as outlined in Modifications Development Forum Rules, section 3.a. This will allow people to see the development status of your modification at a glance.

Thank you,
The phpBB Modifications Team
User avatar
battye
MOD Team Member
MOD Team Member
 
Posts: 9740
Joined: Wed Feb 11, 2004 11:02 am
Location: Australia

Re: reCAPTCHA Guest Post MOD

Postby REAgentForeclosures » Wed Oct 31, 2007 1:40 pm

battye wrote:Hello,

Please edit your topic title with a prefix as outlined in Modifications Development Forum Rules, section 3.a. This will allow people to see the development status of your modification at a glance.

Thank you,
The phpBB Modifications Team

Fixed ;)
Last edited by REAgentForeclosures on Mon Nov 19, 2007 4:58 am, edited 1 time in total.
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby REAgentForeclosures » Mon Nov 19, 2007 4:55 am

This mod is now posted on the official reCAPTCHA website:
We recommend that you use the reCAPTCHA phpBB MOD to install reCAPTCHA. There are two mods available, one for registration and one for guest posts.

:D
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby MrJacky » Sat Nov 24, 2007 6:21 am

I was browsing the Visual Confirmation For Guests MOD when I thought of using reCAPTCHA instead of the standard phpBB CAPTCHA. Then I noticed your post.

reCAPTCHA would be better since the standard phpBB CAPTCHA is cracked by most spam bots.

You might want to suggest this MOD to the preventing spam guide here.
MrJacky
Registered User
 
Posts: 17
Joined: Tue Jun 05, 2007 10:43 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby REAgentForeclosures » Sat Nov 24, 2007 6:39 am

MrJacky wrote:I was browsing the Visual Confirmation For Guests MOD when I thought of using reCAPTCHA instead of the standard phpBB CAPTCHA. Then I noticed your post.

reCAPTCHA would be better since the standard phpBB CAPTCHA is cracked by most spam bots.

You might want to suggest this MOD to the preventing spam guide here.

Thanks for the support. :D
You might also want to check out the other reCAPTCHA mod which will STOP spambot registrations.
Please keep me posted on how you like the mod(s) and your experiences. I still have yet to have had a Guest Post or a Registration by any bots since I've installed these mods :)
Also feel free to ask if you have any issues installing, it's pretty easy thou, especially if your using EasyMOD. ;)

I've already posted a message on that thread about these reCAPTCHA mods, and I PM'ed the OP (Marshalrusty) about it, but I have yet to hear back from him.
- reCAPTCHA MOD - Replace phpBB's CAPTCHA with the much better reCAPTCHA
- reCAPTCHA Guest Post MOD - Adds reCAPTCHA to guest posts, eliminating spam

SPAM Registrations and/or Posts since installation of the above mods: 0
How secure is reCAPTCHA? VERY ;)
reCAPTCHA = "Digitizing Books One Word at a Time"
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Mod Validation

Postby REAgentForeclosures » Wed Dec 12, 2007 8:21 pm

As you know I submitted this MOD to be entered into the official MOD DB, and attached is the reply I got after a couple of weeks...
MOD Robot wrote:Hello,

As you may know, all modifications submitted to the phpBB modification database must be validated and approved by members of the phpBB Team.

Upon validating your modification, the phpBB MOD Team regrets to inform you that we have had to deny your modification.

To correct the problem(s) with your modification, please following the below instructions:
  1. Make the necessary changes to correct any problems (listed below) that resulted in your modification being denied.
  2. Increase your version number. (See MODifications documentation about version numbering for help.)
  3. Re-upload your MOD to our modifications database.
Please ensure you tested your modification on the latest version of phpBB (see the Downloads page) before you re-submit your modification.

Before you resubmit your modification, please check the syntax of your .MOD file via our MOD Syntax Validator to ensure your MOD is using the correct MOD Template syntax (phpBB 2.0.x modifications only).

Here is a report on why your modification was denied:
TerraFrost wrote:(this post is pretty much a carbon copy of reCAPTCHA MOD by the same MOD Author)
Code: Select all
## MOD Author: REAgentForeclosures <REAgentForeclosures@phpbb.com> (Chris Rutter) http://www.ChrisRutter.com/phpBB/

Should read more like this:

Code: Select all
## MOD Author: REAgentForeclosures < N/A > (Chris Rutter) http://www.ChrisRutter.com/phpBB/

Note the spaces before and after the > and <, respectively. Also, since I don't think you have a *@phpbb.com email address, you should use N/A.

(from recaptchalib.php)
Code: Select all
   if ($privkey == null || $privkey == '') {
      die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");
   }

   if ($remoteip == null || $remoteip == '') {
      die ("For security reasons, you must pass the remote ip to reCAPTCHA");
   }

phpBB Modifications are required to be translatable. Though you may not have wrote this file, you'll need to update it to accomodate our requirements, none-the-less.

You could maybe have the function return some sort of error code that the calling code uses to look up a language key as defined in lang_main.php.

Code: Select all
   return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .
      "' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);

More hard-coded language.

It'd also be nice if the API keys could be set via the ACP, but whatever - it's not all that important.



Please refer to the following links before you reupload your modification:
For further reading, you may want to review the following:

For help with writing phpBB MODs, the following resources exists:

If you feel this denial was not warranted, you can contact the MOD Team Leader, wGEric. If you wish to discuss anything in this PM please contact: Paul

Thank you,
phpBB MOD Team


So this is a bit discouraging, I have alot of work ahead of me, and little time to make these corrections, so I wanted to reach out to the community to see if someone could help me pickup where I left off and help me complete this mod 100%...

So is there anyone willing to work on this MOD with me?
Thanks,
-Chris
- reCAPTCHA MOD - Replace phpBB's CAPTCHA with the much better reCAPTCHA
- reCAPTCHA Guest Post MOD - Adds reCAPTCHA to guest posts, eliminating spam

SPAM Registrations and/or Posts since installation of the above mods: 0
How secure is reCAPTCHA? VERY ;)
reCAPTCHA = "Digitizing Books One Word at a Time"
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby Emberpyro » Tue Jan 22, 2008 12:19 pm

I get the notification "To use reCAPTCHA you must get an API key from http://recaptcha.net/api/getkey" if I try and post using a guest account having installed this mod. I did get the keys and put them both in the mod before I installed it, any ideas? :S
Emberpyro
Registered User
 
Posts: 13
Joined: Wed Nov 08, 2006 6:27 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby vipholidays » Tue Jan 22, 2008 11:56 pm

Is it possible to install without uninstalling Visual Confirmation For Guests MOD (v2.0.12) because you say that it is based on it? Or people that use Visual Confirmation For Guests MOD need first uninstall that mod?
vipholidays
Registered User
 
Posts: 6
Joined: Tue Jan 22, 2008 11:13 pm
Location: Villasinparadise.co.uk

Re: [RC1] reCAPTCHA Guest Post MOD

Postby REAgentForeclosures » Thu Jan 24, 2008 7:36 pm

Emberpyro wrote:I get the notification "To use reCAPTCHA you must get an API key from http://recaptcha.net/api/getkey" if I try and post using a guest account having installed this mod. I did get the keys and put them both in the mod before I installed it, any ideas? :S

Please post the contents of the following two files here:
  • posting.php
  • templates/subSilver/posting_body.tpl
Remember to use the "[code][/code]" tags when posting.
vipholidays wrote:Is it possible to install without uninstalling Visual Confirmation For Guests MOD (v2.0.12) because you say that it is based on it? Or people that use Visual Confirmation For Guests MOD need first uninstall that mod?

I've never tried installing this mod with Visual Confirmation For Guests MOD (v2.0.12) being also installed at the same time, so I don't know what will happen... my recommendation is to uninstall Visual Confirmation For Guests MOD (v2.0.12) prior to installing this mod.
- reCAPTCHA MOD - Replace phpBB's CAPTCHA with the much better reCAPTCHA
- reCAPTCHA Guest Post MOD - Adds reCAPTCHA to guest posts, eliminating spam

SPAM Registrations and/or Posts since installation of the above mods: 0
How secure is reCAPTCHA? VERY ;)
reCAPTCHA = "Digitizing Books One Word at a Time"
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby Emberpyro » Tue Jan 29, 2008 11:11 am

Here's my posting_body.tpl

Code: Select all
<script language="JavaScript" type="text/javascript">
<!--
// bbCode control by
// subBlue design
// www.subBlue.com

// Startup variables
var imageTag = false;
var theSelection = false;

// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);

// Helpline messages
b_help = "{L_BBCODE_B_HELP}";
i_help = "{L_BBCODE_I_HELP}";
// MODIFICATION, ItemStat http://itemstats.free.fr === by Yahourt / Thorkal == EU Elune / Horde =========
j_help = "Wow item name (Alt + j)";
k_help = "Wow item icon (Alt + k)";
//=======================================================================================================
u_help = "{L_BBCODE_U_HELP}";
q_help = "{L_BBCODE_Q_HELP}";
c_help = "{L_BBCODE_C_HELP}";
l_help = "{L_BBCODE_L_HELP}";
o_help = "{L_BBCODE_O_HELP}";
p_help = "{L_BBCODE_P_HELP}";
w_help = "{L_BBCODE_W_HELP}";
a_help = "{L_BBCODE_A_HELP}";
s_help = "{L_BBCODE_S_HELP}";
f_help = "{L_BBCODE_F_HELP}";

// Define the bbCode tags
bbcode = new Array();

// MODIFICATION, ItemStat http://itemstats.free.fr === by Yahourt / Thorkal == EU Elune / Horde =========
//bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]');
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]', '[item]', '[/item]', '[itemico]', '[/itemico]');
//=======================================================================================================

imageTag = false;

// Shows the help messages in the helpline window
function helpline(help) {
   document.post.helpbox.value = eval(help + "_help");
}


// Replacement for arrayname.length property
function getarraysize(thearray) {
   for (i = 0; i < thearray.length; i++) {
      if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
         return i;
      }
   return thearray.length;
}

// Replacement for arrayname.push(value) not implemented in IE until version 5.5
// Appends element to the array
function arraypush(thearray,value) {
   thearray[ getarraysize(thearray) ] = value;
}

// Replacement for arrayname.pop() not implemented in IE until version 5.5
// Removes and returns the last element of an array
function arraypop(thearray) {
   thearraysize = getarraysize(thearray);
   retval = thearray[thearraysize - 1];
   delete thearray[thearraysize - 1];
   return retval;
}


function checkForm() {

   formErrors = false;   

   if (document.post.message.value.length < 2) {
      formErrors = "{L_EMPTY_MESSAGE}";
   }

   if (formErrors) {
      alert(formErrors);
      return false;
   } else {
      bbstyle(-1);
      //formObj.preview.disabled = true;
      //formObj.submit.disabled = true;
      return true;
   }
}

function emoticon(text) {
   var txtarea = document.post.message;
   text = ' ' + text + ' ';
   if (txtarea.createTextRange && txtarea.caretPos) {
      var caretPos = txtarea.caretPos;
      caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
      txtarea.focus();
   } else {
      txtarea.value  += text;
      txtarea.focus();
   }
}

function bbfontstyle(bbopen, bbclose) {
   var txtarea = document.post.message;

   if ((clientVer >= 4) && is_ie && is_win) {
      theSelection = document.selection.createRange().text;
      if (!theSelection) {
         txtarea.value += bbopen + bbclose;
         txtarea.focus();
         return;
      }
      document.selection.createRange().text = bbopen + theSelection + bbclose;
      txtarea.focus();
      return;
   }
   else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
   {
      mozWrap(txtarea, bbopen, bbclose);
      return;
   }
   else
   {
      txtarea.value += bbopen + bbclose;
      txtarea.focus();
   }
   storeCaret(txtarea);
}


function bbstyle(bbnumber) {
   var txtarea = document.post.message;

   txtarea.focus();
   donotinsert = false;
   theSelection = false;
   bblast = 0;

   if (bbnumber == -1) { // Close all open tags & default button names
      while (bbcode[0]) {
         butnumber = arraypop(bbcode) - 1;
         txtarea.value += bbtags[butnumber + 1];
         buttext = eval('document.post.addbbcode' + butnumber + '.value');
         eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
      }
      imageTag = false; // All tags are closed including image tags :D
      txtarea.focus();
      return;
   }

   if ((clientVer >= 4) && is_ie && is_win)
   {
      theSelection = document.selection.createRange().text; // Get text selection
      if (theSelection) {
         // Add tags around selection
         document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
         txtarea.focus();
         theSelection = '';
         return;
      }
   }
   else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
   {
      mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
      return;
   }
   
   // Find last occurance of an open tag the same as the one just clicked
   for (i = 0; i < bbcode.length; i++) {
      if (bbcode[i] == bbnumber+1) {
         bblast = i;
         donotinsert = true;
      }
   }

   if (donotinsert) {      // Close all open tags up to the one just clicked & default button names
      while (bbcode[bblast]) {
            butnumber = arraypop(bbcode) - 1;
            txtarea.value += bbtags[butnumber + 1];
            buttext = eval('document.post.addbbcode' + butnumber + '.value');
            eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
            imageTag = false;
         }
         txtarea.focus();
         return;
   } else { // Open tags
   
      if (imageTag && (bbnumber != 14)) {      // Close image tag before adding another
         txtarea.value += bbtags[15];
         lastValue = arraypop(bbcode) - 1;   // Remove the close image tag from the list
         document.post.addbbcode14.value = "Img";   // Return button back to normal state
         imageTag = false;
      }
      
      // Open tag
      txtarea.value += bbtags[bbnumber];
      if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
      arraypush(bbcode,bbnumber+1);
      eval('document.post.addbbcode'+bbnumber+'.value += "*"');
      txtarea.focus();
      return;
   }
   storeCaret(txtarea);
}

// From http://www.massless.org/mozedit/
function mozWrap(txtarea, open, close)
{
   var selLength = txtarea.textLength;
   var selStart = txtarea.selectionStart;
   var selEnd = txtarea.selectionEnd;
   if (selEnd == 1 || selEnd == 2)
      selEnd = selLength;

   var s1 = (txtarea.value).substring(0,selStart);
   var s2 = (txtarea.value).substring(selStart, selEnd)
   var s3 = (txtarea.value).substring(selEnd, selLength);
   txtarea.value = s1 + open + s2 + close + s3;
   return;
}

// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
function storeCaret(textEl) {
   if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

//-->
</script>

<!-- BEGIN privmsg_extensions -->
<table border="0" cellspacing="0" cellpadding="0" align="center" width="100%">
  <tr>
   <td valign="top" align="center" width="100%">
     <table height="40" cellspacing="2" cellpadding="2" border="0">
      <tr valign="middle">
        <td>{INBOX_IMG}</td>
        <td><span class="cattitle">{INBOX_LINK}&nbsp;&nbsp;</span></td>
        <td>{SENTBOX_IMG}</td>
        <td><span class="cattitle">{SENTBOX_LINK}&nbsp;&nbsp;</span></td>
        <td>{OUTBOX_IMG}</td>
        <td><span class="cattitle">{OUTBOX_LINK}&nbsp;&nbsp;</span></td>
        <td>{SAVEBOX_IMG}</td>
        <td><span class="cattitle">{SAVEBOX_LINK}&nbsp;&nbsp;</span></td>
      </tr>
     </table>
   </td>
  </tr>
</table>

<br clear="all" />
<!-- END privmsg_extensions -->

<form action="{S_POST_ACTION}" method="post" name="post" onsubmit="return checkForm(this)">

{POST_PREVIEW_BOX}
{ERROR_BOX}

<table width="100%" cellspacing="2" cellpadding="2" border="0" align="center">
   <tr>
      <td align="left"><span  class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a>
      <!-- BEGIN switch_not_privmsg -->
      -> <a href="{U_VIEW_FORUM}" class="nav">{FORUM_NAME}</a></span></td>
      <!-- END switch_not_privmsg -->
   </tr>
</table>

<table border="0" cellpadding="3" cellspacing="1" width="100%" class="forumline">
   <tr>
      <th class="thHead" colspan="2" height="25"><b>{L_POST_A}</b></th>
   </tr>
   <!-- BEGIN switch_username_select -->
   <tr>
      <td class="row1"><span class="gen"><b>{L_USERNAME}</b></span></td>
      <td class="row2"><span class="genmed"><input type="text" class="post" tabindex="1" name="username" size="25" maxlength="25" value="{USERNAME}" /></span></td>
   </tr>
   <!-- END switch_username_select -->
   <!-- BEGIN switch_privmsg -->
   <tr>
      <td class="row1"><span class="gen"><b>{L_USERNAME}</b></span></td>
      <td class="row2"><span class="genmed"><input type="text"  class="post" name="username" maxlength="25" size="25" tabindex="1" value="{USERNAME}" />&nbsp;<input type="submit" name="usersubmit" value="{L_FIND_USERNAME}" class="liteoption" onClick="window.open('{U_SEARCH_USER}', '_phpbbsearch', 'HEIGHT=250,resizable=yes,WIDTH=400');return false;" /></span></td>
   </tr>
   <!-- END switch_privmsg -->
   <tr>
     <td class="row1" width="22%"><span class="gen"><b>{L_SUBJECT}</b></span></td>
     <td class="row2" width="78%"> <span class="gen">
      <input type="text" name="subject" size="45" maxlength="60" style="width:450px" tabindex="2" class="post" value="{SUBJECT}" />
      </span> </td>
   </tr>
   <tr>
     <td class="row1" valign="top">
      <table width="100%" border="0" cellspacing="0" cellpadding="1">
        <tr>
         <td><span class="gen"><b>{L_MESSAGE_BODY}</b></span> </td>
        </tr>
        <tr>
         <td valign="middle" align="center"> <br />
           <table width="100" border="0" cellspacing="0" cellpadding="5">
            <tr align="center">
              <td colspan="{S_SMILIES_COLSPAN}" class="gensmall"><b>{L_EMOTICONS}</b></td>
            </tr>
            <!-- BEGIN smilies_row -->
            <tr align="center" valign="middle">
              <!-- BEGIN smilies_col -->
              <td><a href="javascript:emoticon('{smilies_row.smilies_col.SMILEY_CODE}')"><img src="{smilies_row.smilies_col.SMILEY_IMG}" border="0" alt="{smilies_row.smilies_col.SMILEY_DESC}" title="{smilies_row.smilies_col.SMILEY_DESC}" /></a></td>
              <!-- END smilies_col -->
            </tr>
            <!-- END smilies_row -->
            <!-- BEGIN switch_smilies_extra -->
            <tr align="center">
              <td colspan="{S_SMILIES_COLSPAN}"><span  class="nav"><a href="{U_MORE_SMILIES}" onclick="window.open('{U_MORE_SMILIES}', '_phpbbsmilies', 'HEIGHT=300,resizable=yes,scrollbars=yes,WIDTH=250');return false;" target="_phpbbsmilies" class="nav">{L_MORE_SMILIES}</a></span></td>
            </tr>
            <!-- END switch_smilies_extra -->
           </table>
         </td>
        </tr>
      </table>
     </td>
     <td class="row2" valign="top"><span class="gen"> <span class="genmed"> </span>
      <table width="450" border="0" cellspacing="0" cellpadding="2">
        <tr align="center" valign="middle">
         <td><span class="genmed">
           <input type="button" class="button" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold; width: 30px" onClick="bbstyle(0)" onMouseOver="helpline('b')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="i" name="addbbcode2" value=" i " style="font-style:italic; width: 30px" onClick="bbstyle(2)" onMouseOver="helpline('i')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onClick="bbstyle(4)" onMouseOver="helpline('u')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="q" name="addbbcode6" value="Quote" style="width: 50px" onClick="bbstyle(6)" onMouseOver="helpline('q')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="c" name="addbbcode8" value="Code" style="width: 40px" onClick="bbstyle(8)" onMouseOver="helpline('c')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="l" name="addbbcode10" value="List" style="width: 40px" onClick="bbstyle(10)" onMouseOver="helpline('l')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="o" name="addbbcode12" value="List=" style="width: 40px" onClick="bbstyle(12)" onMouseOver="helpline('o')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="p" name="addbbcode14" value="Img" style="width: 40px"  onClick="bbstyle(14)" onMouseOver="helpline('p')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="w" name="addbbcode16" value="URL" style="text-decoration: underline; width: 40px" onClick="bbstyle(16)" onMouseOver="helpline('w')" />
           </span></td>
<!-- MODIFICATION, ItemStat http://itemstats.free.fr === by Yahourt / Thorkal == EU Elune / Horde ========= -->
         <td><span class="genmed">
           <input type="button" class="button" accesskey="j" name="addbbcode18" value="Item" style="text-decoration: underline; width: 40px" onClick="bbstyle(18)" onMouseOver="helpline('j')" />
           </span></td>
         <td><span class="genmed">
           <input type="button" class="button" accesskey="k" name="addbbcode20" value="Itemico" style="text-decoration: underline; width: 55px" onClick="bbstyle(20)" onMouseOver="helpline('k')" />
           </span></td>
<!-- ======================================================================================================= -->
        </tr>
        <tr>
         <td colspan="9">
           <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td><span class="genmed"> &nbsp;{L_FONT_COLOR}:
               <select name="addbbcode18" onChange="bbfontstyle('[color=' + this.form.addbbcode18.options[this.form.addbbcode18.selectedIndex].value + ']', '[/color]');this.selectedIndex=0;" onMouseOver="helpline('s')">
                 <option style="color:black; background-color: {T_TD_COLOR1}" value="{T_FONTCOLOR1}" class="genmed">{L_COLOR_DEFAULT}</option>
                 <option style="color:darkred; background-color: {T_TD_COLOR1}" value="darkred" class="genmed">{L_COLOR_DARK_RED}</option>
                 <option style="color:red; background-color: {T_TD_COLOR1}" value="red" class="genmed">{L_COLOR_RED}</option>
                 <option style="color:orange; background-color: {T_TD_COLOR1}" value="orange" class="genmed">{L_COLOR_ORANGE}</option>
                 <option style="color:brown; background-color: {T_TD_COLOR1}" value="brown" class="genmed">{L_COLOR_BROWN}</option>
                 <option style="color:yellow; background-color: {T_TD_COLOR1}" value="yellow" class="genmed">{L_COLOR_YELLOW}</option>
                 <option style="color:green; background-color: {T_TD_COLOR1}" value="green" class="genmed">{L_COLOR_GREEN}</option>
                 <option style="color:olive; background-color: {T_TD_COLOR1}" value="olive" class="genmed">{L_COLOR_OLIVE}</option>
                 <option style="color:cyan; background-color: {T_TD_COLOR1}" value="cyan" class="genmed">{L_COLOR_CYAN}</option>
                 <option style="color:blue; background-color: {T_TD_COLOR1}" value="blue" class="genmed">{L_COLOR_BLUE}</option>
                 <option style="color:darkblue; background-color: {T_TD_COLOR1}" value="darkblue" class="genmed">{L_COLOR_DARK_BLUE}</option>
                 <option style="color:indigo; background-color: {T_TD_COLOR1}" value="indigo" class="genmed">{L_COLOR_INDIGO}</option>
                 <option style="color:violet; background-color: {T_TD_COLOR1}" value="violet" class="genmed">{L_COLOR_VIOLET}</option>
                 <option style="color:white; background-color: {T_TD_COLOR1}" value="white" class="genmed">{L_COLOR_WHITE}</option>
                 <option style="color:black; background-color: {T_TD_COLOR1}" value="black" class="genmed">{L_COLOR_BLACK}</option>
               </select> &nbsp;{L_FONT_SIZE}:<select name="addbbcode20" onChange="bbfontstyle('[size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + ']', '[/size]');this.selectedIndex=0;" onMouseOver="helpline('f')">
                 <option value="0" class="genmed">{L_FONT_SIZE}</option>
                 <option value="7" class="genmed">{L_FONT_TINY}</option>
                 <option value="9" class="genmed">{L_FONT_SMALL}</option>
                 <option value="12" selected class="genmed">{L_FONT_NORMAL}</option>
                 <option value="18" class="genmed">{L_FONT_LARGE}</option>
                 <option  value="24" class="genmed">{L_FONT_HUGE}</option>
               </select>
               </span></td>
              <td nowrap="nowrap" align="right"><span class="gensmall"><a href="javascript:bbstyle(-1)" class="genmed" onMouseOver="helpline('a')">{L_BBCODE_CLOSE_TAGS}</a></span></td>
            </tr>
           </table>
         </td>
        </tr>
        <tr>
         <td colspan="9"> <span class="gensmall">
           <input type="text" name="helpbox" size="45" maxlength="100" style="width:450px; font-size:10px" class="helpline" value="{L_STYLES_TIP}" />
           </span></td>
        </tr>
        <tr>
         <td colspan="9"><span class="gen">
           <textarea name="message" rows="15" cols="35" wrap="virtual" style="width:450px" tabindex="3" class="post" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);">{MESSAGE}</textarea>
           </span></td>
        </tr>
      </table>
      </span></td>
   </tr>
   <tr>
     <td class="row1" valign="top"><span class="gen"><b>{L_OPTIONS}</b></span><br /><span class="gensmall">{HTML_STATUS}<br />{BBCODE_STATUS}<br />{SMILIES_STATUS}</span></td>
     <td class="row2"><span class="gen"> </span>
      <table cellspacing="0" cellpadding="1" border="0">
        <!-- BEGIN switch_html_checkbox -->
        <tr>
         <td>
           <input type="checkbox" name="disable_html" {S_HTML_CHECKED} />
         </td>
         <td><span class="gen">{L_DISABLE_HTML}</span></td>
        </tr>
        <!-- END switch_html_checkbox -->
        <!-- BEGIN switch_bbcode_checkbox -->
        <tr>
         <td>
           <input type="checkbox" name="disable_bbcode" {S_BBCODE_CHECKED} />
         </td>
         <td><span class="gen">{L_DISABLE_BBCODE}</span></td>
        </tr>
        <!-- END switch_bbcode_checkbox -->
        <!-- BEGIN switch_smilies_checkbox -->
        <tr>
         <td>
           <input type="checkbox" name="disable_smilies" {S_SMILIES_CHECKED} />
         </td>
         <td><span class="gen">{L_DISABLE_SMILIES}</span></td>
        </tr>
        <!-- END switch_smilies_checkbox -->
        <!-- BEGIN switch_signature_checkbox -->
        <tr>
         <td>
           <input type="checkbox" name="attach_sig" {S_SIGNATURE_CHECKED} />
         </td>
         <td><span class="gen">{L_ATTACH_SIGNATURE}</span></td>
        </tr>
        <!-- END switch_signature_checkbox -->
        <!-- BEGIN switch_notify_checkbox -->
        <tr>
         <td>
           <input type="checkbox" name="notify" {S_NOTIFY_CHECKED} />
         </td>
         <td><span class="gen">{L_NOTIFY_ON_REPLY}</span></td>
        </tr>
        <!-- END switch_notify_checkbox -->
        <!-- BEGIN switch_delete_checkbox -->
        <tr>
         <td>
           <input type="checkbox" name="delete" />
         </td>
         <td><span class="gen">{L_DELETE_POST}</span></td>
        </tr>
        <!-- END switch_delete_checkbox -->
        <!-- BEGIN switch_type_toggle -->
        <tr>
         <td></td>
         <td><span class="gen">{S_TYPE_TOGGLE}</span></td>
        </tr>
        <!-- END switch_type_toggle -->
      </table>
     </td>
   </tr>
   {POLLBOX}

      <!-- reCAPTCHA Visual Confirmation -->
   <!-- BEGIN switch_confirm -->
   <tr>
     <td class="row1"><span class="gen"><b>{L_CONFIRM_CODE}</b>: * </span><br /><span class="gensmall">{L_CONFIRM_CODE_EXPLAIN}</span></td>
     <td class="row2">{RECAPTCHA_CODE}</td>
   </tr>
   <!-- END switch_confirm -->
   
   
   <tr>
     <td class="catBottom" colspan="2" align="center" height="28"> {S_HIDDEN_FORM_FIELDS}<input type="submit" tabindex="5" name="preview" class="mainoption" value="{L_PREVIEW}" />&nbsp;<input type="submit" accesskey="s" tabindex="6" name="post" class="mainoption" value="{L_SUBMIT}" /></td>
   </tr>
  </table>

  <table width="100%" cellspacing="2" border="0" align="center" cellpadding="2">
   <tr>
     <td align="right" valign="top"><span class="gensmall">{S_TIMEZONE}</span></td>
   </tr>
  </table>
</form>

<table width="100%" cellspacing="2" border="0" align="center">
  <tr>
   <td valign="top" align="right">{JUMPBOX}</td>
  </tr>
</table>

{TOPIC_REVIEW_BOX}


And my posting.php

Code: Select all
<?php
/***************************************************************************
*                                posting.php
*                            -------------------
*   begin                : Saturday, Feb 13, 2001
*   copyright            : (C) 2001 The phpBB Group
*   email                : support@phpbb.com
*
*   $Id: posting.php,v 1.159.2.30 2006/12/16 13:11:24 acydburn Exp $
*
*
***************************************************************************/

/***************************************************************************
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
***************************************************************************/

/*

   png visual confirmation system : (c) phpBB Group, 2003 : All Rights Reserved

*/


define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include($phpbb_root_path . 'includes/functions_post.'.$phpEx);

//
// Check and set various parameters
//

/*
   png visual confirmation system : (c) phpBB Group, 2003 : All Rights Reserved
   
   reCAPTCHA Guest Post MOD
   Based on: http://www.phpbb.com/mods/db/index.php?i=misc&mode=display&contrib_id=1305
   Based on: http://recaptcha.net/plugins/phpbb/
*/

//START reCAPTCHA
require_once($phpbb_root_path . 'includes/recaptchalib.' . $phpEx);
$recaptcha_public_key = '';  // 6Leq_AAAAAAAAFw7HqLVVjOTljkpxg_45Xe9sioL
$recaptcha_private_key = ''; // <my private key is here!>
$recaptcha_code = null;
//END reCAPTCHA

$params = array('submit' => 'post', 'preview' => 'preview', 'delete' => 'delete', 'poll_delete' => 'poll_delete', 'poll_add' => 'add_poll_option', 'poll_edit' => 'edit_poll_option', 'mode' => 'mode');
while( list($var, $param) = @each($params) )
{
   if ( !empty($HTTP_POST_VARS[$param]) || !empty($HTTP_GET_VARS[$param]) )
   {
      $$var = ( !empty($HTTP_POST_VARS[$param]) ) ? htmlspecialchars($HTTP_POST_VARS[$param]) : htmlspecialchars($HTTP_GET_VARS[$param]);
   }
   else
   {
      $$var = '';
   }
}

$confirm = isset($HTTP_POST_VARS['confirm']) ? true : false;
$sid = (isset($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : 0;

$params = array('forum_id' => POST_FORUM_URL, 'topic_id' => POST_TOPIC_URL, 'post_id' => POST_POST_URL);
while( list($var, $param) = @each($params) )
{
   if ( !empty($HTTP_POST_VARS[$param]) || !empty($HTTP_GET_VARS[$param]) )
   {
      $$var = ( !empty($HTTP_POST_VARS[$param]) ) ? intval($HTTP_POST_VARS[$param]) : intval($HTTP_GET_VARS[$param]);
   }
   else
   {
      $$var = '';
   }
}

$refresh = $preview || $poll_add || $poll_edit || $poll_delete;
$orig_word = $replacement_word = array();

//
// Set topic type
//
$topic_type = ( !empty($HTTP_POST_VARS['topictype']) ) ? intval($HTTP_POST_VARS['topictype']) : POST_NORMAL;
$topic_type = ( in_array($topic_type, array(POST_NORMAL, POST_STICKY, POST_ANNOUNCE)) ) ? $topic_type : POST_NORMAL;

//
// If the mode is set to topic review then output
// that review ...
//
if ( $mode == 'topicreview' )
{
   require($phpbb_root_path . 'includes/topic_review.'.$phpEx);

   topic_review($topic_id, false);
   exit;
}
else if ( $mode == 'smilies' )
{
   generate_smilies('window', PAGE_POSTING);
   exit;
}

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_POSTING);
init_userprefs($userdata);
//
// End session management
//

//
// Was cancel pressed? If so then redirect to the appropriate
// page, no point in continuing with any further checks
//
if ( isset($HTTP_POST_VARS['cancel']) )
{
   if ( $post_id )
   {
      $redirect = "viewtopic.$phpEx?" . POST_POST_URL . "=$post_id";
      $post_append = "#$post_id";
   }
   else if ( $topic_id )
   {
      $redirect = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id";
      $post_append = '';
   }
   else if ( $forum_id )
   {
      $redirect = "viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id";
      $post_append = '';
   }
   else
   {
      $redirect = "index.$phpEx";
      $post_append = '';
   }

   redirect(append_sid($redirect, true) . $post_append);
}

//
// What auth type do we need to check?
//
$is_auth = array();
switch( $mode )
{
   case 'newtopic':
      if ( $topic_type == POST_ANNOUNCE )
      {
         $is_auth_type = 'auth_announce';
      }
      else if ( $topic_type == POST_STICKY )
      {
         $is_auth_type = 'auth_sticky';
      }
      else
      {
         $is_auth_type = 'auth_post';
      }
      break;
   case 'reply':
   case 'quote':
      $is_auth_type = 'auth_reply';
      break;
   case 'editpost':
      $is_auth_type = 'auth_edit';
      break;
   case 'delete':
   case 'poll_delete':
      $is_auth_type = 'auth_delete';
      break;
   case 'vote':
      $is_auth_type = 'auth_vote';
      break;
   case 'topicreview':
      $is_auth_type = 'auth_read';
      break;
   default:
      message_die(GENERAL_MESSAGE, $lang['No_post_mode']);
      break;
}

//
// Here we do various lookups to find topic_id, forum_id, post_id etc.
// Doing it here prevents spoofing (eg. faking forum_id, topic_id or post_id
//
$error_msg = '';
$post_data = array();
switch ( $mode )
{
   case 'newtopic':
      if ( empty($forum_id) )
      {
         message_die(GENERAL_MESSAGE, $lang['Forum_not_exist']);
      }

      $sql = "SELECT *
         FROM " . FORUMS_TABLE . "
         WHERE forum_id = $forum_id";
      break;

   case 'reply':
   case 'vote':
      if ( empty( $topic_id) )
      {
         message_die(GENERAL_MESSAGE, $lang['No_topic_id']);
      }

      $sql = "SELECT f.*, t.topic_status, t.topic_title, t.topic_type 
         FROM " . FORUMS_TABLE . " f, " . TOPICS_TABLE . " t
         WHERE t.topic_id = $topic_id
            AND f.forum_id = t.forum_id";
      break;

   case 'quote':
   case 'editpost':
   case 'delete':
   case 'poll_delete':
      if ( empty($post_id) )
      {
         message_die(GENERAL_MESSAGE, $lang['No_post_id']);
      }

      $select_sql = (!$submit) ? ', t.topic_title, p.enable_bbcode, p.enable_html, p.enable_smilies, p.enable_sig, p.post_username, pt.post_subject, pt.post_text, pt.bbcode_uid, u.username, u.user_id, u.user_sig, u.user_sig_bbcode_uid' : '';
      $from_sql = ( !$submit ) ? ", " . POSTS_TEXT_TABLE . " pt, " . USERS_TABLE . " u" : '';
      $where_sql = ( !$submit ) ? "AND pt.post_id = p.post_id AND u.user_id = p.poster_id" : '';

      $sql = "SELECT f.*, t.topic_id, t.topic_status, t.topic_type, t.topic_first_post_id, t.topic_last_post_id, t.topic_vote, p.post_id, p.poster_id" . $select_sql . "
         FROM " . POSTS_TABLE . " p, " . TOPICS_TABLE . " t, " . FORUMS_TABLE . " f" . $from_sql . "
         WHERE p.post_id = $post_id
            AND t.topic_id = p.topic_id
            AND f.forum_id = p.forum_id
            $where_sql";
      break;

   default:
      message_die(GENERAL_MESSAGE, $lang['No_valid_mode']);
}

if ( ($result = $db->sql_query($sql)) && ($post_info = $db->sql_fetchrow($result)) )
{
   $db->sql_freeresult($result);

   $forum_id = $post_info['forum_id'];
   $forum_name = $post_info['forum_name'];

   $is_auth = auth(AUTH_ALL, $forum_id, $userdata, $post_info);

   if ( $post_info['forum_status'] == FORUM_LOCKED && !$is_auth['auth_mod'])
   {
      message_die(GENERAL_MESSAGE, $lang['Forum_locked']);
   }
   else if ( $mode != 'newtopic' && $post_info['topic_status'] == TOPIC_LOCKED && !$is_auth['auth_mod'])
   {
      message_die(GENERAL_MESSAGE, $lang['Topic_locked']);
   }

   if ( $mode == 'editpost' || $mode == 'delete' || $mode == 'poll_delete' )
   {
      $topic_id = $post_info['topic_id'];

      $post_data['poster_post'] = ( $post_info['poster_id'] == $userdata['user_id'] ) ? true : false;
      $post_data['first_post'] = ( $post_info['topic_first_post_id'] == $post_id ) ? true : false;
      $post_data['last_post'] = ( $post_info['topic_last_post_id'] == $post_id ) ? true : false;
      $post_data['last_topic'] = ( $post_info['forum_last_post_id'] == $post_id ) ? true : false;
      $post_data['has_poll'] = ( $post_info['topic_vote'] ) ? true : false;
      $post_data['topic_type'] = $post_info['topic_type'];
      $post_data['poster_id'] = $post_info['poster_id'];

      if ( $post_data['first_post'] && $post_data['has_poll'] )
      {
         $sql = "SELECT *
            FROM " . VOTE_DESC_TABLE . " vd, " . VOTE_RESULTS_TABLE . " vr
            WHERE vd.topic_id = $topic_id
               AND vr.vote_id = vd.vote_id
            ORDER BY vr.vote_option_id";
         if ( !($result = $db->sql_query($sql)) )
         {
            message_die(GENERAL_ERROR, 'Could not obtain vote data for this topic', '', __LINE__, __FILE__, $sql);
         }

         $poll_options = array();
         $poll_results_sum = 0;
         if ( $row = $db->sql_fetchrow($result) )
         {
            $poll_title = $row['vote_text'];
            $poll_id = $row['vote_id'];
            $poll_length = $row['vote_length'] / 86400;

            do
            {
               $poll_options[$row['vote_option_id']] = $row['vote_option_text'];
               $poll_results_sum += $row['vote_result'];
            }
            while ( $row = $db->sql_fetchrow($result) );
         }
         $db->sql_freeresult($result);

         $post_data['edit_poll'] = ( ( !$poll_results_sum || $is_auth['auth_mod'] ) && $post_data['first_post'] ) ? true : 0;
      }
      else
      {
         $post_data['edit_poll'] = ($post_data['first_post'] && $is_auth['auth_pollcreate']) ? true : false;
      }
      
      //
      // Can this user edit/delete the post/poll?
      //
      if ( $post_info['poster_id'] != $userdata['user_id'] && !$is_auth['auth_mod'] )
      {
         $message = ( $delete || $mode == 'delete' ) ? $lang['Delete_own_posts'] : $lang['Edit_own_posts'];
         $message .= '<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>');

         message_die(GENERAL_MESSAGE, $message);
      }
      else if ( !$post_data['last_post'] && !$is_auth['auth_mod'] && ( $mode == 'delete' || $delete ) )
      {
         message_die(GENERAL_MESSAGE, $lang['Cannot_delete_replied']);
      }
      else if ( !$post_data['edit_poll'] && !$is_auth['auth_mod'] && ( $mode == 'poll_delete' || $poll_delete ) )
      {
         message_die(GENERAL_MESSAGE, $lang['Cannot_delete_poll']);
      }
   }
   else
   {
      if ( $mode == 'quote' )
      {
         $topic_id = $post_info['topic_id'];
      }
      if ( $mode == 'newtopic' )
      {
         $post_data['topic_type'] = POST_NORMAL;
      }

      $post_data['first_post'] = ( $mode == 'newtopic' ) ? true : 0;
      $post_data['last_post'] = false;
      $post_data['has_poll'] = false;
      $post_data['edit_poll'] = false;
   }
   if ( $mode == 'poll_delete' && !isset($poll_id) )
   {
      message_die(GENERAL_MESSAGE, $lang['No_such_post']);
   }
}
else
{
   message_die(GENERAL_MESSAGE, $lang['No_such_post']);
}

//
// The user is not authed, if they're not logged in then redirect
// them, else show them an error message
//
if ( !$is_auth[$is_auth_type] )
{
   if ( $userdata['session_logged_in'] )
   {
      message_die(GENERAL_MESSAGE, sprintf($lang['Sorry_' . $is_auth_type], $is_auth[$is_auth_type . "_type"]));
   }

   switch( $mode )
   {
      case 'newtopic':
         $redirect = "mode=newtopic&" . POST_FORUM_URL . "=" . $forum_id;
         break;
      case 'reply':
      case 'topicreview':
         $redirect = "mode=reply&" . POST_TOPIC_URL . "=" . $topic_id;
         break;
      case 'quote':
      case 'editpost':
         $redirect = "mode=quote&" . POST_POST_URL ."=" . $post_id;
         break;
   }

   redirect(append_sid("login.$phpEx?redirect=posting.$phpEx&" . $redirect, true));
}

//
// Set toggles for various options
//
if ( !$board_config['allow_html'] )
{
   $html_on = 0;
}
else
{
   $html_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_html'] : $userdata['user_allowhtml'] );
}

if ( !$board_config['allow_bbcode'] )
{
   $bbcode_on = 0;
}
else
{
   $bbcode_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_bbcode'] : $userdata['user_allowbbcode'] );
}

if ( !$board_config['allow_smilies'] )
{
   $smilies_on = 0;
}
else
{
   $smilies_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_smilies'] : $userdata['user_allowsmile'] );
}

if ( ($submit || $refresh) && $is_auth['auth_read'])
{
   $notify_user = ( !empty($HTTP_POST_VARS['notify']) ) ? TRUE : 0;
}
else
{
   if ( $mode != 'newtopic' && $userdata['session_logged_in'] && $is_auth['auth_read'] )
   {
      $sql = "SELECT topic_id
         FROM " . TOPICS_WATCH_TABLE . "
         WHERE topic_id = $topic_id
            AND user_id = " . $userdata['user_id'];
      if ( !($result = $db->sql_query($sql)) )
      {
         message_die(GENERAL_ERROR, 'Could not obtain topic watch information', '', __LINE__, __FILE__, $sql);
      }

      $notify_user = ( $db->sql_fetchrow($result) ) ? TRUE : $userdata['user_notify'];
      $db->sql_freeresult($result);
   }
   else
   {
      $notify_user = ( $userdata['session_logged_in'] && $is_auth['auth_read'] ) ? $userdata['user_notify'] : 0;
   }
}

$attach_sig = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['attach_sig']) ) ? TRUE : 0 ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? 0 : $userdata['user_attachsig'] );

// --------------------
//  What shall we do?
//
if ( ( $delete || $poll_delete || $mode == 'delete' ) && !$confirm )
{
   //
   // Confirm deletion
   //
   $s_hidden_fields = '<input type="hidden" name="' . POST_POST_URL . '" value="' . $post_id . '" />';
   $s_hidden_fields .= ( $delete || $mode == "delete" ) ? '<input type="hidden" name="mode" value="delete" />' : '<input type="hidden" name="mode" value="poll_delete" />';
   $s_hidden_fields .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';

   $l_confirm = ( $delete || $mode == 'delete' ) ? $lang['Confirm_delete'] : $lang['Confirm_delete_poll'];

   //
   // Output confirmation page
   //
   include($phpbb_root_path . 'includes/page_header.'.$phpEx);

   $template->set_filenames(array(
      'confirm_body' => 'confirm_body.tpl')
   );

   $template->assign_vars(array(
      'MESSAGE_TITLE' => $lang['Information'],
      'MESSAGE_TEXT' => $l_confirm,

      'L_YES' => $lang['Yes'],
      'L_NO' => $lang['No'],

      'S_CONFIRM_ACTION' => append_sid("posting.$phpEx"),
      'S_HIDDEN_FIELDS' => $s_hidden_fields)
   );

   $template->pparse('confirm_body');

   include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
}
else if ( $mode == 'vote' )
{
   //
   // Vote in a poll
   //
   if ( !empty($HTTP_POST_VARS['vote_id']) )
   {
      $vote_option_id = intval($HTTP_POST_VARS['vote_id']);

      $sql = "SELECT vd.vote_id   
         FROM " . VOTE_DESC_TABLE . " vd, " . VOTE_RESULTS_TABLE . " vr
         WHERE vd.topic_id = $topic_id
            AND vr.vote_id = vd.vote_id
            AND vr.vote_option_id = $vote_option_id
         GROUP BY vd.vote_id";
      if ( !($result = $db->sql_query($sql)) )
      {
         message_die(GENERAL_ERROR, 'Could not obtain vote data for this topic', '', __LINE__, __FILE__, $sql);
      }

      if ( $vote_info = $db->sql_fetchrow($result) )
      {
         $vote_id = $vote_info['vote_id'];

         $sql = "SELECT *
            FROM " . VOTE_USERS_TABLE . " 
            WHERE vote_id = $vote_id
               AND vote_user_id = " . $userdata['user_id'];
         if ( !($result2 = $db->sql_query($sql)) )
         {
            message_die(GENERAL_ERROR, 'Could not obtain user vote data for this topic', '', __LINE__, __FILE__, $sql);
         }

         if ( !($row = $db->sql_fetchrow($result2)) )
         {
            $sql = "UPDATE " . VOTE_RESULTS_TABLE . "
               SET vote_result = vote_result + 1
               WHERE vote_id = $vote_id
                  AND vote_option_id = $vote_option_id";
            if ( !$db->sql_query($sql, BEGIN_TRANSACTION) )
            {
               message_die(GENERAL_ERROR, 'Could not update poll result', '', __LINE__, __FILE__, $sql);
            }

            $sql = "INSERT INTO " . VOTE_USERS_TABLE . " (vote_id, vote_user_id, vote_user_ip)
               VALUES ($vote_id, " . $userdata['user_id'] . ", '$user_ip')";
            if ( !$db->sql_query($sql, END_TRANSACTION) )
            {
               message_die(GENERAL_ERROR, "Could not insert user_id for poll", "", __LINE__, __FILE__, $sql);
            }

            $message = $lang['Vote_cast'];
         }
         else
         {
            $message = $lang['Already_voted'];
         }
         $db->sql_freeresult($result2);
      }
      else
      {
         $message = $lang['No_vote_option'];
      }
      $db->sql_freeresult($result);

      $template->assign_vars(array(
         'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">')
      );
      $message .=  '<br /><br />' . sprintf($lang['Click_view_message'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>');
      message_die(GENERAL_MESSAGE, $message);
   }
   else
   {
      redirect(append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id", true));
   }
}
else if ( $submit || $confirm )
{
   //
   // Submit post/vote (newtopic, edit, reply, etc.)
   //
   $return_message = '';
   $return_meta = '';

   // session id check
   if ($sid == '' || $sid != $userdata['session_id'])
   {
      $error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Session_invalid'] : $lang['Session_invalid'];
   }

   switch ( $mode )
   {
      case 'editpost':
      case 'newtopic':
      case 'reply':

      if ( $board_config['enable_confirm'] && !$userdata['session_logged_in'] )
   {   
      //START reCAPTCHA
      $recaptcha_response =  recaptcha_check_answer ($recaptcha_private_key, $client_ip, htmlspecialchars($HTTP_POST_VARS['recaptcha_challenge_field']), htmlspecialchars($HTTP_POST_VARS['recaptcha_response_field']));    
      if (!$recaptcha_response->is_valid) {
         $error = TRUE;
         $recaptcha_code = recaptcha_get_html ($recaptcha_public_key, $recaptcha_response->error);
      //END reCAPTCHA
          $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['Confirm_code_wrong'];
      }
   }
   
         $username = ( !empty($HTTP_POST_VARS['username']) ) ? $HTTP_POST_VARS['username'] : '';
         $subject = ( !empty($HTTP_POST_VARS['subject']) ) ? trim($HTTP_POST_VARS['subject']) : '';
         $message = ( !empty($HTTP_POST_VARS['message']) ) ? $HTTP_POST_VARS['message'] : '';
         $poll_title = ( isset($HTTP_POST_VARS['poll_title']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_title'] : '';
         $poll_options = ( isset($HTTP_POST_VARS['poll_option_text']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_option_text'] : '';
         $poll_length = ( isset($HTTP_POST_VARS['poll_length']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_length'] : '';
         $bbcode_uid = '';

         prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length);

         if ( $error_msg == '' )
         {
            $topic_type = ( $topic_type != $post_data['topic_type'] && !$is_auth['auth_sticky'] && !$is_auth['auth_announce'] ) ? $post_data['topic_type'] : $topic_type;

            submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length);
         }
         break;

      case 'delete':
      case 'poll_delete':
         if ($error_msg != '')
         {
            message_die(GENERAL_MESSAGE, $error_msg);
         }

         delete_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id);
         break;
   }

   if ( $error_msg == '' )
   {
      if ( $mode != 'editpost' )
      {
         $user_id = ( $mode == 'reply' || $mode == 'newtopic' ) ? $userdata['user_id'] : $post_data['poster_id'];
         update_post_stats($mode, $post_data, $forum_id, $topic_id, $post_id, $user_id);
      }

      if ($error_msg == '' && $mode != 'poll_delete')
      {
         user_notification($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $post_id, $notify_user);
      }

      if ( $mode == 'newtopic' || $mode == 'reply' )
      {
         $tracking_topics = ( !empty($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) : array();
         $tracking_forums = ( !empty($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) : array();

         if ( count($tracking_topics) + count($tracking_forums) == 100 && empty($tracking_topics[$topic_id]) )
         {
            asort($tracking_topics);
            unset($tracking_topics[key($tracking_topics)]);
         }

         $tracking_topics[$topic_id] = time();

         setcookie($board_config['cookie_name'] . '_t', serialize($tracking_topics), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
      }

      $template->assign_vars(array(
         'META' => $return_meta)
      );
      message_die(GENERAL_MESSAGE, $return_message);
   }
}

if( $refresh || isset($HTTP_POST_VARS['del_poll_option']) || $error_msg != '' )
{
   $username = ( !empty($HTTP_POST_VARS['username']) ) ? htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['username']))) : '';
   $subject = ( !empty($HTTP_POST_VARS['subject']) ) ? htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['subject']))) : '';
   $message = ( !empty($HTTP_POST_VARS['message']) ) ? htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['message']))) : '';

   $poll_title = ( !empty($HTTP_POST_VARS['poll_title']) ) ? htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['poll_title']))) : '';
   $poll_length = ( isset($HTTP_POST_VARS['poll_length']) ) ? max(0, intval($HTTP_POST_VARS['poll_length'])) : 0;

   $poll_options = array();
   if ( !empty($HTTP_POST_VARS['poll_option_text']) )
   {
      while( list($option_id, $option_text) = @each($HTTP_POST_VARS['poll_option_text']) )
      {
         if( isset($HTTP_POST_VARS['del_poll_option'][$option_id]) )
         {
            unset($poll_options[$option_id]);
         }
         else if ( !empty($option_text) )
         {
            $poll_options[intval($option_id)] = htmlspecialchars(trim(stripslashes($option_text)));
         }
      }
   }

   if ( isset($poll_add) && !empty($HTTP_POST_VARS['add_poll_option_text']) )
   {
      $poll_options[] = htmlspecialchars(trim(stripslashes($HTTP_POST_VARS['add_poll_option_text'])));
   }

   if ( $mode == 'newtopic' || $mode == 'reply')
   {
      $user_sig = ( $userdata['user_sig'] != '' && $board_config['allow_sig'] ) ? $userdata['user_sig'] : '';
   }
   else if ( $mode == 'editpost' )
   {
      $user_sig = ( $post_info['user_sig'] != '' && $board_config['allow_sig'] ) ? $post_info['user_sig'] : '';
      $userdata['user_sig_bbcode_uid'] = $post_info['user_sig_bbcode_uid'];
   }
   
   if( $preview )
   {
      $orig_word = array();
      $replacement_word = array();
      obtain_word_list($orig_word, $replacement_word);

      $bbcode_uid = ( $bbcode_on ) ? make_bbcode_uid() : '';
      $preview_message = stripslashes(prepare_message(addslashes(unprepare_message($message)), $html_on, $bbcode_on, $smilies_on, $bbcode_uid));
      $preview_subject = $subject;
      $preview_username = $username;

      //
      // Finalise processing as per viewtopic
      //
      if( !$html_on )
      {
         if( $user_sig != '' || !$userdata['user_allowhtml'] )
         {
            $user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', '&lt;\2&gt;', $user_sig);
         }
      }

      if( $attach_sig && $user_sig != '' && $userdata['user_sig_bbcode_uid'] )
      {
         $user_sig = bbencode_second_pass($user_sig, $userdata['user_sig_bbcode_uid']);
      }

      if( $bbcode_on )
      {
         $preview_message = bbencode_second_pass($preview_message, $bbcode_uid);
      }

      if( !empty($orig_word) )
      {
         $preview_username = ( !empty($username) ) ? preg_replace($orig_word, $replacement_word, $preview_username) : '';
         $preview_subject = ( !empty($subject) ) ? preg_replace($orig_word, $replacement_word, $preview_subject) : '';
         $preview_message = ( !empty($preview_message) ) ? preg_replace($orig_word, $replacement_word, $preview_message) : '';
      }

      if( $user_sig != '' )
      {
         $user_sig = make_clickable($user_sig);
      }
      $preview_message = make_clickable($preview_message);

      if( $smilies_on )
      {
         if( $userdata['user_allowsmile'] && $user_sig != '' )
         {
            $user_sig = smilies_pass($user_sig);
         }

         $preview_message = smilies_pass($preview_message);
      }

      if( $attach_sig && $user_sig != '' )
      {
         $preview_message = $preview_message . '<br /><br />_________________<br />' . $user_sig;
      }

      $preview_message = str_replace("\n", '<br />', $preview_message);

      $template->set_filenames(array(
         'preview' => 'posting_preview.tpl')
      );

      $template->assign_vars(array(
         'TOPIC_TITLE' => $preview_subject,
         'POST_SUBJECT' => $preview_subject,
         'POSTER_NAME' => $preview_username,
         'POST_DATE' => create_date($board_config['default_dateformat'], time(), $board_config['board_timezone']),
         'MESSAGE' => $preview_message,

         'L_POST_SUBJECT' => $lang['Post_subject'],
         'L_PREVIEW' => $lang['Preview'],
         'L_POSTED' => $lang['Posted'],
         'L_POST' => $lang['Post'])
      );
      $template->assign_var_from_handle('POST_PREVIEW_BOX', 'preview');
   }
   else if( $error_msg != '' )
   {
      $template->set_filenames(array(
         'reg_header' => 'error_body.tpl')
      );
      $template->assign_vars(array(
         'ERROR_MESSAGE' => $error_msg)
      );
      $template->assign_var_from_handle('ERROR_BOX', 'reg_header');
   }
}
else
{
   //
   // User default entry point
   //
   if ( $mode == 'newtopic' )
   {
      $user_sig = ( $userdata['user_sig'] != '' ) ? $userdata['user_sig'] : '';

      $username = ($userdata['session_logged_in']) ? $userdata['username'] : '';
      $poll_title = '';
      $poll_length = '';
      $subject = '';
      $message = '';
   }
   else if ( $mode == 'reply' )
   {
      $user_sig = ( $userdata['user_sig'] != '' ) ? $userdata['user_sig'] : '';

      $username = ( $userdata['session_logged_in'] ) ? $userdata['username'] : '';
      $subject = '';
      $message = '';

   }
   else if ( $mode == 'quote' || $mode == 'editpost' )
   {
      $subject = ( $post_data['first_post'] ) ? $post_info['topic_title'] : $post_info['post_subject'];
      $message = $post_info['post_text'];

      if ( $mode == 'editpost' )
      {
         $attach_sig = ( $post_info['enable_sig'] && $post_info['user_sig'] != '' ) ? TRUE : 0;
         $user_sig = $post_info['user_sig'];

         $html_on = ( $post_info['enable_html'] ) ? true : false;
         $bbcode_on = ( $post_info['enable_bbcode'] ) ? true : false;
         $smilies_on = ( $post_info['enable_smilies'] ) ? true : false;
      }
      else
      {
         $attach_sig = ( $userdata['user_attachsig'] ) ? TRUE : 0;
         $user_sig = $userdata['user_sig'];
      }

      if ( $post_info['bbcode_uid'] != '' )
      {
         $message = preg_replace('/\:(([a-z0-9]:)?)' . $post_info['bbcode_uid'] . '/s', '', $message);
      }

      $message = str_replace('<', '&lt;', $message);
      $message = str_replace('>', '&gt;', $message);
      $message = str_replace('<br />', "\n", $message);

      if ( $mode == 'quote' )
      {
         $orig_word = array();
         $replacement_word = array();
         obtain_word_list($orig_word, $replace_word);

         $msg_date =  create_date($board_config['default_dateformat'], $postrow['post_time'], $board_config['board_timezone']);

         // Use trim to get rid of spaces placed there by MS-SQL 2000
         $quote_username = ( trim($post_info['post_username']) != '' ) ? $post_info['post_username'] : $post_info['username'];
         $message = '[quote="' . $quote_username . '"]' . $message . '[/quote]';

         if ( !empty($orig_word) )
         {
            $subject = ( !empty($subject) ) ? preg_replace($orig_word, $replace_word, $subject) : '';
            $message = ( !empty($message) ) ? preg_replace($orig_word, $replace_word, $message) : '';
         }

         if ( !preg_match('/^Re:/', $subject) && strlen($subject) > 0 )
         {
            $subject = 'Re: ' . $subject;
         }

         $mode = 'reply';
      }
      else
      {
         $username = ( $post_info['user_id'] == ANONYMOUS && !empty($post_info['post_username']) ) ? $post_info['post_username'] : '';
      }
   }
}

//
// Signature toggle selection
//
if( $user_sig != '' )
{
   $template->assign_block_vars('switch_signature_checkbox', array());
}

//
// HTML toggle selection
//
if ( $board_config['allow_html'] )
{
   $html_status = $lang['HTML_is_ON'];
   $template->assign_block_vars('switch_html_checkbox', array());
}
else
{
   $html_status = $lang['HTML_is_OFF'];
}

//
// BBCode toggle selection
//
if ( $board_config['allow_bbcode'] )
{
   $bbcode_status = $lang['BBCode_is_ON'];
   $template->assign_block_vars('switch_bbcode_checkbox', array());
}
else
{
   $bbcode_status = $lang['BBCode_is_OFF'];
}

//
// Smilies toggle selection
//
if ( $board_config['allow_smilies'] )
{
   $smilies_status = $lang['Smilies_are_ON'];
   $template->assign_block_vars('switch_smilies_checkbox', array());
}
else
{
   $smilies_status = $lang['Smilies_are_OFF'];
}

if( !$userdata['session_logged_in'] || ( $mode == 'editpost' && $post_info['poster_id'] == ANONYMOUS ) )
{
   $template->assign_block_vars('switch_username_select', array());
}

//
// Notify checkbox - only show if user is logged in
//
if ( $userdata['session_logged_in'] && $is_auth['auth_read'] )
{
   if ( $mode != 'editpost' || ( $mode == 'editpost' && $post_info['poster_id'] != ANONYMOUS ) )
   {
      $template->assign_block_vars('switch_notify_checkbox', array());
   }
}

//
// Delete selection
//
if ( $mode == 'editpost' && ( ( $is_auth['auth_delete'] && $post_data['last_post'] && ( !$post_data['has_poll'] || $post_data['edit_poll'] ) ) || $is_auth['auth_mod'] ) )
{
   $template->assign_block_vars('switch_delete_checkbox', array());
}

//
// Topic type selection
//
$topic_type_toggle = '';
if ( $mode == 'newtopic' || ( $mode == 'editpost' && $post_data['first_post'] ) )
{
   $template->assign_block_vars('switch_type_toggle', array());

   if( $is_auth['auth_sticky'] )
   {
      $topic_type_toggle .= '<input type="radio" name="topictype" value="' . POST_STICKY . '"';
      if ( $post_data['topic_type'] == POST_STICKY || $topic_type == POST_STICKY )
      {
         $topic_type_toggle .= ' checked="checked"';
      }
      $topic_type_toggle .= ' /> ' . $lang['Post_Sticky'] . '&nbsp;&nbsp;';
   }

   if( $is_auth['auth_announce'] )
   {
      $topic_type_toggle .= '<input type="radio" name="topictype" value="' . POST_ANNOUNCE . '"';
      if ( $post_data['topic_type'] == POST_ANNOUNCE || $topic_type == POST_ANNOUNCE )
      {
         $topic_type_toggle .= ' checked="checked"';
      }
      $topic_type_toggle .= ' /> ' . $lang['Post_Announcement'] . '&nbsp;&nbsp;';
   }

   if ( $topic_type_toggle != '' )
   {
      $topic_type_toggle = $lang['Post_topic_as'] . ': <input type="radio" name="topictype" value="' . POST_NORMAL .'"' . ( ( $post_data['topic_type'] == POST_NORMAL || $topic_type == POST_NORMAL ) ? ' checked="checked"' : '' ) . ' /> ' . $lang['Post_Normal'] . '&nbsp;&nbsp;' . $topic_type_toggle;
   }
}

$hidden_form_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
$hidden_form_fields .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';

switch( $mode )
{
   case 'newtopic':
      $page_title = $lang['Post_a_new_topic'];
      $hidden_form_fields .= '<input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
      break;

   case 'reply':
      $page_title = $lang['Post_a_reply'];
      $hidden_form_fields .= '<input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" />';
      break;

   case 'editpost':
      $page_title = $lang['Edit_Post'];
      $hidden_form_fields .= '<input type="hidden" name="' . POST_POST_URL . '" value="' . $post_id . '" />';
      break;
}



//
// reCAPTCHA Visual confirmation for guests
//

   if( !$userdata['session_logged_in'] && (!empty($board_config['enable_confirm'])) )
   {
      //START reCAPTCHA
      if (!$recaptcha_code)
      $recaptcha_code = recaptcha_get_html ($recaptcha_public_key, null);   
      //END reCAPTCHA
      
      $template->assign_block_vars('switch_confirm', array());
   }

// Generate smilies listing for page output
generate_smilies('inline', PAGE_POSTING);

//
// Include page header
//
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

$template->set_filenames(array(
   'body' => 'posting_body.tpl',
   'pollbody' => 'posting_poll_body.tpl',
   'reviewbody' => 'posting_topic_review.tpl')
);
make_jumpbox('viewforum.'.$phpEx);

$template->assign_vars(array(
   'FORUM_NAME' => $forum_name,
   'L_POST_A' => $page_title,
   'L_POST_SUBJECT' => $lang['Post_subject'],

   'U_VIEW_FORUM' => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"))
);

//
// This enables the forum/topic title to be output for posting
// but not for privmsg (where it makes no sense)
//
$template->assign_block_vars('switch_not_privmsg', array());

//
// Output the data to the template
//
$template->assign_vars(array(
   'USERNAME' => $username,
   'SUBJECT' => $subject,
   'MESSAGE' => $message,
   'HTML_STATUS' => $html_status,
   'BBCODE_STATUS' => sprintf($bbcode_status, '<a href="' . append_sid("faq.$phpEx?mode=bbcode") . '" target="_phpbbcode">', '</a>'),
   'SMILIES_STATUS' => $smilies_status,

   'RECAPTCHA_CODE' => $recaptcha_code,
   
   

   'L_SUBJECT' => $lang['Subject'],
   'L_MESSAGE_BODY' => $lang['Message_body'],
   'L_OPTIONS' => $lang['Options'],
   'L_PREVIEW' => $lang['Preview'],
   'L_SPELLCHECK' => $lang['Spellcheck'],
   'L_SUBMIT' => $lang['Submit'],
   'L_CANCEL' => $lang['Cancel'],
   'L_CONFIRM_DELETE' => $lang['Confirm_delete'],
   'L_DISABLE_HTML' => $lang['Disable_HTML_post'],
   'L_DISABLE_BBCODE' => $lang['Disable_BBCode_post'],
   'L_DISABLE_SMILIES' => $lang['Disable_Smilies_post'],
   'L_ATTACH_SIGNATURE' => $lang['Attach_signature'],
   'L_NOTIFY_ON_REPLY' => $lang['Notify'],
   'L_DELETE_POST' => $lang['Delete_post'],

   'L_CONFIRM_CODE' => $lang['Confirm_code'],




   'L_BBCODE_B_HELP' => $lang['bbcode_b_help'],
   'L_BBCODE_I_HELP' => $lang['bbcode_i_help'],
   'L_BBCODE_U_HELP' => $lang['bbcode_u_help'],
   'L_BBCODE_Q_HELP' => $lang['bbcode_q_help'],
   'L_BBCODE_C_HELP' => $lang['bbcode_c_help'],
   'L_BBCODE_L_HELP' => $lang['bbcode_l_help'],
   'L_BBCODE_O_HELP' => $lang['bbcode_o_help'],
   'L_BBCODE_P_HELP' => $lang['bbcode_p_help'],
   'L_BBCODE_W_HELP' => $lang['bbcode_w_help'],
   'L_BBCODE_A_HELP' => $lang['bbcode_a_help'],
   'L_BBCODE_S_HELP' => $lang['bbcode_s_help'],
   'L_BBCODE_F_HELP' => $lang['bbcode_f_help'],
   'L_EMPTY_MESSAGE' => $lang['Empty_message'],

   'L_FONT_COLOR' => $lang['Font_color'],
   'L_COLOR_DEFAULT' => $lang['color_default'],
   'L_COLOR_DARK_RED' => $lang['color_dark_red'],
   'L_COLOR_RED' => $lang['color_red'],
   'L_COLOR_ORANGE' => $lang['color_orange'],
   'L_COLOR_BROWN' => $lang['color_brown'],
   'L_COLOR_YELLOW' => $lang['color_yellow'],
   'L_COLOR_GREEN' => $lang['color_green'],
   'L_COLOR_OLIVE' => $lang['color_olive'],
   'L_COLOR_CYAN' => $lang['color_cyan'],
   'L_COLOR_BLUE' => $lang['color_blue'],
   'L_COLOR_DARK_BLUE' => $lang['color_dark_blue'],
   'L_COLOR_INDIGO' => $lang['color_indigo'],
   'L_COLOR_VIOLET' => $lang['color_violet'],
   'L_COLOR_WHITE' => $lang['color_white'],
   'L_COLOR_BLACK' => $lang['color_black'],

   'L_FONT_SIZE' => $lang['Font_size'],
   'L_FONT_TINY' => $lang['font_tiny'],
   'L_FONT_SMALL' => $lang['font_small'],
   'L_FONT_NORMAL' => $lang['font_normal'],
   'L_FONT_LARGE' => $lang['font_large'],
   'L_FONT_HUGE' => $lang['font_huge'],

   'L_BBCODE_CLOSE_TAGS' => $lang['Close_Tags'],
   'L_STYLES_TIP' => $lang['Styles_tip'],

   'U_VIEWTOPIC' => ( $mode == 'reply' ) ? append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&amp;postorder=desc") : '',
   'U_REVIEW_TOPIC' => ( $mode == 'reply' ) ? append_sid("posting.$phpEx?mode=topicreview&amp;" . POST_TOPIC_URL . "=$topic_id") : '',

   'S_HTML_CHECKED' => ( !$html_on ) ? 'checked="checked"' : '',
   'S_BBCODE_CHECKED' => ( !$bbcode_on ) ? 'checked="checked"' : '',
   'S_SMILIES_CHECKED' => ( !$smilies_on ) ? 'checked="checked"' : '',
   'S_SIGNATURE_CHECKED' => ( $attach_sig ) ? 'checked="checked"' : '',
   'S_NOTIFY_CHECKED' => ( $notify_user ) ? 'checked="checked"' : '',
   'S_TYPE_TOGGLE' => $topic_type_toggle,
   'S_TOPIC_ID' => $topic_id,
   'S_POST_ACTION' => append_sid("posting.$phpEx"),
   'S_HIDDEN_FORM_FIELDS' => $hidden_form_fields)
);

//
// Poll entry switch/output
//
if( ( $mode == 'newtopic' || ( $mode == 'editpost' && $post_data['edit_poll']) ) && $is_auth['auth_pollcreate'] )
{
   $template->assign_vars(array(
      'L_ADD_A_POLL' => $lang['Add_poll'], 
      'L_ADD_POLL_EXPLAIN' => $lang['Add_poll_explain'],   
      'L_POLL_QUESTION' => $lang['Poll_question'],   
      'L_POLL_OPTION' => $lang['Poll_option'], 
      'L_ADD_OPTION' => $lang['Add_option'],
      'L_UPDATE_OPTION' => $lang['Update'],
      'L_DELETE_OPTION' => $lang['Delete'],
      'L_POLL_LENGTH' => $lang['Poll_for'], 
      'L_DAYS' => $lang['Days'],
      'L_POLL_LENGTH_EXPLAIN' => $lang['Poll_for_explain'],
      'L_POLL_DELETE' => $lang['Delete_poll'],
      
      'POLL_TITLE' => $poll_title,
      'POLL_LENGTH' => $poll_length)
   );

   if( $mode == 'editpost' && $post_data['edit_poll'] && $post_data['has_poll'])
   {
      $template->assign_block_vars('switch_poll_delete_toggle', array());
   }

   if( !empty($poll_options) )
   {
      while( list($option_id, $option_text) = each($poll_options) )
      {
         $template->assign_block_vars('poll_option_rows', array(
            'POLL_OPTION' => str_replace('"', '&quot;', $option_text),

            'S_POLL_OPTION_NUM' => $option_id)
         );
      }
   }

   $template->assign_var_from_handle('POLLBOX', 'pollbody');
}

//
// Topic review
//
if( $mode == 'reply' && $is_auth['auth_read'] )
{
   require($phpbb_root_path . 'includes/topic_review.'.$phpEx);
   topic_review($topic_id, true);

   $template->assign_block_vars('switch_inline_mode', array());
   $template->assign_var_from_handle('TOPIC_REVIEW_BOX', 'reviewbody');
}

$template->pparse('body');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
Emberpyro
Registered User
 
Posts: 13
Joined: Wed Nov 08, 2006 6:27 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby kuhurdler » Fri Mar 21, 2008 5:06 pm

in posting.php move your key out of the commented text and place it between the single quotes.
kuhurdler
Registered User
 
Posts: 1
Joined: Thu Jan 17, 2008 5:45 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby REAgentForeclosures » Fri Mar 21, 2008 5:41 pm

kuhurdler wrote:in posting.php move your key out of the commented text and place it between the single quotes.

Correct, It should look like this:
Code: Select all
//START reCAPTCHA
require_once($phpbb_root_path . 'includes/recaptchalib.' . $phpEx);
$recaptcha_public_key = '6Leq_AAAAAAAAFw7HqLVVjOTljkpxg_45Xe9sioL';  // commented
$recaptcha_private_key = '<my private key is here!>'; // commented
$recaptcha_code = null;
//END reCAPTCHA
REAgentForeclosures
Registered User
 
Posts: 50
Joined: Tue May 01, 2007 9:14 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby Emberpyro » Fri Mar 21, 2008 7:44 pm

Wow, I'm a nub. You'd've thought I'd've spotted it was commented out, given I use a colour coded text editor. ><

Cheers guys! (Testing now, but I assume it'll work. :P)


*edit*

Damn, didn't work. Will upload a screenie.

http://avariceguild.com/recaptcha.png

You can see there're two captcha boxes for some reason. :S Any ideas?

ps. Also, for some reason, the recaptcha bit breaks in Opera. I've not noticed it on other sites that use recaptcha so I assume it's a mod specific thing. It doesn't break enough to worry about though, it just looks wrong but you can still see the code. :)

*another edit...*
Just realised, I should've said, still using the same code as above, but, uhm, with the captcha codes inside the quote marks rather than commented out. ;)
Emberpyro
Registered User
 
Posts: 13
Joined: Wed Nov 08, 2006 6:27 pm

Re: [RC1] reCAPTCHA Guest Post MOD

Postby pcg123 » Fri Apr 04, 2008 4:57 pm

Never mind, figured it out. Thanks.
Last edited by pcg123 on Fri Apr 04, 2008 9:58 pm, edited 3 times in total.
pcg123
Registered User
 
Posts: 7
Joined: Tue Mar 29, 2005 11:24 pm

Next

Return to [2.0.x] MODs in Development

Who is online

Users browsing this forum: No registered users and 8 guests