/** * Creates the image and returns the image HTML tag as string. * Please note: The properties are currently not used. * * @param array $properties key value pairs for template variables * * @return string HTML * * @author Sascha Koehler <*****@*****.**>, * Patrick Schneider <*****@*****.**> * Ramon Kupper <*****@*****.**> * @since 05.02.2015 */ public function Field($properties = array()) { if ($this->cachedField === null) { $picture = $this->getPic($this->getNrOfChars()); $this->cachedField = ' <img src="' . CustomHtmlFormTools::getBaseURLSegment() . 'customhtmlformimage/get/cap_' . $picture . '/jpg" width="' . $this->width . '" height="' . $this->height . '" alt="Captcha" /> '; } return $this->cachedField; }
/** * 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; }
/** * Returns the base URL segment that's used for inclusion of css and * javascript files via Requirements. * * @return string * * @author Sascha Koehler <*****@*****.**> * @since 16.02.2012 */ public static function getBaseURLSegment() { if (is_null(self::$baseURLSegment)) { $baseUrl = Director::baseURL(); if ($baseUrl === '/') { $baseUrl = ''; } if (!empty($baseUrl) && substr($baseUrl, -1) != '/') { $baseUrl .= '/'; } self::$baseURLSegment = $baseUrl; } return self::$baseURLSegment; }