/**
  * Check whenever datasource is ORM and try to generate tags
  * It will be available in metadata and after build will be passed to content-manager
  *
  * @param BuildAfter $event
  */
 public function buildAfter(BuildAfter $event)
 {
     $grid = $event->getDatagrid();
     $datasource = $grid->getDatasource();
     $config = $grid->getAcceptor()->getConfig();
     if ($datasource instanceof OrmDatasource) {
         // autogenerate only in case when it's not passed directly in config
         if (!$config->offsetGetByPath(ToolbarExtension::OPTIONS_PATH . self::TAGS_PATH)) {
             $tags = [];
             $qb = $datasource->getQueryBuilder();
             $fromParts = $qb->getDQLPart('from');
             /** @var \Doctrine\ORM\Query\Expr\From $singleTableMetadata */
             foreach ($fromParts as $singleTableMetadata) {
                 $tags = array_merge($tags, $this->generator->generate($singleTableMetadata->getFrom(), true));
             }
             $config->offsetSetByPath(ToolbarExtension::OPTIONS_PATH . self::TAGS_PATH, $tags);
         }
         $options = $config->offsetGetByPath(ToolbarExtension::OPTIONS_PATH, []);
         $modules = !empty($options[MetadataObject::REQUIRED_MODULES_KEY]) ? $options[MetadataObject::REQUIRED_MODULES_KEY] : [];
         $config->offsetSetByPath(sprintf('%s[%s]', ToolbarExtension::OPTIONS_PATH, MetadataObject::REQUIRED_MODULES_KEY), array_merge($modules, ['oronavigation/js/content/grid-builder']));
     }
 }
 /**
  * @dataProvider generateDataProvider
  *
  * @param TagGeneratorChain $generator
  * @param mixed             $data
  * @param bool              $includeCollection
  * @param int               $expectedCount
  */
 public function testGenerate(TagGeneratorChain $generator, $data, $includeCollection, $expectedCount)
 {
     $result = $generator->generate($data, $includeCollection);
     $this->assertCount($expectedCount, $result);
     $this->assertInternalType('array', $result, 'Should always return array');
 }
 /**
  * @param mixed $data
  * @param bool  $includeCollectionTag
  * @param bool  $processNestedData
  *
  * @return array
  */
 public function generate($data, $includeCollectionTag = false, $processNestedData = true)
 {
     // enforce plain array should returns
     return array_values($this->tagGeneratorChain->generate($data, $includeCollectionTag, $processNestedData));
 }