Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/movies/model/rate.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
require_once '../../../apikey.php';

$token = new \Tmdb\ApiToken(TMDB_API_KEY);
$client = new \Tmdb\Client($token);
$client = new \Tmdb\Client($token, ['session_token' => new \Tmdb\GuestSessionToken(TMDB_GUEST_SESSION_TOKEN), 'log' => ['enabled' => true, 'handler' => new \Monolog\Handler\ChromePHPHandler()]]);

/**
$sessionToken = new \Tmdb\SessionToken(TMDB_SESSION_TOKEN);
Expand Down
4 changes: 2 additions & 2 deletions examples/tv/model/tv/latest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
* @copyright (c) 2013, Michael Roterman
* @version 0.0.1
*/
require_once '../../../vendor/autoload.php';
require_once '../../../apikey.php';
require_once '../../../../vendor/autoload.php';
require_once '../../../../apikey.php';

$token = new \Tmdb\ApiToken(TMDB_API_KEY);
$client = new \Tmdb\Client($token);
Expand Down
10 changes: 10 additions & 0 deletions lib/Tmdb/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ public function getAdapter()
return $this->options['adapter'];
}

/**
* Get the event dispatcher
*
* @return AdapterInterface
*/
public function getEventDispatcher()
{
return $this->options['event_dispatcher'];
}

/**
* @return array
*/
Expand Down
137 changes: 137 additions & 0 deletions lib/Tmdb/Event/HydrationEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
<?php
/**
* This file is part of the Tmdb PHP API created by Michael Roterman.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @package Tmdb
* @author Michael Roterman <michael@wtfz.net>
* @copyright (c) 2013, Michael Roterman
* @version 0.0.1
*/
namespace Tmdb\Event;

use Symfony\Component\EventDispatcher\Event;
use Tmdb\HttpClient\Request;
use Tmdb\HttpClient\Response;
use Tmdb\Model\AbstractModel;

class HydrationEvent extends Event
{
/**
* @var AbstractModel
*/
private $subject;

/**
* @var array
*/
private $data;

/**
* @var Request|null
*/
private $lastRequest;

/**
* @var Response|null
*/
private $lastResponse;

/**
* Constructor
*
* @param AbstractModel $subject
* @param array $data
*/
public function __construct(AbstractModel $subject, array $data = [])
{
$this->subject = $subject;
$this->data = $data;
}

/**
* @return AbstractModel
*/
public function getSubject()
{
return $this->subject;
}

/**
* @param AbstractModel $subject
* @return $this
*/
public function setSubject($subject)
{
$this->subject = $subject;

return $this;
}

/**
* @return array
*/
public function getData()
{
return $this->data;
}

/**
* @param array $data
* @return $this
*/
public function setData($data)
{
$this->data = $data;

return $this;
}

/**
* @return bool
*/
public function hasData()
{
return !empty($this->data);
}

/**
* @return Request
*/
public function getLastRequest()
{
return $this->lastRequest;
}

/**
* @param Request|null $lastRequest
* @return $this
*/
public function setLastRequest($lastRequest)
{
$this->lastRequest = $lastRequest;

return $this;
}

/**
* @return Response
*/
public function getLastResponse()
{
return $this->lastResponse;
}

/**
* @param Response|null $lastResponse
* @return $this
*/
public function setLastResponse($lastResponse)
{
$this->lastResponse = $lastResponse;

return $this;
}
}
72 changes: 72 additions & 0 deletions lib/Tmdb/Event/HydrationSubscriber.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php
/**
* This file is part of the Tmdb PHP API created by Michael Roterman.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @package Tmdb
* @author Michael Roterman <michael@wtfz.net>
* @copyright (c) 2013, Michael Roterman
* @version 0.0.1
*/
namespace Tmdb\Event;

use Tmdb\Common\ObjectHydrator;
use Tmdb\HttpClient\HttpClientEventSubscriber;

/**
* Class RequestSubscriber
* @package Tmdb\Event
*/
class HydrationSubscriber extends HttpClientEventSubscriber
{
/**
* Get subscribed events
*
* @return array
*/
public static function getSubscribedEvents()
{
return [
TmdbEvents::HYDRATE => 'hydrate',
];
}

/**
* Hydrate the subject with data
*
* @param HydrationEvent $event
* @return \Tmdb\Model\AbstractModel
*/
public function hydrate(HydrationEvent $event)
{
// Possibility to load serialized cache
$event->getDispatcher()->dispatch(TmdbEvents::BEFORE_HYDRATION, $event);

if ($event->isPropagationStopped()) {
return $event->getSubject();
}

$subject = $this->hydrateSubject($event);
$event->setSubject($subject);

// Possibility to cache the data
$event->getDispatcher()->dispatch(TmdbEvents::AFTER_HYDRATION, $event);

return $event->getSubject();
}

/**
* Hydrate the subject
*
* @param HydrationEvent $event
* @return \Tmdb\Model\AbstractModel
*/
public function hydrateSubject(HydrationEvent $event)
{
$objectHydrator = new ObjectHydrator();

return $objectHydrator->hydrate($event->getSubject(), $event->getData());
}
}
6 changes: 6 additions & 0 deletions lib/Tmdb/Event/TmdbEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@

