if (isset($_POST['submit'])) {
$customer = $modx->newObject('quoteCustomer', $customer_fields);//name, email, phone
$request = $modx->newObject('quoteRequest', $request_fields);// itinerary,shipping details
$request>addOne($customer);
if ($request->save()) {
// Send report via Formit
$params = array(
'hooks' => $hooks,
'emailSubject' => $emailSubject,
'emailTpl' => $emailTpl,
'emailTo' => $emailTo,
'emailReplyTo' => $emailReplyTo,
'emailReplyToName' => $emailReplyToName,
'redirectTo' => $redirectTo,
'store' => $store,
'validate' => $validate
);
$output = $modx->runSnippet('Formit', $params);
} else {
$output = "An error occurred while saving the quote request.";
}
} else {
// Display the form before submission
$output = $modx->getChunk($tpl);
}
return $output;
// Save quote and send email report
if (isset($_POST['submit'])) {
// Form has been submitted
// submissionId is supplied via url
$request = $modx->getObject('quoteRequest', array(
'submissionid' => $submissionId
));
$process = $modx->newObject('quoteProcess', $process_fields);
$customer = $modx->getObject('quoteCustomer', $customerId);
$process->addOne($request);
$process->addOne($customer);
if ($process->save()) {
// Quote saved successfully. Send report via Formit
$params = array(
'hooks' => $hooks,
'emailSubject' => $emailSubject,
'emailTpl' => $emailTpl,
'emailTo' => $emailTo,
'emailReplyTo' => $emailReplyTo,
'emailReplyToName' => $emailReplyToName,
'redirectTo' => $redirectTo,
'store' => $store,
'validate' => $validate
);
$output = $modx->runSnippet('Formit', $params);
} else {
// Quote save failed. Show error.
$output = $modx->getChunk('tplQuotesError', array(
'content' => 'An error occurred while saving the quote.'
));
return $output;
}
} else {
// Display the form before submission
$output = $modx->getChunk($tpl, $request->toArray());
}
} else {
// No submission ID supplied
// Display a blank form, save the quote and
// send email report via Formit
....
}
This question has been answered by treigh. See the first response.
<?xml version="1.0" encoding="UTF-8"?> <model package="quotes" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1"> <!-- This extends modUser and adds the relations into the extended class. This way we don't need to modify the MODX schema. --> <object class="extUser" extends="modUser"> <composite alias="bookedBy" class="quoteBooking" local="id" foreign="bookedby" cardinality="one" owner="local" /> </object> <object class="quoteCustomer" table="quotes_customers" extends="xPDOSimpleObject"> <field key="firstname" dbtype="varchar" precision="100" phptype="string" null="false" default="" /> <field key="lastname" dbtype="varchar" precision="100" phptype="string" null="false" default="" /> <field key="email" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="phone" dbtype="varchar" precision="100" phptype="string" null="false" default="" /> <field key="company" dbtype="varchar" precision="100" phptype="string" null="false" default="" /> <field key="website" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <composite alias="Request" class="quoteRequest" local="id" foreign="customer" cardinality="many" owner="local" /> <composite alias="Process" class="quoteProcess" local="id" foreign="customer" cardinality="many" owner="local" /> <composite alias="Booking" class="quoteBooking" local="id" foreign="customer" cardinality="many" owner="local" /> </object> <object class="quoteRequest" table="quotes_requests" extends="xPDOSimpleObject"> <field key="customer" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="movingdate" dbtype="int" precision="11" phptype="integer" null="false" default="0" /> <field key="movingtime" dbtype="char" precision="11" phptype="string" null="false" default="" /> <field key="streetnumber_pickup" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="streetname_pickup" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="unit_pickup" dbtype="char" precision="10" phptype="string" null="false" default="" /> <field key="country_pickup" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="city_pickup" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="province_pickup" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="postalcode_pickup" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="homesize_pickup" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="hometype_pickup" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="floor_pickup" dbtype="varchar" precision="10" phptype="string" null="false" default="" /> <field key="flooraccess_pickup" dbtype="varchar" precision="11" phptype="string" null="false" default="" /> <field key="streetnumber_dropoff" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="streetname_dropoff" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="unit_dropoff" dbtype="char" precision="10" phptype="string" null="false" default="" /> <field key="country_dropoff" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="city_dropoff" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="province_dropoff" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="postalcode_dropoff" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="homesize_dropoff" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="hometype_dropoff" dbtype="varchar" precision="25" phptype="string" null="false" default="" /> <field key="floor_dropoff" dbtype="varchar" precision="10" phptype="string" null="false" default="" /> <field key="flooraccess_dropoff" dbtype="varchar" precision="11" phptype="string" null="false" default="" /> <field key="contentlist" dbtype="text" phptype="string" null="false" default="" /> <field key="comment" dbtype="text" phptype="string" null="false" default="" /> <field key="ip" dbtype="varchar" precision="15" phptype="string" null="false" default="" /> <field key="referrer" dbtype="varchar" precision="100" phptype="string" null="false" default="" /> <field key="refhost" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="refquery" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="refispaid" dbtype="char" precision="3" phptype="string" null="false" default="" /> <field key="submissiondate" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="submissionid" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="ismobile" dbtype="tinyint" precision="1" attributes="unsigned" phptype="boolean" null="false" default="0" index="index" /> <!-- ONE-TO-ONE: ...--> <aggregate alias="Customer" class="quoteCustomer" local="customer" foreign="id" cardinality="one" owner="foreign" /> <!-- ONE-TO-MANY: ...--> <composite alias="Process" class="quoteProcess" local="id" foreign="request" cardinality="many" owner="local" /> <composite alias="Booking" class="quoteBooking" local="id" foreign="request" cardinality="many" owner="local" /> </object> <object class="quoteProcess" table="quotes_processed" extends="xPDOSimpleObject"> <field key="customer" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="request" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="load" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="drive" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="offload" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="travel" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="fuel" dbtype="int" precision="6" phptype="integer" null="false" default="" /> <field key="other" dbtype="int" precision="6" phptype="integer" null="false" default="" /> <field key="discount" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="firsthour" dbtype="int" precision="6" phptype="integer" null="false" default="" /> <field key="halfhour" dbtype="int" precision="6" phptype="integer" null="false" default="" /> <field key="crewsize" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="trucksize" dbtype="int" precision="3" phptype="integer" null="false" default="" /> <field key="optinsurance" dbtype="tinyint" precision="1" attributes="unsigned" phptype="boolean" null="false" default="0" index="index" /> <field key="comment" dbtype="text" phptype="string" null="false" default="" /> <field key="ip" dbtype="varchar" precision="15" phptype="string" null="false" default="" /> <field key="submissionid" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <index alias="optinsurance" name="optinsurance" primary="false" unique="false" type="BTREE" > <column key="optinsurance" length="" collation="A" null="false" /> </index> <!-- ONE-TO-ONE: ...--> <aggregate alias="Customer" class="quoteCustomer" local="customer" foreign="id" cardinality="one" owner="foreign" /> <aggregate alias="Request" class="quoteRequest" local="request" foreign="id" cardinality="one" owner="foreign" /> <!-- ONE-TO-MANY: ...--> <composite alias="Booking" class="quoteBooking" local="id" foreign="estimate" cardinality="many" owner="local" /> </object> <object class="quoteBooking" table="quotes_bookings" extends="xPDOSimpleObject"> <field key="customer" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="request" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="estimate" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="bookedby" dbtype="int" precision="10" phptype="integer" null="false" default="0" /> <field key="confirmation" dbtype="varchar" precision="255" phptype="string" null="false" default="" /> <field key="bookingdate" dbtype="int" precision="11" phptype="integer" null="false" default="0" /> <field key="spins" dbtype="text" phptype="string" null="false" default="" /> <aggregate alias="Request" class="quoteRequest" local="request" foreign="id" cardinality="one" owner="foreign" /> <aggregate alias="Process" class="quoteProcess" local="estimate" foreign="id" cardinality="one" owner="foreign" /> <aggregate alias="Customer" class="quoteCustomer" local="customer" foreign="id" cardinality="one" owner="foreign" /> <aggregate alias="bookedBy" class="modUser" local="bookedby" foreign="id" cardinality="one" owner="foreign" /> </object> </model>
<?php
// Save quote and send email report
if (isset($_POST['submit'])) {
// Form has been submitted
// submissionId is supplied via url
$request = $modx->getObject('quoteRequest', array('submissionid' => $submissionId));
$process = $modx->newObject('quoteProcess', $process_fields);
$process->set('request',$request->get('id'));
$process->set('customer',$request->get('customer'));
if ($process->save()) {
} else {
}
} else {
}
<?php
// Default properties (Formit)
// ===========================
...
// Load class
// ==========
...
// Save quote request form data
// Then send email reports with formit
// ===================================
$submissionId = $modx->getOption('submissionId', $scriptProperties, htmlspecialchars($_GET["submission"]));
// submissionId is supplied via url
$request = $modx->getObject('quoteRequest', array('submissionid' => $submissionId));
// Show error message if quote request is not found
// with supplied submissionId
if (empty($request)) {
$output = $modx->getChunk('tplQuotesError', array('content' => 'Could not find Quote Request with ID: ' . $submissionId));
return $output;
}
// Get the related customer + assign placeholders
$customer = $request->getOne('Customer');
$customerId = $customer->get('id');
$firstname = $customer->get('firstname');
$lastname = $customer->get('lastname');
$email = $customer->get('email');
$phone = $customer->get('phone');
$modx->setPlaceholders(array(
'customerid' => $customerId,
'firstname' => $firstname,
'lastname' => $lastname,
'email' => $email,
'phone' => $phone
), 'eq.');
// Customer fields
$customer_fields = array(
'firstname' => isset($_POST['firstname']) && (!empty($_POST['firstname'])) ? $_POST['firstname'] : '',
'lastname' => isset($_POST['lastname']) && (!empty($_POST['lastname'])) ? $_POST['lastname'] : '',
'email' => isset($_POST['email']) && (!empty($_POST['email'])) ? $_POST['email'] : '',
'phone' => isset($_POST['phone']) && (!empty($_POST['phone'])) ? $_POST['phone'] : ''
);
// Quote request fields => Will be used later. Not needed now.
$request_fields = array(
...
);
// Quote process fields
$process_fields = array(
'request' => $request->get('id'), // If I Change this to a number e.g.: 'request' => 32, the value is saved properly. Otherwise, it's saving '1' into that field.
'customer' => $customerId, // Same case as above.
...
);
// Ceate quote and send reports
// ============================
if (isset($_POST['submit'])) {
// Form has been submitted
$process = $modx->newObject('quoteProcess', $process_fields);
if ($process->save()) {
// Send report via Formit
$params = array(
...
);
$output = $modx->runSnippet('Formit', $params);
} else {
$output = "An error occurred while saving the quote request.";
}
} else {
// Not a repost, just display the form
// Replace placeholders with existing request values
$output = $modx->getChunk($tpl, $request->toArray());
}
return $output;
$process_fields = array(
'request' => $request->get('id'), // If I Change this to a number e.g.: 'request' => 32, the value is saved properly. Otherwise, it's saving '1' into that field.
'customer' => $customerId, // Same case as above.
);
print_r($process_fields);
die();Array ( [request] => 30 [customer] => 32.
$process = $modx->newObject('quoteProcess');
$process->fromArray($process_fields);
if ($process->save()) {
// Send report via Formit
$params = array(
...
);
$output = $modx->runSnippet('Formit', $params);
} else {
$output = "An error occurred while saving the quote request.";
}