/** * Update an existing metadata object * * @action update * @param int $id * @param KalturaMetadataProfile $metadataProfile * @param string $xsdData XSD metadata definition * @param string $viewsData UI views definition * @return KalturaMetadataProfile * @throws KalturaErrors::INVALID_OBJECT_ID * @throws MetadataErrors::METADATA_UNABLE_TO_TRANSFORM * @throws MetadataErrors::METADATA_TRANSFORMING */ function updateAction($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) { $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id); if (!$dbMetadataProfile) { throw new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $id); } if ($dbMetadataProfile->getStatus() != MetadataProfile::STATUS_ACTIVE) { throw new KalturaAPIException(MetadataErrors::METADATA_TRANSFORMING); } kMetadataManager::validateMetadataProfileField($this->getPartnerId(), $xsdData, false, $dbMetadataProfile->getObjectType(), $id); $dbMetadataProfile = $metadataProfile->toUpdatableObject($dbMetadataProfile); $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION); $oldXsd = kFileSyncUtils::getLocalFilePathForKey($key); $oldVersion = $dbMetadataProfile->getVersion(); if ($xsdData) { $xsdData = html_entity_decode($xsdData); $dbMetadataProfile->incrementVersion(); } if (!is_null($viewsData) && $viewsData != '') { $viewsData = html_entity_decode($viewsData); $dbMetadataProfile->incrementViewsVersion(); } if ($xsdData) { $xsdPath = sys_get_temp_dir() . '/' . uniqid() . '.xsd'; file_put_contents($xsdPath, $xsdData); try { kMetadataManager::diffMetadataProfile($dbMetadataProfile, $oldVersion, $oldXsd, $dbMetadataProfile->getVersion(), $xsdPath); } catch (kXsdException $e) { throw new KalturaAPIException(MetadataErrors::METADATA_UNABLE_TO_TRANSFORM, $e->getMessage()); } $dbMetadataProfile->save(); $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION); kFileSyncUtils::moveFromFile($xsdPath, $key); } else { $dbMetadataProfile->save(); } if (!is_null($viewsData) && $viewsData != '') { $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_VIEWS); kFileSyncUtils::file_put_contents($key, $viewsData); } kMetadataManager::parseProfileSearchFields($this->getPartnerId(), $dbMetadataProfile); $metadataProfile->fromObject($dbMetadataProfile); return $metadataProfile; }