Commit 904add89 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Merge branch 'master' of https://git.unicaen.fr/open-source/OSE

parents bf114ce9 8ce5354b
Loading
Loading
Loading
Loading
+440 −0
Original line number Diff line number Diff line
<?php
// Assume that all external field ended by _ID
use UnicaenCode\Form\ElementMaker;
use UnicaenCode\Util;

/**
 * @var $this       \Zend\View\Renderer\PhpRenderer
 * @var $controller \Zend\Mvc\Controller\AbstractController
 * @var $viewName   string
 */

?>
    <h1>Création d'une rubrique dans un menu</h1>
    <h3>Etape 1 : Paramétrage</h3>

<?php

$form   = new \Zend\Form\Form();
$em     = $controller->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$conn   = $em->getConnection();
$sm     = $conn->getSchemaManager();
$tables = $sm->listTableNames();
sort($tables);
$val = [];
$form->add([
    'type'    => 'Zend\Form\Element\Select',
    'name'    => 'tables',
    'options' => [
        'label' => 'Tables',
    ],
]);

foreach ($tables as $tbl) {
    $val[$tbl] = $tbl;
}
$form->get('tables')->setValueOptions($val);

$form->add([
    'type'    => 'Zend\Form\Element\Select',
    'name'    => 'menus',
    'options' => [
        'label'         => 'Menu',
        'value_options' => [
            'Administration' => 'Administration',
            'Gestion'        => 'Gestion',
        ],
    ],
]);

$form->add([
        'type' => 'Zend\Form\Element\Text',
        'name' => 'Origine',
        'options' => [
                'label' => 'Rep Web',
        ]
]);
$form->get('Origine')->setValue('/var/www/OSE/');

$form->add(ElementMaker::checkbox(
    'classe-privilege', 'Privilège existant ?', true
));

$form->add(ElementMaker::checkbox(
    'non-remplacement', 'Ne pas générer fichier déjà existant ?', true
));

$form->add(ElementMaker::submit('generate', 'Générer le code'));

$form->setData($controller->getRequest()->getPost());

Util::displayForm($form);

