annotate core/modules/user/src/UserData.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
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 }