aboutsummaryrefslogtreecommitdiff
path: root/model/Feedback.php
blob: d2846ad5fb73706410a29737d01efb20d5941271 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php

class Feedback
{
	private $conference;

	public function __construct(Conference $conference)
	{
		$this->conference = $conference;
	}

	public function getConference() {
		return $this->conference;
	}

	public function validate($info)
	{
		return
			isset($_POST['datetime']) ||
			isset($_POST['net']) ||
			isset($_POST['os']) ||
			isset($_POST['player']) ||
			isset($_POST['stream']) ||
			isset($_POST['provider']) ||
			isset($_POST['issuetext']);
	}

	public function store($info)
	{
		$db = new PDO($this->getConference()->get('FEEDBACK.DSN'));
		$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

		$stm = $db->prepare('
			INSERT INTO feedback (reported, datetime, net, os, player, stream, ipproto_v4, ipproto_v6, provider, issues, issuetext)
				VALUES (:reported, :datetime, :net, :os, :player, :stream, :ipproto_v4, :ipproto_v6, :provider, :issues, :issuetext)
		');

		$issuetext = preg_replace('/\r?\n/', ' ', $info['issuetext']);

		$stm->execute(array(
			'reported' => time(),
			'datetime' => strtotime($info['datetime']),
			'net' => $info['net'],
			'os' => $info['os'],
			'player' => $info['player'],
			'stream' => $info['stream'],
			'ipproto_v4' => isset($info['ipproto']) && is_array($info['ipproto']) && in_array('v4', $info['ipproto']),
			'ipproto_v6' => isset($info['ipproto']) && is_array($info['ipproto']) && in_array('v6', $info['ipproto']),
			'provider' => $info['provider'],
			'issues' => isset($info['issues']) && is_array($info['issues']) ? implode(',', $info['issues']) : '',
			'issuetext' => $issuetext,
		));
	}

	public function isLoggedIn()
	{
		return
			isset($_SERVER['PHP_AUTH_USER']) &&
			$_SERVER['PHP_AUTH_USER'] == $this->getConference()->get('FEEDBACK.USERNAME') &&
			$_SERVER['PHP_AUTH_PW'] == $this->getConference()->get('FEEDBACK.PASSWORD');
	}

	public function requestLogin()
	{
		header('WWW-Authenticate: Basic realm="Kadse?"');
		header('HTTP/1.0 401 Unauthorized');
		echo 'You are no real Winkekatzenoperator!!!1!';
		exit;
	}

	public function read($from, $to)
	{
		$db = new PDO($this->getConference()->get('FEEDBACK.DSN'));
		$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

		$stm = $db->prepare('
			SELECT *
			  FROM feedback
			 WHERE reported BETWEEN :from AND :to
			 ORDER BY reported DESC
		');
		$stm->setFetchMode(PDO::FETCH_ASSOC);

		$stm->execute(array(
			'from' => $from,
			'to' => $to,
		));

		return $stm;
	}
}