abook.php
changeset 23 2d22262da8e0
parent 18 846026b8422b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/abook.php	Thu Oct 27 16:56:26 2011 +0200
@@ -0,0 +1,85 @@
+<?php
+
+const FILE = "var/abook.txt";
+const DB = "sqlite:var/abook.sqlite";
+//const ABOOK = DB;	
+
+set_error_handler(create_function(
+	'$errno, $errstr, $errfile, $errline, $errcontext',
+	'if (!error_reporting()) return;
+	throw new ErrorException($errstr, 0, $errno, $errfile, $errline);'), -1);
+
+spl_autoload_register(create_function(
+    '$class',
+    '$file = "php/class.$class.php";
+     if (!file_exists($file)) return;
+     require_once $file;'));
+
+require_once 'Twig-1.3.0/lib/Twig/Autoloader.php';
+Twig_Autoloader::register();
+$twig = new Twig_Environment(new Twig_Loader_Filesystem("templates/twig"));
+
+if (isset($_REQUEST['action'])) {
+
+    try {
+
+	switch ($_SERVER['PATH_INFO']) {
+	    case "/db":	$abook = new Address_Book_DB(DB); break;
+	    case "/file": 
+	    default:	$abook = new Address_Book_File(FILE); break;
+	};
+    
+	switch (@$_REQUEST['action']) {
+		// Nach dem Eintragen bleiben wir auf der Eintragsseite,
+		// aber wir verhindern Duplikate, die mit RELOAD passieren
+		case 'add':	if ($abook->add_entry($_REQUEST)) {
+				    header("Location: $_SERVER[PHP_SELF]?action=add");
+				    exit(0);
+			    }
+			    echo $twig->render("add.html", array());
+			    exit;
+			    break;
+
+		// Suchen…
+		case 'search':  $entries = null;
+				$error = null;
+				try {
+				    $entries = $abook->search_entries($_REQUEST['pattern']);
+				}
+				catch (Address_Book_Exception $e) {
+				    $error = $e->getMessage();
+				}
+
+				if (@$_REQUEST['format'] == 'table') {
+				    if (is_numeric($_REQUEST['max'])) {
+					$left = count($entries) - $_REQUEST['max'];
+					if ($left > 0) 
+					    $entries = array_slice($entries, 0, $_REQUEST['max']);
+					else
+					    $left = NULL;
+				    }
+				    echo $twig->render("results.html",
+					array('entries' => $entries,
+					'left' => $left, 'error' => $error));
+				    exit;
+				}
+				echo $twig->render("search.html",
+				    array('entries' => $entries, 'error' => $error));
+				exit;
+			    }
+			    break;
+
+    }
+    catch (Address_Book_Exception $e) {
+	header("Content-Type: text/plain; charset=utf-8");
+	print "Address Book Exception: " . $e->getMessage();
+	exit;
+    }
+    catch (Exception $e) {
+	header("Content-Type: text/plain; charset=utf-8");
+	print "Ohoh\n\n" . $e;
+	exit;
+    }
+}
+
+echo $twig->render("search.html", array());