From dd908c070186d1587a3aa6dc6214e9b8da1e1973 Mon Sep 17 00:00:00 2001 From: Nate Date: Thu, 20 Dec 2018 21:03:12 -0700 Subject: [PATCH] View received media in Messages. --- app/messages/message_media.php | 86 +++++++++++++++++++ app/messages/messages_thread.php | 80 +++++++++++++++-- app/messages/resources/images/attachment.png | Bin 0 -> 1039 bytes 3 files changed, 160 insertions(+), 6 deletions(-) create mode 100644 app/messages/message_media.php create mode 100644 app/messages/resources/images/attachment.png 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 0000000000000000000000000000000000000000..de7692bf24f48196a9c6bd1faaa92854617cec66 GIT binary patch literal 1039 zcmV+q1n~QbP)y^=Terd!G&}*}2_R2^JN0A=Z0!`Xbqjrfo{+6u&DM?H>s}{B2onA>g)sZ^xD2flfWQY3x{9YP zA@o6rDUUqT6fQXNJm=Rcic-=q;P4s38H>jMet~ce;SRzA!gB~ODcytc9`f}d->=%X z0DzlNts>A{sIetWLx_=7>zF=FYvL&_WeorCYbOAM7lr~X82l}SCQHXAJyy)SOX7JH z)xqxIY7F1YfETS}teQWykUonVX)^|-z=s*|Eg{Y}27P}4V}MV2dGP(wtqVM}A^ZNp ztr@&SgX)}q25z0;ncY?D3RetY?OZ@7_|gT?2>wm!0%%tAV$w8s>jqCAq3{N0jk@)D zxaI>KeERvqEfGG_0RED}hj6W^Q6hXR$G0y8FXh>h=lwXvrgU+=Qxw3p5I%NsrF4wH zk-A}Ykh_2e@R(Omg1==0U&vdBTOs`7K=3V5yD9L!gRBYe2p?4mzc&F)h2M(+Cc_sN zz;yUR0@wh*vjDch?<9at@LLOD8~j!R*a)vIfUWRK0@w_nD}e3rnUkR`c(NPQ;Zs{c z9=x=;uymdtR2m1L*a8%49_?e&;(}@L8v-c8qqRk0A$@Kt{67NFf?+N^6|A?c1mgRu_p)x5ZlFZv*G2IeOfL&jt%(GVFlrs`~`m3&qAN@Ec2F=%%tc0Sa-iI@=SI9ta~-;5S-8 z%FN9nU*SsLdM2IIrn`tQEv}3mjjfSUo1+B3J|Z!`v$%K8<_n8rQ{>dq-143b1yrlS z7I}tL^O0kKsXiQS(#laFbq(G{(4(C0GH6yR!2h?$Yi@r87yyJgzj6pK^E&_l002ov JPDHLkV1i4G-hcoA literal 0 HcmV?d00001