uawdijnntqw1x1x1
IP : 216.73.217.31
Hostname : webm015.cluster127.gra.hosting.ovh.net
Kernel : Linux webm015.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
pteabiscqq
/
www
/
plugins
/
acymailing
/
.
/
stats
/
.
/
stats.php
/
/
<?php /** * @package AcyMailing for Joomla! * @version 5.10.2 * @author acyba.com * @copyright (C) 2009-2018 ACYBA S.A.R.L. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php class plgAcymailingStats extends JPlugin { function __construct(&$subject, $config) { parent::__construct($subject, $config); if (!isset($this->params)) { $plugin = JPluginHelper::getPlugin('acymailing', 'stats'); $this->params = new acyParameter($plugin->params); } $this->acypluginsHelper = acymailing_get('helper.acyplugins'); } function acymailing_replacetags(&$email, $send = true) { $this->statPicture($email, $send); if (acymailing_level(3)) { $this->_replaceAutoCharts($email); $this->_replaceOneCharts($email); } } function statPicture(&$email, $send = true) { if (!empty($email->altbody)) { $email->altbody = str_replace(array('{statpicture}', '{nostatpicture}'), '', $email->altbody); } if (((isset($email->sendHTML) && !$email->sendHTML) || (isset($email->html) && !$email->html)) || empty($email->type) || !in_array($email->type, array('news', 'autonews', 'followup', 'welcome', 'unsub', 'joomlanotification', 'action')) || strpos($email->body, '{nostatpicture}')) { $email->body = str_replace(array('{statpicture}', '{nostatpicture}'), '', $email->body); return; } if (!$send) { $pictureLink = ACYMAILING_LIVE.$this->params->get('picture', 'media/com_acymailing/images/statpicture.png'); } else { $config = acymailing_config(); $itemId = $config->get('itemid', 0); $item = empty($itemId) ? '' : '&Itemid='.$itemId; $pictureLink = acymailing_frontendLink('index.php?option=com_acymailing&ctrl=statistics&mailid='.$email->mailid.'&subid={subtag:subid}'.$item, false); } $widthsize = $this->params->get('width', 50); $heightsize = $this->params->get('height', 1); $width = empty($widthsize) ? '' : ' width="'.$widthsize.'" '; $height = empty($heightsize) ? '' : ' height="'.$heightsize.'" '; $statPicture = '<img class="spict" alt="'.$this->params->get('alttext', '').'" src="'.$pictureLink.'" border="0" '.$height.$width.'/>'; if (strpos($email->body, '{statpicture}')) { $email->body = str_replace('{statpicture}', $statPicture, $email->body); } elseif (strpos($email->body, '</body>')) { $email->body = str_replace('</body>', $statPicture.'</body>', $email->body); } else { $email->body .= $statPicture; } }//endfct function acymailing_getstatpicture() { return $this->params->get('picture', 'media/com_acymailing/images/statpicture.png'); } function onAcyDisplayTriggers(&$triggers) { $triggers['opennews'] = acymailing_translation('ON_OPEN_NEWS'); } function onAcyDisplayFilters(&$type, $context = "massactions") { if ($context != "massactions" AND !$this->params->get('displayfilter_'.$context, false)) { return; } $type['deliverstat'] = acymailing_translation('STATISTICS'); $allemails = acymailing_loadObjectList("SELECT `mailid`,CONCAT(`subject`,' [',".acymailing_escapeDB(acymailing_translation('ACY_ID').' ').", CAST(`mailid` AS char),']') as 'value' FROM `#__acymailing_mail` WHERE `type` IN('news','welcome','unsub','followup','notification','joomlanotification') ORDER BY `senddate` DESC LIMIT 5000"); $element = new stdClass(); $element->mailid = 0; $element->value = acymailing_translation('EMAIL_NAME'); array_unshift($allemails, $element); $actions = array(); $actions[] = acymailing_selectOption('open', acymailing_translation('OPEN')); $actions[] = acymailing_selectOption('notopen', acymailing_translation('NOT_OPEN')); $actions[] = acymailing_selectOption('failed', acymailing_translation('FAILED')); if (acymailing_level(3)) { $actions[] = acymailing_selectOption('bounce', acymailing_translation('BOUNCES')); } $actions[] = acymailing_selectOption('htmlsent', acymailing_translation('SENT_HTML')); $actions[] = acymailing_selectOption('textsent', acymailing_translation('SENT_TEXT')); $actions[] = acymailing_selectOption('notsent', acymailing_translation('NOT_SENT')); $return = '<div id="filter__num__deliverstat">'.acymailing_select($actions, "filter[__num__][deliverstat][action]", 'class="inputbox" onchange="countresults(__num__);" size="1"', 'value', 'text'); $return .= ' '.acymailing_select($allemails, "filter[__num__][deliverstat][mailid]", 'onchange="countresults(__num__)" class="inputbox" size="1" style="max-width:200px"', 'mailid', 'value').'</div>'; return $return; } function onAcyProcessFilterCount_deliverstat(&$query, $filter, $num) { $this->onAcyProcessFilter_deliverstat($query, $filter, $num); return acymailing_translation_sprintf('SELECTED_USERS', $query->count()); } function onAcyDisplayFilter_deliverstat($filter) { $statTxt = array( 'open' => acymailing_translation('OPEN'), 'notopen' => acymailing_translation('NOT_OPEN'), 'failed' => acymailing_translation('FAILED'), 'bounce' => acymailing_translation('BOUNCES'), 'htmlsent' => acymailing_translation('SENT_HTML'), 'textsent' => acymailing_translation('SENT_TEXT'), 'notsent' => acymailing_translation('NOT_SENT') ); if (empty($filter['mailid'])) { $mailSubject = acymailing_translation('EMAIL_NAME'); } else { $mailClass = acymailing_get('class.mail'); $mail = $mailClass->get($filter['mailid']); $mailSubject = $mail->subject.' [ID '.$filter['mailid'].' ]'; } return acymailing_translation('STATISTICS').': '.$statTxt[$filter['action']].' '.$mailSubject; } function onAcyProcessFilter_deliverstat(&$query, $filter, $num) { $alias = 'stats'.$num; $jl = '#__acymailing_userstats AS '.$alias.' ON '.$alias.'.subid = sub.subid'; if (!empty($filter['mailid'])) { $jl .= ' AND '.$alias.'.mailid = '.intval($filter['mailid']); } $query->leftjoin[$alias] = $jl; if ($filter['action'] == 'open') { $where = $alias.'.open > 0'; } elseif ($filter['action'] == 'notopen') { if (empty($filter['mailid'])) { unset($query->leftjoin[$alias]); $usersNeverOpened = acymailing_loadResultArray('SELECT subid FROM #__acymailing_userstats GROUP BY subid HAVING MAX(open) = 0'); if (empty($usersNeverOpened)) { $usersNeverOpened = array(0); } $where = 'sub.subid IN ('.implode(',', $usersNeverOpened).')'; } else { $where = $alias.'.open = 0'; } } elseif ($filter['action'] == 'failed') { $where = $alias.'.fail = 1'; } elseif ($filter['action'] == 'bounce') { $where = $alias.'.bounce = 1'; } elseif ($filter['action'] == 'htmlsent') { $where = $alias.'.html = 1'; } elseif ($filter['action'] == 'textsent') { $where = $alias.'.html = 0'; } elseif ($filter['action'] == 'notsent') { $where = $alias.'.subid IS NULL'; } $query->where[] = $where; } function acymailing_getPluginType() { $onePlugin = new stdClass(); $onePlugin->name = acymailing_translation('STATISTICS'); $onePlugin->function = 'acymailing_stats_show'; $onePlugin->help = 'plugin-stats'; return $onePlugin; } function acymailing_stats_show() { if (!function_exists('imageCreateTrueColor')) { acymailing_display('The "php_gd2" extension is not enabled on your server, you will have to ask your host to enable it'); return; } $pageInfo = new stdClass(); $pageInfo->filter = new stdClass(); $pageInfo->filter->order = new stdClass(); $pageInfo->limit = new stdClass(); $pageInfo->elements = new stdClass(); $paramBase = ACYMAILING_COMPONENT.'.stats'; $pageInfo->filter->order->value = acymailing_getUserVar($paramBase.".filter_order", 'filter_order', 'a.mailid', 'cmd'); $pageInfo->filter->order->dir = acymailing_getUserVar($paramBase.".filter_order_Dir", 'filter_order_Dir', 'desc', 'word'); if (strtolower($pageInfo->filter->order->dir) !== 'desc') { $pageInfo->filter->order->dir = 'asc'; } $pageInfo->search = acymailing_getUserVar($paramBase.".search", 'search', '', 'string'); $pageInfo->search = strtolower(trim($pageInfo->search)); $pageInfo->filter_list = acymailing_getUserVar($paramBase.".filter_list", 'filter_list', '', 'int'); $pageInfo->filter_type = acymailing_getUserVar($paramBase.".filter_type", 'filter_type', '', 'int'); $pageInfo->limit->value = acymailing_getUserVar($paramBase.'.list_limit', 'limit', acymailing_getCMSConfig('list_limit'), 'int'); $pageInfo->limit->start = acymailing_getUserVar($paramBase.'.limitstart', 'limitstart', 0, 'int'); $pageInfo->contentfilter = acymailing_getUserVar($paramBase.".contentfilter", 'contentfilter', 'new', 'string'); $pageInfo->contentorder = acymailing_getUserVar($paramBase.".contentorder", 'contentorder', 'id', 'string'); $pageInfo->contentorderdir = acymailing_getUserVar($paramBase.".contentorderdir", 'contentorderdir', 'DESC', 'string'); $pageInfo->cols = acymailing_getUserVar($paramBase.".cols", 'cols', '1', 'string'); $query = 'SELECT SQL_CALC_FOUND_ROWS a.*, GROUP_CONCAT(c.name SEPARATOR ", ") AS listname, u.name AS username FROM '.acymailing_table('mail').' AS a JOIN '.acymailing_table('listmail').' AS b ON a.mailid = b.mailid JOIN '.acymailing_table('list').' AS c ON b.listid = c.listid JOIN '.acymailing_table('users', false).' AS u ON a.userid = u.id '; $searchFields = array('a.mailid', 'a.subject', 'u.name'); if (!empty($pageInfo->search)) { $searchVal = '\'%'.acymailing_getEscaped($pageInfo->search, true).'%\''; $filters[] = implode(" LIKE $searchVal OR ", $searchFields)." LIKE ".$searchVal; } $filters[] = 'a.type = "news"'; $filters[] = 'a.senddate IS NOT NULL'; if (!acymailing_isAdmin()) { $listClass = acymailing_get('class.list'); $this->lists = $listClass->getFrontendLists(); if (empty($this->lists)) { return; } $this->listids = array(); foreach ($this->lists as $oneList) { $this->listids[] = $oneList->listid; } $filters[] = 'c.listid IN ('.implode(',', $this->listids).')'; } if (!empty($pageInfo->filter_list)) { $filters[] = 'b.listid = '.intval($pageInfo->filter_list); } if (!empty($filters)) { $query .= ' WHERE ('.implode(') AND (', $filters).')'; } $query .= ' GROUP BY a.mailid '; if (!empty($pageInfo->filter->order->value)) { $query .= ' ORDER BY '.$pageInfo->filter->order->value.' '.$pageInfo->filter->order->dir; } $rows = acymailing_loadObjectList($query, '', $pageInfo->limit->start, $pageInfo->limit->value); if (!empty($pageInfo->search)) { $rows = acymailing_search($pageInfo->search, $rows); } $pageInfo->elements->total = acymailing_loadResult('SELECT FOUND_ROWS()'); $pageInfo->elements->page = count($rows); $pagination = new acyPagination($pageInfo->elements->total, $pageInfo->limit->start, $pageInfo->limit->value); $type = acymailing_getVar('string', 'type'); $listFilter = $this->_categories($pageInfo->filter_list); ?> <script language="javascript" type="text/javascript"> <!-- var selectedContents = []; function applyContent(contentid, rowClass){ var tmp = selectedContents.indexOf(contentid); if(tmp != -1){ window.document.getElementById('content' + contentid).className = rowClass; delete selectedContents[tmp]; }else{ window.document.getElementById('content' + contentid).className = 'selectedrow'; selectedContents.push(contentid); } updateTag(); } function updateTag(){ var tag = ''; var otherinfo = ''; var tmp = 0; <?php ?> for(var i = 0; i < document.adminForm.cbdisplay.length; i++){ if(!document.adminForm.cbdisplay[i].checked) continue; if(tmp == 0){ tmp += 1; otherinfo += "| display:" + document.adminForm.cbdisplay[i].value; }else{ otherinfo += ", " + document.adminForm.cbdisplay[i].value; } } for(var key in selectedContents){ if(selectedContents.hasOwnProperty(key) && selectedContents[key] && !isNaN(key)){ tag = tag + '{acystats:' + selectedContents[key] + otherinfo + '}<br />'; } } setTag(tag); } var selectedCat = []; function applyAuto(catid, rowClass){ if(catid == 'all'){ <?php $listids = array(); foreach ($this->catvalues as $oneCat) { if (empty($oneCat->value)) { continue; } $listids[] = $oneCat->value; } echo 'var listids = ['.implode(',', $listids).'];'; ?> if(window.document.getElementById('catall').className == 'selectedrow'){ window.document.getElementById('catall').className = "row0"; rowClass = "row0"; }else{ window.document.getElementById('catall').className = "selectedrow"; rowClass = "selectedrow"; } listids.forEach(function(listid){ window.document.getElementById('cat' + listid).className = rowClass; if(rowClass == "row0"){ delete selectedCat[listid]; }else{ selectedCat[listid] = 'selectedone'; } }); }else{ window.document.getElementById('catall').className = 'row0'; if(selectedCat[catid]){ window.document.getElementById('cat' + catid).className = rowClass; delete selectedCat[catid]; }else{ window.document.getElementById('cat' + catid).className = 'selectedrow'; selectedCat[catid] = 'selectedone'; } } updateTagAuto(); } function updateTagAuto(){ var otherinfo = ''; var tmp = 0; var tagselect = document.adminForm.tagselect; for(i = 0; i < tagselect.length; i++){ if(tagselect[i].value == '') continue; if(tmp == 0){ tmp += 1; otherinfo += "| tags:" + tagselect[i].value; }else{ otherinfo += "," + tagselect[i].value; } } tmp = 0; for(var i = 0; i < document.adminForm.cbdisplayauto.length; i++){ if(!document.adminForm.cbdisplayauto[i].checked) continue; if(tmp == 0){ tmp += 1; otherinfo += "| display:" + document.adminForm.cbdisplayauto[i].value; }else{ otherinfo += ", " + document.adminForm.cbdisplayauto[i].value; } } if(document.adminForm.max_article.value){ otherinfo += "| max:" + document.adminForm.max_article.value; } if(document.adminForm.contentorder.value){ otherinfo += "| order:" + document.adminForm.contentorder.value + "," + document.adminForm.contentorderdir.value; } <?php if($type == 'autonews'){ ?> if(document.adminForm.min_article.value){ otherinfo += "| min:" + document.adminForm.min_article.value; } if(document.adminForm.contentfilter && document.adminForm.contentfilter.value){ otherinfo += "| filter:" + document.adminForm.contentfilter.value; } if(document.adminForm.delay && document.adminForm.delay.value){ otherinfo += "| delay:" + document.adminForm.delay.value; } <?php } ?> var tag = '{autoacystats:'; var lists = ''; for(var icat in selectedCat){ if(selectedCat.hasOwnProperty(icat) && selectedCat[icat] == 'selectedone'){ lists += icat + '-'; } } if(lists.length == 0){ setTag(''); return; } tag += lists + otherinfo + '}<br />'; setTag(tag); } //--> </script> <?php $fieldsDisplay = array(); $fieldsDisplay[] = array('title' => 'sent', 'label' => 'ACY_SENT', 'checked' => ''); $fieldsDisplay[] = array('title' => 'status', 'label' => 'STATUS', 'checked' => 'yes'); $fieldsDisplay[] = array('title' => 'devices', 'label' => 'ACY_STAT_MOBILE_USAGE', 'checked' => 'yes'); $fieldsDisplay[] = array('title' => 'browsers', 'label' => 'ACY_STAT_BROWSER', 'checked' => ''); $fieldsDisplay[] = array('title' => 'clicks', 'label' => 'CLICKED_LINK', 'checked' => 'yes'); $tabs = acymailing_get('helper.acytabs'); echo $tabs->startPane('stats_tab'); echo $tabs->startPanel(acymailing_translation('NEWSLETTERS'), 'stats_listings'); ?> <br style="font-size:1px"/> <div class="onelineblockoptions"> <table width="100%" class="acymailing_table"> <tr> <td nowrap="nowrap"><?php echo acymailing_translation('ACY_GRAPHS'); ?></td> <?php $i = 1; foreach ($fieldsDisplay as $oneField) { if ($i == 4) { echo '</tr><tr><td/>'; $i = 1; } echo '<td nowrap="nowrap"><input type="checkbox" name="cbdisplay" value="'.$oneField['title'].'" id="'.$oneField['title'].'" '.(($oneField['checked'] == 'yes') ? 'checked' : '').' onclick="updateTag();"/><label style="margin-left:5px" for="'.$oneField['title'].'">'.trim(acymailing_translation($oneField['label']), ':').'</label></td>'; $i++; } while ($i != 4) { echo '<td/>'; $i++; } ?> </tr> </table> </div> <div class="onelineblockoptions"> <table class="acymailing_table_options"> <tr> <td nowrap="nowrap" width="100%"> <input placeholder="<?php echo acymailing_translation('ACY_SEARCH'); ?>" type="text" name="search" id="acymailingsearch" value="<?php echo $pageInfo->search; ?>" class="text_area" onchange="document.adminForm.submit();"/> <button class="acymailing_button" onclick="this.form.submit();"><?php echo acymailing_translation('JOOMEXT_GO'); ?></button> <button class="acymailing_button" onclick="document.getElementById('acymailingsearch').value='';this.form.submit();"><?php echo acymailing_translation('JOOMEXT_RESET'); ?></button> </td> <td nowrap="nowrap"> <?php echo $listFilter; ?> </td> </tr> </table> <table class="acymailing_table" cellpadding="1" width="100%"> <thead> <tr> <th></th> <th class="title"> <?php echo acymailing_gridSort(acymailing_translation('JOOMEXT_SUBJECT'), 'a.subject', $pageInfo->filter->order->dir, $pageInfo->filter->order->value); ?> </th> <th class="title"> <?php echo acymailing_gridSort(acymailing_translation('ACY_AUTHOR'), 'u.name', $pageInfo->filter->order->dir, $pageInfo->filter->order->value); ?> </th> <th class="title"> <?php echo acymailing_gridSort(acymailing_translation('LISTS'), 'b.listid', $pageInfo->filter->order->dir, $pageInfo->filter->order->value); ?> </th> <th class="title titleid"> <?php echo acymailing_gridSort(acymailing_translation('ACY_ID'), 'a.mailid', $pageInfo->filter->order->dir, $pageInfo->filter->order->value); ?> </th> </tr> </thead> <tfoot> <tr> <td colspan="5"> <?php echo $pagination->getListFooter(); if (ACYMAILING_J30) { $paginationNb = array(); foreach (array(5, 10, 15, 20, 25, 30, 50, 100) as $oneOption) { $paginationNb[] = acymailing_selectOption($oneOption, $oneOption); } $paginationNb[] = acymailing_selectOption(0, acymailing_translation('ACY_ALL')); echo 'Display #'.acymailing_select($paginationNb, 'limit', 'size="1" style="width:60px" onchange="acymailing.submitform();"', 'value', 'text', $pageInfo->limit->value).'<br />'; } echo $pagination->getResultsCounter(); ?> </td> </tr> </tfoot> <tbody> <?php $k = 0; if (!empty($rows)) { foreach ($rows as $row) { $row->subject = acyEmoji::Decode($row->subject); ?> <tr id="content<?php echo $row->mailid; ?>" class="<?php echo "row$k"; ?>" onclick="applyContent(<?php echo $row->mailid.",'row$k'" ?>);" style="cursor:pointer;"> <td class="acytdcheckbox"></td> <td style="text-align:center;"> <?php echo strlen($row->subject) > 200 ? substr($row->subject, 0, 200).'...' : $row->subject; ?> </td> <td style="text-align:center;"> <?php echo $row->username; ?> </td> <td style="text-align:center;"> <?php echo strlen($row->listname) > 150 ? substr($row->listname, 0, 150).'...' : $row->listname; ?> </td> <td style="text-align:center;"> <?php echo $row->mailid; ?> </td> </tr> <?php $k = 1 - $k; } } ?> </tbody> </table> </div> <input type="hidden" name="boxchecked" value="0"/> <input type="hidden" name="filter_order" value="<?php echo $pageInfo->filter->order->value; ?>"/> <input type="hidden" name="filter_order_Dir" value="<?php echo $pageInfo->filter->order->dir; ?>"/> <?php echo $tabs->endPanel(); echo $tabs->startPanel(acymailing_translation('ACY_PER_LIST'), 'stats_auto'); ?> <br style="font-size:1px"/> <div class="onelineblockoptions"> <table width="100%" class="acymailing_table"> <tr> <?php ?> <td nowrap="nowrap"><?php echo acymailing_translation('ACY_GRAPHS'); ?></td> <?php $i = 1; foreach ($fieldsDisplay as $oneField) { if ($i == 4) { echo '</tr><tr><td/>'; $i = 1; } echo '<td nowrap="nowrap"><input type="checkbox" name="cbdisplayauto" value="'.$oneField['title'].'" id="'.$oneField['title'].'auto" '.(($oneField['checked'] == 'yes') ? 'checked' : '').' onclick="updateTagAuto();"/><label style="margin-left:5px" for="'.$oneField['title'].'auto">'.trim(acymailing_translation($oneField['label']), ':').'</label></td>'; $i++; } while ($i != 4) { echo '<td/>'; $i++; } ?> </tr> <tr> <td nowrap="nowrap"> <label for="max_article"><?php echo acymailing_translation('TAGS'); ?></label> </td> <td nowrap="nowrap" colspan="3"> <?php $tagfieldtype = acymailing_get('type.tagfield'); $tagfieldtype->onclick = 'updateTagAuto();'; echo $tagfieldtype->display('tagselect', 'tags'); ?> </td> </tr> <tr> <td nowrap="nowrap"> <label for="max_article"><?php echo acymailing_translation('ACY_MAX_NEWSLETTERS'); ?></label> </td> <td nowrap="nowrap"> <input type="text" id="max_article" name="max_article" style="width:50px" value="20" onchange="updateTagAuto();"/> </td> <td nowrap="nowrap"> <?php echo acymailing_translation('ACY_ORDER'); ?> </td> <td nowrap="nowrap"> <?php $values = array('mailid' => 'ACY_ID', 'senddate' => 'SEND_DATE', 'subject' => 'JOOMEXT_SUBJECT'); echo $this->acypluginsHelper->getOrderingField($values, $pageInfo->contentorder, $pageInfo->contentorderdir); ?> </td> </tr> <?php if ($type == 'autonews') { ?> <tr> <td nowrap="nowrap"> <label for="min_article"><?php echo acymailing_translation('ACY_MIN_NEWSLETTERS'); ?></label> </td nowrap="nowrap"> <td nowrap="nowrap"> <input type="text" id="min_article" name="min_article" style="width:50px" value="1" onchange="updateTagAuto();"/> </td> <td nowrap="nowrap"> <?php echo acymailing_translation('JOOMEXT_FILTER'); ?> </td> <td nowrap="nowrap"> <?php $choice = array(); $choice[] = acymailing_selectOption("", acymailing_translation('ACY_ALL')); $choice[] = acymailing_selectOption("new", acymailing_translation('ACY_NEWLY_SENT')); echo acymailing_select($choice, 'contentfilter', 'size="1" onchange="updateTagAuto();" style="max-width:200px;"', 'value', 'text', $pageInfo->contentfilter); ?> </td> </tr> <tr> <td nowrap="nowrap" colspan="4"> <?php echo acymailing_translation_sprintf('ACY_SENT_MORE_THAN', '<input type="text" name="delay" style="width:30px" value="3" onchange="updateTagAuto();"/>'); ?> </td> </tr> <?php } ?> </table> </div> <div class="onelineblockoptions"> <table class="acymailing_table" cellpadding="1" width="100%"> <tr id="catall" class="<?php echo "row0"; ?>" onclick="applyAuto('all','<?php echo "row0" ?>');" style="cursor:pointer;"> <td class="acytdcheckbox"></td> <td><?php echo acymailing_translation('ACY_ALL'); ?></td> </tr> <?php if (!empty($this->catvalues)) { foreach ($this->catvalues as $oneCat) { if (empty($oneCat->value)) { continue; } ?> <tr id="cat<?php echo $oneCat->value ?>" class="<?php echo "row0"; ?>" onclick="applyAuto(<?php echo $oneCat->value ?>,'<?php echo "row0" ?>');" style="cursor:pointer;"> <td class="acytdcheckbox"></td> <td> <?php echo $oneCat->text; ?> </td> </tr> <?php } } ?> </table> </div> <?php echo $tabs->endPanel(); echo $tabs->endPane(); } private function _categories($filter_list) { if (empty($this->lists)) { $listClass = acymailing_get('class.list'); $rows = $listClass->getLists(); } else { $rows = $this->lists; } $this->catvalues = array(); $this->catvalues[] = acymailing_selectOption(0, acymailing_translation('ALL_LISTS')); foreach ($rows as $oneList) { $this->catvalues[] = acymailing_selectOption($oneList->listid, $oneList->name); } return acymailing_select($this->catvalues, 'filter_list', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', intval($filter_list)); } private function _replaceAutoCharts(&$email) { $this->acymailing_generateautonews($email); if (empty($this->tags)) { return; } $this->acypluginsHelper->replaceTags($email, $this->tags, true); } function acymailing_generateautonews(&$email) { $tags = $this->acypluginsHelper->extractTags($email, 'autoacystats'); $return = new stdClass(); $return->status = true; $return->message = ''; if (empty($tags)) { return $return; } foreach ($tags as $oneTag => $parameter) { if (isset($this->tags[$oneTag])) { continue; } if (empty($parameter->id)) { $this->tags[$oneTag] = ''; continue; } $allcats = explode('-', $parameter->id); $selectedArea = array(); foreach ($allcats as $oneCat) { if (empty($oneCat)) { continue; } $selectedArea[] = intval($oneCat); } $query = 'SELECT DISTINCT a.mailid FROM '.acymailing_table('mail').' AS a '; $where = array(); $where[] = 'a.type = "news"'; $where[] = 'a.senddate IS NOT NULL'; if (!empty($selectedArea)) { $query .= 'JOIN '.acymailing_table('listmail').' AS b ON a.mailid = b.mailid '; $where[] = 'b.listid IN ('.implode(',', $selectedArea).')'; } if (!empty($parameter->tags)) { $selectedtags = explode(',', $parameter->tags); acymailing_arrayToInteger($selectedtags); $query .= 'JOIN '.acymailing_table('tagmail').' AS tm ON a.mailid = tm.mailid '; $where[] = 'tm.tagid IN ('.implode(',', $selectedtags).')'; } if (!empty($parameter->filter) && !empty($email->params['lastgenerateddate'])) { $where[] = 'a.senddate > \''.intval($email->params['lastgenerateddate']).'\''; } if (!empty($parameter->delay)) { $where[] = 'a.senddate < \''.intval(time() - $parameter->delay * 86400).'\''; } if (!empty($where)) { $query .= ' WHERE ('.implode(') AND (', $where).')'; } if (!empty($parameter->order)) { $ordering = explode(',', $parameter->order); if ($ordering[0] == 'rand') { $query .= ' ORDER BY rand()'; } else { $query .= ' ORDER BY a.'.acymailing_secureField(trim($ordering[0])).' '.acymailing_secureField(trim($ordering[1])); } } $start = ''; if (!empty($parameter->start)) { $start = intval($parameter->start).','; } if (empty($parameter->max)) { $parameter->max = 20; } $query .= ' LIMIT '.$start.intval($parameter->max); $allArticles = acymailing_loadResultArray($query); if (!empty($parameter->min) && count($allArticles) < $parameter->min) { $return->status = false; $return->message = 'Not enough statistics for the tag '.$oneTag.' : '.count($allArticles).' / '.$parameter->min; } $stringTag = ''; if (!empty($allArticles)) { if (file_exists(ACYMAILING_MEDIA.'plugins'.DS.'autoacystats.php')) { ob_start(); require(ACYMAILING_MEDIA.'plugins'.DS.'autoacystats.php'); $stringTag = ob_get_clean(); } else { $arrayElements = array(); unset($parameter->id); $numArticle = 1; foreach ($allArticles as $oneArticleId) { $numArticle++; $args = array(); $args[] = 'acystats:'.$oneArticleId; foreach ($parameter as $oneParam => $val) { $args[] = $oneParam.':'.$val; } $arrayElements[] = '{'.implode('|', $args).'}'; } $stringTag = $this->acypluginsHelper->getFormattedResult($arrayElements, $parameter); } } $this->tags[$oneTag] = $stringTag; } return $return; } private function _replaceOneCharts(&$email) { $tags = $this->acypluginsHelper->extractTags($email, 'acystats'); if (empty($tags)) { return; } require_once(ACYMAILING_INC.'phpImg'.DS.'library.php'); $tagsReplaced = array(); foreach ($tags as $i => $oneTag) { if (isset($tagsReplaced[$i])) { continue; } $tagsReplaced[$i] = $this->_chartImages($oneTag); } $this->acypluginsHelper->replaceTags($email, $tagsReplaced, true); } function _chartImages($tag) { if (empty($tag->display)) { return ''; } $tag->display = explode(',', $tag->display); foreach ($tag->display as $i => $oneDisplay) { $oneDisplay = trim($oneDisplay); $tag->$oneDisplay = true; } $newsStats = acymailing_loadObject('SELECT s.*, m.subject FROM '.acymailing_table('stats').' AS s JOIN '.acymailing_table('mail').' AS m ON s.mailid = m.mailid WHERE m.mailid = '.intval($tag->id)); if (empty($newsStats)) { if (acymailing_isAdmin()) { acymailing_enqueueMessage('There are no statistics for the newsletter n°'.$tag->id, 'notice'); } return ''; } $colors = array( array(154, 195, 248, 1), //blue array(200, 230, 134, 1), // green array(230, 110, 101, 1), // red array(174, 148, 210, 1), // purple array(249, 167, 87, 1), // orange array(46, 187, 180, 1), // green array(255, 133, 203, 1), // pink array(255, 208, 65, 1), // yellow array(99, 140, 166, 1) // blue-grey ); $varFields = array(); foreach ($newsStats as $fieldName => $oneField) { $varFields['{'.$fieldName.'}'] = $oneField; } $result = ''; $charts = array(); $day = date('Y_m_d'); if (!empty($tag->sent)) { $oneChart = new stdClass(); $oneChart->title = acymailing_translation('ACY_SENT'); $values = array('SENT_HTML' => $newsStats->senthtml, 'SENT_TEXT' => $newsStats->senttext); asort($values); $values = array_reverse($values); $filename = intval($tag->id).'_sent_'.$day.'.png'; if (file_exists(ACYMAILING_MEDIA.'statistic_charts'.DS.$filename)) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } } $oneChart->legend = $values; if (!empty($oneChart->chart)) { $charts[] = $oneChart; } } if (!empty($tag->status)) { $oneChart = new stdClass(); $oneChart->title = acymailing_translation('STATUS'); $values = array( 'OPEN_UNIQUE' => $newsStats->openunique - $newsStats->unsub, 'NOT_OPEN' => $newsStats->senthtml + $newsStats->senttext - $newsStats->openunique - $newsStats->bounceunique - $newsStats->fail, 'ACTION_BOUNCE' => $newsStats->bounceunique, 'FAILED' => $newsStats->fail, 'UNSUBSCRIBED' => $newsStats->unsub, ); asort($values); $values = array_reverse($values); $filename = intval($tag->id).'_status_'.$day.'.png'; if (file_exists(ACYMAILING_MEDIA.'statistic_charts'.DS.$filename)) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } } $oneChart->legend = $values; if (!empty($oneChart->chart)) { $charts[] = $oneChart; } } if (!empty($tag->devices)) { $ismobilestats = acymailing_loadObjectList('SELECT COUNT(*) as nbMobile, is_mobile FROM '.acymailing_table('userstats').' WHERE is_mobile IS NOT NULL AND mailid = '.intval($tag->id).' GROUP BY is_mobile', 'is_mobile'); if (!empty($ismobilestats)) { $oneChart = new stdClass(); $oneChart->title = acymailing_translation('ACY_STAT_MOBILE_USAGE'); $valNoMob = empty($ismobilestats[0]) ? 0 : intval($ismobilestats[0]->nbMobile); $valMob = empty($ismobilestats[1]) ? 0 : intval($ismobilestats[1]->nbMobile); $values = array( 'ACY_STAT_NOMOBILE' => $valNoMob, 'ACY_STAT_MOBILE' => $valMob, ); asort($values); $values = array_reverse($values); $filename = intval($tag->id).'_devices_'.$day.'.png'; if (file_exists(ACYMAILING_MEDIA.'statistic_charts'.DS.$filename)) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } } $oneChart->legend = $values; if (!empty($oneChart->chart)) { $charts[] = $oneChart; } } $mobileosstats = acymailing_loadObjectList('SELECT COUNT(mobile_os) as nbOS, mobile_os FROM '.acymailing_table('userstats').' WHERE mobile_os IS NOT NULL AND mobile_os <> \'\' AND mailid = '.intval($tag->id).' GROUP BY mobile_os ORDER BY nbOS DESC', 'nbOS'); if (!empty($mobileosstats)) { $oneChart = new stdClass(); $oneChart->title = acymailing_translation('ACY_STAT_MOBILE_USAGE'); $values = array(); foreach ($mobileosstats as $oneStat) { $values[$oneStat->mobile_os] = $oneStat->nbOS; } asort($values); $values = array_reverse($values); $filename = intval($tag->id).'_mobile_os_'.$day.'.png'; if (file_exists(ACYMAILING_MEDIA.'statistic_charts'.DS.$filename)) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } } $oneChart->legend = $values; if (!empty($oneChart->chart)) { $charts[] = $oneChart; } } } if (!empty($tag->browsers)) { $browserstats = acymailing_loadObjectList('SELECT COUNT(browser) as nbBrowser, browser FROM '.acymailing_table('userstats').' WHERE browser IS NOT NULL AND mailid = '.intval($tag->id).' GROUP BY browser ORDER BY nbBrowser DESC', 'nbBrowser'); if (!empty($browserstats)) { $oneChart = new stdClass(); $oneChart->title = acymailing_translation('ACY_STAT_BROWSER'); $values = array(); foreach ($browserstats as $oneStat) { $values[$oneStat->browser] = $oneStat->nbBrowser; } asort($values); $values = array_reverse($values); $filename = intval($tag->id).'_browsers_'.$day.'.png'; if (file_exists(ACYMAILING_MEDIA.'statistic_charts'.DS.$filename)) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } } $oneChart->legend = $values; if (!empty($oneChart->chart)) { $charts[] = $oneChart; } } } if (!empty($tag->clicks)) { $clicked = acymailing_loadResult('SELECT COUNT(DISTINCT subid) as nbClick FROM '.acymailing_table('urlclick').' WHERE mailid = '.intval($tag->id)); $oneChart = new stdClass(); $oneChart->title = acymailing_translation('CLICK_STATISTICS'); $values = array('CLICKED_LINK' => $clicked, 'ACY_NOT_CLICK' => $newsStats->senthtml + $newsStats->senttext - $clicked); asort($values); $values = array_reverse($values); $filename = intval($tag->id).'_clicks_'.$day.'.png'; if (file_exists(ACYMAILING_MEDIA.'statistic_charts'.DS.$filename)) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = '<img src="'.ACYMAILING_LIVE.'media/com_acymailing/statistic_charts/'.$filename.'"/>'; } } $oneChart->legend = $values; if (!empty($oneChart->chart)) { $charts[] = $oneChart; } } if (!empty($charts)) { $colors = array('9ac3f8', 'c7e586', 'e56e65', 'ae93d1', 'f8a657', '2ebbb4', 'ff85cb', 'ffd041', '638ca6'); $i = 0; $newsStats->subject = acyEmoji::Decode($newsStats->subject); $result = '<div class="acymailing_content_stats" style="margin-bottom: 20px;"><h2 class="acymailing_title">'.$newsStats->subject.'</h2><table style="width:100%;"><tr>'; foreach ($charts as $oneChart) { if ($i % 2 == 0 && $i != 0) { $result .= '</tr><tr>'; } $result .= '<td style="text-align: center;" valign="top">'; $result .= '<div class="acymailing_chart_title" style="text-align: center;">'.$oneChart->title.'</div>'; $result .= $oneChart->chart; $result .= '<table class="chartlegends" style="width:100%;">'; $j = 0; $total = array_sum($oneChart->legend); $others = 0; $elements = count($oneChart->legend) - 1; foreach ($oneChart->legend as $legend => $value) { if (empty($value)) { continue; } if (empty($colors[$j])) { $others += $value; if ($j != $elements) { $j++; continue; } $result .= '<tr><td><div style="display: inline-block;width: 8px;height:8px;border-radius:4px;background-color: #424242;"></div> '; $result .= acymailing_translation('OTHER').' ('.$others.': '.round($others * 100 / $total).'%)</td></tr>'; break; } $result .= '<tr><td><div style="display: inline-block;width: 8px;height:8px;border-radius:4px;background-color: #'.$colors[$j].';"></div> '; $result .= acymailing_translation($legend).' ('.$value.': '.round($value * 100 / $total).'%)</td></tr>'; $j++; } $result .= '</table>'; $result .= '</td>'; $i++; } if ($i % 2 != 0) { echo '<td/>'; } $result .= '</tr></table></div>'; } if (file_exists(ACYMAILING_MEDIA.'plugins'.DS.'acystats.php')) { ob_start(); require(ACYMAILING_MEDIA.'plugins'.DS.'acystats.php'); $result = ob_get_clean(); $result = str_replace(array_keys($varFields), $varFields, $result); } $result = $this->acypluginsHelper->removeJS($result); return $result; } }//endclass
/home/pteabiscqq/www/plugins/acymailing/./stats/./stats.php