final class TmdbEvents
{
/** Request */
const BEFORE_REQUEST = 'tmdb.before_request';
const REQUEST = 'tmdb.request';
const AFTER_REQUEST = 'tmdb.after_request';

/** Hydration */
const BEFORE_HYDRATION = 'tmdb.before_hydration';
const HYDRATE = 'tmdb.hydrate';
const AFTER_HYDRATION = 'tmdb.after_hydration';
}
43 changes: 38 additions & 5 deletions lib/Tmdb/Factory/AbstractFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
*/
namespace Tmdb\Factory;

use Tmdb\Common\ObjectHydrator;
use Tmdb\Event\HydrationEvent;
use Tmdb\Event\TmdbEvents;
use Tmdb\HttpClient\HttpClient;
use Tmdb\Model\AbstractModel;
use Tmdb\Model\Collection\ResultCollection;
use Tmdb\Model\Common\AccountStates;
Expand All @@ -26,6 +28,21 @@
*/
abstract class AbstractFactory
{
/**
* @var HttpClient
*/
protected $httpClient;

/**
* Constructor
*
* @param HttpClient $httpClient
*/
public function __construct(HttpClient $httpClient)
{
$this->httpClient = $httpClient;
}

/**
* Convert an array to an hydrated object
*
Expand All @@ -42,6 +59,16 @@ abstract public function create(array $data = []);
*/
abstract public function createCollection(array $data = []);

/**
* Get the http client
*
* @return HttpClient
*/
protected function getHttpClient()
{
return $this->httpClient;
}

/**
* Create a generic collection of data and map it on the class by it's static parameter $properties
*
Expand Down Expand Up @@ -179,14 +206,20 @@ public function createResult(array $data = [])
/**
* Hydrate the object with data
*
* @param AbstractModel $object
* @param AbstractModel $subject
* @param array $data
* @return AbstractModel
*/
protected function hydrate(AbstractModel $object, $data = [])
protected function hydrate(AbstractModel $subject, $data = [])
{
$objectHydrator = new ObjectHydrator();
$httpClient = $this->getHttpClient();

$event = new HydrationEvent($subject, $data);
$event->setLastRequest($httpClient->getLastRequest());
$event->setLastResponse($httpClient->getLastResponse());

$this->getHttpClient()->getEventDispatcher()->dispatch(TmdbEvents::HYDRATE, $event);

return $objectHydrator->hydrate($object, $data);
return $event->getSubject();
}
}
16 changes: 12 additions & 4 deletions lib/Tmdb/Factory/AccountFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/
namespace Tmdb\Factory;

use Tmdb\HttpClient\HttpClient;
use Tmdb\Model\Account;
use Tmdb\Model\Lists\Result;

Expand All @@ -36,11 +37,18 @@ class AccountFactory extends AbstractFactory
*/
private $tvFactory;

public function __construct()
/**
* Constructor
*
* @param HttpClient $httpClient
*/
public function __construct(HttpClient $httpClient)
{
$this->movieFactory = new MovieFactory();
$this->imageFactory = new ImageFactory();
$this->tvFactory = new TvFactory();
$this->movieFactory = new MovieFactory($httpClient);
$this->imageFactory = new ImageFactory($httpClient);
$this->tvFactory = new TvFactory($httpClient);

parent::__construct($httpClient);
}

/**
Expand Down
11 changes: 8 additions & 3 deletions lib/Tmdb/Factory/CollectionFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/
namespace Tmdb\Factory;

use Tmdb\HttpClient\HttpClient;
use Tmdb\Model\Collection;
use Tmdb\Model\Common\GenericCollection;

Expand All @@ -33,11 +34,15 @@ class CollectionFactory extends AbstractFactory

/**
* Constructor
*
* @param HttpClient $httpClient
*/
public function __construct()
public function __construct(HttpClient $httpClient)
{
$this->movieFactory = new MovieFactory();
$this->imageFactory = new ImageFactory();
$this->movieFactory = new MovieFactory($httpClient);
$this->imageFactory = new ImageFactory($httpClient);

parent::__construct($httpClient);
}

/**
Expand Down
Loading