diff --git a/app/messages/message_media.php b/app/messages/message_media.php new file mode 100644 index 0000000000..e4409e0033 --- /dev/null +++ b/app/messages/message_media.php @@ -0,0 +1,86 @@ + + Portions created by the Initial Developer are Copyright (C) 2016-2018 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//includes + require_once "root.php"; + require_once "resources/require.php"; + require_once "resources/check_auth.php"; + +//check permissions + if (!permission_exists('message_view')) { + echo "access denied"; + exit; + } + +//add multi-lingual support + $language = new text; + $text = $language->get(); + +//get media uuid + $message_media_uuid = $_GET['id']; + $message_media_source = $_GET['src']; + +//get media + if (is_uuid($message_media_uuid)) { + + $sql = "select message_media_type, message_media_content from v_message_media "; + $sql .= "where message_media_uuid = '".$message_media_uuid."' "; + $sql .= "and user_uuid = '".$_SESSION['user_uuid']."' "; + $sql .= "and (domain_uuid = '".$domain_uuid."' or domain_uuid is null) "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $media = $prep_statement->fetch(PDO::FETCH_NAMED); + unset ($prep_statement, $sql); + + switch (strtolower($media['message_media_type'])) { + case 'jpg': + case 'jpeg': $content_type = 'image/jpg'; break; + case 'png': $content_type = 'image/png'; break; + case 'gif': $content_type = 'image/gif'; break; + case 'aac': $content_type = 'audio/aac'; break; + case 'wav': $content_type = 'audio/wav'; break; + case 'mp3': $content_type = 'audio/mpeg'; break; + case 'mp2': $content_type = 'video/mpeg'; break; + case 'm4v': $content_type = 'video/mp4'; break; + case 'pdf': $content_type = 'application/pdf'; break; + case 'doc': $content_type = 'application/vnd.ms-word'; break; + case 'docx': $content_type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; break; + case 'xls': $content_type = 'application/vnd.ms-excel'; break; + case 'xlsx': $content_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; break; + case 'ppt': $content_type = 'application/vnd.ms-powerpoint'; break; + case 'pptx': $content_type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; break; + case 'zip': $content_tyep = 'application/zip'; break; + default: $content_type = 'application/octet-stream'; break; + } + + header("Content-type: ".$content_type); + header("Content-Length: ".strlen($media['message_media_content'])); + header("Content-Disposition: attachment; filename=\"".$message_media_source."_".$message_media_uuid.".".strtolower($media['message_media_type'])."\""); + echo base64_decode($media['message_media_content']); + + } + +?> \ No newline at end of file diff --git a/app/messages/messages_thread.php b/app/messages/messages_thread.php index 9e6dd768be..133f1ee103 100644 --- a/app/messages/messages_thread.php +++ b/app/messages/messages_thread.php @@ -45,7 +45,7 @@ //set refresh flag $refresh = $_GET['refresh'] == 'true' ? true : false; -//get from messages +//get messages $since = date("Y-m-d H:i:s", strtotime("-24 hours")); $sql = "select * from v_messages "; $sql .= "where user_uuid = '".$_SESSION['user_uuid']."' "; @@ -58,6 +58,34 @@ $messages = $prep_statement->fetchAll(PDO::FETCH_NAMED); unset ($prep_statement, $sql); +//get media (if any) + $sql = "select message_uuid, message_media_uuid, message_media_type, message_media_url, length(message_media_content) as message_media_size from v_message_media "; + $sql .= "where user_uuid = '".$_SESSION['user_uuid']."' "; + $sql .= "and (domain_uuid = '".$domain_uuid."' or domain_uuid is null) "; + $sql .= "and message_uuid in ( "; + foreach ($messages as $message) { + $message_uuids[] = "'".$message['message_uuid']."'"; + } + $sql .= implode(',', $message_uuids); + $sql .= ") "; + $sql .= "and message_media_type <> 'txt' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $rows = $prep_statement->fetchAll(PDO::FETCH_NAMED); + unset ($prep_statement, $sql); + +//prep media array + if (is_array($rows) && sizeof($rows) != 0) { + $x = 0; + foreach ($rows as $row) { + $message_media[$row['message_uuid']][$x]['uuid'] = $row['message_media_uuid']; + $message_media[$row['message_uuid']][$x]['type'] = $row['message_media_type']; + //$message_media[$row['message_uuid']][$x]['url'] = $row['message_media_url']; + $message_media[$row['message_uuid']][$x]['size'] = $row['message_media_size']; + $x++; + } + } + //css styles echo "\n"; if (!$refresh) { @@ -94,14 +143,33 @@ //output messages if (is_array($messages) && sizeof($messages) != 0) { foreach ($messages as $message) { - echo ""; - echo str_replace("\n",'
',$message['message_text'])."
\n"; - echo "".format_when_local($message['message_date'])."\n"; - echo "
\n"; - //parse from inbound message + //parse from message if ($message['message_direction'] == 'inbound') { $message_from = $message['message_to']; + $media_source = format_phone($message['message_from']); } + if ($message['message_direction'] == 'outbound') { + $media_source = format_phone($message['message_to']); + } + + //message bubble + echo ""; + if ($message['message_text'] != '') { + echo str_replace("\n",'
',$message['message_text'])."
\n"; + } + if (is_array($message_media[$message['message_uuid']]) && sizeof($message_media[$message['message_uuid']]) != 0) { + + foreach ($message_media[$message['message_uuid']] as $media) { + if ($media['type'] != 'txt') { + echo ""; + echo ""; + echo "".strtoupper($media['type']).' · '.strtoupper(byte_convert($media['size'])).""; + echo "\n"; + } + } + } + echo "".format_when_local($message['message_date'])."\n"; + echo "
\n"; } echo " \n"; } diff --git a/app/messages/resources/images/attachment.png b/app/messages/resources/images/attachment.png new file mode 100644 index 0000000000..de7692bf24 Binary files /dev/null and b/app/messages/resources/images/attachment.png differ