public function executeSenatorisioccupanodi()
 {
     $options = array('limit' => 10, 'sort_by_relevance' => true);
     //$options = array('sort_by_relevance' => true);
     // estrazione cariche, tipo firma, tipo atto
     $c = new Criteria();
     $c->addJoin(OppCaricaPeer::ID, OppCaricaHasAttoPeer::CARICA_ID);
     $c->addJoin(OppCaricaHasAttoPeer::ATTO_ID, OppAttoPeer::ID);
     $c->addJoin(TaggingPeer::TAGGABLE_ID, OppAttoPeer::ID);
     $c->add(OppCaricaPeer::TIPO_CARICA_ID, array(4, 5), Criteria::IN);
     $c->add(OppCaricaPeer::DATA_FINE, NULL);
     $c->add(TaggingPeer::TAG_ID, $this->tag->getId());
     $c->add(TaggingPeer::TAGGABLE_MODEL, 'OppAtto');
     $c->clearSelectColumns();
     $c->addSelectColumn(OppCaricaPeer::ID);
     $c->addSelectColumn(OppCaricaHasAttoPeer::TIPO);
     $c->addSelectColumn(OppAttoPeer::TIPO_ATTO_ID);
     // costruzione array associativo dei politici
     $politici = array();
     $rs = OppCaricaPeer::doSelectRS($c);
     while ($rs->next()) {
         $carica_id = $rs->getInt(1);
         $tipo = $rs->getString(2);
         $tipo_atto_id = $rs->getInt(3);
         if (!array_key_exists($carica_id, $politici)) {
             $politici[$carica_id] = 0;
         }
         $politici[$carica_id] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * OppAttoPeer::get_fattore_tipo_atto($tipo_atto_id);
     }
     // ordinamento per rilevanza, prima dello slice
     arsort($politici);
     // slice dell'array, se specificata l'opzione limit
     $this->n_remaining_politici = 0;
     if (isset($options['limit']) && count($politici) > $options['limit']) {
         $this->n_remaining_politici = count($politici) - $options['limit'];
         $politici = array_slice($politici, 0, $options['limit'], true);
     }
     // ordinamento per triple_value, in caso sort_by_relevance non sia specificato
     if (!isset($options['sort_by_relevance']) || true !== $options['sort_by_relevance']) {
         krsort($politici);
     }
     $this->politici = $politici;
 }
 /**
  * torna un array associativo di politici che si occupano di certi argomenti, 
  * ordinati in base al punteggio, con eventuale limit
  *
  * @param array $argomenti_ids 
  * @param string $ramo (C o S)
  * @param integer $gruppo_id filtro opzionale per gruppo
  * @param boolean fetch_interventi (se fetchare o meno gli interventi)
  * @return array di hash, con chiave carica_id
  *          - politico_id,
  *          - nome, cognome, acronimo,
  *          - punteggio
  * @author Guglielmo Celata
  */
 public static function getClassificaPoliticiSiOccupanoDiArgomenti($argomenti_ids, $ramo, $data, $limit = null, $gruppo_ids = null, $fetch_interventi = true)
 {
     // definizione array tipi di cariche
     if ($ramo == 'C') {
         $tipi_cariche = array(1);
     } else {
         if ($ramo == 'S') {
             $tipi_cariche = array(4, 5);
         } else {
             $tipi_cariche = array(1, 4, 5);
         }
     }
     if (is_array($gruppo_ids)) {
         if (count($gruppo_ids) > 0) {
             $group_constraint = sprintf(" and g.id in (%s) ", implode(", ", $gruppo_ids));
         } else {
             $group_constraint = '';
         }
     } else {
         if (is_null($gruppo_ids)) {
             $group_constraint = '';
         } else {
             $group_constraint = " and g.id = {$gruppo_ids} ";
         }
     }
     // Firme
     // estrazione di tutte le firme relative ad atti non-omnibus taggati con argomento
     $con = Propel::getConnection(self::DATABASE_NAME);
     $sql = sprintf("select p.nome, p.cognome, p.id as politico_id, g.acronimo, c.id as carica_id, c.circoscrizione, ca.tipo, ca.atto_id, ah.indice, ah.priorita from opp_carica c, opp_carica_has_atto ca, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging t, opp_act_history_cache ah, opp_politico p, opp_atto a where p.id=c.politico_id and c.id=ca.carica_id and cg.carica_id=c.id and cg.data_fine is null and cg.gruppo_id=g.id %s and a.is_omnibus = 0 and t.taggable_id=ca.atto_id and t.taggable_model='OppAtto' and ah.chi_tipo='A' and ah.data='%s' and ah.chi_id=ca.atto_id  and a.id=ca.atto_id and (ca.tipo != 'P' or ca.tipo = 'P' and a.pred is null) and c.tipo_carica_id in (%s) and c.data_fine is null and cg.data_fine is null and t.tag_id in (%s) group by ca.tipo, ca.atto_id, ca.carica_id", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids));
     $stm = $con->createStatement();
     $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
     // costruzione array associativo dei politici (sommatoria pesata)
     $politici = array();
     while ($rs->next()) {
         $row = $rs->getRow();
         $carica_id = $row['carica_id'];
         $circoscrizione = $row['circoscrizione'];
         $atto_id = $row['atto_id'];
         $tipo = $row['tipo'];
         $punti_atto = $row['indice'];
         $priorita = $row['priorita'];
         $politico_id = $row['politico_id'];
         $nome = $row['nome'];
         $cognome = $row['cognome'];
         $acronimo = $row['acronimo'];
         if (!array_key_exists($carica_id, $politici)) {
             $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0);
         }
         $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * $punti_atto / (double) $priorita;
     }
     // Firme
     // estrazione di tutte le firme relative ad atti omnibus taggati con argomento
     $con = Propel::getConnection(self::DATABASE_NAME);
     $sql = sprintf("select p.nome, p.cognome, p.id as politico_id, g.acronimo, c.id as carica_id, c.circoscrizione, ca.tipo, ca.atto_id, ah.indice, ah.priorita from opp_carica c, opp_carica_has_atto ca, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging_for_index t, opp_act_history_cache ah, opp_politico p, opp_atto a where p.id=c.politico_id and c.id=ca.carica_id and cg.carica_id=c.id and cg.data_fine is null and cg.gruppo_id=g.id %s and a.is_omnibus = 1 and t.atto_id=ca.atto_id and (ca.tipo != 'P' or ca.tipo = 'P' and a.pred is null) and  ah.chi_tipo='A' and ah.data='%s' and ah.chi_id=ca.atto_id and a.id=ca.atto_id and c.tipo_carica_id in (%s) and c.data_fine is null and cg.data_fine is null and t.tag_id in (%s) group by ca.tipo, ca.atto_id, ca.carica_id", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids));
     $stm = $con->createStatement();
     $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
     // aggiunta all'array della classifica dei politici
     while ($rs->next()) {
         $row = $rs->getRow();
         $carica_id = $row['carica_id'];
         $circoscrizione = $row['circoscrizione'];
         $atto_id = $row['atto_id'];
         $tipo = $row['tipo'];
         $punti_atto = $row['indice'];
         $priorita = $row['priorita'];
         $politico_id = $row['politico_id'];
         $nome = $row['nome'];
         $cognome = $row['cognome'];
         $acronimo = $row['acronimo'];
         if (!array_key_exists($carica_id, $politici)) {
             $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0);
         }
         $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma($tipo) * $punti_atto / (double) $priorita;
     }
     if ($fetch_interventi) {
         // Interventi
         // estrazione degli interventi relativi ad atti non-omnibus taggati con argomenti
         $sql = sprintf("select count(*) as ni, p.id as politico_id, p.nome, p.cognome, c.circoscrizione, g.acronimo, i.atto_id, i.carica_id, ah.indice, ah.priorita from opp_intervento i, opp_atto a, opp_politico p, opp_carica c, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging t, opp_act_history_cache ah where p.id=c.politico_id and ah.chi_id=i.atto_id and i.atto_id=a.id and c.id=i.carica_id and cg.carica_id=c.id and cg.data_fine is null  and cg.gruppo_id=g.id %s  and ah.data='%s' and c.tipo_carica_id in (%s) and c.data_fine is null and a.is_omnibus = 0 and t.taggable_id=a.id and t.taggable_model='OppAtto' and t.tag_id in (%s) group by i.carica_id, i.atto_id;", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids));
         $stm = $con->createStatement();
         $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
         // costruzione array associativo dei politici (sommatoria pesata)
         while ($rs->next()) {
             $row = $rs->getRow();
             $n_interventi = $row['ni'];
             $carica_id = $row['carica_id'];
             $atto_id = $row['atto_id'];
             $circoscrizione = $row['circoscrizione'];
             $priorita = $row['priorita'];
             $punti_atto = $row['indice'];
             $politico_id = $row['politico_id'];
             $nome = $row['nome'];
             $cognome = $row['cognome'];
             $acronimo = $row['acronimo'];
             if (!array_key_exists($carica_id, $politici)) {
                 $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0);
             }
             $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I') * $n_interventi * $punti_atto / (double) $priorita;
         }
         // estrazione di tutte le sedute con interventi relativi ad atti omnibus taggati con argomenti
         $sql = sprintf("select count(*) as ni, p.id as politico_id, p.nome, p.cognome, c.circoscrizione, g.acronimo, i.atto_id, i.sede_id, i.data, i.carica_id, ah.indice, ah.priorita from opp_intervento i, opp_atto a, opp_politico p, opp_carica c, opp_carica_has_gruppo cg, opp_gruppo g, sf_tagging_for_index t, opp_act_history_cache ah where p.id=c.politico_id and ah.chi_id=i.atto_id and i.atto_id=a.id and c.id=i.carica_id and cg.carica_id=c.id  and cg.data_fine is null and cg.gruppo_id=g.id %s  and ah.data='%s' and c.tipo_carica_id in (%s) and c.data_fine is null and a.is_omnibus = 1 and t.atto_id=a.id and t.tag_id in (%s) group by i.carica_id, i.atto_id;", $group_constraint, $data, implode(", ", $tipi_cariche), implode(", ", $argomenti_ids));
         $stm = $con->createStatement();
         $rs = $stm->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
         // costruzione array associativo dei politici (sommatoria pesata)
         while ($rs->next()) {
             $row = $rs->getRow();
             $n_interventi = $row['ni'];
             $carica_id = $row['carica_id'];
             $circoscrizione = $row['circoscrizione'];
             $atto_id = $row['atto_id'];
             $priorita = $row['priorita'];
             $punti_atto = $row['indice'];
             $politico_id = $row['politico_id'];
             $nome = $row['nome'];
             $cognome = $row['cognome'];
             $acronimo = $row['acronimo'];
             if (!array_key_exists($carica_id, $politici)) {
                 $politici[$carica_id] = array('politico_id' => $politico_id, 'circoscrizione' => $circoscrizione, 'nome' => $nome, 'cognome' => $cognome, 'acronimo' => $acronimo, 'punteggio' => 0);
             }
             $politici[$carica_id]['punteggio'] += OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I') * $n_interventi * $punti_atto / (double) $priorita;
         }
     }
     // ordinamento per rilevanza, prima dello slice
     if (count($politici) > 1) {
         uasort($politici, array("OppCaricaPeer", "comparisonIndice"));
     }
     // slice dell'array, se specificata l'opzione limit
     if (!is_null($limit) && count($politici) > $limit) {
         $politici = array_slice($politici, 0, $limit, true);
     }
     return $politici;
 }
        $atto = $intervento['atto'];
        ?>
      <li>
        <?php 
        echo $intervento['n_interventi'];
        ?>
 Interventi:
        Atto:  <?php 
        echo link_to($atto->getShortTitle(), '@singolo_atto?id=' . $atto->getId());
        ?>
        punti: <?php 
        echo $intervento['n_interventi'];
        ?>
 x <?php 
        echo $intervento['punti_atto'];
        ?>
 x 
               <?php 
        echo OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I');
        ?>
 = 
               <?php 
        echo $intervento['punti_atto'] * $intervento['n_interventi'] * OppCaricaHasAttoPeer::get_nuovo_fattore_firma('I');
        ?>
      </li>    
    <?php 
    }
    ?>
  </ul>  
<?php 
}