Exemplo n.º 1
0
 /**
  * @param string $propertyName
  * @param Collection $annotations
  */
 private function setPropertyService($propertyName, Collection $annotations)
 {
     if ($annotations->has(Service::PROPERTY_ANNOTATION)) {
         $annProperty = $annotations->get(Service::PROPERTY_ANNOTATION);
         if (!is_null($serviceName)) {
             $this->{$propertyName} = $this->getDI()->get($serviceName);
         } else {
             Logger::getInstance()->warning("Annotation Inject in Controller required attribute service");
         }
     }
 }
 /**
  * @param Collection|Collection[] $items
  * @param string                  $source
  *
  * @return array
  */
 protected function processAnnotations($items, $source)
 {
     $fields = [];
     if (empty($items)) {
         return $fields;
     }
     if ($items instanceof Collection) {
         $annotations = $items->getAll($this->_group);
         foreach ($annotations as $annotation) {
             $arguments = $annotation->getArguments();
             $fields[] = $this->buildField($arguments, $source);
         }
     } else {
         foreach ($items as $column => $annotations) {
             if (!$annotations->has($this->_group)) {
                 continue;
             }
             $arguments = array_merge_recursive($annotations->has('Field') ? $annotations->get('Field')->getArguments() : [], $annotations->get($this->_group)->getArguments() ?: []);
             $fields[] = $this->buildField($arguments, $source, $column);
         }
     }
     return $fields;
 }
Exemplo n.º 3
0
 protected function createElementByProperty($elementName, Property $baseProperty, Property $mergeProperty = null)
 {
     $elementType = 'Phalcon\\Forms\\Element\\Text';
     if (!$baseProperty && !$mergeProperty) {
         return new $elementType($elementName);
     }
     $property = $mergeProperty && $mergeProperty->has('Type') ? $mergeProperty : $baseProperty;
     if ($property->has('Type')) {
         $typeArguments = $property->get('Type')->getArguments();
         $alias = isset($typeArguments[0]) ? strtolower($typeArguments[0]) : null;
         $elementType = isset($this->elementAlias[$alias]) ? $this->elementAlias[$alias] : $elementType;
     }
     $property = $mergeProperty && $mergeProperty->has('Name') ? $mergeProperty : $baseProperty;
     if ($property->has('Name')) {
         $arguments = $property->get('Name')->getArguments();
         $elementName = isset($arguments[0]) ? $arguments[0] : $elementName;
     }
     $element = new $elementType($elementName);
     $property = $mergeProperty && $mergeProperty->has('Attr') ? $mergeProperty : $baseProperty;
     if ($property->has('Attr')) {
         $element->setAttributes($property->get('Attr')->getArguments());
     }
     $addValidator = function ($property, $element, $validatorAlias) {
         foreach ($property as $annotation) {
             if ($annotation->getName() != 'Validator') {
                 continue;
             }
             $arguments = $annotation->getArguments();
             if (!isset($arguments[0])) {
                 continue;
             }
             $validatorName = strtolower($arguments[0]);
             if (!isset($validatorAlias[$validatorName])) {
                 continue;
             }
             $validator = $validatorAlias[$validatorName];
             $element->addValidator(new $validator($arguments));
         }
         return $element;
     };
     if ($baseProperty->has('Validator')) {
         $element = $addValidator($baseProperty, $element, $this->validatorAlias);
     }
     if ($mergeProperty && $mergeProperty->has('Validator')) {
         $element = $addValidator($mergeProperty, $element, $this->validatorAlias);
     }
     $addFilter = function ($property, $element) {
         foreach ($property as $annotation) {
             if ($annotation->getName() != 'Filter') {
                 continue;
             }
             $arguments = $annotation->getArguments();
             if (!isset($arguments[0])) {
                 continue;
             }
             $filterName = strtolower($arguments[0]);
             $element->addFilter($filterName);
         }
         return $element;
     };
     if ($baseProperty->has('Filter')) {
         $element = $addFilter($baseProperty, $element);
     }
     if ($mergeProperty && $mergeProperty->has('Filter')) {
         $element = $addFilter($mergeProperty, $element);
     }
     $property = $mergeProperty && $mergeProperty->has('Options') ? $mergeProperty : $baseProperty;
     if ($property->has('Options')) {
         $element->setAttributes($property->get('Options')->getArguments());
     }
     $addOption = function ($property, $element) {
         $options = array();
         foreach ($property as $annotation) {
             if ($annotation->getName() != 'Option') {
                 continue;
             }
             $options += $annotation->getArguments();
         }
         $element->setOptions($options);
         return $element;
     };
     if ($baseProperty->has('Option')) {
         $element = $addOption($baseProperty, $element);
     }
     if ($mergeProperty && $mergeProperty->has('Option')) {
         $element = $addOption($mergeProperty, $element);
     }
     return $element;
 }
