Mercurial > hg > cmmr2012-drupal-site
comparison core/modules/user/src/UserData.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\user; | |
4 | |
5 use Drupal\Core\Database\Connection; | |
6 | |
7 /** | |
8 * Defines the user data service. | |
9 */ | |
10 class UserData implements UserDataInterface { | |
11 | |
12 /** | |
13 * The database connection to use. | |
14 * | |
15 * @var \Drupal\Core\Database\Connection | |
16 */ | |
17 protected $connection; | |
18 | |
19 /** | |
20 * Constructs a new user data service. | |
21 * | |
22 * @param \Drupal\Core\Database\Connection $connection | |
23 * The database connection to use. | |
24 */ | |
25 public function __construct(Connection $connection) { | |
26 $this->connection = $connection; | |
27 } | |
28 | |
29 /** | |
30 * {@inheritdoc} | |
31 */ | |
32 public function get($module, $uid = NULL, $name = NULL) { | |
33 $query = $this->connection->select('users_data', 'ud') | |
34 ->fields('ud') | |
35 ->condition('module', $module); | |
36 if (isset($uid)) { | |
37 $query->condition('uid', $uid); | |
38 } | |
39 if (isset($name)) { | |
40 $query->condition('name', $name); | |
41 } | |
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; | |
48 } | |
49 return NULL; | |
50 } | |
51 $return = []; | |
52 // If $module and $uid were passed, return data keyed by name. | |
53 if (isset($uid)) { | |
54 foreach ($result as $record) { | |
55 $return[$record->name] = ($record->serialized ? unserialize($record->value) : $record->value); | |
56 } | |
57 return $return; | |
58 } | |
59 // If $module and $name were passed, return data keyed by uid. | |
60 if (isset($name)) { | |
61 foreach ($result as $record) { | |
62 $return[$record->uid] = ($record->serialized ? unserialize($record->value) : $record->value); | |
63 } | |
64 return $return; | |
65 } | |
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); | |
69 } | |
70 return $return; | |
71 } | |
72 | |
73 /** | |
74 * {@inheritdoc} | |
75 */ | |
76 public function set($module, $uid, $name, $value) { | |
77 $serialized = (int) !is_scalar($value); | |
78 if ($serialized) { | |
79 $value = serialize($value); | |
80 } | |
81 $this->connection->merge('users_data') | |
82 ->keys([ | |
83 'uid' => $uid, | |
84 'module' => $module, | |
85 'name' => $name, | |
86 ]) | |
87 ->fields([ | |
88 'value' => $value, | |
89 'serialized' => $serialized, | |
90 ]) | |
91 ->execute(); | |
92 } | |
93 | |
94 /** | |
95 * {@inheritdoc} | |
96 */ | |
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'); | |
102 } | |
103 if (isset($uid)) { | |
104 $query->condition('uid', (array) $uid, 'IN'); | |
105 } | |
106 if (isset($name)) { | |
107 $query->condition('name', (array) $name, 'IN'); | |
108 } | |
109 $query->execute(); | |
110 } | |
111 | |
112 } |