5 * Fetch data from an SQL database
15 public function __construct($config)
17 $this->dsn = $config['dsn'];
18 $this->user = $config['user'];
19 $this->password = $config['password'];
20 $this->table = $config['table'];
21 $this->fields = $config['fields'];
25 * @param string $strDate Date the events shall be found for, YYYY-MM-DD
27 public function getEvents($strDate, $nDaysBefore, $nDaysAfter)
29 $dbh = new \PDO($this->dsn, $this->user, $this->password);
30 $arDays = $this->getDates($strDate, $nDaysBefore, $nDaysAfter);
33 foreach ($this->fields['date'] as $field => $typeName) {
35 . 'EXTRACT(MONTH FROM ' . $field . '),'
37 . 'EXTRACT(DAY FROM ' . $field . ')'
41 foreach ($arDays as $day) {
42 $parts[] = $fieldSql . $dbh->quote($day);
44 $sql = 'SELECT ' . $field . ' AS e_date'
45 . ', ' . $this->fields['name'] . ' AS e_name'
46 . ' FROM ' . $this->table
48 . implode(' OR ', $parts);
50 $res = $dbh->query($sql);
52 $errorInfo = $dbh->errorInfo();
54 'SQL error #' . $errorInfo[0]
55 . ': ' . $errorInfo[1]
56 . ': ' . $errorInfo[2],
60 while ($row = $res->fetchObject()) {
62 $row->e_name, $typeName,
63 str_replace('0000', '????', $row->e_date)
65 if ($event->isWithin($strDate, $nDaysBefore, $nDaysAfter)) {
73 protected function getDates($strDate, $nDaysBefore, $nDaysAfter)
75 $ts = strtotime($strDate) - 86400 * $nDaysBefore;
76 $numDays = $nDaysBefore + $nDaysAfter;
80 $arDays[] = date('n-j', $ts);
82 } while (--$numDays >= 0);