/** * Render for class * * @param Maker $maker * @param $body * @return string */ public function maker_class(Maker $maker, $body) { $content = ''; $reflection = $maker->getClass(); // NAMESPACE if ($maker->hasNamespace()) { $content .= 'namespace ' . $maker->getNamespace() . ';' . PHP_EOL; } $content .= str_repeat(PHP_EOL, 2); // ALIASES if ($maker->hasAliases()) { foreach ($aliases = $maker->getAliases() as $alias => $class) { $content .= 'use ' . $class; if (collect(explode('\\', $class))->last() != $alias) { $content .= ' as ' . $alias; } $content .= ';' . PHP_EOL; } $content .= str_repeat(PHP_EOL, 2); } // DOCBLOCK $content .= $this->render('docblock', $maker); // declaration $content .= 'class ' . $reflection->getShortName(); // PARENT if ($parent = $maker->getParent()) { $content .= ' extends ' . $maker->findAliasName($parent); } // @todo Gestion des interfaces // $interface = $reflection->getImmediateInterfaces(); $content .= PHP_EOL; $content .= '{' . PHP_EOL . "\t" . str_replace(PHP_EOL, PHP_EOL . "\t", trim($body)) . PHP_EOL . '}'; return $content; }
/** * Execute the console command. * * @return mixed */ public function handle(Filesystem $filesystem, Composer $composer) { // validation declaration $validator = \Validator::make(['permission' => $permission = $this->argument('permission')], ['permission' => 'required|not_exists:user_permission,user_permission_id']); // check if argument are valid if ($validator->fails()) { $this->error($validator->getMessageBag()->toJson()); return; } $this->info('Nous allons créer ensemble une migration'); $rulerClass = $this->ask('Quelle est la classe de gestion des Acl?', configurator()->get('ruler.class')); $ruler = Maker::load($rulerClass); // NOM $nice_permission = str_replace('.', '_', $permission); $constant = $this->ask('Nom de la constante?', 'PERMISSION_' . strtoupper($nice_permission)); $constant = strtoupper($constant); // ANALYSE DES CONSTANTES $groups = $interfaces = []; $interfaces['INTERFACE_DEFAULT'] = $rulerClass::INTERFACE_DEFAULT; foreach ($ruler->getConstants() as $name => $value) { if (preg_match('#^PERMISSION_GROUP_.+#', $name)) { $groups[$name] = $value; } else { if (preg_match('#^INTERFACE_.+#', $name) && $name != 'INTERFACE_DEFAULT') { $interfaces[$name] = $value; } elseif ($value == $permission) { // si on remarque que la permission existe deja exc('La permission "' . $permission . '" existe déjà avec le nom : ' . $name); } elseif ($name == $constant) { // si on remarque que la permission existe deja exc('Le nom "' . $permission . '" existe déjà avec la permission : ' . $value); } } } $interface = $this->choice('A quelle interface voulez vous rattacher cette permission?', array_values($interfaces), 0); $interface = array_search($interface, $interfaces); // GROUP $group = $this->choice('A quel groupe voulez vous rattacher cette permission?', array_values($groups)); $group = array_search($group, $groups); // création de la constante $ruler->addConstant($constant, $permission); $ruler->write(); $label = strrpos($permission, '.'); $label = $label ? substr($permission, $label + 1) : $permission; $label = $this->ask('Quelle est le libellé de cette Permission?', ucfirst($label)); // Creation de la migration $this->info('Creation de la migration'); $filename = 'create_permission_' . $nice_permission . '_' . \uuid('hex'); $filepath = storage_path('tmp/') . $filename; $filesystem->delete($filepath); // CLASS $maker = Maker::init(camel_case($filename), $filepath); $maker->addAlias('Acl', $ruler->getClass()->getName()); $maker->addAlias('Migration', Migration::class); $maker->setParent(Migration::class); $maker->setSummary('Migration pour l\'ajout de la permission "' . $permission . '" en base de donnée'); // METHOD $method = $maker->addMethod('up'); $body = sprintf('Acl::createDatabasePermission(Acl::%s, Acl::%s, Acl::%s, \'%s\');', $constant, $group, $interface, $label); $method->setBody($body); // FICHIER DE MIGRATION $path = $this->laravel->databasePath() . '/migrations'; $fullPath = $this->laravel['migration.creator']->create($filename, $path); $filesystem->put($fullPath, '<?php ' . $maker->render()); $filesystem->delete($filepath); $this->info('Migration created successfully!'); $composer->dumpAutoloads(); $this->info('Have fun!!'); }