Your IP : 216.73.216.240
<?php
/**
* @package Acymailing for Joomla!
* @version 4.0.1
* @author acyba.com
* @copyright (C) 2009-2012 ACYBA S.A.RL. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/
defined('_JEXEC') or die('Restricted access');
?><?php
class DiagramViewDiagram extends acymailingView
{
var $ctrl = 'diagram';
var $charttype = 'ColumnChart';
var $interval = 'month';
function display($tpl = null)
{
$doc = JFactory::getDocument();
$doc->addScript(((empty($_SERVER['HTTPS']) OR strtolower($_SERVER['HTTPS']) != "on" ) ? 'http://' : 'https://')."www.google.com/jsapi");
$function = $this->getLayout();
if(method_exists($this,$function)) $this->$function();
parent::display($tpl);
}
function listing($print = false){
$config =& acymailing_config();
acymailing_setTitle(JText::_('CHARTS'),'stats','diagram');
$bar = JToolBar::getInstance('toolbar');
$bar->appendButton( 'Link', 'cancel', JText::_('GLOBAL_STATISTICS'), acymailing_completeLink('stats') );
JToolBarHelper::divider();
JToolBarHelper::custom('export', 'acyexport', '',JText::_('ACY_EXPORT'), false);
$bar->appendButton( 'Popprint','Popprint');
JToolBarHelper::divider();
$bar->appendButton( 'Pophelp','charts');
if(acymailing_isAllowed($config->get('acl_cpanel_manage','all'))) $bar->appendButton( 'Link', 'acymailing', JText::_('ACY_CPANEL'), acymailing_completeLink('dashboard') );
$db = JFactory::getDBO();
$app = JFactory::getApplication();
$where = array();
$filters = JRequest::getVar('filters',array());
$groupby = array();
$groupingtype = array();
$groupby[] = 'groupingdate';
$groupby[] = 'groupingtype';
$selectfield = 'sub.created';
$listsneeded = false;
$display = JRequest::getVar('display',array());
foreach($display as $var => $val){
$var = acymailing_securefield($var);
$this->$var = acymailing_securefield($val);
}
$compares = JRequest::getVar('compares',array());
if(!empty($compares['lists'])){
$groupingtype[] = 'list.name';
$listsneeded = true;
$selectfield = 'listsub.subdate';
}
if($this->interval == 'day'){
$groupingdate = "DATE_FORMAT(FROM_UNIXTIME(".$selectfield."),'%Y-%m-%d')";
$this->dateformat = '%d %B %Y';
}elseif($this->interval == 'month'){
$groupingdate = "DATE_FORMAT(FROM_UNIXTIME(".$selectfield."),'%Y-%m-01')";
$this->dateformat = '%B %Y';
}elseif($this->interval == 'year'){
$groupingdate = "DATE_FORMAT(FROM_UNIXTIME(".$selectfield."),'%Y-01-01')";
$this->dateformat = '%Y';
}else{
return;
}
if(!empty($this->datemin)){
$where[] = $groupingdate.' >= '.$db->Quote($this->datemin);
}
if(!empty($this->datemax)){
$where[] = $groupingdate.' < '.$db->Quote($this->datemax);
}
if(!empty($compares['years'])){
$groupingtype[] = "DATE_FORMAT(FROM_UNIXTIME(".$selectfield."),'%Y')";
$this->dateformat = str_replace('%Y','',$this->dateformat);
$groupingdate = str_replace('%Y','2000',$groupingdate);
}
$fieldtotal = 'COUNT(sub.subid)';
$fieldtype = empty($groupingtype) ? "'Total'" : "CONCAT('Total - ',".implode(", ' - ' ,",$groupingtype).")";
$query = "SELECT ".$fieldtotal." as total, ".$fieldtype." as groupingtype, ".$groupingdate." as groupingdate";
if($listsneeded){
$query .= " FROM #__acymailing_listsub as listsub ";
$query .= " JOIN #__acymailing_subscriber as sub ON listsub.subid = sub.subid ";
$query .= " JOIN #__acymailing_list as list ON listsub.listid = list.listid ";
$where[] = "list.type = 'list'";
}else{
$query .= " FROM #__acymailing_subscriber as sub ";
}
if(!empty($where)) $query .= " WHERE (".implode(") AND (",$where).")";
if(!empty($groupby)) $query .= " GROUP BY ".implode(',',$groupby);
$query .= " ORDER BY groupingdate ASC";
$options = new stdClass();
$this->assignRef('filters',$filters);
$this->assignRef('compares',$compares);
$this->assignRef('options',$options);
$this->assignRef('display',$display);
if($print != true && empty($display)) return;
$db->setQuery($query);
$this->results = $db->loadObjectList();
if(empty($this->results)) $app->enqueueMessage(JText::_('NO_SUBSCRIBER'),'notice');
return $this->displayResult();
}
function printnewsletter(){
$this->listing(true);
}
function displayResult(){
if(empty($this->results)) return;
?>
<script language="JavaScript" type="text/javascript">
function drawChart(){
var dataTable = new google.visualization.DataTable();
dataTable.addColumn('string');
<?php
$dates = array();
$types = array();
$allVals = array();
$i= 0;
$a = 1;
foreach($this->results as $oneResult){
if(!isset($dates[$oneResult->groupingdate])){
$dates[$oneResult->groupingdate] = $i;
$i++;
echo "dataTable.addRows(1);"."\n";
echo "dataTable.setValue(".$dates[$oneResult->groupingdate].", 0, '".strftime($this->dateformat,strtotime($oneResult->groupingdate))."');";
}
if(!isset($types[$oneResult->groupingtype])){
$types[$oneResult->groupingtype] = $a;
echo "dataTable.addColumn('number','".$oneResult->groupingtype."');"."\n";
$a++;
}
echo "dataTable.setValue(".$dates[$oneResult->groupingdate].", ".$types[$oneResult->groupingtype].", ".$oneResult->total.");";
$allVals[$oneResult->groupingdate][$oneResult->groupingtype] = $oneResult->total;
}
if(count($dates) < 2) $this->charttype = 'ColumnChart';
$export = array();
$export[] = JText::_('FIELD_DATE').','.implode(',',array_keys($types));
foreach($dates as $oneDate => $datenum){
$exportLine = array();
foreach($types as $oneType => $typenum){
if(!isset($allVals[$oneDate][$oneType])){
echo "dataTable.setValue(".$datenum.", ".$typenum.",0);";
}
$exportLine[] = intval(@$allVals[$oneDate][$oneType]);
}
$export[] = strftime($this->dateformat,strtotime($oneDate)).','.implode(',',$exportLine);
}
$this->assignRef('export',$export);
?>
var vis = new google.visualization.<?php echo $this->charttype; ?>(document.getElementById('chart'));
var options = {
height:500,
legend:'right',
is3D:true,
title: '<?php echo JText::_('USERS',true)?>',
legendTextStyle: {color:'#333333'}
};
vis.draw(dataTable, options);
}
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function exportData(){
if(document.getElementById('exporteddata').style.display == 'none'){
document.getElementById('exporteddata').style.display = '';
}else{
document.getElementById('exporteddata').style.display = 'none';
}
}
</script>
<?php
if(JRequest::getCmd('task') == 'export'){
$config = acymailing_config();
$encodingClass = acymailing_get('helper.encoding');
$exportHelper = acymailing_get('helper.export');
$exportHelper->addHeaders('acymailingexport');
$eol= "\r\n";
$before = '"';
$separator = '"'.$config->get('export_separator',';').'"';
$exportFormat = $config->get('export_format','UTF-8');
$after = '"';
for($i=0,$a=count($export);$i<$a;$i++){
echo $before.$encodingClass->change(str_replace(',',$separator,$export[$i]),'UTF-8',$exportFormat).$after.$eol;
}
exit;
}
}
function mailing(){
$doc = JFactory::getDocument();
$doc->addStyleSheet( ACYMAILING_CSS.'frontendedition.css' );
$mailid = JRequest::getInt('mailid');
if(empty($mailid)) return;
$db = JFactory::getDBO();
$db->setQuery('SELECT * FROM '.acymailing_table('stats').' WHERE mailid = '.$mailid);
$mailingstats = $db->loadObject();
if(empty($mailingstats->mailid)) return;
$mailClass = acymailing_get('class.mail');
$mailing = $mailClass->get($mailid);
$db->setQuery('SELECT COUNT(*) FROM `#__acymailing_queue` WHERE `mailid` = '.$mailingstats->mailid.' GROUP BY `mailid`');
$mailingstats->queue = $db->loadResult();
$db->setQuery('SELECT min(opendate) as minval, max(opendate) as maxval FROM '.acymailing_table('userstats').' WHERE opendate > 0 AND mailid = '.$mailid);
$datesOpen = $db->loadObject();
$db->setQuery('SELECT min(`date`) as minval, max(`date`) as maxval FROM '.acymailing_table('urlclick').' WHERE mailid = '.$mailid);
$datesClick = $db->loadObject();
$spaces = array();
$intervals = 10;
$minDate = min($datesOpen->minval,$datesClick->minval);
if(empty($minDate)) $minDate = max($datesOpen->minval,$datesClick->minval);
$maxDate = max($datesOpen->maxval,$datesClick->maxval)+1;
$delay = ($maxDate - $minDate)/$intervals;
for($i=0;$i<$intervals;$i++){
$spaces[$i] = (int) ($minDate + $delay*$i);
}
$spaces[$intervals] = $maxDate;
$openclick = new stdClass();
$openclick->open = array();
$openclick->click = array();
$openclick->legend = array();
$dateFormat = '%d %B %Y';
if(date('Y',$maxDate) == date('Y',$minDate)){
$dateFormat = '%d %B';
if(date('m',$maxDate) == date('m',$minDate)){
$dateFormat = '%A %d';
if($delay < 172800){
$dateFormat = '%a %d %H:%M';
}
}
}
$openresults = array();
$legendX = array();
for($i = 0; $i<=$intervals; $i++ ){
if($i%2 == 0) $openclick->legend[$i] = acymailing_getDate($spaces[$i],$dateFormat);
$db->setQuery('SELECT count(subid) FROM '.acymailing_table('userstats').' WHERE opendate < '.$spaces[$i].' AND opendate > 0 AND mailid = '.$mailid);
$openclick->open[$i] = (int) $db->loadResult();
$db->setQuery('SELECT count(subid) FROM '.acymailing_table('urlclick').' WHERE date < '.$spaces[$i].' AND mailid = '.$mailid);
$openclick->click[$i] = (int) $db->loadResult();
}
$joomConfig = JFactory::getConfig();
$timeoffset = ACYMAILING_J30 ? $joomConfig->get('offset') : $joomConfig->getValue('config.offset');
$diffTime = $timeoffset - date('Z');
$groupingFormat = '%Y %j';
$phpformat = '%d %B';
$diff = 86400;
if($delay < 3600){
$groupingFormat = '%Y %j %H';
$phpformat = '%a %d %H';
$diff = 3600;
}
$query = "SELECT DATE_FORMAT(FROM_UNIXTIME(a.opendate + $diffTime),'$groupingFormat') AS openday, a.opendate, COUNT(a.subid) AS totalopen ";
$query .= 'FROM #__acymailing_userstats AS a WHERE opendate > 0 AND mailid = '.$mailid;
$query .= ' GROUP BY openday ORDER BY openday DESC LIMIT 10';
$db->setQuery($query);
$datesOpen = $db->loadObjectList('openday');
$query = "SELECT DATE_FORMAT(FROM_UNIXTIME(a.date + $diffTime),'$groupingFormat') AS clickday, a.date, COUNT(a.subid) AS totalclick ";
$query .= 'FROM #__acymailing_urlclick AS a WHERE mailid = '.$mailid;
$query .= ' GROUP BY clickday ORDER BY clickday DESC LIMIT 10';
$db->setQuery($query);
$datesClick = $db->loadObjectList('clickday');
$openclickday = array();
foreach($datesOpen as $time => $oneDate){
$openclickday[$time] = array();
$openclickday[$time]['date'] = acymailing_getDate($oneDate->opendate,$phpformat);
$openclickday[$time]['nextdate'] = acymailing_getDate($oneDate->opendate-$diff,$phpformat);
$openclickday[$time]['open'] = $oneDate;
}
foreach($datesClick as $time => $oneDate){
if(!isset($openclickday[$time])){
$openclickday[$time] = array();
$openclickday[$time]['date'] = acymailing_getDate($oneDate->date,$phpformat);
$openclickday[$time]['nextdate'] = acymailing_getDate($oneDate->date-$diff,$phpformat);
}
$openclickday[$time]['click'] = $oneDate;
}
krsort($openclickday);
$query = 'SELECT c.*, COUNT(a.click) as uniqueclick, SUM(a.click) as totalclick FROM #__acymailing_urlclick as a';
$query .= ' JOIN '.acymailing_table('url').' as c on a.urlid = c.urlid';
$query .= ' WHERE a.mailid = '.$mailid.' GROUP BY a.urlid ORDER BY uniqueclick DESC LIMIT 5';
$db->setQuery($query);
$mailinglinks = $db->loadObjectList();
$this->assignRef('mailinglinks',$mailinglinks);
$this->assignRef('mailing',$mailing);
$this->assignRef('mailingstats',$mailingstats);
$this->assignRef('openclick',$openclick);
$this->assignRef('openclickday',$openclickday);
$this->assignRef('ctrl',$this->ctrl);
$this->assignRef('config',acymailing_config());
$this->setLayout('mailing');
}
}