source: cpc/trunk/project/lib/task/dumpAmendementsLoiCsvTask.class.php @ 3091

Last change on this file since 3091 was 3091, checked in by goya, 7 years ago

refacto api code to add task to generate dump of all amdmts for a bill

File size: 2.7 KB
Line 
1<?php
2
3class printDumpAmendementsLoiCsvTask extends sfBaseTask {
4  protected function configure() {
5    $this->namespace = 'dump';
6    $this->name = 'AmendementsLoiCsv';
7    $this->briefDescription = 'dump un csv contenant tous les amendements sur un texte de loi';
8    $this->addArgument('loi_id', sfCommandArgument::REQUIRED, 'Numero de loi'); 
9    $this->addArgument('format', sfCommandArgument::REQUIRED, 'Numero de loi'); 
10    $this->addOption('env', null, sfCommandOption::PARAMETER_OPTIONAL, 'Changes the environment this task is run in', 'prod');
11    $this->addOption('app', null, sfCommandOption::PARAMETER_OPTIONAL, 'Changes the environment this task is run in', 'frontend');
12 }
13
14  protected function execute($arguments = array(), $options = array()) {
15    $this->configuration = sfProjectConfiguration::getApplicationConfiguration($options['app'], $options['env'], true);
16    $manager = new sfDatabaseManager($this->configuration);
17    $context = sfContext::createInstance($this->configuration);
18    $this->configuration->loadHelpers(array('Url'));
19    $loi = $arguments['loi_id'];
20    $amendements = Doctrine::getTable('Amendement')->createQuery('a')
21      ->select('a.id, a.legislature, a.texteloi_id, a.numero, CAST( a.numero AS SIGNED ) AS num, a.sujet, a.sort, a.date, a.texte, a.expose, a.signataires, a.source')
22      ->from('Amendement a')
23      ->where('a.sort <> ?', 'Rectifié')
24      ->andWhere('a.texteloi_id = ?', $loi)
25      ->orderBy('num')
26      ->fetchArray();
27    $champs = array();
28    $res = array('amendements' => array());
29    $res = array();
30    foreach ($amendements as $a) {
31      $parlslugs = array();
32      foreach (Doctrine_Query::create()->select('p.slug')->from('Parlementaire p, ParlementaireAmendement pa')->where('p.id = pa.parlementaire_id')->andWhere('pa.amendement_id = ?', $a['id'])->orderBy('pa.numero_signataire')->fetchArray() as $s)
33        $parlslugs[] = $s['slug'];
34      $a['parlementaires'] = myTools::array2hash($parlslugs, 'parlementaire');
35      $a['url_nosdeputes'] = url_for('@amendement?loi='.$loi.'&numero='.$a['numero'], 'absolute=true');
36      unset($a['num']);
37      foreach(array_keys($a) as $key)
38        if (!isset($champs[$key]))
39          $champs[$key] = 1;
40      $res['amendements'][] = array("amendement" => $a);
41    }
42    $breakline = 'amendement';
43    switch($arguments['format']) {
44      case 'csv':
45        foreach(array_keys($champs) as $key)
46          echo "$key;";
47        echo "\n";
48        myTools::depile_csv($res, $breakline, array('parlementaire' => 1));
49        break;
50      case 'xml':
51        myTools::depile_xml($res, $breakline);
52        break;
53      case 'json':
54        echo json_encode($res);
55        break;
56      default:
57        echo "Please input format csv, json or xml.";
58    }
59  }
60 
61}
62
Note: See TracBrowser for help on using the repository browser.