Passed
Push — master ( a74354...254a60 )
by Andrea
18:29 queued 11s
created

GenerateFormCommand::execute()   B

Complexity

Conditions 8
Paths 18

Size

Total Lines 89
Code Lines 51

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 37
CRAP Score 9.1248

Importance

Changes 10
Bugs 1 Features 0
Metric Value
cc 8
eloc 51
nc 18
nop 2
dl 0
loc 89
ccs 37
cts 50
cp 0.74
crap 9.1248
rs 7.8246
c 10
b 1
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Cdf\PannelloAmministrazioneBundle\Command;
4
5
use Cdf\BiCoreBundle\Entity\Colonnetabelle;
6
use Cdf\BiCoreBundle\Entity\Permessi;
7
use Cdf\PannelloAmministrazioneBundle\Utils\ProjectPath;
8
use Cdf\PannelloAmministrazioneBundle\Utils\Utility;
9
use Doctrine\ORM\EntityManagerInterface;
10
use Symfony\Component\Console\Command\Command;
11
use Symfony\Component\Console\Input\InputArgument;
12
use Symfony\Component\Console\Input\InputInterface;
13
use Symfony\Component\Console\Input\InputOption;
14
use Symfony\Component\Console\Output\OutputInterface;
15
use Symfony\Component\Filesystem\Filesystem;
16
use Cdf\BiCoreBundle\Utils\Entity\ModelUtils;
17
use Cdf\BiCoreBundle\Utils\Api\ApiUtils;
18
use Cdf\BiCoreBundle\Utils\String\StringUtils;
19
use function count;
20
21
/**
22
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
23
 */
