$c = new Criteria();
$c->add(OppAttoPeer::PARLAMENTO_ID, 999999);
$existing_records = OppAttoPeer::doSelect($c);
foreach ($existing_records as $rec) {
    $t->diag('Cleaning record ' . get_class($rec) . "(" . $rec->getId() . ")");
    $rec->delete();
}
$c = new Criteria();
$c->add(OppPoliticoPeer::ID, 999999);
$existing_records = OppPoliticoPeer::doSelect($c);
foreach ($existing_records as $rec) {
    $t->diag('Cleaning record ' . get_class($rec) . "(" . $rec->getId() . ")");
    $rec->delete();
}
$t->diag('Create the test act object');
$obj = new OppAtto();
$obj->setTipoAttoId(1);
$obj->setParlamentoId(999999);
$obj->setRamo('S');
$obj->setNumFase(914);
$obj->setDataPres('2008-11-01');
$obj->setDescrizione("Una descrizione di prova");
$obj->save();
$related_news = getRelatedNews($obj);
$n_related_news = count($related_news);
$first_news = $related_news[0];
$t->ok($n_related_news == 1, 'One news related to the act was generated');
dumpNews($t, "news related to the act", $related_news);
$t->diag('Create a non-final votation: two more news expected (group and detail)');
$vot = OppVotazionePeer::retrieveByPK(9900);
$vot_att = new OppVotazioneHasAtto();
 /**
  * get all distinct available statuses for emendamenti of a given atto
  *
  * @param OppAtto $atto 
  * @return hash of type {id => status}
  * @author Guglielmo Celata
  */
 public static function getAvailableStatuses(OppAtto $atto)
 {
     $c = new Criteria();
     $c->clearSelectColumns();
     $c->addJoin(OppAttoHasEmendamentoPeer::EMENDAMENTO_ID, OppEmendamentoPeer::ID);
     $c->addJoin(OppEmendamentoHasIterPeer::EMENDAMENTO_ID, OppEmendamentoPeer::ID);
     $c->addJoin(OppEmendamentoHasIterPeer::EM_ITER_ID, OppEmIterPeer::ID);
     $c->add(OppAttoHasEmendamentoPeer::ATTO_ID, $atto->getId());
     $c->addSelectColumn(OppEmIterPeer::ID);
     $c->addSelectColumn(OppEmIterPeer::FASE);
     $c->addSelectColumn(OppEmIterPeer::CONCLUSO);
     $c->setDistinct();
     $rs = OppEmendamentoPeer::doSelectRS($c);
     $items = array();
     while ($rs->next()) {
         if (trim(strtolower($rs->getString(2) != 'altro'))) {
             $items[$rs->getInt(1)] = $rs->getString(2);
         }
     }
     return $items;
 }
/**
 * Importa dei ddl a partire da un file yaml
 */
function run_opp_import_ddl_from_yaml($task, $args, $options)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        _loader();
    }
    $dry_run = false;
    if (array_key_exists('dry-run', $options)) {
        $dry_run = true;
    }
    if (array_key_exists('yaml-file', $options)) {
        $yaml_file = strtolower($options['yaml-file']);
    } else {
        throw new Exception("Specificare il file contenente i dati dei ddl con l'opzione --yaml-file=FILE_COMPLETE_PATH");
    }
    if (array_key_exists('leg', $options)) {
        $leg = strtolower($options['leg']);
    } else {
        throw new Exception("Specificare la legislatura con l'opzione --leg=LEGISLATURA");
    }
    echo "memory usage: " . memory_get_usage() . "\n";
    $start_time = time();
    $msg = sprintf("import ddl da {$yaml_file}\n");
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
    if (file_exists($yaml_file)) {
        $ddls = sfYaml::Load($yaml_file);
    } else {
        throw new Exception("Impossibile trovare il file {$yaml_file}");
    }
    foreach ($ddls as $key => $ddl) {
        $atto = new OppAtto();
        $atto->setLegislatura($leg);
        $atto->setParlamentoId($ddl['parlamento_id']);
        $atto->setRamo(strtoupper($ddl['ramo']));
        $atto->setNumfase($ddl['numfase']);
        $atto->setTipoAttoId(1);
        $atto->setDataPres($ddl['presentazione_date']);
        $atto->setDataAgg($ddl['update_date']);
        $atto->setTitolo($ddl['titolo']);
        $atto->setIniziativa($ddl['iniziativa']);
        if ($dry_run) {
            var_dump($ddl);
        } else {
            $atto->save();
            $msg = sprintf("atto %s.%s aggiunto - parlamento_id:%d, opp_id:%d\n", $atto->getRamo(), $atto->getNumfase(), $atto->getParlamentoId(), $atto->getId());
            echo pakeColor::colorize($msg, array('fg' => 'green', 'bold' => false));
        }
        unset($atto);
    }
    $msg = sprintf("%d atti elaborati\n", count($ddls));
    echo pakeColor::colorize($msg, array('fg' => 'cyan', 'bold' => true));
    $msg = sprintf(" [%4d sec] [%10d bytes]\n", time() - $start_time, memory_get_usage());
    echo pakeColor::colorize($msg, array('fg' => 'red', 'bold' => false));
}
<?php

