Changeset 1257


Ignore:
Timestamp:
Aug 16, 2010, 11:40:48 PM (11 years ago)
Author:
roux
Message:

liste alpha et recherche améliorée pour les députés et liste pagée pour citoyens

Location:
cpc/trunk/project
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • cpc/trunk/project/apps/frontend/config/routing.yml

    r1210 r1257  
    338338  param: {module: citoyen, action: activation}
    339339list_citoyens:
    340   url: /citoyens
     340  url: /citoyens/:order
    341341  param: {module: citoyen, action: index}
    342342photo_citoyen:
  • cpc/trunk/project/apps/frontend/modules/citoyen/actions/actions.class.php

    r961 r1257  
    1818  public function executeIndex(sfWebRequest $request)
    1919  {
    20     $this->citoyens_list = Doctrine::getTable('Citoyen')
     20    $this->order = $request->getParameter('order');
     21    if (!$this->order || !(preg_match('/^(alpha|comm|date|last)$/', $this->order)))
     22      $this->order = 'date';
     23    $datecom = "";
     24    if ($this->order === "last")
     25      $datecom = ", max(co.created_at) as date";
     26    $query = Doctrine::getTable('Citoyen')
    2127      ->createQuery('c')
     28      ->select('c.*, count(distinct(co.id)) as nb_comment'.$datecom)
     29      ->leftJoin('c.Commentaires co')
    2230      ->where('c.is_active = ?', true)
    23       ->orderBy('c.created_at DESC')
    24       ->execute();
    25     $response = $this->getResponse();
    26     $response->setTitle('Liste des citoyens inscrits');
     31      ->groupBy('c.id');
     32    if ($this->order === "date") {
     33      $this->title = 'Les derniers citoyens inscrits';
     34      $query->orderBy('c.created_at DESC');
     35    } else if ($this->order === "comm") {
     36      $this->title = 'Les citoyens ayant le plus commenté';
     37      $query->orderBy('nb_comment DESC');
     38    } else if ($this->order === "alpha") {
     39      $this->title = 'Les citoyens inscrits';
     40      $query->orderBy('c.login');
     41    } else if ($this->order === "last") {
     42      $this->title = 'Les derniers citoyens ayant commenté';
     43      $query->orderBy('date desc');
     44    }
     45    $this->pager = Doctrine::getTable('Citoyen')->getPager($request, $query);
     46    $this->citoyens = $query->execute();
     47    $this->getResponse()->setTitle($this->title." sur NosDéputés.fr");
     48    $this->comments = Doctrine_Query::create()
     49      ->select('count(distinct(citoyen_id)) as auteurs, count(distinct(id)) as comments')
     50      ->from('Commentaire')
     51      ->where('is_public = 1')
     52      ->fetchOne();
    2753  }
    2854 
  • cpc/trunk/project/apps/frontend/modules/citoyen/templates/indexSuccess.php

    r885 r1257  
    1 <h1>Liste des Citoyens</h1>
    2 <?php if (!$sf_user->isAuthenticated()) { ?>
    3 <p><strong><a href="<?php echo url_for('citoyen/new') ?>">S'inscrire</a></strong></p>
    4 <?php } ?>
    5 <p>
    6  <?php foreach ($citoyens_list as $citoyen): ?>
    7 <a href="<?php echo url_for('@citoyen?slug='.$citoyen->getSlug()); ?>">
    8 <?php echo $citoyen->getLogin(); ?></a>
    9 <?php if($citoyen->getActivite()) { echo '('.$citoyen->getActivite().')'; } ?>
    10 <br/>
    11 <?php endforeach; ?>
    12 </p>
     1<?php use_helper('Text') ?>
     2<h1><?php echo $title; ?></h1>
     3<?php $total = $pager->getNbResults();
     4      $ct = 0;
     5      $types = array("date"  => "date d'inscription",
     6                     "alpha" => "ordre alphabétique",
     7                     "comm"  => "commentaires postés",
     8                     "last"  => "derniers commentaires"); ?>
     9<div class="list_choix">Ordonner par&nbsp;:
     10<?php foreach($types as $type => $texte) {
     11  if (!($type === $order)) echo link_to($texte, '@list_citoyens?order='.$type);
     12  else echo '<strong>'.$texte.'</strong>';
     13  $ct++;
     14  if ($ct != count($types)) echo ', ';
     15} ?>
     16</div>
     17<p><?php echo $total; ?> citoyens se sont inscrits sur NosDéputés.fr depuis l'ouverture du site le 14 septembre 2009. <?php echo $comments['auteurs']; ?> d'entre eux ont laissé un total de <?php echo link_to($comments['comments'].'&nbsp;commentaires', '@commentaires'); ?>.<?php if (!$sf_user->isAuthenticated()) echo '<br/>Vous n\'avez pas encore de compte&nbsp;? Cliquez <a href="'.url_for('@inscription').'">ici pour vous inscrire</a> ou <a href="'.url_for('@signin').'">vous connecter</a>.'; ?></p>
     18
     19<div class="liste">
     20<?php if ($pager->haveToPaginate()) include_partial('parlementaire/paginate', array('pager'=>$pager, 'link'=>'@list_citoyens?order='.$order.'&')); ?>
     21<div class="list_table"><table><tr>
     22<?php $ct = 0;
     23  foreach($pager->getResults() as $citoyen) {
     24    $ct++; ?>
     25    <td><a href="<?php echo url_for('@citoyen?slug='.$citoyen->slug); ?>"><div class="list_cit">
     26      <div class="list_img_left">
     27      <?php if (!$citoyen->photo)
     28        echo ''.image_tag('xneth/avatar_citoyen.png', array('alt' => 'Avatar par défaut', 'height' => '50px'));
     29      else echo '<img src="'.url_for('@photo_citoyen?slug='.$citoyen->slug).'" alt="avatar de '.$citoyen->login.'" height="50px"/>'; ?>
     30      </div><div class="left">
     31      <span class="list_nom"><?php echo $citoyen->login; ?></span>
     32      <?php if (!empty($citoyen->activite)) echo '<br/><i>'.truncate_text(html_entity_decode(strip_tags($citoyen->activite), ENT_NOQUOTES, "UTF-8"), 40).' </i>'; if ($citoyen->naissance) echo ' ('.myTools::getAge($citoyen->naissance).'&nbsp;ans)'; ?>
     33      </div>
     34      <div class="list_details">
     35        <?php echo preg_replace('/membre/', 'inscrit', $citoyen->role).'&nbsp;&nbsp;<br/>le '.myTools::displayVeryShortDate($citoyen->created_at);
     36        if ($citoyen->nb_comment > 0) {
     37          echo '<br/><span class="list_com">'.$citoyen->nb_comment.'&nbsp;commentaire';
     38          if ($citoyen->nb_comment > 1) echo 's';
     39          echo '</span>';
     40        } else echo '<br/>'; ?>
     41      </div>
     42      <?php if (!empty($citoyen->url_site)) echo '<div class="list_link">'.truncate_text(html_entity_decode(strip_tags($citoyen->url_site), ENT_NOQUOTES, "UTF-8"), 40).'</div>'; ?>
     43    </div></a></td>
     44    <?php if ($ct % 3 == 0 && $ct != $total) echo '</tr><tr>';
     45  } ?>
     46  </td><?php while ($ct % 3 != 0) { $ct++; echo '<td/>'; } ?></tr></table>
     47</div>
     48<?php if ($pager->haveToPaginate()) include_partial('parlementaire/paginate', array('pager'=>$pager, 'link'=>'@list_citoyens?order='.$order.'&')); ?>
     49</div>
  • cpc/trunk/project/apps/frontend/modules/parlementaire/actions/actions.class.php

    r1255 r1257  
    146146  public function executeList(sfWebRequest $request) {
    147147    $this->search = strip_tags($request->getParameter('search'));
    148     if (!$this->search) $this->search = 'A';
     148    if (!$this->search) $this->search = 'all';
     149    if (preg_match('/^[A-Z]$/', $this->search))
     150      return $this->redirect('@list_parlementaires#'.$this->search);
    149151    $query = Doctrine::getTable('Parlementaire')->createQuery('p');
    150     if (preg_match('/^[A-Z]$/', $this->search)) {
    151       $query->where('p.nom_de_famille LIKE ?' , $this->search.'%');
    152       if (preg_match('/^[E]$/', $this->search))
    153         $query->orWhere('p.nom_de_famille LIKE ?' , 'É%');
    154     } else $query->where('p.nom LIKE ?' , '%'.$this->search.'%');
     152    if ($this->search != 'all') {
     153      $searchs = explode(' ', preg_replace('/\W/', ' ', $this->search));
     154      $ns = count($searchs);
     155      for ($i=0; $i<$ns; $i++)
     156        $searchs[$i] = '%'.$searchs[$i].'%';
     157      $likes = 'p.nom LIKE ?';
     158      for ($i=1; $i<$ns; $i++)
     159        $likes .= ' AND p.nom LIKE ?';
     160      $query->where($likes, $searchs);
     161    }
    155162    $query->orderBy('p.nom_de_famille ASC');
    156     $this->pager = Doctrine::getTable('Parlementaire')->getPager($request, $query);
    157     if (!preg_match('/^[A-ZÉ]$/', $this->search)) {
    158       $nb = $this->pager->getNbResults();
     163    if ($this->search == 'all') {
     164      $this->parlementaires = array();
     165      foreach ($query->execute() as $depute) {
     166        $lettre = $depute->nom_de_famille[0];
     167        if (isset($this->parlementaires[$lettre])) $this->parlementaires[$lettre][] = $depute;
     168        else $this->parlementaires[$lettre] = array($depute);
     169      }
     170    } else $this->parlementaires = $query->execute();
     171    if (!preg_match('/^([A-ZÉ]|all)$/', $this->search)) {
     172      $nb = count($this->parlementaires);
    159173      if ($nb == 1) {
    160         $p = $this->pager->getResults();
    161         return $this->redirect('parlementaire/show?slug='.$p[0]->slug);
     174        return $this->redirect('@parlementaire?slug='.$this->parlementaires[0]->slug);
    162175      }
    163176      if ($nb == 0) {
     
    174187        ->select('count(distinct p.id) as ct')
    175188        ->where('p.fin_mandat IS NULL')
     189        ->orWhere('p.fin_mandat < p.debut_mandat')
    176190        ->fetchOne();
    177191      $this->actifs = $ctquery['ct'];
     
    248262      ->orderBy('s.date DESC, s.moment ASC');
    249263    $this->pagerSeances = Doctrine::getTable('Seance')->getPager($request, $query2);
    250     $this->seances = Doctrine::getTable('Seance')->createQuery('s')
    251       ->leftJoin('s.Organisme o')
    252       ->where('o.slug = ?', $orga)
    253       ->orderBy('s.date DESC, s.moment ASC')
    254       ->execute();
    255264  }
    256265
  • cpc/trunk/project/apps/frontend/modules/parlementaire/templates/listSuccess.php

    r964 r1257  
    1 <?php if (!preg_match('/^[A-ZÉ]$/', $search)) { ?>
    2 <h1>Recherche de députés</h1>
    3 <?php $sf_response->setTitle('Recherche de députés "'.$search.'"'); ?>
    4 <p><?php $nResults = $pager->getNbResults(); echo $nResults; ?> résultat<?php if ($nResults > 1) echo 's'; ?> pour <em>"<?php echo $search; ?>"</em></p>
     1<?php if (!preg_match('/^([A-ZÉ]|all)$/', $search)) { ?>
     2  <h1>Recherche de députés</h1>
     3  <?php $sf_response->setTitle('Recherche de députés "'.$search.'"'); ?>
     4  <p><?php $nResults = count($parlementaires); echo $nResults; ?> parlementaire<?php if ($nResults > 1) echo 's'; ?> trouvé<?php if ($nResults > 1) echo 's'; ?> pour <em>"<?php echo $search; ?>"</em></p>
    55<?php } else { ?>
    6 <h1>La liste de tous les députés par ordre alphabétique</h1>
    7 <?php $sf_response->setTitle('La liste de tous les députés'); ?>
    8 <p>Les <?php echo $total; ?> députés de la législature (<?php echo $actifs; ?> en activité)&nbsp;:</p>
     6  <h1>La liste de tous les députés par ordre alphabétique</h1>
     7  <?php $sf_response->setTitle('La liste de tous les députés'); ?>
     8  <p>Les <?php echo $total; ?> députés de la législature (<?php echo $actifs; ?> en cours de mandat)&nbsp;:</p>
    99<?php } ?>
    10 <div class="liste_deputes">
    11 <?php if (preg_match('/^[A-ZÉ]$/', $search)) { ?>
    12 <div class="par_session">
    13 <?php foreach(range('A','Z') as $i) {
    14   if ($i != $search) echo link_to($i ,'@list_parlementaires_alpha?search='.$i);
    15   else echo $i;
    16   echo '&nbsp;&nbsp;';
     10
     11<div class="liste">
     12<?php if (isset($similars) && $similars) {
     13  echo '<p>Peut être, cherchiez vous : </p><ul>';
     14  foreach($similars as $s) {
     15    echo '<li>'.link_to($s['nom'], 'parlementaire/show?slug='.$s['slug']).'</li>';
     16  }
     17  echo '</ul>'; 
     18} else {
     19  if ($search === "all") {
     20    $listlettres = array_keys($parlementaires);
     21    foreach($listlettres as $i)
     22      include_partial('parlementaire/table', array('lettre' => $i, 'deputes' => $parlementaires[$i], 'listlettres' => $listlettres));
     23  } else
     24    include_partial('parlementaire/table', array('deputes' => $parlementaires));
    1725} ?>
    1826</div>
    19 <?php } ?>
    20 <?php if (isset($similars) && $similars) {
    21    echo '<p>Peut être, cherchiez vous : </p><ul>';
    22    foreach($similars as $s) {
    23      echo '<li>'.link_to($s['nom'], 'parlementaire/show?slug='.$s['slug']).'</li>';
    24    }
    25    echo '</ul>';
    26  }?>
    27 <ul>
    28 <?php foreach($pager->getResults() as $parlementaire) : ?>
    29 <li><?php echo link_to($parlementaire->nom, 'parlementaire/show?slug='.$parlementaire->slug); ?> (<?php echo $parlementaire->getStatut(1); ?>, <?php echo link_to($parlementaire->nom_circo, '@list_parlementaires_circo?search='.$parlementaire->nom_circo); ?>)</li>
    30 <?php endforeach ; ?>
    31 </ul>
    32 <?php include_partial('parlementaire/paginate', array('pager' => $pager, 'link' => '@list_parlementaires?search='.$search.'&')); ?>
    33 </div>
     27
  • cpc/trunk/project/apps/frontend/templates/layout.php

    r1208 r1257  
    7171          <div id="item2"><a <?php if ($menu_depute) echo 'class="selected" '; ?>href="<?php echo url_for('@list_parlementaires'); ?>"><span class="gris">Les</span> <span class="vert">D</span><span class="gris">&eacute;put&eacute;s</span></a></div>
    7272          <div id="item3"><a <?php if ($menu_dossier) echo 'class="selected" '; ?>href="<?php echo url_for('@sections?order=date')?>"><span class="gris">Les</span> <span class="orange">D</span><span class="gris">ossiers</span></a></div>
    73           <div id="item4"><a <?php if ($menu_citoyen) echo 'class="selected" '; ?>href="<?php echo url_for('@commentaires')?>"><span class="gris">Les</span> <span class="bleu">C</span><span class="gris">itoyens</span></a></div>
     73          <div id="item4"><a <?php if ($menu_citoyen) echo 'class="selected" '; ?>href="<?php echo url_for('@list_citoyens?order=date')?>"><span class="gris">Les</span> <span class="bleu">C</span><span class="gris">itoyens</span></a></div>
    7474          <div id="item5"><a href="<?php echo url_for('@faq')?>"><span class="gris">FAQ</span></a></div>
    7575        </div>
     
    117117              <div class="elements_sous_menu">
    118118          <ul>
    119             <li><a href="<?php echo url_for('@list_citoyens'); ?>">Tous les citoyens</a> <strong>|</strong></li>
     119            <li><a href="<?php echo url_for('@list_citoyens?order=date'); ?>">Tous les citoyens</a> <strong>|</strong></li>
    120120            <li><a href="<?php echo url_for('@commentaires'); ?>">Les derniers commentaires</a> <strong>|</strong></li>
    121121            <li><a href="<?php echo url_for('@compterendu_list'); ?>">Les comptes rendus citoyens</a></li>
  • cpc/trunk/project/lib/model/doctrine/CitoyenTable.class.php

    r375 r1257  
    55class CitoyenTable extends Doctrine_Table
    66{
    7 
     7  public function getPager($request, $query = NULL) {
     8    $pager = new sfDoctrinePager('Citoyen', 60);
     9    $pager->setQuery($query);
     10    $pager->setPage($request->getParameter('page', 1));
     11    $pager->init();
     12    return $pager;
     13  }
    814}
  • cpc/trunk/project/lib/model/doctrine/Parlementaire.class.php

    r1256 r1257  
    3131    }
    3232    return $string;
     33  }
     34
     35  public function getNomPrenom() {
     36    $weird = array('é' => 'e', 'è' => 'e', 'ë' => 'e', 'Le ' => 'Le', 'La ' => 'La');
     37    $beg_name = " ".substr($this->nom_de_famille, 0, 3);
     38    $ct = strpos($this->nom, $beg_name);
     39    if (!$ct) foreach ($weird as $good => $bad)
     40        if ($ct = strpos($this->nom, preg_replace("/".$bad."/", $good, $beg_name)))
     41           break;
     42    $nom = substr($this->nom, $ct+1);
     43    $prenom = substr($this->nom, 0, strpos($this->nom, $nom)-1);
     44    return $nom.", ".$prenom;
    3345  }
    3446
     
    176188    return array_values($res);
    177189  }
     190
    178191  public function hasPhoto()
    179192  {
  • cpc/trunk/project/lib/model/doctrine/myTools.class.php

    r1100 r1257  
    5050    return $date;
    5151  }
     52
     53  public static function displayVeryShortDate($d) {
     54    $date = substr($d,8,2)."/";        // jour
     55    $date = $date.substr($d,5,2)."/";  // mois
     56    $date = $date.substr($d,2,2);      // année
     57    return $date;
     58  }
    5259 
    5360  public static function displayDateTime($d) {
     
    5663    return $date;
    5764  }
     65
     66  public static function getAge($dob) {
     67    list($year,$month,$day) = explode("-",$dob);
     68    $year_diff  = date("Y") - $year;
     69    $month_diff = date("m") - $month;
     70    $day_diff   = date("d") - $day;
     71    if (($month_diff == 0 && $day_diff < 0) || $month_diff < 0)
     72      $year_diff--;
     73    return $year_diff;
     74  }     
    5875
    5976  public static function getLinkLoi($id) {
  • cpc/trunk/project/web/css/xneth/style.css

    r1247 r1257  
    12021202/* Liste d�put�s */
    12031203
    1204 .liste_deputes  {
     1204.liste  {
    12051205  margin: 20px 10px 20px 0;
    12061206}
     
    12101210}
    12111211
    1212 .liste_deputes p {
     1212.liste p {
    12131213  font-size: 1.2em;
    12141214}
     
    14351435   vertical-align: top;
    14361436}
     1437.list_choix {
     1438  text-align: center;
     1439  font-size: 1.4em;
     1440  padding: 15px;
     1441}
     1442.list_table {
     1443  margin: auto;
     1444  margin-bottom: 30px;
     1445}
     1446.list_table table {
     1447  width: 100%;
     1448}
     1449.list_table td {
     1450  width: 31%;
     1451  padding: 3px;
     1452  vertical-align: top;
     1453  font-size: 10px;
     1454}
     1455.list_borderleft {
     1456  border-left: thin solid;
     1457}
     1458.list_cit {
     1459  margin: 8px;
     1460  height: 60px;
     1461}
     1462.list_cit:hover {
     1463  color: #000;
     1464  background-color: rgb(81, 202, 235);
     1465  opacity: 0.8;
     1466}
     1467.list_dep {
     1468  margin: 10px;
     1469  height: 32px;
     1470}
     1471.list_dep:hover {
     1472  color: #000;
     1473  background-color: rgb(198,229,81);
     1474  opacity: 0.8;
     1475}
     1476.couleur_ump {
     1477  color: rgb(30,30,200);
     1478}
     1479.couleur_src {
     1480  color: rgb(255,50,90);
     1481}
     1482.couleur_gdr {
     1483  color: rgb(255,30,30);
     1484}
     1485.couleur_nc {
     1486  color: rgb(30,190,255);
     1487}
     1488.couleur_ni {
     1489  color: rgb(130,130,130);
     1490}
     1491.list_img_left {
     1492  float:left;
     1493  margin: 4px;
     1494}
     1495.list_left {
     1496  float: left;
     1497  padding-left: 4px;
     1498}
     1499.list_nom {
     1500  font-size: 12px;
     1501}
     1502.list_details {
     1503  font-size: 9px;
     1504  text-align: right;
     1505  padding-top: 4px;
     1506  padding-right: 4px;
     1507}
     1508.list_link {
     1509  vertical-align: bottom;
     1510  font-size: 9px;
     1511  text-align: center;
     1512}
     1513.list_com {
     1514  color: #158EAF;
     1515}
     1516
     1517
Note: See TracChangeset for help on using the changeset viewer.