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)); }