Portions created by the Initial Developer are Copyright (C) 2024 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes files require_once dirname(__DIR__, 2) . "/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(); //connect to the database //connect to the database $database = database::new(); //get selected number/contact if (isset($_GET['number']) && !empty($_GET['number'])) { $_SESSION['user']['contact_number'] = $_GET['number']; } //build a list of groups the user is a member of to be used in a SQL in foreach($_SESSION['user']['groups'] as $group) { if (is_uuid($group['group_uuid'])) { $group_uuids[] = $group['group_uuid']; } } $group_uuids_in = "'".implode("','", $group_uuids)."'"; //get the list of contacts $sql = "select *, \n"; $sql .= "(\n"; $sql .= " (select effective_caller_id_name as name from v_extensions where n.number = extension limit 1)\n"; $sql .= " union\n"; $sql .= " (select concat_ws(' ', contact_name_given, contact_name_family) as name from v_contacts where contact_uuid in (select contact_uuid from v_contact_phones where n.number = phone_number) limit 1)\n"; $sql .= ") as name,\n"; $sql .= "(\n"; $sql .= " select contact_uuid from v_contact_phones where n.number = phone_number limit 1\n"; $sql .= ") as contact_uuid,\n"; $sql .= "(\n"; $sql .= " select attachment_filename from v_contact_attachments where contact_uuid in (select contact_uuid from v_contact_phones where n.number = phone_number)\n"; $sql .= ") as contact_image_filename,\n"; $sql .= "(\n"; $sql .= " select attachment_content from v_contact_attachments where contact_uuid in (select contact_uuid from v_contact_phones where n.number = phone_number)\n"; $sql .= ") as contact_image_content,\n"; $sql .= "(\n"; $sql .= " select count(*) as count from v_messages where message_read is not true and message_direction = 'inbound' and message_from = n.number\n"; $sql .= ") as count,\n"; $sql .= "(\n"; $sql .= " select message_text from v_messages\n"; $sql .= " where \n"; $sql .= " (\n"; $sql .= " (message_direction = 'inbound' and message_from = n.number)\n"; $sql .= " or \n"; $sql .= " (message_direction = 'outbound' and message_to = n.number)\n"; $sql .= " )\n"; $sql .= " and message_text is not null\n"; $sql .= " order by message_date desc limit 1\n"; $sql .= ") as message,\n"; $sql .= "(\n"; $sql .= " select message_date from v_messages \n"; $sql .= " where (\n"; $sql .= " (message_direction = 'inbound' and message_from = n.number)\n"; $sql .= " or \n"; $sql .= " (message_direction = 'outbound' and message_to = n.number)\n"; $sql .= " )\n"; $sql .= " and message_text is not null\n"; $sql .= " order by message_date desc limit 1\n"; $sql .= ") as date\n"; $sql .= "from (\n"; $sql .= " select number from \n"; $sql .= " (\n"; $sql .= " select distinct(message_from) as number from v_messages \n"; //$sql .= " select distinct(REPLACE(message_from, '+', '')) as number from v_messages \n"; $sql .= " where domain_uuid = :domain_uuid \n"; $sql .= " and message_direction = 'inbound' and message_from is not null \n"; //$sql .= " and user_uuid = :user_uuid \n"; $sql .= " and ( \n"; $sql .= " user_uuid = :user_uuid \n"; $sql .= " or \n"; $sql .= " group_uuid in (\n"; $sql .= " select group_uuid from v_destinations \n"; $sql .= " where group_uuid in (".$group_uuids_in.") \n"; $sql .= " and domain_uuid = :domain_uuid \n"; $sql .= " ) \n"; $sql .= " )\n"; $sql .= " and message_from ~'^\+?([0-9]+\.?[0-9]*|\.[0-9]+)$' \n"; $sql .= " union \n"; $sql .= " select distinct(message_to) as number from v_messages \n"; //$sql .= " select distinct(REPLACE(message_to, '+', '')) as number from v_messages \n"; $sql .= " where domain_uuid = :domain_uuid \n"; $sql .= " and message_direction = 'outbound' and message_from is not null \n"; //$sql .= " and user_uuid = :user_uuid "; $sql .= " and ( \n"; $sql .= " user_uuid = :user_uuid \n"; $sql .= " or \n"; $sql .= " group_uuid in (\n"; $sql .= " select group_uuid from v_destinations \n"; $sql .= " where group_uuid in (".$group_uuids_in.") \n"; $sql .= " and domain_uuid = :domain_uuid \n"; $sql .= " ) \n"; $sql .= " ) \n"; $sql .= " and message_to ~'^\+?([0-9]+\.?[0-9]*|\.[0-9]+)$' \n"; $sql .= " ) as nested \n"; $sql .= " where number not in \n"; $sql .= " ( \n"; $sql .= " select destination_number as number \n"; $sql .= " from v_destinations \n"; $sql .= " where destination_type = 'inbound' \n"; $sql .= " and domain_uuid = :domain_uuid \n"; $sql .= " union \n"; $sql .= " select (concat(destination_prefix, destination_number)) as number \n"; $sql .= " from v_destinations \n"; $sql .= " where destination_type = 'inbound' \n"; $sql .= " and domain_uuid = :domain_uuid \n"; $sql .= " ) \n"; $sql .= " order by number asc\n"; $sql .= ") as n\n"; $sql .= "order by \n"; //uncomment below to have the selected message pop up to the top of the list //$sql .= "case when (number = :number) then 0 end asc,\n"; $sql .= "date desc\n"; $parameters['domain_uuid'] = $domain_uuid; $parameters['user_uuid'] = $_SESSION['user']['user_uuid']; //uncomment below to have the selected message pop up to the top of the list //$parameters['number'] = $_SESSION['user']['contact_number'] ?? null; //echo "
\n";
	//echo $sql;
	//echo "
