protected function doUpdateObject($values)
 {
     $code = PetitionSigning::genCode();
     if ($this->getObject()->getPetition()->isGeoKind()) {
         // EMAIL-TO-LIST ACTION (AND PLEDGE)
         $fields = array();
         $formFields = array();
         foreach ($this->formfields as $fieldname) {
             $formFields[] = $fieldname;
         }
         if ($this->getObject()->getPetition()->isEmailKind()) {
             $formFields[] = Petition::FIELD_EMAIL_SUBJECT;
             $formFields[] = Petition::FIELD_EMAIL_BODY;
         }
         $non_json_fields = array('email', 'country', 'subscribe');
         foreach ($formFields as $fieldname) {
             if (!in_array($fieldname, $non_json_fields)) {
                 if (array_key_exists($fieldname, $values)) {
                     $fields[$fieldname] = $values[$fieldname];
                 }
             }
         }
         $fields[Petition::FIELD_REF] = $values[Petition::FIELD_REF];
         $wave = new PetitionSigningWave();
         $wave->setWave($this->getObject()->getWavePending());
         $wave->setFields(json_encode($fields));
         $wave->setEmail($this->getValue(Petition::FIELD_EMAIL));
         $wave->setCountry($this->getObject()->getPetition()->getWithCountry() ? $this->getValue(Petition::FIELD_COUNTRY) : $this->getObject()->getPetition()->getDefaultCountry());
         $wave->setValidationData($code);
         $wave->setLanguageId($this->getObject()->getWidget()->getPetitionText()->getLanguageId());
         $wave->setWidgetId($this->getObject()->getWidgetId());
         $wave->setContactNum($this->contact_num);
         $object = $this->getObject();
         $object['PetitionSigningWave'][] = $wave;
     }
     if (!$this->getObject()->isNew()) {
         unset($values[Petition::FIELD_EMAIL_SUBJECT], $values[Petition::FIELD_EMAIL_BODY]);
     }
     if (!$this->getObject()->getPetition()->getWithCountry()) {
         $values['country'] = $this->getObject()->getPetition()->getDefaultCountry();
     }
     $validation_kind = $this->getOption('validation_kind', PetitionSigning::VALIDATION_KIND_NONE);
     switch ($validation_kind) {
         case PetitionSigning::VALIDATION_KIND_EMAIL:
             $values['validation_data'] = $code;
             $values['validation_kind'] = PetitionSigning::VALIDATION_KIND_EMAIL;
             break;
         case PetitionSigning::VALIDATION_KIND_NONE:
         default:
             $values['validation_kind'] = PetitionSigning::VALIDATION_KIND_NONE;
             break;
     }
     unset($values['id']);
     parent::doUpdateObject($values);
 }