Root/
<?php /* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* # ***** BEGIN LICENSE BLOCK ***** # This file is part of Plume Framework, a simple PHP Application Framework. # Copyright (C) 2001-2007 Loic d'Anterroches and contributors. # # Plume Framework is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Plume Framework is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # ***** END LICENSE BLOCK ***** */ /** * A class to store field, widget and data. * * Used when rendering a form. */ class Pluf_Form_BoundField { public $form = null; public $field = null; public $name = null; public $html_name = null; public $label = null; public $help_text = null; public $errors = array (); public function __construct( $form , $field , $name ) { $this ->form = $form ; $this ->field = $field ; $this ->name = $name ; $this ->html_name = $this ->form->addPrefix( $name ); if ( $this ->field->label == '' ) { $this ->label = mb_ereg_replace( '/\_/' , '/ /' , mb_ucfirst( $name )); } else { $this ->label = $this ->field->label; } $this ->help_text = ( $this ->field->help_text) ? $this ->field->help_text : '' ; if (isset( $this ->form->errors[ $name ])) { $this ->errors = $this ->form->errors[ $name ]; } } public function render_w( $widget =null, $attrs = array ()) { if ( $widget === null) { $widget = $this ->field->widget; } $id = $this ->autoId(); if ( $id and ! array_key_exists ( 'id' , $attrs ) and ! array_key_exists ( 'id' , $widget ->attrs)) { $attrs [ 'id' ] = $id ; } if (! $this ->form->is_bound) { $data = $this ->form->initial( $this ->name); } else { $data = $this ->field->widget->valueFromFormData( $this ->html_name, $this ->form->data); } return $widget ->render( $this ->html_name, $data , $attrs ); } /** * Returns the HTML of the label tag. Wraps the given contents in * a <label>, if the field has an ID attribute. Does not * HTML-escape the contents. If contents aren't given, uses the * field's HTML-escaped label. If attrs are given, they're used as * HTML attributes on the <label> tag. * * @param string Content of the label, will not be escaped (null). * @param array Extra attributes. * @return string HTML of the label. */ public function labelTag( $contents =null, $attrs = array ()) { $contents = ( $contents ) ? $contents : htmlspecialchars( $this ->label); $widget = $this ->field->widget; $id = (isset( $widget ->attrs[ 'id' ])) ? $widget ->attrs[ 'id' ] : $this ->autoId(); $_tmp = array (); foreach ( $attrs as $attr => $val ) { $_tmp [] = $attr . '="' . $val . '"' ; } if ( count ( $_tmp )) { $attrs = ' ' .implode( ' ' , $_tmp ); } else { $attrs = '' ; } return new Pluf_Template_SafeString(sprintf( '<label for="%s"%s>%s</label>' , $widget ->idForLabel( $id ), $attrs , $contents ), true); } /** * Calculates and returns the ID attribute for this BoundField, if * the associated Form has specified auto_id. Returns an empty * string otherwise. * * @return string Id or empty string if no auto id defined. */ public function autoId() { $id_fields = $this ->form->id_fields; if (false !== strpos ( $id_fields , '%s' )) { return sprintf( $id_fields , $this ->html_name); } elseif ( $id_fields ) { return $this ->html_name; } return '' ; } /** * Return HTML to display the errors. */ public function fieldErrors() { Pluf::loadFunction( 'Pluf_Form_renderErrorsAsHTML' ); return new Pluf_Template_SafeString(Pluf_Form_renderErrorsAsHTML( $this ->errors), true); } /** * Overloading of the property access. */ public function __get( $prop ) { if (!in_array( $prop , array ( 'labelTag' , 'fieldErrors' , 'render_w' ))) { return $this -> $prop ; } return $this -> $prop (); } /** * Render as string. */ public function __toString() { return (string) $this ->render_w(); } } if (!function_exists( 'mb_ucfirst' )) { function mb_ucfirst( $str ) { return mb_strtoupper(mb_substr( $str , 0, 1)).mb_substr( $str , 1); } } |