/**
  * {@inheritdoc}
  */
 public function process($attribute)
 {
     $context = ['locales' => $this->localeManager->getActiveCodes()];
     $flatAttribute = ['type' => $attribute->getAttributeType(), 'code' => $attribute->getCode()] + $this->transNormalizer->normalize($attribute, null, $context);
     $flatAttribute = array_merge($flatAttribute, ['group' => $attribute->getGroup() ? $attribute->getGroup()->getCode() : null, 'unique' => (int) $attribute->isUnique(), 'useable_as_grid_filter' => (int) $attribute->isUseableAsGridFilter(), 'allowed_extensions' => implode(self::ITEM_SEPARATOR, $attribute->getAllowedExtensions()), 'metric_family' => $attribute->getMetricFamily(), 'default_metric_unit' => $attribute->getDefaultMetricUnit(), 'localizable' => (int) $attribute->isLocalizable(), 'scopable' => (int) $attribute->isScopable(), 'families' => $this->getAttributeFamilyCodes($attribute)]);
     return $flatAttribute;
 }
 /**
  * @param ProductInterface $product
  *
  * @return array
  */
 protected function getLabels(ProductInterface $product)
 {
     $labels = [];
     foreach ($this->localeManager->getActiveCodes() as $localeCode) {
         $labels[$localeCode] = $product->getLabel($localeCode);
     }
     return ['label' => $labels];
 }
 /**
  * Create locales field
  *
  * @param FormBuilderInterface $builder
  *
  * @return ChannelType
  */
 protected function addLocalesField(FormBuilderInterface $builder)
 {
     $builder->add('locales', 'entity', ['required' => true, 'multiple' => true, 'select2' => true, 'by_reference' => false, 'class' => 'Pim\\Bundle\\CatalogBundle\\Entity\\Locale', 'query_builder' => function (LocaleRepositoryInterface $repository) {
         return $repository->getLocalesQB();
     }, 'preferred_choices' => $this->localeManager->getActiveLocales()]);
     return $this;
 }
 /**
  * Prepare attributes list for CSV headers
  *
  * @param array $attributesList
  *
  * @return array
  */
 protected function prepareAttributesList(array $attributesList)
 {
     $scopeCode = $this->catalogContext->getScopeCode();
     $localeCodes = $this->localeManager->getActiveCodes();
     $fieldsList = array();
     foreach ($attributesList as $attribute) {
         $attCode = $attribute->getCode();
         if ($attribute->isLocalizable() && $attribute->isScopable()) {
             foreach ($localeCodes as $localeCode) {
                 $fieldsList[] = sprintf('%s-%s-%s', $attCode, $localeCode, $scopeCode);
             }
         } elseif ($attribute->isLocalizable()) {
             foreach ($localeCodes as $localeCode) {
                 $fieldsList[] = sprintf('%s-%s', $attCode, $localeCode);
             }
         } elseif ($attribute->isScopable()) {
             $fieldsList[] = sprintf('%s-%s', $attCode, $scopeCode);
         } elseif ($attribute->getAttributeType() === 'pim_catalog_identifier') {
             array_unshift($fieldsList, $attCode);
         } elseif ($attribute->getAttributeType() === 'pim_catalog_price_collection') {
             foreach ($this->currencyManager->getActiveCodes() as $currencyCode) {
                 $fieldsList[] = sprintf('%s-%s', $attCode, $currencyCode);
             }
         } else {
             $fieldsList[] = $attCode;
         }
     }
     return $fieldsList;
 }
 /**
  * Get cached active locales
  *
  * @return array
  */
 protected function getActiveLocales()
 {
     if (!$this->activeLocales) {
         $this->activeLocales = $this->localeManager->getActiveLocales();
     }
     return $this->activeLocales;
 }
 /**
  * Prepare attributes list for CSV headers
  *
  * @param array $attributesList
  *
  * @return array
  */
 protected function prepareAttributesList(array $attributesList)
 {
     $scopeCode = $this->catalogContext->getScopeCode();
     $localeCodes = $this->localeManager->getActiveCodes();
     $fieldsList = [];
     foreach ($attributesList as $attribute) {
         $attCode = $attribute->getCode();
         if ($attribute->isLocalizable() && $attribute->isScopable()) {
             foreach ($localeCodes as $localeCode) {
                 $fieldsList[] = sprintf('%s-%s-%s', $attCode, $localeCode, $scopeCode);
             }
         } elseif ($attribute->isLocalizable()) {
             foreach ($localeCodes as $localeCode) {
                 $fieldsList[] = sprintf('%s-%s', $attCode, $localeCode);
             }
         } elseif ($attribute->isScopable()) {
             $fieldsList[] = sprintf('%s-%s', $attCode, $scopeCode);
         } elseif (AttributeTypes::IDENTIFIER === $attribute->getAttributeType()) {
             array_unshift($fieldsList, $attCode);
         } elseif (AttributeTypes::PRICE_COLLECTION === $attribute->getAttributeType()) {
             foreach ($this->currencyManager->getActiveCodes() as $currencyCode) {
                 $fieldsList[] = sprintf('%s-%s', $attCode, $currencyCode);
             }
         } else {
             $fieldsList[] = $attCode;
         }
     }
     return $fieldsList;
 }
 /**
  * Edit attribute form
  *
  * @param Request $request
  * @param integer $id
  *
  * @Template("PimEnrichBundle:Attribute:form.html.twig")
  * @AclAncestor("pim_enrich_attribute_edit")
  * @return array
  */
 public function editAction(Request $request, $id)
 {
     $attribute = $this->findAttributeOr404($id);
     if ($this->attributeHandler->process($attribute)) {
         $this->addFlash('success', 'flash.attribute.updated');
         return $this->redirectToRoute('pim_enrich_attribute_edit', array('id' => $attribute->getId()));
     }
     return array('form' => $this->attributeForm->createView(), 'locales' => $this->localeManager->getActiveLocales(), 'disabledLocales' => $this->localeManager->getDisabledLocales(), 'measures' => $this->measuresConfig, 'created' => $this->versionManager->getOldestLogEntry($attribute), 'updated' => $this->versionManager->getNewestLogEntry($attribute));
 }
 /**
  * Return rows for available locales
  *
  * @param AbstractAttribute $attribute
  *
  * @return array
  */
 protected function getLocaleRows(AbstractAttribute $attribute)
 {
     $locales = $this->localeManager->getActiveLocales();
     $localeRows = array();
     foreach ($locales as $locale) {
         $localeRows[] = array('attribute' => $attribute->getCode(), 'locale' => $locale->getCode(), 'scope' => null);
     }
     return $localeRows;
 }
 /**
  * Get activated locales as choices
  *
  * @return string[]
  */
 public function getActivatedLocaleChoices()
 {
     $translateIn = $this->getCurrentLocaleCode();
     $activeCodes = $this->localeManager->getActiveCodes();
     $results = [];
     foreach ($activeCodes as $activeCode) {
         $results[$activeCode] = $this->getLocaleLabel($activeCode, $translateIn);
     }
     return $results;
 }
 function let(SecurityContextInterface $securityContext, LocaleManager $localeManager, ChannelManager $channelManager, CategoryManager $categoryManager, TokenInterface $token, User $user, LocaleInterface $en, LocaleInterface $fr, LocaleInterface $de, ChannelInterface $ecommerce, ChannelInterface $mobile, CategoryInterface $firstTree, CategoryInterface $secondTree)
 {
     $securityContext->getToken()->willReturn($token);
     $token->getUser()->willReturn($user);
     $en->getCode()->willReturn('en_US');
     $fr->getCode()->willReturn('fr_FR');
     $de->getCode()->willReturn('de_DE');
     $en->isActivated()->willReturn(true);
     $fr->isActivated()->willReturn(true);
     $de->isActivated()->willReturn(true);
     $localeManager->getLocaleByCode('en_US')->willReturn($en);
     $localeManager->getLocaleByCode('fr_FR')->willReturn($fr);
     $localeManager->getLocaleByCode('de_DE')->willReturn($de);
     $localeManager->getActiveLocales()->willReturn([$en, $fr, $de]);
     $channelManager->getChannels()->willReturn([$mobile, $ecommerce]);
     $categoryManager->getTrees()->willReturn([$firstTree, $secondTree]);
     $this->beConstructedWith($securityContext, $localeManager, $channelManager, $categoryManager, 'en_US');
 }
 /**
  * Returns the default application locale
  *
  * @return Locale|null
  */
 protected function getDefaultLocale()
 {
     return $this->localeManager->getLocaleByCode($this->defaultLocale);
 }
 /**
  * Get active codes
  *
  * @return string[]
  */
 public function getActiveCodes()
 {
     return $this->baseLocaleManager->getActiveCodes();
 }