/**
 * Fetch politicians' images from op_openpolis via remote getPolImage API call and store resized versions in the local db
 */
function run_opp_sync_polimages($task, $args)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        _loader();
    }
    if (count($args) > 1) {
        throw new Exception('Uso: opp-sync-polimages [$POL_ID].');
    }
    echo pakeColor::colorize('FEtching politicians... ', array('fg' => 'cyan', 'bold' => true));
    $start_time = microtime(true);
    if (count($args) == 1) {
        $pol_id = $args[0];
        $pol = OppPoliticoPeer::retrieveByPK($pol_id);
        if (!$pol instanceof OppPolitico) {
            throw new Exception('Politico sconosciuto: ' . $pol_id . '.');
        }
        $politicians = array($pol);
    } else {
        $c = new Criteria();
        $politicians = OppPoliticoPeer::doSelect($c);
    }
    foreach ($politicians as $pol) {
        opp_sync_politician_image($pol);
    }
    $total_time = microtime(true) - $start_time;
    echo pakeColor::colorize('All done! ', array('fg' => 'green', 'bold' => true));
    echo 'Processed ';
    echo pakeColor::colorize(count($politicians), array('fg' => 'cyan'));
    echo ' users in ';
    echo pakeColor::colorize(sprintf("%f", $total_time), array('fg' => 'cyan'));
    echo " seconds\n";
}
 public function executePolitician()
 {
     $this->politician_id = $this->getRequestParameter('id');
     $this->politician = OppPoliticoPeer::retrieveByPK($this->politician_id);
     $this->n_news = oppNewsPeer::countNewsForItem('OppPolitico', $this->politician_id);
     $this->getResponse()->setTitle('tutte le notizie sul parlamentare ' . $this->politician->getNome() . ' ' . $this->politician->getCognome() . ' - ' . sfConfig::get('app_main_title'));
     $this->response->addMeta('description', 'Tutte le notizie aggiornate quotidianamente su cosa fa in Parlamento ' . $this->politician->getNome() . ' ' . $this->politician->getCognome(), true);
     $c = new Criteria();
     $c->add(OppCaricaPeer::TIPO_CARICA_ID, array(1, 4, 5), Criteria::IN);
     $c->add(OppCaricaPeer::DATA_FINE, null, Criteria::ISNULL);
     $c->add(OppCaricaPeer::POLITICO_ID, $this->politician_id);
     $this->carica = OppCaricaPeer::doSelectOne($c);
     $c = oppNewsPeer::getNewsForItemCriteria('OppPolitico', $this->politician_id);
     $c->addDescendingOrderByColumn(NewsPeer::DATE);
     if ($this->hasRequestParameter('itemsperpage')) {
         $this->getUser()->setAttribute('itemsperpage', $this->getRequestParameter('itemsperpage'));
     }
     $itemsperpage = $this->getUser()->getAttribute('itemsperpage', sfConfig::get('app_pagination_limit'));
     $pager = new deppNewsPager('News', $itemsperpage);
     $pager->setCriteria($c);
     $pager->setPage($this->getRequestParameter('page', 1));
     $pager->init();
     $this->pager = $pager;
 }
/**
 * generate textual representation for a news
 *
 * @param News $news 
 * @param String $generator_model 
 * @param Array $pks 
 * @param BaseObject $generator 
 * @param Array $options 
 *   context  - 0: box, 1: news per politico, 2:pagina di un atto, 3: argomento
 *   in_mail  - if the news lives in a mail or not
 * @return string (html)
 * @author Guglielmo Celata
 */
