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;
51 // If $module and $uid were passed, return data keyed by name.
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 were passed, return data keyed by uid.
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) {
81 $serialized = (int) !is_scalar($value);
83 $value = serialize($value);
85 $this->connection->merge('users_data')
93 'serialized' => $serialized,
101 public function delete($module = NULL, $uid = NULL, $name = NULL) {
102 $query = $this->connection->delete('users_data');
103 // Cast scalars to array so we can consistently use an IN condition.
104 if (isset($module)) {
105 $query->condition('module', (array) $module, 'IN');
108 $query->condition('uid', (array) $uid, 'IN');
111 $query->condition('name', (array) $name, 'IN');