grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026params)) { $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 = ''.$this->params->get('alttext', '').''; if (strpos($email->body, '{statpicture}')) { $email->body = str_replace('{statpicture}', $statPicture, $email->body); } elseif (strpos($email->body, '')) { $email->body = str_replace('', $statPicture.'', $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 = '
'.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').'
'; 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); ?> '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'); ?>
'; $i++; } while ($i != 4) { echo '
'; $i = 1; } echo ''; $i++; } ?>
subject = acyEmoji::Decode($row->subject); ?> " onclick="applyContent(mailid.",'row$k'" ?>);" style="cursor:pointer;">
filter->order->dir, $pageInfo->filter->order->value); ?> filter->order->dir, $pageInfo->filter->order->value); ?> filter->order->dir, $pageInfo->filter->order->value); ?> filter->order->dir, $pageInfo->filter->order->value); ?>
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).'
'; } echo $pagination->getResultsCounter(); ?>
subject) > 200 ? substr($row->subject, 0, 200).'...' : $row->subject; ?> username; ?> listname) > 150 ? substr($row->listname, 0, 150).'...' : $row->listname; ?> mailid; ?>
endPanel(); echo $tabs->startPanel(acymailing_translation('ACY_PER_LIST'), 'stats_auto'); ?>
'; $i++; } while ($i != 4) { echo '
'; $i = 1; } echo ''; $i++; } ?>
onclick = 'updateTagAuto();'; echo $tagfieldtype->display('tagselect', 'tags'); ?>
'ACY_ID', 'senddate' => 'SEND_DATE', 'subject' => 'JOOMEXT_SUBJECT'); echo $this->acypluginsHelper->getOrderingField($values, $pageInfo->contentorder, $pageInfo->contentorderdir); ?>
contentfilter); ?>
'); ?>
" onclick="applyAuto('all','');" style="cursor:pointer;"> catvalues)) { foreach ($this->catvalues as $oneCat) { if (empty($oneCat->value)) { continue; } ?> " onclick="applyAuto(value ?>,'');" style="cursor:pointer;">
text; ?>
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 = ''; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = ''; } } $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 = ''; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = ''; } } $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 = ''; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = ''; } } $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 = ''; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = ''; } } $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 = ''; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = ''; } } $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 = ''; } else { $created = piechartToImage($filename, 200, 200, array_values($values), $colors); if ($created) { $oneChart->chart = ''; } } $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 = '

'.$newsStats->subject.'

'; foreach ($charts as $oneChart) { if ($i % 2 == 0 && $i != 0) { $result .= ''; } $result .= ''; $i++; } if ($i % 2 != 0) { echo '
'; $result .= '
'.$oneChart->title.'
'; $result .= $oneChart->chart; $result .= ''; $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 .= ''; break; } $result .= ''; $j++; } $result .= '
'; $result .= acymailing_translation('OTHER').' ('.$others.': '.round($others * 100 / $total).'%)
'; $result .= acymailing_translation($legend).' ('.$value.': '.round($value * 100 / $total).'%)
'; $result .= '
'; } $result .= '
'; } 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