Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\user;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Database\Connection;
|
Chris@0
|
6
|
Chris@0
|
7 /**
|
Chris@0
|
8 * Defines the user data service.
|
Chris@0
|
9 */
|
Chris@0
|
10 class UserData implements UserDataInterface {
|
Chris@0
|
11
|
Chris@0
|
12 /**
|
Chris@0
|
13 * The database connection to use.
|
Chris@0
|
14 *
|
Chris@0
|
15 * @var \Drupal\Core\Database\Connection
|
Chris@0
|
16 */
|
Chris@0
|
17 protected $connection;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * Constructs a new user data service.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @param \Drupal\Core\Database\Connection $connection
|
Chris@0
|
23 * The database connection to use.
|
Chris@0
|
24 */
|
Chris@0
|
25 public function __construct(Connection $connection) {
|
Chris@0
|
26 $this->connection = $connection;
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * {@inheritdoc}
|
Chris@0
|
31 */
|
Chris@0
|
32 public function get($module, $uid = NULL, $name = NULL) {
|
Chris@0
|
33 $query = $this->connection->select('users_data', 'ud')
|
Chris@0
|
34 ->fields('ud')
|
Chris@0
|
35 ->condition('module', $module);
|
Chris@0
|
36 if (isset($uid)) {
|
Chris@0
|
37 $query->condition('uid', $uid);
|
Chris@0
|
38 }
|
Chris@0
|
39 if (isset($name)) {
|
Chris@0
|
40 $query->condition('name', $name);
|
Chris@0
|
41 }
|
Chris@0
|
42 $result = $query->execute();
|
Chris@0
|
43 // If $module, $uid, and $name were passed, return the value.
|
Chris@0
|
44 if (isset($name) && isset($uid)) {
|
Chris@0
|
45 $result = $result->fetchAllAssoc('uid');
|
Chris@0
|
46 if (isset($result[$uid])) {
|
Chris@0
|
47 return $result[$uid]->serialized ? unserialize($result[$uid]->value) : $result[$uid]->value;
|
Chris@0
|
48 }
|
Chris@0
|
49 return NULL;
|
Chris@0
|
50 }
|
Chris@14
|
51 $return = [];
|
Chris@0
|
52 // If $module and $uid were passed, return data keyed by name.
|
Chris@14
|
53 if (isset($uid)) {
|
Chris@0
|
54 foreach ($result as $record) {
|
Chris@0
|
55 $return[$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
|
Chris@0
|
56 }
|
Chris@0
|
57 return $return;
|
Chris@0
|
58 }
|
Chris@0
|
59 // If $module and $name were passed, return data keyed by uid.
|
Chris@14
|
60 if (isset($name)) {
|
Chris@0
|
61 foreach ($result as $record) {
|
Chris@0
|
62 $return[$record->uid] = ($record->serialized ? unserialize($record->value) : $record->value);
|
Chris@0
|
63 }
|
Chris@0
|
64 return $return;
|
Chris@0
|
65 }
|
Chris@0
|
66 // If only $module was passed, return data keyed by uid and name.
|
Chris@14
|
67 foreach ($result as $record) {
|
Chris@14
|
68 $return[$record->uid][$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
|
Chris@0
|
69 }
|
Chris@14
|
70 return $return;
|
Chris@0
|
71 }
|
Chris@0
|
72
|
Chris@0
|
73 /**
|
Chris@0
|
74 * {@inheritdoc}
|
Chris@0
|
75 */
|
Chris@0
|
76 public function set($module, $uid, $name, $value) {
|
Chris@0
|
77 $serialized = (int) !is_scalar($value);
|
Chris@0
|
78 if ($serialized) {
|
Chris@0
|
79 $value = serialize($value);
|
Chris@0
|
80 }
|
Chris@0
|
81 $this->connection->merge('users_data')
|
Chris@0
|
82 ->keys([
|
Chris@0
|
83 'uid' => $uid,
|
Chris@0
|
84 'module' => $module,
|
Chris@0
|
85 'name' => $name,
|
Chris@0
|
86 ])
|
Chris@0
|
87 ->fields([
|
Chris@0
|
88 'value' => $value,
|
Chris@0
|
89 'serialized' => $serialized,
|
Chris@0
|
90 ])
|
Chris@0
|
91 ->execute();
|
Chris@0
|
92 }
|
Chris@0
|
93
|
Chris@0
|
94 /**
|
Chris@0
|
95 * {@inheritdoc}
|
Chris@0
|
96 */
|
Chris@0
|
97 public function delete($module = NULL, $uid = NULL, $name = NULL) {
|
Chris@0
|
98 $query = $this->connection->delete('users_data');
|
Chris@0
|
99 // Cast scalars to array so we can consistently use an IN condition.
|
Chris@0
|
100 if (isset($module)) {
|
Chris@0
|
101 $query->condition('module', (array) $module, 'IN');
|
Chris@0
|
102 }
|
Chris@0
|
103 if (isset($uid)) {
|
Chris@0
|
104 $query->condition('uid', (array) $uid, 'IN');
|
Chris@0
|
105 }
|
Chris@0
|
106 if (isset($name)) {
|
Chris@0
|
107 $query->condition('name', (array) $name, 'IN');
|
Chris@0
|
108 }
|
Chris@0
|
109 $query->execute();
|
Chris@0
|
110 }
|
Chris@0
|
111
|
Chris@0
|
112 }
|