if (($controller->getRequest()->isPost()) && ($form->isValid())) {
    $baseOrig = $form->get('Origine')->getValue() . 'module/Application/';
    $nom      = $form->get('tables')->getValue();
    $basefs   = '/var/www/Web/module/Application/';
    $nomsous  = strtoupper($nom);
    $nomvisu  = $nomsous . "_VISUALISATION";
    $nomedit  = $nomsous . "_EDITION";
    if (!$form->get('classe-privilege')->getValue()) {
        $nomvisu = 'DROIT_PRIVILEGE_EDITION';
        $nomedit = 'DROIT_PRIVILEGE_VISUALISATION';
    }
    $nonRemplace = $form->get('non-remplacement')->getValue();
    $nomtiret    = $nomm = strtolower($nom);
    $nomtiret    = str_replace('_', '-', $nomtiret);
    $nomm        = preg_replace_callback('/_\w/', function ($m) {
        return strtoupper($m[0]);
    },
        $nomm);
    $nommaj      = preg_replace_callback('/^\w/', function ($m) {
        return strtoupper($m[0]);
    }, $nomm);
    $nomphrase   = str_replace('_', ' ', $nommaj);
    $nomm        = str_replace('_', '', $nomm);
    $nommaj      = str_replace('_', '', $nommaj);

    /**
     * $col Doctrine\DBAL\Schema\Column
     */
    $nomChamps     = [];
    $typeChamps    = [];
    $lgChamps      = [];
    $listeChamps   = [];
    $notnullChamps = [];
    $defaultChamps = [];
    $result        = []; // résultat d'exec

    $nbe = 0;
    if (empty($nom)) die('');

    $columns = $sm->listTableColumns($nom);
    foreach ($columns as $col) {
        $nchp                = $col->getName();
        $notnullChamps[$nbe] = $col->getNotnull();
        $defaultChamps[$nbe] = $col->getDefault();
        if (!preg_match('/^HISTO_/', $nchp)) {
            $nomChamps[$nbe] = $nchp;
            if (preg_match('/_ID$/', $nchp)) {
                $listeChamps[$nbe] = $nomChamps[$nbe] = preg_replace('/_ID$/', '', $nchp);
                if (preg_match('/^ANNEE_/', $nchp)) $listeChamps[$nbe] = 'ANNEE';
            } else $listeChamps[$nbe] = '';
            $typeChamps[$nbe] = $col->getType()->getName();
            $lgChamps[$nbe]   = $col->getLength();
            if (($typeChamps[$nbe] == 'integer') || ($typeChamps[$nbe] == 'float')) {
                $lgChamps[$nbe] = $col->getPrecision();
                if ($lgChamps[$nbe] == 1) $typeChamps[$nbe] = 'boolean';
            }
            $nbe++;
        }
    }

    if (file_exists('/var/www/Web')) {
        exec("rm -rf /var/www/Web/*", $stdout, $err);
    } else {
    	mkdir('/var/www/Web',0770) or die('Vous devez créer un sous répertoire /var/www/Web avec les droits d\'écriture! pour l\'utilisateur www-data<BR>');
    	}
//    $res = shell_exec("Web/module/Application");
//echo "res:$res<BR>";

// mise en place des champs
    $txt0 = $txt01 = $txt4 = $txt41 = $txt42 = $txt43 = $txt44 = $txt45 = $txt5 = $txt53 = $txt6 = $txt7 = '';

// chargement des pseudos fichiers
    $tblInclude=array(
            'champInput','champListe','config_php','controller_php','idx1','idx3','idx20','saisie_phtml',
            'saisieFormAwareTrait_php','service_php','serviceTrait_php'
                      );

        $i=0;
    foreach ($tblInclude as $ci){
        ${$ci}=file_get_contents(__DIR__.'/template/GenerateRubrique/'.$ci);
    }

    $extractInput = '\'champtiret\'       => $object->getchampmaj()
    ,';

    $extractListe = '\'champtiret\'       => ($s = $object->getchampmaj()) ? $s->getId() : null,
    ';

    $hydrateInput = '$object->setchampmaj($data[\'champtiret\']);
    ';

    $hydrateListe = 'if (array_key_exists(\'champtiret\', $data)) {
            $object->setchampmaj($this->getServicechampmaj()->get($data[\'champtiret\']));
        }
    ';

    $idx21     = "                    <th style=\"word-wrap: break-word ; \">champphrase</th>\n";
    $idx2      = '                     <td style="word-wrap: break-word ; "><?= $fr->getchampmaj() ?></td>' . "\n";
    $service10 = "    use Application\Service\Traits\champmajServiceAwareTrait;\n";
    $service11 = "        use champmajServiceAwareTrait;\n";


    $fic10 = '/**
 * Description of nommajSaisieForm
 *
 * @author ZVENIGOROSKY Alexandre <alexandre.zvenigorosky@unicaen.fr>
 */
class nommajSaisieForm extends AbstractForm
{
    ';

    $fic11 = '
    

 
    public function init()
    {
        $hydrator = new nommajHydrator();
        $this->setHydrator($hydrator);

        $this->setAttribute(\'action\', $this->getCurrentUrl());
    ';

    $fic1 = '<?php

namespace Application\Form\nommaj;

use Application\Form\AbstractForm;
use Zend\Form\Element\Csrf;
use Zend\Stdlib\Hydrator\HydratorInterface;
    ';

    $fic2                = '
            $this->add(new Csrf(\'security\'));
        $this->add([
            \'name\'       => \'submit\',
            \'type\'       => \'Submit\',
            \'attributes\' => [
                \'value\' => "Enregistrer",
                \'class\' => \'btn btn-primary\',
            ],
        ]);
 
	return $this;
    }


    /**
     * Should return an array specification compatible with
     * {@link Zend\InputFilter\Factory::createInputFilter()}.
     *
     * @return array
     */
    public function getInputFilterSpecification()
    {
        return [';
    $fic21               = '
        ];
    }

}





class nommajHydrator implements HydratorInterface
{
';
    $listeEnteteHydrator = 'use champmajServiceAwareTrait;
';

    $fic22 = '
    /**
     * Hydrate $object with the provided $data.
     *
     * @param  array $data
     * @param  \Application\Entity\Db\nommaj $object
     *
     * @return object
     */
    public function hydrate(array $data, $object)
    {
    ';

    $inputFilter = '
        \'champtiret\'                => [
                \'required\' => true,
        ],
';

    $fic3 = '
            return $object;
    }
            

            
    /**         
     * Extract values from an object
     *      
     * @param  \Application\Entity\Db\nommaj $object
     *
     * @return array
     */
    public function extract($object)
    {
        $data = [
    ';

    $fic4 = '
            ];

        return $data;
    }
}   
    ';

    for ($i = 0; $i < $nbe; $i++) {
        $champ       = $nomChamps[$i];
        $champsous   = strtoupper($champ);
        $champtiret  = $champm = strtolower($champ);
        $champtiret  = str_replace('_', '-', $champtiret);
        $champm      = preg_replace_callback('/_\w/', function ($m) {
            return strtoupper($m[0]);
        },
            $champm);
        $champmaj    = preg_replace_callback('/^\w/', function ($m) {
            return strtoupper($m[0]);
        }, $champm);
        $champphrase = str_replace('_', ' ', $champmaj);
        $champm      = str_replace('_', '', $champm);
        $champmaj    = str_replace('_', '', $champmaj);

        # input:champInput.txt listeInput.txt ...
        if (($i) && ($notnullChamps[$i])) {
            $txt  = str_replace('champtiret', $champtiret, $inputFilter);
            $txt6 .= $txt;
        }
	if ($champtiret != 'id'){
        	$txt52 = str_replace('champphrase', $champphrase, $idx21);
        	$txt53 .= $txt52;
	}
        if (!$listeChamps[$i]) {
            $champType = 'Text';
            if ($typeChamps[$i] == 'String') $champType = 'Text';
            if ($typeChamps[$i] == 'boolean') $champType = 'Checkbox';
	    if ($champtiret != 'id'){
            	$txt51 = str_replace('champmaj', $champmaj, $idx2);
            	$txt5  .= $txt51;
	    }
            if ($champtiret != 'id') {
                $txt  = str_replace(['champtiret', 'champphrase', $champType], [$champtiret, $champphrase, $champType], $champInput);
                $txt4 .= $txt;
            }
            if ($champtiret != 'id') {
                $txt   = str_replace('champtiret', $champtiret, $hydrateInput);
                $txt   = str_replace('champmaj', $champmaj, $txt);
                $txt41 .= $txt;
            }
            $txt   = str_replace('champtiret', $champtiret, $extractInput);
            $txt   = str_replace('champmaj', $champmaj, $txt);
            $txt42 .= $txt;
        } else {
            $txt51 = str_replace('champmaj', $champmaj, $idx2);
            $txt52 = str_replace('champphrase', $champphrase, $idx21);
            $txt5  .= $txt51;
            $txt52 .= $txt53;
            $txt   = str_replace('champmaj', $champmaj, $service10);
            $txt0  .= $txt;
            $txt   = str_replace('champmaj', $champmaj, $service11);
            $txt01 .= $txt;
            $txt   = str_replace(['champtiret', 'champphrase', 'champmaj'], [$champtiret, $champphrase, $champmaj], $champListe);
            if ($notnullChamps[$i]){
            	$txt=str_replace('            ->setEmptyOption("(Aucun)")','',$txt);
            }
            $txt43 .= $txt;
            $txt   = str_replace(['champtiret', 'champmaj'], [$champtiret, $champmaj], $hydrateListe);
            $txt44 .= $txt;
            $txt   = str_replace(['champtiret', 'champmaj'], [$champtiret, $champmaj], $extractListe);
            $txt45 .= $txt;
            $txt   = str_replace('champmaj', $champmaj, $listeEnteteHydrator);
            $txt7  .= $txt;
        }
    }

    $saisieForm_php = $fic1 . $txt0 . $fic10 . $txt01 . $fic11 . $txt4 . $txt43 . $fic2 . $txt6 . $fic21 . $txt7 . $fic22 . $txt41 . $txt44 . $fic3 . $txt42 . $txt45 . $fic4;
    $index_phtml    = $idx1 . $txt53 . $idx20 . $txt5 . $idx3;

    $reps = ['config/',
             'src/Application/Controller/',
             'src/Application/Form/',
             'src/Application/Form/',
             'view/application/',
             'view/application/',
             'src/Application/Service/',
             'src/Application/Service/Traits/'];

    $rep2regs = ['',
                 '',
                 $nommaj . '/',
                 $nommaj . '/Traits/',
                 $nomtiret . '/',
                 $nomtiret . '/',
                 '',
                 ''];

    $fichmotifs = [$config_php,
                   $controller_php,
                   $saisieForm_php,
                   $saisieFormAwareTrait_php,
                   $index_phtml,
                   $saisie_phtml,
                   $service_php,
                   $serviceTrait_php];

    $fichiers    = [$nomtiret . '.config.php',
                    $nommaj . 'Controller.php',
                    $nommaj . 'SaisieForm.php',
                    $nommaj . 'SaisieFormAwareTrait.php',
                    'index.phtml', 'saisie.phtml',
                    $nommaj . 'Service.php',
                    $nommaj . 'ServiceAwareTrait.php'];
    $motif       = ['nomsous', 'nommaj', 'nomm', 'nomtiret', 'droitedition', 'droitvisualisation', 'nomphrase'];
    $remplace    = [$nomsous, $nommaj, $nomm, $nomtiret, $nomedit, $nomvisu, $nomphrase];
    $maxfichiers = sizeof($fichiers);
    for ($i = 0; $i < $maxfichiers; $i++) {
        $rep     = $reps[$i];
        $fich    = $fichiers[$i];
        $fmotif  = $fichmotifs[$i];
        $rep2reg = $rep2regs[$i];
        $ficin   = $fichmotifs[$i];

        $ficout = $basefs . $rep . $rep2reg . $fich;
        $ficenr = $baseOrig . $rep . $rep2reg . $fich;
//    echo 'Ficout=' . $ficout.', ficenr:'.$ficenr.'<br>';
        $txt = str_replace($motif, $remplace, $ficin);
        if (!file_exists($basefs . $rep . $rep2reg)) {
            $chemin = $basefs . $rep . $rep2reg;
            $res    = exec("mkdir -p $chemin", $err);
//        echo "res:$res<BR>";
        }
        $hdl     = fopen($ficout, 'wb');
        $lgWrite = fwrite($hdl, $txt);
        fclose($hdl);
        if (file_exists($ficenr)) {
            if ($nonRemplace) {
                unset($result);
                exec("diff $ficenr $ficout", $result);
                echo "<BR><span style=\"color:#00bbdd; \">Différences avec $ficenr<BR><HR></span>";
                echo '<div style="position:relative; left:10%; font-family:Lucida Console; background-color:lightgrey; width:85% ">';
                $nblg = sizeof($result);
                for ($j = 0; $j < $nblg; $j++) {
                    echo '<span style="color:';
                    if (preg_match('/^\d/', $result[$j])) echo '#008bb9';
                    if (preg_match('/^>/', $result[$j])) echo '#000000';
                    if (preg_match('/^</', $result[$j])) echo '#00bb00';
                    if (preg_match('/^---/', $result[$j])) {
                        echo '; width:500px; "><hr width="85%" size="2"></span>';
                    } else echo "; \"><BR>$result[$j]</span>";
                }
                echo '</div>';
                unlink($ficout);
            } else echo '<div style="color:#ff0000; ">Attention --> Le fichier module/Application/' . $ficout . ' existe dans /var/www/OSE !</div>';
        }
    }

    echo "<BR><span style=\"color:#006600; \">Résultat dans l'arborescence $basefs</span>";
}
+1 −1
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ return [
    ],
    'form_elements'   => [
        'invokables' => [
            Form\nommaj\Saisie::class                 => Form\nommaj\Saisie::class,
            Form\nommaj\nommajSaisieForm::class                 => Form\nommaj\nommajSaisieForm::class,
        ],
    ],
];
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ return [
                        Privileges::TYPE_INTERVENTION_VISUALISATION,
                        Privileges::PIECE_JUSTIFICATIVE_GESTION_VISUALISATION,
                        Privileges::PLAFONDS_GESTION_VISUALISATION,
                        Privileges::CENTRES_COUTS_ADMINISTRATION_VISUALISATION,
                    ],
                    'assertion'  => Assertion\GestionAssertion::class,
                ],
+131 −0
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Provider\Privilege\Privileges;
use UnicaenAuth\Guard\PrivilegeController;

return [
    'router'          => [
        'routes' => [
            'centre-cout' => [
                'type'          => 'Literal',
                'options'       => [
                    'route'    => '/centre-cout',
                    'defaults' => [
                        'controller' => 'Application\Controller\CentreCout',
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes'  => [
                    'delete' => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'       => '/delete/:centre-cout',
                            'constraints' => [
                                'centre-cout' => '[0-9]*',
                            ],
                            'defaults'    => [
                                'action' => 'delete',
                            ],
                        ],
                    ],
                    'saisie' => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'       => '/saisie/[:centre-cout]',
                            'constraints' => [
                                'centre-cout' => '[0-9]*',
                            ],
                            'defaults'    => [
                                'action' => 'saisie',
                            ],
                        ],
                    ],
                    'delete-structure' => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'       => '/delete-structure/:centre-cout-structure',
                            'constraints' => [
                                'centre-cout-structure' => '[0-9]*',
                            ],
                            'defaults'    => [
                                'action' => 'delete-structure',
                            ],
                        ],
                    ],
                    'saisie-structure' => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'       => '/saisie-structure/:centre-cout/[:centre-cout-structure]',
                            'constraints' => [
                                'centre-cout' => '[0-9]*',
                                'saisie-sructure' => '[0-9]*',
                            ],
                            'defaults'    => [
                                'action' => 'saisie-structure',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
    'navigation'      => [
        'default' => [
            'home' => [
                'pages' => [
                    'administration' => [
                        'pages' => [
                            'centre-cout' => [
                                'label'        => 'Centres de Coûts',
                                'icon'         => 'fa fa-graduation-cap',
                                'route'        => 'centre-cout',
                                'resource'     => PrivilegeController::getResourceId('Application\Controller\CentreCout', 'index'),
                                'order'        => 80,
                                'border-color' => '#BBCF55',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
    'bjyauthorize'    => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => 'Application\Controller\CentreCout',
                    'action'     => ['index'],
                    'privileges' => Privileges::CENTRES_COUTS_ADMINISTRATION_VISUALISATION,
                ],
                [
                    'controller' => 'Application\Controller\CentreCout',
                    'action'     => ['saisie', 'delete','saisie-structure','delete-structure'],
                    'privileges' => Privileges::CENTRES_COUTS_ADMINISTRATION_EDITION,
                ],
            ],
        ],
    ],
    'controllers'     => [
        'invokables' => [
            'Application\Controller\CentreCout' => Controller\CentreCoutController::class,
        ],
    ],
    'service_manager' => [
        'invokables' => [
            Service\CentreCoutService::class          => Service\CentreCoutService::class,
            Service\CentreCoutStructureService::class => Service\CentreCoutStructureService::class,
            Service\CcActiviteService::class          => Service\CcActiviteService::class,
        ],
    ],
    'view_helpers'    => [
    ],
    'form_elements'   => [
        'invokables' => [
            Form\CentreCout\CentreCoutSaisieForm::class => Form\CentreCout\CentreCoutSaisieForm::class,
            Form\CentreCout\CentreCoutStructureSaisieForm::class => Form\CentreCout\CentreCoutStructureSaisieForm::class,
        ],
    ],
];
+122 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading