first commit
This commit is contained in:
		
							
								
								
									
										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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user