blob: 9e4bec5d0586107587d004f9bac2188c75869396 [file] [log] [blame]
<?php
include_once "User.php";
include_once "config.php";
use \User as User;
class DB
{
public $pdo;
public $log;
function __construct($log)
{
global $DB, $DB_USER, $DB_PASS;
$this->log = $log;
try {
$this->pdo = new PDO($DB, $DB_USER, $DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") );
if($log)
$log->info("Connected to database $DB");
} catch (PDOException $e) {
echo $e->getMessage();
if($log)
$log->error($e->getMessage());
}
}
function add_user(User $user)
{
$columns = $this->getColumnNames("person");
foreach ((array) $user as $key => $value) {
if (array_key_exists($key, (array) $columns)) {
$a[$key] = $value;
}
}
if ($user->participation_confirmed) {
$a["participation_confirmed_at"] = date("Y-m-d H:i:s UTC");
}
$keys = array_keys($a);
$sql = "INSERT INTO person (" . implode(", ", $keys) . ") \n";
$sql .= "VALUES ( :" . implode(", :", $keys) . ")";
$q = $this->pdo->prepare($sql);
$i = 1;
foreach ($a as $value)
$q->bindParam($i++, $value);
$this->log->debug($sql);
$res = $q->execute($a);
$user->id = $this->pdo->lastInsertId();
return $res;
}
function getColumnNames($table)
{
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
try {
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':table', $table, PDO::PARAM_STR);
$stmt->execute();
$persons = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$persons[$row['COLUMN_NAME']] = $row['COLUMN_NAME'];
}
return $persons;
} catch (PDOException $pe) {
trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
}
}
function updateInvoice($user) {
$this->log->debug("updateInvoice");
$sql = "UPDATE person SET invoice = :invoice WHERE id = :id;";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':invoice', $user->invoice, PDO::PARAM_LOB);
$stmt->bindParam(':id', $user->id);
return $stmt->execute();
}
function mail_count($email)
{
$sql = "SELECT COUNT(*) FROM person WHERE email = :email AND participation_confirmed";
try {
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':email', $email, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row['COUNT(*)'];
} catch (PDOException $pe) {
trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
}
}
function dinner_count()
{
$sql = "SELECT COUNT(*) FROM person WHERE conference_dinner";
try {
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row['COUNT(*)'];
} catch (PDOException $pe) {
trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
}
}
function get_persons($filter)
{
$sql = "SELECT *, NULL as invoice FROM person " . ($filter? "WHERE " . $filter : '');
try {
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
$persons = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$user = new User();
$user->init_from_array($row);
$persons[] = $user;
}
return $persons;
} catch (PDOException $pe) {
trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
}
}
}