namespace Lc\ShopBundle\Controller\Admin; | namespace Lc\ShopBundle\Controller\Admin; | ||||
use App\Entity\MerchantConfig; | |||||
use Lc\ShopBundle\Context\MerchantInterface; | use Lc\ShopBundle\Context\MerchantInterface; | ||||
use Symfony\Component\HttpFoundation\RedirectResponse; | use Symfony\Component\HttpFoundation\RedirectResponse; | ||||
use Symfony\Component\HttpFoundation\Request; | use Symfony\Component\HttpFoundation\Request; | ||||
class MerchantController extends AdminController | class MerchantController extends AdminController | ||||
{ | { | ||||
public function persistEntity($entity) | |||||
{ | |||||
$this->createAvailableOptions($entity) ; | |||||
parent::persistEntity($entity); | |||||
} | |||||
public function updateEntity($entity) | |||||
{ | |||||
$this->createAvailableOptions($entity) ; | |||||
parent::updateEntity($entity); | |||||
} | |||||
public function createAvailableOptions($entity) | |||||
{ | |||||
$merchantConfigs = $entity->getMerchantConfigs() ; | |||||
$availableOptions = MerchantConfig::getAvailableOptions() ; | |||||
foreach($availableOptions as $key => $option) { | |||||
$optionExist = false ; | |||||
foreach($merchantConfigs as $merchantConfig) { | |||||
if($merchantConfig->getName() == $key) { | |||||
$optionExist = true ; | |||||
} | |||||
} | |||||
if(!$optionExist) { | |||||
$merchantConfig = new MerchantConfig(); | |||||
$merchantConfig->setName($key)->setValue($merchantConfig->getOptionValue('default'))->setMerchant($entity) ; | |||||
$this->em->persist($merchantConfig); | |||||
} | |||||
} | |||||
$this->em->flush() ; | |||||
} | |||||
public function editAction() | public function editAction() | ||||
{ | { | ||||
// paramètres (admin) | // paramètres (admin) |
$merchantConfig = $event->getData(); | $merchantConfig = $event->getData(); | ||||
if ($merchantConfig) { | if ($merchantConfig) { | ||||
$form->add('name', HiddenType::class) ; | |||||
switch ($merchantConfig->getName()) { | |||||
case 'order-open-day' : | |||||
$label = 'Jour d\'ouverture des commandes'; | |||||
break; | |||||
case 'order-open-time' : | |||||
$label = 'Heure d\'ouverture des commandes'; | |||||
break; | |||||
case 'order-close-day' : | |||||
$label = 'Jour de fermeture des commandes'; | |||||
break; | |||||
case 'order-close-time' : | |||||
$label = 'Heure de fermeture des commandes'; | |||||
break; | |||||
if($merchantConfig->getFieldType() == 'choice') { | |||||
$form->add('value', ChoiceType::class, [ | |||||
'label' => $merchantConfig->getLabel(), | |||||
'choices' => $merchantConfig->getChoices() | |||||
]); | |||||
} | } | ||||
$choicesArray = [] ; | |||||
if (strpos($merchantConfig->getName(), 'time') !== false) { | |||||
for($i = 0; $i < 24 ; $i++) { | |||||
$choicesArray[$i.'h'] = $i.':00' ; | |||||
else { | |||||
if($merchantConfig->getOption()) { | |||||
$form->add('value', TextType::class, [ | |||||
'label' => $merchantConfig->getLabel(), | |||||
]); | |||||
} | } | ||||
} | } | ||||
if (strpos($merchantConfig->getName(), 'day') !== false) { | |||||
$choicesArray = [ | |||||
'Lundi' => 1, | |||||
'Mardi' => 2, | |||||
'Mercredi' => 3, | |||||
'Jeudi' => 4, | |||||
'Vendredi' => 5, | |||||
'Samedi' => 6, | |||||
'Dimanche' => 7, | |||||
] ; | |||||
} | |||||
$form->add('name', HiddenType::class) | |||||
->add('value', ChoiceType::class, [ | |||||
'label' => $label, | |||||
'choices' => $choicesArray | |||||
]); | |||||
} | } | ||||
}); | }); | ||||
protected $name; | protected $name; | ||||
/** | /** | ||||
* @ORM\Column(type="text") | |||||
* @ORM\Column(type="text", nullable=true) | |||||
*/ | */ | ||||
protected $value; | protected $value; | ||||
public static $availableOptions = [] ; | |||||
public function getMerchant(): ?Merchant | public function getMerchant(): ?Merchant | ||||
{ | { | ||||
return $this; | return $this; | ||||
} | } | ||||
public static function getAvailableOptions(): array | |||||
{ | |||||
return static::$availableOptions ; | |||||
} | |||||
public function getOption() | |||||
{ | |||||
if(isset(static::$availableOptions[$this->getName()])) { | |||||
return static::$availableOptions[$this->getName()] ; | |||||
} | |||||
return false ; | |||||
} | |||||
public function getOptionValue($key, $default = '') | |||||
{ | |||||
$option = $this->getOption() ; | |||||
if($option) { | |||||
if(isset($option[$key])) { | |||||
return $option[$key] ; | |||||
} | |||||
} | |||||
return $default ; | |||||
} | |||||
public function getLabel() | |||||
{ | |||||
return $this->getOptionValue('label') ; | |||||
} | |||||
public function getFieldType() | |||||
{ | |||||
return $this->getOptionValue('type', 'text') ; | |||||
} | |||||
public function getDefaultValue() | |||||
{ | |||||
return $this->getOptionValue('default') ; | |||||
} | |||||
} | } |