5 use Drupal\Core\Database\Connection;
8 * Defines the user data service.
10 class UserData implements UserDataInterface {
13 * The database connection to use.
15 * @var \Drupal\Core\Database\Connection
17 protected $connection;
20 * Constructs a new user data service.
22 * @param \Drupal\Core\Database\Connection $connection
23 * The database connection to use.
25 public function __construct(Connection $connection) {
26 $this->connection = $connection;
32 public function get($module, $uid = NULL, $name = NULL) {
33 $query = $this->connection->select('users_data', 'ud')
35 ->condition('module', $module);
37 $query->condition('uid', $uid);
40 $query->condition('name', $name);
42 $result = $query->execute();
43 // If $module, $uid, and $name was passed, return the value.
44 if (isset($name) && isset($uid)) {
45 $result = $result->fetchAllAssoc('uid');
46 if (isset($result[$uid])) {
47 return $result[$uid]->serialized ? unserialize($result[$uid]->value) : $result[$uid]->value;
51 // If $module and $uid was passed, return the name/value pairs.
52 elseif (isset($uid)) {
54 foreach ($result as $record) {
55 $return[$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
59 // If $module and $name was passed, return the uid/value pairs.
60 elseif (isset($name)) {
62 foreach ($result as $record) {
63 $return[$record->uid] = ($record->serialized ? unserialize($record->value) : $record->value);
67 // If only $module was passed, return data keyed by uid and name.
70 foreach ($result as $record) {
71 $return[$record->uid][$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
80 public function set($module, $uid, $name, $value) {
82 if (!is_scalar($value)) {
83 $value = serialize($value);
86 $this->connection->merge('users_data')
94 'serialized' => $serialized,
102 public function delete($module = NULL, $uid = NULL, $name = NULL) {
103 $query = $this->connection->delete('users_data');
104 // Cast scalars to array so we can consistently use an IN condition.
105 if (isset($module)) {
106 $query->condition('module', (array) $module, 'IN');
109 $query->condition('uid', (array) $uid, 'IN');
112 $query->condition('name', (array) $name, 'IN');