/** * * @param \Zoop\Shard\Annotation\AnnotationEventArgs $eventArgs */ public function annotationChainValidator(AnnotationEventArgs $eventArgs) { $annotation = $eventArgs->getAnnotation(); $eventManager = $eventArgs->getEventManager(); $type = $eventArgs->getEventType(); $reflection = $eventArgs->getReflection(); $metadata = $eventArgs->getMetadata(); $validators = []; foreach ($annotation->value as $validatorAnnotation) { $validatorEventArgs = new AnnotationEventArgs($metadata, $type, $validatorAnnotation, $reflection, $eventManager); $eventManager->dispatchEvent($validatorAnnotation::EVENT, $validatorEventArgs); $validatorMetadata = $this->getValidatorMetadata($metadata); if ($type == EventType::DOCUMENT && isset($validatorMetadata['document'])) { $validators[] = $validatorMetadata['document']; } elseif (isset($validatorMetadata['fields'][$reflection->getName()])) { $validators[] = $validatorMetadata['fields'][$reflection->getName()]; } } if (count($validators) == 0) { $validator = null; } elseif (count($validators) == 1) { $validator = $validators[0]; } elseif (count($validators) > 1) { $validator = ['class' => $annotation->class, 'options' => ['validators' => $validators]]; } if ($type == EventType::DOCUMENT) { $this->setDocumentValidator($eventArgs, $validator); } else { $this->setFieldValidator($eventArgs, $validator); } }
/** * * @param \Zoop\Shard\Annotation\AnnotationEventArgs $eventArgs */ public function annotationState(AnnotationEventArgs $eventArgs) { $field = $eventArgs->getReflection()->getName(); $metadata = $eventArgs->getMetadata(); $eventManager = $eventArgs->getEventManager(); $metadata->addProperty('state', true); $metadata->setState([$field => $eventArgs->getAnnotation()->value]); //Add sythentic annotation to create extra permission that will allow //updates on the state field when access control is enabled. $permissionAnnotation = new Shard\Permission\Basic(['roles' => BasicPermission::WILD, 'allow' => Actions::update($field)]); // Raise annotation event $eventManager->dispatchEvent($permissionAnnotation::EVENT, new AnnotationEventArgs($metadata, EventType::DOCUMENT, $permissionAnnotation, $metadata->getReflectionClass(), $eventManager)); }
/** * * @param \Zoop\Shard\Annotation\AnnotationEventArgs $eventArgs */ public function annotationFreeze(AnnotationEventArgs $eventArgs) { $field = $eventArgs->getReflection()->getName(); $metadata = $eventArgs->getMetadata(); $eventManager = $eventArgs->getEventManager(); $freezeMetadata = $this->getFreezeMetadata($metadata); $freezeMetadata['flag'] = $field; $metadata->setFreeze($freezeMetadata); //Add sythentic annotation to create extra permission that will allow //updates on the freeze field when access control is enabled. $permissionAnnotation = new Shard\Permission\Basic(['roles' => BasicPermission::WILD, 'allow' => Actions::update($field)]); // Raise annotation event $eventManager->dispatchEvent($permissionAnnotation::EVENT, new AnnotationEventArgs($metadata, EventType::DOCUMENT, $permissionAnnotation, $metadata->getReflectionClass(), $eventManager)); }
/** * * @param \Zoop\Shard\Annotation\AnnotationEventArgs $eventArgs */ public function annotationAccessControl(AnnotationEventArgs $eventArgs) { $annotation = $eventArgs->getAnnotation(); $metadata = $eventArgs->getMetadata(); if ($annotation->value) { $eventManager = $eventArgs->getEventManager(); foreach ($annotation->value as $permissionAnnotation) { if (defined(get_class($permissionAnnotation) . '::EVENT')) { // Raise annotation event $eventManager->dispatchEvent($permissionAnnotation::EVENT, new AnnotationEventArgs($metadata, EventType::DOCUMENT, $permissionAnnotation, $eventArgs->getReflection(), $eventManager)); } } } }