blob: 182a1c7ce829d19d969b2373be6f31150690c6ad [file] [log] [blame]
Marc Kupietzab11a142023-03-09 08:15:35 +01001<?php
2
3include_once "User.php";
4include_once "config.php";
5
6use \User as User;
7
Marc Kupietz87a14312023-03-09 20:39:31 +01008class DB
Marc Kupietzab11a142023-03-09 08:15:35 +01009{
Marc Kupietz87a14312023-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 Kupietzce676312023-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 Kupietz87a14312023-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 Kupietzab11a142023-03-09 08:15:35 +010026 }
27 }
Marc Kupietzab11a142023-03-09 08:15:35 +010028
Marc Kupietz87a14312023-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 Kupietzab11a142023-03-09 08:15:35 +010036 }
Marc Kupietzce676312023-03-10 08:29:41 +010037 $a["participation_confirmed_at"] = date("Y-m-d H:i:s UTC");
Marc Kupietz87a14312023-03-09 20:39:31 +010038 $keys = array_keys($a);
39 $sql = "INSERT INTO person (" . implode(", ", $keys) . ") \n";
40 $sql .= "VALUES ( :" . implode(", :", $keys) . ")";
41 $q = $this->pdo->prepare($sql);
42 $i = 1;
43 foreach ($a as $value)
44 $q->bindParam($i++, $value);
45 $this->log->debug($sql);
Marc Kupietzce676312023-03-10 08:29:41 +010046 $res = $q->execute($a);
47 $user->id = $this->pdo->lastInsertId();
48 return $res;
Marc Kupietz87a14312023-03-09 20:39:31 +010049 }
50
51 function getColumnNames($table)
52 {
53 $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
54 try {
55 $stmt = $this->pdo->prepare($sql);
56 $stmt->bindValue(':table', $table, PDO::PARAM_STR);
57 $stmt->execute();
58 $output = array();
59 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
60 $output[$row['COLUMN_NAME']] = $row['COLUMN_NAME'];
61 }
62 return $output;
63 } catch (PDOException $pe) {
64 trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
65 }
66 }
67
Marc Kupietz1baa9922023-03-10 13:54:23 +010068 function updateInvoice($user) {
69 $this->log->debug("updateInvoice");
70 $sql = "UPDATE person SET invoice = :invoice WHERE id = :id;";
71 $stmt = $this->pdo->prepare($sql);
72
73 $stmt->bindParam(':invoice', $user->invoice, PDO::PARAM_LOB);
74 $stmt->bindParam(':id', $user->id);
75
76 return $stmt->execute();
77 }
78
Marc Kupietz87a14312023-03-09 20:39:31 +010079 function mail_count($email)
80 {
81 $sql = "SELECT COUNT(*) FROM person WHERE email = :email";
82 try {
83 $stmt = $this->pdo->prepare($sql);
84 $stmt->bindValue(':email', $email, PDO::PARAM_STR);
85 $stmt->execute();
86 $row = $stmt->fetch(PDO::FETCH_ASSOC);
87 return $row['COUNT(*)'];
88 } catch (PDOException $pe) {
89 trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
90 }
Marc Kupietzab11a142023-03-09 08:15:35 +010091 }
92}