<?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( get_class($form) . '_' . str_replace(array('.', '/'), '', $form->getName()) ); } /** * @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", $this->generateFormID($form), 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 sprintf("%s_%s", $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()) { $form = sprintf("%s_%s", get_class($form), str_replace(array('.', '/'), '', $form->getName()) ); return $form . '_' . $name; } return $name; } }