| Server IP : 54.36.91.62 / Your IP : 216.73.217.94 Web Server : Apache System : Linux webm013.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 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/aix/administrator/modules/mod_djclassifieds_admin_stats/ |
Upload File : |
<?php
/**
* @package DJ-Classifieds
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email contact@dj-extensions.com
*/
defined ('_JEXEC') or die('Restricted access');
function dateExploder($m,$d,$y){
return explode('-',date("Y-m-d",mktime(0,0,0,$m,$d,$y)));
}
class modDjClassifiedsStats {
public static function getStats(
$table=false ,$select=false ,$count_cell=false
, $date_type=['m'] ,$date_field='date' ,$date_range_state='' ,$date_range=0
, $how_many=5 ,$desc='' ,$join=false
){
if(!$table || !$select) return '';
$db = JFactory::getDBO();
$group = explode(',' ,$select)[0];
$date = [[0,0],0,0,0];
if($date_type[0]=='y' || $date_type[0]=='Y'){ $date[3] = ($date_range | 5) ;$date[0][1]='DAY' ;}
if($date_type[0]=='m' || $date_type[0]=='M'){ $date[2] = ($date_range | 12) ;$date[0][1]='MONTH';}
if($date_type[0]=='d' || $date_type[0]=='D'){ $date[1] = ($date_range | 7) ;$date[0][1]='YEAR' ;}
$date[0][0] = date("Y-m-d",mktime(0,0,0,date("m")-$date[2],date("d")-$date[1],date("Y")-$date[3]));
if(gettype($join)==='array') $join = ' JOIN '. $join[0] .' AS b ON a.'. $join[1] .'=b.'. $join[2];
if($date_range_state===true){
$date_from = $date_type[1] ? $date_type[1] : $date[0][0];
$date_to = $date_type[2] ? '"'.$date_type[2].'"' : 'CURDATE()';
$date_range_state = ' WHERE DATE('.$date_field.') BETWEEN "'.$date_from.'" AND '.$date_to;
}
if($desc===true) $desc = ' DESC';
$query = "SELECT $select, $count_cell AS total"
. " FROM $table AS a"
. $join
. $date_range_state
. " GROUP BY $group ORDER BY total"
. $desc
;
$db->setQuery($query ,0 ,$how_many);
return $db->loadObjectList();
}
public static function getGraphs($table=false , $date=['m'] ,$select='COUNT(*)' ,$date_field='date'){
if(!$table) return null;
$db = JFactory::getDBO();
$date_from = $date[1] ? $date[1] : null;
$date_to = $date[2] ? $date[2] : JFactory::getDate()->format('Y-m-d');
switch($date[0]) {
case 'd':
if(!$date_from) $date_from = JFactory::getDate($date_to.' -6 days')->format('Y-m-d');
$group_by = ' DATE('. $date_field .') ';
break;
case 'm':
$date_to = JFactory::getDate($date_to)->modify('last day of this month')->format('Y-m-d');
if(!$date_from) $date_from = JFactory::getDate($date_to.' -11 months')->format('Y-m').'-01';
else $date_from = JFactory::getDate($date_from)->format('Y-m').'-01';
$group_by = ' DATE_FORMAT('. $date_field .', \'%Y-%m\') ';
break;
case 'y':
$date_to = JFactory::getDate($date_to)->modify('last day of this year')->format('Y-m-d');
if(!$date_from) $date_from = JFactory::getDate($date_to.' -4 years')->format('Y').'-01-01';
else $date_from = JFactory::getDate($date_from)->format('Y').'-01-01';
$group_by = ' YEAR('. $date_field .') ';
break;
default:
return null;
}
$query = ''
. ' SELECT '. $select .' AS total ,'. $group_by .' AS date'
. ' FROM '. $table
. ' WHERE DATE('.$date_field.') BETWEEN '.$db->quote($date_from).' AND '.$db->quote($date_to)
. ($table == '#__djcf_payments' ? ' AND status = "Completed"' : '')
. ' GROUP BY '.$group_by;
$db->setQuery($query);
$stats = $db->loadObjectList('date');
$data = array();
switch($date[0]) {
case 'd':
$from = $date_from;
$to = JFactory::getDate($date_to.' +1 day')->format('Y-m-d');
$year = (JFactory::getDate($date_to)->toUnix() - JFactory::getDate($date_from)->toUnix() > 365*24*60*60 ? ' \'y':'');
while($from != $to) {
$data[JFactory::getDate($from)->format('D, j M'.$year)] = isset($stats[$from]) ? $stats[$from]->total : 0;
$from = JFactory::getDate($from.' +1 day')->format('Y-m-d');
}
break;
case 'm':
$from = JFactory::getDate($date_from)->format('Y-m');
$to = JFactory::getDate($date_to.' +1 month')->format('Y-m');
while($from != $to) {
$data[JFactory::getDate($from.'-01')->format('M \'y')] = isset($stats[$from]) ? $stats[$from]->total : 0;
$from = JFactory::getDate($from.'-01 +1 month')->format('Y-m');
}
break;
case 'y':
$from = JFactory::getDate($date_from)->format('Y');
$to = JFactory::getDate($date_to.' +1 year')->format('Y');
while($from != $to) {
$data[$from] = isset($stats[$from]) ? $stats[$from]->total : 0;
$from++;
}
break;
}
return $data;
}
public static function getAuctions(){
$db= JFactory::getDBO();
$date_now = JFactory::getDate()->toSQL();
$query = "SELECT COUNT(id) FROM #__djcf_items i "
. "WHERE i.date_exp > '".$date_now."' AND i.auction=1 AND i.published=1 AND i.blocked=0";
$db->setQuery($query);
$total=$db->loadResult();
return $total;
}
public static function getCategories(){
$db= JFactory::getDBO();
$query = "SELECT COUNT(id) FROM #__djcf_categories "
."WHERE published=1";
$db->setQuery($query);
$total=$db->loadResult();
return $total;
}
public static function getAdverts($pub=1,$date_from=''){
$db= JFactory::getDBO();
$date_now = JFactory::getDate()->toSQL();
$pub_w = '';
if($pub){
$pub_w = " AND i.published=1 AND i.blocked=0 AND i.date_exp > '".$date_now."' ";
}
$date_from_w = '';
if($date_from){
$date_from_w = " AND i.date_start>='".$date_from."' ";
}
$query = "SELECT COUNT(id) FROM #__djcf_items i WHERE 1 ".$pub_w.$date_from_w;
$db->setQuery($query);
$total=$db->loadResult();
return $total;
}
/*
public static function getAdsInactive(){
$db = JFactory::getDBO();
$date_now = JFactory::getDate()->toSQL();
$query = "SELECT COUNT(id) FROM #__djcf_items i WHERE i.published=0 OR i.date_exp < '".$date_now."'";
$db->setQuery($query);
return $db->loadResult();
}
*/
public static function getAdsBlocked(){
$db = JFactory::getDBO();
$query = "SELECT COUNT(id) FROM #__djcf_items i WHERE i.blocked=1";
$db->setQuery($query);
return $db->loadResult();
}
public static function getAdsAwaitingModeration(){
$db = JFactory::getDBO();
$date_now = JFactory::getDate()->toSQL();
$query = "SELECT COUNT(id) FROM #__djcf_items i WHERE i.published=0 AND i.blocked=0 AND i.date_exp > '".$date_now."'";
$db->setQuery($query);
return $db->loadResult();
}
public static function getUsersActive(){
$db = JFactory::getDBO();
$query = "SELECT COUNT(id) FROM #__users WHERE block=0 AND (activation = '0' OR activation = '')";
$db->setQuery($query);
return $db->loadResult();
}
public static function getUsersInactive(){
$db = JFactory::getDBO();
$query = "SELECT COUNT(id) FROM #__users WHERE block=1 OR (activation != '0' AND activation != '')";
$db->setQuery($query);
return $db->loadResult();
}
public static function getUsersAwaitingVerification(){
$db = JFactory::getDBO();
$query = "SELECT COUNT(u.id) FROM #__users u "
."LEFT JOIN #__djcf_profiles p ON p.user_id=u.id "
."LEFT JOIN (SELECT COUNT(*) attachment, item_id FROM #__djcf_files WHERE type='profile' GROUP BY item_id) f ON f.item_id=u.id "
."WHERE p.verified=0 AND f.attachment > 0";
$db->setQuery($query);
return $db->loadResult();
}
public static function getUsersVerified(){
$db = JFactory::getDBO();
$query = "SELECT COUNT(u.id) FROM #__users u "
."LEFT JOIN #__djcf_profiles p ON p.user_id=u.id "
."WHERE p.verified=1";
$db->setQuery($query);
return $db->loadResult();
}
public static function getDataDoughnut1(){
$colors = array('#f38181','#eaffd0','#fce38a','#95e1d3');
$arr[0] = array(
'value' => self::getAdsAwaitingModeration(),
'color' => $colors[0],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_ADS_AWAITING_MODERATION'),
'link' => 'index.php?option=com_djclassifieds&view=items&filter_active=1&filter_published=0&filter_blocked=0'
);
$arr[1] = array(
'value' => self::getAdverts(),
'color' => $colors[1],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_ADS_ACTIVE'),
'link' => 'index.php?option=com_djclassifieds&view=items&filter_active=1&filter_published=1&filter_blocked=0'
);
$arr[2] = array(
'value' => self::getAdsBlocked(),
'color' => $colors[2],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_ADS_BLOCKED'),
'link' => 'index.php?option=com_djclassifieds&view=items&filter_active=-1&filter_published=-1&filter_blocked=1'
);
return $arr;
}
public static function getDataDoughnut2(){
$colors = array('#cbf1f5','#e3fdfd','#F4ECF7','#a6e3e9'); // https://colorhunt.co/palette/42191
$arr[0] = array(
'value' => self::getUsersAwaitingVerification(),
'color' => $colors[2],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_USERS_AWAITING_VERIFICATION'),
'link' => 'index.php?option=com_djclassifieds&view=profiles&filter_verified=0&filter_attachment=1&filter_active=-1'
);
$arr[1] = array(
'value' => self::getUsersVerified(),
'color' => $colors[3],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_USERS_VERIFIED'),
'link' => 'index.php?option=com_djclassifieds&view=profiles&filter_verified=1&filter_attachment=-1&filter_active=-1'
);
$arr[2] = array(
'value' => self::getUsersActive(),
'color' => $colors[0],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_USERS_ACTIVE'),
'link' => 'index.php?option=com_djclassifieds&view=profiles&filter_verified=-1&filter_attachment=-1&filter_active=1'
);
$arr[3] = array(
'value' => self::getUsersInactive(),
'color' => $colors[1],
'label' => JText::_('MOD_DJCLASSIFIEDS_ADMIN_STATS_USERS_INACTIVE'),
'link' => 'index.php?option=com_djclassifieds&view=profiles&filter_verified=-1&filter_attachment=-1&filter_active=0'
);
return $arr;
}
static function export($jinput, $params)
{
$app = JFactory::getApplication();
$type = $jinput->get('export');
$input = new JRegistry();
$input->loadString($jinput->getStr('input_json'));
$date = $input->get('date_format', $params->get('time_type', 'm'));
$date_from = $input->get('date_from');
$date_to = $input->get('date_to');
while (ob_get_level() > 0) // removing page's html content
{
ob_end_clean();
}
if($type == 'ads_summary_added'){
$array = array(modDjClassifiedsStats::getGraphs('#__djcf_items', [$date ,$date_from ,$date_to], 'COUNT(*)', 'date_start'), modDjClassifiedsStats::getGraphs('#__djcf_items', [$date ,$date_from ,$date_to], 'COUNT(*)', 'date_exp'));
}elseif($type == 'ads_summary_buy_now'){
$array = array(modDjClassifiedsStats::getGraphs('#__djcf_orders', [$date ,$date_from ,$date_to]));
}elseif($type == 'ads_summary_profit'){
$array = array(modDjClassifiedsStats::getGraphs('#__djcf_payments', [$date ,$date_from ,$date_to], 'SUM(price)'));
}elseif($type == 'stats_categories'){
$array = array_map(function($i){return (array)$i;}, modDjClassifiedsStats::getStats('#__djcf_items', 'b.name', 'COUNT(*)', [$date ,$date_from ,$date_to], 'date_start', true, 0, 5, true, ['#__djcf_categories', 'cat_id' ,'id']));
}elseif($type == 'stats_plans'){
$array = array_map(function($i){return (array)$i;}, modDjClassifiedsStats::getStats('#__djcf_plans_subscr', 'b.name', 'COUNT(*)', [$date ,$date_from ,$date_to], 'date_start', true, 0, 5, true, ['#__djcf_plans' ,'plan_id' ,'id']));
}elseif($type == 'stats_ads_per_user'){
$array = array_map(function($i){return (array)$i;}, modDjClassifiedsStats::getStats('#__djcf_items', 'b.name, b.id', 'COUNT(*)', [$date ,$date_from ,$date_to], 'date_start', true, 0, 5, true, ['#__users' ,'user_id' ,'id']));
}elseif($type == 'stats_ad_views'){
$array = array_map(function($i){return (array)$i;}, modDjClassifiedsStats::getStats('#__djcf_items', 'a.name, a.id, a.alias, a.cat_id, b.alias AS cat_alias', 'display', [$date ,$date_from ,$date_to], 'date_start', true, 0, 5, true, ['#__djcf_categories','cat_id' ,'id']));
}else{
die('no export data type found');
}
$filename = $type.'_'.implode('_', array_filter(array($date, $date_from, $date_to))).".csv";
$delimiter = ";";
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'";');
$f = fopen('php://output', 'w');
foreach($array as $key => $line){
if(!$key){
fputcsv($f, array_keys($line), $delimiter);
}
fputcsv($f, $line, $delimiter);
}
$app->close();
}
}