Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 1.0.2

Bug #3124 frozen select options not displayed
Submitted: 2005-01-06 19:41 UTC
From: andrew dot clark at ucsb dot edu Assigned: justinpatrin
Status: Closed Package: DB_DataObject_FormBuilder
PHP Version: 4.3.10 OS: FreeBSD
Roadmaps: (Not assigned)    
Subscription  
Comments Add Comment Add patch


Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know! Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem : 50 - 35 = ?

 
 [2005-01-06 19:41 UTC] andrew dot clark at ucsb dot edu
Description: ------------ Frozen select options (like enumFields) don't display their selected value(s). This might be a bug in QuickForm itself.

Comments

 [2005-01-06 20:11 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-06 21:56 UTC] andrew dot clark at ucsb dot edu
I have QuickForm 3.2.4pl1 (installed via ports). A print_r of the form does show the value for that element: [_values] => Array ( [0] => secondary ) There's hidden select element for that element with the proper value: <input type="hidden" name="1eee4010bf7f28dcdea252b831fcc6d6role" value="secondary" /></td> It does properly display when not frozen. I should note I'm using elementNamePrefix in this form.
 [2005-01-06 22:06 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-06 22:19 UTC] andrew dot clark at ucsb dot edu
It displays nothing. I'm not using a custom renderer, and further snooping shows that a select element created in preProcessForm, for instance, does properly display when frozen. This particular element that I'm using in enumFields will properly display when frozen if I define the element in preProcessForm like so: function preGenerateForm(&$fb) { $role_options = array( 'primary' => 'primary', 'secondary' => 'secondary', 'security' => 'security' , 'financial' => 'financial' ); $this->fb_preDefElements['role'] = HTML_QuickForm::createElement( 'select', $fb->elementNamePrefix.'role'.$fb->elementNamePostfix, 'Role', $role_options ); } So it seems like it might be a bug in enumFields. I'm using DB_DataObject_FormBuilder 0.10.3, so I'll give CVS a go.
 [2005-01-06 22:39 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-06 22:59 UTC] andrew dot clark at ucsb dot edu
It doesn't work with the latest CVS. Here's some background. I have a net_contact crosslinking table that links nets to contacts. Other than it's own id, the contact_id, net_id, and some datetime fields, it includes an extra field "role" which indicates the role that the contact has for that network. role is a MySQL enum with the following options at the moment: enum('primary','secondary','security','financial') The relevant DataObject code is as follows: var $fb_enumFields = array('role'); var $fb_userEditableFields = array('role', 'last_verified'); There are no [ or ] in my [pre|post]fix (it's an md5 hash). Removing the prefix doesn't appear to make any difference. I'm using the default enum callback.
 [2005-01-06 23:43 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-06 23:49 UTC] andrew dot clark at ucsb dot edu
No. While the table containing the enum in question is a cross-linking table, it is not currently set up with crossLinks.
 [2005-01-08 01:01 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-11 20:08 UTC] andrew dot clark at ucsb dot edu
Here's the column (pardon line wrapping): mysql> show columns from net_contact like 'role'; +-------+----------------------------------------------------+------+-----+-----------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------------------------------------+------+-----+-----------+-------+ | role | enum('primary','secondary','security','financial') | | | secondary | | +-------+----------------------------------------------------+------+-----+-----------+-------+ 1 row in set (0.01 sec) I'm using the default renderer. Here's the net_contact DO code (modified slightly, pardon the cruft still in the code): <?php /** * Table Definition for net_contact */ require_once 'DB/DataObject.php'; class DataObjects_Net_contact extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ var $__table = 'net_contact'; // table name var $net_contact_id; // int(16) not_null primary_key unsigned var $net_id; // int(16) not_null unsigned var $contact_id; // int(16) not_null unsigned var $role; // string(9) enum var $last_modified; // timestamp(14) not_null unsigned zerofill timestamp var $last_verified; // timestamp(14) not_null unsigned zerofill /* ZE2 compatibility trick*/ function __clone() { return $this;} /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_Net_contact',$k,$v); } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE var $fb_enumFields = array('role'); var $fb_dateFields = array('last_modified', 'last_verified'); var $fb_userEditableFields = array( 'role', 'last_verified','contact_id','net_id' ); var $fb_fieldLabels = array( 'last_verified' => 'Last Verified', 'last_modified' => 'Last Modified', 'net_id' => 'Linked Net', 'contact_id' => 'Linked Contact', ); var $fb_selectAddEmpty = array('role'); var $fb_crossLinkExtraFields = array('role'); function ident() { $ident = false; foreach ($this->keys() as $k) { if ( isset($this->$k) ) { $ident .= $k.$this->$k; } } //return $ident === false ? false : md5(uniqid($ident)); return $ident === false ? false : md5($ident); } function format() { return true; } function unformat() { return true; } function insert() { if (isset($this->last_modified)) { unset($this->last_modified); }; $this->unformat(); parent::insert(); } function update($do = false) { if (isset($this->last_modified)) { unset($this->last_modified); }; $this->unformat(); parent::update($do); } /* // workaround for FormBuilder not showing frozen enums function preGenerateForm(&$fb) { $role_options = array( null => null, 'primary' => 'primary', 'secondary' => 'secondary', 'security' => 'security' , 'financial' => 'financial' ); $this->fb_preDefElements['role'] = HTML_QuickForm::createElement( 'select', $fb->elementNamePrefix .'role' .$fb->elementNamePostfix, 'Role', $role_options ); } */ } ?> and here's some code to display the problem: <?php require_once 'include/config.php'; require_once 'DB/DataObject/FormBuilder.php'; DB_DataObject::debugLevel(0); $self =& DB_DataObject::factory('net_contact'); if (PEAR::isError($self)) { die ( $self->getMessage() ); } // FIXME case for tables with more than one key? // in which cases do we actually need these? $key = $self->keys(); $pk = $key[0]; $action = array(); if ( !empty($_GET[$pk]) ) { if ( preg_match('/\d+/', $_GET[$pk]) ) { // FIXME if get fails? $self->get($_GET[$pk]) or die("No such id: $pk $_GET[$pk]"); } array_push($action,"$pk=" .$self->$pk); } if (count($action) !== 0) { $action = join("&",$action); $action = $_SERVER['PHP_SELF'] ."?$action"; } $builder =& DB_DataObject_FormBuilder::create($self); // form $fb_options = array( 'elementNamePrefix' => $self->ident(), ); $form =& $builder->getForm($action,$fb_options); $form->freeze(); echo $form->toHtml(); ?>
 [2005-01-13 04:12 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-13 19:42 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!
 [2005-01-13 22:18 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!