Spaces:
No application file
No application file
| namespace Mautic\FormBundle\ProgressiveProfiling; | |
| use Mautic\FormBundle\Entity\Field; | |
| use Mautic\FormBundle\Entity\Form; | |
| class DisplayManager | |
| { | |
| private DisplayCounter $displayCounter; | |
| public function __construct( | |
| private Form $form, | |
| private array $viewOnlyFields = [] | |
| ) { | |
| $this->displayCounter = new DisplayCounter($form); | |
| } | |
| /** | |
| * @return bool | |
| */ | |
| public function showForField(Field $field) | |
| { | |
| if (in_array($field->getType(), $this->viewOnlyFields)) { | |
| return true; | |
| } | |
| // Always Display field priority until hit limit | |
| if ($field->isAlwaysDisplay()) { | |
| if ($this->form->getProgressiveProfilingLimit() <= $this->displayCounter->getDisplayFields()) { | |
| return false; | |
| } else { | |
| $this->displayCounter->increaseAlreadyAlwaysDisplayed(); | |
| return true; | |
| } | |
| } | |
| if ($this->shouldDisplayNotAlwaysDisplayField($field)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| private function shouldDisplayNotAlwaysDisplayField(Field $field): bool | |
| { | |
| $fields = $this->form->getFields()->toArray(); | |
| foreach ($fields as $fieldFromArray) { | |
| if (in_array($field->getType(), $this->viewOnlyFields)) { | |
| continue; | |
| } | |
| /** @var Field $fieldFromArray */ | |
| if ($field->getId() === $fieldFromArray->getId()) { | |
| if (($this->displayCounter->getDisplayFields() + ($this->displayCounter->getAlwaysDisplayFields() - $this->displayCounter->getAlreadyAlwaysDisplayed())) >= $this->form->getProgressiveProfilingLimit()) { | |
| return false; | |
| } | |
| } | |
| } | |
| return true; | |
| } | |
| public function useProgressiveProfilingLimit(): bool | |
| { | |
| return '' != $this->form->getProgressiveProfilingLimit(); | |
| } | |
| /** | |
| * @return DisplayCounter | |
| */ | |
| public function getDisplayCounter() | |
| { | |
| return $this->displayCounter; | |
| } | |
| public function increaseDisplayedFields(Field $field): void | |
| { | |
| if (!in_array($field->getType(), $this->viewOnlyFields)) { | |
| $this->displayCounter->increaseDisplayedFields(); | |
| } | |
| } | |
| } | |