metadataRepository = new \lib\Metadata\Repository\Metadata(); $this->metadataFieldRepository = new \lib\Metadata\Repository\MetadataField(); } /** * * @return Model\Metadata */ public function getMetadata() { return $this->metadataRepository->findByObjectIdAndType($this->id, get_class($this)); } /** * * @param Model\Metadata $metadata */ public function deleteMetadata(Model\Metadata $metadata) { $this->metadataRepository->remove($metadata); } public function addMetadata(\lib\Metadata\Model\MetadataField $field, $data) { $metadata = new \lib\Metadata\Model\Metadata(); $metadata->setField($field); $metadata->setObjectId($this->id); $metadata->setType(get_class($this)); $metadata->setData($data); $this->metadataRepository->add($metadata); } public function updateOrInsertMetadata(\lib\Metadata\Model\MetadataField $field, $data) { /* @var $metadata Model\Metadata */ $metadata = $this->metadataRepository->findByObjectIdAndFieldAndType($this->id, $field, get_class($this)); if($metadata) { $object = reset($metadata); $object->setData($data); $this->metadataRepository->update($object); } else { $this->addMetadata($field, $data); } } /** * * @param type $name * @param type $public * @return \lib\Metadata\Model\MetadataField */ protected function createField($name, $public) { $field = new \lib\Metadata\Model\MetadataField(); $field->setName($name); if(!$public) { $field->hide(); } $this->metadataFieldRepository->add($field); return $field; } /** * * @param string $propertie * @param boolean $public * @return Model\MetadataField */ public function getField($propertie, $public = true) { $fields = $this->metadataFieldRepository->findByName($propertie); if(count($fields)) { $field = reset($fields); } else { $field = $this->createField($propertie, $public); } return $field; } }