protected function impactFactorCSV($ramo)
 {
     sfLoader::loadHelpers(array('Number'));
     $this->opp_user = OppUserPeer::retrieveByPK($this->getUser()->getId());
     $this->forward404Unless($this->getUser()->hasCredential('adhoc'));
     // get user's monitored tags
     $this->tags_ids = $this->opp_user->getMonitoredPks('Tag');
     $limit = sfConfig::get('app_limit_classifica_parlamentari_sioccupanodi', 15);
     $data_inizio = OppLegislaturaPeer::$legislature[OppLegislaturaPeer::getCurrent()]['data_inizio'];
     $data_fine = OppActHistoryCachePeer::fetchLastData();
     $date = array_reverse(Util::buildCacheDatesArray($data_inizio, $data_fine));
     $politici_csv = array();
     if (count($this->tags_ids)) {
         $this->group_filter = $this->getRequestParameter('group_filter');
         if (is_array($this->group_filter)) {
             $c = new Criteria();
             $c->add(OppGruppoPeer::ID, $this->group_filter, Criteria::IN);
         } else {
             $this->group_filter = array();
         }
         // estrazione classifica dei politici che più si interessano degli argomenti monitorati
         $politici = OppCaricaPeer::getClassificaPoliticiSiOccupanoDiArgomenti($this->tags_ids, $ramo, $data_fine, $limit, $this->group_filter);
         // costruzione delle serie storiche per ogni politico (da inizio legislatura)
         foreach ($politici as $carica_id => $politico) {
             // genero il label
             $label = sprintf("%s %s (%s)", $politico['nome'], $politico['cognome'], $politico['acronimo']);
             // arrotonda l'array dei valori storici a due cifre decimali (max)
             $storico = OppCaricaPeer::getStoricoInteressePoliticoArgomenti($carica_id, $this->tags_ids);
             // calcola la posizione del politico
             $posizione = OppCaricaPeer::getPosizionePoliticoOggettiVotatiPerArgomenti($carica_id, $this->tags_ids, $this->getUser()->getId());
             $posizione = format_number(round($posizione, 2), 'it_IT');
             // primi campi (dati fissi)
             $csv_row = "{$carica_id},\"{$label}\",\"{$posizione}\",";
             foreach ($date as $cnt => $data) {
                 if (array_key_exists($data, $storico)) {
                     $storico[$data] = format_number(round($storico[$data], 2), 'it_IT');
                 } else {
                     $storico[$data] = 0;
                 }
                 $csv_row .= '"' . $storico[$data] . '"';
                 if ($cnt < count($date) - 1) {
                     $csv_row .= ",";
                 }
             }
             $politici_csv[] = $csv_row;
         }
     }
     $this->date_csv = "carica_id,politico,posizione," . implode(",", $date);
     $this->politici_csv = $politici_csv;
     $this->setLayout(false);
     $this->setTemplate('impactFactorCSV');
     $this->response->setContentType('text/csv');
 }
/**
 * Calcola e mostra lo storico dell'interesse dei politici su determinati argomenti
 * Si deve specificare gli ID dei politici e l'ID degli argomenti
 */
function run_opp_get_storico_interesse($task, $args, $options)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        _loader();
    }
    echo "memory usage: " . memory_get_usage() . "\n";
    $start_time = time();
    // parameteri obbligatori
    if (array_key_exists('tags', $options)) {
        $tags = $options['tags'];
        $tags_ids = split(",", $tags);
    } else {
        throw new Exception("E' obbligatorio specificare i tags, ad esempio: 845,3487,123");
    }
    // specificare la data fino alla quale estrarre lo storico
    $data = '';
    if (array_key_exists('data', $options)) {
        // verifica che si tratti di una data (evita sql-injection)
        $data = date('Y-m-d', strtotime($options['data']));
        $data_condition = " data < {$data} ";
    } else {
        $data_condition = null;
    }
    $msg = sprintf("calcolo storico interesse su tag: %s\n", $tags);
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
    if (count($args) > 0) {
        try {
            $parlamentari_rs = OppCaricaPeer::getRSFromIDArray($args);
        } catch (Exception $e) {
            throw new Exception("Specificare dei carica_id validi. \n" . $e);
        }
    } else {
        throw new Exception("Specificare almeno un carica_id valido. \n" . $e);
    }
    echo "memory usage: " . memory_get_usage() . "\n";
    $cnt = 0;
    while ($parlamentari_rs->next()) {
        $cnt++;
        $p = $parlamentari_rs->getRow();
        $msg = sprintf("%d %s %s\n", $cnt, $p['tipo_carica_id'] == '1' ? 'On.' : 'Sen.', ucfirst($p['nome']) . ' ' . strtoupper($p['cognome']));
        echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
        $storico = OppCaricaPeer::getStoricoInteressePoliticoArgomenti($p['id'], $tags_ids, $data_condition);
        foreach ($storico as $key => $value) {
            $msg = sprintf("\t %s => %7.2f\n", $key, round($value, 2));
            echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
        }
    }
    $msg = sprintf("%d parlamentari elaborati\n", $cnt);
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
}