[TYPO3-dev] fe_adminLib.inc: parseValues.checkArray faulty?

Marc Wöhlken woehlken at quadracom.de
Mon Jun 14 20:34:30 CEST 2010


Hi!
When trying to setup a enhanced front end user registration form I
stumbled over a problem which might be a mistake in class user_feAdmin:

- added several checkboxes to my registration form
- set parseValues.fieldname = checkArray

HTML-Setup for checkboxes is like this:
<input type="checkbox" name="FE['fe_users']['fieldname'][0]" value="1"
/> Checkbox a
<input type="checkbox" name="FE['fe_users']['fieldname'][1]" value="1"
/> Checkbox b

When using checkArray the correct values from the database (in this case
both checkboxes are checked) are displayed on the registration form and
the following JS is added automatically:

updateForm('fe_users_form','FE[fe_users][fieldname][0]','1');
updateForm('fe_users_form','FE[fe_users][fieldname][1]','1');

This is correct. Leaving away the "checkArray" will simply result all
checkboxes being unchecked.

When submitting the form to the preview view a problem arises:
The preview uses a hidden field to hold the actual values and updates
these fields be JS,too.

updateForm('fe_users_form','FE[fe_users][filedname]','3');

At this point the value is not an array any more, it has been converted
to a bit representation (1^1+2^1) using the method shown below.

--- user_feAdmin::parseValues() ----
case 'checkArray':						
  if (is_array($this->dataArr[$theField]))	{
    reset($this->dataArr[$theField]);
    $val = 0;
    while(list($kk,$vv)=each($this->dataArr[$theField]))	{
      $kk = t3lib_div::intInRange($kk,0);
      if ($kk<=30)	{
        if ($vv)	{
          $val|=pow(2,$kk);
        }
      }
    }
    $this->dataArr[$theField] = $val;			
  } else   {$this->dataArr[$theField]=0;}
---

This method does the actual value conversion if the incoming argument is
an array and will return 0 otherwise. And that's a problem.

When trying to save this value in the final step the checkArray routine
is called again and will receive an integer value - 3 in our case -
which will be converted to 0.

That value is then saved to database which effectively removes any
selection done on the initial form.

Maybe I did not understand setting up the forms correctly but as far as
I can see I did everything as described in the documentation.

Is this a problem of the way I use class user_feAdmin or simply a
mistake in the code?

Hoping for comments

Regards
 Marc


-- 
...........................................................
Marc Wöhlken                     TYPO3 certified integrator

Quadracom - Proffe & Wöhlken

Rembertistraße 32              WWW: http://www.quadracom.de
D-28203 Bremen                E-Mail: woehlken at quadracom.de
______________             PGP-Key: http://pgp.quadracom.de




More information about the TYPO3-dev mailing list