From bbfdfd8052ec4de6058bbd51fbbc3fa11cbd2fa5 Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Sun, 10 Feb 2013 17:26:53 -0500
Subject: [PATCH] Add ApiEmailDataParser class - support email parsing

---
 include/api.tickets.php |  7 +++++--
 include/class.api.php   | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/include/api.tickets.php b/include/api.tickets.php
index 7fd5ba713..e4f5153dc 100644
--- a/include/api.tickets.php
+++ b/include/api.tickets.php
@@ -17,8 +17,11 @@ class TicketController extends ApiController {
             ), 
             "message", "ip", "priorityId"
         );
-        if ($format == "xml") return array("ticket" => $supported);
-        else return $supported;
+
+        if(!strcasecmp($format, 'email'))
+            $supported = array_merge($supported, array('header', 'mid', 'emailId', 'ticketId'));
+
+        return $supported;
     }
 
     function create($format) {
diff --git a/include/class.api.php b/include/class.api.php
index df8cfb0c8..bccf81f12 100644
--- a/include/class.api.php
+++ b/include/class.api.php
@@ -316,4 +316,39 @@ class ApiJsonDataParser extends JsonDataParser {
     }
 }
 
+/* Email parsing */
+include_once "class.mailparse.php";
+class ApiEmailDataParser extends EmailDataParser {
+
+    function parse($stream) {
+        return $this->fixup(parent::parse($stream));
+    }
+
+    function fixup($data) {
+        global $cfg;
+
+        if(!$data) return $data;
+
+        $data['source'] = 'Email';
+
+        if(!$data['message'])
+            $data['message'] = $data['subject']?$data['subject']:'(EMPTY)';
+
+        if(!$data['subject'])
+            $data['subject'] = '[No Subject]';
+
+        if(!$data['emailId'])
+            $data['emailId'] = $cfg->getDefaultEmailId();
+
+        if($data['email'] && preg_match ('[[#][0-9]{1,10}]', $data['subject'], $matches)) {
+            if(($tid=Ticket::getIdByExtId(trim(preg_replace('/[^0-9]/', '', $matches[0])), $data['email'])))
+                $data['ticketId'] = $tid;
+        }
+
+        if(!$cfg->useEmailPriority())
+            unset($data['priorityId']);
+
+        return $data;
+    }
+}
 ?>
-- 
GitLab