blob: d0282414639175f82a5bc4cfb4910117a5672da1 [file] [log] [blame]
Marc Kupietzb5ad9352023-03-09 08:15:35 +01001<?php
2
3include_once "User.php";
4include_once "config.php";
5
6use \User as User;
7
Marc Kupietz145f5b92023-03-09 20:39:31 +01008class DB
Marc Kupietzb5ad9352023-03-09 08:15:35 +01009{
Marc Kupietz145f5b92023-03-09 20:39:31 +010010
11 public $pdo;
12 public $log;
13
14 function __construct($log)
15 {
16 global $DB, $DB_USER, $DB_PASS;
17 $this->log = $log;
18 try {
Marc Kupietz49f677c2023-03-10 08:29:41 +010019 $this->pdo = new PDO($DB, $DB_USER, $DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") );
Marc Kupietz145f5b92023-03-09 20:39:31 +010020 if($log)
21 $log->info("Connected to database $DB");
22 } catch (PDOException $e) {
23 echo $e->getMessage();
24 if($log)
25 $log->error($e->getMessage());
Marc Kupietzb5ad9352023-03-09 08:15:35 +010026 }
27 }
Marc Kupietzb5ad9352023-03-09 08:15:35 +010028
Marc Kupietz145f5b92023-03-09 20:39:31 +010029 function add_user(User $user)
30 {
31 $columns = $this->getColumnNames("person");
32 foreach ((array) $user as $key => $value) {
33 if (array_key_exists($key, (array) $columns)) {
34 $a[$key] = $value;
35 }
Marc Kupietzb5ad9352023-03-09 08:15:35 +010036 }
Marc Kupietz7d728fe2023-03-28 17:32:18 +020037 if ($user->participation_confirmed) {
38 $a["participation_confirmed_at"] = date("Y-m-d H:i:s UTC");
39 }
Marc Kupietz145f5b92023-03-09 20:39:31 +010040 $keys = array_keys($a);
41 $sql = "INSERT INTO person (" . implode(", ", $keys) . ") \n";
42 $sql .= "VALUES ( :" . implode(", :", $keys) . ")";
43 $q = $this->pdo->prepare($sql);
44 $i = 1;
45 foreach ($a as $value)
46 $q->bindParam($i++, $value);
47 $this->log->debug($sql);
Marc Kupietz49f677c2023-03-10 08:29:41 +010048 $res = $q->execute($a);
49 $user->id = $this->pdo->lastInsertId();
50 return $res;
Marc Kupietz145f5b92023-03-09 20:39:31 +010051 }
52
53 function getColumnNames($table)
54 {
55 $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
56 try {
57 $stmt = $this->pdo->prepare($sql);
58 $stmt->bindValue(':table', $table, PDO::PARAM_STR);
59 $stmt->execute();
Marc Kupietz7d728fe2023-03-28 17:32:18 +020060 $persons = array();
Marc Kupietz145f5b92023-03-09 20:39:31 +010061 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
Marc Kupietz7d728fe2023-03-28 17:32:18 +020062 $persons[$row['COLUMN_NAME']] = $row['COLUMN_NAME'];
Marc Kupietz145f5b92023-03-09 20:39:31 +010063 }
Marc Kupietz7d728fe2023-03-28 17:32:18 +020064 return $persons;
Marc Kupietz145f5b92023-03-09 20:39:31 +010065 } catch (PDOException $pe) {
66 trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
67 }
68 }
69
Marc Kupietzf97e86f2023-03-10 13:54:23 +010070 function updateInvoice($user) {
71 $this->log->debug("updateInvoice");
72 $sql = "UPDATE person SET invoice = :invoice WHERE id = :id;";
73 $stmt = $this->pdo->prepare($sql);
74
75 $stmt->bindParam(':invoice', $user->invoice, PDO::PARAM_LOB);
76 $stmt->bindParam(':id', $user->id);
77
78 return $stmt->execute();
79 }
80
Marc Kupietz145f5b92023-03-09 20:39:31 +010081 function mail_count($email)
82 {
Marc Kupietz7d728fe2023-03-28 17:32:18 +020083 $sql = "SELECT COUNT(*) FROM person WHERE email = :email AND participation_confirmed";
Marc Kupietz145f5b92023-03-09 20:39:31 +010084 try {
85 $stmt = $this->pdo->prepare($sql);
86 $stmt->bindValue(':email', $email, PDO::PARAM_STR);
87 $stmt->execute();
88 $row = $stmt->fetch(PDO::FETCH_ASSOC);
89 return $row['COUNT(*)'];
90 } catch (PDOException $pe) {
91 trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
92 }
Marc Kupietzb5ad9352023-03-09 08:15:35 +010093 }
Marc Kupietz7d728fe2023-03-28 17:32:18 +020094
95 function get_persons($filter)
96 {
97 $sql = "SELECT *, NULL as invoice FROM person " . ($filter? "WHERE " . $filter : '');
98
99 try {
100 $stmt = $this->pdo->prepare($sql);
101 $stmt->execute();
102 $persons = array();
103 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
104 $user = new User();
105 $user->init_from_array($row);
106 $persons[] = $user;
107 }
108 return $persons;
109 } catch (PDOException $pe) {
110 trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
111 }
112 }
Marc Kupietzb5ad9352023-03-09 08:15:35 +0100113}