/**
  * Get the association field names
  *
  * @return array
  */
 public function resolveAssociationColumns()
 {
     if (null === $this->assocFieldsCache) {
         $fieldNames = [];
         $assocTypes = $this->assocTypeRepository->findAll();
         foreach ($assocTypes as $assocType) {
             $fieldNames[] = $assocType->getCode() . self::GROUP_ASSOCIATION_SUFFIX;
             $fieldNames[] = $assocType->getCode() . self::PRODUCT_ASSOCIATION_SUFFIX;
         }
         $this->assocFieldsCache = $fieldNames;
     }
     return $this->assocFieldsCache;
 }
 /**
  * {@inheritdoc}
  */
 public function sort(array $columns, array $context = [])
 {
     $identifier = $this->productRepository->getIdentifierProperties()[0];
     if (isset($context['filters']['structure']['attributes']) && !empty($context['filters']['structure']['attributes'])) {
         $rawColumns = array_merge([$identifier], $this->firstDefaultColumns, array_map(function ($associationType) {
             return $associationType->getCode();
         }, $this->associationTypeRepository->findAll()), $context['filters']['structure']['attributes']);
         $sortedColumns = [];
         foreach ($rawColumns as $columnCode) {
             $sortedColumns = array_merge($sortedColumns, array_filter($columns, function ($columnCandidate) use($columnCode) {
                 return 0 !== preg_match(sprintf('/^%s(-.*)*/', $columnCode), $columnCandidate);
             }));
         }
         return $sortedColumns;
     }
     array_unshift($this->firstDefaultColumns, $identifier);
     return parent::sort($columns);
 }
 /**
  * Prepare fields list for CSV headers
  *
  * @param array $attributesList
  *
  * @return array
  */
 protected function prepareFieldsList(array $attributesList = [])
 {
     $fieldsList = $this->prepareAttributesList($attributesList);
     $fieldsList[] = ProductNormalizer::FIELD_FAMILY;
     $fieldsList[] = ProductNormalizer::FIELD_CATEGORY;
     $fieldsList[] = ProductNormalizer::FIELD_GROUPS;
     $associationTypes = $this->assocTypeRepo->findAll();
     foreach ($associationTypes as $associationType) {
         $fieldsList[] = sprintf('%s-groups', $associationType->getCode());
         $fieldsList[] = sprintf('%s-products', $associationType->getCode());
     }
     return $fieldsList;
 }
 /**
  * Display association grids
  *
  * @param Request $request the request
  * @param int     $id      the product id (owner)
  *
  * @AclAncestor("pim_enrich_associations_view")
  *
  * @return Response
  */
 public function associationsAction(Request $request, $id)
 {
     $product = $this->findProductOr404($id);
     $associationTypes = $this->assocTypeRepository->findAll();
     return $this->templating->renderResponse('PimEnrichBundle:Association:_associations.html.twig', ['product' => $product, 'associationTypes' => $associationTypes, 'dataLocale' => $request->get('dataLocale', null)]);
 }
 /**
  * @return JsonResponse
  */
 public function indexAction()
 {
     $associationTypes = $this->associationTypeRepo->findAll();
     $data = $this->normalizer->normalize($associationTypes, 'internal_api');
     return new JsonResponse($data);
 }