private function isTooDeep(Context $context)
 {
     $depth = $context->getDepth();
     $groups = $context->attributes->get('groups')->get();
     $metadataStack = $context->getMetadataStack();
     $nthProperty = 0;
     // iterate from the first added items to the lasts
     for ($i = $metadataStack->count() - 1; $i > 0; $i--) {
         $metadata = $metadataStack[$i];
         if ($metadata instanceof PropertyMetadata) {
             $maxDepth = null;
             if ($metadata->maxDepth) {
                 if (!is_array($metadata->maxDepth)) {
                     $maxDepth = (int) $metadata->maxDepth;
                 } else {
                     foreach ($groups as $group) {
                         if (array_key_exists($group, $metadata->maxDepth) && $metadata->maxDepth[$group] > $maxDepth) {
                             $maxDepth = $metadata->maxDepth[$group];
                         }
                     }
                 }
             }
             $nthProperty++;
             $relativeDepth = $depth - $nthProperty;
             if (null !== $maxDepth && $relativeDepth > $maxDepth) {
                 return true;
             }
         }
     }
     return false;
 }
 /**
  * @param PropertyMetadata $property
  * @param Context $context
  * @return bool
  */
 public function shouldSkipProperty(PropertyMetadata $property, Context $context)
 {
     $plainFields = $this->transformToPlainArray($this->scope);
     if ($property->name == 'id') {
         return false;
     }
     $stack = $this->getStackAsString($context->getMetadataStack());
     if ($stack) {
         $propertyInStack = $stack . '.' . $property->name;
         return !in_array($propertyInStack, $plainFields);
     }
     return !in_array($property->name, $plainFields);
 }
 /**
  * {@inheritDoc}
  */
 public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext)
 {
     // name,{main_address:[zip_code,{point:[latitude,longitude]}]}
     $filteredMetadataStack = $this->filterMetadataStack($navigatorContext->getMetadataStack());
     $filteredMetadataStack->push($property);
     $part = $this->fields;
     foreach ($filteredMetadataStack as $curKey) {
         $part = $this->findArrayPart($this->namingStrategy->translateName($curKey), $part);
     }
     if ($part != false) {
         return false;
     }
     return true;
 }
 /**
  * @param \JMS\Serializer\VisitorInterface $visitor
  * @param \JMS\Serializer\Context $context
  * @return string
  */
 private function getFieldPath(VisitorInterface $visitor, Context $context)
 {
     $path = '';
     foreach ($context->getMetadataStack() as $element) {
         if ($element instanceof PropertyMetadata) {
             $name = $element->serializedName !== null ? $element->serializedName : $element->name;
             if ($visitor instanceof AbstractVisitor) {
                 $name = $visitor->getNamingStrategy()->translateName($element);
             }
             $path = $name . self::PATH_FIELD_SEPARATOR . $path;
         }
     }
     $path = rtrim($path, self::PATH_FIELD_SEPARATOR);
     return $path;
 }
Esempio n. 5
0
 private function isTooDeep(Context $context)
 {
     $depth = $context->getDepth();
     $metadataStack = $context->getMetadataStack();
     $nthProperty = 0;
     // iterate from the first added items to the lasts
     for ($i = $metadataStack->count() - 1; $i > 0; $i--) {
         $metadata = $metadataStack[$i];
         if ($metadata instanceof PropertyMetadata) {
             $nthProperty++;
             $relativeDepth = $depth - $nthProperty;
             if (null !== $metadata->maxDepth && $relativeDepth > $metadata->maxDepth) {
                 return true;
             }
         }
     }
     return false;
 }
Esempio n. 6
0
 /**
  * @param Context $context
  */
 private function applyRecursiveGroups(Context $context)
 {
     if ($context->getMetadataStack() && $context->attributes->containsKey('groups')) {
         $groups = array_fill_keys($context->attributes->get('groups')->get(), true);
         $groupModifiers = array();
         $path = '';
         foreach ($context->getMetadataStack() as $metadata) {
             if ($metadata instanceof PropertyMetadata && is_array($metadata->recursionGroups)) {
                 $path = '.' . $metadata->name . $path;
                 $groupModifiers[] = $metadata->recursionGroups;
             }
         }
         foreach (array_reverse($groupModifiers) as $modifier) {
             foreach ($modifier as $ifGroup => $withGroups) {
                 if (isset($groups[$ifGroup])) {
                     $groups = $withGroups;
                     break;
                 }
             }
         }
         $this->changeContextGroups($context, array_keys($groups));
     }
 }