addBehavior('UUID'); $this->hasMany( 'Alignments', [ 'dependent' => true, 'cascadeCallbacks' => true ] ); $this->hasMany( 'EncryptionKeys', [ 'foreignKey' => 'owner_id', 'conditions' => ['owner_model' => 'individual'] ] ); $this->hasOne( 'Users' ); $this->belongsToMany('Organisations', [ 'through' => 'Alignments', ]); $this->setDisplayField('email'); } public function validationDefault(Validator $validator): Validator { $validator ->notEmptyString('email') ->requirePresence(['email'], 'create'); return $validator; } public function captureIndividual($individual): ?int { if (!empty($individual['uuid'])) { $existingIndividual = $this->find()->where([ 'uuid' => $individual['uuid'] ])->first(); } else { return null; } if (empty($existingIndividual)) { $entity = $this->newEmptyEntity(); $this->patchEntity($entity, $individual, [ 'accessibleFields' => ['uuid' => true] ]); $entityToSave = $entity; } else { $this->patchEntity($existingIndividual, $individual); $entityToSave = $existingIndividual; } $savedEntity = $this->save($entityToSave, ['associated' => false]); if (!$savedEntity) { return null; } $this->postCaptureActions($savedEntity); return $savedEntity->id; } public function postCaptureActions($individual): void { if (!empty($individual['metaFields'])) { $this->saveMetaFields($id, $individual); } if (!empty($individual['alignments'])) { foreach ($individual['alignments'] as $alignment) { $org_id = $this->Organisation->captureOrg($alignment['organisation']); if ($org_id) { $this->Alignments->setAlignment($org_id, $individual->id, $alignment['type']); } } } } }