ILIAS  trunk Revision v12.0_alpha-33-ge186251a14d
DatabaseDataRepository.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\User\Settings;
22
24{
25 private const string TABLE_NAME = 'usr_pref';
26 public function __construct(
27 private readonly \ilDBInterface $db
28 ) {
29 }
30
31 public function getFor(int $user_id): array
32 {
33 $query = $this->db->queryF(
34 'SELECT * FROM ' . self::TABLE_NAME . ' WHERE usr_id = %s',
35 ['integer'],
36 [$user_id]
37 );
38
39 $setting_values = [];
40 while ($row = $this->db->fetchObject($query)) {
41 $setting_values[$row->keyword] = $row->value;
42 }
43
44 return $setting_values;
45 }
46
47 public function deleteFor(int $user_id): void
48 {
49 $this->db->manipulateF(
50 'DELETE FROM ' . self::TABLE_NAME . ' WHERE usr_id = %s',
52 [$user_id]
53 );
54 }
55
56 public function deleteSingleFor(int $user_id, string $key): void
57 {
58 $this->db->manipulateF(
59 'DELETE FROM ' . self::TABLE_NAME . ' WHERE usr_id = %s AND keyword = %s',
61 [$user_id, $key]
62 );
63 }
64
65 public function storeFor(int $user_id, array $settings_array): void
66 {
67 $query = 'INSERT INTO ' . self::TABLE_NAME . ' VALUES ' . implode(
68 ', ',
69 array_map(
70 fn(string $v) => '('
71 . $this->db->quote($user_id, \ilDBConstants::T_INTEGER) . ', '
72 . $this->db->quote($v, \ilDBConstants::T_TEXT) . ', '
73 . $this->db->quote($settings_array[$v], \ilDBConstants::T_TEXT)
74 . ')',
75 array_keys($settings_array)
76 )
77 );
78 $this->db->manipulate($query);
79 }
80
81 public function storeSingleFor(
82 int $user_id,
83 string $key,
84 string $value
85 ): void {
86 $this->db->replace(
87 self::TABLE_NAME,
88 [
89 'usr_id' => [\ilDBConstants::T_INTEGER, $user_id],
90 'keyword' => [\ilDBConstants::T_TEXT, $key],
91 ],
92 [
93 'value' => [\ilDBConstants::T_TEXT, $value]
94 ]
95 );
96 }
97
99 string $profile_data_table_name,
100 string $login_data_column_name,
101 string $firstname_data_column_name,
102 string $lastname_data_column_name,
103 string $primary_email_data_column_name,
104 string $secondary_email_data_column_name
105 ): string {
106 return 'SELECT ' . $this->buildConditionalSearchFieldString(
107 $login_data_column_name,
108 $firstname_data_column_name,
109 $lastname_data_column_name,
110 $primary_email_data_column_name,
111 $secondary_email_data_column_name
112 ) . " FROM {$profile_data_table_name}" . PHP_EOL
113 . $this->buildConditionalSearchJoinString($profile_data_table_name);
114 }
115
117 string $login_data_column_name,
118 string $firstname_data_column_name,
119 string $lastname_data_column_name,
120 string $primary_email_data_column_name,
121 string $secondary_email_data_column_name
122 ): string {
123 return implode(
124 ', ',
125 [
126 $login_data_column_name,
127 sprintf(
128 "(CASE WHEN ({$firstname_data_column_name} IS NOT NULL" . PHP_EOL
129 . 'AND (profilevisibility.value = %s OR profilevisibility.value = %s))' . PHP_EOL
130 . "THEN {$firstname_data_column_name} ELSE '' END) {$firstname_data_column_name}",
131 $this->db->quote('y', \ilDBConstants::T_TEXT),
132 $this->db->quote('g', \ilDBConstants::T_TEXT)
133 ),
134 sprintf(
135 "(CASE WHEN ({$lastname_data_column_name} IS NOT NULL" . PHP_EOL
136 . 'AND (profilevisibility.value = %s OR profilevisibility.value = %s))' . PHP_EOL
137 . "THEN {$lastname_data_column_name} ELSE '' END) {$lastname_data_column_name}",
138 $this->db->quote('y', \ilDBConstants::T_TEXT),
139 $this->db->quote('g', \ilDBConstants::T_TEXT)
140 ),
141 sprintf(
142 "(CASE WHEN ({$primary_email_data_column_name} IS NOT NULL" . PHP_EOL
143 . 'AND (profilevisibility.value = %s OR profilevisibility.value = %s)' . PHP_EOL
144 . 'AND primaryemailvisibility.value = %s)' . PHP_EOL
145 . "THEN {$primary_email_data_column_name} ELSE '' END) {$primary_email_data_column_name}",
146 $this->db->quote('y', \ilDBConstants::T_TEXT),
147 $this->db->quote('g', \ilDBConstants::T_TEXT),
148 $this->db->quote('y', \ilDBConstants::T_TEXT)
149 ),
150 sprintf(
151 "(CASE WHEN ({$secondary_email_data_column_name} IS NOT NULL" . PHP_EOL
152 . 'AND (profilevisibility.value = %s OR profilevisibility.value = %s)' . PHP_EOL
153 . 'AND secondaryemailvisibility.value = %s)' . PHP_EOL
154 . "THEN {$secondary_email_data_column_name} ELSE '' END) {$secondary_email_data_column_name}",
155 $this->db->quote('y', \ilDBConstants::T_TEXT),
156 $this->db->quote('g', \ilDBConstants::T_TEXT),
157 $this->db->quote('y', \ilDBConstants::T_TEXT)
158 )
159 ]
160 );
161 }
162
164 string $profile_data_table_name
165 ): string {
166 return 'LEFT OUTER JOIN ' . self::TABLE_NAME . ' profilevisibility' . PHP_EOL
167 . "ON profilevisibility.usr_id = {$profile_data_table_name}.usr_id" . PHP_EOL
168 . 'AND profilevisibility.keyword = ' . $this->db->quote('public_profile', \ilDBConstants::T_TEXT) . PHP_EOL
169 . 'LEFT OUTER JOIN ' . self::TABLE_NAME . ' firstnamevisibility' . PHP_EOL
170 . "ON firstnamevisibility.usr_id = {$profile_data_table_name}.usr_id" . PHP_EOL
171 . 'AND firstnamevisibility.keyword = ' . $this->db->quote('public_firstname', \ilDBConstants::T_TEXT) . PHP_EOL
172 . 'LEFT OUTER JOIN ' . self::TABLE_NAME . ' lastnamevisibility' . PHP_EOL
173 . "ON lastnamevisibility.usr_id = {$profile_data_table_name}.usr_id" . PHP_EOL
174 . 'AND lastnamevisibility.keyword = ' . $this->db->quote('public_lastname', \ilDBConstants::T_TEXT) . PHP_EOL
175 . 'LEFT OUTER JOIN ' . self::TABLE_NAME . ' primaryemailvisibility' . PHP_EOL
176 . "ON primaryemailvisibility.usr_id = {$profile_data_table_name}.usr_id" . PHP_EOL
177 . 'AND primaryemailvisibility.keyword = ' . $this->db->quote('public_email', \ilDBConstants::T_TEXT) . PHP_EOL
178 . 'LEFT OUTER JOIN ' . self::TABLE_NAME . ' secondaryemailvisibility' . PHP_EOL
179 . "ON secondaryemailvisibility.usr_id = {$profile_data_table_name}.usr_id" . PHP_EOL
180 . 'AND secondaryemailvisibility.keyword = ' . $this->db->quote('public_second_email', \ilDBConstants::T_TEXT);
181 }
182}
buildConditionalSearchJoinString(string $profile_data_table_name)
buildConditionalSearchFieldString(string $login_data_column_name, string $firstname_data_column_name, string $lastname_data_column_name, string $primary_email_data_column_name, string $secondary_email_data_column_name)
__construct(private readonly \ilDBInterface $db)
storeSingleFor(int $user_id, string $key, string $value)
storeFor(int $user_id, array $settings_array)
getSearchSelectConditionalOnVisibility(string $profile_data_table_name, string $login_data_column_name, string $firstname_data_column_name, string $lastname_data_column_name, string $primary_email_data_column_name, string $secondary_email_data_column_name)
Class ilDBConstants.
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Interface ilDBInterface.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...