open-orchestra/open-orchestra-media-admin-bundle

View on GitHub
MediaAdminBundle/Form/Type/MediaBaseType.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace OpenOrchestra\MediaAdminBundle\Form\Type;

use OpenOrchestra\Backoffice\Context\ContextBackOfficeInterface;
use OpenOrchestra\Media\Model\MediaInterface;
use OpenOrchestra\MediaAdmin\Security\ContributionActionInterface as MediaContributionActionInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;

/**
 * Class MediaBaseType
 */
class MediaBaseType extends AbstractType
{
    protected $currentSiteManager;
    protected $frontLanguages;
    protected $mediaClass;

    protected $groupRender = array(
        'information' => array(
            'rank'  => 0,
            'label' => 'open_orchestra_media_admin.form.media.group.information',
        ),
        'usage' => array(
            'rank'  => 1,
            'label' => 'open_orchestra_media_admin.form.media.group.usage',
        ),
    );
    protected $subGroupRender = array(
        'properties' => array(
            'rank' => 0,
            'label' => 'open_orchestra_media_admin.form.media.sub_group.properties',
        ),
    );

    /**
     * @param ContextBackOfficeInterface $currentSiteManager
     * @param string                     $mediaClass
     * @param array                      $frontLanguages
     */
    public function __construct(
        ContextBackOfficeInterface $currentSiteManager,
        $mediaClass,
        array $frontLanguages
    ) {
        $this->currentSiteManager = $currentSiteManager;
        $this->mediaClass = $mediaClass;
        $this->frontLanguages = array_keys($frontLanguages);
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $siteId = null;
        if ($builder->getData() instanceof MediaInterface) {
            $siteId = $builder->getData()->getSiteId();
        }

        $builder
            ->add('titles', 'oo_multi_languages', array(
                'label'        => 'open_orchestra_media_admin.form.media.title',
                'languages'    => $this->frontLanguages,
                'group_id'     => 'information',
                'sub_group_id' => 'properties',
            ))
            ->add('mediaFolder', 'oo_folder_choice', array(
                'label'              => 'open_orchestra_media_admin.form.media.folder',
                'required'           => true,
                'group_id'           => 'information',
                'sub_group_id'       => 'properties',
                'site_id'            => $siteId,
                'property'           => 'names[' . $this->currentSiteManager->getBackOfficeLanguage() . ']',
                'language'           => $this->currentSiteManager->getBackOfficeLanguage(),
                'contribution_rigth' => MediaContributionActionInterface::CREATE_MEDIA_UNDER,

            ))
            ->add('copyright', null, array(
                'label'        => 'open_orchestra_media_admin.form.media.copyright',
                'required'     => false,
                'group_id'     => 'information',
                'sub_group_id' => 'properties',
            ))
            ->add('keywords', 'oo_keywords_choice', array(
                'label'        => 'open_orchestra_media_admin.form.media.keywords',
                'required'     => false,
                'group_id'     => 'information',
                'sub_group_id' => 'properties',
            ))
        ;

        if (array_key_exists('disabled', $options)) {
            $builder->setAttribute('disabled', $options['disabled']);
        }
    }

    /**
     * @param FormView      $view
     * @param FormInterface $form
     * @param array         $options
     */
    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $view->vars['delete_button'] = $options['delete_button'];
        $view->vars['enable_delete_button'] = $options['enable_delete_button'];
        $view->vars['new_button'] = false;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults($this->getDefaultOptionsValues());
    }

    /**
     * Get Default OptionsValues
     *
     * @return array
     */
    protected function getDefaultOptionsValues()
    {
        return array(
            'data_class'       => $this->mediaClass,
            'delete_button' => false,
            'enable_delete_button' => false,
            'group_enabled'    => true,
            'group_render'     => $this->groupRender,
            'sub_group_render' => $this->subGroupRender
        );
    }

    /**
     * Add a group render
     *
     * @param string $key
     * @param array  $group
     */
    protected function addGroupRender($key, array $group)
    {
        $this->groupRender[$key] = $group;
    }

    /**
     * Add a subgroup render
     *
     * @param string $key
     * @param array  $subGroup
     */
    protected function addSubGroupRender($key, array $subGroup)
    {
        $this->subGroupRender[$key] = $subGroup;
    }

    /**
     * @return string The name of this type
     */
    public function getName()
    {
        return 'oo_media_base';
    }
}