/** * API (protetta da una API key) * torna flusso xml con i dati di un singolo atto * progetto op_fb * * <opp xmlns="http://www.openpolis.it/2010/opp" * xmlns:op="http://www.openpolis.it/2010/op" * xmlns:xlink="http://www.w3.org/1999/xlink"> * <op:content> * <atto opp_id="38631"> * <ramo>S</ramo> * <numero>1611-4-B</numero> * <tipo_atto>12</tipo_atto> * <titolo><![CDATA[ * [Ddl intercettazioni] Norme in materia di intercettazioni telefoniche, telematiche e ambientali. Modifica della disciplina in materia di astensione del giudice e degli atti di indagine. Integrazione della disciplina sulla responsabilità amministrativa delle persone giuridiche * ]]> * </titolo> * <presentato_il>2009-06-11</presentato_il> * <tipo_iniziativa>2</tipo_iniziativa> * <primi_firmatari> * <parlamentare opp_id="167"> * <tipo>On</tipo> * <nome>Angelino</nome> * <cognome>ALFANO</cognome> * <gruppo> * <nome>Popolo delle Libertà</nome> * <acronimo>PdL</acronimo> * </gruppo> * <data_inizio_carica>2008-04-29</data_inizio_carica> * <circoscrizione>Sicilia 1</circoscrizione> * </parlamentare> * </primi_firmatari> * <cofirmatari> * * </cofirmatari> * <relatori> * <parlamentare opp_id="1518"> * <tipo>Sen</tipo> * <nome>Roberto</nome> * <cognome>CENTARO</cognome> * <gruppo> * <nome>Popolo delle Libertà</nome> * <acronimo>PdL</acronimo> * </gruppo> * <data_inizio_carica>2008-04-29</data_inizio_carica> * <circoscrizione>Sicilia</circoscrizione> * </parlamentare> * </relatori> * <commissioni_assegnatarie> * <commissione tipo_sede="referente">Senato Commissione II Giustizia</commissione> * <commissione tipo_sede="consultiva">Senato Commissione I Affari Costituzionali</commissione> * <commissione tipo_sede="consultiva">Senato Commissione III Affari Esteri</commissione> * <commissione tipo_sede="consultiva">Senato Commissione V Bilancio</commissione> * </commissioni_assegnatarie> * <url_fonte_ufficiale xlink:href="http://www.senato.it/leg/16/BGT/Schede/Ddliter/33809.htm"/> * <testi_atto> * <url_testo_atto xlink:href="http://www.senato.it/loc/link.asp?tipodoc=DDLPRES&leg=16&id=424336"/> * </testi_atto> * </atto> * </op:content> * </opp> * * * Return error in case something's wrong * <opp xlmns="http://www.openpolis.it/2010/opp" * xmlns:op="http://www.openpolis.it/2010/op" * <op:error>Messaggio di errore</op:error> * </opp> * @return String * @author Guglielmo Celata **/ public function executeAtto() { $key = $this->getRequestParameter('key'); $id = $this->getRequestParameter('opp_id'); $is_valid_key = deppApiKeysPeer::isValidKey($key); $storage_path = sfConfig::get('sf_root_cache_dir'); $file_path = sprintf("%s/atti/%s.xml", $storage_path, $id); $resp_node = new SimpleXMLExtended('<opp xmlns="' . $this->opp_ns . '" ' . ' xmlns:op="' . $this->op_ns . '" ' . ' xmlns:xlink="' . $this->xlink_ns . '" >' . '</opp>'); $is_error = false; if ($is_valid_key) { // controllo esistenza del file if ($fp = @fopen($file_path, "r")) { // retrieve contenuto XML dalla cache sfContext::getInstance()->getLogger()->info("reading from cache: " . $file_path); $xmlContent = fread($fp, filesize($file_path)); fclose($fp); // send xml to output $this->_send_output($xmlContent); return sfView::NONE; } // estrazione informazioni $atto = OppAttoPeer::retrieveByPK($id); if ($atto) { $titulo = $atto->getTitolo(); $data_pres = $atto->getDataPres('Y-m-d'); $ramo = $atto->getRamo(); $numero = str_replace("/", "-", $atto->getNumfase()); $legislatura = $atto->getLegislatura(); // produzione xml $content_node = $resp_node->addChild('op:content', null, $this->op_ns); $atto_node = $content_node->addChild('atto', null, $this->opp_ns); $atto_node->addAttribute('opp_id', $id); $atto_node->addChild('ramo', $ramo); $atto_node->addChild('numero', $numero); $tipo_atto = $atto_node->addChild('tipo_atto', $atto->getOppTipoAtto()->getDenominazione()); // $tipo_atto->addAttribute('id', $atto->getTipoAttoId()); $titulo_node = $atto_node->addChild('titolo', null); $titulo_node->addCData($titulo); $atto_node->addChild('presentato_il', $data_pres); //tipo di iniziativa $tipo_iniziativa = ''; if ($atto->getIniziativa()) { switch ($atto->getIniziativa()) { case '1': $tipo_iniziativa = 'Parlamentare'; break; case '2': $tipo_iniziativa = 'di Governo'; break; case '4': $tipo_iniziativa = 'Popolare'; break; default: $tipo_iniziativa = ''; break; } } $primi_firmatari_node = $atto_node->addChild('primi_firmatari'); $this->addFirmatari('P', $atto, $primi_firmatari_node); $relatori_node = $atto_node->addChild('relatori'); $this->addFirmatari('R', $atto, $relatori_node); $co_firmatari_node = $atto_node->addChild('co_firmatari'); $this->addFirmatari('C', $atto, $co_firmatari_node); $commissioni_node = $atto_node->addChild('commissioni_assegnatarie'); $commissioni = $atto->getCommissioni(); foreach ($commissioni as $commissione) { $tipo_sede = $commissione->getTipo(); $commissione_node = $commissioni_node->addChild('commissione'); $commissione_node->addChild('tipo_sede', $tipo_sede); $commissione_node->addChild('ramo', $commissione->getOppSede()->getRamo()); $commissione_node->addChild('nome', $commissione->getOppSede()->getDenominazione()); } $atto_node->addChild('tipo_iniziativa', $tipo_iniziativa); // individuazione link fonte /* if ($atto->getTipoAttoId() == '1') $link = 'http://www.senato.it/leg/' . $atto->getLegislatura() . '/BGT/Schede/Ddliter/' . $atto->getParlamentoId() . '.htm'; else if ($atto->getTipoAttoId() > '1' && $atto->getTipoAttoId() < '12' ) $link = 'http://banchedati.camera.it/sindacatoispettivo_' . $atto->getLegislatura() . '/showXhtml.Asp?idAtto=' . $atto->getParlamentoId() . '&stile=6&highLight=1'; else if ($atto->getTipoAttoId() == '12' ) { $anno = explode("-",$atto->getDataPres()); $numero = explode("/",$atto->getNumfase()); $link = "http://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:decreto.legge:".$anno[0].";".$numero[0]; } else if ($atto->getTipoAttoId() == '14' ) { if ($atto->getRamo()=='C') $link = 'http://www.camera.it/_dati/leg' . $atto->getLegislatura() . '/lavori/stencomm/' . $atto->getNumfase() . '/s010.htm'; else $link = 'http://www.senato.it/leg/' . $atto->getLegislatura() . '/BGT/Schede/ProcANL/ProcANLscheda' . $atto->getParlamentoId() . '.htm'; } else if ($atto->getTipoAttoId() > '14' && $atto->getTipoAttoId() < '18' ) { $str = $atto->getParlamentoId(); $len = 5 - strlen($str); for($i=0; $i<$len; $i++) $str = '0' . $str; $link = 'http://www.camera.it/parlam/leggi/deleghe/'.$str.'dl.htm'; } if ($atto->getTipoAttoId() == '13') $link = 'http://www.governo.it/GovernoInforma/Comunicati/testo_int.asp?d='.$atto->getParlamentoId(); $fonte_node = $atto_node->addChild('fonte'); $fonte_node->addAttribute('href', $link); */ // estrazione documenti $c = new Criteria(); $c->add(OppDocumentoPeer::DOSSIER, 0); $documenti = $atto->getOppDocumentos($c); $documenti_node = $atto_node->addChild('documenti'); foreach ($documenti as $documento) { $documento_node = $documenti_node->addChild('documento'); if ($documento->getUrlTesto()) { $documento_node->addCData($documento->getTesto()); // $documento_node->addAttribute('href_txt', $documento->getUrlTesto()); if ($documento->getUrlPdf()) { $documento_node->addAttribute('href_pdf', $documento->getUrlPdf()); } } } $documenti_node->addAttribute('n', count($documenti)); // determina ultimo status $status = $atto->getStatus(); $status_str = ""; foreach ($status as $data => $status_iter) { $iter = OppIterPeer::retrieveByPK($status_iter); $status_str = $iter->getFase(); } $atto_node->addChild('status', $status_str); // determina lettura $preds = $atto->getAllPred(); $atto_node->addChild('lettura', 1 + count($preds)); } else { $is_error = true; $resp_node->addChild('op:error', 'Nessun atto trovato per questo ID', $this->op_ns); } } else { $is_error = true; $resp_node->addChild('op:error', 'Chiave di accesso non valida', $this->op_ns); } // build xml content out of respNode $xmlContent = $resp_node->asXML(); // write xml cache to file system (for non-error xml's) if (!$is_error) { $fp = @fopen($file_path, "w"); sfContext::getInstance()->getLogger()->info("writing to cache: " . $file_path); fwrite($fp, $xmlContent); fclose($fp); } // send xml to output $this->_send_output($xmlContent); return sfView::NONE; }
$related_news = getRelatedNews($obj); $n_related_news = count($related_news); $t->ok($n_related_news == 3, 'Now there are two more news related to the act'); dumpNews($t, "news related to the act", $related_news); $t->diag('Create a document'); $doc = new OppDocumento(); $doc->setData('2008-11-20'); $doc->setTitolo('Titolo di prova'); $doc->setOppAtto($obj); $doc->save(); $related_news = getRelatedNews($obj); $n_related_news = count($related_news); $t->ok($n_related_news == 4, 'Four related news'); dumpNews($t, "news related to the act", $related_news); $t->diag('Add a non-conclusive iter step'); $iter = OppIterPeer::retrieveByPK(29); $iter_att = new OppAttoHasIter(); $iter_att->setOppAtto($obj); $iter_att->setOppIter($iter); $iter_att->save(); $related_news = getRelatedNews($obj); $n_related_news = count($related_news); $generated_news = $iter_att->getGeneratedNews(); $first_generated = $generated_news[0]; $t->ok($n_related_news == 5, 'Five related news'); $t->ok($first_generated->getPriority() == 2, 'Priority for non-conclusive iter step is ' . $first_generated->getPriority()); dumpNews($t, "news related to the act", $related_news); $t->diag('Add a new politician'); $pol = new OppPolitico(); $pol->setNome('Guglielmo'); $pol->setCognome('Celata');
<?php echo format_date($data, 'dd/MM/yyyy'); ?> <?php } ?> </p> <?php $c = new Criteria(); ?> <?php $c->add(OppIterPeer::ID, $status_iter, Criteria::EQUAL); ?> <?php $iter = OppIterPeer::doSelectOne($c); ?> <p class="<?php echo $iter->getColor(); ?> "><?php echo strtolower($iter->getFase()); ?> </p> <?php } ?> </td> <td><p><?php echo $atto->getNInterventi(); ?>
dumpNews($t, "news related to the act", $related_news); $t->diag('Add a non-conclusive iter step'); $iter = OppIterPeer::retrieveByPK(29); $iter_att = new OppAttoHasIter(); $iter_att->setOppAtto($obj); $iter_att->setOppIter($iter); $iter_att->save(); $related_news = getRelatedNews($obj); $n_related_news = count($related_news); $generated_news = $iter_att->getGeneratedNews(); $first_generated = $generated_news[0]; $t->ok($n_related_news == 7, 'Seven related news'); $t->ok($first_generated->getPriority() == 2, 'Priority for non-conclusive iter step is ' . $first_generated->getPriority()); dumpNews($t, "news related to the act", $related_news); $t->diag('Add a conclusive iter step'); $iter = OppIterPeer::retrieveByPK(45); $iter_att = new OppAttoHasIter(); $iter_att->setOppAtto($obj); $iter_att->setOppIter($iter); $iter_att->save(); $related_news = getRelatedNews($obj); $n_related_news = count($related_news); $generated_news = $iter_att->getGeneratedNews(); $first_generated = $generated_news[0]; $t->ok($n_related_news == 8, 'Eight related news'); $t->ok($first_generated->getPriority() == 1, 'Priority for conclusive iter step is ' . $first_generated->getPriority()); dumpNews($t, "news related to the act", $related_news); $t->diag('Add a new assignment to a commission'); $sede = OppSedePeer::retrieveByPK(24); $sede_att = new OppAttoHasSede(); $sede_att->setOppAtto($obj);
/** * calcola l'indice di rilevanza, per un atto, nel suo complesso * * @param integer $atto_id * @param integer $tipo_atto_id * @param date $data * @param SimpleXMLElement $xml_node * @param boolean $verbose * @return float * @author Guglielmo Celata */ public static function calcolaRilevanzaAtto($atto, $tipo_atto_id, $data, $xml_node, $verbose = false) { $atto_node = $xml_node->addChild('atto', null, self::$opp_ns); $atto_id = $atto->getId(); // calcolo gruppi e schieramenti che presentano list($schier_pres, $grup_pres) = OppCaricaHasAttoPeer::getSchierGrupPresAtto($atto_id, $data); if ($verbose) { printf("\n presentazione:\n"); printf(" schieramenti: %s\n", join(',', $schier_pres)); printf(" gruppi: %s\n", join(',', $grup_pres)); } // il peso di un atto non dipende mai da chi lo ha presentato // il coefficiente che si considera è sempre quello di maggioranza $di_maggioranza = true; // determina la priorità dell'atto $priorita = is_null($atto->getPriorityValue()) ? 1 : $atto->getPriorityValue(); $atto_is_ratifica = $atto->isRatifica(); // determina il tipo di atto (per quello che concerne il calcolo dell'indice) $tipo_atto = OppTipoAttoPeer::getTipoPerIndice($tipo_atto_id); if (is_null($tipo_atto)) { return 0; } $atto_node->addAttribute('tipo_atto', $tipo_atto); $atto_node->addAttribute('priorita', $priorita); $atto_node->addAttribute('id', $atto_id); $punteggio = 0.0; // punteggio dato all'atto per-se, a seconda del tipo if ($tipo_atto == 'SDDL') { $punteggio = 1.0; } else { $punteggio = 0.5; } $presentazione_node = $atto_node->addChild('presentazione', null, self::$opp_ns); $presentazione_node->addAttribute('totale', $punteggio); // --- consenso --- $consenso_node = $atto_node->addChild('consenso', null, self::$opp_ns); $firmeRS = OppCaricaHasAttoPeer::getFirmeAttoDataTipoRS($atto_id, $data, "'C'"); $n_firme = array('gruppo' => 0, 'altri' => 0, 'opp' => 0); while ($firmeRS->next()) { $row = $firmeRS->getRow(); if ($verbose) { printf(" %d firme per gruppo %d\n", $row['nf'], $row['gruppo_id']); } // gestione del caso in cui l'atto è presentato dai due schieramenti // tutte le firme sono assegnate a gruppo, altri e opp if (count($schier_pres) > 1) { $n_firme['gruppo'] += $row['nf']; $n_firme['altri'] += $row['nf']; $n_firme['opp'] += $row['nf']; continue; } // gestione del caso in cui l'atto è presentato da più di un gruppo // le firme dello schieramento di pres. sono assegnate a gruppo e altri if (count($grup_pres) > 1) { if ($row['maggioranza'] == $schier_pres[0]) { $n_firme['gruppo'] += $row['nf']; $n_firme['altri'] += $row['nf']; } else { $n_firme['opp'] += $row['nf']; } continue; } if (in_array($row['gruppo_id'], $grup_pres)) { if ($row['nf'] > 1) { $n_firme['gruppo'] += $row['nf']; } } else { if (count($schier_pres) > 0 && $row['maggioranza'] == $schier_pres[0]) { $n_firme['altri'] += $row['nf']; } else { $n_firme['gruppo'] += $row['nf']; } } } $d_punteggio = 0.0; foreach ($n_firme as $tipo => $value) { if (!$value) { continue; } $soglia = self::$soglia_cofirme; if ($tipo_atto == 'mozione') { $soglia = self::$soglia_cofirme_mozioni; } if ($value <= $soglia) { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, "cofirme_{$tipo}_lo", $di_maggioranza); } else { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, "cofirme_{$tipo}_hi", $di_maggioranza); } $firme_node = $consenso_node->addChild('firme_' . $tipo, null, self::$opp_ns); $firme_node->addAttribute('n_firme', $value); $firme_node->addAttribute('totale', $dd_punteggio); if ($verbose) { printf(" firme %s (%d) %7.2f\n", $tipo, $value, $dd_punteggio); } } $punteggio += $d_punteggio; if ($verbose) { printf(" totale firme %7.2f\n", $d_punteggio); } $consenso_node->addAttribute('n_firme', $n_firme['gruppo'] + $n_firme['altri'] + $n_firme['opp']); $consenso_node->addAttribute('totale', $d_punteggio); // --- iter --- // controlla se atti non assorbiti sono diventati legge dopo passaggi in altri rami // atti diventati legge non prendono il punteggio di approvazione $diventato_legge_in_altri_rami = false; if (!isset($passaggio) || $passaggio != 'assorbito') { $atto = OppAttoPeer::retrieveByPK($atto_id); $c = new Criteria(); $c->add(OppAttoHasIterPeer::ITER_ID, 16); $c->add(OppAttoHasIterPeer::DATA, $data, Criteria::LESS_EQUAL); while ($atto_succ_id = $atto->getSucc()) { $atto = OppAttoPeer::retrieveByPK($atto_succ_id); if ($atto->countOppAttoHasIters($c) > 0) { $diventato_legge_in_altri_rami = true; } } unset($c); unset($atto); } // determina se l'atto è parte di un Testo Unificato $is_unified = OppAttoPeer::isUnifiedText($atto_id); // determina se l'atto è stato assorbito $is_absorbed = OppAttoPeer::isAbsorbed($atto_id); // determina se l'atto unificato è principale o meno $is_unificato_non_main = is_array($is_unified) && !$is_unified['is_main_unified']; $is_unificato_main = is_array($is_unified) && $is_unified['is_main_unified']; $itinera_atto_rs = OppAttoHasIterPeer::getItineraAttoDataRS($atto_id, $data); $iter_node = $atto_node->addChild('iter', null, self::$opp_ns); $d_punteggio = 0.0; $n_passaggi = 0; while ($itinera_atto_rs->next()) { $iter_atto = $itinera_atto_rs->getRow(); $passaggio = OppIterPeer::getIterPerIndice($iter_atto['iter_id']); if (is_null($passaggio)) { continue; } // se l'atto è unificato e non-main, allora prende il punteggio come gli atti assorbiti if ($is_unificato_non_main && $passaggio == 'approvato') { $passaggio = 'assorbito'; } // se diventato legge in altri rami, non prende punteggio di approvazione if ($diventato_legge_in_altri_rami && $passaggio == 'approvato') { continue; } $n_passaggi++; $passaggio_node = $iter_node->addChild('passaggio', null, self::$opp_ns); if ($passaggio == 'assorbito' && $is_unificato_non_main) { $passaggio_node->addAttribute('tipo', 'assorbimento come unificato non principale'); } else { $passaggio_node->addAttribute('tipo', $passaggio); } $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, $passaggio, $di_maggioranza); if ($verbose) { if ($passaggio == 'assorbito' && $is_unificato_non_main) { printf(" iter %s %7.2f\n", 'assorbimento come unificato non principale', $dd_punteggio); } else { printf(" iter %s %7.2f\n", $passaggio, $dd_punteggio); } } $passaggio_node->addAttribute('totale', $dd_punteggio); // il break su atti assorbiti avviene dopo l'assegnazione del punteggio if ($passaggio == 'assorbito') { break; } // --- bonus maggioranza --- if ($passaggio == 'approvato') { if ($di_maggioranza && OppAttoPeer::isAttoVotatoDaOpposizione($atto_id, $data)) { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, 'bonus_bi_partisan', true); $bonus_node = $iter_node->addChild('bonus_maggioranza', null, self::$opp_ns); $bonus_node->addAttribute('totale', $dd_punteggio); if ($verbose) { printf(" bonus di maggioranza! %7.2f\n", $dd_punteggio); } } } // break se mozione, risoluzione o odg approvato if (in_array($tipo_atto, array('mozione', 'risoluzione', 'odg')) && $passaggio == 'approvato') { break; } } // assegna punteggio se diventato legge in altri rami if ($diventato_legge_in_altri_rami && is_null($is_absorbed) && (is_null($is_unified) || $is_unificato_main)) { $d_punteggio += $dd_punteggio = self::getPunteggio($tipo_atto, 'diventato_legge', $di_maggioranza); $passaggio_node = $iter_node->addChild('passaggio', null, self::$opp_ns); $passaggio_node->addAttribute('tipo', "diventato legge in altri rami"); $passaggio_node->addAttribute('totale', $dd_punteggio); if ($verbose) { printf(" iter %s %7.2f\n", "diventato legge in altri rami", $dd_punteggio); } } $punteggio += $d_punteggio; if ($verbose) { printf(" totale iter %7.2f\n", $d_punteggio); } $iter_node->addAttribute('n_passaggi', $n_passaggi); $iter_node->addAttribute('totale', $d_punteggio); // --- componente emendamenti con funzione sigmoide --- $punteggio += $d_punteggio = self::calcolaComponenteEmendamentiPerAtto($atto_id, $data, $atto_node, $verbose); // --- sedute con interventi in commissione e assemblea --- $sedute_con_interventi_node = $atto_node->addChild('sedute_con_interventi', null, self::$opp_ns); $sedute_commissioni_node = $sedute_con_interventi_node->addChild('commissioni', null, self::$opp_ns); $n_sedute_commissioni = OppInterventoPeer::getNSeduteConInterventiAttoData($atto_id, 'C', $data); if ($n_sedute_commissioni) { $n_sedute_commissioni--; } if ($verbose) { printf(" n. sedute in commissione %d\n", $n_sedute_commissioni); } $d_punteggio_sedute_commissioni = $n_sedute_commissioni * parent::$punteggi['seduta_in_comm']; $sedute_commissioni_node->addAttribute('n_sedute', $n_sedute_commissioni); $sedute_commissioni_node->addAttribute('totale', $d_punteggio_sedute_commissioni); $sedute_assemblea_node = $sedute_con_interventi_node->addChild('assemblea', null, self::$opp_ns); $n_sedute_assemblea = OppInterventoPeer::getNSeduteConInterventiAttoData($atto_id, 'A', $data); if ($n_sedute_assemblea) { $n_sedute_assemblea--; } if ($verbose) { printf(" n. sedute in commissione %d\n", $n_sedute_assemblea); } $d_punteggio_sedute_assemblea = $n_sedute_assemblea * parent::$punteggi['seduta_in_ass']; $sedute_assemblea_node->addAttribute('n_sedute', $n_sedute_assemblea); $sedute_assemblea_node->addAttribute('totale', $d_punteggio_sedute_assemblea); $punteggio += $d_punteggio_sedute = $d_punteggio_sedute_commissioni + $d_punteggio_sedute_assemblea; if ($verbose) { printf(" totale sedute %7.2f\n", $d_punteggio_sedute); } $sedute_con_interventi_node->addAttribute('totale', $d_punteggio_sedute); if ($atto_is_ratifica) { $atto_node->addAttribute('totale_pre_decurtazione_ratifica', $punteggio); if ($verbose) { print "questo ATTO è una ratifica\n"; } $punteggio = $punteggio / self::$punteggi['fattore_diminuzione_ratifica']; } $punteggio = $priorita * $punteggio; $atto_node->addAttribute('totale', $punteggio); return $punteggio; }
<?php if ($status) { ?> <li><h6> ultimo status: <?php foreach ($status as $data => $status_iter) { ?> <?php $iter = OppIterPeer::retrieveByPK($status_iter); ?> <em> <?php if ($data != '' || $data != null) { ?> <span class="date"><?php echo format_date($data, 'dd/MM/yyyy'); ?> </span> <?php } ?> <?php echo ($atto->getRamo() == 'C' ? 'Camera' : 'Senato') . ": " . $iter->getFase(); ?> </em> <?php }
<?php } else { ?> <li class="<?php echo OppIterPeer::retrieveByPk($status_value[0])->getColor() == 'green' ? 'step-yes' : 'step-no'; ?> "><span class="date"><?php echo format_date($status_date[0], 'dd/MM/yyyy'); ?> </span><strong><?php echo link_to($succ->getRamo() . '.' . (strlen($succ->getNumfase()) > 13 ? substr($succ->getNumfase(), 0, 12) . ' ...' : $succ->getNumfase()), 'atto/index?id=' . $succ->getId()); ?> </strong> <p><?php echo OppIterPeer::retrieveByPk($status_value[0])->getShortName() . ($succ->getRamo() == 'C' ? ' alla Camera' : ' al Senato'); ?> </p></li> <?php } ?> <?php } ?> <?php } ?> <?php } ?>