From a6e634f51f0e4c02999704228d1db2ea37c33a5b Mon Sep 17 00:00:00 2001 From: Lorenzo Giacomelli Date: Wed, 13 Jan 2016 17:01:32 +0100 Subject: [PATCH 1/2] MediaHandler in lavorazione --- oth/docs/memo/mediaCollection.txt | 3 + private/lib/media/HasMediaInterface.php | 22 ++- private/lib/media/HasMediaModel.php | 29 +++- private/lib/media/MediaHandler.php | 138 +++++++++++++++--- private/lib/media/MediaInterface.php | 2 +- private/lib/media/MediaModel.php | 2 +- .../media/mediaRenderers/MediaLocalVideo.php | 18 +++ 7 files changed, 188 insertions(+), 26 deletions(-) create mode 100644 oth/docs/memo/mediaCollection.txt create mode 100644 private/lib/media/mediaRenderers/MediaLocalVideo.php 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 From 8d351faa5e511e6be75419ad2c2984a27c7801b9 Mon Sep 17 00:00:00 2001 From: Lorenzo Giacomelli Date: Wed, 13 Jan 2016 18:20:44 +0100 Subject: [PATCH 2/2] MediaHandler, MediaModel e HasMediaModel da testare --- private/lib/dao/DaoSaveableInterface.php | 1 - private/lib/lib.inclusions.php | 2 +- private/lib/media/HasMediaInterface.php | 2 +- private/lib/media/MediaHandler.php | 23 ++++++++----- private/lib/media/MediaInterface.php | 14 -------- private/lib/media/MediaModel.php | 38 ++++++++++++++------ public/index.php | 44 +++++++++++++----------- 7 files changed, 68 insertions(+), 56 deletions(-) diff --git a/private/lib/dao/DaoSaveableInterface.php b/private/lib/dao/DaoSaveableInterface.php index c4257d1..758ce02 100644 --- a/private/lib/dao/DaoSaveableInterface.php +++ b/private/lib/dao/DaoSaveableInterface.php @@ -18,7 +18,6 @@ interface DaoSaveable { /** * Costruisce l'oggetto a partire dai dati raw di mongo - * @param string $collectionName Nome della collezione da cui proviene l'oggetto * @param stdClass $obj dati raw di mongo */ public static function buildFromSaveableObj($obj); diff --git a/private/lib/lib.inclusions.php b/private/lib/lib.inclusions.php index ab379af..a501767 100644 --- a/private/lib/lib.inclusions.php +++ b/private/lib/lib.inclusions.php @@ -31,7 +31,7 @@ require_once(dirname(__FILE__)."/dao/lib.inclusion.php"); require_once(dirname(__FILE__)."/task/lib.inclusion.php"); -// require_once(dirname(__FILE__)."/media/lib.inclusion.php"); +require_once(dirname(__FILE__)."/media/lib.inclusion.php"); // asdasdasd diff --git a/private/lib/media/HasMediaInterface.php b/private/lib/media/HasMediaInterface.php index b272a9c..5df27ab 100644 --- a/private/lib/media/HasMediaInterface.php +++ b/private/lib/media/HasMediaInterface.php @@ -30,7 +30,7 @@ interface HasMediaInterface{ * Setta il media principale * @param MediaModel $media */ - public function setMainMedia(MediaModel $media); + public function setMainMedia(MediaInterface $media); /** * Restituisce la reference (id) del main media diff --git a/private/lib/media/MediaHandler.php b/private/lib/media/MediaHandler.php index 317e2f0..ae06999 100644 --- a/private/lib/media/MediaHandler.php +++ b/private/lib/media/MediaHandler.php @@ -66,7 +66,8 @@ class MediaHandler{ $mediaId = $media->getReference(); if(sizeof($mediaArr)>0){ - if($key = array_search($mediaId, $mediaArr) !== false){ /*:TODO check con riky*/ + $key = array_search($mediaId, $mediaArr); + if($key !== false){ unset($mediaArr[$key]); $model->setMediaReferences($mediaArr); @@ -88,10 +89,19 @@ class MediaHandler{ } /** - * + * Setta l'owner al MediaModel + * @param HasMediaInterface $model + * @param MediaModel $media + */ + public static function setOwnerToMedia(HasMediaInterface $model, MediaModel $media){ + $media->setOwnerReference($model); + } + + /** + * * @param MediaInterface $media * @throws MediaException - * @return unknown + * @return DaoSaveable */ public static function getMediaOwnerFromMedia(MediaInterface $media){ $ownerRef = $media->getOwnerReference(); @@ -103,11 +113,6 @@ class MediaHandler{ } } - - public static function setMediaOwner(){ - - } - /** * * @param HasMediaInterface $model @@ -127,7 +132,7 @@ class MediaHandler{ * Prende in ingresso un HasMediaInterface ritorna un array di un elemento array("mainMedia"=>"&value"); * * @param HasMediaInterface $model - * @return multitype:NULL + * @return array */ public static function getMainMediaFromModel(HasMediaInterface $model){ $mainMedia = $model->getMainMediaReference(); diff --git a/private/lib/media/MediaInterface.php b/private/lib/media/MediaInterface.php index fbd7682..7f15804 100644 --- a/private/lib/media/MediaInterface.php +++ b/private/lib/media/MediaInterface.php @@ -1,20 +1,6 @@ array("label"=>"Youtube"), - self::TYPE_IMAGE=>array("label"=>"Image"), - self::TYPE_HTML5=>array("label"=>"Html5"), - self::TYPE_PDF=>array("label"=>"Pdf"), - self::TYPE_LOCALVIDEO=>array("label"=>"Local Video") - ); public function asText(); diff --git a/private/lib/media/MediaModel.php b/private/lib/media/MediaModel.php index 290d0cc..9ef44d4 100644 --- a/private/lib/media/MediaModel.php +++ b/private/lib/media/MediaModel.php @@ -1,33 +1,49 @@ array("label"=>"Youtube"), + self::TYPE_IMAGE=>array("label"=>"Image"), + self::TYPE_HTML5=>array("label"=>"Html5"), + self::TYPE_PDF=>array("label"=>"Pdf"), + self::TYPE_LOCALVIDEO=>array("label"=>"Local Video") + ); + + private $mediaRenderer; + public function __construct($saveableObject = null){ - if(property_exists($saveableObject, mediaType)){ - parent::__construct($saveableObject); - if ($this->type == self::TYPE_HTML5){ + parent::__construct($saveableObject); + if($this->hasProperty("mediaType")){ + if ($this->mediaType == self::TYPE_HTML5){ $this->mediaRenderer = new MediaHtml5($this); } - if ($this->type == self::TYPE_LOCALVIDEO){ + if ($this->mediaType == self::TYPE_LOCALVIDEO){ $this->mediaRenderer = new MediaLocalVideo($this); } - if ($this->type == self::TYPE_IMAGE){ + if ($this->mediaType == self::TYPE_IMAGE){ $this->mediaRenderer = new MediaImage($this); } - if ($this->type == self::TYPE_PDF){ + if ($this->mediaType == self::TYPE_PDF){ $this->mediaRenderer = new MediaPdf($this); } - if ($this->type == self::TYPE_YOUTUBE){ + if ($this->mediaType == self::TYPE_YOUTUBE){ $this->mediaRenderer = new MediaYoutube($this); } } else{ - throw new MediaException("Invalid media type for Media; mediatype '".$mediaType."'"); + throw new MediaException("Missing mediatype for Media in MediaModel construct"); } } - private function asText(){ + public function asText(){ return $this->mediaRenderer->asText(); } @@ -36,7 +52,7 @@ class MediaModel extends Model implements MediaInterface{ } public function getType(){ - return $this->type; + return $this->mediaType; } public function getTitle(){ @@ -57,5 +73,7 @@ class MediaModel extends Model implements MediaInterface{ public function getReference(){ return $this->id; } + + } ?> \ No newline at end of file diff --git a/public/index.php b/public/index.php index db0b2e5..4193e38 100644 --- a/public/index.php +++ b/public/index.php @@ -7,33 +7,37 @@ Creation Date: 22/dic/2015 require_once(dirname(__FILE__)."/load.php"); try { -// var_dump($dao->query("notizia")); - TestTask::setActive(false); - echo "

"; - $models = $dao->query("NotiziaModel"); - $model = reset($models); + $media = new MediaModel(); - var_dump($model); - echo "

"; - $model->immagini = array(); +// // var_dump($dao->query("notizia")); +// TestTask::setActive(false); +// echo "

"; - $model->immagini[] = "1.jpg"; - $model->immagini[] = "2.jpg"; - $model->about->giorno = "boh"; +// $models = $dao->query("NotiziaModel"); +// $model = reset($models); - if ($model->hasProperty("about")){ - echo "esiste"; - } - else { - echo "non esiste"; - } +// var_dump($model); +// echo "

"; - var_dump($model); - echo "

"; +// $model->immagini = array(); - $dao->save($model); +// $model->immagini[] = "1.jpg"; +// $model->immagini[] = "2.jpg"; +// $model->about->giorno = "boh"; + +// // if ($model->hasProperty("about")){ +// // echo "esiste"; +// // } +// // else { +// // echo "non esiste"; +// // } + +// var_dump($model); +// echo "

"; + +// $dao->save($model); } catch (Exception $ex){