Exemplo n.º 4
0
 /**
  * Get column info.
  *
  * @param array      $arguments  Annotations arguments.
  * @param Collection $collection Annotations collection.
  *
  * @return array
  */
 protected function _getModelColumnData($arguments, $collection)
 {
     $columnData = [];
     /**
      * Get type.
      */
     if (isset($arguments['type'])) {
         switch ($arguments['type']) {
             case 'integer':
                 $columnData['type'] = Column::TYPE_INTEGER;
                 $columnData['isNumeric'] = true;
                 break;
             case 'string':
                 $columnData['type'] = Column::TYPE_VARCHAR;
                 break;
             case 'text':
                 $columnData['type'] = Column::TYPE_TEXT;
                 break;
             case 'boolean':
                 $columnData['type'] = Column::TYPE_BOOLEAN;
                 break;
             case 'date':
                 $columnData['type'] = Column::TYPE_DATE;
                 break;
             case 'datetime':
                 $columnData['type'] = Column::TYPE_DATETIME;
                 break;
         }
     }
     /**
      * Get size.
      */
     if (isset($arguments['size'])) {
         $columnData['size'] = $arguments['size'];
     }
     /**
      * Check for the 'nullable' parameter in the 'Column' annotation.
      */
     if (isset($arguments['nullable'])) {
         $columnData['notNull'] = !$arguments['nullable'];
     }
     /**
      * Check if the attribute is marked as identity.
      */
     if ($collection->has('Identity')) {
         $columnData['first'] = true;
         if (isset($columnData['isNumeric']) && $columnData['isNumeric'] == true) {
             $columnData['autoIncrement'] = true;
         }
     }
     return $columnData;
 }
Exemplo n.º 5
0
 /**
  * @param string $attribute
  * @param mixed $value
  * @param Annotations $annotations
  * @param Transform|null $transform
  * @return mixed
  * @throws MustBeSimpleException
  * @throws MustBeSequenceException
  * @throws MustBeObjectException
  */
 protected function buildValueToMap($attribute, $value, Annotations $annotations, Transform $transform = null)
 {
     $valueToMap = $value;
     if ($annotations->has('mapper')) {
         /** @var Annotation $annotation */
         $annotation = $annotations->get('mapper');
         $annotationClass = $annotation->getArgument('class');
         $annotationIsArray = $annotation->getArgument('isArray');
         $transforms = $transform ? $transform->getTransforms() : null;
         $skipAttributes = $this->getSkipAttributesByParent($attribute);
         if ($this->isObject($value)) {
             if ($annotationIsArray) {
                 if ($this->hasValidation()) {
                     throw new MustBeSequenceException($attribute, $this->getOutputClass());
                 } else {
                     $valueToMap = null;
                 }
             } else {
                 /** @var object|array $value */
                 /** @var Mapper $mapper */
                 $mapper = new static($value, $annotationClass);
                 $valueToMap = $mapper->setTransforms($transforms)->setValidation($this->hasValidation())->setSkipAttributes($skipAttributes)->map();
             }
         } else {
             if ($annotationIsArray) {
                 $validation = $this->hasValidation();
                 $valueToMap = array_map(function ($value) use($annotationClass, $transforms, $validation, $skipAttributes) {
                     /** @var object|array $value */
                     /** @var Mapper $mapper */
                     $mapper = new static($value, $annotationClass);
                     return $mapper->setTransforms($transforms)->setValidation($validation)->setSkipAttributes($skipAttributes)->map();
                 }, $value);
             } elseif ($this->hasValidation()) {
                 throw new MustBeObjectException($attribute, $this->getOutputClass());
             } else {
                 $valueToMap = null;
             }
         }
     } elseif ($this->isStructure($value)) {
         if ($this->hasValidation()) {
             throw new MustBeSimpleException($attribute, $this->getOutputClass());
         } else {
             $valueToMap = null;
         }
     }
     return $valueToMap;
 }
Exemplo n.º 6
0
 protected function isInjector(Collection $property)
 {
     return $property->has('var') && $property->has('inject');
 }