169 lines
4.8 KiB
PHP
169 lines
4.8 KiB
PHP
<?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;
|
||
}
|
||
}
|