mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
ca87b8b794
Fixes: http://open.silverstripe.org/ticket/4431. Changes Form and Form Field classes to make use of Convert::raw2htmlid() which follows http://www.w3.org/TR/REC-html40/types.html#type-cdata. Introduces a FormTemplateHelper class to assist in these sort of updates in the future.
123 lines
2.5 KiB
PHP
123 lines
2.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* A helper class for managing {@link Form} and {@link FormField} HTML template
|
|
* output.
|
|
*
|
|
* This primarily exists to maintain backwards compatibility between Form and
|
|
* FormField template changes since developers may rely on specific HTML output
|
|
* in their applications. Any core changes to templates (such as changing ID's)
|
|
* may have the potential to silently prevent websites from working.
|
|
*
|
|
* To provide a form with a custom FormTemplateHelper use the following snippet:
|
|
*
|
|
* <code>
|
|
* $form->setTemplateHelper('ClassName');
|
|
* </code>
|
|
*
|
|
* Globally, the FormTemplateHelper can be set via the {@link Injector} API.
|
|
*
|
|
* For backwards compatibility, with < 3.2 use the {@link FormTemplateHelper_Pre32}
|
|
* class which will preserve the old style form field attributes.
|
|
*
|
|
* <code>
|
|
* Injector:
|
|
* FormTemplateHelper:
|
|
* class: FormTemplateHelper_Pre32
|
|
* </code>
|
|
*
|
|
* @package framework
|
|
* @subpackage forms
|
|
*/
|
|
class FormTemplateHelper {
|
|
|
|
/**
|
|
* @param Form $form
|
|
*
|
|
* @return string
|
|
*/
|
|
public function generateFormID($form) {
|
|
if($id = $form->getHTMLID()) {
|
|
return Convert::raw2htmlid($id);
|
|
}
|
|
|
|
return Convert::raw2htmlid($form->FormName());
|
|
}
|
|
|
|
/**
|
|
* @param FormField $field
|
|
*
|
|
* @return string
|
|
*/
|
|
public function generateFieldHolderID($field) {
|
|
return $this->generateFieldID($field) . '_Holder';
|
|
}
|
|
|
|
/**
|
|
* Generate the field ID value
|
|
*
|
|
* @param FormField
|
|
*
|
|
* @return string
|
|
*/
|
|
public function generateFieldID($field) {
|
|
if($form = $field->getForm()) {
|
|
return sprintf("%s_%s",
|
|
$form->getHTMLID(),
|
|
Convert::raw2htmlid($field->getName())
|
|
);
|
|
}
|
|
|
|
return Convert::raw2htmlid($field->getName());
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Note that this will cause duplicate and invalid ID attributes.
|
|
*
|
|
* @deprecated 4.0
|
|
*
|
|
* @package framework
|
|
* @subpackage forms
|
|
*/
|
|
class FormTemplateHelper_Pre32 extends FormTemplateHelper {
|
|
|
|
/**
|
|
* @param Form
|
|
*
|
|
* @return string
|
|
*/
|
|
public function generateFormID($form) {
|
|
if($id = $form->getHTMLID()) {
|
|
return $id;
|
|
}
|
|
|
|
return $form->class . '_' . str_replace(array('.', '/'), '', $form->getName());
|
|
}
|
|
|
|
/**
|
|
* @param FormField
|
|
*
|
|
* @return string
|
|
*/
|
|
public function generateFieldHolderID($field) {
|
|
return $field->getName();
|
|
}
|
|
|
|
/**
|
|
* @param FormField
|
|
*
|
|
* @return string
|
|
*/
|
|
public function generateFieldID($field) {
|
|
$name = preg_replace('/(^-)|(-$)/', '', preg_replace('/[^A-Za-z0-9_-]+/', '-', $field->getName()));
|
|
|
|
if($form = $field->getForm()) {
|
|
return $form->FormName() . '_' . $name;
|
|
}
|
|
|
|
return $name;
|
|
}
|
|
}
|