Jarves\Admin\FieldTypes\TypeObject::defineCrossObject PHP Method

defineCrossObject() protected method

protected defineCrossObject ( Object $objectDefinition, Configs $configs ) : boolean
$objectDefinition Jarves\Configuration\Object
$configs Jarves\Configuration\Configs
return boolean
    protected function defineCrossObject(Object $objectDefinition, Configs $configs)
    {
        $changed = false;
        $bundle = $objectDefinition->getBundle();
        $foreignObjectDefinition = $configs->getObject($this->getFieldDefinition()->getObject());
        $possibleObjectName = ucfirst($objectDefinition->getId()) . ucfirst($foreignObjectDefinition->getId());
        $possibleObjectKey = $bundle->getName() . '/' . $possibleObjectName;
        if (!($crossObjectKey = $this->getFieldDefinition()->getObjectRelationCrossObjectKey())) {
            $crossObjectKey = $possibleObjectKey;
        }
        $crossObject = $configs->getObject($crossObjectKey);
        if (!$crossObject) {
            if (!($crossObject = $configs->getObject($possibleObjectKey))) {
                $crossObject = new Object(null, $objectDefinition->getJarves());
                $crossObject->setId($possibleObjectName);
                $crossObject->setSearchable(false);
                $crossObject->setAutoCrud(false);
                $crossObject->setExcludeFromREST(true);
                $crossObject->setTable($objectDefinition->getTable() . '_' . Tools::camelcase2Underscore($foreignObjectDefinition->getId()));
                $changed = true;
            }
        }
        if (!$crossObject->isCrossRef()) {
            $crossObject->setCrossRef(true);
            $changed = true;
        }
        $leftFieldName = $this->getFieldDefinition()->getObjectRefRelationName() ?: $objectDefinition->getId();
        if (!$crossObject->getField($leftFieldName)) {
            $leftObjectField = new Field(null, $objectDefinition->getJarves());
            $leftObjectField->setId($leftFieldName);
            $leftObjectField->setType('object');
            $leftObjectField->setObject($objectDefinition->getKey());
            $leftObjectField->setObjectRelation(AbstractStorage::ONE_TO_ONE);
            $leftObjectField->setPrimaryKey(true);
            $crossObject->addField($leftObjectField);
            $changed = true;
        }
        if (!$crossObject->getField($this->getFieldDefinition()->getId())) {
            $rightObjectField = new Field(null, $objectDefinition->getJarves());
            $rightObjectField->setId($this->getFieldDefinition()->getId());
            $rightObjectField->setType('object');
            $rightObjectField->setObject($foreignObjectDefinition->getKey());
            $rightObjectField->setObjectRelation(AbstractStorage::ONE_TO_ONE);
            $rightObjectField->setPrimaryKey(true);
            $crossObject->addField($rightObjectField);
            $changed = true;
        }
        if (!$crossObject->getBundle()) {
            //we created a new object
            $bundle->addObject($crossObject);
        }
        return $changed;
    }