deblan.tv/vendor/trinity/src/Trinity/Bundle/NewsletterBundle/Form/Type/NewsletterType.php
2016-06-20 11:37:14 +02:00

169 lines
4.8 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Trinity\Bundle\NewsletterBundle\Form\Type;
use Propel\PropelBundle\Form\BaseAbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\File;
use Trinity\Bundle\NewsletterBundle\Form\EventListener\AddBlockFieldsSubscriber;
use \Trinity\Bundle\NewsletterBundle\Model\ModelQuery;
use Trinity\Component\Form\DataTransformer\StringToFileTransformer;
use Trinity\Component\Form\EventListener\FileDeleteFormListener;
class NewsletterType extends BaseAbstractType
{
protected $options = array(
'data_class' => 'Trinity\Bundle\NewsletterBundle\Model\Newsletter',
'name' => 'trinity_newsletter_admin_model',
'models' => array(),
'sender_name' => null,
'sender_mail' => null
);
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->setOptions($options);
$builder->add(
'name',
'text',
array(
'attr' => array(
'data-help' => 'Nom utilisé pour la gestion en BO'
)
)
);
if ($builder->getData()->isNew()) {
$builder->add(
'senderName',
null,
array(
'data' => isset($options['sender_name']) ? $options['sender_name'] : null
)
);
$builder->add(
'senderEmail',
null,
array(
'data' => isset($options['sender_mail']) ? $options['sender_mail'] : null
)
);
} else {
$builder->add('senderName');
$builder->add('senderEmail');
}
$builder->add(
'classKey',
'choice',
array(
'choices' => self::getModels(),
'required' => true,
'attr' => array(
'data-help' => 'Pour éditer le contenu, vous devez enregistrer un modèle de données'
)
)
);
$builder->add(
'template',
'choice',
array(
'label' => 'Mise en page',
'choices' => $this->getTemplates($builder->getData()),
'required' => true,
)
);
$builder->addEventSubscriber(new AddBlockFieldsSubscriber());
$builder->add('emailListing','textarea');
$builder->add(
$builder->create(
'emailFile',
'file',
array(
'label' => 'Fichier email',
'constraints' => array(
new File(),
),
)
)->addModelTransformer(new StringToFileTransformer($builder->getData(), 'emailFile'))
);
$builder->add(
$builder->create(
'emailFileVar',
'file',
array(
'label' => 'CSV email',
'constraints' => array(
new File(),
),
'attr' => array(
'data-help' => 'Fichier CSV avec variables au format suivant : email; var1; var2; ...'
)
)
)->addModelTransformer(new StringToFileTransformer($builder->getData(), 'emailFileVar'))
);
$builder->addEventSubscriber(
new FileDeleteFormListener(
$builder->getFormFactory(),
array(
'emailFile',
'emailFileVar',
)
)
);
$builder->add(
'groups',
'model',
array(
'class' => 'FOS\UserBundle\Propel\Group',
'multiple' => true,
'expanded' => true
)
);
}
public function getModels()
{
$models = array();
if (is_array($this->getOption('models'))) {
foreach ($this->getOption('models') as $model => $settings) {
$models[$model] = $settings['title'];
}
}
return $models;
}
public function getTemplates(\Trinity\Bundle\NewsletterBundle\Model\Newsletter $model = null)
{
$templates = array();
if (null !== $model) {
$models = $this->getOption('models');
if (isset($models[$model->getClassKey()])) {
$_templates = $models[$model->getClassKey()]['templates'];
foreach ($_templates as $_template) {
$templates[$_template['template']] = $_template['title'];
}
}
}
return $templates;
}
}