function news_text(News $news, $generator_model, $pks, $generator, $options = array())
{
    sfLoader::loadHelpers('Asset');
    // default value for context
    if (!array_key_exists('context', $options)) {
        $context = CONTEXT_LIST;
    } else {
        $context = $options['context'];
    }
    // default value for in_mail
    if (!array_key_exists('in_mail', $options)) {
        $in_mail = false;
    } else {
        $in_mail = $options['in_mail'];
    }
    $news_string = "";
    // notizie di gruppo (votazioni, interventi o emendamenti)
    if (count($pks) == 0) {
        if ($generator_model == 'OppVotazioneHasAtto') {
            if ($news->getPriority() == 1) {
                $news_string .= content_tag('p', $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ');
                $news_string .= content_tag('p', 'si è svolta almeno una VOTAZIONE');
            } else {
                $news_string .= "<p>";
                $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                $news_string .= 'si &egrave; svolta una VOTAZIONE</p>';
                if ($context == CONTEXT_LIST) {
                    $atto = call_user_func_array(array($news->getRelatedMonitorableModel() . 'Peer', 'retrieveByPK'), $news->getRelatedMonitorableId());
                    $atto_link = link_to_in_mail($atto->getRamo() . '.' . $atto->getNumfase() . ' ' . $atto->getTitolo(true), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo(true)));
                    $news_string .= 'per ' . OppTipoAttoPeer::retrieveByPK($news->getTipoAttoId())->getDenominazione() . ' ';
                    $news_string .= '<p>' . $atto_link . '</p>';
                }
            }
        }
        if ($generator_model == 'OppIntervento') {
            $news_string .= "<p>";
            $news_string .= OppSedePeer::retrieveByPK($news->getSedeInterventoId())->getRamo() == 'C' ? 'Camera -  ' : 'Senato - ';
            $news_string .= 'C\'&egrave; stato <strong>almeno un intervento</strong> in ';
            if (OppSedePeer::retrieveByPK($news->getSedeInterventoId())->getTipologia() != 'Assemblea') {
                $news_string .= OppSedePeer::retrieveByPK($news->getSedeInterventoId())->getTipologia();
            }
            $news_string .= ' ' . OppSedePeer::retrieveByPK($news->getSedeInterventoId())->getDenominazione();
            if ($context = CONTEXT_LIST) {
                $news_string .= '   per ' . OppTipoAttoPeer::retrieveByPK($news->getTipoAttoId())->getDescrizione() . '</p> ';
                // link all'atto
                $atto = call_user_func_array(array($news->getRelatedMonitorableModel() . 'Peer', 'retrieveByPK'), array($news->getRelatedMonitorableId()));
                $atto_link = link_to_in_mail($atto->getRamo() . '.' . $atto->getNumfase() . ' ' . $atto->getTitolo(true), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo(true)));
                $news_string .= '<p>' . $atto_link . '</p>';
            } else {
                $news_string .= '</p>';
            }
        }
        if ($generator_model == 'OppEmendamento') {
            $related_monitorable_model = $news->getRelatedMonitorableModel();
            if ($related_monitorable_model == 'OppAtto') {
                $atto = OppAttoPeer::retrieveByPK($news->getRelatedMonitorableId());
                $n_pres = $atto->countPresentedEmendamentiAtDate($news->getDate());
                if ($n_pres > 1) {
                    $news_string .= content_tag('p', sprintf("Sono stati presentati %s", link_to($n_pres . " emendamenti", '/emendamenti_atto/' . $atto->getId())));
                } else {
                    $news_string .= content_tag('p', sprintf("&Egrave; stato presentato %s", link_to("un emendamento", '/emendamenti_atto/' . $atto->getId())));
                }
            } else {
                if ($related_monitorable_model == 'OppPolitico') {
                    // fetch del politico
                    $politico = OppPoliticoPeer::retrieveByPK($news->getRelatedMonitorableId());
                    $n_signs = $politico->countSignedEmendamentiAtDate($news->getDate());
                    if ($n_signs > 1) {
                        $news_string .= content_tag('p', "Ha firmato <b>{$n_signs}</b> emendamenti");
                    } else {
                        $news_string .= content_tag('p', "Ha firmato un emendamento");
                    }
                }
            }
        }
        return $news_string;
    }
    // eccezione per firma, quando in pagina argomenti
    // corregge bug #307
    if ($context == CONTEXT_TAG && $generator_model == 'OppCaricaHasAtto') {
        $atto = $generator->getOppAtto();
        $carica = $generator->getOppCarica();
        $tipo = $atto->getOppTipoAtto();
        $tipo_firma = $generator->getTipo();
        switch ($tipo_firma) {
            case "P":
                $tipo_firma = 'presenta';
                break;
            case "C":
                $tipo_firma = 'firma';
                break;
            case "R":
                $tipo_firma = '&egrave; relatore';
                break;
        }
        $atto_link = link_to_in_mail(troncaTesto(Text::denominazioneAtto($atto, 'list', true), 200), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo(true)));
        $politico = $carica->getOppPolitico();
        $politico_link = link_to_in_mail($politico, '@parlamentare?' . $politico->getUrlParams(), array('title' => 'Vai alla scheda del politico'));
        $news_string .= '<p>';
        $news_string .= $politico_link;
        $news_string .= " <strong>" . $tipo_firma . "</strong> ";
        if ($tipo_firma == '&egrave; relatore') {
            $news_string .= "dell'atto ";
        } else {
            $news_string .= "l'atto ";
        }
        $news_string .= $tipo->getDescrizione() . "</p>";
        $news_string .= '<p>' . $atto_link . '</p>';
        return $news_string;
    }
    if ($generator) {
        $related_monitorable_model = $news->getRelatedMonitorableModel();
        if ($related_monitorable_model == 'OppPolitico') {
            // fetch del politico
            $c = new Criteria();
            $c->add(OppPoliticoPeer::ID, $news->getRelatedMonitorableId());
            $politici = OppPoliticoPeer::doSelect($c);
            if (count($politici) == 0) {
                return 'empty OppPolitico:' . $news->getRelatedMonitorableId();
            }
            $politico = $politici[0];
            // link al politico
            $politico_link = link_to_in_mail($politico->getNome() . ' ' . $politico->getCognome(), '@parlamentare?' . $politico->getUrlParams(), array('title' => 'Vai alla scheda del politico'));
            // nuovo incarico
            if ($generator_model == 'OppCarica') {
                if ($context != CONTEXT_POLITICO) {
                    $news_string .= "<p><strong>assume l'incarico di " . $generator->getCarica() . "</strong> il politico</p>";
                    $news_string .= "<p>" . $politico_link . "</p>";
                } else {
                    $news_string .= "<p><strong>Assume l'incarico di " . $generator->getCarica() . "</strong></p>";
                }
            } else {
                if ($generator_model == 'OppCaricaHasGruppo') {
                    if ($context != CONTEXT_POLITICO) {
                        $news_string .= "<p><strong>si unisce al gruppo " . $generator->getOppGruppo()->getNome() . "</strong> il politico</p>";
                        $news_string .= "<p>" . $politico_link . "</p>";
                    } else {
                        $news_string .= "<p><strong>Si unisce al gruppo " . $generator->getOppGruppo()->getNome() . "</strong></p>";
                    }
                } else {
                    if ($generator_model == 'OppIntervento') {
                        $atto = $generator->getOppAtto();
                        $tipo = $atto->getOppTipoAtto();
                        $atto_link = link_to_in_mail(troncaTesto(Text::denominazioneAtto($atto, 'list', true), 200), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo(true)));
                        if ($context == CONTEXT_LIST) {
                            $news_string .= "<p>" . $politico_link . " <strong>interviene</strong>";
                            if ($generator->getUrl() != NULL) {
                                if (substr_count($generator->getUrl(), '@') > 0) {
                                    $int_urls = explode("@", $generator->getUrl());
                                    $intervento_link = " [vai ai testi";
                                    foreach ($int_urls as $cnt => $int_url) {
                                        if (!preg_match('#^http://#', $int_url)) {
                                            $int_url = sfConfig::get('app_url_sito_camera', 'http://nuovo.camera.it/') . $int_url;
                                        }
                                        $intervento_link .= " " . link_to($cnt + 1, $int_url) . ",";
                                    }
                                    $intervento_link = rtrim($intervento_link, ",");
                                    $intervento_link .= "]";
                                } else {
                                    $intervento_link = " [" . link_to('vai al testo', $generator->getUrl()) . "]";
                                }
                            } else {
                                $intervento_link = "";
                            }
                            $news_string .= $intervento_link . " in ";
                            if ($generator->getOppSede()->getId() != 35 && $generator->getOppSede()->getId() != 36) {
                                $news_string .= $generator->getOppSede()->getTipologia() . " ";
                            }
                            $news_string .= strtoupper($generator->getOppSede()->getDenominazione()) . " su ";
                            $news_string .= $tipo->getDescrizione() . "</p>";
                            $news_string .= "<p>" . $atto_link . "</p>";
                        }
                        if ($context == CONTEXT_ATTO) {
                            $news_string .= "<p>";
                            if ($generator->getOppSede()->getId() != 35 && $generator->getOppSede()->getId() != 36) {
                                $news_string .= $generator->getOppSede()->getTipologia() . " - ";
                            }
                            $news_string .= ucfirst(strtolower($generator->getOppSede()->getDenominazione()));
                            $news_string .= $politico_link . " <strong>&egrave; intervenuto</strong>";
                            if ($generator->getUrl() != NULL) {
                                if (substr_count($generator->getUrl(), '@') > 0) {
                                    $int_urls = explode("@", $generator->getUrl());
                                    $intervento_link = " [vai ai testi";
                                    foreach ($int_urls as $cnt => $int_url) {
                                        if (!preg_match('#^http://#', $int_url)) {
                                            $int_url = sfConfig::get('app_url_sito_camera', 'http://nuovo.camera.it/') . $int_url;
                                        }
                                        $intervento_link .= " " . link_to($cnt + 1, $int_url) . ",";
                                    }
                                    $intervento_link = rtrim($intervento_link, ",");
                                    $intervento_link .= "]";
                                } else {
                                    $intervento_link = " [" . link_to('vai al testo', $generator->getUrl()) . "]";
                                }
                            } else {
                                $intervento_link = "";
                            }
                            $news_string .= $intervento_link . " sull'atto </p>";
                        }
                        if ($context == CONTEXT_POLITICO) {
                            $news_string .= "<p><strong>Interviene</strong>";
                            if ($generator->getUrl() != NULL) {
                                if (substr_count($generator->getUrl(), '@') > 0) {
                                    $int_urls = explode("@", $generator->getUrl());
                                    $intervento_link = " [vai ai testi";
                                    foreach ($int_urls as $cnt => $int_url) {
                                        if (!preg_match('#^http://#', $int_url)) {
                                            $int_url = sfConfig::get('app_url_sito_camera', 'http://nuovo.camera.it/') . $int_url;
                                        }
                                        $intervento_link .= " " . link_to($cnt + 1, $int_url) . ",";
                                    }
                                    $intervento_link = rtrim($intervento_link, ",");
                                    $intervento_link .= "]";
                                } else {
                                    $intervento_link = " [" . link_to('vai al testo', $generator->getUrl()) . "]";
                                }
                            } else {
                                $intervento_link = "";
                            }
                            $news_string .= $intervento_link . " in ";
                            $news_string .= $generator->getOppSede()->getTipologia() . " ";
                            $news_string .= strtoupper($generator->getOppSede()->getDenominazione()) . " su ";
                            $news_string .= $tipo->getDescrizione() . "</p>";
                            $news_string .= "<p>" . $atto_link . "</p>";
                        }
                    } else {
                        if ($generator_model == 'OppCaricaHasAtto') {
                            $atto = $generator->getOppAtto();
                            $tipo = $atto->getOppTipoAtto();
                            $tipo_firma = $generator->getTipo();
                            switch ($tipo_firma) {
                                case "P":
                                    $tipo_firma = 'presenta';
                                    break;
                                case "C":
                                    $tipo_firma = 'firma';
                                    break;
                                case "R":
                                    $tipo_firma = '&egrave; relatore';
                                    break;
                            }
                            $atto_link = link_to_in_mail(troncaTesto(Text::denominazioneAtto($atto, 'list', true), 200), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo()));
                            if ($context == CONTEXT_POLITICO) {
                                $news_string .= '<p><strong>' . ucfirst($tipo_firma) . "</strong> ";
                            } else {
                                $news_string .= '<p>' . $politico_link . " <strong>" . $tipo_firma . "</strong> ";
                            }
                            if ($context != CONTEXT_ATTO) {
                                $news_string .= $tipo->getDescrizione() . "</p>";
                                $news_string .= '<p>' . $atto_link . '</p>';
                            } else {
                                if ($tipo_firma == '&egrave; relatore') {
                                    $news_string .= "dell'atto</p>";
                                } else {
                                    $news_string .= "l'atto</p>";
                                }
                            }
                        } else {
                            if ($generator_model == 'OppCaricaHasEmendamento') {
                                $emendamento = $generator->getOppEmendamento();
                                $tipo_firma = $generator->getTipo();
                                switch ($tipo_firma) {
                                    case "P":
                                        $tipo_firma = 'presenta';
                                        break;
                                    case "C":
                                        $tipo_firma = 'firma';
                                        break;
                                    case "R":
                                        $tipo_firma = '&egrave; relatore';
                                        break;
                                }
                                $news_string .= "<p>";
                                if ($context == CONTEXT_POLITICO) {
                                    $news_string .= '<strong>' . ucfirst($tipo_firma) . "</strong> ";
                                } else {
                                    $news_string .= $politico_link . " <strong>" . $tipo_firma . "</strong> ";
                                }
                                if ($tipo_firma == '&egrave; relatore') {
                                    $news_string .= "dell'emendamento";
                                } else {
                                    $news_string .= "l'emendamento";
                                }
                                $news_string .= ' "' . link_to_in_mail($emendamento->getTitoloCompleto(), '@singolo_emendamento?id=' . $emendamento->getId()) . '"';
                                if ($context != CONTEXT_ATTO) {
                                    $atto = $emendamento->getAttoPortante();
                                    // tipo di atto e genere per gli articoli e la desinenza
                                    $tipo = $atto->getOppTipoAtto();
                                    if (in_array($tipo->getId(), array(1, 10, 11, 12, 13, 15, 16, 17))) {
                                        $gender = 'm';
                                    } else {
                                        $gender = 'f';
                                    }
                                    $news_string .= " riferito " . ($gender == 'm' ? 'al ' : 'alla ');
                                    $news_string .= $atto->getOppTipoAtto()->getDescrizione() . " ";
                                    $news_string .= link_to_in_mail(troncaTesto(Text::denominazioneAtto($atto, 'list'), 200), 'atto/index?id=' . $atto->getId());
                                }
                            } else {
                                $news_string .= $generator_model;
                            }
                        }
                    }
                }
            }
        } else {
            if ($related_monitorable_model == 'OppAtto') {
                // fetch dell'atto
                $c = new Criteria();
                $c->add(OppAttoPeer::ID, $news->getRelatedMonitorableId());
                $atti = OppAttoPeer::doSelectJoinOppTipoAtto($c);
                // detect a void query
                if (count($atti) == 0) {
                    return 'empty OppAtto:' . $news->getRelatedMonitorableId();
                }
                $atto = $atti[0];
                // tipo di atto e genere per gli articoli e la desinenza
                $tipo = $atto->getOppTipoAtto();
                if (in_array($tipo->getId(), array(1, 10, 11, 12, 13, 15, 16, 17))) {
                    $gender = 'm';
                } else {
                    $gender = 'f';
                }
                // link all'atto
                $atto_link = link_to_in_mail(troncaTesto(Text::denominazioneAtto($atto, 'list', true), 200), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo(true)));
                // presentazione o passaggio di stato
                if ($generator_model == 'OppAtto') {
                    if ($tipo->getId() == 1 && $news->getSucc() !== null) {
                        // passaggio di stato (cambio ramo?)
                        // fetch dell'oggetto succ
                        $succ_atto = OppAttoPeer::retrieveByPK($news->getSucc());
                        $succ_atto_link = link_to_in_mail($succ_atto->getRamo() . "." . $succ_atto->getNumFase(), 'atto/index?id=' . $succ_atto->getId(), array('title' => $succ_atto->getTitolo(true)));
                        $this_atto_link = link_to_in_mail($atto->getRamo() . "." . $atto->getNumFase(), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo(true)));
                        $news_string .= "<p>";
                        $news_string .= "il ddl {$this_atto_link}, approvato ";
                        if ($atto->getRamo() == 'C') {
                            $news_string .= "alla Camera, ";
                        } else {
                            $news_string .= "al Senato, ";
                        }
                        $news_string .= "<strong>&egrave; ora approdato ";
                        if ($succ_atto->getRamo() == 'C') {
                            $news_string .= "alla Camera</strong> ";
                        } else {
                            $news_string .= "al Senato</strong> ";
                        }
                        $news_string .= "come {$succ_atto_link}.";
                        $news_string .= "</p>";
                    } else {
                        // presentazione atto
                        switch ($tipo_atto = $tipo->getId()) {
                            case 13:
                                $news_string .= "<p>Comunicato del governo: ";
                                $news_string .= $atto_link . "</p>";
                                break;
                            case 14:
                                $news_string .= "<p>";
                                $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                $news_string .= "<strong>Svolta</strong> audizione ";
                                $news_string .= $atto_link . "</p>";
                                break;
                            default:
                                $news_string .= "<p>";
                                $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                $news_string .= "<strong>Presentat" . ($gender == 'm' ? 'o' : 'a') . "</strong> ";
                                if ($context != 0) {
                                    $news_string .= $tipo->getDescrizione() . "</p>";
                                    $news_string .= "<p>" . $atto_link . "</p>";
                                } else {
                                    $news_string .= "</p>";
                                }
                                break;
                        }
                    }
                } else {
                    if ($generator_model == 'OppIntervento') {
                        $politico = $generator->getOppCarica()->getOppPolitico();
                        $politico_link = link_to_in_mail($politico, '@parlamentare?' . $politico->getUrlParams(), array('title' => 'Vai alla scheda del politico'));
                        $news_string .= "<p>" . $politico_link . " <strong>interviene</strong>";
                        if ($generator->getUrl() != NULL) {
                            if (substr_count($generator->getUrl(), '@') > 0) {
                                $int_urls = explode("@", $generator->getUrl());
                                $intervento_link = " [vai ai testi";
                                foreach ($int_urls as $cnt => $int_url) {
                                    if (!preg_match('#^http://#', $int_url)) {
                                        $int_url = sfConfig::get('app_url_sito_camera', 'http://nuovo.camera.it/') . $int_url;
                                    }
                                    $intervento_link .= " " . link_to_in_mail($cnt + 1, $int_url) . ",";
                                }
                                $intervento_link = rtrim($intervento_link, ",");
                                $intervento_link .= "]";
                            } else {
                                $intervento_link = " [" . link_to_in_mail('vai al testo', $generator->getUrl()) . "]";
                            }
                        } else {
                            $intervento_link = "";
                        }
                        $news_string .= $intervento_link . " in ";
                        if ($generator->getOppSede()->getId() != 35 && $generator->getOppSede()->getId() != 36) {
                            $news_string .= $generator->getOppSede()->getTipologia() . " ";
                        }
                        $news_string .= strtoupper($generator->getOppSede()->getDenominazione());
                        $news_string .= $news->getRamoVotazione() == 'C' ? ' alla Camera su' : ' al Senato su';
                        $news_string .= " " . $tipo->getDescrizione() . "</p>";
                        $news_string .= '<p>' . $atto_link . '</p>';
                    } else {
                        if ($generator_model == 'OppCaricaHasAtto') {
                            $tipo_firma = $generator->getTipo();
                            switch ($tipo_firma) {
                                case "P":
                                    $tipo_firma = 'presentato';
                                    break;
                                case "C":
                                    $tipo_firma = 'firmato';
                                    break;
                                case "R":
                                    $tipo_firma = '&egrave; relatore';
                                    break;
                            }
                            $politico = $generator->getOppCarica()->getOppPolitico();
                            $politico_link = link_to_in_mail($politico, '@parlamentare?' . $politico->getUrlParams(), array('title' => 'Vai alla scheda del politico'));
                            if ($tipo_firma != '&egrave; relatore') {
                                $news_string .= "<p>";
                                $news_string .= $politico_link;
                                $news_string .= " <strong>ha " . $tipo_firma . "</strong> ";
                                $news_string .= $tipo->getDescrizione() . "</p>";
                                $news_string .= '<p>' . $atto_link . '</p>';
                            }
                        } else {
                            if ($generator_model == 'OppAttoHasSede') {
                                $news_string .= "<p>";
                                $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                $news_string .= "<strong>&egrave; all'esame</strong> in ";
                                $news_string .= $generator->getOppSede()->getTipologia() . " ";
                                $news_string .= content_tag('b', strtoupper($generator->getOppSede()->getDenominazione()));
                                if ($context != 0) {
                                    $news_string .= " " . $tipo->getDescrizione() . "</p>";
                                    $news_string .= "<p>" . $atto_link . "</p>";
                                } else {
                                    $news_string .= "</p>";
                                }
                            } else {
                                if ($generator_model == 'OppVotazioneHasAtto') {
                                    $news_string .= "<p>";
                                    $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                    if ($news->getPriority() == 1) {
                                        $news_string .= link_to(' <strong>si &egrave; svolta la votazione finale</strong>', '@votazione?' . $generator->getOppVotazione()->getUrlParams());
                                    } else {
                                        $news_string .= " si &egrave; svolta la votazione per " . link_to($generator->getOppVotazione()->getTitolo(), '@votazione?' . $generator->getOppVotazione()->getUrlParams());
                                    }
                                    if ($context != 0) {
                                        $news_string .= " relativa a " . $tipo->getDescrizione() . "</p>";
                                        $news_string .= "<p>" . $atto_link . "</p>";
                                    } else {
                                        $news_string .= "</p>";
                                    }
                                } else {
                                    if ($generator_model == 'OppAttoHasIter') {
                                        $news_string .= "<p>";
                                        $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                        $news_string .= content_tag('b', news_text_for_iter($generator->getOppIter()->getId(), $gender));
                                        $news_string .= articolo($tipo->getId()) . $tipo->getDescrizione() . "</p>";
                                        if ($context != CONTEXT_ATTO) {
                                            $news_string .= "<p>" . $atto_link . "</p>";
                                        } else {
                                            $news_string .= "";
                                        }
                                    } else {
                                        if ($generator_model == 'Tagging') {
                                            $news_string .= "<p>" . articolo($tipo->getId());
                                            $news_string .= $tipo->getDescrizione() . " ";
                                            $news_string .= $atto_link . " ";
                                            $news_string .= "presentat" . ($gender == 'm' ? 'o' : 'a') . " ";
                                            if ($news->getRamoVotazione() == 'C') {
                                                $news_string .= ' alla Camera ';
                                            } else {
                                                if ($news->getRamoVotazione() == 'S') {
                                                    $news_string .= ' al Senato ';
                                                }
                                            }
                                            $news_string .= "il " . $news->getDataPresentazioneAtto('d/m/Y') . " ";
                                            $news_string .= "&egrave; stat" . ($gender == 'm' ? 'o' : 'a') . " <b>aggiunt" . ($gender == 'm' ? 'o' : 'a') . " al monitoraggio dell'argomento ";
                                            $news_string .= $generator->getTag()->getTripleValue() . "</b></p>";
                                        } else {
                                            if ($generator_model == 'OppDocumento') {
                                                $news_string .= "<p>";
                                                $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                                $news_string .= "E' disponibile il <strong>nuovo documento</strong> ";
                                                $news_string .= '"' . link_to($generator->getTitolo(), 'atto/documento?id=' . $generator->getId()) . '"';
                                                if ($context != CONTEXT_ATTO) {
                                                    $news_string .= " riferito " . ($gender == 'm' ? 'al ' : 'alla ');
                                                    $news_string .= $generator->getOppAtto()->getOppTipoAtto()->getDescrizione() . "</p>";
                                                    $news_string .= "<p>" . link_to($generator->getOppAtto()->getRamo() . "." . $generator->getOppAtto()->getNumfase() . " " . troncaTesto(Text::denominazioneAtto($generator->getOppAtto(), 'list'), 200), 'atto/index?id=' . $generator->getOppAtto()->getId()) . "</p>";
                                                }
                                            } else {
                                                if ($generator_model == 'OppAttoHasEmendamento') {
                                                    $emendamento = $generator->getOppEmendamento();
                                                    $news_string .= "<p>";
                                                    $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera -  ' : 'Senato - ';
                                                    $news_string .= "E' stato presentato  ";
                                                    $news_string .= " in " . $emendamento->getOppSede()->getDenominazione();
                                                    $news_string .= " l'<b>emendamento</b> ";
                                                    $news_string .= '"' . link_to_in_mail($emendamento->getTitoloCompleto(), '@singolo_emendamento?id=' . $emendamento->getId()) . '"';
                                                    if ($context != CONTEXT_ATTO) {
                                                        $news_string .= " riferito " . ($gender == 'm' ? 'al ' : 'alla ');
                                                        $news_string .= $generator->getOppAtto()->getOppTipoAtto()->getDescrizione() . " ";
                                                        $news_string .= link_to_in_mail(troncaTesto(Text::denominazioneAtto($generator->getOppAtto(), 'list'), 200), 'atto/index?id=' . $generator->getOppAtto()->getId());
                                                    }
                                                    $news_string .= "</p>";
                                                } else {
                                                    if ($generator_model == 'OppEmendamentoHasIter') {
                                                        $emendamento = $generator->getOppEmendamento();
                                                        $atti = $emendamento->getOppAttoHasEmendamentosJoinOppAtto();
                                                        $news_string .= "<p>";
                                                        $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera:  ' : 'Senato: ';
                                                        $news_string .= $emendamento->getOppSede()->getDenominazione() . " - ";
                                                        $news_string .= "L'<b>emendamento</b> ";
                                                        $news_string .= '"' . link_to_in_mail($emendamento->getTitoloCompleto(), '@singolo_emendamento?id=' . $emendamento->getId()) . '"';
                                                        if ($context != CONTEXT_ATTO) {
                                                            $news_string .= " riferito " . ($gender == 'm' ? 'al ' : 'alla ');
                                                            $news_string .= $atto_link;
                                                        }
                                                        $news_string .= " &egrave; stato " . content_tag('b', strtolower($generator->getOppEmIter()->getFase()));
                                                    } else {
                                                        if ($generator_model == 'OppEsitoSeduta') {
                                                            $sede = $generator->getOppSede();
                                                            $news_string .= "<p>";
                                                            $news_string .= $news->getRamoVotazione() == 'C' ? 'Camera - ' : 'Senato - ';
                                                            $news_string .= "<strong>Si &egrave; svolta una seduta</strong> in ";
                                                            if ($sede->getTipologia() != 'Assemblea') {
                                                                $news_string .= $sede->getTipologia() . ' ';
                                                            }
                                                            $news_string .= $sede->getDenominazione() . ' ';
                                                            if ($generator->getTipologia() != 'Assemblea') {
                                                                $news_string .= " (" . $generator->getTipologia() . ") ";
                                                            }
                                                            $news_string .= "<strong><a class='external' target='_blank' href=" . $generator->getUrl() . ">";
                                                            $news_string .= $generator->getEsito();
                                                            $news_string .= "</a></strong>";
                                                            if ($context != CONTEXT_ATTO) {
                                                                $news_string .= " per il disegno di legge<br/>";
                                                                $news_string .= $atto_link;
                                                            }
                                                            $news_string .= "</p>";
                                                        } else {
                                                            $news_string .= $generator_model;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            } else {
                if ($related_monitorable_model == 'Tag') {
                    // tag fetch
                    $tag = TagPeer::retrieveByPK($news->getRelatedMonitorableId());
                    if ($generator_model == 'Tagging') {
                        $tagging_pks = array_values(unserialize($news->getGeneratorPrimaryKeys()));
                        $tagging_id = $tagging_pks[0];
                        $tagging = TaggingPeer::retrieveByPK($tagging_id);
                        $taggable_model = $tagging->getTaggableModel();
                        $taggable_id = $tagging->getTaggableId();
                        $tagged_obj = call_user_func_array(array($taggable_model . 'Peer', 'retrieveByPK'), array($taggable_id));
                        if ($taggable_model == 'OppAtto') {
                            // the tagged object is an atto
                            $atto = $tagged_obj;
                            // tipo di atto e genere per gli articoli e la desinenza
                            $tipo = $atto->getOppTipoAtto();
                            if (in_array($tipo->getId(), array(1, 10, 11, 12, 13, 15, 16, 17))) {
                                $gender = 'm';
                            } else {
                                $gender = 'f';
                            }
                            $atto_link = link_to_in_mail(troncaTesto(Text::denominazioneAtto($atto, 'list', true), 200), 'atto/index?id=' . $atto->getId(), array('title' => $atto->getTitolo()));
                            $news_string .= "<p>" . articolo($tipo->getId());
                            $news_string .= $tipo->getDescrizione() . " ";
                            $news_string .= $atto_link . " ";
                            $news_string .= "presentat" . ($gender == 'm' ? 'o' : 'a') . " ";
                            if ($atto->getRamo() == 'C') {
                                $news_string .= ' alla Camera ';
                            } else {
                                if ($atto->getRamo() == 'S') {
                                    $news_string .= ' al Senato ';
                                }
                            }
                            $news_string .= "il " . $atto->getDataPres('d/m/Y') . " ";
                            $news_string .= "&egrave; stat" . ($gender == 'm' ? 'o' : 'a') . " <b>aggiunt" . ($gender == 'm' ? 'o' : 'a') . " al monitoraggio dell'argomento ";
                            if ($context != CONTEXT_TAG) {
                                $news_string .= $generator->getTag()->getTripleValue();
                            }
                            $news_string .= "</b></p>";
                        }
                        if ($taggable_model == 'OppEmendamento') {
                            $emendamento = $tagged_obj;
                            $emendamento_link = link_to_in_mail($emendamento->getTitoloCompleto(), '@singolo_emendamento?id=' . $emendamento->getId());
                            $news_string .= "<p>";
                            $relatedAttos = $emendamento->getOppAttoHasEmendamentosJoinOppAtto();
                            $ddl_em = "";
                            if (count($relatedAttos) > 0) {
                                if (count($relatedAttos) == 1) {
                                    $ddl_em = " relativo al ddl ";
                                } else {
                                    $ddl_em = " relativo ai ddl ";
                                }
                                foreach ($relatedAttos as $relatedAtto) {
                                    $atto = $relatedAtto->getOppAtto();
                                    $ddl_em = $ddl_em . " " . link_to($atto->getRamo() . '.' . $atto->getNumfase(), '@singolo_atto?id=' . $atto->getId(), array('title' => $atto->getTitolo()));
                                }
                            }
                            $news_string .= "l'emendamento " . $emendamento_link . ", presentato il " . $emendamento->getDataPres('d/m/Y') . ", " . $ddl_em . " &egrave; stato <b>aggiunto al monitoraggio dell'argomento ";
                            if ($context != CONTEXT_TAG) {
                                $news_string .= $generator->getTag()->getTripleValue();
                            }
                            $news_string .= "</b></p>";
                        }
                    }
                }
            }
        }
    } else {
        sfLogger::getInstance()->info('xxx: errore per: ' . $generator_model . ': chiavi: ' . $news->getGeneratorPrimaryKeys());
    }
    if ($in_mail) {
        $sf_site_url = sfConfig::get('sf_site_url', 'openparlamento');
        $news_string = str_replace('./symfony', $sf_site_url, $news_string);
        # per il test e per sicurezza
        $news_string = str_replace('a href=', 'a style="color: #339;" href=', $news_string);
    }
    return $news_string;
}
 /**
  * API (protetta da una API key)
  * torna flusso xml con i dati di una singola votazione
  * 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> 
  *        <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.
  *        </parlamentare>
  *    </op:content>
  *  </opkw>
  *
  *       
  * 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 executeParlamentare()
 {
     $key = $this->getRequestParameter('key');
     $id = $this->getRequestParameter('id');
     $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) {
         // estrazione informazioni
         $politico = OppPoliticoPeer::retrieveByPK($id);
         $p = $politico->getMetaInfo();
         $dati_storici = $politico->getDatiStorici();
         $voti_chiave = $politico->getVotiChiave();
         // produzione xml
         $content_node = $resp_node->addChild('op:content', null, $this->op_ns);
         $parlamentare_node = $content_node->addChild('parlamentare', null, $this->opkw_ns);
         $parlamentare_node->addAttribute('id', $p['politico_id']);
         if ($p['tipo_carica_id'] == 1) {
             $parlamentare_node->addAttribute('prefix', 'On.');
         }
         if ($p['tipo_carica_id'] == 4 || $p['tipo_carica_id'] == 5) {
             $parlamentare_node->addAttribute('prefix', 'Sen.');
         }
         $parlamentare_node->addChild('nome', $p['nome']);
         $parlamentare_node->addChild('cognome', $p['cognome']);
         $parlamentare_node->addChild('circoscrizione', $p['circoscrizione']);
         $gruppo_node = $parlamentare_node->addChild('gruppo');
         $gruppo_node->addChild('nome', $p['gruppo_nome']);
         $gruppo_node->addChild('acronimo', $p['gruppo_acronimo']);
         if ($data_inizio = $p['data_inizio'] > '2008-04-29') {
             $parlamentare_node->addChild('data_inizio', date('d/m/Y', strtotime(date($p['data_inizio']))));
         }
         // dati storici
         $dati_node = $parlamentare_node->addChild('dati_storici');
         foreach ($dati_storici as $data => $dati) {
             $storico_node = $dati_node->addChild('dato_storico');
             $storico_node->addAttribute('date', $data);
             $n_votazioni = $dati['presenze'] + $dati['assenze'] + $dati['missioni'];
             foreach (array('presenze', 'assenze', 'missioni', 'ribellioni') as $tipo_dato) {
                 $storico_dato_node = $storico_node->addChild($tipo_dato);
                 $storico_dato_node->addChild($tipo_dato, $dati[$tipo_dato]);
                 if ($n_votazioni && in_array($tipo_dato, array('presenze', 'missioni', 'assenze'))) {
                     $storico_dato_node->addChild('percentuale', sprintf("%7.1f", 100.0 * $dati[$tipo_dato] / $n_votazioni));
                     $storico_dato_node->addChild('totale', sprintf("%d", $n_votazioni));
                 }
                 if ($dati['presenze'] > 0 && $tipo_dato == 'ribellioni') {
                     $storico_dato_node->addChild('percentuale', sprintf("%7.1f", 100.0 * $dati[$tipo_dato] / $dati['presenze']));
                     $storico_dato_node->addChild('totale', sprintf("%d", $dati['presenze']));
                 }
             }
         }
         // voti chiave
         $voti_chiave_node = $parlamentare_node->addChild('voti_chiave', null, $this->opkw_ns);
         foreach ($voti_chiave as $voto_chiave) {
             $votazione = $voto_chiave->getOppVotazione();
             $voto = $voto_chiave->getVoto();
             $voto_maggioranza = $votazione->getEsito();
             $href = sprintf("/votazioni/%d.xml", $votazione->getId());
             $voto_chiave_node = $voti_chiave_node->addChild('voto_chiave');
             $voto_chiave_node->addAttribute('xlink:href', $href, $this->xlink_ns);
             $voto_chiave_node->addAttribute('id', $votazione->getId());
             $titolo = $votazione->getTitoloAggiuntivo() ? $votazione->getTitoloAggiuntivo() : $votazione->getTitolo();
             $titolo_voto_node = $voto_chiave_node->addChild('titolo', $titolo);
             $voto_node = $voto_chiave_node->addChild('voto', $voto);
             $voto_node = $voto_chiave_node->addChild('voto_maggioranza', ucfirst(strtolower($voto_maggioranza)));
         }
     } 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;
 }
 public function _add_data_inizio_incarico($politicians, $ramo, $data)
 {
     $items = array();
     foreach ($politicians as $politician) {
         $politician_obj = OppPoliticoPeer::retrieveByPK($politician['politico_id']);
         $carica_corrente = $politician_obj->getCaricaDepSenCorrente();
         $data_inizio_incarico = $carica_corrente->getDataInizio();
         if ($data_inizio_incarico > sfConfig::get('app_legislatura_data_inizio', 2008)) {
             $politician['data_inizio_incarico'] = strftime('%d/%m/%Y', strtotime($data_inizio_incarico));
         }
         array_push($items, $politician);
     }
     return $items;
 }