connect_error) { return ('An error occurred when establishing a connection to the database.'); } $sql = self::getDefaultSql($settings). 'WHERE T.id = '.$id; $results = $connection->query($sql); //-- There will only ever be one result, as ID is the primary key on the tickets table. $result = $results->fetch_assoc(); $connection->close(); return self::generateTicketModel($result); } public static function getTicketForTrackingId($id, $settings) { $connection = new mysqli($settings['db_host'], $settings['db_user'], $settings['db_pass'], $settings['db_name']); if ($connection->connect_error) { return ('An error occurred when establishing a connection to the database.'); } $sql = self::getDefaultSql($settings). 'WHERE T.trackid = '.$id; $results = $connection->query($sql); //-- There should only be one result as Tracking IDs should be unique. If there are two, return a 422 response. if ($results->num_rows > 1) { header(http_response_code(422)); return; } elseif ($results->num_rows == 0) { //-- No ticket found. Return a 404. header(http_response_code(404)); return; } else { $result = $results->fetch_assoc(); $connection->close(); return self::generateTicketModel($result); } } private static function generateTicketModel($result) { $ticket = new Ticket(); settype($result['id'], 'int'); $ticket->id = $result['id']; $ticket->trackingId = $result['trackid']; $ticket->name = $result['ContactName']; $ticket->email = $result['email']; settype($result['category'], 'int'); $ticket->category = $result['category']; settype($result['priority'], 'int'); $ticket->priority = $result['priority']; $ticket->subject = $result['subject']; $ticket->message = $result['message']; //-- Convert these to times so the receiver can use whatever format they want to display the date/time without extra work. $ticket->dateCreated = strtotime($result['dt']); $ticket->dateModified = strtotime($result['lastchange']); $ticket->ip = $result['ip']; $ticket->language = $result['language']; settype($result['status'], 'int'); $ticket->status = $result['status']; settype($result['owner'], 'int'); $ticket->owner = $result['owner']; $ticket->timeWorked = $result['time_worked']; settype($result['lastreplier'], 'int'); $ticket->lastReplier = $result['lastreplier']; settype($result['replierid'], 'int'); $ticket->replierId = $result['replierid']; $ticket->isArchived = ($result['archive'] ? true : false); $ticket->isLocked = ($result['locked'] ? true : false); $ticket->attachments = $result['attachments']; //-- explode handles splitting the list into an array, array_filter removes the empty string elements (""), and array_values resets the indicies. $ticket->merged = array_values(array_filter(explode('#',$result['merged']))); //-- Not currently returning history, as it can contain a metric shit-ton of HTML code and will cludder up the JSON response. //$ticket->history = $result['history']; $ticket->custom1 = $result['custom1'] == '' ? null : $result['custom1']; $ticket->custom2 = $result['custom2'] == '' ? null : $result['custom2']; $ticket->custom3 = $result['custom3'] == '' ? null : $result['custom3']; $ticket->custom4 = $result['custom4'] == '' ? null : $result['custom4']; $ticket->custom5 = $result['custom5'] == '' ? null : $result['custom5']; $ticket->custom6 = $result['custom6'] == '' ? null : $result['custom6']; $ticket->custom7 = $result['custom7'] == '' ? null : $result['custom7']; $ticket->custom8 = $result['custom8'] == '' ? null : $result['custom8']; $ticket->custom9 = $result['custom9'] == '' ? null : $result['custom9']; $ticket->custom10 = $result['custom10'] == '' ? null : $result['custom10']; $ticket->custom11 = $result['custom11'] == '' ? null : $result['custom11']; $ticket->custom12 = $result['custom12'] == '' ? null : $result['custom12']; $ticket->custom13 = $result['custom13'] == '' ? null : $result['custom13']; $ticket->custom14 = $result['custom14'] == '' ? null : $result['custom14']; $ticket->custom15 = $result['custom15'] == '' ? null : $result['custom15']; $ticket->custom16 = $result['custom16'] == '' ? null : $result['custom16']; $ticket->custom17 = $result['custom17'] == '' ? null : $result['custom17']; $ticket->custom18 = $result['custom18'] == '' ? null : $result['custom18']; $ticket->custom19 = $result['custom19'] == '' ? null : $result['custom19']; $ticket->custom20 = $result['custom20'] == '' ? null : $result['custom20']; return $ticket; } private function getDefaultSql($settings) { return 'SELECT T.id, '. 'T.trackid, '. 'T.name AS "ContactName", '. 'T.email, '. 'T.category, '. 'T.priority, '. 'T.subject, '. 'T.message, '. 'T.dt, '. 'T.lastchange, '. 'T.ip, '. 'T.language, '. 'T.status, '. 'T.owner, '. 'T.time_worked, '. 'T.lastreplier, '. 'T.replierid, '. 'T.archive, '. 'T.locked, '. 'T.attachments, '. 'T.merged, '. 'T.custom1, '. 'T.custom2, '. 'T.custom3, '. 'T.custom4, '. 'T.custom5, '. 'T.custom6, '. 'T.custom7, '. 'T.custom8, '. 'T.custom9, '. 'T.custom10, '. 'T.custom11, '. 'T.custom12, '. 'T.custom13, '. 'T.custom14, '. 'T.custom15, '. 'T.custom16, '. 'T.custom17, '. 'T.custom18, '. 'T.custom19, '. 'T.custom20 '. 'FROM '.$settings['db_pfix'].'tickets T '; } }