Skip to content

Commit

Permalink
renamed previews.php to searchpreview.php. fixed group search in sear…
Browse files Browse the repository at this point in the history
…chpreviews to properly compare in lower case. changed backfillPreviews.ts to respect the changed file name. added an await to the searchPreviews call in WTC.vue split previews.php into loadpreviews and searchpreviews to handle the different actions.
  • Loading branch information
Ian committed Mar 18, 2024
1 parent 202907b commit e528d14
Show file tree
Hide file tree
Showing 6 changed files with 268 additions and 16 deletions.
4 changes: 3 additions & 1 deletion frontend/components/ThreadList/ThreadList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default {
emitter.emit('thread-change',newThread);
},
filteredAndSortedPreviews() {
if(this.loaded){
if(this.loaded && this.threadPreviews){
return new Map([...this.threadPreviews].filter(([key, value]) => {
//console.log(value)
if (value == null) {
Expand Down Expand Up @@ -247,6 +247,8 @@ export default {
position:relative;
float: center;
margin-top: 0.5rem;
right:-8rem;
bottom:2rem;
}
.dot-center{
Expand Down
1 change: 1 addition & 0 deletions frontend/components/ThreadSearch/ThreadSearch.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export default{
},
watch:{
searchString(newString, oldString){
newString = newString.trim();
this.threadSearch(newString);
emitter.emit("update-filter-string",newString);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ export default {
this.loaded = false;
this.loadedPreviews = false;
console.log("we've got a route")
searchPreviews(queryString,this.$route.query.extension_uuid);
await searchPreviews(queryString,this.$route.query.extension_uuid);
console.log(this.state.previews);
}
else{
Expand Down
11 changes: 4 additions & 7 deletions frontend/lib/backfillPreviews.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,10 @@ export async function searchPreviews(queryString: string, extensionUUID: string)
let temp;
try {
let params: threadPreviewQuery = { query_string: queryString, extension_uuid: extensionUUID };

queryString = queryString.trim();
// console.log(params)
const response = await fetch('/app/webtexting/previews.php?' + new URLSearchParams(params).toString()).then(r => r.json());
if(response.length){
console.log("received", response.length, "preview from database");
}
const response = await fetch('/app/webtexting/searchpreviews.php?' + new URLSearchParams(params).toString()).then(r => r.json());

temp = response;
// for (let i = 0; i < response.length; i++) {
// let m = response[i];
Expand Down Expand Up @@ -96,8 +94,7 @@ export async function loadPreviews(extensionUUID:string) {
try {
let params: loadPreviewQuery = { extension_uuid: extensionUUID };

console.log('/app/webtexting/previews.php?' + new URLSearchParams(params).toString())
const initialResponse = await fetch('/app/webtexting/previews.php?' + new URLSearchParams(params).toString()).then(r => r.json());
const initialResponse = await fetch('/app/webtexting/loadpreviews.php?' + new URLSearchParams(params).toString()).then(r => r.json());
temp = initialResponse;
//console.log("received", initialResponse.length, "preview from database");
// for (let i = 0; i < response.length; i++) {
Expand Down
252 changes: 252 additions & 0 deletions loadpreviews.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
<?php
require_once __DIR__."/vendor/autoload.php";
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";

header("Content-Type: application/json");

foreach ($_SESSION['user']['extension'] as $ext) {
if ($ext['extension_uuid'] == $_GET['extension_uuid']) {
$extension = $ext;
break;
}
}

if (!$extension) {
http_response_code(400);
echo json_encode(array("error" => "invalid or unauthorized extension"));
die();
}

$database = new database;
// get user's number
$sql = "SELECT phone_number FROM webtexting_destinations WHERE domain_uuid = :domain_uuid AND extension_uuid = :extension_uuid";$parameters['domain_uuid'] = $domain_uuid;
$parameters['extension_uuid'] = $extension['extension_uuid'];
$ownNumber = $database->select($sql, $parameters, 'column');
unset($parameters);
if($ownNumber[0]=='+'){
$ownNumber = subStr($ownNumber,1);
}
if (!$ownNumber) {
echo "To use Web Texting purchase the service at <a href='https://acceleratenetworks.com/services/'>https://acceleratenetworks.com/services/</a> then <a href='mailto:https://acceleratenetworks.com/support/'>Contact Support</a>";
echo "<br> No SMS-enabled number for this extension.";
include_once "footer.php";
die();
}
$query_limit = 20;

//this is for Limiting the list of threads on initial load
$sql = "SELECT * FROM webtexting_threads WHERE domain_uuid = :domain_uuid ORDER BY last_message DESC LIMIT :query_limit ;";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['query_limit'] = $query_limit;
$conversations = $database->select($sql,$parameters, 'all');
unset($parameters);
$i = 0;
$threadPreviews = [];
foreach ($conversations as $conversation){
if($conversation['group_uuid']){
//make the group preview
//check if group has related name
//else build no name group preview


//this is for group construction
//TODO add group member contact names to member array
$sql = 'SELECT *
from webtexting_groups,webtexting_threads
where webtexting_groups.domain_uuid = :domain_uuid
AND webtexting_threads.domain_uuid = :domain_uuid
AND extension_uuid = :extension_uuid
AND webtexting_groups.group_uuid = :group_uuid
AND webtexting_threads.group_uuid = webtexting_groups.group_uuid LIMIT 1;';
$parameters['extension_uuid'] = $extension['extension_uuid'];
$parameters['domain_uuid'] = $domain_uuid;
$parameters['group_uuid'] = $conversation['group_uuid'];

$group = $database->select($sql, $parameters, 'row');
unset($parameters);

if($group){
$threadPreviews[$i]['groupUUID'] = $group['group_uuid'];
$threadPreviews[$i]['groupMembers'] = $group['members'];
if ($group['name'] != null) {
$display_name = $group['name'];
} else {
$display_name = $group['members'];
}
$group_members = explode(",",$group['members']);
$threadPreviews[$i]['groupMembers'] = explode(",",$group['members']);
$member_index =0;
foreach( $group_members as $member ){
if($member == $ownNumber){
$threadPreviews[$i]['groupMembers'][$member_index] = 'Me';
}
else{
$sql = "SELECT v_contacts.contact_uuid, v_contacts.contact_organization, v_contacts.contact_name_given, v_contacts.contact_name_middle, v_contacts.contact_name_family, v_contacts.contact_nickname, v_contacts.contact_title, v_contacts.contact_role FROM v_contact_phones, v_contacts WHERE v_contact_phones.phone_number = :number AND v_contact_phones.domain_uuid = :domain_uuid AND v_contacts.contact_uuid = v_contact_phones.contact_uuid LIMIT 1;";
$parameters['number'] = $member;
$parameters['domain_uuid'] = $domain_uuid;
$contact = $database->select($sql, $parameters, 'row');
unset($parameters);

if ($contact) {
$name_parts = array();
if ($contact['contact_organization']) {
$name_parts[] = $contact['contact_organization'];
}
if ($contact['contact_title']) {
$name_parts[] = $contact['contact_title'];
}
if ($contact['contact_name_prefix']) {
$name_parts[] = $contact['contact_name_prefix'];
}
if ($contact['contact_name_given']) {
$name_parts[] = $contact['contact_name_given'];
}
if ($contact['contact_name_middle']) {
$name_parts[] = $contact['contact_name_middle'];
}
if ($contact['contact_name_family']) {
$name_parts[] = $contact['contact_name_family'];
}
if ($contact['contact_nickname']) {
$name_parts[] = $contact['contact_nickname'];
}
if ($contact['contact_role']) {
$name_parts[] = $contact['contact_role'];
}
if (sizeof($name_parts) > 0) {
$threadPreviews[$i]['groupMembers'][$member_index] = implode(" ", $name_parts);
}
}
else{
$threadPreviews[$i]['groupMembers'][$member_index] = $member;
}
}
$member_index++;
}
$threadPreviews[$i]['link'] = "thread.php?extension_uuid=".$extension['extension_uuid']."&group=".$group['group_uuid'];
$threadPreviews[$i]['ownNumber'] = $ownNumber;
$threadPreviews[$i]['timestamp'] = $group['last_message'];
$threadPreviews[$i]['displayName'] = $display_name;
}
$group= null;
}
else{
//make a solo preview
if($conversation['remote_number'])
$sql = "SELECT *
FROM webtexting_threads,v_contacts , v_contact_phones
WHERE webtexting_threads.domain_uuid = :domain_uuid
AND webtexting_threads.domain_uuid = v_contacts.domain_uuid
AND v_contact_phones.contact_uuid = v_contacts.contact_uuid
AND v_contact_phones.phone_number = :phone_number
AND webtexting_threads.remote_number = v_contact_phones.phone_number;";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['phone_number'] = $conversation['remote_number'];
$solo = $database->select($sql, $parameters, 'row');
unset($parameters);

if($solo){
$usedNumbers[$solo['phone_number']] = true;
$threadPreviews[$i]['remoteNumber'] = $solo['phone_number'];
$threadPreviews[$i]['displayName']= $solo['phone_number'];
$threadPreviews[$i]['contactEditLink'] = "/app/contacts/contact_edit.php?id=".$solo['contact_uuid'];

$threadPreviews[$i]['link'] = "thread.php?extension_uuid=".$extension['extension_uuid']."&number=".$solo['phone_number'];
$threadPreviews[$i]['ownNumber'] = $ownNumber;
$threadPreviews[$i]['timestamp'] = $solo['last_message'];
$name_parts = array();
if ($solo['contact_organization']) {
$name_parts[] = $solo['contact_organization'];
}
if ($solo['contact_title']) {
$name_parts[] = $solo['contact_title'];
}
if ($solo['contact_name_prefix']) {
$name_parts[] = $solo['contact_name_prefix'];
}
if ($solo['contact_name_given']) {
$name_parts[] = $solo['contact_name_given'];
}
if ($solo['contact_name_middle']) {
$name_parts[] = $solo['contact_name_middle'];
}
if ($solo['contact_name_family']) {
$name_parts[] = $solo['contact_name_family'];
}
if ($solo['contact_nickname']) {
$name_parts[] = $solo['contact_nickname'];
}
if ($solo['contact_role']) {
$name_parts[] = $solo['contact_role'];
}
if (sizeof($name_parts) > 0) {
$threadPreviews[$i]['displayName'] = implode(" ", $name_parts);
$contacts[$solo['phone_number']] = $threadPreviews[$i]['displayName'] ;
}
$solo= null;
}

else{
//maybe this needs to be where we search based on remote number instead of nonsense you goof
$sql = "SELECT *
FROM webtexting_threads
WHERE webtexting_threads.domain_uuid = :domain_uuid
AND webtexting_threads.remote_number = :remote_number
AND webtexting_threads.local_number = :local_number;";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['local_number'] = $ownNumber;
$parameters['remote_number'] = $conversation['remote_number'];
$result = $database->select($sql, $parameters, 'all');
unset($parameters);
if($result){
if($usedNumbers[$result['remote_number']]){ //duplicate entry protection for numbers that are contacts
continue;
}
else{
$threadPreviews[$i]['remoteNumber'] = $result[0]['remote_number'];
$threadPreviews[$i]['displayName']= $result[0]['remote_number'];
$threadPreviews[$i]['contactEditLink'] = "/app/contacts/contact_edit.php";

$threadPreviews[$i]['link'] = "thread.php?extension_uuid=".$extension['extension_uuid']."&number=".$result[0]['remote_number'];
$threadPreviews[$i]['ownNumber'] = $ownNumber;
$threadPreviews[$i]['timestamp'] = $result[0]['last_message'];
}
}
}
$result = null;

//else build no contact solo preview
}
$i++;
}
// //this is where we fetch and attach the bodyPreviews
$i=0;
foreach($threadPreviews as $preview){
$sql = "SELECT * FROM webtexting_messages WHERE extension_uuid = :extension_uuid AND domain_uuid = :domain_uuid AND ";
if ($preview['groupUUID'] ) {
$sql .= "group_uuid = :group_uuid";
$parameters['group_uuid'] = $preview['groupUUID'];
} else {
$sql .= "(from_number = :number OR to_number = :number) AND group_uuid IS NULL";
$parameters['number'] = $preview['remoteNumber'];
}
$sql .= " ORDER BY start_stamp DESC LIMIT 1";
$parameters['extension_uuid'] = $extension['extension_uuid'];
$parameters['domain_uuid'] = $domain_uuid;
$last_message = $database->select($sql, $parameters, 'all');
unset($parameters);
if($last_message[0]['content_type'] == 'message/cpim'){
$threadPreviews[$i]['bodyPreview'] = 'MMS Message.';
}
else{
$threadPreviews[$i]['bodyPreview'] = $last_message[0]['message'];

}
$last_message = false;
$i++;
}
echo(json_encode($threadPreviews));
return json_encode($threadPreviews);
//This handles group and contact search jsut need to add number search
14 changes: 7 additions & 7 deletions previews.php → searchpreviews.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
$parameters['extension_uuid'] = $extension['extension_uuid'];
$ownNumber = $database->select($sql, $parameters, 'column');
unset($parameters);
if($ownNumber[0]=='+'){
$ownNumber = subStr($ownNumber,1);
}
if (!$ownNumber) {
echo "To use Web Texting purchase the service at <a href='https://acceleratenetworks.com/services/'>https://acceleratenetworks.com/services/</a> then <a href='mailto:https://acceleratenetworks.com/support/'>Contact Support</a>";
echo "<br> No SMS-enabled number for this extension.";
Expand All @@ -36,14 +39,13 @@
if($_GET['query_string'] != null){
$query_string = $_GET['query_string'];
if(strlen($query_string)>2){
$query_limit_string = '10';
}
}
else{
$query_string = '';
$query_limit_string = '10';
}


$sql = "SELECT *
FROM webtexting_threads,v_contacts , v_contact_phones
WHERE webtexting_threads.domain_uuid = :domain_uuid
Expand All @@ -52,10 +54,9 @@
AND webtexting_threads.remote_number = v_contact_phones.phone_number
AND LOWER(CONCAT(v_contacts.contact_organization , ' ' ,v_contacts.contact_name_given , ' ' , v_contacts.contact_name_middle ,
' ' , v_contacts.contact_name_family , ' ' , v_contacts.contact_nickname, ' ', v_contacts.contact_title, ' ',
v_contacts.contact_role) ) LIKE LOWER('%'||:query_string||'%' ) LIMIT :query_limit;";
v_contacts.contact_role) ) LIKE LOWER('%'||:query_string||'%' ) ;";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['query_string'] = $query_string;
$parameters['query_limit'] = $query_limit_string;
$solo_conversations = $database->select($sql, $parameters, 'all');
unset($parameters);
$z = 0;
Expand Down Expand Up @@ -111,11 +112,10 @@
AND webtexting_threads.domain_uuid = :domain_uuid
AND extension_uuid = :extension_uuid
AND webtexting_threads.group_uuid = webtexting_groups.group_uuid
AND webtexting_groups.name LIKE LOWER('%'||:query_string||'%' ) LIMIT :query_limit;";
AND LOWER(webtexting_groups.name) LIKE LOWER('%'||:query_string||'%' ) ";
$parameters['extension_uuid'] = $extension['extension_uuid'];
$parameters['domain_uuid'] = $domain_uuid;
$parameters['query_string'] = $query_string;
$parameters['query_limit'] = $query_limit_string;

$groups = $database->select($sql, $parameters, 'all');
unset($parameters);
Expand Down Expand Up @@ -220,4 +220,4 @@
}
echo(json_encode($threadPreviews));
return json_encode($threadPreviews);
//This handles group and contact search jsut need to add number search
//This handles group and contact search jsut need to add number search

0 comments on commit e528d14

Please sign in to comment.