$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');
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);
 /**
  * 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&amp;leg=16&amp;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;
 }
<?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 
    }