248 lines
10 KiB
PHP
Executable File
248 lines
10 KiB
PHP
Executable File
<?php
|
|
namespace phpformbuilder;
|
|
|
|
use phpformbuilder\Validator\Validator;
|
|
|
|
class FormExtended extends Form
|
|
{
|
|
|
|
/* =============================================
|
|
Complete contact form
|
|
============================================= */
|
|
|
|
public function createContactForm()
|
|
{
|
|
$email_icon = '<i class="fa fa-envelope" aria-hidden="true"></i>';
|
|
$phone_icon = '<i class="fa fa-phone" aria-hidden="true"></i>';
|
|
$send_icon = '<i class="fa fa-envelope append" aria-hidden="true"></i>';
|
|
$user_icon = '<i class="fa fa-user" aria-hidden="true" aria-hidden="true"></i>';
|
|
if ($this->framework == 'bs3') {
|
|
$email_icon = '<span class="glyphicon glyphicon-envelope" aria-hidden="true"></span>';
|
|
$phone_icon = '<span class="glyphicon glyphicon-earphone" aria-hidden="true"></span>';
|
|
$send_icon = '<span class="glyphicon glyphicon-envelope append"></span>';
|
|
$user_icon = '<span class="glyphicon glyphicon-user" aria-hidden="true"></span>';
|
|
} elseif ($this->framework == 'foundation') {
|
|
$email_icon = '<i class="input-group-label fi-mail" aria-hidden="true"></i>';
|
|
$phone_icon = '<i class="input-group-label fi-telephone" aria-hidden="true"></i>';
|
|
$send_icon = '<i class="fi-mail append"></i>';
|
|
$user_icon = '<i class="input-group-label fi-torso" aria-hidden="true"></i>';
|
|
} elseif ($this->framework == 'material' && !in_array('materialize', $this->js_plugins)) {
|
|
$email_icon = '<i class="material-icons" aria-hidden="true">alternate_email</i>';
|
|
$phone_icon = '<i class="material-icons" aria-hidden="true">phone</i>';
|
|
$send_icon = '<i class="material-icons right">email</i>';
|
|
$user_icon = '<i class="material-icons" aria-hidden="true">person</i>';
|
|
}
|
|
|
|
$this->startFieldset('Please fill in this form to contact us');
|
|
$this->addHtml('<p class="text-warning">All fields are required</p>');
|
|
$this->groupInputs('user-name', 'user-first-name');
|
|
$this->setCols(0, 6);
|
|
$this->addIcon('user-name', $user_icon, 'before');
|
|
$this->addInput('text', 'user-name', '', '', 'class=input-group-field, placeholder=Name, required');
|
|
$this->addIcon('user-first-name', $user_icon, 'before');
|
|
$this->addInput('text', 'user-first-name', '', '', 'class=input-group-field, placeholder=First Name, required');
|
|
$this->setCols(0, 12);
|
|
$this->addIcon('user-email', $email_icon, 'before');
|
|
$this->addInput('email', 'user-email', '', '', 'class=input-group-field, placeholder=Email, required');
|
|
$this->addIcon('user-phone', $phone_icon, 'before');
|
|
$this->addInput('text', 'user-phone', '', '', 'class=input-group-field, placeholder=Phone, required');
|
|
if ($this->framework == 'material') {
|
|
$this->addTextarea('message', '', 'Your message', 'cols=30, rows=4, required');
|
|
} else {
|
|
$this->addTextarea('message', '', '', 'cols=30, rows=4, required, placeholder=Message');
|
|
}
|
|
$this->addPlugin('word-character-count', '#message', 'default', array('%maxAuthorized%' => 100));
|
|
$this->addCheckbox('newsletter', 'Suscribe to Newsletter', 1, 'checked=checked');
|
|
$this->printCheckboxGroup('newsletter', '');
|
|
$this->setCols(3, 9);
|
|
$this->addInput('text', 'captcha', '', 'Type the following characters :', 'size=15');
|
|
$this->addPlugin('captcha', '#captcha');
|
|
$this->setCols(0, 12);
|
|
$this->centerButtons(true);
|
|
$this->addBtn('submit', 'submit-btn', 1, 'Send ' . $send_icon, 'class=btn btn-lg btn-success success button');
|
|
$this->endFieldset();
|
|
|
|
// Custom radio & checkbox css
|
|
if ($this->framework != 'material') {
|
|
$this->addPlugin('nice-check', 'form', 'default', ['%skin%' => 'green']);
|
|
}
|
|
|
|
// jQuery validation
|
|
$this->addPlugin('formvalidation', '#' . $this->form_ID);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/* Contact form validation */
|
|
|
|
public static function validateContactForm($form_name)
|
|
{
|
|
// create validator & auto-validate required fields
|
|
$validator = self::validate($form_name);
|
|
|
|
// additional validation
|
|
$validator->maxLength(100)->validate('message');
|
|
$validator->email()->validate('user-email');
|
|
$validator->captcha('captcha')->validate('captcha');
|
|
|
|
// check for errors
|
|
|
|
if ($validator->hasErrors()) {
|
|
$_SESSION['errors'][$form_name] = $validator->getAllErrors();
|
|
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* Contact form e-mail sending */
|
|
|
|
public static function sendContactEmail($email_config, $form_ID)
|
|
{
|
|
|
|
// get hostname
|
|
$email_config['filter_values'] = $form_ID . ', captcha, submit-btn, captchaHash';
|
|
$sent_message = self::sendMail($email_config);
|
|
self::clear($form_ID);
|
|
|
|
return $sent_message;
|
|
}
|
|
|
|
/* =============================================
|
|
Fields shorcuts and groups for users
|
|
============================================= */
|
|
|
|
public function addAddress($i = '')
|
|
{
|
|
$index = $this->getIndex($i);
|
|
$index_text = $this->getIndexText($i);
|
|
$this->setCols(3, 9, 'md');
|
|
$this->addTextarea('address' . $index, '', 'Address' . $index_text, 'required');
|
|
$this->groupInputs('zip_code' . $index, 'city' . $index);
|
|
$this->setCols(3, 4, 'md');
|
|
$this->addInput('text', 'zip_code' . $index, '', 'Zip Code' . $index_text, 'required');
|
|
$this->setCols(2, 3, 'md');
|
|
$this->addInput('text', 'city' . $index, '', 'City' . $index_text, 'required');
|
|
$this->setCols(3, 9, 'md');
|
|
$this->addCountrySelect('country' . $index, 'Country' . $index_text, 'class=no-autoinit, data-width=100%, required');
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function addBirth($i = '')
|
|
{
|
|
$index = $this->getIndex($i);
|
|
$index_text = $this->getIndexText($i);
|
|
$this->setCols(3, 4, 'md');
|
|
$this->groupInputs('birth_date' . $index, 'birth_zip_code' . $index);
|
|
$this->addInput('text', 'birth_date' . $index, '', 'Birth Date' . $index_text, 'placeholder=click to open calendar');
|
|
if ($this->framework == 'material') {
|
|
$date_plugin = 'material-datepicker';
|
|
} else {
|
|
$date_plugin = 'pickadate';
|
|
}
|
|
$this->addPlugin($date_plugin, '#birth_date' . $index);
|
|
$this->setCols(2, 3, 'md');
|
|
$this->addInput('text', 'birth_zip_code' . $index, '', 'Birth Zip Code' . $index_text);
|
|
$this->setCols(3, 4, 'md');
|
|
$this->groupInputs('birth_city' . $index, 'birth_country' . $index);
|
|
$this->addInput('text', 'birth_city' . $index, '', 'Birth City' . $index_text);
|
|
$this->setCols(2, 3, 'md');
|
|
$this->addCountrySelect('birth_country' . $index, 'Birth Country' . $index_text, 'class=no-autoinit, data-width=100%');
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function addCivilitySelect($i = '')
|
|
{
|
|
$index = $this->getIndex($i);
|
|
$index_text = $this->getIndexText($i);
|
|
$this->addOption('civility' . $index, 'M.', 'M.');
|
|
$this->addOption('civility' . $index, 'M<sup>rs</sup>', 'Mrs');
|
|
$this->addOption('civility' . $index, 'M<sup>s</sup>', 'Ms');
|
|
$this->addSelect('civility' . $index, 'Civility' . $index_text, 'class=select2 no-autoinit, data-minimum-results-for-search=Infinity, required');
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function addContact($i = '')
|
|
{
|
|
$index = $this->getIndex($i);
|
|
$index_text = $this->getIndexText($i);
|
|
$this->groupInputs('phone' . $index, 'mobile_phone' . $index);
|
|
$this->setCols(3, 4, 'md');
|
|
$this->addInput('text', 'phone' . $index, '', 'Phone' . $index_text);
|
|
$this->setCols(2, 3, 'md');
|
|
$this->addInput('text', 'mobile_phone' . $index, '', 'Mobile' . $index_text, 'required');
|
|
$this->setCols(3, 9, 'md');
|
|
$this->addInput('email', 'email_professional' . $index, '', 'BuisnessE-mail' . $index_text, 'required');
|
|
$this->addInput('email', 'email_private' . $index, '', 'Personal E-mail' . $index_text);
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function addIdentity($i = '')
|
|
{
|
|
$index = $this->getIndex($i);
|
|
$index_text = $this->getIndexText($i);
|
|
$this->groupInputs('civility' . $index, 'name' . $index);
|
|
$this->setCols(3, 2, 'md');
|
|
$this->addCivilitySelect($i);
|
|
$this->setCols(2, 5, 'md');
|
|
$this->addInput('text', 'name' . $index, '', 'Name' . $index_text, 'required');
|
|
$this->setCols(3, 9, 'md');
|
|
$this->startDependentFields('civility' . $index, 'Mrs');
|
|
$this->addInput('text', 'maiden_name' . $index, '', 'Maiden Name' . $index_text);
|
|
$this->endDependentFields();
|
|
$this->groupInputs('firstnames' . $index, 'citizenship' . $index);
|
|
$this->setCols(3, 4, 'md');
|
|
$this->addInput('text', 'firstnames' . $index, '', 'Firstnames' . $index_text, 'required');
|
|
$this->setCols(2, 3, 'md');
|
|
$this->addInput('text', 'citizenship' . $index, '', 'Citizenship' . $index_text);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/* Submit buttons */
|
|
|
|
public function addBackSubmit()
|
|
{
|
|
$this->setCols(0, 12);
|
|
$this->addHtml('<p> </p>');
|
|
$this->addBtn('submit', 'back-btn', 1, 'Back', 'class=btn btn-warning button warning', 'submit_group');
|
|
$this->addBtn('submit', 'submit-btn', 1, 'Submit', 'class=btn btn-success button success', 'submit_group');
|
|
$this->printBtnGroup('submit_group');
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function addCancelSubmit()
|
|
{
|
|
$this->setCols(3, 9);
|
|
$this->addHtml('<p> </p>');
|
|
$this->addBtn('button', 'cancel-btn', 1, 'Cancel', 'class=btn btn-default button warning', 'submit_group');
|
|
$this->addBtn('submit', 'submit-btn', 1, 'Submit', 'class=btn btn-success button primary', 'submit_group');
|
|
$this->printBtnGroup('submit_group');
|
|
|
|
return $this;
|
|
}
|
|
|
|
private function getIndex($i)
|
|
{
|
|
if ($i !== '') {
|
|
return '-' . $i;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
private function getIndexText($i)
|
|
{
|
|
if ($i !== '') {
|
|
return ' ' . $i;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|