call logging to database
[auerswald-callnotifier.git] / src / callnotifier / Logger / CallDb.php
diff --git a/src/callnotifier/Logger/CallDb.php b/src/callnotifier/Logger/CallDb.php
new file mode 100644 (file)
index 0000000..110e963
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+namespace callnotifier;
+
+class Logger_CallDb extends Logger_CallBase
+{
+    /**
+     * Create new detailler object
+     *
+     * @param string $dsn      PDO connection string, for example
+     *                         'mysql:host=dojo;dbname=opengeodb'
+     * @param string $username Database username
+     * @param string $password Database password
+     */
+    public function __construct($dsn, $username, $password)
+    {
+        $this->db = new \PDO(
+            $dsn, $username, $password,
+            array(
+                \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
+                \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC
+            )
+        );
+        $this->stmt = $this->db->prepare(
+            'INSERT INTO finished ('
+            . '  call_start'
+            . ', call_end'
+            . ', call_type'
+            . ', call_from'
+            . ', call_from_name'
+            . ', call_from_location'
+            . ', call_to'
+            . ', call_to_name'
+            . ', call_to_location'
+            . ', call_length'
+            . ') VALUES ('
+            . '  :call_start'
+            . ', :call_end'
+            . ', :call_type'
+            . ', :call_from'
+            . ', :call_from_name'
+            . ', :call_from_location'
+            . ', :call_to'
+            . ', :call_to_name'
+            . ', :call_to_location'
+            . ', :call_length'
+            . ')'
+        );
+    }
+
+    public function log($type, $arData)
+    {
+        if ($type != 'finishedCall') {
+            return;
+        }
+
+        $call = $arData['call'];
+        $this->addUnsetVars($call);
+
+        $ret = $this->stmt->execute(
+            array(
+                'call_start'         => date('Y-m-d H:i:s', $call->start),
+                'call_end'           => date('Y-m-d H:i:s', $call->end),
+                'call_type'          => $call->type,
+                'call_from'          => $call->from,
+                'call_from_name'     => $call->fromName,
+                'call_from_location' => $call->fromLocation,
+                'call_to'            => $call->to,
+                'call_to_name'       => $call->toName,
+                'call_to_location'   => $call->toLocation,
+                'call_length'        => $call->end - $call->start
+            )
+        );
+        if ($ret === false) {
+            throw new \Exception(
+                'Error logging call to database: '
+                . implode(' / ', $this->stmt->errorInfo())
+            );
+        }
+    }
+
+}
+
+?>