Upgraded drupal core with security updates
[yaffs-website] / web / core / modules / user / src / UserData.php
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     // If $module and $uid were passed, return data keyed by name.
52     elseif (isset($uid)) {
53       $return = [];
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     elseif (isset($name)) {
61       $return = [];
62       foreach ($result as $record) {
63         $return[$record->uid] = ($record->serialized ? unserialize($record->value) : $record->value);
64       }
65       return $return;
66     }
67     // If only $module was passed, return data keyed by uid and name.
68     else {
69       $return = [];
70       foreach ($result as $record) {
71         $return[$record->uid][$record->name] = ($record->serialized ? unserialize($record->value) : $record->value);
72       }
73       return $return;
74     }
75   }
76
77   /**
78    * {@inheritdoc}
79    */
80   public function set($module, $uid, $name, $value) {
81     $serialized = 0;
82     if (!is_scalar($value)) {
83       $value = serialize($value);
84       $serialized = 1;
85     }
86     $this->connection->merge('users_data')
87       ->keys([
88         'uid' => $uid,
89         'module' => $module,
90         'name' => $name,
91       ])
92       ->fields([
93         'value' => $value,
94         'serialized' => $serialized,
95       ])
96       ->execute();
97   }
98
99   /**
100    * {@inheritdoc}
101    */
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');
107     }
108     if (isset($uid)) {
109       $query->condition('uid', (array) $uid, 'IN');
110     }
111     if (isset($name)) {
112       $query->condition('name', (array) $name, 'IN');
113     }
114     $query->execute();
115   }
116
117 }