function __construct($controller, $name, $speaker = null, $member = null, $email = null) { // Get the city for the current member if ($member) { $country = $member->Country; } else { $country = ''; } // Fields $FirstNameField = new TextField('FirstName', "Speaker's First Name"); $LastNameField = new TextField('LastName', "Speaker's Last Name"); $TitleField = new TextField('Title', "Speaker's Title"); $BioField = new TextAreaField('Bio', "Speaker's Bio"); // ID Fields $SpeakerIDField = new HiddenField('SpeakerID', 'SpeakerID', ""); $MemberIDField = new HiddenField('MemberID', 'MemberID'); // Replace Fields $ReplaceBioField = new HiddenField('ReplaceBio', 'ReplaceBio', 0); $ReplaceNameField = new HiddenField('ReplaceName', 'ReplaceName', 0); $ReplaceSurnameField = new HiddenField('ReplaceSurname', 'ReplaceSurname', 0); // IRC and Twitter $IRCHandleField = new TextField('IRCHandle', 'IRC Handle <em>(Optional)</em>'); $TwiiterNameField = new TextField('TwitterName', 'Twitter Name <em>(Optional)</em>'); // Upload Speaker Photo $PhotoField = new CustomUploadField('Photo', 'Upload a speaker photo'); $PhotoField->setCanAttachExisting(false); $PhotoField->setAllowedMaxFileNumber(1); $PhotoField->setAllowedFileCategories('image'); $PhotoField->setTemplateFileButtons('CustomUploadField_FrontEndFIleButtons'); $PhotoField->setFolderName('profile-images'); $sizeMB = 2; // 1 MB $size = $sizeMB * 1024 * 1024; // 1 MB in bytes $PhotoField->getValidator()->setAllowedMaxFileSize($size); $PhotoField->setCanPreviewFolder(false); // Don't show target filesystem folder on upload field // Opt In Field $OptInField = new CheckboxField('AvailableForBureau', "I'd like to be in the speaker bureau."); $Divider = new LiteralField('hr', '<hr/>'); // Funded Travel $FundedTravelField = new CheckboxField('FundedTravel', "My Company would be willing to fund my travel to events."); // Country Field $CountryCodes = CountryCodes::$iso_3166_countryCodes; $CountryField = new DropdownField('Country', 'Country', $CountryCodes); $CountryField->setEmptyString('-- Select One --'); $CountryField->setValue($country); $ExpertiseField = new TextareaField('Expertise', 'Topics of interest (one per line)'); // Load Existing Data if present if ($speaker) { $this->record = $speaker; $FirstNameField->setValue($speaker->FirstName); $LastNameField->setValue($speaker->LastName); $BioField->setValue($speaker->Bio); $SpeakerIDField->setValue($speaker->ID); $MemberIDField->setValue($speaker->MemberID); $TitleField->setValue($speaker->Title); $IRCHandleField->setValue($speaker->IRCHandle); $TwiiterNameField->setValue($speaker->TwitterName); $OptInField->setValue($speaker->AvailableForBureau); $FundedTravelField->setValue($speaker->FundedTravel); $ExpertiseField->setValue($speaker->Expertise); $PhotoField->setValue(null, $speaker); } elseif ($member) { $FirstNameField->setValue($member->FirstName); $LastNameField->setValue($member->LastName); $BioField->setValue($member->Bio); $MemberIDField->setValue($member->ID); $IRCHandleField->setValue($member->IRCHandle); $TwiiterNameField->setValue($member->TwitterName); } $fields = new FieldList($FirstNameField, $LastNameField, $TitleField, $BioField, $SpeakerIDField, $MemberIDField, $ReplaceBioField, $ReplaceNameField, $ReplaceSurnameField, $IRCHandleField, $TwiiterNameField, $PhotoField, $Divider, $OptInField, $FundedTravelField, $CountryField, $ExpertiseField); $actions = new FieldList(new FormAction('addAction', 'Save Speaker Details')); $validator = new RequiredFields('FirstName', 'LastName', 'Title'); parent::__construct($controller, $name, $fields, $actions, $validator); }