\n"; //view_array($parameters); $contacts = $database->select($sql, $parameters, 'all'); //view_array($contacts); unset($sql, $parameters); //show the content echo "\n"; echo "\n"; echo "\n"; //include icons echo "\n"; // echo "\n"; //js to load messages for clicked number echo "\n"; //styles echo "\n"; //end the header and start the body echo "\n"; echo "\n"; //contacts list if (!empty($contacts) && @sizeof($contacts) != 0) { echo "\n"; foreach ($contacts as $row) { $number = $row['number']; $name = $row['name']; $count = $row['count']; $message = $row['message']; $date = $row['date']; // $row['contact_image_content']; // $row['contact_image_filename']; // $row['contact_uuid']; //get the image file extension if (!empty($row['contact_image_filename'])) { $contact_image_extension = pathinfo($row['contact_image_filename'], PATHINFO_EXTENSION); } //set the count label if ($count == 0) { $count = ''; } else { $count = ' ('.$count.')'; } //$contact_name = format_phone($row['number']); $contact_name = $row['number']; if (!empty($row['name'])) { $contact_name = escape($row['name']); } if (!empty($_SESSION['user']['contact_number']) && $_SESSION['user']['contact_number'] == $number) { echo "\n"; } echo "
\n"; if (permission_exists('contact_view') && !empty($_SESSION['message']['contact_details']['boolean']) && $_SESSION['message']['contact_details']['boolean'] == 'true') { echo ""; } $selected = true; } else { echo "
\n"; // onclick=\"load_thread('".urlencode($number)."', '".$contact[$number]['contact_uuid']."');\" $selected = false; } if (!empty($row['contact_image_filename'])) { //echo "\n"; echo "
\n"; echo " \n"; echo "
\n"; //echo "\n"; } else { echo "
\n"; echo " \n"; echo "
\n"; } echo "
\n"; echo " \n"; echo " ".(is_numeric($contact_name) ? format_phone($contact_name) : escape($contact_name))."".$count."
\n"; echo "
\n"; echo "
\n"; echo " ".(!empty($message) && strlen($message) <= 100 ? escape($message) : substr($message,0,100).'...')."
\n"; echo "
\n"; echo "
\n"; //if ($selected) { // echo "\n"; //} echo "
\n"; //echo "\n"; } else { echo "
···
"; } echo "\n"; //echo "
\n"; //echo " \"".$text['label-refresh_pause']."\" "; //echo "
\n"; echo "\n"; ?>