Changeset 629

Show
Ignore:
Timestamp:
11/01/07 00:34:16 (1 year ago)
Author:
laurentj
Message:

fixed bug #306: errors when using jForms with multiple keys

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/build/manifests/testapp.mn

    r574 r629  
    9595  product_tags.dao.xml 
    9696  description.dao.xml 
     97  labels.dao.xml 
    9798cd testapp/modules/jelix_tests/forms 
    9899  product.form.xml 
    99  
     100  label.form.xml 
    100101cd testapp/modules/jelix_tests/tests/ 
    101102  core.jlocale.html.php 
  • trunk/build/manifests/testapp.mn

    r574 r629  
    9595  product_tags.dao.xml 
    9696  description.dao.xml 
     97  labels.dao.xml 
    9798cd testapp/modules/jelix_tests/forms 
    9899  product.form.xml 
    99  
     100  label.form.xml 
    100101cd testapp/modules/jelix_tests/tests/ 
    101102  core.jlocale.html.php 
  • trunk/lib/jelix/forms/jForms.class.php

    r549 r629  
    4949        $c = $sel->getClass(); 
    5050        if($formId === null) $formId=JFORMS_DEFAULT_ID; 
    51         if(!isset($_SESSION['JFORMS'][$formSel][$formId])){ 
    52             $_SESSION['JFORMS'][$formSel][$formId]= new jFormsDataContainer($formSel, $formId); 
     51        $fid = is_array($formId) ? serialize($formId) : $formId; 
     52        if(!isset($_SESSION['JFORMS'][$formSel][$fid])){ 
     53            $_SESSION['JFORMS'][$formSel][$fid]= new jFormsDataContainer($formSel, $formId); 
    5354        } 
    54         $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$formId],true); 
     55        $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$fid],true); 
    5556        return $form; 
    5657    } 
     
    6869        global $gJCoord; 
    6970        if($formId === null) $formId=JFORMS_DEFAULT_ID; 
     71        $fid = is_array($formId) ? serialize($formId) : $formId; 
    7072 
    71         if(!isset($_SESSION['JFORMS'][$formSel][$formId])){ 
     73        if(!isset($_SESSION['JFORMS'][$formSel][$fid])){ 
    7274            return null; 
    7375        } 
     
    7678        jIncluder::inc($sel); 
    7779        $c = $sel->getClass(); 
    78         $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$formId],false); 
     80        $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$fid],false); 
    7981 
    8082        return $form; 
     
    108110      global $gJCoord; 
    109111      if($formId === null) $formId=JFORMS_DEFAULT_ID; 
     112      if(is_array($formId)) $formId = serialize($formId); 
    110113      if(isset($_SESSION['JFORMS'][$formSel][$formId])){ 
    111114          unset($_SESSION['JFORMS'][$formSel][$formId]); 
  • trunk/lib/jelix/forms/jForms.class.php

    r549 r629  
    4949        $c = $sel->getClass(); 
    5050        if($formId === null) $formId=JFORMS_DEFAULT_ID; 
    51         if(!isset($_SESSION['JFORMS'][$formSel][$formId])){ 
    52             $_SESSION['JFORMS'][$formSel][$formId]= new jFormsDataContainer($formSel, $formId); 
     51        $fid = is_array($formId) ? serialize($formId) : $formId; 
     52        if(!isset($_SESSION['JFORMS'][$formSel][$fid])){ 
     53            $_SESSION['JFORMS'][$formSel][$fid]= new jFormsDataContainer($formSel, $formId); 
    5354        } 
    54         $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$formId],true); 
     55        $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$fid],true); 
    5556        return $form; 
    5657    } 
     
    6869        global $gJCoord; 
    6970        if($formId === null) $formId=JFORMS_DEFAULT_ID; 
     71        $fid = is_array($formId) ? serialize($formId) : $formId; 
    7072 
    71         if(!isset($_SESSION['JFORMS'][$formSel][$formId])){ 
     73        if(!isset($_SESSION['JFORMS'][$formSel][$fid])){ 
    7274            return null; 
    7375        } 
     
    7678        jIncluder::inc($sel); 
    7779        $c = $sel->getClass(); 
    78         $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$formId],false); 
     80        $form = new $c($sel->toString(), $_SESSION['JFORMS'][$formSel][$fid],false); 
    7981 
    8082        return $form; 
     
    108110      global $gJCoord; 
    109111      if($formId === null) $formId=JFORMS_DEFAULT_ID; 
     112      if(is_array($formId)) $formId = serialize($formId); 
    110113      if(isset($_SESSION['JFORMS'][$formSel][$formId])){ 
    111114          unset($_SESSION['JFORMS'][$formSel][$formId]); 
  • trunk/lib/jelix/forms/jFormsBase.class.php

    r606 r629  
    140140        $dao = jDao::create($daoSelector, $dbProfil); 
    141141        $daorec = $dao->get($key); 
    142         if(!$daorec) 
     142        if(!$daorec) { 
     143            if(is_array($key)) $key = var_export($key,true); 
    143144            throw new jExceptionForms('jelix~formserr.bad.formid.for.dao', array($daoSelector, $key, $this->_sel)); 
     145        } 
    144146 
    145147        $prop = $dao->getProperties(); 
     
    199201                $key = $this->_container->formId; 
    200202            $daorec->setPk($key); 
    201             $dao->update($daorec); 
     203            if($dao->update($daorec) == 0) 
     204                $dao->insert($daorec); 
    202205        }else{ 
    203206            if($key !== null) 
  • trunk/lib/jelix/forms/jFormsBase.class.php

    r606 r629  
    140140        $dao = jDao::create($daoSelector, $dbProfil); 
    141141        $daorec = $dao->get($key); 
    142         if(!$daorec) 
     142        if(!$daorec) { 
     143            if(is_array($key)) $key = var_export($key,true); 
    143144            throw new jExceptionForms('jelix~formserr.bad.formid.for.dao', array($daoSelector, $key, $this->_sel)); 
     145        } 
    144146 
    145147        $prop = $dao->getProperties(); 
     
    199201                $key = $this->_container->formId; 
    200202            $daorec->setPk($key); 
    201             $dao->update($daorec); 
     203            if($dao->update($daorec) == 0) 
     204                $dao->insert($daorec); 
    202205        }else{ 
    203206            if($key !== null) 
  • trunk/lib/jelix/plugins/db/sqlite/sqlite.dbconnection.php

    r482 r629  
    8787            throw new jException('jelix~db.error.query.bad', sqlite_error_string($this->_connection).'('.$query.')'); 
    8888        } 
    89         exit; 
    9089    } 
    9190 
  • trunk/lib/jelix/plugins/db/sqlite/sqlite.dbconnection.php

    r482 r629  
    8787            throw new jException('jelix~db.error.query.bad', sqlite_error_string($this->_connection).'('.$query.')'); 
    8888        } 
    89         exit; 
    9089    } 
    9190 
  • trunk/testapp/install/install.mysql.sql

    r571 r629  
    125125`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    126126`name` VARCHAR( 150 ) NOT NULL , 
    127 `price` FLOAT NOT NULL 
     127`price` FLOAT NOT NULL, 
     128`create_date` datetime NOT NULL 
    128129) TYPE = MYISAM ; 
    129130 
     
    134135) ENGINE = MYISAM ; 
    135136 
     137CREATE TABLE `labels_test` ( 
     138`key` INT NOT NULL , 
     139`lang` VARCHAR( 5 ) NOT NULL , 
     140`label` VARCHAR( 50 ) NOT NULL , 
     141PRIMARY KEY ( `key` , `lang` ) 
     142); 
     143 
    136144-- for the crud example 
    137145CREATE TABLE `products` ( 
     
    140148`price` FLOAT NOT NULL 
    141149) TYPE = MYISAM ; 
     150 
     151 
  • trunk/testapp/install/install.mysql.sql

    r571 r629  
    125125`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
    126126`name` VARCHAR( 150 ) NOT NULL , 
    127 `price` FLOAT NOT NULL 
     127`price` FLOAT NOT NULL, 
     128`create_date` datetime NOT NULL 
    128129) TYPE = MYISAM ; 
    129130 
     
    134135) ENGINE = MYISAM ; 
    135136 
     137CREATE TABLE `labels_test` ( 
     138`key` INT NOT NULL , 
     139`lang` VARCHAR( 5 ) NOT NULL , 
     140`label` VARCHAR( 50 ) NOT NULL , 
     141PRIMARY KEY ( `key` , `lang` ) 
     142); 
     143 
    136144-- for the crud example 
    137145CREATE TABLE `products` ( 
     
    140148`price` FLOAT NOT NULL 
    141149) TYPE = MYISAM ; 
     150 
     151 
  • trunk/testapp/modules/jelix_tests/tests/jforms.html.php

    r605 r629  
    1616    protected $form2; 
    1717 
    18     protected $form1Descriptor, $form2Descriptor
     18    protected $form1Descriptor, $form2Descriptor, $formLabelDescriptor
    1919 
    2020    function testStart(){ 
     
    8989</object>'; 
    9090 
     91        $this->formLabelDescriptor = ' 
     92<object class="cForm_jelix_tests_Jx_label"> 
     93    <object method="getContainer()" class="jFormsDataContainer"> 
     94        <array property="formId">array(1,\'fr\')</array> 
     95        <string property="formSelector" value="label" /> 
     96        <array property="datas"> 
     97            <string key="label" value="" /> 
     98        </array> 
     99        <array property="errors">array()</array> 
     100    </object> 
     101    <array method="getDatas()"> 
     102        <string key="label" value="" /> 
     103    </array> 
     104    <array method="id()">array(1,\'fr\')</array> 
     105    <array method="getControls()"> 
     106        <object key="label" class="jFormsControlInput"> 
     107            <string property="ref" value="label"/> 
     108            <boolean property="required" value="true"/> 
     109            <boolean property="readonly" value="false"/> 
     110            <string property="label" value="The label"/> 
     111            <string property="defaultValue" value=""/> 
     112        </object> 
     113    </array> 
     114</object>'; 
    91115    } 
    92116 
     
    137161</array>'; 
    138162        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
     163 
     164 
     165        $this->formLabel = jForms::create('label', array(1,'fr')); 
     166        $this->assertComplexIdenticalStr($this->formLabel, $this->formLabelDescriptor); 
     167        $verif=' 
     168<array> 
     169     <array key="product"> 
     170        <object key="'.JFORMS_DEFAULT_ID.'" class="jFormsDataContainer"> 
     171            <integer property="formId" value="'.JFORMS_DEFAULT_ID.'" /> 
     172            <string property="formSelector" value="product" /> 
     173            <array property="datas"> 
     174                <string key="name" value="" /> 
     175                <string key="price" value="" /> 
     176            </array> 
     177            <array property="errors">array()</array> 
     178        </object> 
     179        <object key="akey" class="jFormsDataContainer"> 
     180            <string property="formId" value="akey" /> 
     181            <string property="formSelector" value="product" /> 
     182            <array property="datas"> 
     183                <string key="name" value="" /> 
     184                <string key="price" value="" /> 
     185            </array> 
     186            <array property="errors">array()</array> 
     187        </object> 
     188     </array> 
     189     <array key="label"> 
     190        <object key="a:2:{i:0;i:1;i:1;s:2:&quot;fr&quot;;}" class="jFormsDataContainer"> 
     191            <array property="formId">array(1,\'fr\')</array> 
     192            <string property="formSelector" value="label" /> 
     193            <array property="datas"> 
     194                <string key="label" value="" /> 
     195            </array> 
     196            <array property="errors">array()</array> 
     197        </object> 
     198     </array> 
     199</array>'; 
     200        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
    139201    } 
    140202 
     
    151213        $f3 = jForms::get('product', 'anUnknowKey'); 
    152214        $this->assertNull($f3); 
     215 
     216        $f4 = jForms::get('label', array(1,'fr')); 
     217        $this->assertComplexIdenticalStr($f4, $this->formLabelDescriptor); 
     218        $this->assertIdentical($f4, $this->formLabel); 
    153219    } 
    154220 
     
    258324        </object> 
    259325     </array> 
     326     <array key="label"> 
     327        <object key="a:2:{i:0;i:1;i:1;s:2:&quot;fr&quot;;}" class="jFormsDataContainer"> 
     328            <array property="formId">array(1,\'fr\')</array> 
     329            <string property="formSelector" value="label" /> 
     330            <array property="datas"> 
     331                <string key="label" value="" /> 
     332            </array> 
     333            <array property="errors">array()</array> 
     334        </object> 
     335     </array> 
    260336</array>'; 
    261337        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
     
    265341<array> 
    266342     <array key="product">array()</array> 
     343     <array key="label"> 
     344        <object key="a:2:{i:0;i:1;i:1;s:2:&quot;fr&quot;;}" class="jFormsDataContainer"> 
     345            <array property="formId">array(1,\'fr\')</array> 
     346            <string property="formSelector" value="label" /> 
     347            <array property="datas"> 
     348                <string key="label" value="" /> 
     349            </array> 
     350            <array property="errors">array()</array> 
     351        </object> 
     352     </array> 
    267353</array>'; 
    268354        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
  • trunk/testapp/modules/jelix_tests/tests/jforms.html.php

    r605 r629  
    1616    protected $form2; 
    1717 
    18     protected $form1Descriptor, $form2Descriptor
     18    protected $form1Descriptor, $form2Descriptor, $formLabelDescriptor
    1919 
    2020    function testStart(){ 
     
    8989</object>'; 
    9090 
     91        $this->formLabelDescriptor = ' 
     92<object class="cForm_jelix_tests_Jx_label"> 
     93    <object method="getContainer()" class="jFormsDataContainer"> 
     94        <array property="formId">array(1,\'fr\')</array> 
     95        <string property="formSelector" value="label" /> 
     96        <array property="datas"> 
     97            <string key="label" value="" /> 
     98        </array> 
     99        <array property="errors">array()</array> 
     100    </object> 
     101    <array method="getDatas()"> 
     102        <string key="label" value="" /> 
     103    </array> 
     104    <array method="id()">array(1,\'fr\')</array> 
     105    <array method="getControls()"> 
     106        <object key="label" class="jFormsControlInput"> 
     107            <string property="ref" value="label"/> 
     108            <boolean property="required" value="true"/> 
     109            <boolean property="readonly" value="false"/> 
     110            <string property="label" value="The label"/> 
     111            <string property="defaultValue" value=""/> 
     112        </object> 
     113    </array> 
     114</object>'; 
    91115    } 
    92116 
     
    137161</array>'; 
    138162        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
     163 
     164 
     165        $this->formLabel = jForms::create('label', array(1,'fr')); 
     166        $this->assertComplexIdenticalStr($this->formLabel, $this->formLabelDescriptor); 
     167        $verif=' 
     168<array> 
     169     <array key="product"> 
     170        <object key="'.JFORMS_DEFAULT_ID.'" class="jFormsDataContainer"> 
     171            <integer property="formId" value="'.JFORMS_DEFAULT_ID.'" /> 
     172            <string property="formSelector" value="product" /> 
     173            <array property="datas"> 
     174                <string key="name" value="" /> 
     175                <string key="price" value="" /> 
     176            </array> 
     177            <array property="errors">array()</array> 
     178        </object> 
     179        <object key="akey" class="jFormsDataContainer"> 
     180            <string property="formId" value="akey" /> 
     181            <string property="formSelector" value="product" /> 
     182            <array property="datas"> 
     183                <string key="name" value="" /> 
     184                <string key="price" value="" /> 
     185            </array> 
     186            <array property="errors">array()</array> 
     187        </object> 
     188     </array> 
     189     <array key="label"> 
     190        <object key="a:2:{i:0;i:1;i:1;s:2:&quot;fr&quot;;}" class="jFormsDataContainer"> 
     191            <array property="formId">array(1,\'fr\')</array> 
     192            <string property="formSelector" value="label" /> 
     193            <array property="datas"> 
     194                <string key="label" value="" /> 
     195            </array> 
     196            <array property="errors">array()</array> 
     197        </object> 
     198     </array> 
     199</array>'; 
     200        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
    139201    } 
    140202 
     
    151213        $f3 = jForms::get('product', 'anUnknowKey'); 
    152214        $this->assertNull($f3); 
     215 
     216        $f4 = jForms::get('label', array(1,'fr')); 
     217        $this->assertComplexIdenticalStr($f4, $this->formLabelDescriptor); 
     218        $this->assertIdentical($f4, $this->formLabel); 
    153219    } 
    154220 
     
    258324        </object> 
    259325     </array> 
     326     <array key="label"> 
     327        <object key="a:2:{i:0;i:1;i:1;s:2:&quot;fr&quot;;}" class="jFormsDataContainer"> 
     328            <array property="formId">array(1,\'fr\')</array> 
     329            <string property="formSelector" value="label" /> 
     330            <array property="datas"> 
     331                <string key="label" value="" /> 
     332            </array> 
     333            <array property="errors">array()</array> 
     334        </object> 
     335     </array> 
    260336</array>'; 
    261337        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
     
    265341<array> 
    266342     <array key="product">array()</array> 
     343     <array key="label"> 
     344        <object key="a:2:{i:0;i:1;i:1;s:2:&quot;fr&quot;;}" class="jFormsDataContainer"> 
     345            <array property="formId">array(1,\'fr\')</array> 
     346            <string property="formSelector" value="label" /> 
     347            <array property="datas"> 
     348                <string key="label" value="" /> 
     349            </array> 
     350            <array property="errors">array()</array> 
     351        </object> 
     352     </array> 
    267353</array>'; 
    268354        $this->assertComplexIdenticalStr($_SESSION['JFORMS'], $verif); 
  • trunk/testapp/modules/jelix_tests/tests/jforms.with_dao.html.php

    r605 r629  
    1818        $_SESSION['JFORMS'] = array(); 
    1919        $form = jForms::create('product'); 
     20        $form = jForms::create('label', array(1,'fr')); 
     21        $form = jForms::create('label', array(1,'en')); 
    2022        $this->emptyTable('product_test'); 
    2123        $this->emptyTable('product_tags_test'); 
     24        $this->emptyTable('labels_test'); 
    2225        $this->savedParams = $gJCoord->request->params; 
    2326    } 
     
    4548        ); 
    4649        $this->assertTableContainsRecords('product_tags_test', $records); 
    47  
    48  
    4950 
    5051        //insert a second product 
     
    7071        ); 
    7172        $this->assertTableContainsRecords('product_tags_test', $records); 
    72  
     73    } 
     74 
     75    function testInsertDao2(){ 
     76        global $gJCoord; 
     77 
     78        $gJCoord->request->params['label'] = 'bonjour'; 
     79        $form = jForms::fill('label', array(1,'fr')); 
     80 
     81        // save main datas 
     82        $form->saveToDao('labels'); 
     83        $records = array( 
     84            array('key'=>1, 'lang'=>'fr', 'label'=>'bonjour'), 
     85        ); 
     86        $this->assertTableContainsRecords('labels_test', $records); 
     87 
     88        //insert a second label 
     89        $gJCoord->request->params['label'] = 'Hello'; 
     90        $form = jForms::fill('label', array(1,'en')); 
     91 
     92        $form->saveToDao('labels'); 
     93        $records = array( 
     94            array('key'=>1, 'lang'=>'fr', 'label'=>'bonjour'), 
     95            array('key'=>1, 'lang'=>'en', 'label'=>'Hello'), 
     96        ); 
     97        $this->assertTableContainsRecords('labels_test', $records); 
    7398    } 
    7499 
  • trunk/testapp/modules/jelix_tests/tests/jforms.with_dao.html.php

    r605 r629  
    1818        $_SESSION['JFORMS'] = array(); 
    1919        $form = jForms::create('product'); 
     20        $form = jForms::create('label', array(1,'fr')); 
     21        $form = jForms::create('label', array(1,'en')); 
    2022        $this->emptyTable('product_test'); 
    2123        $this->emptyTable('product_tags_test'); 
     24        $this->emptyTable('labels_test'); 
    2225        $this->savedParams = $gJCoord->request->params; 
    2326    } 
     
    4548        ); 
    4649        $this->assertTableContainsRecords('product_tags_test', $records); 
    47  
    48  
    4950 
    5051        //insert a second product 
     
    7071        ); 
    7172        $this->assertTableContainsRecords('product_tags_test', $records); 
    72  
     73    } 
     74 
     75    function testInsertDao2(){ 
     76        global $gJCoord; 
     77 
     78        $gJCoord->request->params['label'] = 'bonjour'; 
     79        $form = jForms::fill('label', array(1,'fr')); 
     80 
     81        // save main datas 
     82        $form->saveToDao('labels'); 
     83        $records = array( 
     84            array('key'=>1, 'lang'=>'fr', 'label'=>'bonjour'), 
     85        ); 
     86        $this->assertTableContainsRecords('labels_test', $records); 
     87 
     88        //insert a second label 
     89        $gJCoord->request->params['label'] = 'Hello'; 
     90        $form = jForms::fill('label', array(1,'en')); 
     91 
     92        $form->saveToDao('labels'); 
     93        $records = array( 
     94            array('key'=>1, 'lang'=>'fr', 'label'=>'bonjour'), 
     95            array('key'=>1, 'lang'=>'en', 'label'=>'Hello'), 
     96        ); 
     97        $this->assertTableContainsRecords('labels_test', $records); 
    7398    } 
    7499 
Download in other formats: Unified Diff Zip Archive