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 were 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;
52 // If $module and $uid were passed, return data keyed by name.
54 foreach ($result as $record) {
55 $return[$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
59 // If $module and $name were passed, return data keyed by uid.
61 foreach ($result as $record) {
62 $return[$record->uid] = ($record->serialized ? unserialize($record->value) : $record->value);
66 // If only $module was passed, return data keyed by uid and name.
67 foreach ($result as $record) {
68 $return[$record->uid][$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
76 public function set($module, $uid, $name, $value) {
77 $serialized = (int) !is_scalar($value);
79 $value = serialize($value);
81 $this->connection->merge('users_data')
89 'serialized' => $serialized,
97 public function delete($module = NULL, $uid = NULL, $name = NULL) {
98 $query = $this->connection->delete('users_data');
99 // Cast scalars to array so we can consistently use an IN condition.
100 if (isset($module)) {
101 $query->condition('module', (array) $module, 'IN');
104 $query->condition('uid', (array) $uid, 'IN');
107 $query->condition('name', (array) $name, 'IN');