From 8f9dba727509700bbf99c160a523b81a20f92487 Mon Sep 17 00:00:00 2001 From: Bozhidar Hristov Date: Wed, 6 Jul 2016 14:22:16 +0300 Subject: [PATCH] Clear cache when creating new token --- src/Admin/TranslationToken.php | 291 +++++++++++++++++--------------- src/Resources/config/admins.xml | 3 + 2 files changed, 160 insertions(+), 134 deletions(-) diff --git a/src/Admin/TranslationToken.php b/src/Admin/TranslationToken.php index 6681c7e..caf7d7f 100644 --- a/src/Admin/TranslationToken.php +++ b/src/Admin/TranslationToken.php @@ -1,134 +1,157 @@ -em = $em; - } - - // Fields to be shown on create/edit forms - protected function configureFormFields(FormMapper $formMapper) { - $formMapper - ->add('token') - ->add('translations', 'sonata_type_collection', array( - 'type_options' => array( - 'delete' => false, - 'required' => false, - ), - 'btn_add' => false - ), array( - 'edit' => 'inline', - 'inline' => 'table', - 'admin_code' => 'objectbg.admin.token_translation' - )) - ; - - $languages = $this->em->getRepository('ObjectBGTranslationBundle:Language')->findAll(); - $languages = new \Doctrine\Common\Collections\ArrayCollection($languages); - - $formMapper->getFormBuilder()->addEventListener( - FormEvents::PRE_SET_DATA, function(FormEvent $Event) use ($languages) { - $data = $Event->getData(); - if ($data) { - $translations = $data->getTranslations(); - - $langs = array(); - foreach ($translations as $trans) { - $langs[] = $trans->getLanguage(); - } - $missingLanguages = $languages->filter(function($item) use ($langs) { - return array_search($item, $langs) === false; - }); - - foreach ($missingLanguages as $lang) { - $newTranslation = new \ObjectBG\TranslationBundle\Entity\Translation(); - $newTranslation->setLanguage($lang); - $data->getTranslations()->add($newTranslation); - } - } - }); - - $subject = $this->getSubject(); - $formMapper->getFormBuilder()->addEventListener( - FormEvents::POST_SUBMIT, function(FormEvent $Event) use ($subject) { - $data = $Event->getData(); - foreach ($data->getTranslations() as $translation) { - if ($translation->getTranslation() == null) { - $data->getTranslations()->removeElement($translation); - } else { - $translation->setCatalogue('messages'); - $translation->setTranslationToken($subject); - } - } - }); - } - - // Fields to be shown on filter forms - protected function configureDatagridFilters(DatagridMapper $datagridMapper) { - $datagridMapper - ->add('token') - ; - - $datagridMapper - ->add('show-only-untranslated', 'doctrine_orm_callback', array( - 'label' => 'Show only untranslated', - 'callback' => function ($queryBuilder, $alias, $field, $value) { - if ($value['value'] == null) { - return; - } - $subQuery = 'SELECT COUNT(lang) FROM ObjectBGTranslationBundle:Language lang'; - $queryBuilder->andWhere(sprintf('SIZE(%s.translations) < (%s)', $alias, $subQuery)); - }, - 'field_type' => 'checkbox' - )); - } - - // Fields to be shown on lists - protected function configureListFields(ListMapper $listMapper) { - $listMapper - ->addIdentifier('id') - ->addIdentifier('token') - ->add('_action', 'actions', array( - 'actions' => array( - 'edit' => array(), - 'delete' => array(), - ) - )) - ; - } - -} +em = $em; + } + + /** + * + * @param Helper $helper + */ + public function setHelper(Helper $helper) { + $this->helper = $helper; + } + + // Fields to be shown on create/edit forms + protected function configureFormFields(FormMapper $formMapper) { + $formMapper + ->add('token') + ->add('translations', 'sonata_type_collection', array( + 'type_options' => array( + 'delete' => false, + 'required' => false, + ), + 'btn_add' => false + ), array( + 'edit' => 'inline', + 'inline' => 'table', + 'admin_code' => 'objectbg.admin.token_translation' + )) + ; + + $languages = $this->em->getRepository('ObjectBGTranslationBundle:Language')->findAll(); + $languages = new \Doctrine\Common\Collections\ArrayCollection($languages); + + $formMapper->getFormBuilder()->addEventListener( + FormEvents::PRE_SET_DATA, function(FormEvent $Event) use ($languages) { + $data = $Event->getData(); + if ($data) { + $translations = $data->getTranslations(); + + $langs = array(); + foreach ($translations as $trans) { + $langs[] = $trans->getLanguage(); + } + $missingLanguages = $languages->filter(function($item) use ($langs) { + return array_search($item, $langs) === false; + }); + + foreach ($missingLanguages as $lang) { + $newTranslation = new \ObjectBG\TranslationBundle\Entity\Translation(); + $newTranslation->setLanguage($lang); + $data->getTranslations()->add($newTranslation); + } + } + }); + + $subject = $this->getSubject(); + $formMapper->getFormBuilder()->addEventListener( + FormEvents::POST_SUBMIT, function(FormEvent $Event) use ($subject) { + $data = $Event->getData(); + foreach ($data->getTranslations() as $translation) { + if ($translation->getTranslation() == null) { + $data->getTranslations()->removeElement($translation); + } else { + $translation->setCatalogue('messages'); + $translation->setTranslationToken($subject); + } + } + }); + } + + // Fields to be shown on filter forms + protected function configureDatagridFilters(DatagridMapper $datagridMapper) { + $datagridMapper + ->add('token') + ; + + $datagridMapper + ->add('show-only-untranslated', 'doctrine_orm_callback', array( + 'label' => 'Show only untranslated', + 'callback' => function ($queryBuilder, $alias, $field, $value) { + if ($value['value'] == null) { + return; + } + $subQuery = 'SELECT COUNT(lang) FROM ObjectBGTranslationBundle:Language lang'; + $queryBuilder->andWhere(sprintf('SIZE(%s.translations) < (%s)', $alias, $subQuery)); + }, + 'field_type' => 'checkbox' + )); + } + + // Fields to be shown on lists + protected function configureListFields(ListMapper $listMapper) { + $listMapper + ->addIdentifier('id') + ->addIdentifier('token') + ->add('_action', 'actions', array( + 'actions' => array( + 'edit' => array(), + 'delete' => array(), + ) + )) + ; + } + + public function postPersist($object) { + $this->helper->clearTranslationCache(); + } + + public function postUpdate($object) { + $this->helper->clearTranslationCache(); + } + +} diff --git a/src/Resources/config/admins.xml b/src/Resources/config/admins.xml index 143a0b0..4f74e9e 100644 --- a/src/Resources/config/admins.xml +++ b/src/Resources/config/admins.xml @@ -33,6 +33,9 @@ + + +