first commit
This commit is contained in:
commit
301862589b
9
ArdentParameterBundle.php
Normal file
9
ArdentParameterBundle.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Ardent\ParameterBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
|
class ArdentParameterBundle extends Bundle
|
||||||
|
{
|
||||||
|
}
|
73
Controller/BaseController.php
Normal file
73
Controller/BaseController.php
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Ardent\ParameterBundle\Controller;
|
||||||
|
|
||||||
|
use App\Ardent\ParameterBundle\Service\ParameterService;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
abstract class BaseController extends AbstractController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param ParameterService $param
|
||||||
|
* @param Request $request
|
||||||
|
* @param [] $configuration
|
||||||
|
*/
|
||||||
|
public function baseIndex(ParameterService $param, Request $request, $configuration)
|
||||||
|
{
|
||||||
|
// gather the values
|
||||||
|
$data = [];
|
||||||
|
foreach ($configuration as $config) {
|
||||||
|
$name = $config['name'];
|
||||||
|
$data[$name] = $param->get($name, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// build the form
|
||||||
|
$formBuilder = $this->createFormBuilder($data);
|
||||||
|
foreach ($configuration as $config) {
|
||||||
|
$this->configParser($config, $formBuilder);
|
||||||
|
}
|
||||||
|
$form = $formBuilder->add('Update', SubmitType::class)->getForm();
|
||||||
|
|
||||||
|
$form->handleRequest($request);
|
||||||
|
|
||||||
|
if ($form->isSubmitted() && $form->isValid()) {
|
||||||
|
$result = $form->getData();
|
||||||
|
|
||||||
|
foreach ($configuration as $config) {
|
||||||
|
$name = $config['name'];
|
||||||
|
if ($result[$name]) {
|
||||||
|
$param->set($name, $result[$name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->addFlash('success', 'Updating parameters successful');
|
||||||
|
|
||||||
|
return $this->redirect($request->getRequestUri());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('@ArdentParameter/form.html.twig', [
|
||||||
|
'parameter_form' => $form->createView(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $config
|
||||||
|
* @param FormBuilderInterface $formBuilder
|
||||||
|
*/
|
||||||
|
private function configParser($config, &$formBuilder)
|
||||||
|
{
|
||||||
|
$type = $config['type'];
|
||||||
|
$options = [];
|
||||||
|
switch ($type) {
|
||||||
|
case ChoiceType::class:
|
||||||
|
$options['choices'] = $config['choices'];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$formBuilder->add($config['name'], $type, $options);
|
||||||
|
}
|
||||||
|
}
|
20
DependencyInjection/ArdentParameterExtension.php
Normal file
20
DependencyInjection/ArdentParameterExtension.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Ardent\ParameterBundle\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Extension\Extension;
|
||||||
|
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||||
|
|
||||||
|
class ArdentParameterExtension extends Extension
|
||||||
|
{
|
||||||
|
public function load(array $configs, ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$loader = new YamlFileLoader(
|
||||||
|
$container,
|
||||||
|
new FileLocator(__DIR__.'/../Resources/config')
|
||||||
|
);
|
||||||
|
$loader->load('services.yaml');
|
||||||
|
}
|
||||||
|
}
|
75
Entity/Parameter.php
Normal file
75
Entity/Parameter.php
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Ardent\ParameterBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Entity
|
||||||
|
* @ORM\Table(name="parameter_bundle_parameters")
|
||||||
|
*/
|
||||||
|
class Parameter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @ORM\Id
|
||||||
|
* @ORM\GeneratedValue(strategy="AUTO")
|
||||||
|
* @ORM\Column(type="integer")
|
||||||
|
*/
|
||||||
|
private $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="string")
|
||||||
|
*/
|
||||||
|
private $name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="string")
|
||||||
|
*/
|
||||||
|
private $value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getId()
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $name
|
||||||
|
* @return Parameter
|
||||||
|
*/
|
||||||
|
public function setName($name)
|
||||||
|
{
|
||||||
|
$this->name = $name;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getValue()
|
||||||
|
{
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $value
|
||||||
|
* @return Parameter
|
||||||
|
*/
|
||||||
|
public function setValue($value)
|
||||||
|
{
|
||||||
|
$this->value = $value;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
3
Resources/config/services.yaml
Normal file
3
Resources/config/services.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
services:
|
||||||
|
App\Ardent\ParameterBundle\Service\ParameterService:
|
||||||
|
alias: 'ardent.parameter'
|
6
Resources/views/form.html.twig
Normal file
6
Resources/views/form.html.twig
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{% extends '@ArdentParameter/layout.html.twig' %}
|
||||||
|
|
||||||
|
{% block par_user_content %}
|
||||||
|
{{ form(parameter_form) }}
|
||||||
|
<a class="btn btn-light" href="{{ path('all_parameters') }}">Back</a>
|
||||||
|
{% endblock %}
|
2
Resources/views/layout.html.twig
Normal file
2
Resources/views/layout.html.twig
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{% block par_user_content %}
|
||||||
|
{% endblock %}
|
78
Service/ParameterService.php
Normal file
78
Service/ParameterService.php
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Ardent\ParameterBundle\Service;
|
||||||
|
|
||||||
|
use App\Ardent\ParameterBundle\Entity\Parameter;
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
|
|
||||||
|
class ParameterService
|
||||||
|
{
|
||||||
|
/** @var EntityManagerInterface */
|
||||||
|
private $em;
|
||||||
|
|
||||||
|
/** @var ParameterBagInterface */
|
||||||
|
private $parameter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ParameterService constructor.
|
||||||
|
*
|
||||||
|
* @param EntityManagerInterface $em
|
||||||
|
*/
|
||||||
|
public function __construct(EntityManagerInterface $em, ParameterBagInterface $parameter)
|
||||||
|
{
|
||||||
|
$this->em = $em;
|
||||||
|
$this->parameter = $parameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param bool $parse
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function get($name, $parse = true)
|
||||||
|
{
|
||||||
|
$paramRepo = $this->em->getRepository(Parameter::class);
|
||||||
|
$parameter = $paramRepo->findOneBy(['name' => $name]);
|
||||||
|
if ($parameter) {
|
||||||
|
if ($parse) {
|
||||||
|
// find and replace all %parameter% with their value
|
||||||
|
$value = preg_replace_callback('/%([^%\s]+)%/', function ($match) {
|
||||||
|
$key = $match[1];
|
||||||
|
// first try locally
|
||||||
|
if ($value = $this->get($key)) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
// then try with parameter bag
|
||||||
|
return $this->parameter->get($key);
|
||||||
|
},
|
||||||
|
$parameter->getValue()
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$value = $parameter->getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $name
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function set($name, $value)
|
||||||
|
{
|
||||||
|
$paramRepo = $this->em->getRepository(Parameter::class);
|
||||||
|
/* @var Parameter $parameter */
|
||||||
|
$parameter = $paramRepo->findOneBy(['name' => $name]);
|
||||||
|
if (!$parameter) {
|
||||||
|
$parameter = (new Parameter())->setName($name);
|
||||||
|
}
|
||||||
|
$parameter->setValue($value);
|
||||||
|
$this->em->persist($parameter);
|
||||||
|
$this->em->flush();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user