public static function send(PetitionSigning $signing, $subject_prefix = null)
 {
     if ($signing->getValidationKind() != PetitionSigning::VALIDATION_KIND_EMAIL) {
         return;
     }
     $widget = $signing->getWidget();
     $petition = $widget->getPetition();
     $petition_text = $widget->getPetitionText();
     $subject = $petition_text->getEmailValidationSubject();
     $body = $petition_text->getEmailValidationBody();
     $validation = UtilLink::signValidation($signing->getId(), $signing->getValidationData());
     $url_ref_ = $signing->getField(Petition::FIELD_REF);
     // $this->getValue('ref');
     $url_readmore_ = $petition->getReadMoreUrl();
     $url_ref = UtilPolicat::firstString(array($url_ref_, $url_readmore_));
     $url_readmore = UtilPolicat::firstString(array($url_readmore_, $url_ref_));
     $from = $petition->getFrom();
     $to = $signing->getEmail();
     $additional_subst = array('URL-REFERER' => $url_ref, 'URL-READMORE' => $url_readmore, 'VALIDATION' => $validation, '#REFERER-URL#' => $url_ref, '#READMORE-URL#' => $url_readmore, '#VALIDATION-URL#' => $validation);
     if ($subject_prefix) {
         $i18n = sfContext::getInstance()->getI18N();
         $i18n->setCulture($signing->getWidget()->getPetitionText()->getLanguageId());
         $translated = $i18n->__($subject_prefix);
         $subject = $translated . ' ' . $subject;
     }
     UtilMail::sendWithSubst(null, $from, $to, $subject, $body, $petition_text, $widget, $additional_subst, $signing->getSubst());
 }
 public function savePetitionSigning(PetitionSigning $signing, $clean = true)
 {
     $string = '';
     foreach (array(Petition::FIELD_FULLNAME => 'fullname', Petition::FIELD_FIRSTNAME => 'firstname', Petition::FIELD_LASTNAME => 'lastname', Petition::FIELD_EMAIL => 'email', Petition::FIELD_ADDRESS => 'address', Petition::FIELD_CITY => 'city', Petition::FIELD_POSTCODE => 'post_code') as $field_name) {
         $field = trim($signing->getField($field_name, ''));
         if ($field) {
             $string .= ' ' . $field;
         }
     }
     $parts = explode(' ', PetitionSigningSearchTable::normalize($string));
     $final_parts = array();
     foreach ($parts as $part) {
         $part = trim($part);
         $len = mb_strlen($part, 'UTF-8');
         if ($len > 2) {
             if ($len > 48) {
                 $final_parts[] = mb_substr($part, 0, 48, 'UTF-8');
             } else {
                 $final_parts[] = $part;
             }
         }
     }
     $unique_array = array_unique($final_parts, SORT_STRING);
     if (count($unique_array)) {
         if ($clean && $signing->getId()) {
             $this->createQuery('pss')->where('pss.id = ?', $signing->getId())->delete()->execute();
         }
         $i = 0;
         try {
             $con = $this->getConnection();
             $con->beginTransaction();
             foreach ($unique_array as $keyword) {
                 if ($i++ > 10) {
                     break;
                 }
                 $psk = new PetitionSigningSearch();
                 $psk->setPetitionSigning($signing);
                 $psk->setKeyword($keyword);
                 $psk->save();
                 $psk->free();
             }
             $con->commit();
         } catch (Exception $e) {
             $con->rollback();
         }
     }
 }