define('SF_ROOT_DIR', realpath(dirname(__FILE__) . '/..'));
define('SF_APP', 'fe');
define('SF_ENVIRONMENT', 'dev');
define('SF_DEBUG', false);
require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php';
sfContext::getInstance();
$ddls = OppDdlPeer::doSelect(new Criteria());
foreach ($ddls as $ddl) {
    $atto = new OppAtto();
    $atto->setId($ddl->getId());
    $atto->setParlamentoId($ddl->getParlamentoId());
    $atto->setTipoAttoId($ddl->getTipo());
    $atto->setRamo($ddl->getRamo());
    $atto->setNumfase($ddl->getNumfase());
    $atto->setLegislatura($ddl->getLegislatura());
    $atto->setDataPres($ddl->getDataPres());
    $atto->setDataAgg($ddl->getDataAgg());
    $atto->setTitolo($ddl->getTitolo());
    $atto->setIniziativa($ddl->getIniziativa());
    $atto->setCompleto($ddl->getCompleto());
    $atto->setDescrizione($ddl->getDescrizione());
    $atto->setSeduta($ddl->getSeduta());
    $atto->setIter($ddl->getIter());
    $atto->setDataIter($ddl->getDataIter());
    $atto->save();
    print "atto: " . $atto->getId() . "...\n";
}
print "done.\n";
$c = new Criteria();
$c->add(OppAttoPeer::PARLAMENTO_ID, 999999);
$existing_records = OppAttoPeer::doSelect($c);
foreach ($existing_records as $rec) {
    $t->diag('Cleaning record ' . get_class($rec) . "(" . $rec->getId() . ")");
    $rec->delete();
}
$c = new Criteria();
$c->add(OppVotazionePeer::NUMERO_VOTAZIONE, 999999);
$existing_records = OppVotazionePeer::doSelect($c);
foreach ($existing_records as $rec) {
    $t->diag('Cleaning record ' . get_class($rec) . "(" . $rec->getId() . ")");
    $rec->delete();
}
$t->diag('Create the act object');
$obj_atto = new OppAtto();
$obj_atto->setTipoAttoId(1);
$obj_atto->setParlamentoId(999999);
$obj_atto->setDataPres('2008-11-01');
$obj_atto->setDescrizione("Un'atto di test");
$obj_atto->save();
$prefix = sfConfig::get(sprintf('propel_behavior_wikifiableBehavior_%s_prefix', get_class($obj_atto)));
$t->ok($prefix == 'atto', 'The prefix was correctly read from the behavior configuration');
$wiki_page = nahoWikiPagePeer::retrieveByName($prefix . "_" . $obj_atto->getId());
$t->ok($wiki_page instanceof nahoWikiPage, 'a wiki page was just created for this object');
$c = new Criteria();
$c->add(nahoWikiRevisionPeer::REVISION, 1);
$wiki_revisions = $wiki_page->getRevisions($c);
$wiki_revision = $wiki_revisions[0];
$t->ok(count($wiki_revisions) == 1 && $wiki_revision instanceof nahoWikiRevision, 'a wiki revision was added');
$wiki_content = $wiki_revision->getnahoWikiContent();
$t->diag('Tests beginning');
// clean the database
$t->diag('Cleaning previously created test records');
$c = new Criteria();
$c->add(OppAttoPeer::PARLAMENTO_ID, 999999);
$existing_records = OppAttoPeer::doSelect($c);
foreach ($existing_records as $rec) {
    $t->diag('Cleaning record ' . $rec->getId());
    $rec->delete();
}
$t->diag('Preparing a longvarchar variable');
$longvarchar = '';
for ($i = 0; $i < 15000; $i++) {
    $longvarchar .= 'pippo ';
}
$var_length = strlen($longvarchar);
$t->diag('Long variable created: length=' . $var_length);
$t->diag('Create the test OppAtto object');
$obj = new OppAtto();
$obj->setTipoAttoId(1);
$obj->setParlamentoId(999999);
$obj->setDescrizione($longvarchar);
$obj->save();
$c = new Criteria();
$c->add(OppAttoPeer::PARLAMENTO_ID, 999999);
$read_obj = OppAttoPeer::doSelectOne($c);
$read_var = $read_obj->getDescrizione();
$read_length = strlen($read_var);
$t->diag('Long variable read from DB: length=' . $read_length);
$t->ok($read_var == $longvarchar, 'the variable was set correctly');
$t->ok($read_length == $var_length, 'the length is ok');