Partial Mailling list campaign tracker currently tracks opens using a 1x1 image, some more UI work to campaigns etc

This commit is contained in:
johnnyq 2022-01-24 18:27:12 -05:00
parent ef8e9285aa
commit 039e374cd6
5 changed files with 89 additions and 10 deletions

View File

@ -29,6 +29,19 @@ if(isset($_GET['campaign_id'])){
$campaign_badge_color = "secondary";
}
//Get Stat Counts
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_sent_at IS NOT NULL AND message_campaign_id = $campaign_id");
$sent_count = mysqli_num_rows($sql);
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_opened_at IS NOT NULL AND message_campaign_id = $campaign_id");
$open_count = mysqli_num_rows($sql);
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_clicked_at IS NOT NULL AND message_campaign_id = $campaign_id");
$click_count = mysqli_num_rows($sql);
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_bounced_at IS NOT NULL AND message_campaign_id = $campaign_id");
$fail_count = mysqli_num_rows($sql);
?>
<ol class="breadcrumb elevation-2">
@ -61,28 +74,28 @@ if(isset($_GET['campaign_id'])){
<div class="col-sm-1">
<div class="card card-body card-outline card-success text-center elevation-2">
<h6 class="text-success">Sent</h6>
<h1>18</h1>
<h1><?php echo $sent_count; ?></h1>
</div>
</div>
<div class="col-sm-1">
<div class="card card-body card-outline card-secondary text-center elevation-2">
<h6 class="text-secondary">Opened</h6>
<h1>10</h1>
<h1><?php echo $open_count; ?></h1>
</div>
</div>
<div class="col-sm-1">
<div class="card card-body card-outline card-info text-center elevation-2">
<h6 class="text-info">Clicked</h6>
<h1>7</h1>
<h1><?php echo $click_count; ?></h1>
</div>
</div>
<div class="col-sm-1">
<div class="card card-body card-outline card-danger text-center elevation-2">
<h6 class="text-danger">Failed</h6>
<h1>3</h1>
<h1><?php echo $fail_count; ?></h1>
</div>
</div>
@ -171,7 +184,9 @@ if(isset($_GET['campaign_id'])){
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=client_name&o=<?php echo $disp; ?>">Client Name</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=contact_name&o=<?php echo $disp; ?>">Contact Name</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=contact_email&o=<?php echo $disp; ?>">Email</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=message_ip&o=<?php echo $disp; ?>">IP</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=message_sent_at&o=<?php echo $disp; ?>">Sent</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=message_opened_at&o=<?php echo $disp; ?>">Opened</a></th>
</tr>
</thead>
<tbody>
@ -179,19 +194,26 @@ if(isset($_GET['campaign_id'])){
while($row = mysqli_fetch_array($sql)){
$message_id = $row['message_id'];
$message_ip = $row['message_ip'];
$message_user_agent = $row['message_user_agent'];
$message_sent_at = $row['message_sent_at'];
$message_opened_at = $row['message_opened_at'];
$client_id = $row['client_id'];
$client_name = $row['client_name'];
$contact_id = $row['contact_id'];
$contact_name = $row['contact_name'];
$contact_email = $row['contact_email'];
$message_sent_at = $row['message_sent_at'];
?>
<tr>
<td><?php echo $client_name; ?></td>
<td><?php echo $contact_name; ?></td>
<td><?php echo $contact_email; ?></td>
<td><?php echo $message_ip; ?></td>
<td><?php echo $message_sent_at; ?></td>
<td><?php echo $message_opened_at; ?></td>
</tr>
<?php

39
campaign_track.php Normal file
View File

@ -0,0 +1,39 @@
<?php
include("config.php");
include("functions.php");
// Create an image, 1x1 pixel in size
$im = imagecreate(1,1);
// Set the background colour
$white = imagecolorallocate($im,255,255,255);
// Allocate the background colour
imagesetpixel($im,1,1,$white);
// Set the image type
header("content-type:image/jpg");
// Create a JPEG file from the image
imagejpeg($im);
// Free memory associated with the image
imagedestroy($im);
if(isset($_GET['message_id'])){
$message_id = intval($_GET['message_id']);
$message_hash = trim(strip_tags(mysqli_real_escape_string($mysqli,$_GET['message_hash'])));
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_id = $message_id AND message_hash = '$message_hash'");
if(mysqli_num_rows($sql) == 1){
// Server variables
$ip = strip_tags(mysqli_real_escape_string($mysqli,get_ip()));
$referer = $_SERVER['HTTP_REFERER'];
$user_agent = $_SERVER['HTTP_USER_AGENT'];
mysqli_query($mysqli,"UPDATE campaign_messages SET message_ip = '$ip', message_referer = '$referer', message_user_agent = '$user_agent', message_browser_details = '$browser', message_opened_at = NOW() WHERE message_id = $message_id");
}
}
?>

View File

@ -192,12 +192,25 @@
$campaign_badge_color = "secondary";
}
//Get Stat Counts
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_sent_at IS NOT NULL AND message_campaign_id = $campaign_id");
$sent_count = mysqli_num_rows($sql);
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_opened_at IS NOT NULL AND message_campaign_id = $campaign_id");
$open_count = mysqli_num_rows($sql);
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_clicked_at IS NOT NULL AND message_campaign_id = $campaign_id");
$click_count = mysqli_num_rows($sql);
$sql = mysqli_query($mysqli,"SELECT message_id FROM campaign_messages WHERE message_bounced_at IS NOT NULL AND message_campaign_id = $campaign_id");
$fail_count = mysqli_num_rows($sql);
?>
<tr>
<td><a href="campaign.php?campaign_id=<?php echo $campaign_id; ?>"><?php echo $campaign_name; ?></a></td>
<td>-</td>
<td>-</td>
<td>-</td>
<td class="text-success"><?php echo $sent_count; ?></td>
<td class="text-secondary"><?php echo $open_count; ?></td>
<td class="text-info"><?php echo $click_count; ?></td>
<td><?php echo $campaign_created_at; ?></td>
<td><?php echo $campaign_scheduled_at; ?></td>
<td>

View File

@ -49,6 +49,7 @@ while($row = mysqli_fetch_array($sql_companies)){
while($row = mysqli_fetch_array($sql_messages)){
$message_id = $row['message_id'];
$message_hash = $row['message_hash'];
$client_id = $row['client_id'];
$client_name = $row['client_name'];
$contact_id = $row['contact_id'];
@ -80,6 +81,8 @@ while($row = mysqli_fetch_array($sql_companies)){
$mail->Subject = "$campaign_subject";
$mail->Body = "Hello $contact_name,<br><br>$campaign_content
<br><br>
<img src='https://$config_base_url/campaign_track.php?message_id=$message_id&message_hash=$message_hash'>
<br><br><br>~<br>$company_name<br>$company_phone";
$mail->send();

View File

@ -1676,10 +1676,12 @@ if(isset($_POST['add_campaign'])){
$contact_email = $row['contact_email'];
//Check to see if the email has already been added if so don't add it
$row = mysqli_fetch_assoc(mysqli_query($mysqli,"SELECT COUNT(message_id) AS count FROM campaign_messages WHERE message_recipient_email = '$contact_email' AND message_campaign_id = $campaign_id"));
$row = mysqli_fetch_assoc(mysqli_query($mysqli,"SELECT COUNT(message_id) AS count FROM campaign_messages WHERE message_contact_id = $contact_id AND message_campaign_id = $campaign_id"));
$count = $row['count'];
if($count == 0){
mysqli_query($mysqli,"INSERT INTO campaign_messages SET message_recipient_email = '$contact_email', message_created_at = NOW(), message_client_tag_id = $tag, message_contact_id = $contact_id, message_campaign_id = $campaign_id, company_id = $session_company_id");
//Generate Unique hash
$message_hash = keygen();
mysqli_query($mysqli,"INSERT INTO campaign_messages SET message_hash = '$message_hash', message_created_at = NOW(), message_client_tag_id = $tag, message_contact_id = $contact_id, message_campaign_id = $campaign_id, company_id = $session_company_id");
}
}
}