From 509cf528d7c34883956a979f270df145393b8bb3 Mon Sep 17 00:00:00 2001
From: Markus Birth <mbirth@gmail.com>
Date: Sun, 12 Nov 2017 16:35:28 +0100
Subject: [PATCH] Started parser class.

---
 index.php                    | 23 ++++++++++++++---------
 lib/TclUpdates/XmlParser.php | 31 +++++++++++++++++++++++++++++++
 lib/autoloader.php           |  6 ++++++
 3 files changed, 51 insertions(+), 9 deletions(-)
 create mode 100755 lib/TclUpdates/XmlParser.php
 create mode 100755 lib/autoloader.php

diff --git a/index.php b/index.php
index 25e6a3e..260fb61 100644
--- a/index.php
+++ b/index.php
@@ -1,28 +1,33 @@
 <?php
 
+require_once 'lib/autoloader.php';
+
+use \TclUpdates\XmlParser;
+
 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
-    $input_xml = file_get_contents('php://input', false, NULL, -1, 8192);   // read max 8 KiB
+    $input_xml = file_get_contents('php://input', false, null, -1, 8192);   // read max 8 KiB
     if (strlen($input_xml) >= 8192) {
-        // Max length, probably even longer, definitely no XML
+        // Max length, probably even longer, definitely no data we want
         http_response_code(413);   // "Payload too large"
         exit;
     }
-    $dom = new DOMDocument();
-    $load_ok = $dom->loadXML($input_xml, LIBXML_NOENT);
-    if (!$load_ok || $dom->childNodes->length < 1) {
+    $xp = new XmlParser();
+    $load_ok = $xp->loadXmlFromString($input_xml);
+    if (!$load_ok) {
         // XML could not be parsed - invalid or no XML
         http_response_code(406);   // "Not acceptable"
         exit;
     }
-    $root_node = $dom->childNodes->item(0);
-    if ($root_node->nodeName != 'GOTU') {
-        // Root node isn't <GOTU>, so no update XML
+    if (!$xp->validateGOTU()) {
+        // No root node or root node isn't <GOTU>, so no update XML
         http_response_code(412);   // "Precondition failed"
         exit;
     }
     // ### At this point we can be relatively sure to have the XML we want
     echo "Input length is " . strlen($input_xml) . " Bytes." . PHP_EOL;
-    echo $input_xml . PHP_EOL;
+    #echo $input_xml . PHP_EOL;
+
+
     // TODO: Check if it's XML
     //       If so: Store a copy for re-parsing (or to print out and hang up on a wall)
     //       Then parse XML into database
diff --git a/lib/TclUpdates/XmlParser.php b/lib/TclUpdates/XmlParser.php
new file mode 100755
index 0000000..f4f4625
--- /dev/null
+++ b/lib/TclUpdates/XmlParser.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace TclUpdates;
+
+class XmlParser
+{
+    private $dom;
+
+    public function __construct()
+    {
+        $this->dom = new \DOMDocument();
+    }
+
+    public function loadXMLFromString($xml)
+    {
+        $xml_ok = $this->dom->loadXML($xml, LIBXML_NOENT);
+        return $xml_ok;
+    }
+
+    public function validateGOTU()
+    {
+        if ($this->dom->childNodes->length < 1) {
+            return false;
+        }
+        $root_node = $this->dom->childNodes->item(0);
+        if ($root_node->nodeName != 'GOTU') {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/lib/autoloader.php b/lib/autoloader.php
new file mode 100755
index 0000000..1cc2a51
--- /dev/null
+++ b/lib/autoloader.php
@@ -0,0 +1,6 @@
+<?php
+
+set_include_path(__DIR__ . PATH_SEPARATOR . get_include_path());
+
+// PSR-4
+spl_autoload_register();