32 private static $entitySequences = [];
40 private $dependentEntities = [];
49 if ($dependentEntities !==
null) {
50 foreach ($dependentEntities as
$entity) {
73 $operationDataArray = [];
74 self::incrementSequence($entityObject->getName());
76 foreach ($operationMetadata as $operationElement) {
78 $entityObj = $this->resolveOperationObjectAndEntityData($entityObject, $operationElement->getValue());
79 if (
null === $entityObj && $operationElement->isRequired()) {
80 throw new \Exception(sprintf(
81 self::EXCEPTION_REQUIRED_DATA,
82 $operationElement->getType(),
83 $operationElement->getKey(),
84 $entityObject->getName()
86 }
elseif (
null === $entityObj) {
91 $operationElement->getNestedMetadata(),
96 $operationDataArray[$operationElement->getKey()] = $operationData;
98 $operationDataArray = $operationData;
103 $operationElementType = $operationElement->getValue();
105 if (in_array($operationElementType, self::PRIMITIVE_TYPES)) {
106 $elementData = $this->resolvePrimitiveReference(
108 $operationElement->getKey(),
109 $operationElement->getType()
115 if ($elementData !=
null) {
116 if (array_key_exists($operationElement->getKey(), $entityObject->getUniquenessData())) {
117 $uniqueData = $entityObject->getUniquenessDataByName($operationElement->getKey());
118 if ($uniqueData ===
'suffix') {
119 $elementData .= (string)self::getSequence($entityObject->getName());
121 $elementData = (string)self::getSequence($entityObject->getName()) . $elementData;
124 $operationDataArray[$operationElement->getKey()] = $this->castValue(
125 $operationElementType,
128 }
elseif ($operationElement->isRequired()) {
129 throw new \Exception(sprintf(
130 self::EXCEPTION_REQUIRED_DATA,
131 $operationElement->getType(),
132 $operationElement->getKey(),
133 $entityObject->getName()
137 $entityNamesOfType = $entityObject->getLinkedEntitiesOfType($operationElementType);
140 if ($operationElement->isRequired() && $entityNamesOfType ==
null) {
141 throw new \Exception(sprintf(
142 self::EXCEPTION_REQUIRED_DATA,
143 $operationElement->getType(),
144 $operationElement->getKey(),
145 $entityObject->getName()
148 foreach ($entityNamesOfType as $entityName) {
149 $operationDataSubArray = $this->resolveNonPrimitiveElement(
157 $operationDataArray[$operationElement->getKey()][] = $operationDataSubArray;
159 $operationDataArray[$operationElement->getKey()] = $operationDataSubArray;
165 return $operationDataArray;
179 private function resolvePrimitiveReference($entityObject, $operationKey, $operationElementType)
181 $elementData = $entityObject->getDataByName(
186 if ($elementData ==
null && $entityObject->getVarReference($operationKey) !=
null) {
187 list(
$type, $field) = explode(
189 $entityObject->getVarReference($operationKey)
194 $entities = $this->getDependentEntitiesOfType(
$type);
195 foreach ($entities as
$entity) {
199 return $elementDatas;
216 private function getDependentEntitiesOfType(
$type)
218 $entitiesOfType = [];
220 foreach ($this->dependentEntities as $dependentEntity) {
221 if ($dependentEntity->getType() ==
$type) {
222 $entitiesOfType[] = $dependentEntity;
226 return $entitiesOfType;
239 private function resolveOperationObjectAndEntityData($entityObject, $operationElementValue)
241 if ($operationElementValue != $entityObject->getType()) {
243 $linkName = $entityObject->getLinkedEntitiesOfType($operationElementValue);
244 if (!empty($linkName)) {
245 $linkName = $linkName[0];
251 return $entityObject;
264 private function resolveNonPrimitiveElement($entityName, $operationElement, $operation, $fromArray =
false)
266 $linkedEntityObj = $this->resolveLinkedEntityObject($entityName);
269 if (!empty($operationElement->getNestedOperationElement($operationElement->getValue()))
274 [$operationElement->getNestedOperationElement($operationElement->getValue())],
279 return $operationSubArray;
284 $linkedEntityObj->getType()
285 )->getOperationMetadata();
297 private function resolveLinkedEntityObject($entityName)
300 if (array_key_exists($entityName, $this->dependentEntities)) {
301 return $this->dependentEntities[$entityName];
313 private static function incrementSequence($entityName)
315 if (array_key_exists($entityName, self::$entitySequences)) {
316 self::$entitySequences[$entityName]++;
318 self::$entitySequences[$entityName] = 1;
328 private static function getSequence($entityName)
330 if (array_key_exists($entityName, self::$entitySequences)) {
331 return self::$entitySequences[$entityName];
352 $newVals[] = $this->castValue(
$type, $val);
362 $newVal = (integer)
$value;
365 if (strtolower($newVal) ===
'false') {
368 $newVal = (boolean)
$value;
elseif(isset( $params[ 'redirect_parent']))
resolveOperationDataArray($entityObject, $operationMetadata, $operation, $fromArray=false)
const ENTITY_OPERATION_ARRAY
__construct($dependentEntities=null)
const EXCEPTION_REQUIRED_DATA