Ejemplo n.º 1
0
 /**
  * Return TRUE if the input has an id, and thus is an edit of an existing field.
  * @param ResourceTransformer $transformer
  * @param ResourceDefinition $resourceDefinition
  * @param Context $context
  * @param $input
  * @return bool
  */
 protected function hasInputIdentifier(ResourceTransformer $transformer, ResourceDefinition $resourceDefinition, Context $context, &$input)
 {
     $identifiers = $resourceDefinition->getFields()->getIdentifiers();
     if (count($identifiers) > 0) {
         foreach ($identifiers as $field) {
             $value = $this->resolvePropertyInput($transformer, $input, $field, $context);
             if (!$value) {
                 return false;
             }
         }
         return true;
     }
     return false;
 }
 /**
  * @param ResourceTransformer $transformer
  * @param ResourceDefinition $definition
  * @param null $request
  * @return PaginationBuilder
  */
 private function createPaginationBuilderFromDefinition(ResourceTransformer $transformer, ResourceDefinition $definition, $request = null)
 {
     $cn = $this->paginationClass;
     /**
      * @var PaginationBuilder $builder
      */
     $builder = new $cn();
     // Register attribute names
     foreach ($definition->getFields() as $field) {
         if ($field instanceof IdentifierField || $field instanceof ResourceField && $field->isSortable()) {
             $builder->registerPropertyName($field->getName(), $field->getDisplayName());
         }
     }
     $sorting = $transformer->getPropertyResolver()->getParameterFromRequest($request, ResourceTransformer::SORT_PARAMETER);
     $sortedOn = [];
     if ($sorting) {
         $sortFields = explode(',', $sorting);
         // Set the sort order
         foreach ($sortFields as $sortField) {
             if (mb_substr($sortField, 0, 1) === '!') {
                 $sortField = mb_substr($sortField, 1);
                 $direction = OrderParameter::DESC;
             } else {
                 $direction = OrderParameter::ASC;
             }
             $field = $definition->getFields()->getFromDisplayName($sortField);
             if ($field) {
                 if ($field->isSortable()) {
                     $sortedOn[$field->getName()] = true;
                     $builder->orderBy(new OrderParameter($field->getName(), $direction));
                 }
             } else {
                 // Check sortable
                 switch ($sortField) {
                     case self::RANDOM:
                         $this->handleRandomOrder($builder, $direction, $request);
                         break;
                 }
             }
         }
     }
     // Add all
     foreach ($definition->getFields() as $field) {
         if ($field instanceof IdentifierField && !isset($sortedOn[$field->getName()])) {
             $builder->orderBy(new OrderParameter($field->getName(), OrderParameter::ASC));
         }
     }
     // Set request
     if (isset($request)) {
         $builder->setRequest($request);
     }
     return $builder;
 }