/** * @param \Jarves\Configuration\Object $objectDefinition * @param Configs $configs * @return bool */ 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; }
public function testObjectBrowserColumns() { $xml = '<object id="View"> <label>Template View</label> <desc>Template views</desc> <storageService>\\Admin\\ObjectView</storageService> <labelField>name</labelField> <nested>true</nested> <fields> <field id="path" type="text" primaryKey="true"> <label>Path</label> </field> <field id="name" type="text"> <label>File name</label> </field> </fields> <browserColumns> <field id="path" type="text"> <label>Path</label> </field> <field id="name" type="text"> <label>File name</label> </field> </browserColumns> </object>'; $object = new Object(null, $this->getJarves()); $object->setId('View'); $object->setLabel('Template View'); $object->setDesc('Template views'); $object->setLabelField('name'); $object->setNested(true); $object->setStorageService('\\Admin\\ObjectView'); $field1 = new Field(null, $this->getJarves()); $field1->setId('path'); $field1->setPrimaryKey(true); $field1->setLabel('Path'); $field1->setType('text'); $field2 = new Field(null, $this->getJarves()); $field2->setId('name'); $field2->setLabel('File name'); $field2->setType('text'); $object->setFields(array($field1, $field2)); $field1 = new Field(null, $this->getJarves()); $field1->setId('path'); $field1->setLabel('Path'); $field1->setType('text'); $field2 = new Field(null, $this->getJarves()); $field2->setId('name'); $field2->setLabel('File name'); $field2->setType('text'); $object->setBrowserColumns(array($field1, $field2)); $reverse = new Object($xml, $this->getJarves()); $this->assertEquals($xml, $object->toXml()); $this->assertEquals($xml, $reverse->toXml()); }