public function executeSendNewsletter()
 {
     $user_id = $this->getRequestParameter('user_id');
     $today_date = $this->getRequestParameter('date');
     $user = OppUserPeer::retrieveByPK($user_id);
     // fetcha le news di oggi (o di una data)
     // solo di priorità <= 2
     $news_c = oppNewsPeer::getTodayNewsForUserCriteria($user, $today_date);
     $news_c->add(oppNewsPeer::PRIORITY, 2, Criteria::LESS_EQUAL);
     $news = oppNewsPeer::doSelect($news_c);
     // do not send email if no news
     if (count($news) == 0) {
         return sfView::NONE;
     }
     // class initialization
     $mail = new sfMail();
     $mail->setCharset('utf-8');
     $mail->setContentType('text/html');
     // definition of the required parameters
     if ($user->isAdhoc()) {
         $mail->setSender(sfConfig::get('app_newsletter_pd_sender_address', '*****@*****.**'), sfConfig::get('app_newsletter_pd_from_tag', 'political desk'));
         $mail->setFrom(sfConfig::get('app_newsletter_pd_from_address', '*****@*****.**'), sfConfig::get('app_newsletter_pd_from_tag', 'political desk'));
     } else {
         $mail->setSender(sfConfig::get('app_newsletter_sender_address', '*****@*****.**'), sfConfig::get('app_newsletter_from_tag', 'openparlamento'));
         $mail->setFrom(sfConfig::get('app_newsletter_from_address', '*****@*****.**'), sfConfig::get('app_newsletter_from_tag', 'openparlamento'));
     }
     $mail->addAddress($user->getEmail());
     // invia tutte le mail in BCC a un indirizzo di servizio
     if ($user->isAdhoc()) {
         $mail->addBcc('*****@*****.**');
     }
     if (!is_null($today_date)) {
         $formatted_today_date = date('d/m/Y', strtotime($today_date));
     } else {
         $formatted_today_date = date('d/m/Y');
     }
     $mail->setSubject('monitoraggio del ' . $formatted_today_date);
     // raggruppa le news per data
     $grouped_news = array();
     foreach ($news as $n) {
         $date = strtotime($n->getDate());
         if (!is_string($date) && !is_int($date)) {
             $date = 0;
         }
         if (!array_key_exists($date, $grouped_news)) {
             $grouped_news[$date] = array();
         }
         $grouped_news[$date][] = $n;
     }
     krsort($grouped_news);
     $this->date = $formatted_today_date;
     $this->user = $user;
     $this->grouped_news = $grouped_news;
     $this->mail = $mail;
 }
/**
 * fetch today's news regarding objects monitored by the user
 * today's news are last 24h's news
 *
 * @param string $user - OppUser object
 * @return void
 * @author Guglielmo Celata
 */
function opp_test_single_newsletter($user, $date = null)
{
    $start_time = microtime(true);
    $df = new sfDateFormat('it_IT');
    echo pakeColor::colorize(sprintf('date: %s, name: %s... ', is_null($date) ? 'Today' : $date, $user), array('fg' => 'red', 'bold' => true));
    $news_c = oppNewsPeer::getTodayNewsForUserCriteria($user, $date);
    $news_c->add(oppNewsPeer::PRIORITY, 2, Criteria::LESS_EQUAL);
    $news = oppNewsPeer::doSelect($news_c);
    // raggruppa le news per data
    $grouped_news = array();
    foreach ($news as $n) {
        $date = strtotime($n->getDate());
        if (!is_string($date) && !is_int($date)) {
            $date = 0;
        }
        if (!array_key_exists($date, $grouped_news)) {
            $grouped_news[$date] = array();
        }
        $grouped_news[$date][] = $n;
    }
    krsort($grouped_news);
    echo pakeColor::colorize(sprintf("(%d)\n", count($news)), array('fg' => 'cyan'));
    if (count($news) > 0) {
        echo pakeColor::colorize(sprintf("\t    |        ID | CREATED_AT      | REL_MODEL |    REL_ID |      GENERATOR_MODEL | P |\n"), array('fg' => 'cyan', 'bold' => true));
    }
    foreach ($grouped_news as $date_ts => $news) {
        echo pakeColor::colorize(sprintf("%2d/%3s/%4d\n", $df->format($date_ts, 'dd'), $df->format($date_ts, 'MMM'), $df->format($date_ts, 'yyyy')), array('fg' => 'cyan', 'bold' => true));
        foreach ($news as $i => $n) {
            echo pakeColor::colorize(sprintf("\t%3d | %9d | %10s | %10s | %9d | %20s | %1d |\n", $i + 1, $n->getId(), $n->getCreatedAt('y-m-d H:i'), $n->getRelatedMonitorableModel(), $n->getRelatedMonitorableId(), $n->getGeneratorModel(), $n->getPriority()));
        }
    }
    echo "\n";
    $execution_time = microtime(true) - $start_time;
    if (isset($raw_email) && $raw_email != '') {
        echo " ok (";
    } else {
        echo " no mail (";
    }
    echo pakeColor::colorize(sprintf("%f", $execution_time), array('fg' => 'cyan'));
    echo ")\n";
}