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(); } } }
/** * * @param Petition $petition * @param string $ts_1 * @param string $ts_2 * @param PetitionSigning $existing_signing * @return Doctrine_Query */ public function queryByTargetSelector(Petition $petition, $ts_1, $ts_2, $existing_signing = null) { $ts = $petition->getTargetSelectors(); $query = $this->createQuery('c')->where('c.mailing_list_id = ?', $petition->getMailingListId()); if ($existing_signing) { $query->andWhere('c.id NOT IN (SELECT psc.contact_id FROM PetitionSigningContact psc WHERE psc.petition_signing_id = ?)', $existing_signing->getId()); } if ($ts_1 && count($ts) > 0) { $sel = $ts[0]['id']; if (is_numeric($sel)) { $is_mapping = array_key_exists('kind', $ts[0]) && $ts[0]['kind'] == MailingListMeta::KIND_MAPPING; $is_choice = array_key_exists('kind', $ts[0]) && $ts[0]['kind'] == MailingListMeta::KIND_CHOICE; $query->leftJoin('c.ContactMeta cm1'); if ($is_mapping) { $mapped_ts1 = MappingPairTable::getInstance()->getMapByIdAndA($ts[0]['mapping_id'], $ts_1); $query->andWhere('cm1.mailing_list_meta_id = ?', $ts[0]['meta_id'])->leftJoin('cm1.MailingListMetaChoice mlmc1')->andWhereIn('mlmc1.choice', $mapped_ts1); } elseif ($is_choice && is_numeric($ts_1)) { $query->andWhere('cm1.mailing_list_meta_id = ?', $sel)->andWhere('cm1.mailing_list_meta_choice_id = ?', $ts_1); } else { // should not happen $query->andWhere('cm1.mailing_list_meta_id = ?', $sel)->andWhere('cm1.value = ?', $ts_1); } } else { if ($sel === 'contact') { if (is_numeric($ts_1)) { $query->andWhere("c.id = ?", $ts_1); } } else { if (is_string($ts_1) && $ts_1 != 'all') { $query->andWhere("c.{$sel} = ?", $ts_1); } } } if ($ts_2 && count($ts) > 1) { $sel = $ts[1]['id']; if (is_numeric($sel)) { if (is_numeric($ts_2)) { $query->leftJoin('c.ContactMeta cm2')->andWhere('cm2.mailing_list_meta_id = ?', $sel)->andWhere('cm2.mailing_list_meta_choice_id = ?', $ts_2); } } else { if (is_string($ts_2) && $ts_2 != 'all') { $query->andWhere("c.{$sel} = ?", $ts_2); } } } else { if (is_numeric($ts_2)) { $query->andWhere("c.id = ?", $ts_2); } } } return $query; }