diff --git a/oth/docs/memo/mediaCollection.txt b/oth/docs/memo/mediaCollection.txt new file mode 100644 index 0000000..f411310 --- /dev/null +++ b/oth/docs/memo/mediaCollection.txt @@ -0,0 +1,3 @@ +MediaLocalVideo,MediaImage,Mediapdf {path} +MediaYoutube {link} +MediaHtml5 {code} \ No newline at end of file diff --git a/private/lib/media/HasMediaInterface.php b/private/lib/media/HasMediaInterface.php index be52276..b272a9c 100644 --- a/private/lib/media/HasMediaInterface.php +++ b/private/lib/media/HasMediaInterface.php @@ -3,13 +3,19 @@ interface HasMediaInterface{ /** - * Ritorna un oggetto reference contenente id e collection name + * Ritorna un oggetto reference contenente id e class * @return stdClass */ public function getReference(); /** - * Setta la referenza ai media + * Setta la referenza partendo da un array di oggetti media + * @param array $references + */ + public function setMedias(array $medias); + + /** + * Setta la referenza partendo da un array di id di media * @param array $references */ public function setMediaReferences(array $references); @@ -20,8 +26,16 @@ interface HasMediaInterface{ */ public function getMediaReferences(); - public function setMainMedia(); + /** + * Setta il media principale + * @param MediaModel $media + */ + public function setMainMedia(MediaModel $media); - public function getMainMedia(); + /** + * Restituisce la reference (id) del main media + * @return MongoId + */ + public function getMainMediaReference(); } ?> \ No newline at end of file diff --git a/private/lib/media/HasMediaModel.php b/private/lib/media/HasMediaModel.php index 980248a..04edcaa 100644 --- a/private/lib/media/HasMediaModel.php +++ b/private/lib/media/HasMediaModel.php @@ -9,7 +9,7 @@ abstract class HasMediaModel extends Model implements HasMediaInterface{ public function getReference(){ $rval = new stdClass(); - $rval->collection = static::getCollectionName(); + $rval->class = get_class($this); $rval->id = $this->id; return $rval; } @@ -18,7 +18,7 @@ abstract class HasMediaModel extends Model implements HasMediaInterface{ * (non-PHPdoc) * @see HasMediaInterface::setMediaReferences() */ - public function setMediaReferences(array $medias){ + public function setMedias(array $medias){ $this->mediaReferences = array(); if(sizeof($medias)>0){ foreach ($medias as $media){ @@ -29,6 +29,15 @@ abstract class HasMediaModel extends Model implements HasMediaInterface{ } } + public function setMediaReferences(array $references){ + $this->mediaReferences = array(); + if(sizeof($references)>0){ + foreach ($references as $reference){ + $this->mediaReferences[] = $reference; + } + } + } + /** * (non-PHPdoc) * @see HasMediaInterface::getMediaReferences() @@ -40,5 +49,21 @@ abstract class HasMediaModel extends Model implements HasMediaInterface{ return $this->mediaReferences; } + /** + * (non-PHPdoc) + * @see HasMediaInterface::setMainMedia() + */ + public function setMainMedia(MediaInterface $media){ + $this->mainMedia = $media->getReference(); + } + + /** + * (non-PHPdoc) + * @see HasMediaInterface::getMainMediaReference() + */ + public function getMainMediaReference(){ + return $this->mainMedia; + } + } ?> \ No newline at end of file diff --git a/private/lib/media/MediaHandler.php b/private/lib/media/MediaHandler.php index e7b4b1d..317e2f0 100644 --- a/private/lib/media/MediaHandler.php +++ b/private/lib/media/MediaHandler.php @@ -2,14 +2,15 @@ class MediaHandler{ + /** * - * @param HasMediaModel $news - * @param MediaModel $media + * @param HasMediaInterface $news + * @param MediaInterface $media * - * Ritorna un array coi i media della news + * Ritorna un array coi le reference dei media della news */ - public static function getMedias(HasMediaModel $model,MediaModel $media){ + public static function getMedias(HasMediaInterface $model,MediaInterface $media){ $newsReference = $model->getMediaReferences(); $rval = array(); @@ -20,27 +21,128 @@ class MediaHandler{ /** + * Aggiunge il media al model e controlla se il model ha un main media e se non lo ha glielo assegna * - * @param HasMediaModel $news - * @param MediaModel $media - * + * @param HasMediaInterface $model + * @param MediaInterface $media + * @throws MediaException */ - public function addMedia(HasMediaModel $news, MediaModel $media){ - $newsReference = $news->getReference(); - $media->newsReference = $newsReference; + public static function addMedia(HasMediaInterface $model, MediaInterface $media){ + if(!$model->hasProperty("id")){ + throw new MediaException("Invalid HasMediaInterface passed to MediaHandler::addMedia (no property ID)"); + } + if(!$media->hasProperty("id")){ + throw new MediaException("Invalid MediaInterface passed to MediaHandler::addMedia (no property ID)"); + } - $news->media = array($media->getType=>$media->id); - $dao->save($media); - $dao->save($news); + try{ + $mediaArr = array(); + $mediaArr = $model->getMediaReferences(); + if(!in_array($media->getReference(), $mediaArr)){ + $mediaArr[] = $media->getReference(); + $model->setMediaReferences($mediaArr); + + GlobalVariables::get("dao")->save($model); + + $media->setOwner($model); + GlobalVariables::get("dao")->save($media); + } + }catch(CoreException $ex){ + throw new MediaException("Error while saving in MediaHandler::addMedia (".$ex->getMessage().")"); + } } - public function deleteMedia(HasMediaModel $model, MediaModel $media){ - $newsReference = $model->getReference(); - $mediaId = $media->id; - - $newsArr = $dao->query($model->getCollectionName(),array("media"=>$media->id)); + /** + * Elimina l'id del media dal model e deleta il media + * + * @param HasMediaInterface $model + * @param MediaInterface $media + * @throws MediaException + */ + public static function deleteMedia(HasMediaInterface $model, MediaInterface $media){ + try{ + $mediaArr = array(); + $mediaArr = $model->getMediaReferences(); + $mediaId = $media->getReference(); + + if(sizeof($mediaArr)>0){ + if($key = array_search($mediaId, $mediaArr) !== false){ /*:TODO check con riky*/ + unset($mediaArr[$key]); + $model->setMediaReferences($mediaArr); + + GlobalVariables::get("dao")->save($model); + + GlobalVariables::get("dao")->delete($media); + } + else{ + throw new MediaException("Trying to delete invalid media from a model in MediaHandler::deleteMedia"); + } + } + else{ + throw new MediaException("This HasMediaInterface has no media in it '".$model->id."' sizeof on mediaReference failed in MediaHandler::deleteMedia"); + } + + }catch(CoreException $ex){ + throw new MediaException("Error while deleting in MediaHandler::deleteMedia (".$ex->getMessage().")"); + } } + /** + * + * @param MediaInterface $media + * @throws MediaException + * @return unknown + */ + public static function getMediaOwnerFromMedia(MediaInterface $media){ + $ownerRef = $media->getOwnerReference(); + try{ + $owner = GlobalVariables::get("dao")->getFirst($ownerRef->class,array("id"=>$ownerRef->id)); + return $owner; + }catch(CoreException $ex){ + throw new MediaException("Invalid Media Reference trying get Media Owner in MediaHandler::getMEdiaOwner"); + } + } + + + public static function setMediaOwner(){ + + } + + /** + * + * @param HasMediaInterface $model + * @param MediaInterface $media + * @throws MediaException + */ + public static function setMainMediaToModel(HasMediaInterface $model, MediaInterface $media){ + try{ + $model->setMainMedia($media); + GlobalVariables::get("dao")->save($model); + }catch(CoreException $ex){ + throw new MediaException("Error while trying to save an HasMediaInterface in ModelHandler::setMainMedia"); + } + } + + /** + * Prende in ingresso un HasMediaInterface ritorna un array di un elemento array("mainMedia"=>"&value"); + * + * @param HasMediaInterface $model + * @return multitype:NULL + */ + public static function getMainMediaFromModel(HasMediaInterface $model){ + $mainMedia = $model->getMainMediaReference(); + $modelRef = $model->getReference(); + + $rval = array(); + + $tmp = GlobalVariables::get("dao")->getFirst($modelRef->class,array("id"=>$modelRef->id)); + + if(!is_null($tmp)){ + $rval["mainMedia"] = $tmp->mainMedia; + } + + return $rval; + } } diff --git a/private/lib/media/MediaInterface.php b/private/lib/media/MediaInterface.php index e9001da..fbd7682 100644 --- a/private/lib/media/MediaInterface.php +++ b/private/lib/media/MediaInterface.php @@ -24,7 +24,7 @@ interface MediaInterface{ public function getTitle(); - public function setOwner(HasMediaInterface $model); + public function setOwnerReference(HasMediaInterface $model); public function getOwnerReference(); public function getReference(); diff --git a/private/lib/media/MediaModel.php b/private/lib/media/MediaModel.php index dd8f25f..290d0cc 100644 --- a/private/lib/media/MediaModel.php +++ b/private/lib/media/MediaModel.php @@ -47,7 +47,7 @@ class MediaModel extends Model implements MediaInterface{ return "media"; } - public function setOwner(HasMediaInterface $model){ + public function setOwnerReference(HasMediaInterface $model){ $this->owner = $model->getReference(); } public function getOwnerReference(){ diff --git a/private/lib/media/mediaRenderers/MediaLocalVideo.php b/private/lib/media/mediaRenderers/MediaLocalVideo.php new file mode 100644 index 0000000..cc7cd88 --- /dev/null +++ b/private/lib/media/mediaRenderers/MediaLocalVideo.php @@ -0,0 +1,18 @@ +modelRef = $model; + } + + public function asText(){ + return $this->modelRef->path; + } + + public function render(){ + echo $this->asText(); + } +} +?> \ No newline at end of file