/**
  * prepare un ensemble de valeur de manière à étre incluse dans une
  * requète SQL
  * EXPERIMENTAL !!!
  * @param   object   $object         objet dont les propriétés vont être incluse dans la requète
  * @param   CopixObjectDbProperties    $objectProperties objet de propriétes des champs de l'objet
  * @param   array    $propertiesList   liste de propriété à inclure ou exclure dans la preparation
  * @param   boolean  $excludePropertiesList  indique si la liste des propriétés $propertiesList est à inclure ou exclure
  * @return  array    liste des propriétés avec leurs valeurs.
  */
 function prepareValues(&$object, &$objectProperties, $propertiesList = null, $excludePropertiesList = true)
 {
     $propTypes = $objectProperties->fieldTypeList;
     $mapping = array_flip($objectProperties->fieldPropList);
     $properties = get_object_vars($object);
     $fields = array();
     foreach ($properties as $propname => $value) {
         if (!isset($mapping[$propname])) {
             // est ce que cette propriété est référencée dans le mapping ?
             continue;
         }
         if ($excludePropertiesList) {
             if (is_array($propertiesList) && in_array($propname, $propertiesList)) {
                 // est ce une propriété exclue temporairement ?
                 continue;
             }
         } else {
             if (!is_array($propertiesList)) {
                 continue;
             }
             if (!in_array($propname, $propertiesList)) {
                 // est ce une propriété qu'il faut inclure ?
                 continue;
             }
         }
         $fieldname = $mapping[$propname];
         if (isset($propTypes[$fieldname])) {
             switch ($propTypes[$fieldname] & 0xff) {
                 case COPIXDB_TYPE_INTEGER:
                     $value = intval($value);
                     break;
                 case COPIXDB_TYPE_FLOAT:
                     $value = doubleval($value);
                     break;
                 case COPIXDB_TYPE_BOOLEAN:
                     switch ($propTypes[$fieldname]) {
                         case COPIXDB_TYPE_BOOLEAN_01:
                             $value = $value ? 1 : 0;
                             break;
                         case COPIXDB_TYPE_BOOLEAN_YN:
                             $value = $value ? '\'Y\'' : '\'N\'';
                             break;
                         case COPIXDB_TYPE_BOOLEAN_BOOL:
                             $value = $value ? 'true' : 'false';
                             break;
                         case COPIXDB_TYPE_BOOLEAN_STR:
                             $value = $value ? '\'1\'' : '\'\'';
                             break;
                     }
                     break;
                 default:
                     $value = $this->connector->quote($value);
             }
         } else {
             $value = $this->connector->quote($value);
         }
         if (isset($objectProperties->appliedFunctionToIUList[$fieldname])) {
             $value = sprintf($objectProperties->appliedFunctionToIUList[$fieldname], $value);
         }
         $fields[$fieldname] = $value;
     }
     return $fields;
 }