/** * @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); }