3 /***************************************
4 * http://www.program-o.com
7 * FILE: chatbot/core/conversation/display_conversation.php
8 * AUTHOR: Elizabeth Perreau and Dave Morton
10 * DETAILS: this file contains the functions to handle the return of the conversation lines back to the user
11 ***************************************/
13 * function get_conversation_to_display()
14 * This function gets the conversation from the db to display/return to the user
15 * @link http://blog.program-o.com/?p=1223
16 * @param array $convoArr - the conversation array
17 * @return array $orderedRows - a list of conversation line
19 function get_conversation_to_display($convoArr)
21 global $dbConn, $dbn, $bot_name, $unknown_user;
22 $user_id = $convoArr['conversation']['user_id'];
23 $bot_id = $convoArr['conversation']['bot_id'];
24 $user_name = $convoArr['conversation']['user_name'];
25 $user_name = (!empty ($user_name)) ?
$user_name : $unknown_user;
26 $convoArr['conversation']['bot_name'] = $bot_name;
27 if (empty ($bot_name))
29 $sql = "select `bot_name` from `bots` where `bot_id` = $bot_id limit 1;";
30 $row = db_fetch($sql, null, __FILE__
, __FUNCTION__
, __LINE__
);
31 $bot_name = $row['bot_name'];
33 if ($convoArr['conversation']['conversation_lines'] != 0)
35 $limit = " LIMIT " . $convoArr['conversation']['conversation_lines'];
42 $sql = "SELECT * FROM `$dbn`.`conversation_log`
44 `user_id` = '" . $convoArr['conversation']['user_id'] . "'
45 AND `bot_id` = '" . $convoArr['conversation']['bot_id'] . "'
46 AND `convo_id` = '" . $convoArr['conversation']['convo_id'] . "'
47 ORDER BY id DESC $limit ";
48 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, "get_conversation SQL: $sql", 3);
49 $result = db_fetchAll($sql, null, __FILE__
, __FUNCTION__
, __LINE__
);
50 if (count($result) > 0)
52 foreach ($result as $row)
56 $orderedRows = array_reverse($allrows, false);
60 $orderedRows = array('id' => NULL, 'input' => "", 'response' => "", 'user_id' => $convoArr['conversation']['user_id'], 'bot_id' => $convoArr['conversation']['bot_id'], 'timestamp' => "");
62 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, "Found '" . count($result) . "' lines of conversation", 2);
68 * function get_conversation()
69 * This function gets the conversation format
70 * @link http://blog.program-o.com/?p=1225
71 * @param array $convoArr - the conversation array
72 * @return array $convoArr
74 function get_conversation($convoArr)
76 $conversation = get_conversation_to_display($convoArr);
77 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, "Processing conversation as " . $convoArr['conversation']['format'], 4);
78 switch ($convoArr['conversation']['format'])
81 $convoArr = get_html($convoArr, $conversation);
84 $convoArr = get_json($convoArr, $conversation);
87 $convoArr = get_xml($convoArr, $conversation);
95 * This function formats the response as html
96 * @link http://blog.program-o.com/?p=1227
97 * @param array $convoArr - the conversation array
98 * @param array $conversation - the conversation lines to format
99 * @return array $convoArr
101 function get_html($convoArr, $conversation)
104 $user_name = $convoArr['conversation']['user_name'];
105 $bot_name = $convoArr['conversation']['bot_name'];
106 foreach ($conversation as $index => $conversation_subarray)
108 $show .= "<div class=\"usersay\">$user_name: " . stripslashes($conversation_subarray['input']) . "</div>";
109 $show .= "<div class=\"botsay\">$bot_name: " . stripslashes($conversation_subarray['response']) . "</div>";
111 $convoArr['send_to_user'] = $show;
112 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, "Returning HTML", 4);
117 * function get_json()
118 * This function formats the response as json
119 * @link http://blog.program-o.com/?p=1229
120 * @param array $convoArr - the conversation array
121 * @param array $conversation - the conversation lines to format
122 * @return array $convoArr
124 function get_json($convoArr, $conversation)
126 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, 'Outputting response as JSON', 2);
127 $show_json = array();
129 foreach ($conversation as $index => $conversation_subarray)
131 $show_json['convo_id'] = $convoArr['conversation']['convo_id'];
132 $show_json['usersay'] = stripslashes($conversation_subarray['input']);
133 $show_json['botsay'] = stripslashes($conversation_subarray['response']);
136 $convoArr['send_to_user'] = json_encode($show_json);
137 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, "Returning JSON string: " . $convoArr['send_to_user'], 4);
143 * This function formats the response as xml
144 * @link http://blog.program-o.com/?p=1238
145 * @param array $convoArr - the conversation array
146 * @param array $conversation - the conversation lines to format
147 * @return array $convoArr
149 function get_xml($convoArr, $conversation)
151 $addTags = array('bot_id','bot_name','user_id','user_name');
152 $program_o = new SimpleXMLElement('<program_o/>');
153 $program_o->addChild('version',VERSION
);
154 $program_o->addChild('status');
155 $status = $program_o->status
;
156 $status->addChild('success', true);
157 foreach ($addTags as $tag_name)
159 $tmpVal = $convoArr['conversation'][$tag_name];
160 $program_o->addChild($tag_name, $tmpVal);
162 $program_o->addChild('chat');
163 $chat = $program_o->chat
;
164 foreach ($conversation as $index => $conversation_subarray)
166 if (empty($conversation_subarray)) continue;
167 $line = $chat->addChild('line');
168 $line->addChild('input', $conversation_subarray['input']);
169 $line->addChild('response', $conversation_subarray['response']);
171 $responseXML = $program_o->asXML();
172 libxml_use_internal_errors(true);
173 $dom = new DOMDocument('1.0');
174 $dom->preserveWhiteSpace
= true;
175 $dom->formatOutput
= true;
176 $dom->loadXML($responseXML);
177 $send_to_user = $dom->saveXML();
178 $convoArr['send_to_user'] = $send_to_user;
179 runDebug(__FILE__
, __FUNCTION__
, __LINE__
, "Returning XML", 4);
184 * function display_conversation()
185 * Displays the output of the conversation if the current format is XML or JSON and updated referenced $display if html
187 * @link http://blog.program-o.com/?p=1233
188 * @param (array) $convoArr
189 * @return void (void) [return value]
191 function display_conversation($convoArr)
193 $display = $convoArr['send_to_user'];
194 $format =(isset($convoArr['conversation']['format'])) ?
strtolower(trim($convoArr['conversation']['format'])) : 'html';
197 $display = str_ireplace('<![CDATA[', '', $display);
198 $display = str_replace(']]>', '', $display);
202 header("Content-type: text/xml; charset=utf-8");
206 header("Content-type: text/plain; charset=utf-8");