source: cpc/trunk/project/lib/task/sendAlertTask.class.php @ 1327

Last change on this file since 1327 was 1327, checked in by teymour, 11 years ago

La mécanique des alertes mails :
Dans la table alerte :

  • query : est la query solr correspondant à l'alerte (mot clé et/ou filtre)
  • last_mail : la date du dernier object envoyé (soit du dernier envoi mais ca permet de ne pas rater d'object), ces changements de date sont générés par la tache d'envoi, il faut donc justr l'initialiser à la création avec la date courrante
  • titre : soit les mots clés soit une explication textuelle de l'alerte (pour les alertes complexe, genre « commentaire en réponse à votre commentaire du 10 juin »)

pour la query les filtres peuvent être :
object_name:<Table>
object_id:<tupple_id>
ou des tags
tag:<nom_tag>

un certains nombre de tags sont autogérés. Pour les commentaires, par exemple, la référence à l'object est généré par tag.
Pour s'abonner aux commentaires en réponse à Intervention/XXX car donne la query :
tag:object_type=Intervention tag:object_id=XXX

File size: 2.1 KB
Line 
1<?php
2
3class sendAlertTask extends sfBaseTask
4{
5  protected function configure()
6  {
7    $this->namespace = 'send';
8    $this->name = 'Alert';
9    $this->briefDescription = 'send alerts';
10    $this->addOption('env', null, sfCommandOption::PARAMETER_OPTIONAL, 'Changes the environment this task is run in', 'test');
11    $this->addOption('app', null, sfCommandOption::PARAMETER_OPTIONAL, 'Changes the environment this task is run in', 'frontend');
12  }
13 
14  protected function execute($arguments = array(), $options = array())
15  {
16    $this->configuration = sfProjectConfiguration::getApplicationConfiguration($options['app'], $options['dev'], true);
17    $manager = new sfDatabaseManager($this->configuration);
18    $context = sfContext::createInstance($this->configuration);
19    $this->configuration->loadHelpers('Partial');
20   
21    $solr = new SolrConnector();
22    $query = Doctrine::getTable('Alerte')->createQuery('a')->where('next_mail < NOW()');
23    foreach($query->execute() as $alerte) {
24      $date = strtotime(preg_replace('/ /', 'T', $alerte->last_mail)."Z")+1-3600;
25      $query = $alerte->query." date:[".date('Y-m-d', $date).'T'.date('H:i:s', $date)."Z TO NOW]";
26      $results = $solr->search($query, array('sort' => 'date desc', 'hl' => 'yes', 'hl.fragsize'=>500));
27      echo "$query\n";
28      if (! $results['response']['numFound'])
29        continue;
30      echo "sending mail to : ".$alerte->email."\n";
31      $message = $this->getMailer()->compose(array('no-reply@nosdeputes.fr' => 'Regards Citoyens (ne pas répondre)'), 
32                                             $alerte->email,
33                                             '[NosDeputes.fr] Alerte - '.$alerte->titre);
34      echo $alerte->titre."\n";
35      $text = get_partial('mail/sendAlerteTxt', array('alerte' => $alerte, 'results' => $results['response']));
36      $message->setBody($text, 'text/plain');
37      try {
38        $this->getMailer()->send($message);
39        $alerte->last_mail = preg_replace('/T/', ' ', preg_replace('/Z/', '', $results['response']['docs'][$results['response']['numFound'] -1]['date']));
40        $alerte->save();
41      }catch(Exception $e) {
42        echo "ERROR: mail could not be sent ($text)\n";
43      }
44    }
45  }
46 
47}
Note: See TracBrowser for help on using the repository browser.