Thread: [Pieforms-commit] SF.net SVN: pieforms: [53] pieforms-php5/trunk/src
Status: Alpha
Brought to you by:
oracleshinoda
From: <ora...@us...> - 2006-11-20 13:00:10
|
Revision: 53 http://svn.sourceforge.net/pieforms/?rev=53&view=rev Author: oracleshinoda Date: 2006-11-20 04:59:58 -0800 (Mon, 20 Nov 2006) Log Message: ----------- Added integer rule (Penny Leach) Modified Paths: -------------- pieforms-php5/trunk/src/pieform.php Added Paths: ----------- pieforms-php5/trunk/src/pieform/rules/integer.php Added: pieforms-php5/trunk/src/pieform/rules/integer.php =================================================================== --- pieforms-php5/trunk/src/pieform/rules/integer.php (rev 0) +++ pieforms-php5/trunk/src/pieform/rules/integer.php 2006-11-20 12:59:58 UTC (rev 53) @@ -0,0 +1,41 @@ +<?php +/** + * This program is part of Pieforms + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU 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 + * + * @package pieform + * @subpackage rule + * @author Penny Leach <pe...@ca...> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2006 Catalyst IT Ltd http://catalyst.net.nz + * + */ + +/** + * Returns whether the given field is an integer + * + * @param Pieform $form The form the rule is being applied to + * @param string $value The value to check + * @return string The error message, if there is something wrong with + * the address. + */ +function pieform_rule_integer(Pieform $form, $value) { + if (!is_numeric($value) || $value != (int)$value) { + return $form->i18n('integer'); + } +} + +?> Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-11-20 12:42:59 UTC (rev 52) +++ pieforms-php5/trunk/src/pieform.php 2006-11-20 12:59:58 UTC (rev 53) @@ -237,6 +237,7 @@ 'email' => 'E-mail address is invalid', 'maxlength' => 'This field must be at most %d characters long', 'minlength' => 'This field must be at least %d characters long', + 'integer' => 'The field must be an integer', 'validateoptions' => 'The option "%s" is invalid' ) ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-11-21 01:30:25
|
Revision: 56 http://svn.sourceforge.net/pieforms/?rev=56&view=rev Author: oracleshinoda Date: 2006-11-20 17:30:25 -0800 (Mon, 20 Nov 2006) Log Message: ----------- Minor doc fixes. Made the expiry element disable the input field even if the form is not being submitted by ajax post Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/expiry.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/elements/expiry.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/expiry.php 2006-11-20 13:05:53 UTC (rev 55) +++ pieforms-php5/trunk/src/pieform/elements/expiry.php 2006-11-21 01:30:25 UTC (rev 56) @@ -86,10 +86,12 @@ // Every time one of the two inputs is changed, update the number // of seconds in the hidden input. - if ($form->get_ajaxpost()) { - $script = <<< EOJS + $script = <<<EOJS <script type="text/javascript" language="javascript"> function {$name}_change() { +EOJS; + if ($form->get_ajaxpost()) { + $script .= <<<EOJS var seconds = null; if ($('{$name}_number').value > 0) { var mult = $('{$name}_number').value * 60 * 60 * 24; @@ -106,13 +108,15 @@ else { seconds = 0; } + $('{$name}').value = seconds; +EOJS; + $script .= <<<EOJS if ($('{$name}_units').value == 'noenddate') { $('{$name}_number').disabled = true; } else { $('{$name}_number').disabled = false; } - $('{$name}').value = seconds; } </script> EOJS; Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-11-20 13:05:53 UTC (rev 55) +++ pieforms-php5/trunk/src/pieform.php 2006-11-21 01:30:25 UTC (rev 56) @@ -1135,6 +1135,8 @@ /** * Hook for giving information back to the developer + * + * @param string $message The message to give to the developer */ public static function info($message) { $function = 'pieform_info'; @@ -1195,7 +1197,6 @@ } } } - } @@ -1212,9 +1213,9 @@ * {@internal This is separate so that child element types can nest other * elements inside them (like the fieldset element does for example).}} * - * @param array $element The element to render + * @param array $element The element to render * @param Pieform $form The form to render the element for - * @return string The rendered element + * @return string The rendered element */ function pieform_render_element($element, Pieform $form) { // If the element is pure markup, don't pass it to the renderer This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-11-28 23:22:36
|
Revision: 72 http://svn.sourceforge.net/pieforms/?rev=72&view=rev Author: oracleshinoda Date: 2006-11-28 15:22:36 -0800 (Tue, 28 Nov 2006) Log Message: ----------- Hopefully added support for different callbacks based on the name of the submit button pressed Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/submitcancel.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/elements/submitcancel.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/submitcancel.php 2006-11-28 23:14:35 UTC (rev 71) +++ pieforms-php5/trunk/src/pieform/elements/submitcancel.php 2006-11-28 23:22:36 UTC (rev 72) @@ -42,6 +42,8 @@ } function pieform_render_submitcancel_set_attributes($element) { + // @todo change to 'submitelement' => true, more generic and can be used + // for working out which submit button was pressed $element['ajaxmessages'] = true; return $element; } Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-11-28 23:14:35 UTC (rev 71) +++ pieforms-php5/trunk/src/pieform.php 2006-11-28 23:22:36 UTC (rev 72) @@ -556,7 +556,17 @@ // Submit the form if things went OK if ($this->submit && !$this->has_errors()) { - if (function_exists($this->submitfunction)) { + foreach ($this->get_elements() as $element) { + // @todo Rename 'ajaxmessages' to 'submitelement' + if ($element['ajaxmessages'] == true && isset($values[$element['name']])) { + $function = "{$this->name}_submit_{$element['name']}"; + if (function_exists($function)) { + $function($values); + break; + } + } + } + else if (function_exists($this->submitfunction)) { $function = $this->submitfunction; // Call the user defined function for processing a submit // This function should really redirect/exit after it has This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-11-29 02:55:14
|
Revision: 73 http://svn.sourceforge.net/pieforms/?rev=73&view=rev Author: oracleshinoda Date: 2006-11-28 18:55:14 -0800 (Tue, 28 Nov 2006) Log Message: ----------- Fix up obvious fuckups, remove restriction on needing to define the default submit function Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/submitcancel.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/elements/submitcancel.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/submitcancel.php 2006-11-28 23:22:36 UTC (rev 72) +++ pieforms-php5/trunk/src/pieform/elements/submitcancel.php 2006-11-29 02:55:14 UTC (rev 73) @@ -42,8 +42,6 @@ } function pieform_render_submitcancel_set_attributes($element) { - // @todo change to 'submitelement' => true, more generic and can be used - // for working out which submit button was pressed $element['ajaxmessages'] = true; return $element; } Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-11-28 23:22:36 UTC (rev 72) +++ pieforms-php5/trunk/src/pieform.php 2006-11-29 02:55:14 UTC (rev 73) @@ -556,17 +556,19 @@ // Submit the form if things went OK if ($this->submit && !$this->has_errors()) { + $submitted = false; foreach ($this->get_elements() as $element) { // @todo Rename 'ajaxmessages' to 'submitelement' - if ($element['ajaxmessages'] == true && isset($values[$element['name']])) { + if (!empty($element['ajaxmessages']) == true && isset($values[$element['name']])) { $function = "{$this->name}_submit_{$element['name']}"; if (function_exists($function)) { $function($values); + $submitted = true; break; } } } - else if (function_exists($this->submitfunction)) { + if (!$submitted && function_exists($this->submitfunction)) { $function = $this->submitfunction; // Call the user defined function for processing a submit // This function should really redirect/exit after it has @@ -582,7 +584,7 @@ //} //throw new PieformException($message); } - else { + else if (!$submitted) { throw new PieformException('No function registered to handle form submission for form "' . $this->name . '"'); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-12-24 05:12:34
|
Revision: 142 http://svn.sourceforge.net/pieforms/?rev=142&view=rev Author: oracleshinoda Date: 2006-12-23 21:12:32 -0800 (Sat, 23 Dec 2006) Log Message: ----------- Renamed the *_messages_js functions to *_get_js, which is more appropriate Modified Paths: -------------- pieforms-php5/trunk/src/pieform/renderers/div.php pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php pieforms-php5/trunk/src/pieform/renderers/table.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/renderers/div.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/div.php 2006-12-24 02:32:29 UTC (rev 141) +++ pieforms-php5/trunk/src/pieform/renderers/div.php 2006-12-24 05:12:32 UTC (rev 142) @@ -78,8 +78,7 @@ } -// @todo needs updating again... need to replace remove_error with remove_all_errors -function pieform_renderer_div_messages_js($id) { +function pieform_renderer_div_get_js($id) { $result = <<<EOF // Given a message and form element name, should set an error on the element function {$id}_set_error(message, element) { Modified: pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2006-12-24 02:32:29 UTC (rev 141) +++ pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2006-12-24 05:12:32 UTC (rev 142) @@ -46,8 +46,7 @@ $formrenderermct->set_form($form); } -function pieform_renderer_multicolumntable_messages_js($id) { - //return pieform_renderer_table_messages_js($id); +function pieform_renderer_multicolumntable_get_js($id) { return <<<EOF function {$id}_set_error (message, element) { element = '{$id}_' + element; Modified: pieforms-php5/trunk/src/pieform/renderers/table.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/table.php 2006-12-24 02:32:29 UTC (rev 141) +++ pieforms-php5/trunk/src/pieform/renderers/table.php 2006-12-24 05:12:32 UTC (rev 142) @@ -106,7 +106,7 @@ return "</tbody></table>\n"; } -function pieform_renderer_table_messages_js($id) { +function pieform_renderer_table_get_js($id) { $result = <<<EOF function {$id}_set_error(message, element) { element = $('{$id}_' + element + '_container'); Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-12-24 02:32:29 UTC (rev 141) +++ pieforms-php5/trunk/src/pieform.php 2006-12-24 05:12:32 UTC (rev 142) @@ -928,7 +928,7 @@ EOF; $result .= "});\n\n"; - $function = 'pieform_renderer_' . $this->data['renderer'] . '_messages_js'; + $function = 'pieform_renderer_' . $this->data['renderer'] . '_get_js'; if (!function_exists($function)) { throw new PieformException('No renderer message function "' . $function . '"'); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-12-26 00:27:26
|
Revision: 146 http://svn.sourceforge.net/pieforms/?rev=146&view=rev Author: oracleshinoda Date: 2006-12-25 16:27:24 -0800 (Mon, 25 Dec 2006) Log Message: ----------- Moved js/ to static/ Added Paths: ----------- pieforms-php5/trunk/src/static/ pieforms-php5/trunk/src/static/MochiKit/ pieforms-php5/trunk/src/static/core/ pieforms-php5/trunk/src/static/jscalendar/ Removed Paths: ------------- pieforms-php5/trunk/src/static/MochiKit/ pieforms-php5/trunk/src/static/jscalendar/ Copied: pieforms-php5/trunk/src/static (from rev 140, pieforms-php5/trunk/src/js) Copied: pieforms-php5/trunk/src/static/MochiKit (from rev 144, pieforms-php5/trunk/src/js/MochiKit) Copied: pieforms-php5/trunk/src/static/jscalendar (from rev 144, pieforms-php5/trunk/src/js/jscalendar) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2007-12-27 23:45:52
|
Revision: 241 http://pieforms.svn.sourceforge.net/pieforms/?rev=241&view=rev Author: oracleshinoda Date: 2007-12-27 15:45:56 -0800 (Thu, 27 Dec 2007) Log Message: ----------- Templating support. Now, if the 'template' directive is provided, pieforms will use a template for rendering a form, rather than a renderer, allowing full layout control. See the recently committed documentation for more information. Modified Paths: -------------- pieforms-php5/trunk/src/pieform/renderers/div.php pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php pieforms-php5/trunk/src/pieform/renderers/oneline.php pieforms-php5/trunk/src/pieform/renderers/table.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/renderers/div.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/div.php 2007-12-27 23:43:59 UTC (rev 240) +++ pieforms-php5/trunk/src/pieform/renderers/div.php 2007-12-27 23:45:56 UTC (rev 241) @@ -27,59 +27,41 @@ /** * Renders form elements inside <div>s. * - * @param Pieform $form The form the element is being rendered for - * @param string $builtelement The element, already built - * @param array $rawelement The element in raw form, for looking up - * information about it. - * @return string The element rendered inside an appropriate - * container. + * @param Pieform $form The form the element is being rendered for + * @param array $element The element to be rendered + * @return string The element rendered inside an appropriate container */ -function pieform_renderer_div(Pieform $form, $builtelement, $rawelement) { +function pieform_renderer_div(Pieform $form, $element) { $formname = $form->get_name(); // Set the class of the enclosing <div> to match that of the element $result = '<div'; - if (isset($rawelement['name'])) { - $result .= ' id="' . $formname . '_' . $rawelement['name'] . '_container"'; + if (isset($element['name'])) { + $result .= ' id="' . $formname . '_' . $element['name'] . '_container"'; } - if ($rawelement['class']) { - $result .= ' class="' . $rawelement['class'] . '"'; + if (!empty($element['class'])) { + $result .= ' class="' . $element['class'] . '"'; } $result .= '>'; - if (isset($rawelement['title']) && $rawelement['title'] !== '' && $rawelement['type'] != 'fieldset') { - if (!empty($rawelement['nolabel'])) { - // Don't bother with a label for the element - $result .= Pieform::hsc($rawelement['title']); - } - else { - $result .= '<label for="' . $formname . '_' . $rawelement['id'] . '">' . Pieform::hsc($rawelement['title']) . '</label>'; - } - if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { - $result .= ' <span class="requiredmarker">*</span>'; - } + if (isset($element['labelhtml'])) { + $result .= $element['labelhtml']; } - $result .= $builtelement; + //$result .= $builtelement; + $result .= $element['html']; - // Contextual help - if (!empty($rawelement['help'])) { - $function = $form->get_property('helpcallback'); - if (function_exists($function)) { - $result .= $function($form, $rawelement); - } - else { - $result .= ' <span class="help"><a href="#" title="' . Pieform::hsc($rawelement['help']) . '">?</a></span>'; - } + if (isset($element['helphtml'])) { + $result .= ' ' . $element['helphtml']; } // Description - optional description of the element, or other note that should be visible // on the form itself (without the user having to hover over contextual help - if ((!$form->has_errors() || $form->get_property('showdescriptiononerror')) && !empty($rawelement['description'])) { - $result .= '<div class="description"> ' . Pieform::hsc($rawelement['description']) . "</div>"; + if ((!$form->has_errors() || $form->get_property('showdescriptiononerror')) && !empty($element['description'])) { + $result .= '<div class="description"> ' . Pieform::hsc($element['description']) . "</div>"; } - if (!empty($rawelement['error'])) { - $result .= '<div class="errmsg">' . Pieform::hsc($rawelement['error']) . '</div>'; + if (!empty($element['error'])) { + $result .= '<div class="errmsg">' . Pieform::hsc($element['error']) . '</div>'; } $result .= "</div>\n"; Modified: pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2007-12-27 23:43:59 UTC (rev 240) +++ pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2007-12-27 23:45:56 UTC (rev 241) @@ -33,16 +33,13 @@ * Renders form elements inside a <table>. If elements have the same title, * they will be rendered in the same table row, allowing a grid layout. * - * @param Pieform $form The form the element is being rendered for - * @param string $builtelement The element, already built - * @param array $rawelement The element in raw form, for looking up - * information about it. - * @return string The element rendered inside an appropriate - * container. + * @param Pieform $form The form the element is being rendered for + * @param array $element The element to be rendered + * @return string The element rendered inside an appropriate container */ -function pieform_renderer_multicolumntable(Pieform $form, $builtelement, $rawelement) { +function pieform_renderer_multicolumntable(Pieform $form, $element) { global $formrenderermct; - $formrenderermct->add_element($builtelement, $rawelement); + $formrenderermct->add_element($element['html'], $element); $formrenderermct->set_form($form); } Modified: pieforms-php5/trunk/src/pieform/renderers/oneline.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/oneline.php 2007-12-27 23:43:59 UTC (rev 240) +++ pieforms-php5/trunk/src/pieform/renderers/oneline.php 2007-12-27 23:45:56 UTC (rev 241) @@ -35,39 +35,36 @@ /** * Renders form elements all on one line. * - * @param Pieform $form The form the element is being rendered for - * @param string $builtelement The element, already built - * @param array $rawelement The element in raw form, for looking up - * information about it. - * @return string The element rendered inside an appropriate - * container. + * @param Pieform $form The form the element is being rendered for + * @param array $element The element that is being rendered + * @return string The element rendered inside an appropriate container */ -function pieform_renderer_oneline(Pieform $form, $builtelement, $rawelement) { +function pieform_renderer_oneline(Pieform $form, $element) { $formname = $form->get_name(); // Set the class of the enclosing <div> to match that of the element $result = '<span'; - if (isset($rawelement['name'])) { - $result .= ' id="' . $formname . '_' . $rawelement['name'] . '_container"'; + if (isset($element['name'])) { + $result .= ' id="' . $formname . '_' . $element['name'] . '_container"'; } - if ($rawelement['class']) { - $result .= ' class="' . $rawelement['class'] . '"'; + if (!empty($element['class'])) { + $result .= ' class="' . $element['class'] . '"'; } $result .= '>'; - if (isset($rawelement['title']) && $rawelement['title'] !== '' && $rawelement['type'] != 'fieldset') { - if (!empty($rawelement['nolabel'])) { + if (isset($element['title']) && $element['title'] !== '' && $element['type'] != 'fieldset') { + if (!empty($element['nolabel'])) { // Don't bother with a label for the element - $result .= Pieform::hsc($rawelement['title']); + $result .= Pieform::hsc($element['title']); } else { - $result .= '<label for="' . $rawelement['id'] . '">' . Pieform::hsc($rawelement['title']) . '</label>'; + $result .= '<label for="' . $element['id'] . '">' . Pieform::hsc($element['title']) . '</label>'; } - if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { + if ($form->get_property('requiredmarker') && !empty($element['rules']['required'])) { $result .= ' <span class="requiredmarker">*</span>'; } } - $result .= $builtelement; + $result .= $element['html']; $result .= "</span>"; return $result; Modified: pieforms-php5/trunk/src/pieform/renderers/table.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/table.php 2007-12-27 23:43:59 UTC (rev 240) +++ pieforms-php5/trunk/src/pieform/renderers/table.php 2007-12-27 23:45:56 UTC (rev 241) @@ -27,17 +27,15 @@ /** * Renders form elements inside a <table>. * - * @param Pieform $form The form the element is being rendered for - * @param string $builtelement The element, already built - * @param array $rawelement The element in raw form, for looking up - * information about it. - * @return string The element rendered inside an appropriate - * container. + * @param Pieform $form The form the element is being rendered for + * @param array $element The element to be rendered + * @return string The element rendered inside an appropriate container */ -function pieform_renderer_table(Pieform $form, $builtelement, $rawelement) { +function pieform_renderer_table(Pieform $form, $element) { $formname = $form->get_name(); - if ($rawelement['type'] == 'fieldset') { + if ($element['type'] == 'fieldset') { // Add table tags to the build element, to preserve HTML compliance + $builtelement = $element['html']; if (0 === strpos($builtelement, "\n<fieldset")) { $closelegendpos = strpos($builtelement, '</legend>'); if ($closelegendpos !== false) { @@ -61,53 +59,35 @@ } $result = "\t<tr"; - $result .= ' id="' . $formname . '_' . $rawelement['name'] . '_container"'; + $result .= ' id="' . $formname . '_' . $element['name'] . '_container"'; // Set the class of the enclosing <tr> to match that of the element - if ($rawelement['class']) { - $result .= ' class="' . $rawelement['class'] . '"'; + if (!empty($element['class'])) { + $result .= ' class="' . $element['class'] . '"'; } $result .= ">\n\t\t"; $result .= '<th>'; - if (isset($rawelement['title']) && $rawelement['title'] !== '') { - if (!empty($rawelement['nolabel'])) { - // Don't bother with a label for the element - $result .= Pieform::hsc($rawelement['title']); - } - else { - $result .= '<label for="' . $formname . '_' . $rawelement['id'] . '">' . Pieform::hsc($rawelement['title']) . '</label>'; - } - if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { - $result .= ' <span class="requiredmarker">*</span>'; - } + if (isset($element['labelhtml'])) { + $result .= $element['labelhtml']; } $result .= "</th>\n\t\t<td>"; - $result .= $builtelement; - - // Contextual help - if (!empty($rawelement['help'])) { - $function = $form->get_property('helpcallback'); - if (function_exists($function)) { - $result .= $function($form, $rawelement); - } - else { - $result .= ' <span class="help"><a href="#" title="' . Pieform::hsc($rawelement['help']) . '">?</a></span>'; - } + $result .= $element['html']; + if (isset($element['helphtml'])) { + $result .= ' ' . $element['helphtml']; } - $result .= "</td>\n\t</tr>\n"; // Description - optional description of the element, or other note that should be visible // on the form itself (without the user having to hover over contextual help - if ((!$form->has_errors() || $form->get_property('showdescriptiononerror')) && !empty($rawelement['description'])) { + if ((!$form->has_errors() || $form->get_property('showdescriptiononerror')) && !empty($element['description'])) { $result .= "\t<tr>\n\t\t<td colspan=\"2\" class=\"description\">"; - $result .= $rawelement['description']; + $result .= $element['description']; $result .= "</td>\n\t</tr>\n"; } - if (!empty($rawelement['error'])) { + if (!empty($element['error'])) { $result .= "\t<tr>\n\t\t<td colspan=\"2\" class=\"errmsg\">"; - $result .= $rawelement['error']; + $result .= $element['error']; $result .= "</td>\n\t</tr>\n"; } Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2007-12-27 23:43:59 UTC (rev 240) +++ pieforms-php5/trunk/src/pieform.php 2007-12-27 23:45:56 UTC (rev 241) @@ -208,6 +208,12 @@ // The form renderer (see the pieform/renderers directory) 'renderer' => 'table', + // The directory (relative to the include path) to search for templates + 'templatedir' => '', + + // Whether to ignore E_NOTICE messages in templates + 'ignoretemplatenotices' => true, + // Whether to validate the form. Non validated forms have none of the // validate, success or error callbacks called on them 'validate' => true, @@ -393,6 +399,9 @@ } } if ($element['type'] == 'fieldset') { + if ($this->get_property('template')) { + self::info("Your form '$this->name' has a fieldset, but is using a template. Fieldsets make no sense when using templates"); + } $this->include_plugin('element', 'fieldset'); foreach ($element['elements'] as $subname => &$subelement) { // The name can be in the element itself. This is compatibility for the perl version @@ -599,7 +608,10 @@ * @return mixed */ public function get_property($key) { - return $this->data[$key]; + if (array_key_exists($key, $this->data)) { + return $this->data[$key]; + } + return null; } /** @@ -651,64 +663,127 @@ */ public function build($outputformtags=true) { $result = ''; - if ($outputformtags) { - $result = $this->get_form_tag() . "\n"; - } - $this->include_plugin('renderer', $this->data['renderer']); - - // Form header - $function = 'pieform_renderer_' . $this->data['renderer'] . '_header'; - if (function_exists($function)) { - $result .= $function(); + // Builds the HTML each element (see the build_element_html method for + // more information) + foreach ($this->data['elements'] as &$elem) { + if ($elem['type'] == 'fieldset') { + foreach ($elem['elements'] as &$subelem) { + $this->build_element_html($subelem); + } + } + else { + $this->build_element_html($elem); + } } - // Render each element - foreach ($this->data['elements'] as $name => $elem) { - if ($elem['type'] != 'hidden') { - $result .= pieform_render_element($this, $elem); + // If a template is to be used, use it instead of a renderer + if (!empty($this->data['template'])) { + $form_tag = $this->get_form_tag(); + + // $elements is a convenience variable that contains all of the form elements (minus fieldsets and + // hidden elements) + $elements = array(); + foreach ($this->get_elements() as $element) { + if ($element['type'] != 'hidden') { + $elements[$element['name']] = $element; + } } - } - // Form footer - $function = 'pieform_renderer_' . $this->data['renderer'] . '_footer'; - if (function_exists($function)) { - $result .= $function(); - } + // Hidden elements + $this->include_plugin('element', 'hidden'); + $hidden_elements = ''; + foreach ($this->get_elements() as $element) { + if ($element['type'] == 'hidden') { + $hidden_elements .= pieform_element_hidden($this, $element); + } + } + $element = array( + 'type' => 'hidden', + 'name' => 'pieform_' . $this->get_name(), + 'value' => '' + ); + $hidden_elements .= pieform_element_hidden($this, $element); - // Hidden elements - $this->include_plugin('element', 'hidden'); - foreach ($this->get_elements() as $element) { - if ($element['type'] == 'hidden') { - $result .= pieform_element_hidden($element, $this); + ob_start(); + + if ($this->get_property('ignoretemplatenotices')) { + $old_level = error_reporting(E_ALL & ~E_NOTICE); } + + $templatepath = $this->get_property('templatedir'); + $templatepath = ($templatepath && substr($templatepath, -1) != '/') ? $templatepath . '/' : $templatepath; + $templatepath .= $this->get_property('template'); + require($templatepath); + + if ($this->get_property('ignoretemplatenotices')) { + error_reporting($old_level); + } + + $result = ob_get_contents(); + ob_end_clean(); } - $element = array( - 'type' => 'hidden', - 'name' => 'pieform_' . $this->name, - 'value' => '' - ); - $result .= pieform_element_hidden($element, $this); - if ($outputformtags) { - $result .= "</form>\n"; - } + else { + // No template being used - instead use a renderer + if ($outputformtags) { + $result = $this->get_form_tag() . "\n"; + } - if ($this->data['jsform'] || $this->data['presubmitcallback']) { - $result .= '<script type="text/javascript">'; + $this->include_plugin('renderer', $this->data['renderer']); + + // Form header + $function = 'pieform_renderer_' . $this->data['renderer'] . '_header'; + if (function_exists($function)) { + $result .= $function(); + } + + // Render each element + foreach ($this->data['elements'] as $name => $element) { + if ($element['type'] != 'hidden') { + $result .= pieform_render_element($this, $element); + } + } + + // Form footer + $function = 'pieform_renderer_' . $this->data['renderer'] . '_footer'; + if (function_exists($function)) { + $result .= $function(); + } + + // Hidden elements + $this->include_plugin('element', 'hidden'); + foreach ($this->get_elements() as $element) { + if ($element['type'] == 'hidden') { + $result .= pieform_element_hidden($this, $element); + } + } + $element = array( + 'type' => 'hidden', + 'name' => 'pieform_' . $this->name, + 'value' => '' + ); + $result .= pieform_element_hidden($this, $element); if ($outputformtags) { - $result .= "\n" . $this->whichbutton_js(); + $result .= "</form>\n"; } + + if ($this->data['jsform'] || $this->data['presubmitcallback']) { + $result .= '<script type="text/javascript">'; + if ($outputformtags) { + $result .= "\n" . $this->whichbutton_js(); + } + } + if ($this->data['jsform']) { + $result .= $this->submit_js(); + } + else if ($this->data['presubmitcallback'] && $outputformtags) { + $result .= 'connect(\'' . $this->name . '\', \'onsubmit\', ' + . 'function() { ' . $this->data['presubmitcallback'] . "('{$this->name}', {$this->name}_btn); });"; + } + if ($this->data['jsform'] || $this->data['presubmitcallback']) { + $result .= "\n</script>\n"; + } } - if ($this->data['jsform']) { - $result .= $this->submit_js(); - } - else if ($this->data['presubmitcallback'] && $outputformtags) { - $result .= 'connect(\'' . $this->name . '\', \'onsubmit\', ' - . 'function() { ' . $this->data['presubmitcallback'] . "('{$this->name}', {$this->name}_btn); });"; - } - if ($this->data['jsform'] || $this->data['presubmitcallback']) { - $result .= "\n</script>\n"; - } return $result; } @@ -1340,6 +1415,55 @@ } } } + + /** + * Given an element, builds all of the HTML for it - for example, the label + * and the raw HTML of the element itself + * + * The element is passed by reference, and various properties are set + * directly on the element, namely: + * + * * 'html' - The element in its built, HTML form + * * 'labelhtml' - The HTML for the element label + * * 'helphtml' - The HTML for the help icon + * + * @param array &$element The element to build the HTML for + */ + private function build_element_html(&$element) { + // Set ID and class for elements + $element['id'] = $this->make_id($element); + $element['class'] = $this->make_class($element); + + // Build the element html + $function = 'pieform_element_' . $element['type']; + $element['html'] = $function($this, $element); + + // Element title + if (isset($element['title']) && $element['title'] !== '') { + if (!empty($element['nolabel'])) { + // Don't bother with a label for the element + $element['labelhtml'] = self::hsc($element['title']); + } + else { + $element['labelhtml'] = '<label for="' . $this->name . '_' . $element['id'] . '">' . Pieform::hsc($element['title']) . '</label>'; + } + if ($this->get_property('requiredmarker') && !empty($element['rules']['required'])) { + $element['labelhtml'] .= ' <span class="requiredmarker">*</span>'; + } + } + + // Help icon + if (!empty($element['help'])) { + $function = $this->get_property('helpcallback'); + if (function_exists($function)) { + $element['helphtml'] = $function($this, $element); + } + else { + $element['helphtml'] = '<span class="help"><a href="" title="' . Pieform::hsc($element['help']) . '" onclick="return false;">?</a></span>'; + } + } + } + } @@ -1367,22 +1491,23 @@ } // Make sure that the function to render the element type is available - $function = 'pieform_element_' . $element['type']; - $rendererfunction = 'pieform_renderer_' . $form->get_property('renderer'); if (!function_exists($rendererfunction)) { throw new PieformException('No such form renderer function: "' . $rendererfunction . '"'); } - $element['id'] = $form->make_id($element); - $element['class'] = $form->make_class($element); - $builtelement = $function($form, $element); - // Remove the 'autofocus' class, because we only want it on the form input // itself, not the wrapping HTML - $element['class'] = preg_replace('/\s?autofocus/', '', $element['class']); + if (isset($element['class'])) { + $element['class'] = preg_replace('/\s?autofocus/', '', $element['class']); + } - return $rendererfunction($form, $builtelement, $element); + // Render fieldsets now + if ($element['type'] == 'fieldset') { + $element['html'] = pieform_element_fieldset($form, $element); + } + + return $rendererfunction($form, $element); } function pieform_get_headdata() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2007-12-31 09:05:32
|
Revision: 260 http://pieforms.svn.sourceforge.net/pieforms/?rev=260&view=rev Author: oracleshinoda Date: 2007-12-31 01:05:31 -0800 (Mon, 31 Dec 2007) Log Message: ----------- Moved the javascript for handling jsform submission into pieforms.js, and made it work by AHAH. The major gain of this is that any form can display itself again when an error occurs in 100% the same way, regardless of whether the form is a jsform or not. The renderers don't have to provide javascript to describe how to insert error messages anymore either. The code is simpler and faster this way. So good benefits all around! Furthermore, I found that you can unset() a reference safely (i.e., it won't be unset everwhere else - only the reference will die). This is really handy for those foreach loops that take values by reference - you can unset them at the end of the loop and then know you can use the variable name again safely without random breakage happening later. Used this knowledge to fix one such 'interesting' bug that was occuring after jsform submission, where the last element in the form would be replaced by the second-to-last element. Modified Paths: -------------- pieforms-php5/trunk/src/pieform/renderers/div.php pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php pieforms-php5/trunk/src/pieform/renderers/oneline.php pieforms-php5/trunk/src/pieform/renderers/table.php pieforms-php5/trunk/src/pieform.php pieforms-php5/trunk/src/static/core/pieforms.js Modified: pieforms-php5/trunk/src/pieform/renderers/div.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/div.php 2007-12-31 02:03:42 UTC (rev 259) +++ pieforms-php5/trunk/src/pieform/renderers/div.php 2007-12-31 09:05:31 UTC (rev 260) @@ -68,26 +68,4 @@ return $result; }/*}}}*/ - -function pieform_renderer_div_get_js($id) {/*{{{*/ - $result = <<<EOF -// Given a message and form element name, should set an error on the element -function {$id}_set_error(message, element) { - element = '{$id}_' + element; - addElementClass(element + '_container', 'error'); - addElementClass(element, 'error'); - insertSiblingNodesAfter(element + '_container', DIV({'class': 'errmsg'}, message)); -} -function {$id}_remove_all_errors() { - forEach(getElementsByTagAndClassName('DIV', 'errmsg', '{$id}'), function(div) { - removeElement(div); - }); - forEach(getElementsByTagAndClassName(null, 'error', '{$id}'), function(div) { - removeElementClass(div, 'error'); - }); -} -EOF; - return $result; -}/*}}}*/ - ?> Modified: pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2007-12-31 02:03:42 UTC (rev 259) +++ pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2007-12-31 09:05:31 UTC (rev 260) @@ -43,43 +43,6 @@ $formrenderermct->set_form($form); }/*}}}*/ -function pieform_renderer_multicolumntable_get_js($id) {/*{{{*/ - return <<<EOF -function {$id}_set_error (message, element) { - element = '{$id}_' + element; - var parentRow = $(element + '_container').parentNode; - var nextRow = parentRow.nextSibling; - if (!(nextRow && hasElementClass(nextRow, 'errorRow'))) { - var errorRow = TR({'class': 'errorRow'}); - log(parentRow.cells.length); - for (var i = 0; i < parentRow.cells.length; i++) { - var attrs = null; - if (parentRow.cells[i].id) { - attrs = { - 'id': parentRow.cells[i].id.replace(/_container$/, '_error'), - 'class': 'error' - }; - } - appendChildNodes(errorRow, TD(attrs)); - } - insertSiblingNodesAfter($(element + '_container').parentNode, errorRow); - } - - appendChildNodes(element + '_error', message); - addElementClass(element, 'error'); - addElementClass( element + '_container', 'error'); -} -function {$id}_remove_all_errors() { - forEach(getElementsByTagAndClassName('TR', 'errorRow', '{$id}'), function(row) { - removeElement(row); - }); - forEach(getElementsByTagAndClassName(null, 'error', '{$id}'), function(item) { - removeElementClass(item, 'error'); - }); -} -EOF; -}/*}}}*/ - function pieform_renderer_multicolumntable_header() {/*{{{*/ global $formrenderermct; $formrenderermct = new FormRendererMultiColumnTable(); Modified: pieforms-php5/trunk/src/pieform/renderers/oneline.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/oneline.php 2007-12-31 02:03:42 UTC (rev 259) +++ pieforms-php5/trunk/src/pieform/renderers/oneline.php 2007-12-31 09:05:31 UTC (rev 260) @@ -70,11 +70,4 @@ return $result; }/*}}}*/ -function pieform_renderer_oneline_get_js($id) {/*{{{*/ - return <<<EOF -function {$id}_remove_all_errors () {} -function {$id}_set_error () {} -EOF; -}/*}}}*/ - ?> Modified: pieforms-php5/trunk/src/pieform/renderers/table.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/table.php 2007-12-31 02:03:42 UTC (rev 259) +++ pieforms-php5/trunk/src/pieform/renderers/table.php 2007-12-31 09:05:31 UTC (rev 260) @@ -102,26 +102,4 @@ return "</tbody></table>\n"; }/*}}}*/ -function pieform_renderer_table_get_js($id) {/*{{{*/ - $result = <<<EOF -function {$id}_set_error(message, element) { - element = $('{$id}_' + element + '_container'); - var container = getFirstElementByTagAndClassName('TD', null, element); - addElementClass(container, 'error'); - addElementClass(container.firstChild, 'error'); - insertSiblingNodesAfter(element, TR(null, TD({'colspan': 2, 'class': 'errmsg'}, message))); -} -function {$id}_remove_all_errors() { - forEach(getElementsByTagAndClassName('TD', 'errmsg', $('$id')), function(item) { - removeElement(item.parentNode); - }); - forEach(getElementsByTagAndClassName('TD', 'error', $('$id')), function(item) { - removeElementClass(item, 'error'); - removeElementClass(item.firstChild, 'error'); - }); -} -EOF; - return $result; -}/*}}}*/ - ?> Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2007-12-31 02:03:42 UTC (rev 259) +++ pieforms-php5/trunk/src/pieform.php 2007-12-31 09:05:31 UTC (rev 260) @@ -228,22 +228,24 @@ } // Get references to all the elements in the form, excluding fieldsets - foreach ($this->data['elements'] as $name => &$_element) { - if (isset($_element['type']) && $_element['type'] == 'fieldset') { + foreach ($this->data['elements'] as $name => &$element) { + if (isset($element['type']) && $element['type'] == 'fieldset') { // Load the fieldset plugin as we know this form has one now $this->include_plugin('element', 'fieldset'); if ($this->get_property('template')) { self::info("Your form '$this->name' has a fieldset, but is using a template. Fieldsets make no sense when using templates"); } - foreach ($_element['elements'] as $subname => &$_subelement) { - $this->elementrefs[$subname] = &$_subelement; + foreach ($element['elements'] as $subname => &$subelement) { + $this->elementrefs[$subname] = &$subelement; } + unset($subelement); } else { - $this->elementrefs[$name] = &$_element; + $this->elementrefs[$name] = &$element; } } + unset($element); // Check that all elements have names compliant to PHP's variable naming policy // (otherwise things get messy later) @@ -344,6 +346,7 @@ } $element['name'] = $name; } + unset($element); // Check if the form was submitted, and if so, validate and process it $global = ($this->data['method'] == 'get') ? $_GET: $_POST; @@ -366,7 +369,7 @@ throw new PieformException('Cancel element "' . $element['name'] . '" has no page to go to'); } if ($this->data['jsform']) { - $this->json_reply(PIEFORM_CANCEL, $element['goto']); + $this->json_reply(PIEFORM_CANCEL, array('goto' => $element['goto']), false); } header('HTTP/1.1 303 See Other'); header('Location:' . $element['goto']); @@ -434,13 +437,16 @@ // If the form has been submitted by javascript, return json if ($this->data['jsform']) { - $errors = $this->get_errors(); - $json = array(); - foreach ($errors as $element) { - $json[$element['name']] = $element['error']; - } + // TODO: get error messages in a 'third person' type form to + // use here maybe? Would have to work for non js forms too. See + // the TODO file + //$errors = $this->get_errors(); + //$json = array(); + //foreach ($errors as $element) { + // $json[$element['name']] = $element['error']; + //} $message = $this->get_property('jserrormessage'); - $this->json_reply(PIEFORM_ERR, array('message' => $message, 'errors' => $json)); + $this->json_reply(PIEFORM_ERR, array('message' => $message)); } } }/*}}}*/ @@ -614,23 +620,36 @@ if ($outputformtags) { $result .= "</form>\n"; } + } - if ($this->data['jsform'] || $this->data['presubmitcallback']) { - $result .= '<script type="text/javascript">'; - if ($outputformtags) { - $result .= "\n" . $this->whichbutton_js(); + // Output the javascript to wire things up, but only if it is needed. The two cases where it is needed is when: + // 1) The form is a JS form that hasn't been submitted yet. When the + // form has been submitted the javascript from the first page load is + // still active in the documente + // 2) The form is NOT a JS form, but has a presubmitcallback + if (($this->data['jsform'] && !$this->submitted) + || (!$this->data['jsform'] && $this->data['presubmitcallback'])) { + $result .= '<script type="text/javascript">'; + $submitbuttons = array(); + foreach ($this->elementrefs as $element) { + if (!empty($element['submitelement'])) { + // TODO: might have to deal with cancel elements here too + $submitbuttons[] = $element['name']; } } - if ($this->data['jsform']) { - $result .= $this->submit_js(); - } - else if ($this->data['presubmitcallback'] && $outputformtags) { - $result .= 'connect(\'' . $this->name . '\', \'onsubmit\', ' - . 'function() { ' . $this->data['presubmitcallback'] . "('{$this->name}', {$this->name}_btn); });"; - } - if ($this->data['jsform'] || $this->data['presubmitcallback']) { - $result .= "\n</script>\n"; - } + + $data = json_encode(array( + 'name' => $this->name, + 'jsForm' => $this->data['jsform'], + 'submitButtons' => $submitbuttons, + 'preSubmitCallback' => $this->data['presubmitcallback'], + 'jsSuccessCallback' => $this->data['jssuccesscallback'], + 'jsErrorCallback' => $this->data['jserrorcallback'], + 'globalJsErrorCallback' => $this->data['globaljserrorcallback'], + 'postSubmitCallback' => $this->data['postsubmitcallback'], + )); + $result .= "new Pieform($data);\n"; + $result .= "</script>\n"; } return $result; @@ -788,149 +807,40 @@ } }/*}}}*/ - private function whichbutton_js() {/*{{{*/ - $result = "var {$this->name}_btn = null;\n"; - - $connecteventadded = false; - foreach ($this->elementrefs as $element) { - if (!empty($element['submitelement'])) { - if (!$connecteventadded) { - $result .= "addLoadEvent(function() {\n"; - $connecteventadded = true; - } - if (!empty($element['cancelelement'])) { - $cancelstr = 'cancel_'; - } - else { - $cancelstr = ''; - } - $result .= " connect($('{$cancelstr}{$this->name}_{$element['name']}'), 'onclick', function() { {$this->name}_btn = '{$cancelstr}{$this->name}_{$element['name']}'; });\n"; - } - } - if ($connecteventadded) { - $result .= "});\n"; - } - - return $result; - }/*}}}*/ - /** - * Builds the javascript for submitting the form. Note that the iframe is - * not hidden with display: none, as safari/konqueror/ns6 ignore things with - * display: none. Positioning it absolute and 'hidden' has the same effect - * without the breakage. + * Sends a message back to a jsform. + * + * The message can contain almost any data, although how it is used is up to + * the javascript callbacks. The message must contain a return code (the + * first parameter of this method. + * + * - The return code of the result. Either one of the PIEFORM_OK, + * PIEFORM_ERR or PIEFORM_CANCEL codes, or a custom error code at the + * choice of the application using pieforms + * - A message. This is just a string that can be used as a status message, + * e.g. 'Form failed submission' + * - HTML to replace the form with. By default, the form is built and used, + * but for example, you could replace the form with a "thank you" message + * after successful submission if you want */ - private function submit_js() {/*{{{*/ - $result = <<<EOF -connect($('{$this->name}'), 'onsubmit', function(e) { - if (typeof(tinyMCE) != 'undefined') { tinyMCE.triggerSave(); } - -EOF; - if (!empty($this->data['presubmitcallback'])) { - $result .= " {$this->data['presubmitcallback']}('{$this->name}', {$this->name}_btn);\n"; + public function json_reply($returncode, $data=array(), $replacehtml=null) {/*{{{*/ + if (is_string($data)) { + $data = array( + 'message' => $data, + ); } - $result .= <<<EOF - - var iframe = $('{$this->name}_iframe'); - $('{$this->name}').target = '{$this->name}_iframe'; - if (!iframe) { - iframe = createDOM('iframe', { - 'name': '{$this->name}_iframe', - 'id' : '{$this->name}_iframe', - 'style': 'position: absolute; visibility: hidden;' - }); - insertSiblingNodesAfter($('{$this->name}'), iframe); - - window.pieformHandler_{$this->name} = function(data) { - -EOF; - if (isset($this->data['processingstopcallback'])) { - $result .= " {$this->data['processingstopcallback']}('{$this->name}', {$this->name}_btn);\n"; + $data['returnCode'] = intval($returncode); + if ($replacehtml === null) { + $data['replaceHTML'] = $this->build(); } - - $result .= <<<EOF - evalJSONRequest(data); - if (data.returnCode == 0) { - {$this->name}_remove_all_errors(); - // The request completed successfully - -EOF; - if (!empty($this->data['jssuccesscallback'])) { - $result .= " {$this->data['jssuccesscallback']}('{$this->name}', data);\n"; + else if (is_string($replacehtml)) { + $data['replaceHTML'] = $replacehtml; } - $result .= <<<EOF - } - else { - if (data.returnCode == -2) { - window.location = data.message; - return; - } - - {$this->name}_remove_all_errors(); - if (data.message.errors) { - for (error in data.message.errors) { - {$this->name}_set_error(data.message.errors[error], error); - } - // @todo only output when fieldsets are present - forEach(getElementsByTagAndClassName('fieldset', 'collapsed', '{$this->name}'), function(fieldset) { - if (getFirstElementByTagAndClassName(null, 'error', fieldset)) { - removeElementClass(fieldset, 'collapsed'); - } - }); - } - - if (data.returnCode == -1) { - -EOF; - if (!empty($this->data['jserrorcallback'])) { - $result .= " {$this->data['jserrorcallback']}('{$this->name}', data);\n"; - } - $result .= <<<EOF - } - else { - -EOF; - if (!empty($this->data['globaljserrorcallback'])) { - $result .= " {$this->data['globaljserrorcallback']}('{$this->name}', data);\n"; - } - else { - $result .= " alert('Developer: got error code ' + data.returnCode - + ', either fix your form to not use this code or define a global js error handler');\n"; - } - $result .= <<<EOF - } - } - -EOF; - if (!empty($this->data['postsubmitcallback'])) { - $result .= " {$this->data['postsubmitcallback']}('{$this->name}', {$this->name}_btn);\n"; - } - - $result .= <<<EOF - {$this->name}_btn = null; - } - } - -EOF; - $result .= "});\n\n"; - $function = 'pieform_renderer_' . $this->data['renderer'] . '_get_js'; - if (!function_exists($function)) { - throw new PieformException('No renderer message function "' . $function . '"'); - } - - return $result . $function($this->name); - }/*}}}*/ - - public function json_reply($returncode, $message=null) {/*{{{*/ - $data = array( - 'returnCode' => intval($returncode), - 'message' => $message - ); $result = json_encode($data); echo <<<EOF -<html><head><script type="text/javascript">function sendResult() { parent.pieformHandler_{$this->name}($result); }</script></head><body onload="sendResult(); "></body></html> +<html><head><script type="text/javascript">function sendResult() { parent.pieformHandlers["{$this->name}"]($result); }</script></head><body onload="sendResult(); "></body></html> EOF; exit; }/*}}}*/ Modified: pieforms-php5/trunk/src/static/core/pieforms.js =================================================================== --- pieforms-php5/trunk/src/static/core/pieforms.js 2007-12-31 02:03:42 UTC (rev 259) +++ pieforms-php5/trunk/src/static/core/pieforms.js 2007-12-31 09:05:31 UTC (rev 260) @@ -1,11 +1,147 @@ /** - * Pieforms core javascript - * Author: Nigel McNie - * (C) 2006 Nigel McNie - * Released under the GNU GPL, see the COPYING file - * @todo pack this, provide a source version. Same with MochiKit + * Pieforms: Advanced web forms made easy + * Copyright (C) 2006-2008 Catalyst IT Ltd (http://www.catalyst.net.nz) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package pieform + * @subpackage static + * @author Nigel McNie <ni...@ca...> + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2006-2008 Catalyst IT Ltd http://catalyst.net.nz + * */ +window.pieformHandlers = {}; + +/** + * Handles the javascript side of pieforms - submitting the form via a hidden + * iframe and dealing with the result + */ +function Pieform(data) { + var self = this; + + this.init = function() { + connect(self.data.name, 'onsubmit', self.processForm); + + forEach(self.data.submitButtons, function(buttonName) { + connect(self.data.name + '_' + buttonName, 'onclick', function() { self.clickedButton = this; }); + }); + } + + this.processForm = function(e) { + // HACK: save any tinyMCE elements on the page. + // TODO: allow elements to export javascript to run at certain times - + // like now, when the form is being submitted + if (typeof(tinyMCE) != 'undefined') { tinyMCE.triggerSave(); } + + // Call the presubmit callback, if there is one + if (typeof(self.data.preSubmitCallback) == 'string' + && self.data.preSubmitCallback != "") { + window[self.data.preSubmitCallback]($(self.data.name), self.clickedButton, e); + } + + // If the form actually isn't a jsform - i.e. only a presubmithandler + // was defined - we stop here + if (!self.data.jsForm) { + return; + } + + // Ensure the iframe exists and make sure the form targets it + self.setupIframe(); + $(self.data.name).target = self.data.name + '_iframe'; + + window.pieformHandlers[self.data.name] = function(data) { + // If canceling the form, redirect away + if (data.returnCode == -2) { + alert('redirecting to ' + data.goto); + window.location = data.goto; + return; + } + + var tmp = DIV(); + tmp.innerHTML = data.replaceHTML; + // The first child node is the form tag. We replace the children of + // the current form tag with the new children. This prevents + // javascript references being lost + replaceChildNodes($(self.data.name), tmp.childNodes[0].childNodes); + + if (data.returnCode == 0) { + // Call the defined success callback, if there is one + if (typeof(self.data.jsSuccessCallback) == 'string' + && self.data.jsSuccessCallback != "") { + window[self.data.jsSuccessCallback]($(self.data.name), data); + } + else { + // TODO: work out what I'm going to do here... + if (typeof(data.message) == 'string' && data.message != '') { + alert(data.message); + } + } + } + else if (data.returnCode == -1) { + if (typeof(self.data.jsErrorCallback) == 'string' + && self.data.jsErrorCallback != '') { + window[self.data.jsErrorCallback]($(self.data.name), data); + } + } + else if (typeof(self.data.globalJsErrorCallback) == 'string' + && self.data.globalJsErrorCallback != '') { + window[self.data.globalJsErrorCallback]($(self.data.name), data); + } + else { + alert('Developer: got error code ' + data.returnCode + + ', either fix your form to not use this code or define ' + + 'a global js error handler'); + } + + // The post submit callback (for if the form succeeds or fails, but + // not for if it cancels) + if (typeof(self.data.postSubmitCallback) == 'string' + && self.data.postSubmitCallback != '') { + window[self.data.postSubmitCallback]($(self.data.name), self.clickedButton, e); + } + } + } + + this.setupIframe = function() { + var iframeName = self.data.name + '_iframe'; + if ($(iframeName)) { + self.iframe = $(iframeName); + } + else { + self.iframe = createDOM('iframe', { + 'name': iframeName, + 'id' : iframeName, + 'style': 'position: absolute; visibility: hidden;' + }); + insertSiblingNodesAfter(self.data.name, self.iframe); + } + } + + // A reference to the iframe that submissions are made through + this.iframe = null; + + // The button that was clicked to trigger the form submission + this.clickedButton = null; + + // Form configuration data passed from PHP + this.data = data; + + addLoadEvent(self.init); +} + // The resizable textarea code is based on the code from Drupal (http://drupal.org/) /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2007-12-31 12:13:53
|
Revision: 262 http://pieforms.svn.sourceforge.net/pieforms/?rev=262&view=rev Author: oracleshinoda Date: 2007-12-31 04:13:56 -0800 (Mon, 31 Dec 2007) Log Message: ----------- Add proper detection for if a form is submitted by javascript. This means forms can degrade gracefully if javascript is disabled. Modified Paths: -------------- pieforms-php5/trunk/src/pieform.php pieforms-php5/trunk/src/static/core/pieforms.js Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2007-12-31 12:13:15 UTC (rev 261) +++ pieforms-php5/trunk/src/pieform.php 2007-12-31 12:13:56 UTC (rev 262) @@ -147,6 +147,14 @@ * @var bool */ private $submitted = false; + + /** + * Whether the form has been submitted by javasccript. Available through + * the {@link submitted_by_js} method. + * + * @var bool + */ + private $submitted_by_js = false; /*}}}*/ @@ -353,6 +361,13 @@ if ($this->data['validate'] && isset($global['pieform_' . $this->name] )) { if ($this->data['submit']) { $this->submitted = true; + + // If the hidden value the JS code inserts into the form is + // present, then the form was submitted by JS + if (!empty($global['pieform_jssubmission'])) { + $this->submitted_by_js = true; + } + // Check if the form has been cancelled if ($this->data['iscancellable']) { foreach ($global as $key => $value) { @@ -368,7 +383,7 @@ if (!isset($element['goto'])) { throw new PieformException('Cancel element "' . $element['name'] . '" has no page to go to'); } - if ($this->data['jsform']) { + if ($this->submitted_by_js) { $this->json_reply(PIEFORM_CANCEL, array('goto' => $element['goto']), false); } header('HTTP/1.1 303 See Other'); @@ -436,7 +451,7 @@ } // If the form has been submitted by javascript, return json - if ($this->data['jsform']) { + if ($this->submitted_by_js) { // TODO: get error messages in a 'third person' type form to // use here maybe? Would have to work for non js forms too. See // the TODO file @@ -486,6 +501,15 @@ }/*}}}*/ /** + * Returns whether the form has been submitted by javascript + * + * @return bool + */ + public function submitted_by_js() {/*{{{*/ + return $this->submitted_by_js; + }/*}}}*/ + + /** * Returns the HTML for the <form...> tag * * @return string Modified: pieforms-php5/trunk/src/static/core/pieforms.js =================================================================== --- pieforms-php5/trunk/src/static/core/pieforms.js 2007-12-31 12:13:15 UTC (rev 261) +++ pieforms-php5/trunk/src/static/core/pieforms.js 2007-12-31 12:13:56 UTC (rev 262) @@ -62,6 +62,14 @@ self.setupIframe(); $(self.data.name).target = self.data.name + '_iframe'; + appendChildNodes(self.data.name, + INPUT({ + 'type': 'hidden', + 'name': 'pieform_jssubmission', + 'value': 1 + }) + ); + window.pieformHandlers[self.data.name] = function(data) { // If canceling the form, redirect away if (data.returnCode == -2) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2008-07-07 03:16:10
|
Revision: 294 http://pieforms.svn.sourceforge.net/pieforms/?rev=294&view=rev Author: oracleshinoda Date: 2008-07-06 20:16:10 -0700 (Sun, 06 Jul 2008) Log Message: ----------- Fix an old bug - only check for submitted values if the form has actually been submitted. Previously, the value was checked for regardless of whether the form had been submitted, leading to obscure problems when there was two forms on the page. Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/calendar.php pieforms-php5/trunk/src/pieform/elements/date.php pieforms-php5/trunk/src/pieform/elements/image.php pieforms-php5/trunk/src/pieform/elements/password.php pieforms-php5/trunk/src/pieform/elements/select.php pieforms-php5/trunk/src/pieform/elements/textarea.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/elements/calendar.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/calendar.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform/elements/calendar.php 2008-07-07 03:16:10 UTC (rev 294) @@ -126,7 +126,7 @@ return $element['value']; } - if (isset($global[$name])) { + if ($form->is_submitted() && isset($global[$name])) { if (trim($global[$name]) == '') { return null; } Modified: pieforms-php5/trunk/src/pieform/elements/date.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/date.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform/elements/date.php 2008-07-07 03:16:10 UTC (rev 294) @@ -116,7 +116,7 @@ function pieform_element_date_get_value(Pieform $form, $element) {/*{{{*/ $name = $element['name']; $global = ($form->get_property('method') == 'get') ? $_GET : $_POST; - if ( isset($global[$name . '_day']) && isset($global[$name . '_month']) && isset($global[$name . '_year']) ) { + if ($form->is_submitted() && isset($global[$name . '_day']) && isset($global[$name . '_month']) && isset($global[$name . '_year'])) { $time = mktime(0, 0, 0, $global[$name . '_month'], $global[$name . '_day'], $global[$name . '_year']); if (false === $time) { return null; Modified: pieforms-php5/trunk/src/pieform/elements/image.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/image.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform/elements/image.php 2008-07-07 03:16:10 UTC (rev 294) @@ -54,7 +54,7 @@ } $global = $form->get_property('method') == 'get' ? $_GET : $_POST; - if (isset($global[$element['name'] . '_x'])) { + if ($form->is_submitted() && isset($global[$element['name'] . '_x'])) { return true; } Modified: pieforms-php5/trunk/src/pieform/elements/password.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/password.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform/elements/password.php 2008-07-07 03:16:10 UTC (rev 294) @@ -39,7 +39,7 @@ function pieform_element_password_get_value(Pieform $form, $element) {/*{{{*/ $global = ($form->get_property('method') == 'get') ? $_GET : $_POST; - if (isset($global[$element['name']])) { + if ($form->is_submitted() && isset($global[$element['name']])) { return $global[$element['name']]; } if (isset($element['value'])) { Modified: pieforms-php5/trunk/src/pieform/elements/select.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/select.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform/elements/select.php 2008-07-07 03:16:10 UTC (rev 294) @@ -136,7 +136,7 @@ if (isset($element['value'])) { $values = (array) $element['value']; } - else if (isset($global[$element['name']])) { + else if ($form->is_submitted() && isset($global[$element['name']])) { $values = (array) $global[$element['name']]; } else if (isset($element['defaultvalue'])) { @@ -157,7 +157,7 @@ if (isset($element['value'])) { $values = (array) $element['value']; } - else if (isset($global[$element['name']])) { + else if ($form->is_submitted() && isset($global[$element['name']])) { $values = (array) $global[$element['name']]; } else if (!$form->is_submitted() && isset($element['defaultvalue'])) { Modified: pieforms-php5/trunk/src/pieform/elements/textarea.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/textarea.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform/elements/textarea.php 2008-07-07 03:16:10 UTC (rev 294) @@ -79,7 +79,7 @@ } $global = ($form->get_property('method') == 'get') ? $_GET : $_POST; - if (isset($global[$element['name']])) { + if ($form->is_submitted() && isset($global[$element['name']])) { return str_replace("\r\n", "\n", $global[$element['name']]); } Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2008-03-25 05:15:13 UTC (rev 293) +++ pieforms-php5/trunk/src/pieform.php 2008-07-07 03:16:10 UTC (rev 294) @@ -716,7 +716,7 @@ if (isset($element['value'])) { return $element['value']; } - else if (isset($global[$element['name']]) && $element['type'] != 'submit') { + else if ($this->submitted && isset($global[$element['name']]) && $element['type'] != 'submit') { return $global[$element['name']]; } else if (isset($element['defaultvalue'])) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-12-23 04:35:33
|
Revision: 126 http://svn.sourceforge.net/pieforms/?rev=126&view=rev Author: oracleshinoda Date: 2006-12-22 20:35:31 -0800 (Fri, 22 Dec 2006) Log Message: ----------- Renamed the 'ajaxmessages' flag to 'submitelement', as it's used for more than just where to put ajax submit messages Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/cancel.php pieforms-php5/trunk/src/pieform/elements/image.php pieforms-php5/trunk/src/pieform/elements/submit.php pieforms-php5/trunk/src/pieform/elements/submitcancel.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/elements/cancel.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/cancel.php 2006-12-23 04:09:58 UTC (rev 125) +++ pieforms-php5/trunk/src/pieform/elements/cancel.php 2006-12-23 04:35:31 UTC (rev 126) @@ -47,7 +47,7 @@ } function pieform_element_cancel_set_attributes($element) { - $element['ajaxmessages'] = true; + $element['submitelement'] = true; return $element; } Modified: pieforms-php5/trunk/src/pieform/elements/image.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/image.php 2006-12-23 04:09:58 UTC (rev 125) +++ pieforms-php5/trunk/src/pieform/elements/image.php 2006-12-23 04:35:31 UTC (rev 126) @@ -44,7 +44,7 @@ } function pieform_element_image_set_attributes($element) { - $element['ajaxmessages'] = true; + $element['submitelement'] = true; return $element; } Modified: pieforms-php5/trunk/src/pieform/elements/submit.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/submit.php 2006-12-23 04:09:58 UTC (rev 125) +++ pieforms-php5/trunk/src/pieform/elements/submit.php 2006-12-23 04:35:31 UTC (rev 126) @@ -38,7 +38,7 @@ } function pieform_element_submit_set_attributes($element) { - $element['ajaxmessages'] = true; + $element['submitelement'] = true; return $element; } Modified: pieforms-php5/trunk/src/pieform/elements/submitcancel.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/submitcancel.php 2006-12-23 04:09:58 UTC (rev 125) +++ pieforms-php5/trunk/src/pieform/elements/submitcancel.php 2006-12-23 04:35:31 UTC (rev 126) @@ -46,7 +46,7 @@ } function pieform_element_submitcancel_set_attributes($element) { - $element['ajaxmessages'] = true; + $element['submitelement'] = true; return $element; } Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-12-23 04:09:58 UTC (rev 125) +++ pieforms-php5/trunk/src/pieform.php 2006-12-23 04:35:31 UTC (rev 126) @@ -430,8 +430,7 @@ if ($this->data['submit'] && !$this->has_errors()) { $submitted = false; foreach ($this->get_elements() as $element) { - // @todo Rename 'ajaxmessages' to 'submitelement' - if (!empty($element['ajaxmessages']) == true && isset($global[$element['name']])) { + if (!empty($element['submitelement']) == true && isset($global[$element['name']])) { $function = "{$this->name}_submit_{$element['name']}"; if (function_exists($function)) { $function($this, $values); @@ -678,8 +677,8 @@ log_debug($global); foreach ($this->get_elements() as $element) { if ($element['type'] != 'markup') { - if (empty($element['ajaxmessages']) || - !empty($element['ajaxmessages']) && isset($global[$element['name']])) { + if (empty($element['submitelement']) || + !empty($element['submitelement']) && isset($global[$element['name']])) { $result[$element['name']] = $this->get_value($element); } } @@ -729,7 +728,7 @@ $connecteventadded = false; foreach ($this->get_elements() as $element) { - if (!empty($element['ajaxmessages'])) { + if (!empty($element['submitelement'])) { if (!$connecteventadded) { $result .= "addLoadEvent(function() {\n"; $connecteventadded = true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-12-24 00:25:23
|
Revision: 139 http://svn.sourceforge.net/pieforms/?rev=139&view=rev Author: oracleshinoda Date: 2006-12-23 16:23:51 -0800 (Sat, 23 Dec 2006) Log Message: ----------- Ignore vim .swp files Property Changed: ---------------- pieforms-php5/trunk/src/ pieforms-php5/trunk/src/JSON/ pieforms-php5/trunk/src/js/ pieforms-php5/trunk/src/pieform/ Property changes on: pieforms-php5/trunk/src ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/JSON ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/js ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/pieform ___________________________________________________________________ Name: svn:ignore + *.swp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-12-24 00:26:03
|
Revision: 140 http://svn.sourceforge.net/pieforms/?rev=140&view=rev Author: oracleshinoda Date: 2006-12-23 16:25:05 -0800 (Sat, 23 Dec 2006) Log Message: ----------- Ignore vim .swp files Property Changed: ---------------- pieforms-php5/trunk/src/js/MochiKit/ pieforms-php5/trunk/src/js/jscalendar/ pieforms-php5/trunk/src/js/jscalendar/lang/ pieforms-php5/trunk/src/js/jscalendar/skins/ pieforms-php5/trunk/src/js/jscalendar/skins/aqua/ pieforms-php5/trunk/src/pieform/elements/ pieforms-php5/trunk/src/pieform/renderers/ pieforms-php5/trunk/src/pieform/rules/ Property changes on: pieforms-php5/trunk/src/js/MochiKit ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/js/jscalendar ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/js/jscalendar/lang ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/js/jscalendar/skins ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/js/jscalendar/skins/aqua ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/pieform/elements ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/pieform/renderers ___________________________________________________________________ Name: svn:ignore + *.swp Property changes on: pieforms-php5/trunk/src/pieform/rules ___________________________________________________________________ Name: svn:ignore + *.swp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2006-12-27 09:09:44
|
Revision: 153 http://svn.sourceforge.net/pieforms/?rev=153&view=rev Author: oracleshinoda Date: 2006-12-27 01:09:43 -0800 (Wed, 27 Dec 2006) Log Message: ----------- Add 'class=pieform' to all pieforms, so they can be targetted by javascript routines. Add a class of 'resizable' to textareas if needed, so javascript can target them Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/textarea.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/elements/textarea.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/textarea.php 2006-12-27 06:23:15 UTC (rev 152) +++ pieforms-php5/trunk/src/pieform/elements/textarea.php 2006-12-27 09:09:43 UTC (rev 153) @@ -55,6 +55,10 @@ Pieform::info('No value for cols or width specified for textarea "' . $element['name'] . '"'); } $element['style'] = (isset($element['style'])) ? $style . $element['style'] : $style; + + if (!empty($element['resizable'])) { + $element['class'] = (isset($element['class']) && $element['class']) ? $element['class'] . ' resizable' : 'resizable'; + } return '<textarea' . (($rows) ? ' rows="' . $rows . '"' : '') . (($cols) ? ' cols="' . $cols . '"' : '') Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2006-12-27 06:23:15 UTC (rev 152) +++ pieforms-php5/trunk/src/pieform.php 2006-12-27 09:09:43 UTC (rev 153) @@ -599,7 +599,7 @@ * @return string */ public function get_form_tag() { - $result = '<form'; + $result = '<form class="pieform"'; foreach (array('name', 'method', 'action') as $attribute) { $result .= ' ' . $attribute . '="' . $this->data[$attribute] . '"'; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2007-08-14 05:20:25
|
Revision: 216 http://pieforms.svn.sourceforge.net/pieforms/?rev=216&view=rev Author: oracleshinoda Date: 2007-08-13 22:20:27 -0700 (Mon, 13 Aug 2007) Log Message: ----------- Added support for 'requiredmarker' - put a star by each field that has the 'required' rule set on it. The implementation a little too 'hardcoded' for my liking but it's a start Modified Paths: -------------- pieforms-php5/trunk/src/pieform/renderers/div.php pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php pieforms-php5/trunk/src/pieform/renderers/oneline.php pieforms-php5/trunk/src/pieform/renderers/table.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/renderers/div.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/div.php 2007-08-01 12:44:04 UTC (rev 215) +++ pieforms-php5/trunk/src/pieform/renderers/div.php 2007-08-14 05:20:27 UTC (rev 216) @@ -54,6 +54,9 @@ else { $result .= '<label for="' . $formname . '_' . $rawelement['id'] . '">' . Pieform::hsc($rawelement['title']) . '</label>'; } + if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { + $result .= ' <span class="requiredmarker">*</span>'; + } } $result .= $builtelement; Modified: pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2007-08-01 12:44:04 UTC (rev 215) +++ pieforms-php5/trunk/src/pieform/renderers/multicolumntable.php 2007-08-14 05:20:27 UTC (rev 216) @@ -139,6 +139,9 @@ if (isset($data['settings']['title'])) { $result .= Pieform::hsc($data['settings']['title']); } + if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { + $result .= ' <span class="requiredmarker">*</span>'; + } $result .= "</th>\n\t"; foreach ($data['builtelements'] as $k => $builtelement) { Modified: pieforms-php5/trunk/src/pieform/renderers/oneline.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/oneline.php 2007-08-01 12:44:04 UTC (rev 215) +++ pieforms-php5/trunk/src/pieform/renderers/oneline.php 2007-08-14 05:20:27 UTC (rev 216) @@ -62,6 +62,9 @@ else { $result .= '<label for="' . $rawelement['id'] . '">' . Pieform::hsc($rawelement['title']) . '</label>'; } + if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { + $result .= ' <span class="requiredmarker">*</span>'; + } } $result .= $builtelement; Modified: pieforms-php5/trunk/src/pieform/renderers/table.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/table.php 2007-08-01 12:44:04 UTC (rev 215) +++ pieforms-php5/trunk/src/pieform/renderers/table.php 2007-08-14 05:20:27 UTC (rev 216) @@ -77,6 +77,9 @@ else { $result .= '<label for="' . $formname . '_' . $rawelement['id'] . '">' . Pieform::hsc($rawelement['title']) . '</label>'; } + if ($form->get_property('requiredmarker') && !empty($rawelement['rules']['required'])) { + $result .= ' <span class="requiredmarker">*</span>'; + } } $result .= "</th>\n\t\t<td>"; $result .= $builtelement; Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2007-08-01 12:44:04 UTC (rev 215) +++ pieforms-php5/trunk/src/pieform.php 2007-08-14 05:20:27 UTC (rev 216) @@ -288,7 +288,10 @@ 'tabindex' => false, // Whether to add a class of the type of the element to each element - 'elementclasses' => false + 'elementclasses' => false, + + // Whether to add * markers after each required field + 'requiredmarker' => false, ); $data = array_merge($formdefaults, $formconfig, $data); $this->data = $data; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2007-09-17 12:23:54
|
Revision: 219 http://pieforms.svn.sourceforge.net/pieforms/?rev=219&view=rev Author: oracleshinoda Date: 2007-09-17 05:23:56 -0700 (Mon, 17 Sep 2007) Log Message: ----------- Added support for 'showdescriptiononerror' flag - does what it says on the tin. Modified Paths: -------------- pieforms-php5/trunk/src/pieform/renderers/div.php pieforms-php5/trunk/src/pieform/renderers/table.php pieforms-php5/trunk/src/pieform.php Modified: pieforms-php5/trunk/src/pieform/renderers/div.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/div.php 2007-08-19 22:11:09 UTC (rev 218) +++ pieforms-php5/trunk/src/pieform/renderers/div.php 2007-09-17 12:23:56 UTC (rev 219) @@ -74,7 +74,7 @@ // Description - optional description of the element, or other note that should be visible // on the form itself (without the user having to hover over contextual help - if (!empty($rawelement['description'])) { + if ((!$form->has_errors() || $form->get_property('showdescriptiononerror')) && !empty($rawelement['description'])) { $result .= '<div class="description"> ' . Pieform::hsc($rawelement['description']) . "</div>"; } Modified: pieforms-php5/trunk/src/pieform/renderers/table.php =================================================================== --- pieforms-php5/trunk/src/pieform/renderers/table.php 2007-08-19 22:11:09 UTC (rev 218) +++ pieforms-php5/trunk/src/pieform/renderers/table.php 2007-09-17 12:23:56 UTC (rev 219) @@ -99,7 +99,7 @@ // Description - optional description of the element, or other note that should be visible // on the form itself (without the user having to hover over contextual help - if (!empty($rawelement['description'])) { + if ((!$form->has_errors() || $form->get_property('showdescriptiononerror')) && !empty($rawelement['description'])) { $result .= "\t<tr>\n\t\t<td colspan=\"2\" class=\"description\">"; $result .= $rawelement['description']; $result .= "</td>\n\t</tr>\n"; Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2007-08-19 22:11:09 UTC (rev 218) +++ pieforms-php5/trunk/src/pieform.php 2007-09-17 12:23:56 UTC (rev 219) @@ -292,6 +292,10 @@ // Whether to add * markers after each required field 'requiredmarker' => false, + + // Whether to show the description as well as the error message + // when displaying errors + 'showdescriptiononerror' => true, ); $data = array_merge($formdefaults, $formconfig, $data); $this->data = $data; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2008-01-03 09:10:56
|
Revision: 275 http://pieforms.svn.sourceforge.net/pieforms/?rev=275&view=rev Author: oracleshinoda Date: 2008-01-03 01:10:57 -0800 (Thu, 03 Jan 2008) Log Message: ----------- Fix a problem with jsforms in opera - data.goto is apparently illegal because goto is reserved. Modified Paths: -------------- pieforms-php5/trunk/src/pieform.php pieforms-php5/trunk/src/static/core/pieforms.js Modified: pieforms-php5/trunk/src/pieform.php =================================================================== --- pieforms-php5/trunk/src/pieform.php 2008-01-03 09:10:27 UTC (rev 274) +++ pieforms-php5/trunk/src/pieform.php 2008-01-03 09:10:57 UTC (rev 275) @@ -390,7 +390,7 @@ throw new PieformException('Cancel element "' . $element['name'] . '" has no page to go to'); } if ($this->submitted_by_js) { - $this->json_reply(PIEFORM_CANCEL, array('goto' => $element['goto']), false); + $this->json_reply(PIEFORM_CANCEL, array('location' => $element['goto']), false); } header('HTTP/1.1 303 See Other'); header('Location:' . $element['goto']); Modified: pieforms-php5/trunk/src/static/core/pieforms.js =================================================================== --- pieforms-php5/trunk/src/static/core/pieforms.js 2008-01-03 09:10:27 UTC (rev 274) +++ pieforms-php5/trunk/src/static/core/pieforms.js 2008-01-03 09:10:57 UTC (rev 275) @@ -166,7 +166,7 @@ window.pieformHandlers[self.data.name] = function(data) { // If canceling the form, redirect away if (data.returnCode == -2) { - window.location = data.goto; + window.location = data.location; return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |