Portions created by the Initial Developer are Copyright (C) 2016-2019 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 selected number/contact $current_contact = $_GET['sel']; //get the list if (isset($_SESSION['message']['display_last']['text']) && $_SESSION['message']['display_last']['text'] != '') { $array = explode(' ',$_SESSION['message']['display_last']['text']); if (is_array($array) && is_numeric($array[0]) && $array[0] > 0) { if ($array[1] == 'messages') { $limit = limit_offset($array[0], 0); } else { $since = "and message_date >= :message_date "; $parameters['message_date'] = date("Y-m-d H:i:s", strtotime('-'.$_SESSION['message']['display_last']['text'])); } } } if ($limit == '' && $since == '') { $limit = limit_offset(25, 0); } //default (message count) $sql = "select message_direction, message_from, message_to, contact_uuid "; $sql .= "from v_messages "; $sql .= "where user_uuid = :user_uuid "; $sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) "; $sql .= $since; $sql .= "order by message_date desc "; $sql .= $limit; $parameters['user_uuid'] = $_SESSION['user_uuid']; $parameters['domain_uuid'] = $domain_uuid; $database = new database; $messages = $database->select($sql, $parameters, 'all'); unset($sql, $parameters); //parse out numbers if (is_array($messages) && @sizeof($messages) != 0) { $numbers = []; foreach($messages as $message) { $number_from = preg_replace('{[\D]}', '', $message['message_from']); $number_to = preg_replace('{[\D]}', '', $message['message_to']); if (!in_array($number_from, $numbers)) { $numbers[] = $number_from; } if (!in_array($number_to, $numbers)) { $numbers[] = $number_to; } switch ($message['message_direction']) { case 'inbound': if (!is_uuid($contact[$number_from]['contact_uuid'])) { $contact[$number_from]['contact_uuid'] = $message['contact_uuid']; } break; case 'outbound': if (!is_uuid($contact[$number_to]['contact_uuid'])) { $contact[$number_to]['contact_uuid'] = $message['contact_uuid']; } break; } unset($number_from, $number_to); } } unset($messages, $message); //get contact details, if uuid available if (is_array($contact) && sizeof($contact) != 0) { foreach ($contact as $number => $field) { if (is_uuid($field['contact_uuid'])) { $sql = "select c.contact_name_given, c.contact_name_family, "; $sql .= "(select ce.email_address from v_contact_emails as ce where ce.contact_uuid = c.contact_uuid and ce.email_primary = 1) as contact_email "; $sql .= "from v_contacts as c "; $sql .= "where c.contact_uuid = :contact_uuid "; $sql .= "and (c.domain_uuid = :domain_uuid or c.domain_uuid is null) "; $parameters['contact_uuid'] = $field['contact_uuid']; $parameters['domain_uuid'] = $domain_uuid; $database = new database; $row = $database->select($sql, $parameters, 'row'); if (is_array($row) && @sizeof($row) != 0) { $contact[$number]['contact_uuid'] = $field['contact_uuid']; $contact[$number]['contact_name_given'] = $row['contact_name_given']; $contact[$number]['contact_name_family'] = $row['contact_name_family']; $contact[$number]['contact_email'] = $row['contact_email']; } unset($sql, $parameters, $row); } else { unset($contact[$number]); } } } //get destinations and remove from numbers array $sql = "select destination_number from v_destinations "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and destination_enabled = 'true' "; $sql .= "order by destination_number asc "; $parameters['domain_uuid'] = $domain_uuid; $database = new database; $rows = $database->select($sql, $parameters, 'all'); if (is_array($rows) && @sizeof($rows)) { foreach ($rows as $row) { $destinations[] = $row['destination_number']; } } unset($sql, $parameters, $rows, $row); if ( is_array($numbers) && @sizeof($numbers) != 0 && is_array($destinations) && @sizeof($destinations) != 0 && !is_null(array_diff($numbers, $destinations)) ) { $numbers = array_diff($numbers, $destinations); } //get contact (primary attachment) images and cache them if (is_array($numbers) && @sizeof($numbers) != 0) { foreach ($numbers as $number) { $contact_uuids[] = $contact[$number]['contact_uuid']; } if (is_array($contact_uuids) && @sizeof($contact_uuids) != 0) { $sql = "select contact_uuid as uuid, attachment_filename as filename, attachment_content as image "; $sql .= "from v_contact_attachments "; $sql .= "where domain_uuid = :domain_uuid "; $sql .= "and ("; foreach ($contact_uuids as $index => $contact_uuid) { $sql_where[] = "contact_uuid = :contact_uuid_".$index; $parameters['contact_uuid_'.$index] = $contact_uuid; } $sql .= implode(' or ', $sql_where); $sql .= ") "; $sql .= "and attachment_primary = 1 "; $parameters['domain_uuid'] = $_SESSION['domain_uuid']; $database = new database; $contact_ems = $database->select($sql, $parameters, 'all'); if (is_array($contact_ems) && @sizeof($contact_ems) != 0) { foreach ($contact_ems as $contact_em) { $_SESSION['tmp']['messages']['contact_em'][$contact_em['uuid']]['filename'] = $contact_em['filename']; $_SESSION['tmp']['messages']['contact_em'][$contact_em['uuid']]['image'] = $contact_em['image']; } } } unset($sql, $sql_where, $parameters, $contact_uuids, $contact_ems, $contact_em); } //contacts list if (is_array($numbers) && @sizeof($numbers) != 0) { echo "\n"; foreach($numbers as $number) { if ($current_contact != '' && $number == $current_contact) { echo "\n"; } echo "
\n"; $selected = true; } else { echo "
\n"; $selected = false; } //contact image if (is_array($_SESSION['tmp']['messages']['contact_em'][$contact[$number]['contact_uuid']]) && sizeof($_SESSION['tmp']['messages']['contact_em'][$contact[$number]['contact_uuid']]) != 0) { $attachment_type = strtolower(pathinfo($_SESSION['tmp']['messages']['contact_em'][$contact[$number]['contact_uuid']]['filename'], PATHINFO_EXTENSION)); echo "\n"; echo "\n"; } //contact name/number if ($contact[$number]['contact_name_given'] != '' || $contact[$number]['contact_name_family'] != '') { echo "
\n"; echo "
\n"; echo " ".escape($contact[$number]['contact_name_given'].' '.$contact[$number]['contact_name_family']).'
'; echo " ".escape(format_phone($number)).'
'; if (valid_email($contact[$number]['contact_email'])) { echo "".$text['label-send_email']."
"; } if ($selected) { $contact_name = escape($contact[$number]['contact_name_given'].' '.$contact[$number]['contact_name_family']); $contact_html = (permission_exists('contact_view') ? "".$contact_name."" : $contact_name)." : ".escape(format_phone($number)).""; echo "\n"; } echo "
\n"; } else { echo escape(format_phone($number)); if ($selected) { echo "\n"; } } echo "
\n"; echo "\n"; } else { echo "
···
"; } echo "
\n"; echo " \"".$text['label-refresh_pause']."\" "; echo "
\n"; ?>