Jump to:

23490 Posts in 18996 Topics by 2878 members

General Questions

SilverStripe Forums » General Questions » Form behavior in Custom Template

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 962 Views
  • TDNP
    Avatar
    Community Member
    19 Posts

    Form behavior in Custom Template Link to this post

    I have been working hard on a form and had it working before applying a custom template. The form takes donor information and writes it to an XML file, then sends the user along to their destination to pay. It was working in it's default layout but now execute the XMLWrite function I created.

    DonationForm.php -

    <?php
    // Donation Form for PNWU
    class DonationForm extends Form {

       //Define our form function as allowed
       static $allowed_actions = array(
          'DonationForm',
          'XMLWrite',
          'HttpSubmission'
       );

       function DonationForm($controller, $name) {
                            
                //Create Fields
                   $fields = new FieldSet(
                      new OptionsetField('Prefix', null, array('Mrs' => 'Mr.', 'Mrs.' => 'Mrs.', 'Ms.' => 'Ms.', 'Dr.' => 'Dr.')),
                      new TextField('FirstName', 'First Name*'),
                      new TextField('LastName', 'Last Name*'),
                      new TextField('MI', 'Initial'),
                      new TextField('SpouseFirst', 'Spouse, First Name*'),
                      new TextField('SpouseLast', 'Last Name'),
                      new TextField('SpouseMI', 'Initial'),
                      new OptionsetField('Type', null, array('Home' => 'Home', 'Business' => 'Business')),
                      new TextField('Occupation', 'Occupation'),
                      new TextField('Suffix', 'Suffix'),   
                      new TextField('Business', 'Business Name'),
                      new TextField('Address', 'Full Address*'),
                      new TextField('City', 'City'),
                      new TextField('State', 'State'),
                      new TextField('Zip', 'Zipcode'),
                      new NumericField('Phone', 'Home Phone* (No Dashes)', null, 10),
                      new NumericField('BusinessPh', 'Business Phone', null, 10),
                      new NumericField('MobilePh', 'Mobile Phone', null, 10),
                      new EmailField('Email', 'Email Address*'),
                      //Amount Information
                      new OptionsetField('GiftType', null, array('OneTime' => null, 'Recurring' => null)),
                      new CurrencyField('BaseAmount', 'Amount of Donation'),
                      new CurrencyField('RecurringAmount', 'Recurring Amount'),
                      new NumericField('Years', 'years', null, 5),
                      new CurrencyField('MonthlyAmount', null),
                      new TextField('Month', null),
                      new TextField('Year', null),
                      new CurrencyField('InstallAmount', null),
                      new CheckboxField('RemindMe', null),
                      new TextField('DisplayAs', null),
                      new DropdownField('PaymentType', 'Select Your Payment Method', array('CC' => 'Credit Card', 'ACH' => 'Check'))
                   );
                   if(isset($_GET['confirm'])) {
                      echo $xmlfile;
                   }

                // Create action
                $actions = new FieldSet(
                   new FormAction('XMLWrite', 'Submit')
                );
                
                // Create action
                $requiredFields = new RequiredFields('FirstName', 'LastName', 'Email', 'Address', 'HomePhone', 'PaymentType', 'CardNumber', 'Month', 'Year', 'CVV2');
                   
                parent::__construct($controller, $name, $fields, $actions, $requiredFields);
                
       }
       
       function XMLWrite() {
          //Write to Donation.xml
                //Convert Form data to variables
                $name = $_POST['FirstName'] . $_POST['LastName'];
                $business = $_POST['Business'];
                $address = $_POST['Address'];
                $address2 = $_POST['Address2'];
                $city = $_POST['City'];
                $state = $_POST['State'];
                $zip = $_POST['Zip'];
                $homePhone = $_POST['HomePhone'];
                $cellPhone = $_POST['CellPhone'];
                $email = $_POST['Email'];
                $giftType = $_POST['GiftType'];
                $paymentType = 'CC';
                $cardNumber = $_POST['CardNumber'];
                $expiration = $_POST['Month'] . '/' . $_POST['Year'];
                $CVV2 = $_POST['CVV2'];
                $securityID = $_POST['SecurityID'];
                // Amount Information
                
                
                
                $xmlfile = "../assets/OfficialPayments/" . $name . $paymentType . ".xml";
                $file = fopen($xmlfile,"w");
                
                $xml_document = '<?xml version="1.0" encoding="utf-8"?>
       <Payment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <ApplicationID>3968</ApplicationID>
          <SkinID>3700</SkinID>
          <UniqueID />
          <BaseAmount>' . $amount . '</BaseAmount>
          <ConvenienceFee>0.00</ConvenienceFee>
          <ErrorURL>http://website/departments/advancement/support-pnwu?error=1</ErrorURL>
          <PostbackURL>http://website/departments/advancement/postback</PostbackURL>
          <Processor>OPC</Processor>
          <ReturnURL>http://website/departments/advancement/support-pnwu?success=1</ReturnURL>
          <DisplayTerms />
          <ItemID />
          <TimeoutURL>http://website/departments/advancement/support-pnwu?timeout=1</TimeoutURL>
          <PaymentMethod>'. $paymentType .'</PaymentMethod>
          <PaymentTypes>AE|DS|MC|VI</PaymentTypes>
          <ShowCVV2>true</ShowCVV2>
       </Payment>';
                
                fwrite($file, $xml_document);
                fclose($file);
       }
       
       /*public function FormAttributes() {
       
          if(!isset($_GET['confirm'])) {   
             $attr = parent::FormAttributes();
             // Do your manipulations
             $attr = 'id="DonationForm_DonationForm" action="http://localhost/pnwu/home/new-testpage/?confirm=1" method="post" enctype="application/x-www-form-urlencoded"';
             return $attr;
          } else if(isset($_GET['confirm']) && $_GET['confirm'] == '1') {
             $attr = parent::FormAttributes();
             // Do your manipulations
             $attr = 'id="DonationForm_DonationForm" action="https://remoteWebsite/payselect/payselect_epayprocessor.asmx" method="post" enctype="application/x-www-form-urlencoded"';
             return $attr;
          }
       }*/
       
       function forTemplate() {
       
          return $this->renderWith(array(
             $this->class,
             'Form'
          ));
       
       }

    }

    DonationForm.ss -

    <% require javascript(http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js ) %>
    <div id="text2">
    <form $FormAttributes>
    <fieldset>
          <h3 align="center">Donor Information</h3>
          <table cellpadding="4">
             <tr>
                <td colspan="4">$dataFieldByName(Prefix)</td>
             </tr>
             <tr>
                <td><label>First Name: </label>$dataFieldByName(FirstName)</td>
                <td colspan="2"><label>Last Name: </label>$dataFieldByName(LastName)</td>
                <td align="right"><label>Initial: </label>$dataFieldByName(MI)</td>
             </tr>
             <tr>
                <td><label>Spouse, First Name: </label>$dataFieldByName(SpouseFirst)</td>
                <td colspan="2"><label>Last Name: </label>$dataFieldByName(SpouseLast)</td>
                <td align="right"><label>Initial: </label>$dataFieldByName(SpouseMI)</td>
             </tr>
             <tr>
                <td>Is this $dataFieldByName(Type) information?</td>
                <td colspan="3" align="right"><label>Name of Business: $dataFieldByName(Business)</td>
             </tr>
             <tr>
                <td><label>Occupation: </label>$dataFieldByName(Occupation)</td>
                <td><label>Title/Suffix: </label>$dataFieldByName(Suffix)</td>
                <td colspan="2" align="right"><label>Email: </label>$dataFieldByName(Email)</td>
             </tr>
             <tr>
                <td><label>Address: </label>$dataFieldByName(Address)</td>
                <td><label>City: </label>$dataFieldByName(City)</td>
                <td><label>State: </label>$dataFieldByName(State)</td>
                <td align="right"><label>Zip: </label>$dataFieldByName(Zip)</td>
             </tr>
             <tr>
                <td><label>Phone: </label>$dataFieldByName(Phone)</td>
                <td colspan="2"><label>(Business) </label>$dataFieldByName(BusinessPh)</td>
                <td align="right"><label>(Mobile) </label>$dataFieldByName(MobilePh)</td>
             </tr>
          </table>
          <h3 align="center">Donation Details</h3>
          <table background="#a0a0a0">
             <tr>
                <td rowspan="2">$dataFieldByName(GiftType)</td>
                <td>$dataFieldByName(BaseAmount)</td>
                <td>One-time <i>cash</i> gift.</td>
             </tr>
             <tr>
                <td>$dataFieldByName(RecurringAmount)</td>
                <td>Pledge, to be paid over a period of $dataFieldByName(Years) years.</td>
             </tr>
             <tr>
                <td align="right" colspan="2">First Payment of $dataFieldByName(MonthlyAmount)</td>
                <td> will be made (month) $dataFieldByName(Month) of (year) $dataFieldByName(Year)</td>
             </tr>
             <tr>
                <td align="left" colspan="2">In equal installments of $dataFieldByName(InstallAmount)</td>
                <td>$dataFieldByName(RemindMe) Please send me pledge reminders.
             </tr>
             <tr>
                <td colspan="3">&nbsp;</td>
             </tr>
             <tr>
                <td colspan="3">Please indicate how your name(s) should appear on our published list of donors: <br />$dataFieldByName(DisplayAs)</td>
             </tr>
             <tr>
                <td colspan="3">&nbsp;</td>
             </tr>
             <tr>
                <td colspan="2" align="right">$dataFieldByName(PaymentType)</td>
                <td><% control actions %>$Field<% end_control %></td>
             </tr>
          </table>
          </fieldset>
       </form>
    </div>

    Sorry for the length but I couldn't attach the files.

  • TDNP
    Avatar
    Community Member
    19 Posts

    Re: Form behavior in Custom Template Link to this post

    A little more on the subject. It appears that by creating the form template and adding the fields this way, the action that is applied via the "submit" button is not being called. In this case, the XMLWrite function is not being run. I tested by removing the rest of the code and just used:
    Director::redirect(Director::baseURL() . $this->URLSegment . "/?confirm=1");

    The redirect did not happen. Anyone know why the $action is not working?

    962 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.