(Optional)'); $TwiiterNameField = new TextField('TwitterName', 'Twitter Name (Optional)'); // Upload Speaker Photo $PhotoField = new UploadField('Photo', 'Upload a speaker photo'); $PhotoField->setCanAttachExisting(false); $PhotoField->setAllowedMaxFileNumber(1); $PhotoField->setAllowedFileCategories('image'); $PhotoField->setFolderName('profile-images'); $sizeMB = 2; // 1 MB $size = $sizeMB * 1024 * 1024; // 2 MB in bytes $PhotoField->getValidator()->setAllowedMaxFileSize($size); $PhotoField->setCanPreviewFolder(false); // Don't show target filesystem folder on upload field // Load Existing Data if present if ($speaker) { $FirstNameField->setValue($speaker->FirstName); $LastNameField->setValue($speaker->Surname); $BioField->setValue($speaker->Bio); $SpeakerIDField->setValue($speaker->ID); $MemberIDField->setValue($speaker->MemberID); $TitleField->setValue($speaker->Title); $IRCHandleField->setValue($speaker->IRCHandle); $TwiiterNameField->setValue($speaker->TwitterName); } elseif ($member) { $FirstNameField->setValue($member->FirstName); $LastNameField->setValue($member->Surname); $BioField->setValue($member->Bio); $BioField->setValue($member->Bio); $MemberIDField->setValue($member->ID); $IRCHandleField->setValue($member->IRCHandle); $TwiiterNameField->setValue($member->TwitterName); } if ($email) { $EmailField->setValue($email); } $fields = new FieldList( $FirstNameField, $LastNameField, $TitleField, $BioField, $TalkIDField, $SpeakerIDField, $MemberIDField, $IRCHandleField, $TwiiterNameField, $PhotoField, $EmailField ); $actions = new FieldList( new FormAction('addAction', 'Save Speaker Details') ); $validator = new RequiredFields( 'FirstName', 'Surname', 'Title' ); Requirements::customScript(' tinymce.init({ mode: "textareas", resize: false, menubar: false, statusbar: false, setup : function(ed) { ed.onChange.add(function(ed, l) { tinymce.triggerSave(); }); } }); '); parent::__construct($controller, $name, $fields, $actions, $validator); } function forTemplate() { return $this->renderWith(array( $this->class, 'Form' )); } function addAction($data, $form) { // Clear session details Session::clear('AddSpeakerProcess.TalkID'); Session::clear('AddSpeakerProcess.Email'); Session::clear('AddSpeakerProcess.SpeakerID'); // Find and load the talk from the hidden field $TalkID = Convert::raw2sql($data['TalkID']); if ($TalkID && is_numeric($TalkID)) { $Talk = Talk::get()->byID($TalkID); } // Find a site member (in any group) based on the MemberID field if ($data['MemberID'] && is_numeric($data['MemberID'])) { $id = Convert::raw2sql($data['MemberID']); $member = Member::get()->byID($id); } else { $member = NULL; } if ($data['SpeakerID'] && is_numeric($data['SpeakerID'])) { $speaker = Speaker::get()->byID((int)$data['SpeakerID']); } elseif ($member) { $speaker = Speaker::get()->filter('MemberID', $member->ID)->first(); } else { $speaker = NULL; } if (!$member) { $member = new Member(); $form->saveInto($member); } //Find or create the 'speaker' group if (!$userGroup = Group::get()->filter('Code', 'speakers')->first()) { $userGroup = new Group(); $userGroup->Code = "speakers"; $userGroup->Title = "Speakers"; $userGroup->Write(); $member->Groups()->add($userGroup); } //Add member to the group $member->Groups()->add($userGroup); $member->write(); if (!$speaker) { // No speaker, so we'll create one $speaker = new Speaker(); } $form->saveInto($speaker); $speaker->MemberID = $member->ID; $speaker->AdminID = Member::currentUser()->ID; // Attach Photo if ($member->PhotoID && $speaker->PhotoID == 0) { $speaker->PhotoID = $member->PhotoID; } $speaker->write(); if (isset($Talk)) { $Talk->Speakers()->add($speaker); $Talk->write(); } // See if speaker should be prompted to join speaker bureau if ($this->ShouldPromptForBureau($speaker)) { Session::set('SpeakerBureau.TalkID', $TalkID); Controller::curr()->redirect(Controller::curr()->Link() . 'SpeakerBureau/'); } else { Controller::curr()->redirect($form->controller()->Link() . 'SpeakerList/' . $data['TalkID']); } } function ShouldPromptForBureau($speaker) { if (!$speaker->AskedAboutBureau) return TRUE; } }