source: cpc/trunk/project/lib/model/doctrine/Commentaire.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: 3.6 KB
Line 
1<?php
2
3/**
4 * This class has been auto-generated by the Doctrine ORM Framework
5 */
6class Commentaire extends BaseCommentaire
7{
8  public function getLink() {
9    return $this->lien;
10  }
11  public function getPersonne() {
12    return $this->citoyen->getLogin();
13  }
14  public function getTitre() {
15    return $this->getPresentation();
16  }
17
18  public function __toString() {
19    $str = substr($this->commentaire, 0, 250);
20    if (strlen($str) == 250) {
21      $str .= '...';
22    }
23    return $str;
24  }
25
26  protected static $mois = array('01'=>'janvier', '02'=>'février', '03'=>'mars', '04'=>'avril', '05'=>'mai', '06'=>'juin', '07'=>'juillet', '08'=>'août', '09'=>'septembre', '10'=>'octobre', '11'=>'novembre', '12'=>'décembre');
27
28 /**
29  * Overrides getPresentation from corresponding column
30  * if $format is set to specific strings, returns a modified version :
31  *   'none' => empty string
32  *   'noauteur' => presentation without the author information
33  *   'nodossier' => presentation without the section information
34  *   'noloi' => presentation without the name of the law
35  *   'noarticle' => presentation without the name of the law nor the article's
36  * if $virgule is set to 1, adds a ', ' at the end of the string
37  */
38  public function getPresentation($format = '', $virgule = 0) {
39    if ($format == 'none') return '';
40    else $present = $this->_get('presentation');
41    if ($format == 'noauteur') {
42      $present = preg_replace('/\sd(\'|e\s)[A-ZÉÈÊ][\wçàéëêèïîôöûüÉ\s\-]+\sle\s(\d)/', ' du \2', $present);
43      $present = preg_replace('/Suite aux/', 'Suite à ses', $present);
44    } else if ($format == 'nodossier') {
45      $present = preg_replace('/^.* - (Suite aux|Au sujet)/', '\1', $present);
46    } else if ($format == 'noloi' || $format == 'noarticle') {
47      $present = preg_replace('/^.* - /', '', $present);
48    }
49    if ($format == 'noarticle') {
50      $present = preg_replace('/(A propos de l\')article\s.*\s(alinéa\s\d+)/', '\1\2', $present);
51      $present = preg_replace('/A propos de l\'article\s.*$/', '', $present);
52    }
53    if ($virgule == 1 && $present != '') return $present.', ';
54    else return $present;
55  }
56
57  public function addObject($object_type, $object_id) {
58    if (!$this->id) {
59      throw new Exception('no commentaire id');
60    }
61    $object = Doctrine::getTable($object_type)->find($object_id);
62    if ($object) {
63      Doctrine::getTable('CommentaireObject')->findUniqueOrCreate($object_type, $object_id, $this->id);
64      $object->updateNbCommentaires();
65      if ($object_type == 'Section' && $object->id != $object->section_id)
66        $this->addObject($object_type, $object->section_id);
67      else if ($object_type == 'TitreLoi') {
68        if ($object->id != $object->titre_loi_id)
69          $this->addObject($object_type, $object->titre_loi_id);
70        if ($object->parlementaire_id)
71          $this->addObject('Parlementaire', $object->parlementaire_id);
72      } else if ($object_type == 'ArticleLoi' && $object->titre_loi_id)
73        $this->addObject('TitreLoi', $object->titre_loi_id);
74    }
75  }
76
77  public function updateNbCommentaires($inc = 0) {
78    $o = Doctrine::getTable($this->object_type)->find($this->object_id);
79    $o->updateNbCommentaires($inc);
80    foreach ($this->getObjects() as $object) {
81      $o = Doctrine::getTable($object->object_type)->find($object->object_id);
82      if (isset($o))
83        $o->updateNbCommentaires($inc);
84    }
85  }
86
87  public function setIsPublic($b) {
88    $this->_set('is_public', $b);
89    if ($this->id) {
90      $this->updateNbCommentaires(($b) ? 1 : -1);
91    }
92  }
93  public function getLien() {
94    return preg_replace('/@amendement\?id=/', '@amendement_id?id=', $this->_get('lien'));
95  }
96}
Note: See TracBrowser for help on using the repository browser.