diff --git a/src/modules/storageServer/var/BasicStor.php b/src/modules/storageServer/var/BasicStor.php index 2c1daad33..f9a54edb5 100644 --- a/src/modules/storageServer/var/BasicStor.php +++ b/src/modules/storageServer/var/BasicStor.php @@ -159,23 +159,55 @@ class BasicStor { $res = BasicStor::RemoveObj($id, $forced); return $res; } + + $storedFile = StoredFile::Recall($id); + + if (is_null($storedFile) || PEAR::isError($storedFile)) { + return $storedFile; + } + if ($storedFile->isAccessed()) { + return PEAR::raiseError( + 'Cannot delete an object that is currently accessed.' + ); + } // move to trash: switch (BasicStor::GetObjType($id)) { + case "audioclip": + $playLists = $storedFile->getPlaylists(); + $item_gunid = $storedFile->getGunid(); + if( $playLists != NULL) { + + foreach($playLists as $key=>$val) { + $playList_id = BasicStor::IdFromGunidBigInt($val["gunid"]); + $playList_titles[] = BasicStor::bsGetMetadataValue($playList_id, "dc:title"); + } + return PEAR::raiseError( + 'Please remove this song from all playlists: ' . join(",", $playList_titles) + ); + } + break; + case "playlist": + if($storedFile->isScheduled()) { + return PEAR::raiseError( + 'Cannot delete an object that is scheduled to play.' + ); + } + break; + case "webstream": - $storedFile = StoredFile::Recall($id); - if (is_null($storedFile) || PEAR::isError($storedFile)) { - return $storedFile; - } - $res = $storedFile->setState('deleted'); - if (PEAR::isError($res)) { - return $res; - } + break; default: } - return TRUE; + + $res = $storedFile->setState('deleted'); + if (PEAR::isError($res)) { + return $res; + } + + return TRUE; } @@ -1491,7 +1523,7 @@ class BasicStor { /** - * Get local id from global id. + * Get local id from global id (in hex). * * @param string $p_gunid * Global id @@ -1504,6 +1536,21 @@ class BasicStor { global $CC_CONFIG; return $CC_DBC->getOne("SELECT id FROM ".$CC_CONFIG['filesTable']." WHERE gunid=x'$p_gunid'::bigint"); } + + /** + * Get local id from global id (big int). + * + * @param string $p_gunid + * Global id + * @return int + * Local id + */ + public static function IdFromGunidBigInt($p_gunid) + { + global $CC_DBC; + global $CC_CONFIG; + return $CC_DBC->getOne("SELECT id FROM ".$CC_CONFIG['filesTable']." WHERE gunid='$p_gunid'"); + } /** diff --git a/src/modules/storageServer/var/StoredFile.php b/src/modules/storageServer/var/StoredFile.php index dffb38987..828201391 100644 --- a/src/modules/storageServer/var/StoredFile.php +++ b/src/modules/storageServer/var/StoredFile.php @@ -331,7 +331,7 @@ class StoredFile { * @var int */ private $currentlyaccessing; - + /** * @var int */ @@ -1086,6 +1086,35 @@ class StoredFile { } return TRUE; } + + /** + * Returns gunIds of the playlists the stored file is in. + */ + public function getPlaylists() { + global $CC_CONFIG, $CC_DBC; + + $_SESSION['delete'] = "gunid: " . $this->gunid; + + $sql = "SELECT gunid " + ." FROM ".$CC_CONFIG['mdataTable'] + ." WHERE object='{$this->gunid}'"; + + $_SESSION['delete'] = $sql; + $playlists = $CC_DBC->getAll($sql); + + return $playlists; + } + + public function isScheduled() { + global $CC_CONFIG, $CC_DBC; + + $sql = "SELECT * " + ." FROM ".$CC_CONFIG['scheduleTable'] + ." WHERE ends > now() and playlist=x'{$this->gunid}'::bigint"; + $scheduled = $CC_DBC->getAll($sql); + + return $scheduled; + } /**