2015-08-17 17:00:26 -07:00
< ? php
/**
* Zend Framework ( http :// framework . zend . com / )
*
* @ link http :// github . com / zendframework / zf2 for the canonical source repository
* @ copyright Copyright ( c ) 2005 - 2015 Zend Technologies USA Inc . ( http :// www . zend . com )
* @ license http :// framework . zend . com / license / new - bsd New BSD License
*/
namespace Zend\Feed\PubSubHubbub\Model ;
use DateInterval ;
use DateTime ;
use Zend\Feed\PubSubHubbub ;
class Subscription extends AbstractModel implements SubscriptionPersistenceInterface
{
/**
* Common DateTime object to assist with unit testing
*
* @ var DateTime
*/
protected $now ;
/**
* Save subscription to RDMBS
*
* @ param array $data
* @ return bool
* @ throws PubSubHubbub\Exception\InvalidArgumentException
*/
public function setSubscription ( array $data )
{
2017-04-13 15:53:35 +01:00
if ( ! isset ( $data [ 'id' ])) {
2015-08-17 17:00:26 -07:00
throw new PubSubHubbub\Exception\InvalidArgumentException (
'ID must be set before attempting a save'
);
}
2015-10-08 11:40:12 -07:00
$result = $this -> db -> select ([ 'id' => $data [ 'id' ]]);
2015-08-17 17:00:26 -07:00
if ( $result && ( 0 < count ( $result ))) {
$data [ 'created_time' ] = $result -> current () -> created_time ;
$now = $this -> getNow ();
if ( array_key_exists ( 'lease_seconds' , $data )
&& $data [ 'lease_seconds' ]
) {
$data [ 'expiration_time' ] = $now -> add ( new DateInterval ( 'PT' . $data [ 'lease_seconds' ] . 'S' ))
-> format ( 'Y-m-d H:i:s' );
}
$this -> db -> update (
$data ,
2015-10-08 11:40:12 -07:00
[ 'id' => $data [ 'id' ]]
2015-08-17 17:00:26 -07:00
);
return false ;
}
$this -> db -> insert ( $data );
return true ;
}
/**
* Get subscription by ID / key
*
* @ param string $key
* @ return array
* @ throws PubSubHubbub\Exception\InvalidArgumentException
*/
public function getSubscription ( $key )
{
2017-04-13 15:53:35 +01:00
if ( empty ( $key ) || ! is_string ( $key )) {
2015-08-17 17:00:26 -07:00
throw new PubSubHubbub\Exception\InvalidArgumentException ( 'Invalid parameter "key"'
. ' of "' . $key . '" must be a non-empty string' );
}
2015-10-08 11:40:12 -07:00
$result = $this -> db -> select ([ 'id' => $key ]);
2018-11-23 12:29:20 +00:00
if ( $result && count ( $result )) {
2015-08-17 17:00:26 -07:00
return $result -> current () -> getArrayCopy ();
}
return false ;
}
/**
* Determine if a subscription matching the key exists
*
* @ param string $key
* @ return bool
* @ throws PubSubHubbub\Exception\InvalidArgumentException
*/
public function hasSubscription ( $key )
{
2017-04-13 15:53:35 +01:00
if ( empty ( $key ) || ! is_string ( $key )) {
2015-08-17 17:00:26 -07:00
throw new PubSubHubbub\Exception\InvalidArgumentException ( 'Invalid parameter "key"'
. ' of "' . $key . '" must be a non-empty string' );
}
2015-10-08 11:40:12 -07:00
$result = $this -> db -> select ([ 'id' => $key ]);
2018-11-23 12:29:20 +00:00
if ( $result && count ( $result )) {
2015-08-17 17:00:26 -07:00
return true ;
}
return false ;
}
/**
* Delete a subscription
*
* @ param string $key
* @ return bool
*/
public function deleteSubscription ( $key )
{
2015-10-08 11:40:12 -07:00
$result = $this -> db -> select ([ 'id' => $key ]);
2018-11-23 12:29:20 +00:00
if ( $result && count ( $result )) {
2015-08-17 17:00:26 -07:00
$this -> db -> delete (
2015-10-08 11:40:12 -07:00
[ 'id' => $key ]
2015-08-17 17:00:26 -07:00
);
return true ;
}
return false ;
}
/**
* Get a new DateTime or the one injected for testing
*
* @ return DateTime
*/
public function getNow ()
{
if ( null === $this -> now ) {
return new DateTime ();
}
return $this -> now ;
}
/**
* Set a DateTime instance for assisting with unit testing
*
* @ param DateTime $now
* @ return Subscription
*/
public function setNow ( DateTime $now )
{
$this -> now = $now ;
return $this ;
}
}