<?php // click stats per message require_once dirname(__FILE__).'/accesscheck.php'; if (isset($_GET['id'])) { $id = sprintf('%d', $_GET['id']); } else { $id = 0; } $some = 0; $access = accessLevel('mclicks'); switch ($access) { case 'owner': $subselect = ' and owner = '.$_SESSION['logindetails']['id']; if ($id) { $allow = Sql_Fetch_Row_query(sprintf('select owner from %s where id = %d %s', $GLOBALS['tables']['message'], $id, $subselect)); if ($allow[0] != $_SESSION['logindetails']['id']) { echo s('You do not have access to this page'); return; } } break; case 'all': $subselect = ''; break; case 'none': default: $subselect = ' where id = 0'; echo s('You do not have access to this page'); return; break; } $download = !empty($_GET['dl']); if ($download) { ob_end_clean(); header('Content-type: text/csv'); header('Content-disposition: attachment; filename="phpList Campaign click statistics.csv"'); ob_start(); } // If and ID is provided, and we're viewing details for a specific campaign, load an ajaxed page version if (!$id) { echo '<div id="contentdiv"></div>'; echo asyncLoadContent('./?page=pageaction&action=mclicks&ajaxed=true&id='.$id.addCsrfGetToken()); return; } echo '<div class="actions pull-right">'.PageLinkButton( 'mclicks&id='.$id.'&dl=1' , s('Download as CSV file') ).'</div><div class="clearfix"></div>'; echo '<h3>'.s('Click Details for a Message').'</h3>'; $messagedata = Sql_Fetch_Array_query("SELECT * FROM {$tables['message']} where id = $id $subselect"); $totalusers = Sql_Fetch_Row_Query(sprintf('select count(userid) from %s where messageid = %d and status = "sent"', $GLOBALS['tables']['usermessage'], $id)); $totalbounced = Sql_Fetch_Row_Query(sprintf('select count(user) from %s where message = %d', $GLOBALS['tables']['user_message_bounce'], $id)); //unique clicks $totalclicked = Sql_Fetch_Row_Query(sprintf('select count(distinct userid) from %s where messageid = %d', $GLOBALS['tables']['linktrack_uml_click'], $id)); //total clicks $totalclicks = Sql_Fetch_Row_Query(sprintf('select sum(clicked) from %s where messageid = %d', $GLOBALS['tables']['linktrack_ml'], $id)); if (($totalusers[0] - $totalbounced[0]) > 0) { $clickperc = sprintf('%0.2f', ($totalclicked[0] / ($totalusers[0] - $totalbounced[0]) * 100)); } else { $clickperc = $GLOBALS['I18N']->get('N/A'); } echo '<table class="mclicksDetails"> <tr><td>' .s('Subject').'</td><td>'.$messagedata['subject'].'</td></tr> <tr><td>' .s('Entered').'</td><td>'.formatDateTime($messagedata['entered']).'</td></tr> <tr><td>' .s('Date sent').'</td><td>'.formatDateTime($messagedata['sent']).'</td></tr> <tr><td>' .s('Sent to').'</td><td>'.number_format($totalusers[0]).' '.s('Subscribers').'</td></tr>'; if ($totalusers[0] > 0) { echo '<tr><td>'.s('Bounced').'</td><td>'.number_format($totalbounced[0]).' ('; echo sprintf('%0.2f', ($totalbounced[0] / $totalusers[0] * 100)); echo '%)</td></tr>'; } echo '<tr><td>'.s('Unique subscribers who clicked').'</td><td>'.number_format($totalclicked[0]).' <span style="margin-left:10px">'.PageLinkButton('userclicks&msgid='.$id, s('View subscribers')).'</span></td></tr> <tr><td>' .s('Total clicks').'</td><td>'.number_format($totalclicks[0]).' </td></tr> <tr><td>' .s('Click rate').'</td><td>'.$clickperc.' %</td></tr> </table><hr/>'; $ls = new WebblerListing(s('Campaign click statistics')); $ls->setElementHeading(s('Link URL')); $query = ' SELECT url, firstclick, latestclick, total, clicked, htmlclicked, textclicked, forwardid FROM '.$GLOBALS['tables']['linktrack_ml'].' ml, '.$GLOBALS['tables']['linktrack_forward'].' forward WHERE ml.messageid = '.sprintf($id, '%d').' AND ml.forwardid = forward.id'; $req = Sql_Query($query); //# put a limit on (when there are too many distinct URLs, eg when personalised URLs have been used) $num = Sql_Affected_Rows(); if ($num > 50) { $query .= ' and total > 0 limit 50'; $req = Sql_Query($query); } $summary = array(); $summary['totalclicks'] = 0; $summary['totalsent'] = 0; $summary['uniqueclicks'] = 0; while ($row = Sql_Fetch_Array($req)) { $uniqueclicks = Sql_Fetch_Array_Query(' SELECT COUNT(DISTINCT userid) AS users FROM '.$GLOBALS['tables']['linktrack_uml_click'].' WHERE messageid = '.sprintf($id, '%d').' AND forwardid = '.sprintf($row['forwardid'], '%d') ); if (!$download) { $element = shortenUrlDisplay($row['url']); } else { $element = $row['url']; } $ls->addElement($element, PageURL2('uclicks&id='.$row['forwardid'])); $ls->setClass($element, 'row1'); // $ls->addColumn($element,$GLOBALS['I18N']->get('firstclick'),formatDateTime($row['firstclick'],1)); // $ls->addColumn($element,$GLOBALS['I18N']->get('latestclick'),$row['latestclick']); //# set is confusing, as it is total links sent, not total users sent, https://mantis.phplist.com/view.php?id=17057 //# remove // $ls->addColumn($element,$GLOBALS['I18N']->get('sent'),$row['total']); //$ls->addColumn($element,$GLOBALS['I18N']->get('clicks'),$row['clicked'].'<span class="viewusers"><a class="button" href="'.PageUrl2('userclicks&msgid='.$id.'&fwdid='.$row['forwardid']).'" title="'.$GLOBALS['I18N']->get('view users').'"></a></span>'); //$perc = sprintf('%0.2f',($row['clicked'] / $row['total'] * 100)); //$ls->addColumn($element,$GLOBALS['I18N']->get('clickrate'),$perc.'%'); // if (CLICKTRACK_SHOWDETAIL) { $ls->addColumn( $element , s('unique clicks') , number_format($uniqueclicks['users']).'<span class="viewusers"><a class="button" href="'.PageUrl2('userclicks&msgid='.$id.'&fwdid='.$row['forwardid']).'" title="'.s('view subscribers who clicked').'"></a></span>'); $perc = sprintf('%0.2f', ($uniqueclicks['users'] / $totalusers[0] * 100)); $ls->addColumn($element, s('clickrate'), $perc.'%'); $summary['uniqueclicks'] += $uniqueclicks['users']; $moreInfo1 = ' <div class="content listingsmall fright gray">' .s('html').': '.number_format($row['htmlclicked']).'</div>'.' <div class="content listingsmall fright gray">' .s('text').': '.number_format($row['textclicked']).'</div>'.' '; $moreInfo2 = ' <div class="content listingsmall fright gray">' .s('firstclick').': '.formatDateTime($row['firstclick']).'</div>'.' <div class="content listingsmall fright gray">' .s('latestclick').': '.formatDateTime($row['latestclick']).'</div>'.' '; //# @@TODO the totals for HTML+text will now not match the total clicks $ls->addRow($element, $moreInfo1, $moreInfo2); // } $summary['totalclicks'] += $row['clicked']; $summary['totalsent'] += $row['total']; } $ls->addElement('Total'); $ls->setClass('Total', 'rowtotal'); $ls->addColumn('Total', s('unique clicks'), number_format($summary['uniqueclicks'])); $perc = sprintf('%0.2f', ($summary['uniqueclicks'] / $totalusers[0] * 100)); $ls->addColumn('Total', s('clickrate'), $perc.'%'); if ($download) { ob_end_clean(); $status .= $ls->tabDelimited(); } echo $ls->display();
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
PEAR | Folder | 0755 |
|
|
PHPMailer | Folder | 0755 |
|
|
PHPMailer6 | Folder | 0755 |
|
|
actions | Folder | 0755 |
|
|
css | Folder | 0755 |
|
|
data | Folder | 0755 |
|
|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
inc | Folder | 0755 |
|
|
info | Folder | 0755 |
|
|
js | Folder | 0755 |
|
|
locale | Folder | 0755 |
|
|
onyxrss | Folder | 0755 |
|
|
plugins | Folder | 0755 |
|
|
tests | Folder | 0755 |
|
|
ui | Folder | 0755 |
|
|
.gitignore | File | 20 B | 0644 |
|
.htaccess | File | 489 B | 0644 |
|
.minceconf | File | 994 B | 0644 |
|
AnalyticsQuery.php | File | 985 B | 0644 |
|
CsvReader.php | File | 1.27 KB | 0644 |
|
EmailSender.php | File | 477 B | 0644 |
|
Updater.php | File | 193 B | 0644 |
|
about.php | File | 7.4 KB | 0644 |
|
accesscheck.php | File | 715 B | 0644 |
|
addprefix.php | File | 1.01 KB | 0644 |
|
adduser.php | File | 46 B | 0644 |
|
admin.php | File | 12.77 KB | 0644 |
|
adminattributes.php | File | 7.46 KB | 0644 |
|
admins.php | File | 5.16 KB | 0644 |
|
analytics.php | File | 2.84 KB | 0644 |
|
attributes.php | File | 26.2 KB | 0644 |
|
blacklistemail.php | File | 1.22 KB | 0644 |
|
bounce.php | File | 11.14 KB | 0644 |
|
bouncemgt.php | File | 1.44 KB | 0644 |
|
bouncerule.php | File | 4.27 KB | 0644 |
|
bouncerules.php | File | 6.33 KB | 0644 |
|
bounces.php | File | 7.57 KB | 0644 |
|
catlists.php | File | 3.34 KB | 0644 |
|
checkbouncerules.php | File | 1.43 KB | 0644 |
|
checki18n.php | File | 3.13 KB | 0644 |
|
checkprerequisites.php | File | 1.62 KB | 0644 |
|
class.image.inc | File | 3.9 KB | 0644 |
|
class.phplistmailer.php | File | 30.73 KB | 0644 |
|
class.phplistmailerbase.php | File | 1.67 KB | 0644 |
|
community.php | File | 3.5 KB | 0644 |
|
communityfeed.php | File | 2.36 KB | 0644 |
|
configure.php | File | 7.85 KB | 0644 |
|
connect.php | File | 89.86 KB | 0644 |
|
convertstats.php | File | 5.83 KB | 0644 |
|
converttoutf8.php | File | 3.78 KB | 0644 |
|
cron.php | File | 3.34 KB | 0644 |
|
date.php | File | 7.65 KB | 0644 |
|
dbcheck.php | File | 3.7 KB | 0644 |
|
defaultFrontendTexts.php | File | 9.79 KB | 0644 |
|
defaultconfig.php | File | 30.66 KB | 0644 |
|
defaultplugin.php | File | 31.59 KB | 0644 |
|
defaults.php | File | 3.64 KB | 0644 |
|
defaultsystemtemplate.php | File | 15.29 KB | 0644 |
|
defaulttest.php | File | 1.23 KB | 0644 |
|
dlusers.php | File | 235 B | 0644 |
|
domainbounces.php | File | 507 B | 0644 |
|
domainstats.php | File | 371 B | 0644 |
|
editattributes.php | File | 8.78 KB | 0644 |
|
editlist.php | File | 7.4 KB | 0644 |
|
eventlog.php | File | 4.68 KB | 0644 |
|
export.php | File | 6.86 KB | 0644 |
|
exportuserdata.php | File | 8.26 KB | 0644 |
|
fckphplist.php | File | 49.84 KB | 0644 |
|
gchart.php | File | 903 B | 0644 |
|
generatebouncerules.php | File | 5.51 KB | 0644 |
|
home.php | File | 6.56 KB | 0644 |
|
hostedprocessqueuesetup.php | File | 3.09 KB | 0644 |
|
htaccess | File | 311 B | 0644 |
|
image.php | File | 2.01 KB | 0644 |
|
import.php | File | 2.75 KB | 0644 |
|
import1.php | File | 11.09 KB | 0644 |
|
import2.php | File | 34.16 KB | 0644 |
|
import3.php | File | 22.72 KB | 0644 |
|
import4.php | File | 16.86 KB | 0644 |
|
importadmin.php | File | 17.08 KB | 0644 |
|
importsimple.php | File | 7.32 KB | 0644 |
|
index.php | File | 32.82 KB | 0644 |
|
info.php | File | 1.07 KB | 0644 |
|
init.php | File | 27.36 KB | 0644 |
|
initialise.php | File | 12.05 KB | 0644 |
|
initlanguages.php | File | 867 B | 0644 |
|
languages.php | File | 21.37 KB | 0644 |
|
lib.php | File | 86.79 KB | 0644 |
|
list.php | File | 11.32 KB | 0644 |
|
listbounces.php | File | 4.13 KB | 0644 |
|
login.php | File | 6.39 KB | 0644 |
|
logout.php | File | 865 B | 0644 |
|
massremove.php | File | 2.55 KB | 0644 |
|
mclicks.php | File | 7.28 KB | 0644 |
|
members.php | File | 19.99 KB | 0644 |
|
mergeduplicates.php | File | 4.48 KB | 0644 |
|
message.php | File | 9.08 KB | 0644 |
|
messages.php | File | 26.27 KB | 0644 |
|
minify.txt | File | 201 B | 0644 |
|
msgbounces.php | File | 3.4 KB | 0644 |
|
msgstatus.php | File | 1.27 KB | 0644 |
|
mviews.php | File | 6.27 KB | 0644 |
|
mysql.inc | File | 40 B | 0644 |
|
mysqli.inc | File | 14.02 KB | 0644 |
|
pageaction.php | File | 1.11 KB | 0644 |
|
phpListAdminAuthentication.php | File | 6.82 KB | 0644 |
|
pluginlib.php | File | 9.43 KB | 0644 |
|
plugins.php | File | 17.78 KB | 0644 |
|
preparesend.php | File | 669 B | 0644 |
|
processbounces.php | File | 35.36 KB | 0644 |
|
processqueue.php | File | 3.71 KB | 0644 |
|
readtestmail.php | File | 11.59 KB | 0644 |
|
reconcileusers.php | File | 27.71 KB | 0644 |
|
redirecttoupdater.php | File | 187 B | 0644 |
|
reindex.php | File | 1.82 KB | 0644 |
|
rsslib.php | File | 3.17 KB | 0644 |
|
runcommand.php | File | 583 B | 0644 |
|
send.php | File | 6.17 KB | 0644 |
|
send_core.php | File | 63.91 KB | 0644 |
|
sendemaillib.php | File | 69.84 KB | 0644 |
|
sendprepared.php | File | 4.87 KB | 0644 |
|
sessionlib.php | File | 2.7 KB | 0644 |
|
setpermissions.php | File | 2.08 KB | 0644 |
|
setup.php | File | 2.56 KB | 0644 |
|
spage.php | File | 4.35 KB | 0644 |
|
spageedit.php | File | 19.08 KB | 0644 |
|
statsmgt.php | File | 1.23 KB | 0644 |
|
statsoverview.php | File | 6.19 KB | 0644 |
|
stresstest.php | File | 4.82 KB | 0644 |
|
structure.php | File | 29.21 KB | 0644 |
|
subscribelib2.php | File | 70.22 KB | 0644 |
|
subscriberstats.php | File | 617 B | 0644 |
|
suppressionlist.php | File | 1.71 KB | 0644 |
|
system.php | File | 795 B | 0644 |
|
systemstats.php | File | 5.73 KB | 0644 |
|
template.php | File | 16.4 KB | 0644 |
|
templates.php | File | 3.01 KB | 0644 |
|
tests.php | File | 1.67 KB | 0644 |
|
uclicks.php | File | 6.74 KB | 0644 |
|
update.php | File | 187 B | 0644 |
|
updateLib.php | File | 2.2 KB | 0644 |
|
updatetlds.php | File | 358 B | 0644 |
|
updatetranslation.php | File | 2.51 KB | 0644 |
|
upgrade.php | File | 23.82 KB | 0644 |
|
user.php | File | 23.08 KB | 0644 |
|
usercheck.php | File | 2.55 KB | 0644 |
|
userclicks.php | File | 11.57 KB | 0644 |
|
userhistory.php | File | 8.25 KB | 0644 |
|
usermgt.php | File | 1.9 KB | 0644 |
|
users.php | File | 19.3 KB | 0644 |
|
vCard.php | File | 1.9 KB | 0644 |
|
viewmessage.php | File | 635 B | 0644 |
|
viewtemplate.php | File | 1.86 KB | 0644 |
|
vote.php | File | 38 B | 0644 |
|