2015-08-17 17:00:26 -07:00
< ? php
namespace Drupal\user ;
use Drupal\Core\Database\Connection ;
/**
* Defines the user data service .
*/
class UserData implements UserDataInterface {
/**
* The database connection to use .
*
* @ var \Drupal\Core\Database\Connection
*/
protected $connection ;
/**
* Constructs a new user data service .
*
* @ param \Drupal\Core\Database\Connection $connection
* The database connection to use .
*/
public function __construct ( Connection $connection ) {
$this -> connection = $connection ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function get ( $module , $uid = NULL , $name = NULL ) {
$query = $this -> connection -> select ( 'users_data' , 'ud' )
-> fields ( 'ud' )
-> condition ( 'module' , $module );
if ( isset ( $uid )) {
$query -> condition ( 'uid' , $uid );
}
if ( isset ( $name )) {
$query -> condition ( 'name' , $name );
}
$result = $query -> execute ();
// If $module, $uid, and $name was passed, return the value.
if ( isset ( $name ) && isset ( $uid )) {
$result = $result -> fetchAllAssoc ( 'uid' );
if ( isset ( $result [ $uid ])) {
return $result [ $uid ] -> serialized ? unserialize ( $result [ $uid ] -> value ) : $result [ $uid ] -> value ;
}
return NULL ;
}
// If $module and $uid was passed, return the name/value pairs.
elseif ( isset ( $uid )) {
$return = array ();
foreach ( $result as $record ) {
$return [ $record -> name ] = ( $record -> serialized ? unserialize ( $record -> value ) : $record -> value );
}
return $return ;
}
// If $module and $name was passed, return the uid/value pairs.
elseif ( isset ( $name )) {
$return = array ();
foreach ( $result as $record ) {
$return [ $record -> uid ] = ( $record -> serialized ? unserialize ( $record -> value ) : $record -> value );
}
return $return ;
}
// If only $module was passed, return data keyed by uid and name.
else {
$return = array ();
foreach ( $result as $record ) {
$return [ $record -> uid ][ $record -> name ] = ( $record -> serialized ? unserialize ( $record -> value ) : $record -> value );
}
return $return ;
}
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function set ( $module , $uid , $name , $value ) {
$serialized = 0 ;
if ( ! is_scalar ( $value )) {
$value = serialize ( $value );
$serialized = 1 ;
}
$this -> connection -> merge ( 'users_data' )
-> keys ( array (
'uid' => $uid ,
'module' => $module ,
'name' => $name ,
))
-> fields ( array (
'value' => $value ,
'serialized' => $serialized ,
))
-> execute ();
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function delete ( $module = NULL , $uid = NULL , $name = NULL ) {
$query = $this -> connection -> delete ( 'users_data' );
// Cast scalars to array so we can consistently use an IN condition.
if ( isset ( $module )) {
$query -> condition ( 'module' , ( array ) $module , 'IN' );
}
if ( isset ( $uid )) {
$query -> condition ( 'uid' , ( array ) $uid , 'IN' );
}
if ( isset ( $name )) {
$query -> condition ( 'name' , ( array ) $name , 'IN' );
}
$query -> execute ();
}
}