24
class GenerateFormCommand extends Command
25
{
26
27
    //Task / Process customized for Form Creation
28
    protected static $defaultName = 'pannelloamministrazione:generateformcrud';
29
    protected $apppaths;
30
    protected $em;
31
    protected $pammutils;
32
    private $generatemplate;
33
    private $projectname;
34
    private $isApi;
35
    private $kernel;
36
    private $typesMapping;
37
38 1
    protected function configure()
39
    {
40
        $this
41 1
                ->setDescription('Genera le views per il crud')
42 1
                ->setHelp('Genera le views per il crud, <br/>bi.mwb AppBundle default [--schemaupdate]<br/>')
43 1
                ->addArgument('entityform', InputArgument::REQUIRED, 'Il nome entity del form da creare')
44 1
                ->addOption('generatemplate', 't', InputOption::VALUE_OPTIONAL)
45 1
                ->addOption('projectname', 'p', InputOption::VALUE_OPTIONAL)
46 1
                ->addOption('isApi', 'a', InputOption::VALUE_OPTIONAL);
47 1
    }
48
49 1
    public function __construct($kernel, ProjectPath $projectpath, Utility $pammutils, EntityManagerInterface $em)
50
    {
51 1
        $this->kernel = $kernel;
52 1
        $this->apppaths = $projectpath;
53 1
        $this->pammutils = $pammutils;
54 1
        $this->em = $em;
55 1
        $this->loadTypesMapping();
56
57
        // you *must* call the parent constructor
58 1
        parent::__construct();
59 1
    }
60
61
    /**
62
     * Load mapping between types and loading methods
63
     */
64 1
    private function loadTypesMapping()
65
    {
66 1
        $this->typesMapping = array();
67 1
        $this->typesMapping['datetime'] = 'addDateTimeType';
68 1
        $this->typesMapping['double'] = 'addNumberType';
69 1
        $this->typesMapping['int'] = 'addIntegerType';
70 1
        $this->typesMapping['int64'] = 'addIntegerType';
71 1
        $this->typesMapping['void'] = 'addStringType';
72 1
        $this->typesMapping['fk'] = 'addFkType';
73 1
        $this->typesMapping['enum'] = 'addEnumType';
74 1
        $this->typesMapping['comment'] = 'addComment';
75 1
        $this->typesMapping['bool'] = 'addCheckbox';
76 1
    }
77
78
    /**
79
     * Browse available functions and return the function to be used for source code portion.
80
     */
81
    private function getFunctionForSourceCode(&$attribute, $attributeName)
82
    {
83
        $function = null;
84
        if (\str_contains($attributeName, '_id')) {
85
            $function = $this->typesMapping['fk'];
86
        } elseif (\str_contains($attributeName, '_enum')) {
87
            $function = $this->typesMapping['enum'];
88
        } elseif (\str_contains($attributeName, '_desc')) {
89
            $function = $this->typesMapping['comment'];
90
        } elseif ($attributeName == 'id') {
91
            //the record will be ignored and not included into the form
92
        } elseif (isset($this->typesMapping[$attribute['type']]) && $attribute['type'] == 'bool') {
93
            $function = $this->typesMapping[$attribute['type']];
94
        } elseif (isset($this->typesMapping[$attribute['format']])) {
95
            $function = $this->typesMapping[$attribute['format']];
96
        } else {
97
            $function = $this->typesMapping['void'];
98
        }
99
        return $function;
100
    }
101
102
    /**
103
     * It insert main types to be used into a Form
104
     */
105 1
    private function insertUseOfTypes(array &$lines, $position)
106
    {
107 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\SubmitType;');
108 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\DateTimeType;');
109 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\NumberType;');
110 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\TextType;');
111 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\CheckboxType;');
112 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\DateType;');
113 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\IntegerType;');
114 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\TextAreaType;');
115 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\MailType;');
116 1
        array_splice($lines, ++$position, 0, 'use Symfony\Component\Form\Extension\Core\Type\ChoiceType;');
117 1
        array_splice($lines, ++$position, 0, 'use Cdf\BiCoreBundle\Utils\FieldType\HiddenIntegerType;');
118 1
    }
119
120
    /**
121
     * It insert setExtraOption method to created form
122
     */
123
    private function insertSetExtraOptionFunction(array &$lines, $position)
124
    {
125
        array_splice($lines, ++$position, 0, '
126
    
127
    private function setExtraOption(array $options):array 
128
    {
129
        $arraychoices = array();
130
        if (isset($options["extra-options"])) {
131
            foreach($options["extra-options"] as $key=>$value) {
132
                foreach($value as $extraOption) {
133
                    $arraychoices[$key][$extraOption["descrizione"]] = $extraOption["id"];
134
                }
135
            }
136
        }
137
        return $arraychoices;
138
    }
139
    
140
    ');
141
    }
142
143
    /**
144
     * It inserts submitparams options, and arraychoices filling if API form
145
     */
146 1
    private function insertParamsOptions(array &$lines, $position)
147
    {
148 1
        if ($this->isApi) {
149
            array_splice($lines, $position, 0, '        $arraychoices = $this->setExtraOption($options);');
150
            $position++;
151
        }
152 1
        array_splice($lines, $position, 0, '        $submitparms = array('
153 1
        . "'label' => 'Salva','attr' => array(\"class\" => \"btn-outline-primary bisubmit\", \"aria-label\" => \"Salva\"));");
154 1
    }
155
156
    /**
157
     * Add portion of code to manage a field as datetime
158
     *
159
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
160
     */
161
    private function addDateTimeType(array &$lines, $position, $attributeName)
162
    {
163
        array_splice($lines, ++$position, 0, "            ->add('" . $attributeName . "', DateTimeType::class, array(");
164
        array_splice($lines, ++$position, 0, "                  'widget' => 'single_text',");
165
        array_splice($lines, ++$position, 0, "                  'format' => 'dd/MM/yyyy HH:mm',");
166
        array_splice($lines, ++$position, 0, "                  'attr' => array('class' => 'bidatetimepicker'),");
167
        array_splice($lines, ++$position, 0, "                  ))");
168
    }
169
170
    /**
171
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
172
     */
173
    private function addFkType(array &$lines, $position, $attributeName)
174
    {
175
        array_splice($lines, ++$position, 0, "            ->add('" . $attributeName . "',HiddenIntegerType::class)");
176
        $choiceName = substr($attributeName, 0, strpos($attributeName, '_id'));
177
        
178
        //it fixes cases such as event_type_id
179
        $parametri = array('str' => $choiceName, 'primamaiuscola' => true);
180
        $upperName = StringUtils::toCamelCase($parametri);
181
        
182
        //$upperName = ucfirst($choiceName);
183
        array_splice($lines, ++$position, 0, '            ->add(\''.$choiceName.'\',ChoiceType::class,
184
            array(
185
                    \'choices\' => isset($arraychoices[\''.$choiceName.'\'])?$arraychoices[\''.$choiceName.'\']:[], 
186
                    \'mapped\' => false,
187
                    \'data\' => ($options["data"]->get'.$upperName.'Id() > 0) ? $options["data"]->get'.$upperName.'Id() : null ,
188
                    \'placeholder\' => \'---\'
189
                    )
190
                )
191
            ');
192
    }
193
194
    /**
195
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
196
     */
197
    private function addEnumType(array &$lines, $position, $attributeName)
198
    {
199
        array_splice($lines, ++$position, 0, "            ->add('" . $attributeName . "',HiddenIntegerType::class)");
200
        $choiceName = substr($attributeName, 0, strpos($attributeName, '_enum'));
201
        
202
        //it fixes cases such as event_type_id
203
        $parametri = array('str' => $choiceName, 'primamaiuscola' => true);
204
        $upperName = StringUtils::toCamelCase($parametri);
205
206
        //$upperName = ucfirst($choiceName);
207
        array_splice($lines, ++$position, 0, '            ->add(\''.$choiceName.'\',ChoiceType::class,
208
            array(
209
                    \'choices\' => isset($arraychoices[\''.$choiceName.'\'])?$arraychoices[\''.$choiceName.'\']:[], 
210
                    \'mapped\' => false,
211
                    \'data\' => ($options["data"]->get'.$upperName.'Enum() >= 0) ? $options["data"]->get'.$upperName.'Enum() : null ,
212
                    \'placeholder\' => \'---\'
213
                    )
214
                )
215
            ');
216
    }
217
218
    /**
219
     * Add a boolean checkbox
220
     *
221
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
222
     */
223
    private function addCheckbox(array &$lines, $position, $attributeName)
224
    {
225
        array_splice($lines, ++$position, 0, '            ->add(\''.$attributeName.'\',CheckboxType::class,
226
            array(
227
                    \'false_values\' => [0, false, null], 
228
                    \'required\' => false
229
                    )
230
                )
231
            ');
232
    }
233
234
    /**
235
     * Add portion of code to manage a field as float/number
236
     *
237
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
238
     */
239
    private function addNumberType(array &$lines, $position, $attributeName)
240
    {
241
        array_splice($lines, ++$position, 0, "            ->add('" . $attributeName . "',NumberType::class)");
242
    }
243
244
    /**
245
     * Add portion of code to manage a field as integer
246
     *
247
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
248
     */
249
    private function addIntegerType(array &$lines, $position, $attributeName)
250
    {
251
        array_splice($lines, ++$position, 0, "            ->add('" . $attributeName . "',IntegerType::class)");
252
    }
253
254
    /**
255
     * Add portion of code to manage a commmented string
256
     *
257
     * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
258
     */
259
    private function addComment(array &$lines, $position, $attributeName, $commented = false)
260
    {
261
        $this->addStringType($lines, $position, $attributeName, true);
262
    }
263
264
    /**
265
     * Add portion of code to manage a field as string
266
     */
267
    private function addStringType(array &$lines, $position, $attributeName, $commented = false)
268
    {
269
        $comment = '';
270
        if ($commented) {
271
            $comment = '//';
272
        }
273
        array_splice($lines, ++$position, 0, $comment."            ->add('" . $attributeName . "',TextType::class)");
274
    }
275
276
    /**
277
     * Execute command in order to create the new form class
278
     */
279 1
    protected function execute(InputInterface $input, OutputInterface $output)
280
    {
281 1
        set_time_limit(0);
282
283
        //$libraryPrefix = ApiUtils::namespacePrefix();
284
        //TODO: refactor variables
285 1
        $bundlename = 'App';
286 1
        $this->projectname = $input->getOption('projectname');
287 1
        $entityform = $input->getArgument('entityform');
288 1
        $modelClass = ApiUtils::getModelClass($this->projectname, $entityform);
289
        //$controllerItem = ApiUtils::getModelControllerClass($this->projectname, $entityform);
290
291 1
        $this->generatemplate = $input->getOption('generatemplate');
292 1
        $this->isApi = $input->getOption('isApi');
293
294
        //to be changed form generation in order to cover API/REST type
295 1
        $command = $this->apppaths->getConsoleExecute() . ' --env=dev' . ' make:form ' . $entityform . 'Type';
0 ignored issues
show
Bug introduced by
Are you sure $entityform of type null|string|string[] can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

295
        $command = $this->apppaths->getConsoleExecute() . ' --env=dev' . ' make:form ' . /** @scrutinizer ignore-type */ $entityform . 'Type';
Loading history...
296
        //Append also entity class if is an ORM
297 1
        if ($this->isApi) {
298
            $command .= ' -n';
299
        } else {
300 1
            $command .= ' ' . $entityform;
301
        }
302 1
        $resultcrud = $this->pammutils->runCommand($command);
303 1
        if (0 == $resultcrud['errcode']) {
304 1
            $fs = new Filesystem();
305
            //Controller
306 1
            $controlleFile = $this->apppaths->getSrcPath() . '/Controller/' . $entityform . 'Controller.php';
307
308 1
            $formFile = $this->apppaths->getSrcPath() . '/Form/' . $entityform . 'Type.php';
309
310 1
            $lines = file($formFile, FILE_IGNORE_NEW_LINES);
311
312
313 1
            $pos1 = $this->findPosition($lines, 'use Symfony\Component\Form\AbstractType');
0 ignored issues
show
Bug introduced by
It seems like $lines can also be of type false; however, parameter $arr of Cdf\PannelloAmministrazi...Command::findPosition() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

313
            $pos1 = $this->findPosition(/** @scrutinizer ignore-type */ $lines, 'use Symfony\Component\Form\AbstractType');
Loading history...
314
315
            //Some objects to be used
316 1
            $this->insertUseOfTypes($lines, $pos1);
0 ignored issues
show
Bug introduced by
It seems like $lines can also be of type false; however, parameter $lines of Cdf\PannelloAmministrazi...and::insertUseOfTypes() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

316
            $this->insertUseOfTypes(/** @scrutinizer ignore-type */ $lines, $pos1);
Loading history...
317 1
            if ($this->isApi) {
318
                array_splice($lines, $pos1, 0, 'use ' . $modelClass . ';');
319
            }
320
321 1
            $pos2 = $this->findPosition($lines, '{', true);
322 1
            if ($this->isApi) {
323
                $this->insertSetExtraOptionFunction($lines, $pos2);
324
            }
325 1
            $pos2 = $this->findPosition($lines, '$builder', false);
326
327 1
            $this->insertParamsOptions($lines, $pos2);
328
329 1
            $pos3 = $this->findPosition($lines, '->add(', false);
330 1
            array_splice($lines, $pos3 + 1, 0, "            ->add('submit', SubmitType::class, \$submitparms)");
331
332 1
            if ($this->isApi) {
333
                $pos3 = $this->findPosition($lines, '->add(');
334
                //comment the line ->add()
335
                $lines[$pos3] = '//' . $lines[$pos3];
336
                //in this position should be added form attributes
337
                $modelUtil = new ModelUtils();
338
                $attributes = $modelUtil->getAttributes($modelClass);
339
                foreach (array_reverse($attributes) as $attributeName => $attribute) {
340
                    $function = $this->getFunctionForSourceCode($attribute, $attributeName);
341
                    if (isset($function)) {
342
                        $this->$function($lines, $pos3, $attributeName);
343
                    }
344
                }
345
            }
346
347 1
            array_splice($lines, count($lines) - 3, 0, "            'parametriform' => array(),'extra-options' => null,");
348
349 1
            file_put_contents($formFile, implode("\n", $lines));
350
351 1
            $code = $this->getControllerCode(str_replace('/', '\\', $bundlename), $entityform, $modelClass);
352 1
            $fs->dumpFile($controlleFile, $code);
353 1
            $output->writeln('<info>Creato ' . $controlleFile . '</info>');
354
355
            //Routing
356 1
            $retmsg = $this->generateFormRouting($entityform);
357
            //Twig template
358 1
            $this->copyTableStructureWiew($entityform);
359
360 1
            $this->generateFormsDefaultTableValues($entityform);
361 1
            $output->writeln('<info>' . $retmsg . '</info>');
362
363 1
            return 0;
364
        } else {
365
            $output->writeln('<error>' . $resultcrud['message'] . '</error>');
366
367
            return 1;
368
        }
369
    }
370
371 1
    private function findPosition(array $arr, String $keyword, bool $first = true)
372
    {
373 1
        $returnIndex = -1;
374 1
        foreach ($arr as $index => $string) {
375 1
            if (strpos($string, $keyword) !== false) {
376 1
                $returnIndex = $index;
377 1
                if ($first) {
378 1
                    break;
379
                }
380
            }
381
        }
382 1
        return $returnIndex;
383
    }
384
385 1
    private function generateFormRouting($entityform)
386
    {
387
        //Routing del form
388 1
        $bundlename = 'App';
389 1
        $fs = new Filesystem();
390 1
        $routingFile = $this->apppaths->getSrcPath() . '/../config/routes/' . strtolower($entityform) . '.yml';
391
392 1
        $code = $this->getRoutingCode(str_replace('/', '', $bundlename), $entityform);
393 1
        $fs->dumpFile($routingFile, $code);
394
395 1
        $dest = $this->apppaths->getSrcPath() . '/../config/routes.yaml';
396
397 1
        $routingContext = str_replace('/', '', $bundlename) . '_' . $entityform . ':' . "\n" .
398 1
                '  resource: routes/' . strtolower($entityform) . '.yml' . "\n" .
399 1
                '  prefix: /' . $entityform . "\n\n";
400
401
        //Si fa l'append nel file routing del bundle per aggiungerci le rotte della tabella che stiamo gestendo
402 1
        $fh = file_get_contents($dest);
403 1
        if (false !== $fh) {
404 1
            file_put_contents($dest, $routingContext . $fh);
405 1
            $retmsg = 'Routing ' . $dest . " generato automaticamente da pannelloammonistrazionebundle\n\n* * * * CLEAR CACHE * * * *\n";
406
        } else {
407
            $retmsg = 'Impossibile generare il ruoting automaticamente da pannelloammonistrazionebundle\n';
408
        }
409
410 1
        return $retmsg;
411
    }
412
413 1
    private function copyTableStructureWiew($entityform)
414
    {
415 1
        $fs = new Filesystem();
416
        /* $publicfolder = $this->apppaths->getPublicPath();
417
418
          if (!$fs->exists($publicfolder . "/js")) {
419
          $fs->mkdir($publicfolder . "/js", 0777);
420
          }
421
422
          if (!$fs->exists($publicfolder . "/css")) {
423
          $fs->mkdir($publicfolder . "/css", 0777);
424
          } */
425
426 1
        $templatetablefolder = $this->apppaths->getTemplatePath() . DIRECTORY_SEPARATOR . $entityform;
427 1
        $crudfolder = $this->kernel->locateResource('@BiCoreBundle')
428 1
                . DIRECTORY_SEPARATOR . 'Resources/views/Standard/Crud';
429 1
        $tabellafolder = $this->kernel->locateResource('@BiCoreBundle')
430 1
                . DIRECTORY_SEPARATOR . 'Resources/views/Standard/Tabella';
431
432 1
        $fs->mirror($crudfolder, $templatetablefolder . '/Crud');
433 1
        if ($this->generatemplate) {
434
            $fs->mirror($tabellafolder, $templatetablefolder . '/Tabella');
435
        }
436
437
        //$fs->touch($publicfolder . DIRECTORY_SEPARATOR . "js" . DIRECTORY_SEPARATOR . $entityform . ".js");
438
        //$fs->touch($publicfolder . DIRECTORY_SEPARATOR . "css" . DIRECTORY_SEPARATOR . $entityform . ".css");
439 1
    }
440
441 1
    private function generateFormsDefaultTableValues($entityform)
442
    {
443
        //Si inserisce il record di default nella tabella permessi
444 1
        $ruoloAmm = $this->em->getRepository('BiCoreBundle:Ruoli')->findOneBy(array('superadmin' => true)); //SuperAdmin
445
446 1
        $newPermesso = new Permessi();
447 1
        $newPermesso->setCrud('crud');
448 1
        $newPermesso->setModulo($entityform);
449 1
        $newPermesso->setRuoli($ruoloAmm);
450 1
        $this->em->persist($newPermesso);
451 1
        $this->em->flush();
452
453 1
        $tabelle = new Colonnetabelle();
454 1
        $tabelle->setNometabella($entityform);
455 1
        $this->em->persist($tabelle);
456 1
        $this->em->flush();
457 1
    }
458
459
    /**
460
     * Return the portion of code for Controller
461
     */
462 1
    private function getControllerCode($bundlename, $tabella, String $swaggerModel): String
463
    {
464 1
        $code = '';
465 1
        if ($this->isApi) {
466
            $code = $this->getControllerCodeAPI($bundlename, $tabella, $swaggerModel);
467
        } else {
468 1
            $code = $this->getControllerCodeORM($bundlename, $tabella);
469
        }
470 1
        return $code;
471
    }
472
473
    /**
474
     *  It creates a Skeleton for a controller class that extends FiController
475
     *  */
476 1
    private function getControllerCodeORM($bundlename, $tabella)
477
    {
478
        $codeTemplate = <<<EOF
479 1
<?php
480
namespace [bundle]\Controller;
481
482
use Symfony\Component\HttpFoundation\Request;
483
use Symfony\Component\HttpFoundation\Response;
484
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
485
use Cdf\BiCoreBundle\Controller\FiController;
486
use Cdf\BiCoreBundle\Utils\Tabella\ParametriTabella;
487
use [bundle]\Entity\[tabella];
488
use [bundle]\Form\[tabella]Type;
489
                
490
/**
491
* [tabella] controller.
492
*
493
*/
494
495
class [tabella]Controller extends FiController {
496
497
}
498
EOF;
499 1
        $codebundle = str_replace('[bundle]', $bundlename, $codeTemplate);
500 1
        $code = str_replace('[tabella]', $tabella, $codebundle);
501
502 1
        return $code;
503
    }
504
505
    /**
506
     *  It creates a Skeleton for a controller class that extends ApiController
507
     *  */
508
    private function getControllerCodeAPI($bundlename, $tabella, String $modelPath)
509
    {
510
        $projectname = $this->projectname;
511
        $codeTemplate = <<<EOF
512
<?php
513
namespace [bundle]\Controller;
514
515
use Symfony\Component\HttpFoundation\Request;
516
use Symfony\Component\HttpFoundation\Response;
517
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
518
use Cdf\BiCoreBundle\Controller\FiApiController;
519
use Cdf\BiCoreBundle\Utils\Tabella\ParametriTabella;
520
use [modelPath];
521
use [bundle]\Form\[tabella]Type;
522
                
523
/**
524
* [tabella] controller.
525
* @var(biproject="$projectname")
526
*/
527
528
class [tabella]Controller extends FiApiController {
529
530
}
531
EOF;
532
        $codebundle = str_replace('[bundle]', $bundlename, $codeTemplate);
533
        $codebundle = str_replace('[modelPath]', $modelPath, $codebundle);
534
        $code = str_replace('[tabella]', $tabella, $codebundle);
535
536
        return $code;
537
    }
538
539 1
    private function getRoutingCode($bundlename, $tabella)
540
    {
541
        $codeTemplate = <<<'EOF'
542 1
[tabella]_container:
543
    path:  /
544
    controller: '[bundle]\Controller\[tabella]Controller::index'
545
546
[tabella]_lista:
547
    path:  /lista
548
    controller: '[bundle]\Controller\[tabella]Controller::lista'
549
    options:
550
        expose: true
551
552
[tabella]_indexdettaglio:
553
    path:  /indexDettaglio
554
    controller: '[bundle]\Controller\[tabella]Controller::indexDettaglio'
555
    options:
556
        expose: true
557
558
[tabella]_new:
559
    path:  /new
560
    controller: '[bundle]\Controller\[tabella]Controller::new'
561
    methods:    GET|POST
562
563
[tabella]_edit:
564
    path:  /{id}/edit
565
    controller: '[bundle]\Controller\[tabella]Controller::edit'
566
567
[tabella]_update:
568
    path:  /{id}/update
569
    controller: '[bundle]\Controller\[tabella]Controller::update'
570
    methods:    POST|PUT
571
572
[tabella]_aggiorna:
573
    path:  /{id}/{token}/aggiorna
574
    controller: '[bundle]\Controller\[tabella]Controller::aggiorna'
575
    methods:    POST|PUT
576
    options:
577
        expose: true
578
579
[tabella]_delete:
580
    path:  /{id}/{token}/delete
581
    controller: '[bundle]\Controller\[tabella]Controller::delete'
582
    methods:    POST|DELETE
583
584
[tabella]_deletemultiple:
585
    path:  /{token}/delete
586
    controller: '[bundle]\Controller\[tabella]Controller::delete'
587
    methods:    POST|DELETE
588
589
[tabella]_tabella:
590
    path:  /tabella
591
    controller: '[bundle]\Controller\[tabella]Controller::tabella'
592
    methods:    POST
593
EOF;
594 1
        $codebundle = str_replace('[bundle]', $bundlename, $codeTemplate);
595 1
        $code = str_replace('[tabella]', $tabella, $codebundle);
596
597 1
        return $code;
598
    }
599
}
600