EasyCFM.COM ColdFusion Forums / PHP to CFML / Convert PHP To CFM (SimpleModal)

   Reply to Discussion | New Discussion << previous || next >> 
Posted By Discussion Topic: Convert PHP To CFM (SimpleModal)

book mark this topic Printer-friendly Version  send this discussion to a friend  new posts last

dlackey
02-26-2009 @ 12:44 PM
Reply
Edit
Profile
Send P.M.
My Gravatar!
Powered by Gravatar
Moderator
Posts: 935
Joined: Jun 2007

Any help with this would be very much appreciated.  I know some of the conversions necessary but somewhere I'm making a mistake.  Here is a demo of what I'm wanting to do with CF (http://www.ericmmartin.com/simplemodal/)

TIA,
Tom


<?php

/*
* SimpleModal Contact Form
* http://www.ericmmartin.com/projects/simplemodal/
* http://code.google.com/p/simplemodal/
*
* Copyright (c) 2008 Eric Martin - http://ericmmartin.com
*
* Licensed under the MIT license:
*   http://www.opensource.org/licenses/mit-license.php
*
* Revision: $Id: contact-dist.php 164 2008-12-02 23:31:54Z emartin24 $
*
*/

// User settings
$to = "user@yourdomain.com";
$subject
= "SimpleModal Contact Form";

// Include extra form fields and/or submitter data?
// false = do not include
$extra = array(
     "form_subject"     =>
true,
     "form_cc"          => true,
     "ip"                    => true,
     "user_agent"     => true
);

// Process
$action = isset($_POST["action"]) ? $_POST["action"] : "";
if (empty($action)) {
     // Send back the contact form HTML
     $output = "<div style='display:none'>
     <a href='#' title='Close' class='modalCloseX simplemodal-close'>x</a>
     <div class='contact-top'></div>
     <div class='contact-content'>
          <h1 class='contact-title'>Send us a message:</h1>
          <div class='contact-loading' style='display:none'></div>
          <div class='contact-message' style='display:none'></div>
          <form action='#' style='display:none'>
               <label for='contact-name'>*Name:</label>
               <input type='text' id='contact-name' class='contact-input' name='name' tabindex='1001' />
               <label for='contact-email'>*Email:</label>
               <input type='text' id='contact-email' class='contact-input' name='email' tabindex='1002' />";

     if ($extra["form_subject"]) {
          $output .= "
               <label for='contact-subject'>Subject:</label>
               <input type='text' id='contact-subject' class='contact-input' name='subject' value=' tabindex='1003' />";
     }

     $output .= "
               <label for='contact-message'>*Message:</label>
               <textarea id='contact-message' class='contact-input' name='message' cols='40' rows='4' tabindex='1004'></textarea>
               <br/>";

     if ($extra["form_cc"]) {
          $output .= "
               <label>&nbsp;</label>
               <input type='checkbox' id='contact-cc' name='cc' value='1' tabindex='1005' /> <span class='contact-cc'>Send me a copy</span>
               <br/>";
     }

     $output .= "
               <label>&nbsp;</label>
               <button type='submit' class='contact-send contact-button' tabindex='1006'>Send</button>
               <button type='submit' class='contact-cancel contact-button simplemodal-close' tabindex='1007'>Cancel</button>
               <br/>
               <input type='hidden' name='token' value='" . smcf_token($to) . "'/>
          </form>
     </div>
     <div class='contact-bottom'><a href='http://www.ericmmartin.com/projects/simplemodal/'>Powered by SimpleModal</a></div>
</div>";

     echo $output;
}
else if ($action == "send") {
     // Send the email
     $name = isset($_POST["name"]) ? $_POST["name"] : "";
     $email = isset($_POST["email"]) ? $_POST["email"] : "";
     $subject = isset($_POST["subject"]) ? $_POST["subject"] : $subject;
     $message = isset($_POST["message"]) ? $_POST["message"] : "";
     $cc = isset($_POST["cc"]) ? $_POST["cc"] : "";
     $token = isset($_POST["token"]) ? $_POST["token"] : "";

     // make sure the token matches
     if ($token === smcf_token($to)) {
          smcf_send($name, $email, $subject, $message, $cc);
          echo "Your message was successfully sent.";
     }
     else {
          echo "Unfortunately, your message could not be verified.";
     }
}

function smcf_token($s) {
     return md5("smcf-" . $s . date("WY"));
}

// Validate and send email
function smcf_send($name, $email, $subject, $message, $cc) {
     global $to, $extra;

     // Filter and validate fields
     $name = smcf_filter($name);
     $subject = smcf_filter($subject);
     $email = smcf_filter($email);
     if (!smcf_validate_email($email)) {
          $subject .= " - invalid email";
          $message .= "\n\nBad email: $email";
          $email = $to;
          $cc = 0; // do not CC "sender"
     }

     // Add additional info to the message
     if ($extra["ip"]) {
          $message .= "\n\nIP: " . $_SERVER["REMOTE_ADDR"];
     }
     if ($extra["user_agent"]) {
          $message .= "\n\nUSER AGENT: " . $_SERVER["HTTP_USER_AGENT"];
     }

     // Set and wordwrap message body
     $body = "From: $name\n\n";
     $body .= "Message: $message";
     $body = wordwrap($body, 70);

     // Build header
     $headers = "From: $email\n";
     if ($cc == 1) {
          $headers .= "Cc: $email\n";
     }
     $headers .= "X-Mailer: PHP/SimpleModalContactForm";

     // UTF-8
     if (function_exists('mb_encode_mimeheader')) {
          $subject = mb_encode_mimeheader($subject, "UTF-8", "B", "\n");
     }
     else {
          // you need to enable mb_encode_mimeheader or risk
          // getting emails that are not UTF-8 encoded
     }
     $headers .= "MIME-Version: 1.0\n";
     $headers .= "Content-type: text/plain; charset=utf-8\n";
     $headers .= "Content-Transfer-Encoding: quoted-printable\n";

     // Send email
     @mail($to, $subject, $body, $headers) or
          die("Unfortunately, a server issue prevented delivery of your message.");
}

// Remove any un-safe values to prevent email injection
function smcf_filter($value) {
     $pattern = array("/\n/","/\r/","/content-type:/i","/to:/i", "/from:/i", "/cc:/i");
     $value = preg_replace($pattern, "", $value);
     return $value;
}

// Validate email address format in case client-side validation "fails"
function smcf_validate_email($email) {
     $at = strrpos($email, "@");

     // Make sure the at (@) sybmol exists and  
     // it is not the first or last character
     if ($at && ($at < 1 || ($at + 1) == strlen($email)))
          return false;

     // Make sure there aren't multiple periods together
     if (preg_match("/(\.{2,})/", $email))
          return false;

     // Break up the local and domain portions
     $local = substr($email, 0, $at);
     $domain = substr($email, $at + 1);


     // Check lengths
     $locLen = strlen($local);
     $domLen
= strlen($domain);
     if
($locLen < 1 || $locLen >
64 || $domLen < 4 || $domLen > 255)
          return false;

     // Make sure local and domain don't start with or end with a period
     if (preg_match("/(^\.|\.$)/", $local) || preg_match("/(^\.|\.$)/", $domain))
          return false;

     // Check for quoted-string addresses
     // Since almost anything is allowed in a quoted-string address,
     // we're just going to let them go through
     if (!preg_match('/^"(.+)"$/', $local)) {
          // It's a dot-string address...check for valid characters
          if (!preg_match('/^[-a-zA-Z0-9!#$%*\/?|^{}`~&\'+=_\.]*$/', $local))
               return false;
     }

     // Make sure domain contains only valid characters and at least one period
     if (!preg_match("/^[-a-zA-Z0-9\.]*$/", $domain) || !strpos($domain, "."))
          return false;     

     return true;
}

exit;

?>


Cheers,
Chip

dlackey
02-26-2009 @ 12:59 PM
Reply
Edit
Profile
Send P.M.
My Gravatar!
Powered by Gravatar
Moderator
Posts: 935
Joined: Jun 2007

If I get the conversion working, I'll post the updated code.

Cheers,
Chip

dlackey
02-26-2009 @ 4:32 PM
Reply
Edit
Profile
Send P.M.
My Gravatar!
Powered by Gravatar
Moderator
Posts: 935
Joined: Jun 2007

This isn't a verbatim reproduction but works perfectly for what I'm wanting to accomplish.  Basically, I needed a popup window where a user could submit a form and actually get confirmation in the same window indicating if the message was sent or not.  The other applications like this would close or not accurately report if the message sent or not.  The PHP code listed above does some sort of validation check probably to avoid spam submissions.  My conversion does not include this as my form is on a company intranet so spam submissions aren't an issue.  I hope this helps someone.  

NOTE:  I removed the references to our local intranet values.  If the code below doesn't work, it is b/c I made a mistake in cleaning up the code for posting here.  Dont get frustrated, just drop me a PM.  

NOTE2:  I had to update 2 references in the .js file to point to my contact.cfm file instead of the contact.php file.  

Original Source



<cfparam name="to" default="youremailaddress@yourdomain.com">
<cfparam name="subject" default="SimpleModal Contact Form">
<cfparam name="form_subject" default="true">
<cfparam name="form_cc" default="true">
<cfparam name="ip" default="true">
<cfparam name="user_agent" default="true">
<cfparam name="form_action" default="">
<cfparam name="email_body" default="No text was included in this message">

<cfif form_action eq "">
<div style='display:none'>
     <a href='#' title='Close' class='modalCloseX simplemodal-close'>x</a>
     <div class='contact-top'></div>
     <div class='contact-content'>
          <h1 class='contact-title'>Send us a message:</h1>
          <div class='contact-loading' style='display:none'></div>
          <div class='contact-message' style='display:none'></div>
          <form action='#' style='display:none'>
               <label for='contact-name'>*Name:</label>
               <input type='text' id='contact-name' class='contact-input' name='name' tabindex='1001' value="" />
               <label for='contact-email'>*Email:</label>
               <input type='text' id='contact-email' class='contact-input' name='email' tabindex='1002' value="" />

               <cfif form_subject eq 'true'>
               <label for='contact-subject'>Subject:</label>
               <input type='text' id='contact-subject' class='contact-input' name='subject' value=' tabindex='1003' />
               </cfif>

               <label for='contact-message'>*Message:</label>
               <textarea id='contact-message' class='contact-input' name='message' cols='40' rows='4' tabindex='1004'></textarea>
               <br/>

               <cfif form_cc eq 'true'>
               <label>&nbsp;</label>
               <input type='checkbox' id='contact-cc' name='cc' value='1' tabindex='1005' /> <span class='contact-cc'>Send me a copy</span>
               <br/>
               </cfif>

               <label>&nbsp;</label>
               <button type='submit' class='contact-send contact-button' tabindex='1006'>Send</button>
               <button type='submit' class='contact-cancel contact-button simplemodal-close' tabindex='1007'>Cancel</button>
               <br/>
               <input type="hidden" name="form_action" value="send">
               
               <cfif ip eq 'true'>
               <input type="hidden" name="ip" value="<cfoutput>#cgi.HTTP_REFERER#</cfoutput>">
               </cfif>
               
               <cfif user_agent eq 'true'>
               <input type="hidden" name="user_agent" value="<cfoutput>#cgi.HTTP_USER_AGENT#</cfoutput>">
               </cfif>
               
          </form>
     </div>
     <div class='contact-bottom'><a href='http://www.ericmmartin.com/projects/simplemodal/'>Powered by SimpleModal</a></div>
</div>

<cfelseif form_action eq 'send'>

<cfsavecontent variable="email_body"><cfoutput><cftry><cfloop index="thefield" list="#form.fieldnames#"><cfset fields="#thefield# = #evaluate(thefield)#"><cfoutput>#fields#</cfoutput><br></cfloop><cfcatch type="any"></cfcatch></cftry></cfoutput></cfsavecontent>

     <cftry>
     <cfmail to="#msg_to#" from="#form.email#" subject="#form.subject#" cc="#form.email#" type="html" server="#smtp_server#">
     <p>#form.name# writes:</P>
     <p>#form.message#</p>
     <fieldset style="padding:5px;"><legend style="padding:5px;">Office Use Only</legend>
     #email_body#
     </fieldset>
     </cfmail>
     
     Your message was successfully sent.<br>
     <div align="center"><input type='button' value='close' class='simplemodal-close' onClick="$.modal.close();"/><br/></div>
     <cfcatch type="any">
     Unfortunately, your message could not be verified.<br>
     <div align="center"><input type='button' value='close' class='simplemodal-close' onClick="$.modal.close();"/><br/></div>

     </cfcatch>
     </cftry>
     
</cfif>


Cheers,
Chip


Website Designed and Developed by Pablo Varando.