Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

All other Modules /

Discuss all other Modules here.

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

User Defined Form


Go to End


2 Posts   817 Views

Avatar
swaiba

Forum Moderator, 1899 Posts

27 July 2011 at 9:25pm

Hi,

I am adding the Highrise API to submit information from a user defined for to highrise (with name / email to create the person and everything else into a note). I'd like to create validation for the User defined from that if my new check box...


	/**
	 * @var Array Fields on the user defined form page.
	 */
	static $db = array(
		"SubmitButtonText" => "Varchar",
		"OnCompleteMessage" => "HTMLText",
		"ShowClearButton" => "Boolean",
		'DisableSaveSubmissions' => 'Boolean',
		'SendResultsToHighrise' => 'Boolean'  //<---- new check box, also added on the submission page
	);

when this is checked the form is required to have three fields firstname, lastname and email - how would I add this in a validator?

Avatar
swaiba

Forum Moderator, 1899 Posts

31 July 2011 at 9:07pm

To anwser this myself...

class UserDefinedForm extends Page {
...
	function getCMSValidator() {
		return new UserDefinedForm_Validator();
	}
}

class UserDefinedForm_Validator extends RequiredFields {

	function ExistsAndRequired($f,$strTitle,$strType) {
		return (
			isset($f['Title']) && isset($f['Type']) && isset($f['Required']) &&
			$f['Title'] == $strTitle && $f['Type'] == $strType && $f['Required'] == 1
		);
	}

	function php($data) {
		$bRet = parent::php($data);

		$bFirstname = false;
		$bLastname = false;
		$bEmail = false;

		if (count($data['Fields'])) foreach ($data['Fields'] as $field) {
			if ($this->ExistsAndRequired($field,'Firstname','EditableTextField')) $bFirstname =true;
			if ($this->ExistsAndRequired($field,'Surname','EditableTextField')) $bLastname =true;
			if ($this->ExistsAndRequired($field,'Email','EditableEmailField')) $bEmail =true;
		}

		if ($data['SendResultsToHighrise']==1) {
			if (!($bFirstname && $bLastname && $bEmail)) {
				$this->validationError('Fields','Firstname, Lastname & Email fields are required to send details to Highrise',"required");$bRet = false;
			}
		}

		return $bRet;
	}
}