public function getDatiStorici() { $rs = OppPoliticianHistoryCachePeer::getKWDatiPoliticoRSById($this->getId()); $dati = array(); while ($rs->next()) { $row = $rs->getRow(); $tipi_dati = array('presenze', 'assenze', 'missioni', 'indice', 'ribellioni'); foreach ($tipi_dati as $tipo) { $dato[$tipo] = $row[$tipo]; $dato[$tipo . '_delta'] = $row[$tipo . '_delta']; } $dati[$row['data']] = $dato; } return $dati; }
/** * legge l'indice di attività dalla cache * * @param string $data * @return void * @author Guglielmo Celata */ public function getIndiceAttivita($data = null) { if (is_null($data)) { throw new Exception("Missing date parameter"); } $c = new Criteria(); $c->add(OppPoliticianHistoryCachePeer::CHI_TIPO, 'P'); $c->add(OppPoliticianHistoryCachePeer::CHI_ID, $this->getId()); $c->add(OppPoliticianHistoryCachePeer::DATA, $data); $c->clearSelectColumns(); $c->addSelectColumn(OppPoliticianHistoryCachePeer::INDICE); $rs = OppPoliticianHistoryCachePeer::doSelectRS($c); if ($rs->next()) { return $rs->getFloat(1); } else { return null; } }
/** * API (protetta da una API key) * torna flusso xml di tutti i parlamentari (divisi per ramo) * per ciascun parlamentare, visualizza i dati anagrafici e di carica * nonché informazioni variabili, a seconda del parametro info_type * - presenze: presenze, assenza, missione * - attivita: indice di attività parlamentare (nuovo) * - ribelli: numero di voti ribelli * progetto op_kw * * <opkw xmlns="http://www.openpolis.it/2010/opkw" * xmlns:op="http://www.openpolis.it/2010/op" * xmlns:op_location="http://www.openpolis.it/2010/op_location" * xmlns:op_politician="http://www.openpolis.it/2010/op_politician" * xmlns:xlink="http://www.w3.org/1999/xlink"> * <op:content> * <camera n_rappresentanti="600"> * <parlamentare xlink:href="/parlamentari/12345.xml"> * <thumbnail xlink:href="/parlamentari/thumb/332104.jpeg" width="40" height="53"/> * <nome>NOME</nome> * <cognome>COGNOME</cognome> * <gruppo> * <nome>NOME GRUPPO</nome> * <acronimo>NOME GRUPPO</acronimo> * </gruppo> * <data_inizio_carica>2008-04-12</data_inizio_carica> ** solo se successiva a data inizio leg. * <circoscrizione>Lombardia 1</circoscrizione> * * ...* informazioni *... * * </parlamentare> * ... * </camera> * <senato> * <parlamentare> ... </parlamentare> * </camera> * </op:content> * </opkw> * * Informazioni possono essere: * <presenze> * <numero>3898</numero> * <percentuale>84,59</percentuale> * </presenze> * <assenze> * <numero>710</numero> * <percentuale>15,41</percentuale> * </assenze> * <missioni> * <numero>0</numero> * <percentuale>0,00</percentuale> * </missioni> * <mese_precedente>+1</mese_precedente> * * <indice> * <numero>389,8</numero> * </indice> * <mese_precedente>+-1</mese_precedente> * * <voti_ribelli> * <numero>15</numero> * </indice> * <mese_precedente>-1</mese_precedente> * * Return error in case something's wrong * <opkw xlmns="http://www.openpolis.it/2010/opkw" * xmlns:op="http://www.openpolis.it/2010/op" * xlmns:op_location="http://www.openpolis.it/2010/op_location" * xmlns:op_politician="http://www.openpolis.it/2010/op_politician"> * <op:error>Messaggio di errore</op:error> * </opkw> * @return String * @author Guglielmo Celata **/ public function executeElencoParlamentari() { $key = $this->getRequestParameter('key'); $ramo = $this->getRequestParameter('ramo'); $infotype = $this->getRequestParameter('infotype'); $order_by = $this->getRequestParameter('orderby'); $order_type = $this->getRequestParameter('ordertype'); $con = Propel::getConnection('propel'); $current_data = OppPoliticianHistoryCachePeer::fetchLastData('P', null, $con); $is_valid_key = deppApiKeysPeer::isValidKey($key); $resp_node = new SimpleXMLElement('<opkw xmlns="' . $this->opkw_ns . '" ' . ' xmlns:op="' . $this->op_ns . '" ' . ' xmlns:xlink="' . $this->xlink_ns . '" >' . '</opkw>'); if ($is_valid_key) { // start producing xml $content_node = $resp_node->addChild('op:content', null, $this->op_ns); // camera o senato if ($ramo == 'tutti') { $rami = array('camera' => 'C', 'senato' => 'S'); } else { $rami = array($ramo => strtoupper(substr($ramo, 0, 1))); } foreach ($rami as $ramo_name => $ramo_code) { $ramo_node = $content_node->addChild($ramo_name, null, $this->opkw_ns); // dato storico aggregato per tutto il ramo $ramo_storico_node = $ramo_node->addChild('ramo', null, $this->opkw_ns); $rs = OppPoliticianHistoryCachePeer::getKWRamoRS($ramo_code, $con); $cnt = 0; while ($rs->next()) { $cnt++; $r = $rs->getRow(); $this->addRamoNode($ramo_storico_node, $r, $infotype); } // gruppi $gruppi_node = $ramo_node->addChild('gruppi', null, $this->opkw_ns); $n_gruppi = OppPoliticianHistoryCachePeer::countByDataRamoChiTipo($current_data, $ramo_code, 'G', $con); $rs = OppPoliticianHistoryCachePeer::getKWGruppoRSByDataRamo($current_data, $ramo_code, null, null, $con); $cnt = 0; while ($rs->next()) { $cnt++; $g = $rs->getRow(); $this->addGruppoNode($gruppi_node, $g, $infotype, $cnt); } $gruppi_node->addAttribute('n_gruppi', $n_gruppi); // parlamentari $parlamentari_node = $ramo_node->addChild('parlamentari', null, $this->opkw_ns); $n_parlamentari = OppPoliticianHistoryCachePeer::countByDataRamoChiTipo($current_data, $ramo_code, 'P', $con); $rs = OppPoliticianHistoryCachePeer::getKWPoliticiRSByDataRamo($current_data, $ramo_code, $order_by, $order_type, $con); $cnt = 0; while ($rs->next()) { $cnt++; $p = $rs->getRow(); $this->addParlamentareNode($parlamentari_node, $p, $infotype, $cnt); } $parlamentari_node->addAttribute('n_rappresentanti', $n_parlamentari); } } else { $resp_node->addChild('op:error', 'Chiave di accesso non valida', $this->op_ns); } $xmlContent = $resp_node->asXML(); $this->_send_output($xmlContent); return sfView::NONE; }
/** * calcola o ri-calcola le posizioni per indici e presenze * nelle tabelle cache, a una determinata data (o a tutte) * * @param string $task * @param string $args * @param string $options * @return void * @author Guglielmo Celata */ function run_opp_rebuild_positions($task, $args, $options) { static $loaded; // load application context if (!$loaded) { task_loader(); $loaded = true; } $data = ''; $dry_run = false; if (array_key_exists('data', $options)) { $data = $options['data']; } if (array_key_exists('dry-run', $options)) { $dry_run = true; } $msg = sprintf("start time: %s\n", date('H:i:s')); echo $msg; if ($data != '') { $p_dates = array($data => $data); } $p_dates = OppPoliticianHistoryCachePeer::extractDates('N', null, 10000); while ($rs->next()) { $cnt++; $r = $rs->getRow(); printf("%6d) %1s %7d ... ", $cnt, $r['chi_tipo'], $r['chi_id']); // calcolo date fine mese scorso e precedente list($data_1, $data_2) = Util::getLast2MonthsDate($data); // estrazione record storici a due mesi $r_1 = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_1, $r['chi_tipo'], $r['chi_id'], $r['ramo']); $r_2 = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_2, $r['chi_tipo'], $r['chi_id'], $r['ramo']); // salta record per cui non c'è abbastanza storia if (!$r_1 instanceof OppPoliticianHistoryCache || !$r_2 instanceof OppPoliticianHistoryCache) { printf(" NA \n"); continue; } list($presenze_delta, $assenze_delta, $missioni_delta) = presenzeDelta($data_lookup, $r, $r_1, $r_2); printf("d_presenze: %7.2f, d_assenze: %7.2f, d_missioni: %7.2f, ", $presenze_delta, $assenze_delta, $missioni_delta); $indice_delta = indiceDelta($data_lookup, $r, $r_1, $r_2, $data_1, $data_2); printf("d_indice: %7.2f, ", $indice_delta); $ribellioni_delta = ribellioniDelta($data_lookup, $r, $r_1, $r_2, $data_1, $data_2); printf("d_ribellioni: %7.2f", $ribellioni_delta); if (!$dry_run) { $r = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, $r['chi_tipo'], $r['chi_id'], $r['ramo']); $r->setPresenzeDelta($presenze_delta); $r->setAssenzeDelta($assenze_delta); $r->setMissioniDelta($missioni_delta); $r->setIndiceDelta($indice_delta); $r->setRibellioniDelta($ribellioni_delta); $r->save(); printf(" OK!\n"); } else { printf("\n"); } } echo "data: {$data_lookup}\n"; $msg = sprintf("end time: %s\n", date('H:i:s')); echo $msg; }
protected function addListSortCriteria($c) { if ($sort_column = $this->session->getAttribute('sort', null, 'sf_admin/opp_storici/sort')) { $sort_column = OppPoliticianHistoryCachePeer::translateFieldName($sort_column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME); if ($this->session->getAttribute('type', null, 'sf_admin/opp_storici/sort') == 'asc') { $c->addAscendingOrderByColumn($sort_column); } else { $c->addDescendingOrderByColumn($sort_column); } } }
public function executeGetIndexChartsTopPoliticians() { # check query string parameters and validate to avoid SQL injection $this->forward404Unless($this->hasRequestParameter('ramo')); $ramo = $this->getRequestParameter('ramo', ''); $this->forward404Unless(in_array($ramo, array('C', 'S'))); //$this->forward404Unless($this->hasRequestParameter('data')); $data = $this->getRequestParameter('data', ''); if ($data != '') { $this->forward404Unless(strtotime($data)); } $this->forward404Unless($this->hasRequestParameter('limit')); $limit = (int) $this->getRequestParameter('limit', ''); $this->forward404Unless(is_integer($limit)); $group_acr = $this->getRequestParameter('group', ''); $group_id = null; if ($group_acr != '') { $c = new Criteria(); $c->add(OppGruppoPeer::ACRONIMO, $group_acr); $group = OppGruppoPeer::doSelectOne($c); $this->forward404If(is_null($group)); $group_id = $group->getId(); } foreach ($this->regioni as $reg) { sfContext::getInstance()->getLogger()->info($reg); } $constituency = $this->getRequestParameter('circoscrizione', ''); if ($constituency != '') { $constituency_is_valid = in_array(strtolower($constituency), $this->regioni); $this->forward404Unless($constituency_is_valid); } if ($data != '') { $items = OppPoliticianHistoryCachePeer::getIndexChartsTopPoliticians($ramo, $data, $limit, $group_id, $constituency); } else { $items = OppCaricaPeer::getIndexChartsTopPoliticiansRealTime($ramo, $data, $limit, $group_id, $constituency); } $this->_send_json_output(json_encode($items)); return sfView::NONE; }
/** * Calcola o ri-calcola l'indice di attività. * Si può specificare il ramo (camera, senato, governo, tutti) e la data * Se sono passati degli ID (argomenti), sono interpretati come ID di politici e il calcolo è fatto solo per loro */ function run_opp_calcola_nuovo_indice($task, $args, $options) { static $loaded; // load application context if (!$loaded) { define('SF_ROOT_DIR', sfConfig::get('sf_root_dir')); define('SF_APP', 'fe'); define('SF_ENVIRONMENT', 'task'); define('SF_DEBUG', false); require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php'; sfContext::getInstance(); sfConfig::set('pake', true); error_reporting(E_ALL); $loaded = true; } echo "memory usage: " . memory_get_usage() . "\n"; $start_time = time(); $data = ''; $ramo = ''; $verbose = false; $offset = null; $limit = null; if (array_key_exists('data', $options)) { $data = $options['data']; } if (array_key_exists('ramo', $options)) { $ramo = strtolower($options['ramo']); } if (array_key_exists('verbose', $options)) { $verbose = true; } if (array_key_exists('offset', $options)) { $offset = $options['offset']; } if (array_key_exists('limit', $options)) { $limit = $options['limit']; } $atti_ids = array(); if (array_key_exists('atti', $options)) { $atti_ids = explode(",", $options['atti']); } $emendamenti_ids = array(); if (array_key_exists('emendamenti', $options)) { $emendamenti_ids = explode(",", $options['emendamenti']); } // definisce la data fino alla quale vanno fatti i calcoli // data_lookup serve per controllare se i record già esistono if ($data != '') { $legislatura_corrente = OppLegislaturaPeer::getCurrent($data); $data_lookup = $data; } else { $legislatura_corrente = OppLegislaturaPeer::getCurrent(); $data = date('Y-m-d'); $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData('N'); } $msg = sprintf("calcolo indice di attività - data: %10s, ramo: %10s\n", $data ? $data : '-', $ramo); 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 degli ID validi. \n" . $e); } } else { $parlamentari_rs = OppCaricaPeer::getParlamentariRamoDataRS($ramo, $legislatura_corrente, $data, $offset, $limit); } echo "memory usage: " . memory_get_usage() . "\n"; $cnt = 0; while ($parlamentari_rs->next()) { $cnt++; $p = $parlamentari_rs->getRow(); $nome = $p['nome']; $cognome = $p['cognome']; $tipo_carica_id = $p['tipo_carica_id']; $id = $p['id']; switch ($tipo_carica_id) { case 1: $ramo = 'C'; $prefisso = 'On.'; break; case 4: case 5: $ramo = 'S'; $prefisso = 'Sen.'; break; case 2: case 3: case 6: case 7: $ramo = 'G'; $prefisso = ''; break; default: break; } $politico_stringa = sprintf("%s %s %s", $prefisso, $nome, strtoupper($cognome)); printf("%4d) %40s [%06d] ... ", $cnt, $politico_stringa, $id); $indice = OppIndiceAttivitaPeer::calcola_indice_politico($id, $legislatura_corrente, $data, $verbose, $atti_ids, $emendamenti_ids); // inserimento o aggiornamento del valore in opp_politician_history_cache // uso N come ChiTipo, perché P è preso per il vecchio indice. // una volta fatta la sostituzione, la scrittura qui è ridondante $cache_record = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, 'N', $id, $ramo); if ($cache_record === null) { $cache_record = new OppPoliticianHistoryCache(); } $cache_record->setLegislatura($legislatura_corrente); $cache_record->setChiTipo('N'); $cache_record->setChiId($id); $cache_record->setRamo($ramo); $cache_record->setIndice($indice); $cache_record->setData($data); $cache_record->setNumero(1); $cache_record->setUpdatedAt(date('Y-m-d H:i')); // forza riscrittura updated_at, per tenere traccia esecuzioni $cache_record->save(); unset($cache_record); $msg = sprintf("%7.2f", $indice); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); $msg = sprintf(" [%4d sec] [%10d bytes]\n", time() - $start_time, memory_get_usage()); echo pakeColor::colorize($msg, array('fg' => 'red', 'bold' => false)); } $msg = sprintf("%d parlamentari elaborati\n", $cnt); echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true)); }
public function executeListNuovoIndice() { $this->ramo = $this->getRequestParameter('ramo'); $this->parlamentari_rs = OppPoliticianHistoryCachePeer::getClassificaParlamentariNuovoRS($this->ramo); }