/** * 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 MetadataErrors::METADATA_PROFILE_NOT_FOUND * @throws MetadataErrors::METADATA_UNABLE_TO_TRANSFORM * @throws MetadataErrors::METADATA_TRANSFORMING * @throws MetadataErrors::METADATA_PROFILE_FILE_NOT_FOUND */ function updateAction($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) { $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id); if (!$dbMetadataProfile) { throw new KalturaAPIException(MetadataErrors::METADATA_PROFILE_NOT_FOUND, $id); } if ($dbMetadataProfile->getStatus() != MetadataProfile::STATUS_ACTIVE) { throw new KalturaAPIException(MetadataErrors::METADATA_TRANSFORMING); } if ($xsdData) { if (!kMetadataProfileManager::validateXsdData($xsdData, $errorMessage)) { throw new KalturaAPIException(MetadataErrors::INVALID_METADATA_PROFILE_SCHEMA, $errorMessage); } kMetadataManager::validateProfileFields($this->getPartnerId(), $xsdData); } $dbMetadataProfile = $metadataProfile->toUpdatableObject($dbMetadataProfile); $key = $dbMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION); $oldXsd = kFileSyncUtils::file_get_contents($key, true, false); if (!$oldXsd) { throw new KalturaAPIException(MetadataErrors::METADATA_PROFILE_FILE_NOT_FOUND, $id); } if ($xsdData) { $xsdData = html_entity_decode($xsdData); $dbMetadataProfile->setXsdData($xsdData); } if (!is_null($viewsData) && $viewsData != '') { $viewsData = html_entity_decode($viewsData); $dbMetadataProfile->setViewesData($viewsData); } if ($xsdData) { try { kMetadataManager::diffMetadataProfile($dbMetadataProfile, $oldXsd, $xsdData); } catch (kXsdException $e) { throw new KalturaAPIException(MetadataErrors::METADATA_UNABLE_TO_TRANSFORM, $e->getMessage()); } $dbMetadataProfile->save(); } else { if (!is_null($viewsData) && $viewsData != '') { $dbMetadataProfile->save(); } } $metadataProfile->fromObject($dbMetadataProfile, $this->getResponseProfile()); return $metadataProfile; }
/** * 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); } $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 = 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($dbMetadataProfile); $metadataProfile->fromObject($dbMetadataProfile); return $metadataProfile; }