· 6 years ago · Jun 13, 2019, 07:28 AM
1<?php
2/**
3 * Author: Łukasz Koc <lukasz.koc@rawlplug.com>
4 * Date: 19.04.2019
5 * Time: 11:14
6 */
7
8define( 'TABLE_EVENT_PARTICIPATES', $wpdb->prefix . 'cta_event_participates' );
9define( 'TABLE_EVENT_DINNER_PARTICIPATES', $wpdb->prefix . 'cta_event_dinner_participates' );
10define( 'TABLE_EVENT_PARTICIPATES_LOGINS', $wpdb->prefix . 'cta_event_participates_logins' );
11
12function ras_data_base_init() {
13 global $wpdb;
14
15 $table_event_participates = TABLE_EVENT_PARTICIPATES;
16 $table_event_dinner_participates = TABLE_EVENT_DINNER_PARTICIPATES;
17 $charset_collate = $wpdb->get_charset_collate();
18
19 $wpdb->query(
20 $wpdb->prepare(
21 'CREATE TABLE IF NOT EXISTS `%1$s` (
22 `id` INT(11) NOT NULL AUTO_INCREMENT,
23 `login` VARCHAR(100) NOT NULL DEFAULT \'0\',
24 `create_at` DATETIME NULL DEFAULT NULL,
25 `event_participates_status` ENUM(\'Y\',\'N\') NULL DEFAULT \'N\',
26 PRIMARY KEY (`id`),
27 INDEX `login` (`login`)
28 ) %2$s;',
29 [
30 esc_sql( $table_event_participates ),
31 $charset_collate,
32 ]
33 )
34 );
35 $wpdb->query(
36 $wpdb->prepare(
37 'CREATE TABLE IF NOT EXISTS `%1$s` (
38 `id` INT(11) NOT NULL AUTO_INCREMENT,
39 `login` VARCHAR(100) NOT NULL DEFAULT \'0\',
40 `create_at` DATETIME NULL DEFAULT NULL,
41 `event_participates_status` ENUM(\'Y\',\'N\') NULL DEFAULT \'N\',
42 PRIMARY KEY (`id`),
43 INDEX `login` (`login`)
44 ) %2$s;',
45 [
46 esc_sql( $table_event_dinner_participates ),
47 $charset_collate,
48 ]
49 )
50 );
51 $wpdb->query(
52 $wpdb->prepare(
53 'CREATE TABLE IF NOT EXISTS `%1$s` (
54 `id` INT(11) NOT NULL AUTO_INCREMENT,
55 `login` VARCHAR(100) NOT NULL DEFAULT \'0\',
56 `create_at` DATETIME NULL DEFAULT NULL,
57 `first_name` VARCHAR(255) NOT NULL DEFAULT \'\',
58 `last_name` VARCHAR(255) NOT NULL DEFAULT \'\',
59 `email` VARCHAR(255) NOT NULL DEFAULT \'\',
60 PRIMARY KEY (`id`),
61 INDEX `login` (`login`)
62 ) %2$s;',
63 [
64 esc_sql( TABLE_EVENT_PARTICIPATES_LOGINS ),
65 $charset_collate,
66 ]
67 )
68 );
69}
70
71/**
72 * Set status yes for event_participates
73 *
74 * @param string $login
75 *
76 * @return
77 */
78function cta_participates_set_yes( string $login ) {
79 global $wpdb;
80
81 return $wpdb->insert(
82 TABLE_EVENT_PARTICIPATES,
83 [
84 'login' => $login,
85 'create_at' => ( new DateTime() )->format( 'Y-m-d H:i:s' ),
86 'event_participates_status' => 'Y',
87 ]
88 );
89}
90
91/**
92 * Set status yes for event_dinner_participates
93 *
94 * @param string $login
95 *
96 * @return
97 */
98function cta_dinner_participates_set_yes( string $login) {
99 global $wpdb;
100
101 return $wpdb->insert(
102 TABLE_EVENT_DINNER_PARTICIPATES,
103 [
104 'login' => $login,
105 'create_at' => ( new DateTime() )->format( 'Y-m-d H:i:s' ),
106 'event_participates_status' => 'Y',
107 ]
108 );
109}
110
111/**
112 * Set status no for event_participates
113 *
114 * @param string $login
115 *
116 * @return
117 */
118function cta_participates_set_no( string $login ) {
119 global $wpdb;
120
121 return $wpdb->insert(
122 TABLE_EVENT_PARTICIPATES,
123 [
124 'login' => $login,
125 'create_at' => ( new DateTime() )->format( 'Y-m-d H:i:s' ),
126 'event_participates_status' => 'N',
127 ]
128 );
129}
130
131/**
132 * Get raport for event_participates
133 *
134 * @return array
135 */
136function cta_raport_for_participates(): array {
137 global $wpdb;
138
139 $sql_ards = [
140 TABLE_EVENT_PARTICIPATES,
141 TABLE_EVENT_PARTICIPATES
142 ];
143
144 $sql = sprintf(
145 'SELECT login.* FROM `%s` as login,
146 (SELECT login, MAX(create_at) as create_at FROM `%s` GROUP BY login) as logins
147 WHERE login.login = logins.login AND login.create_at = logins.create_at;', ...$sql_ards
148 );
149 $results = $wpdb->get_results( $sql, ARRAY_A );
150
151 $list = [
152 'yes' => [],
153 'no' => [],
154 ];
155 foreach ( $results as $result ) {
156 $status = 'no';
157 if ( $result['event_participates_status'] === 'Y' ) {
158 $status = 'yes';
159 }
160 $list[ $status ][] = $result;
161 }
162
163 return $list;
164}
165/**
166 * Get raport for event_participates
167 *
168 * @return array
169 */
170
171function cta_raport_for_dinner_participates(): array {
172 global $wpdb;
173
174 $sql_ards = [
175 TABLE_EVENT_DINNER_PARTICIPATES,
176 TABLE_EVENT_DINNER_PARTICIPATES
177 ];
178
179 $sql = sprintf(
180 'SELECT login.* FROM `%s` as login,
181 (SELECT login, MAX(create_at) as create_at FROM `%s` GROUP BY login) as logins
182 WHERE login.login = logins.login AND login.create_at = logins.create_at;', ...$sql_ards
183 );
184 $results = $wpdb->get_results( $sql, ARRAY_A );
185
186 $list = [
187 'yes' => [],
188 'no' => [],
189 ];
190 foreach ( $results as $result ) {
191 $status = 'no';
192 if ( $result['event_participates_status'] === 'Y' ) {
193 $status = 'yes';
194 }
195 $list[ $status ][] = $result;
196 }
197
198 return $list;
199}
200/**
201 *
202 *
203 * @param string $login
204 *
205 * @return array
206 */
207function cta_user_is_participate( string $login ): bool {
208 global $wpdb;
209
210 $sql_ards = [
211 TABLE_EVENT_PARTICIPATES,
212 TABLE_EVENT_PARTICIPATES,
213 $login,
214 ];
215
216 $sql = sprintf(
217 'SELECT login.* FROM `%s` as login,
218 (SELECT login, MAX(create_at) as create_at FROM `%s` WHERE login = "%s" GROUP BY login) as logins
219 WHERE login.login = logins.login AND login.create_at = logins.create_at;', ...$sql_ards
220 );
221 $results = $wpdb->get_results( $sql, ARRAY_A );
222
223 return ! count( $results ) ? false : ( $results[0]['event_participates_status'] === 'N' ? false : true );
224}
225
226/**
227 *
228 *
229 * @param string $login
230 *
231 * @return array
232 */
233function cta_user_is_dinner_participate( string $login ): bool {
234 global $wpdb;
235
236 $sql_ards = [
237 TABLE_EVENT_DINNER_PARTICIPATES,
238 TABLE_EVENT_DINNER_PARTICIPATES,
239 $login,
240 ];
241
242 $sql = sprintf(
243 'SELECT login.* FROM `%s` as login,
244 (SELECT login, MAX(create_at) as create_at FROM `%s` WHERE login = "%s" GROUP BY login) as logins
245 WHERE login.login = logins.login AND login.create_at = logins.create_at;', ...$sql_ards
246 );
247 $results = $wpdb->get_results( $sql, ARRAY_A );
248
249 return ! count( $results ) ? false : ( $results[0]['event_participates_status'] === 'N' ? false : true );
250}
251
252/**
253 * @param string $login
254 *
255 * @return bool
256 */
257function cta_is_in_short_login_list( string $login ): bool {
258 return rwl_cta_plugin_exist_login( $login );
259}
260
261/**
262 * @return string
263 */
264function cta_get_user_login(): string {
265 global $wpdb;
266
267 $login = $_SERVER['PHP_AUTH_USER'] ?? '';
268 $userData = json_decode( rwl_cta_plugin_get_user_data( $login ), true );
269 if ( trim( $login ) === '' || is_null( $userData ) ) {
270 return '';
271 }
272
273 if ( ! count( cta_get_user_data_by_login( $login ) ) ) {
274 $email = $userData['email'] ?? 'not fill';
275 $first_name = $userData['first_name'] ?? 'not fill';
276 $last_name = $userData['last_name'] ?? 'not fill';
277
278 $status = $wpdb->insert(
279 TABLE_EVENT_PARTICIPATES_LOGINS,
280 [
281 'login' => $login,
282 'create_at' => ( new DateTime() )->format( 'Y-m-d H:i:s' ),
283 'first_name' => $first_name,
284 'last_name' => $last_name,
285 'email' => $email,
286 ]
287 );
288
289 if ( $status < 1 || $status === false ) {
290 return '';
291 }
292 }
293
294 return $login;
295}
296
297/**
298 * @param string $login
299 *
300 * @return array
301 */
302function cta_get_user_data_by_login( string $login ): array {
303 global $wpdb;
304
305 $sql_ards = [
306 TABLE_EVENT_PARTICIPATES_LOGINS,
307 $login
308 ];
309
310 $sql = sprintf(
311 'SELECT login.* FROM `%s` as login WHERE login.login = "%s";', ...$sql_ards
312 );
313 $results = $wpdb->get_results( $sql, ARRAY_A );
314
315 return $results;
316}
317
318/**
319 * @return array
320 */
321function cta_get_users_data(): array {
322 global $wpdb;
323
324 $sql_ards = [
325 TABLE_EVENT_PARTICIPATES_LOGINS,
326 ];
327
328 $sql = sprintf(
329 'SELECT login.* FROM `%s` as login;', ...$sql_ards
330 );
331 $results = $wpdb->get_results( $sql, ARRAY_A );
332
333 return cta_array_map_assoc(
334 function ( $key, $result ) {
335 return [ $result['login'], $result ];
336 },
337 $results
338 );
339}
340
341/**
342 * @param callable $callback
343 * @param array $values
344 *
345 * @return array
346 */
347function cta_array_map_assoc( callable $callback, array $values ) {
348 return array_column( array_map( $callback, array_keys( $values ), $values ), 1, 0 );
349}
350
351add_action( 'after_setup_theme', 'ras_data_base_init' );