/**
  * @param Controller $controller
  * @param Job $job (optional)
  */
 public function __construct($controller, $job = null)
 {
     if ($job) {
         $fields = $job->getFields();
         $required = $job->getValidator();
     } else {
         $fields = singleton('Job')->getFields();
         $required = singleton('Job')->getValidator();
     }
     $fields->merge(new FieldList(new LiteralField('Conditions', $controller->TermsAndConditionsText), new HiddenField('BackURL', '', $controller->Link('thanks')), new HiddenField('EmailFrom', '', $controller->getJobEmailFromAddress()), new HiddenField('EmailSubject', '', $controller->getJobEmailSubject()), $jobId = new HiddenField('JobID')));
     if ($job) {
         $jobId->setValue($job->ID);
         $actions = new FieldList(new FormAction('doEditJob', _t('Jobboard.EDITLISTING', 'Edit Listing')));
     } else {
         $actions = new FieldList(new FormAction('doAddJob', _t('JobBoard.CONFIRM', 'Confirm')));
     }
     parent::__construct($controller, 'AddJobForm', $fields, $actions, $required);
     $this->setFormAction('JobBoardFormProcessor/doJobForm');
     $this->setFormMethod('POST');
     if ($job) {
         $this->loadDataFrom($job);
     } else {
         $this->enableSpamProtection();
     }
 }
 /**
  * Return the form's action attribute.
  * This is build by adding an executeForm get variable to the parent controller's Link() value
  *
  * @return string
  */
 public function FormAction()
 {
     if ($this->formActionPath) {
         return $this->formActionPath;
     } elseif ($this->controller->hasMethod("FormObjectLink")) {
         return $this->controller->FormObjectLink($this->name);
     } else {
         return Controller::join_links($this->controller->Link(), $this->name);
     }
 }
 /**
  * @param Controller $controller
  * @param String $name
  */
 function __construct($controller, $name)
 {
     Requirements::themedCSS("EmailReferral", "emailreferral");
     Requirements::javascript(THIRDPARTY_DIR . "/jquery/jquery.js");
     Requirements::javascript("emailreferral/javascript/EmailReferralForm.js");
     $fields[] = new HiddenField('PageID', 'PageID', $controller->dataRecord->ID);
     $fields[] = new EmailField('YourMailAddress', $this->Config()->get("your_email_address_label"));
     $fields[] = new TextareaField('Message', $this->Config()->get("message_label"), $this->Config()->get("EmailAFriendExtension", "default_message"));
     if ($this->Config()->get("mail_to_site_owner_only") != 'yes') {
         $fields[] = new LiteralField('AdditionalMessage', '<div id="additionalMessageStuff"><p>' . Director::absoluteURL($controller->Link()) . '</p><p>Sent by: <span id="emailReplacer">[your email address]</span></p></div>');
         $fields[] = new EmailField('To', $this->Config()->get("friend_email_address_label"));
     }
     $fields = new FieldList($fields);
     $actions = new FieldList(new FormAction('sendemailafriend', $this->Config()->get("send_label")));
     if ($this->Config()->get("mail_to_site_owner_only") != 'yes') {
         $requiredFields = new RequiredFields(array('YourMailAddress', 'To', 'Message'));
     } else {
         $requiredFields = new RequiredFields(array('YourMailAddress', 'Message'));
     }
     parent::__construct($controller, $name, $fields, $actions, $requiredFields);
 }
 /**
  * Renders the search results into a template. Either
  * the search results template or the Atom feed
  */
 public function renderResults()
 {
     if (!$this->results) {
         $this->performSearch();
     }
     if (!$this->outputController) {
         return user_error('Call renderResults() on a DocumentationViewer instance.', E_USER_ERROR);
     }
     $request = $this->outputController->getRequest();
     $data = $this->getSearchResults($request);
     $templates = array('DocumentationViewer_results', 'DocumentationViewer');
     if ($request->requestVar('format') && $request->requestVar('format') == "atom") {
         // alter the fields for the opensearch xml.
         $title = ($title = $this->getTitle()) ? ' - ' . $title : "";
         $link = Controller::join_links($this->outputController->Link(), 'DocumentationOpenSearch_Controller/description/');
         $data->setField('Title', $data->Title . $title);
         $data->setField('DescriptionURL', $link);
         array_unshift($templates, 'OpenSearchResults');
     }
     return $this->outputController->customise($data)->renderWith($templates);
 }
 /**
  * creates a form field from the definition; sets standard values if they
  * are not defined
  *
  * @param string $fieldName       the field's name
  * @param array  $fieldDefinition the field definitions
  *
  * @return Field
  *
  * @throws Exception
  * @author Sascha Koehler <*****@*****.**>,
  *         Sebastian Diel <*****@*****.**>
  * @since 04.03.2014
  */
 public function getFormField($fieldName, $fieldDefinition)
 {
     if (!isset($fieldDefinition['type'])) {
         throw new Exception('CustomHtmlForm: Field type must be specified.');
     }
     // SelectionGroup fields use '//' as separator for key/label definition
     if (strpos($fieldName, '//') !== false) {
         list($fieldName, $fieldLabel) = explode('//', $fieldName, 2);
     }
     foreach ($this->fieldGroups as $groupFields) {
         if (isset($groupFields[$fieldName])) {
             $fieldReference =& $groupFields[$fieldName];
             break;
         }
     }
     $this->addRequiredFieldParams($fieldDefinition, $fieldReference);
     // create field
     if (CustomHtmlFormTools::isListboxField($fieldDefinition['type'])) {
         $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value'], $fieldDefinition['selectedValue'], $fieldDefinition['size'], $fieldDefinition['multiple'], $fieldDefinition['form']);
     } else {
         if (CustomHtmlFormTools::isDropdownField($fieldDefinition['type'])) {
             if ($fieldDefinition['type'] == 'TreeDropdownField') {
                 Requirements::css(FRAMEWORK_DIR . '/css/TreeDropdownField.css');
                 Requirements::css('customhtmlform/css/TreeDropdownField.css');
                 $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['sourceObject'], $fieldDefinition['selectedValue'], $fieldDefinition['labelField'], $fieldDefinition['showSearch']);
                 if (array_key_exists('treeBaseID', $fieldDefinition)) {
                     $field->setTreeBaseID($fieldDefinition['treeBaseID']);
                 }
                 if (array_key_exists('value', $fieldDefinition)) {
                     $field->setValue($fieldDefinition['value']);
                 }
             } else {
                 $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value'], $fieldDefinition['selectedValue'], $fieldDefinition['form']);
             }
         } else {
             if (CustomHtmlFormTools::isOptionsetField($fieldDefinition['type'])) {
                 $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value'], $fieldDefinition['selectedValue'], $fieldDefinition['form']);
             } else {
                 if (CustomHtmlFormTools::isSelectiongroupField($fieldDefinition['type'])) {
                     $groupFields = array();
                     foreach ($fieldDefinition['items'] as $itemFieldName => $item) {
                         $itemObj = $this->getFormField($itemFieldName, $item);
                         $groupFields[$itemFieldName] = $itemObj;
                     }
                     if (empty($groupFields)) {
                         return false;
                     }
                     $field = new $fieldDefinition['type']($fieldName, $groupFields);
                     $field->value = $fieldDefinition['value'];
                 } else {
                     if (CustomHtmlFormTools::isTextField($fieldDefinition['type'])) {
                         $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value']);
                         $field->setMaxLength($fieldDefinition['maxLength']);
                         $field->setForm($fieldDefinition['form']);
                         if (isset($fieldDefinition['placeholder']) && method_exists($field, 'setPlaceholder')) {
                             $field->setPlaceholder($fieldDefinition['placeholder']);
                         }
                         if (isset($fieldDefinition['configuration']) && is_array($fieldDefinition['configuration']) && method_exists($field, 'setConfig')) {
                             foreach ($fieldDefinition['configuration'] as $key => $value) {
                                 $field->setConfig($key, $value);
                             }
                         }
                     } else {
                         if ($fieldDefinition['type'] == 'PtCaptchaImageField') {
                             $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value'], $fieldDefinition['maxLength'], $fieldDefinition['form']);
                         } else {
                             if ($fieldDefinition['type'] == 'PasswordField') {
                                 $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value']);
                                 $field->setMaxLength($fieldDefinition['maxLength']);
                             } else {
                                 if ($fieldDefinition['type'] == 'DateField') {
                                     $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value'], $fieldDefinition['form']);
                                     $field->setMaxLength(16);
                                     if (isset($fieldDefinition['configuration']) && is_array($fieldDefinition['configuration'])) {
                                         foreach ($fieldDefinition['configuration'] as $key => $value) {
                                             $field->setConfig($key, $value);
                                         }
                                     }
                                 } else {
                                     if (CustomHtmlFormTools::isTextareaField($fieldDefinition['type'])) {
                                         if (!isset($fieldDefinition['rows'])) {
                                             $fieldDefinition['rows'] = 10;
                                             $fieldReference['rows'] = $fieldDefinition['rows'];
                                         }
                                         if (!isset($fieldDefinition['cols'])) {
                                             $fieldDefinition['cols'] = 10;
                                             $fieldReference['cols'] = $fieldDefinition['cols'];
                                         }
                                         $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value']);
                                         $field->setColumns($fieldDefinition['cols']);
                                         $field->setRows($fieldDefinition['rows']);
                                         $field->setForm($fieldDefinition['form']);
                                         if (isset($fieldDefinition['placeholder']) && method_exists($field, 'setPlaceholder')) {
                                             $field->setPlaceholder($fieldDefinition['placeholder']);
                                         }
                                     } else {
                                         if ($fieldDefinition['type'] == 'MultipleImageUploadField' || $fieldDefinition['type'] == 'MultipleFileUploadField') {
                                             if (isset($fieldDefinition['configuration']) && is_array($fieldDefinition['configuration'])) {
                                                 $configuration = $fieldDefinition['configuration'];
                                             } else {
                                                 $configuration = array();
                                             }
                                             $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $configuration, $fieldDefinition['form']);
                                             if (isset($fieldDefinition['filetypes']) && is_array($fieldDefinition['filetypes'])) {
                                                 $field->setFileTypes($fieldDefinition['filetypes']);
                                             }
                                             $field->setVar('script', urlencode($this->controller->Link() . 'uploadifyUpload'));
                                             $field->setVar('refreshlink', $this->controller->Link() . 'uploadifyRefresh');
                                             $field->setVar('refreshlink', $this->controller->Link() . 'uploadifyRefresh');
                                             if (isset($fieldDefinition['configuration']) && is_array($fieldDefinition['configuration']) && isset($fieldDefinition['configuration']['uploadFolder'])) {
                                                 $field->setUploadFolder($fieldDefinition['configuration']['uploadFolder']);
                                             } else {
                                                 $field->setUploadFolder('Uploads');
                                             }
                                             if (isset($fieldDefinition['value']) && is_array($fieldDefinition['value'])) {
                                                 $field->setValue($fieldDefinition['value']);
                                             }
                                         } else {
                                             if ($fieldDefinition['type'] == 'UploadField' || $fieldDefinition['type'] == 'CommunityImageUploadField' || $fieldDefinition['type'] == 'CommunityImageUploadField_Readonly') {
                                                 $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value']);
                                                 if (array_key_exists('configuration', $fieldDefinition) && is_array($fieldDefinition['configuration'])) {
                                                     foreach ($fieldDefinition['configuration'] as $key => $value) {
                                                         $field->setConfig($key, $value);
                                                     }
                                                 }
                                                 if (array_key_exists('allowedExtensions', $fieldDefinition) && is_array($fieldDefinition['allowedExtensions'])) {
                                                     $field->getValidator()->setAllowedExtensions($fieldDefinition['allowedExtensions']);
                                                 }
                                                 if (array_key_exists('folderName', $fieldDefinition)) {
                                                     $field->setFolderName($fieldDefinition['folderName']);
                                                 }
                                                 if (array_key_exists('record', $fieldDefinition)) {
                                                     $field->setRecord($fieldDefinition['record']);
                                                 }
                                                 if (array_key_exists('alternativeLink', $fieldDefinition)) {
                                                     $field->setAlternativeLink($fieldDefinition['alternativeLink']);
                                                 }
                                                 if (array_key_exists('showTitleField', $fieldDefinition)) {
                                                     $field->setShowTitleField($fieldDefinition['showTitleField']);
                                                 }
                                                 if (array_key_exists('showDescriptionField', $fieldDefinition)) {
                                                     $field->setShowDescriptionField($fieldDefinition['showDescriptionField']);
                                                 }
                                             } else {
                                                 if ($fieldDefinition['type'] == 'TreeMultiselectField') {
                                                     Requirements::css(FRAMEWORK_DIR . '/css/TreeDropdownField.css');
                                                     Requirements::css('customhtmlform/css/TreeDropdownField.css');
                                                     if (array_key_exists('keyField', $fieldDefinition)) {
                                                         $fieldDefinition['selectedValue'] = $fieldDefinition['keyField'];
                                                     }
                                                     $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['sourceObject'], $fieldDefinition['selectedValue'], $fieldDefinition['labelField'], $fieldDefinition['showSearch']);
                                                     if (array_key_exists('treeBaseID', $fieldDefinition)) {
                                                         $field->setTreeBaseID($fieldDefinition['treeBaseID']);
                                                     }
                                                     if (array_key_exists('value', $fieldDefinition)) {
                                                         $field->setValue($fieldDefinition['value']);
                                                     }
                                                 } else {
                                                     $formFieldHandler = self::getRegisteredFormFieldHandlerForType($fieldDefinition['type']);
                                                     if ($formFieldHandler) {
                                                         $field = $formFieldHandler->getFormField($fieldName, $fieldDefinition);
                                                     } else {
                                                         $field = new $fieldDefinition['type']($fieldName, $fieldDefinition['title'], $fieldDefinition['value']);
                                                         $field->setForm($fieldDefinition['form']);
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     if (method_exists($field, 'addExtraClass') && array_key_exists('extraClasses', $fieldDefinition) && is_array($fieldDefinition['extraClasses'])) {
         foreach ($fieldDefinition['extraClasses'] as $extraClass) {
             $field->addExtraClass($extraClass);
         }
     }
     // add error message for a field if defined
     if (isset($this->errorMessages[$fieldName])) {
         $field->errorMessage = new ArrayData(array('message' => $this->errorMessages[$fieldName]['message']));
     }
     // set identifier for mandatory fields
     if (isset($fieldDefinition['checkRequirements']) && isset($fieldDefinition['checkRequirements']['isFilledIn']) && $fieldDefinition['checkRequirements']['isFilledIn']) {
         $field->isRequiredField = true;
     } else {
         $field->isRequiredField = false;
     }
     if ($this->useCustomTabIndex()) {
         if (!in_array($this->name, self::$customTabIndexForms)) {
             self::$customTabIndexForms[] = $this->name;
         }
         $baseIndex = count(self::$customTabIndexForms) * 100;
         $tabIndex = $baseIndex + (int) $fieldDefinition['tabIndex'];
         if ($tabIndex > $this->highestTabIndex) {
             $this->highestTabIndex = $tabIndex;
         }
         if ($tabIndex == $baseIndex) {
             $tabIndex = ++$this->highestTabIndex;
         }
         $field->setTabIndex($tabIndex);
     }
     if (array_key_exists('isReadonly', $fieldDefinition) && $fieldDefinition['isReadonly'] == true && method_exists($field, 'setReadonly')) {
         $field->setReadonly(true);
     }
     if (array_key_exists('isDisabled', $fieldDefinition) && $fieldDefinition['isDisabled'] == true && method_exists($field, 'setDisabled')) {
         $field->setDisabled(true);
     }
     if (array_key_exists('data', $fieldDefinition) && $field instanceof FormField) {
         foreach ($fieldDefinition['data'] as $key => $value) {
             $field->setAttribute('data-' . $key, $value);
         }
     }
     return $field;
 }
 public function Link()
 {
     return Controller::join_links($this->parentController->Link(), $this->urlSegment);
 }