mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-28 04:30:08 +02:00
Use proper option injection for StructuralEntityType generate* functions.
Otherwise we get problems, if a page has multiple types with different options. This fixes issue #39
This commit is contained in:
parent
d5ff73b263
commit
b53e1f0a66
2 changed files with 38 additions and 36 deletions
|
@ -84,7 +84,7 @@ class CurrencyEntityType extends StructuralEntityType
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function generateChoiceLabels(AbstractStructuralDBElement $choice, $key, $value): string
|
public function generateChoiceLabels(AbstractStructuralDBElement $choice, $key, $value, $options): string
|
||||||
{
|
{
|
||||||
//Similar to StructuralEntityType, but we use the currency symbol instead if available
|
//Similar to StructuralEntityType, but we use the currency symbol instead if available
|
||||||
|
|
||||||
|
@ -93,12 +93,12 @@ class CurrencyEntityType extends StructuralEntityType
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var AbstractStructuralDBElement|null $parent */
|
/** @var AbstractStructuralDBElement|null $parent */
|
||||||
$parent = $this->options['subentities_of'];
|
$parent = $options['subentities_of'];
|
||||||
|
|
||||||
/*** @var Currency $choice */
|
/*** @var Currency $choice */
|
||||||
$level = $choice->getLevel();
|
$level = $choice->getLevel();
|
||||||
//If our base entity is not the root level, we need to change the level, to get zero position
|
//If our base entity is not the root level, we need to change the level, to get zero position
|
||||||
if (null !== $this->options['subentities_of']) {
|
if (null !== $options['subentities_of']) {
|
||||||
$level -= $parent->getLevel() - 1;
|
$level -= $parent->getLevel() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ class CurrencyEntityType extends StructuralEntityType
|
||||||
return $tmp;
|
return $tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generateChoiceAttr(AbstractStructuralDBElement $choice, $key, $value): array
|
protected function generateChoiceAttr(AbstractStructuralDBElement $choice, $key, $value, $options): array
|
||||||
{
|
{
|
||||||
/** @var Currency $choice */
|
/** @var Currency $choice */
|
||||||
$tmp = [];
|
$tmp = [];
|
||||||
|
@ -123,7 +123,7 @@ class CurrencyEntityType extends StructuralEntityType
|
||||||
}
|
}
|
||||||
|
|
||||||
//Disable attribute if the choice is marked as not selectable
|
//Disable attribute if the choice is marked as not selectable
|
||||||
if ($this->options['disable_not_selectable'] && $choice->isNotSelectable()) {
|
if ($options['disable_not_selectable'] && $choice->isNotSelectable()) {
|
||||||
$tmp += ['disabled' => 'disabled'];
|
$tmp += ['disabled' => 'disabled'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ use Symfony\Component\Validator\Constraints\Choice;
|
||||||
class StructuralEntityType extends AbstractType
|
class StructuralEntityType extends AbstractType
|
||||||
{
|
{
|
||||||
protected $em;
|
protected $em;
|
||||||
protected $options;
|
|
||||||
/**
|
/**
|
||||||
* @var NodesListBuilder
|
* @var NodesListBuilder
|
||||||
*/
|
*/
|
||||||
|
@ -82,34 +82,38 @@ class StructuralEntityType extends AbstractType
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||||
{
|
{
|
||||||
$builder->addModelTransformer(new CallbackTransformer(
|
$builder->addModelTransformer(new CallbackTransformer(
|
||||||
function ($value) use ($options) {
|
function ($value) use ($options) {
|
||||||
return $this->transform($value, $options);
|
return $this->transform($value, $options);
|
||||||
}, function ($value) use ($options) {
|
}, function ($value) use ($options) {
|
||||||
return $this->reverseTransform($value, $options);
|
return $this->reverseTransform($value, $options);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver): void
|
public function configureOptions(OptionsResolver $resolver): void
|
||||||
{
|
{
|
||||||
$resolver->setRequired(['class']);
|
$resolver->setRequired(['class']);
|
||||||
$resolver->setDefaults([
|
$resolver->setDefaults([
|
||||||
'show_fullpath_in_subtext' => true, //When this is enabled, the full path will be shown in subtext
|
'show_fullpath_in_subtext' => true, //When this is enabled, the full path will be shown in subtext
|
||||||
'subentities_of' => null, //Only show entities with the given parent class
|
'subentities_of' => null, //Only show entities with the given parent class
|
||||||
'disable_not_selectable' => false, //Disable entries with not selectable property
|
'disable_not_selectable' => false, //Disable entries with not selectable property
|
||||||
'choice_value' => 'id', //Use the element id as option value and for comparing items
|
'choice_value' => 'id', //Use the element id as option value and for comparing items
|
||||||
'choice_loader' => function (Options $options) {
|
'choice_loader' => function (Options $options) {
|
||||||
return new CallbackChoiceLoader(function () use ($options) {
|
return new CallbackChoiceLoader(function () use ($options) {
|
||||||
return $this->getEntries($options);
|
return $this->getEntries($options);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
'choice_label' => function ($choice, $key, $value) {
|
'choice_label' => function (Options $options) {
|
||||||
return $this->generateChoiceLabels($choice, $key, $value);
|
return function ($choice, $key, $value) use ($options) {
|
||||||
},
|
return $this->generateChoiceLabels($choice, $key, $value, $options);
|
||||||
'choice_attr' => function ($choice, $key, $value) {
|
};
|
||||||
return $this->generateChoiceAttr($choice, $key, $value);
|
},
|
||||||
},
|
'choice_attr' => function (Options $options) {
|
||||||
'choice_translation_domain' => false, //Don't translate the entity names
|
return function ($choice, $key, $value) use ($options) {
|
||||||
]);
|
return $this->generateChoiceAttr($choice, $key, $value, $options);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
'choice_translation_domain' => false, //Don't translate the entity names
|
||||||
|
]);
|
||||||
|
|
||||||
$resolver->setDefault('empty_message', null);
|
$resolver->setDefault('empty_message', null);
|
||||||
|
|
||||||
|
@ -133,8 +137,6 @@ class StructuralEntityType extends AbstractType
|
||||||
*/
|
*/
|
||||||
public function getEntries(Options $options): array
|
public function getEntries(Options $options): array
|
||||||
{
|
{
|
||||||
$this->options = $options;
|
|
||||||
|
|
||||||
return $this->builder->typeToNodesList($options['class'], null);
|
return $this->builder->typeToNodesList($options['class'], null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,16 +242,16 @@ class StructuralEntityType extends AbstractType
|
||||||
return $this->em->find($options['class'], $value->getID());
|
return $this->em->find($options['class'], $value->getID());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generateChoiceAttr(AbstractStructuralDBElement $choice, $key, $value): array
|
protected function generateChoiceAttr(AbstractStructuralDBElement $choice, $key, $value, $options): array
|
||||||
{
|
{
|
||||||
$tmp = [];
|
$tmp = [];
|
||||||
|
|
||||||
if ($this->options['show_fullpath_in_subtext'] && null !== $choice->getParent()) {
|
if ($options['show_fullpath_in_subtext'] && null !== $choice->getParent()) {
|
||||||
$tmp += ['data-subtext' => $choice->getParent()->getFullPath()];
|
$tmp += ['data-subtext' => $choice->getParent()->getFullPath()];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Disable attribute if the choice is marked as not selectable
|
//Disable attribute if the choice is marked as not selectable
|
||||||
if ($this->options['disable_not_selectable'] && $choice->isNotSelectable()) {
|
if ($options['disable_not_selectable'] && $choice->isNotSelectable()) {
|
||||||
$tmp += ['disabled' => 'disabled'];
|
$tmp += ['disabled' => 'disabled'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,15 +262,15 @@ class StructuralEntityType extends AbstractType
|
||||||
return $tmp;
|
return $tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generateChoiceLabels(AbstractStructuralDBElement $choice, $key, $value): string
|
protected function generateChoiceLabels(AbstractStructuralDBElement $choice, $key, $value, $options): string
|
||||||
{
|
{
|
||||||
/** @var AbstractStructuralDBElement|null $parent */
|
/** @var AbstractStructuralDBElement|null $parent */
|
||||||
$parent = $this->options['subentities_of'];
|
$parent = $options['subentities_of'];
|
||||||
|
|
||||||
/*** @var AbstractStructuralDBElement $choice */
|
/*** @var AbstractStructuralDBElement $choice */
|
||||||
$level = $choice->getLevel();
|
$level = $choice->getLevel();
|
||||||
//If our base entity is not the root level, we need to change the level, to get zero position
|
//If our base entity is not the root level, we need to change the level, to get zero position
|
||||||
if (null !== $this->options['subentities_of']) {
|
if (null !== $options['subentities_of']) {
|
||||||
$level -= $parent->getLevel() - 1;
|
$level -= $parent->getLevel() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue