1137 Zeilen
Kein EOL
45 KiB
PHP
1137 Zeilen
Kein EOL
45 KiB
PHP
<?php
|
|
/**
|
|
* Project:
|
|
* Contenido Content Management System
|
|
*
|
|
* Description:
|
|
* Define the "stat" related functions
|
|
*
|
|
* Requirements:
|
|
* @con_php_req 5.0
|
|
*
|
|
*
|
|
* @package Contenido Backend includes
|
|
* @version 1.0.3
|
|
* @author Olaf Niemann
|
|
* @copyright four for business AG <www.4fb.de>
|
|
* @license http://www.contenido.org/license/LIZENZ.txt
|
|
* @link http://www.4fb.de
|
|
* @link http://www.contenido.org
|
|
* @since file available since contenido release <= 4.6
|
|
*
|
|
* $Id: functions.stat.php 306 2014-03-13 23:03:26Z oldperl $:
|
|
*/
|
|
|
|
if(!defined('CON_FRAMEWORK')) {
|
|
die('Illegal call');
|
|
}
|
|
|
|
cInclude("includes", "functions.database.php");
|
|
|
|
/**
|
|
* Displays statistic information layer (a div Tag)
|
|
*
|
|
* @param int $id Either article or directory id
|
|
* @param string $type The type
|
|
* @param int $x Style top position
|
|
* @param int $y Style left position
|
|
* @param int $w Style width
|
|
* @param int $h Style height
|
|
* @return string Composed info layer
|
|
*/
|
|
function statsDisplayInfo($id, $type, $x, $y, $w, $h) {
|
|
if (strcmp($type,"article" == 0)) {
|
|
$text = i18n("Info about article")." ". $id;
|
|
} else {
|
|
$text = i18n("Info about directory") ." ". $id;
|
|
}
|
|
|
|
$div = '<DIV ID="idElement14" class="text_medium" style="background: #E8E8EE;
|
|
border: 1px; border-style: solid; border-color: #B3B3B3; position:absolute;
|
|
top:'.$x.'px; left:'.$y.'.px; width:'.$w.'px; height:'.$h.'px;">'.$text.'</DIV>';
|
|
|
|
return $div;
|
|
}
|
|
|
|
/**
|
|
* Archives the current statistics
|
|
*
|
|
* @param $yearmonth String with the desired archive date (YYYYMM)
|
|
*
|
|
* @return none
|
|
*
|
|
*/
|
|
function statsArchive($yearmonth) {
|
|
global $cfg;
|
|
|
|
$yearmonth = preg_replace('/\s/', '0', $yearmonth);
|
|
|
|
$db = new DB_ConLite;
|
|
$db2 = new DB_ConLite;
|
|
|
|
$sql = "SELECT
|
|
idcatart, idlang, idclient, visited, visitdate
|
|
FROM
|
|
".$cfg["tab"]["stat"];
|
|
|
|
$db->query($sql);
|
|
|
|
while ($db->next_record()) {
|
|
$insertSQL = "INSERT INTO
|
|
".$cfg["tab"]["stat_archive"]."
|
|
( idstatarch, archived, idcatart, idlang, idclient, visited, visitdate)
|
|
VALUES
|
|
(".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["stat_archive"])).",
|
|
".$yearmonth.",
|
|
".Contenido_Security::toInteger($db->f(0)).",
|
|
".Contenido_Security::toInteger($db->f(1)).",
|
|
".Contenido_Security::toInteger($db->f(2)).",
|
|
".Contenido_Security::toInteger($db->f(3)).",
|
|
'".Contenido_Security::escapeDB($db->f(4), $db2)."')";
|
|
|
|
$db2->query($insertSQL);
|
|
}
|
|
|
|
$sql = "DELETE FROM ".$cfg["tab"]["stat"];
|
|
$db->query($sql);
|
|
|
|
// Recreate empty stats
|
|
$sql = "SELECT
|
|
A.idcatart,
|
|
B.idclient,
|
|
C.idlang
|
|
FROM
|
|
".$cfg["tab"]["cat_art"]." AS A INNER JOIN
|
|
".$cfg["tab"]["cat"]." AS B ON A.idcat = B.idcat INNER JOIN
|
|
".$cfg["tab"]["cat_lang"]." AS C ON A.idcat = C.idcat ";
|
|
|
|
$db->query($sql);
|
|
|
|
while ($db->next_record()) {
|
|
$insertSQL = "INSERT INTO
|
|
".$cfg["tab"]["stat"]."
|
|
( idstat, idcatart, idlang, idclient, visited )
|
|
VALUES (
|
|
".Contenido_Security::toInteger($db2->nextid($cfg["tab"]["stat"])).",
|
|
".Contenido_Security::toInteger($db->f(0)).",
|
|
".Contenido_Security::toInteger($db->f(2)).",
|
|
".Contenido_Security::toInteger($db->f(1)).",
|
|
'0000-00-00 00:00:00')";
|
|
|
|
$db2->query($insertSQL);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Generates a statistics page
|
|
*
|
|
* @param $yearmonth Specifies the year and month from which to retrieve the
|
|
* statistics, specify "current" to retrieve the current
|
|
* entries
|
|
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
|
|
* @modified Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return none
|
|
*
|
|
*/
|
|
function statsOverviewAll($yearmonth) {
|
|
global $cfg, $db, $tpl, $client, $lang;
|
|
|
|
$sDisplay = 'table-row';
|
|
|
|
$bUseHeapTable = $cfg["statistics_heap_table"];
|
|
|
|
$sHeapTable = $cfg['tab']['stat_heap_table'];
|
|
|
|
if ($bUseHeapTable) {
|
|
if (!dbTableExists ($db, $sHeapTable)) {
|
|
buildHeapTable ($sHeapTable, $db);
|
|
}
|
|
}
|
|
|
|
if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {
|
|
$sDisplay = 'block';
|
|
}
|
|
|
|
$sql = "SELECT
|
|
idtree, A.idcat, level, preid, C.name, visible
|
|
FROM
|
|
".$cfg["tab"]["cat_tree"]." AS A,
|
|
".$cfg["tab"]["cat"]." AS B,
|
|
".$cfg["tab"]["cat_lang"]." AS C
|
|
WHERE
|
|
A.idcat=B.idcat
|
|
AND
|
|
B.idcat=C.idcat
|
|
AND
|
|
C.idlang='".Contenido_Security::toInteger($lang)."'
|
|
AND
|
|
B.idclient='".Contenido_Security::toInteger($client)."'
|
|
ORDER BY
|
|
idtree";
|
|
|
|
$db->query($sql);
|
|
|
|
$currentRow = 2;
|
|
|
|
$aRowname = array();
|
|
$iLevel = 0;
|
|
|
|
$tpl->set('s', 'IMG_EXPAND', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'open_all.gif');
|
|
$tpl->set('s', 'IMG_COLLAPSE', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'close_all.gif');
|
|
|
|
while ($db->next_record()) {
|
|
if ($db->f("level") == 0 && $db->f("preid") != 0) {
|
|
$bgcolor = '#FFFFFF';
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', '10');
|
|
$tpl->set('d', 'TEXT', ' ');
|
|
$tpl->set('d', 'NUMBEROFARTICLES', '');
|
|
$tpl->set('d', 'TOTAL', '');
|
|
$tpl->set('d', 'ICON','');
|
|
$tpl->set('d', 'STATUS', '');
|
|
$tpl->set('d', 'ONCLICK', '');
|
|
$tpl->set('d', 'ROWNAME', '');
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'INTHISLANGUAGE', '');
|
|
$tpl->set('d', 'EXPAND', '');
|
|
$tpl->set('d', 'DISPLAY_ROW', $sDisplay);
|
|
|
|
$tpl->next();
|
|
$currentRow++;
|
|
}
|
|
|
|
$padding_left = 10 + ( 15 * $db->f("level") );
|
|
$text = $db->f(4);
|
|
$idcat = $db->f("idcat");
|
|
$bCatVisible = $db->f("visible");
|
|
|
|
if ($db->f("level") < $iLevel) {
|
|
$iDistance = $iLevel-$db->f("level");
|
|
|
|
for ($i = 0; $i < $iDistance; $i++) {
|
|
array_pop($aRowname);
|
|
}
|
|
$iLevel = $db->f("level");
|
|
}
|
|
|
|
if ($db->f("level") >= $iLevel) {
|
|
if ($db->f("level") == $iLevel) {
|
|
array_pop($aRowname);
|
|
} else {
|
|
$iLevel = $db->f("level");
|
|
}
|
|
array_push($aRowname, $idcat);
|
|
}
|
|
|
|
$db2 = new DB_ConLite;
|
|
//************** number of arts **************
|
|
$sql = "SELECT COUNT(*) FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'";
|
|
$db2->query($sql);
|
|
$db2->next_record();
|
|
|
|
$numberOfArticles = $db2->f(0);
|
|
$sumNumberOfArticles += $numberOfArticles;
|
|
//************** hits of category total**************
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."' AND B.idclient='".Contenido_Security::toInteger($client)."'";
|
|
} else {
|
|
if(!$bUseHeapTable) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND B.idclient='".Contenido_Security::toInteger($client)."' AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'";
|
|
} else {
|
|
$sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db2)." WHERE idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'";
|
|
}
|
|
}
|
|
$db2->query($sql);
|
|
$db2->next_record();
|
|
|
|
$total = $db2->f(0);
|
|
|
|
//************** hits of category in this language ***************
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."'";
|
|
} else {
|
|
if(!$bUseHeapTable) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."' AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'";
|
|
} else {
|
|
$sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db2)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idlang='".Contenido_Security::toInteger($lang)."'
|
|
AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db2)."'";
|
|
}
|
|
}
|
|
|
|
$db2->query($sql);
|
|
$db2->next_record();
|
|
|
|
$inThisLanguage = $db2->f(0);
|
|
|
|
$icon = '<img src="'.$cfg['path']['images'].'folder.gif" style="vertical-align:top;">';
|
|
|
|
//************ art ********************************
|
|
$sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art"]." AS B, ".$cfg["tab"]["art_lang"]." AS C WHERE A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart=B.idart AND B.idart=C.idart AND C.idlang='".Contenido_Security::toInteger($lang)."' ORDER BY B.idart";
|
|
$db2->query($sql);
|
|
|
|
$numrows = $db2->num_rows();
|
|
$onclick = "";
|
|
|
|
$online = $db->f("visible");
|
|
if ($bCatVisible == 1) {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'online_off.gif" alt="'.i18n("Category is online").'" title="'.i18n("Category is online").'">';
|
|
} else {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'offline_off.gif" alt="'.i18n("Category is offline").'" title="'.i18n("Category is offline").'">';
|
|
}
|
|
|
|
//************check if there are subcategories ******************
|
|
$iSumSubCategories = 0;
|
|
$sSql = "SELECT count(*) as cat_count from ".$cfg["tab"]["cat"]." WHERE parentid = '".Contenido_Security::toInteger($idcat)."';";
|
|
$db3 = new DB_ConLite();
|
|
$db3->query($sSql);
|
|
if ($db3->next_record()) {
|
|
$iSumSubCategories = $db3->f('cat_count');
|
|
}
|
|
$db3->free();
|
|
|
|
$bgcolor = $cfg["color"]["table_dark"];
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', $padding_left);
|
|
$tpl->set('d', 'TEXT', $text);
|
|
$tpl->set('d', 'ONCLICK', $onclick);
|
|
$tpl->set('d', 'ICON', $icon);
|
|
$tpl->set('d', 'STATUS', $offonline);
|
|
$tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles);
|
|
$tpl->set('d', 'TOTAL', $total);
|
|
$tpl->set('d', 'ROWNAME', implode('_', $aRowname));
|
|
if ($numrows > 0 || $iSumSubCategories > 0) {
|
|
$tpl->set('d', 'EXPAND', '<a href="javascript:changeVisibility(\''.implode('_', $aRowname).'\', '.$db->f("level").', '.$idcat.')">
|
|
<img src="'.$cfg['path']['images'].'open_all.gif"
|
|
alt="'.i18n("Open category").'"
|
|
title="'.i18n("Open category").'"
|
|
id="'.implode('_', $aRowname).'_img"
|
|
style="vertical-align:top; margin-top:6px;">
|
|
</a>');
|
|
} else {
|
|
$tpl->set('d', 'EXPAND', '<img src="'.$cfg['path']['images'].'spacer.gif" width="7">');
|
|
}
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage);
|
|
if ($db->f("level") != 0) {
|
|
$tpl->set('d', 'DISPLAY_ROW', 'none');
|
|
} else {
|
|
$tpl->set('d', 'DISPLAY_ROW', $sDisplay);
|
|
}
|
|
|
|
$tpl->next();
|
|
$currentRow++;
|
|
|
|
$onclick = "";
|
|
|
|
$text = "";
|
|
$numberOfArticles = "";
|
|
$total = "";
|
|
$inThisLanguage = "";
|
|
|
|
while ($db2->next_record()) {
|
|
$idart = $db2->f("idart");
|
|
|
|
array_push($aRowname, $idart);
|
|
|
|
$text = "";
|
|
$numberOfArticles = "";
|
|
$total = "";
|
|
$inThisLanguage = "";
|
|
|
|
$padding_left = 10 + ( 15 * ($db->f("level")+1) );
|
|
|
|
$text = $db2->f("title");
|
|
$online = $db2->f("online");
|
|
|
|
//************** number of arts **************
|
|
$db3 = new DB_ConLite();
|
|
|
|
//************** hits of art total **************
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idclient='".Contenido_Security::toInteger($client)."'";
|
|
} else {
|
|
if(!$bUseHeapTable) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idclient='".Contenido_Security::toInteger($client)."' and B.archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'";
|
|
} else {
|
|
$sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db3)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idart='".Contenido_Security::toInteger($idart)."'
|
|
AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'";
|
|
}
|
|
}
|
|
|
|
$db3->query($sql);
|
|
$db3->next_record();
|
|
|
|
$total = $db3->f(0);
|
|
|
|
//************** hits of art in this language ***************
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT visited FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."'";
|
|
} else {
|
|
if (!$bUseHeapTable) {
|
|
$sql = "SELECT visited FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."'
|
|
AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'";
|
|
} else {
|
|
$sql = "SELECT visited FROM ".Contenido_Security::escapeDB($sHeapTable, $db3)." WHERE idcat='".Contenido_Security::toInteger($idcat)."' AND idart='".Contenido_Security::toInteger($idart)."'
|
|
AND idlang='".Contenido_Security::toInteger($lang)."' AND idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db3)."'";
|
|
}
|
|
}
|
|
|
|
$db3->query($sql);
|
|
$db3->next_record();
|
|
|
|
$inThisLanguage = $db3->f(0);
|
|
|
|
if ($online == 0) {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'offline_off.gif" alt="Artikel ist offline" title="Artikel ist offline">';
|
|
} else {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'online_off.gif" alt="Artikel ist online" title="Artikel ist online">';
|
|
}
|
|
|
|
$icon = '<img src="'.$cfg['path']['images'].'article.gif" style="vertical-align:top;">';
|
|
$bgcolor = $cfg["color"]["table_light"];
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', $padding_left);
|
|
$tpl->set('d', 'TEXT', $text);
|
|
$tpl->set('d', 'ONCLICK', "");
|
|
$tpl->set('d', 'ICON', $icon);
|
|
$tpl->set('d', 'STATUS', $offonline);
|
|
$tpl->set('d', 'ROWNAME', implode('_', $aRowname));
|
|
//$tpl->set('d', 'ROWNAME', "HIDE".($db->f("level")+1));
|
|
$tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles);
|
|
$tpl->set('d', 'TOTAL', $total);
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage);
|
|
$tpl->set('d', 'EXPAND', '<img src="'.$cfg['path']['images'].'spacer.gif" width="7">');
|
|
$tpl->set('d', 'DISPLAY_ROW', 'none');
|
|
$tpl->next();
|
|
$currentRow++;
|
|
|
|
array_pop($aRowname);
|
|
}
|
|
}
|
|
|
|
//************** hits total**************
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND B.idclient='".Contenido_Security::toInteger($client)."'";
|
|
} else {
|
|
if (!$bUseHeapTable) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idclient='".Contenido_Security::toInteger($client)."'
|
|
AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'";
|
|
} else {
|
|
$sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db)." WHERE idclient='".Contenido_Security::toInteger($client)."' AND archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'";
|
|
}
|
|
}
|
|
|
|
$db->query($sql);
|
|
$db->next_record();
|
|
|
|
$total = $db->f(0);
|
|
|
|
//************** hits total on this language ***************
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat"]." AS B WHERE A.idcatart=B.idcatart AND B.idlang='".Contenido_Security::toInteger($lang)."'
|
|
AND B.idclient='".Contenido_Security::toInteger($client)."'";
|
|
} else {
|
|
if(!$bUseHeapTable) {
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idlang='".Contenido_Security::toInteger($lang)."'
|
|
AND B.idclient='".Contenido_Security::toInteger($client)."' AND B.archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'";
|
|
} else {
|
|
$sql = "SELECT SUM(visited) FROM ".Contenido_Security::escapeDB($sHeapTable, $db)." WHERE idlang='".Contenido_Security::toInteger($lang)."' AND idclient='".Contenido_Security::toInteger($client)."'
|
|
AND archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'";
|
|
}
|
|
}
|
|
|
|
$db->query($sql);
|
|
$db->next_record();
|
|
|
|
$inThisLanguage = $db->f(0);
|
|
|
|
$bgcolor = '#FFFFFF';
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'TEXT', ' ');
|
|
$tpl->set('d', 'ICON', '');
|
|
$tpl->set('d', 'STATUS', '');
|
|
$tpl->set('d', 'PADDING_LEFT', '10');
|
|
$tpl->set('d', 'NUMBEROFARTICLES', '');
|
|
$tpl->set('d', 'TOTAL', '');
|
|
$tpl->set('d', 'INTHISLANGUAGE', '');
|
|
$tpl->set('d', 'EXPAND', '');
|
|
$tpl->set('d', 'ROWNAME', '');
|
|
$tpl->set('d', 'ONCLICK', '');
|
|
$tpl->set('d', 'DISPLAY_ROW', $sDisplay);
|
|
|
|
$bgcolor = $cfg["color"]["table_dark"];
|
|
$tpl->set('s', 'SUMBGCOLOR', $cfg["color"]["table_dark"]);
|
|
$tpl->set('s', 'SUMTEXT', i18n("Sum"));
|
|
$tpl->set('s', 'SUMNUMBEROFARTICLES', $sumNumberOfArticles);
|
|
$tpl->set('s', 'SUMTOTAL', $total);
|
|
$tpl->set('s', 'SUMINTHISLANGUAGE', $inThisLanguage);
|
|
$tpl->next();
|
|
}
|
|
|
|
/**
|
|
* Generates a statistics page for a given year
|
|
*
|
|
* @param $year Specifies the year to retrieve the
|
|
* statistics for
|
|
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
|
|
* @modified Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return none
|
|
*
|
|
*/
|
|
function statsOverviewYear($year) {
|
|
global $cfg, $db, $tpl, $client, $lang;
|
|
|
|
$sDisplay = 'table-row';
|
|
|
|
if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) {
|
|
$sDisplay = 'block';
|
|
}
|
|
|
|
$sql = "SELECT
|
|
idtree, A.idcat, level, preid, C.name, visible
|
|
FROM
|
|
".$cfg["tab"]["cat_tree"]." AS A,
|
|
".$cfg["tab"]["cat"]." AS B,
|
|
".$cfg["tab"]["cat_lang"]." AS C
|
|
WHERE
|
|
A.idcat=B.idcat
|
|
AND
|
|
B.idcat=C.idcat
|
|
AND
|
|
C.idlang='".Contenido_Security::toInteger($lang)."'
|
|
AND
|
|
B.idclient='".Contenido_Security::toInteger($client)."'
|
|
ORDER BY
|
|
idtree";
|
|
|
|
$db->query($sql);
|
|
|
|
$currentRow = 2;
|
|
|
|
$aRowname = array();
|
|
$iLevel = 0;
|
|
|
|
$tpl->set('s', 'IMG_EXPAND', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'open_all.gif');
|
|
$tpl->set('s', 'IMG_COLLAPSE', $cfg["path"]["contenido_fullhtml"].$cfg['path']['images'].'close_all.gif');
|
|
|
|
while ($db->next_record()) {
|
|
if ($db->f("level") == 0 && $db->f("preid") != 0) {
|
|
$bgcolor = '#FFFFFF';
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', '10');
|
|
$tpl->set('d', 'TEXT', ' ');
|
|
$tpl->set('d', 'NUMBEROFARTICLES', '');
|
|
$tpl->set('d', 'TOTAL', '');
|
|
$tpl->set('d', 'STATUS', '');
|
|
$tpl->set('d', 'ONCLICK', '');
|
|
$tpl->set('d', 'ICON','');
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'INTHISLANGUAGE', '');
|
|
$tpl->set('d', 'EXPAND', '');
|
|
$tpl->set('d', 'DISPLAY_ROW', $sDisplay);
|
|
$tpl->set('d', 'ROWNAME', '');
|
|
$tpl->next();
|
|
$currentRow++;
|
|
}
|
|
|
|
$padding_left = 10 + ( 15 * $db->f("level") );
|
|
$text = $db->f(4);
|
|
$idcat = $db->f("idcat");
|
|
$bCatVisible = $db->f("visible");
|
|
|
|
if ($db->f("level") < $iLevel) {
|
|
$iDistance = $iLevel-$db->f("level");
|
|
|
|
for ($i = 0; $i < $iDistance; $i++) {
|
|
array_pop($aRowname);
|
|
}
|
|
$iLevel = $db->f("level");
|
|
}
|
|
|
|
if ($db->f("level") >= $iLevel) {
|
|
if ($db->f("level") == $iLevel) {
|
|
array_pop($aRowname);
|
|
} else {
|
|
$iLevel = $db->f("level");
|
|
}
|
|
array_push($aRowname, $idcat);
|
|
}
|
|
|
|
$db2 = new DB_ConLite;
|
|
//************** number of arts **************
|
|
$sql = "SELECT COUNT(*) FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".Contenido_Security::toInteger($idcat)."'";
|
|
$db2->query($sql);
|
|
$db2->next_record();
|
|
|
|
$numberOfArticles = $db2->f(0);
|
|
$sumNumberOfArticles += $numberOfArticles;
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::toInteger($year, $db2)." GROUP BY SUBSTRING(B.archived,1,4)";
|
|
|
|
$db2->query($sql);
|
|
$db2->next_record();
|
|
|
|
$total = $db2->f(0);
|
|
|
|
//************** hits of category in this language ***************
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::escapeDB($year, $db2)."
|
|
GROUP BY SUBSTRING(B.archived,1,4)";
|
|
|
|
$db2->query($sql);
|
|
$db2->next_record();
|
|
|
|
$inThisLanguage = $db2->f(0);
|
|
|
|
$icon = '<img src="'.$cfg['path']['images'].'folder.gif" style="vertical-align:top;">';
|
|
|
|
//************ art ********************************
|
|
$sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art"]." AS B, ".$cfg["tab"]["art_lang"]." AS C WHERE A.idcat='".Contenido_Security::toInteger($idcat)."' AND A.idart=B.idart AND B.idart=C.idart
|
|
AND C.idlang='".Contenido_Security::toInteger($lang)."' ORDER BY B.idart";
|
|
$db2->query($sql);
|
|
|
|
$numrows = $db2->num_rows();
|
|
$onclick = "";
|
|
|
|
if ($bCatVisible == 0) {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'offline_off.gif" alt="Kategorie ist offline" title="Kategorie ist unsichtbar">';
|
|
} else {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'online_off.gif" alt="Kategorie ist online" title="Kategorie ist sichtbar">';
|
|
}
|
|
|
|
//************check if there are subcategories ******************
|
|
$iSumSubCategories = 0;
|
|
$sSql = "SELECT count(*) as cat_count from ".$cfg["tab"]["cat"]." WHERE parentid = '".Contenido_Security::toInteger($idcat)."';";
|
|
$db3 = new DB_ConLite();
|
|
$db3->query($sSql);
|
|
if ($db3->next_record()) {
|
|
$iSumSubCategories = $db3->f('cat_count');
|
|
}
|
|
$db3->free();
|
|
|
|
$bgcolor = $cfg["color"]["table_dark"];
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', $padding_left);
|
|
$tpl->set('d', 'TEXT', $text);
|
|
$tpl->set('d', 'ONCLICK', $onclick);
|
|
$tpl->set('d', 'ICON', $icon);
|
|
$tpl->set('d', 'STATUS', $offonline);
|
|
$tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles);
|
|
$tpl->set('d', 'TOTAL', $total);
|
|
$tpl->set('d', 'ROWNAME', implode('_', $aRowname));
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage);
|
|
|
|
if ($numrows > 0 || $iSumSubCategories > 0) {
|
|
$tpl->set('d', 'EXPAND', '<a href="javascript:changeVisibility(\''.implode('_', $aRowname).'\', '.$db->f("level").', '.$idcat.')">
|
|
<img src="'.$cfg['path']['images'].'open_all.gif"
|
|
alt="'.i18n("Open category").'"
|
|
title="'.i18n("Open category").'"
|
|
id="'.implode('_', $aRowname).'_img"
|
|
style="vertical-align:top; margin-top:6px;">
|
|
</a>');
|
|
} else {
|
|
$tpl->set('d', 'EXPAND', '<img src="'.$cfg['path']['images'].'spacer.gif" width="7">');
|
|
}
|
|
|
|
if ($db->f("level") != 0) {
|
|
$tpl->set('d', 'DISPLAY_ROW', 'none');
|
|
} else {
|
|
$tpl->set('d', 'DISPLAY_ROW', $sDisplay);
|
|
}
|
|
|
|
$tpl->next();
|
|
$currentRow++;
|
|
|
|
$onclick = "";
|
|
|
|
$text = "";
|
|
$numberOfArticles = "";
|
|
$total = "";
|
|
$inThisLanguage = "";
|
|
|
|
while ($db2->next_record()) {
|
|
$idart = $db2->f("idart");
|
|
|
|
array_push($aRowname, $idart);
|
|
|
|
$text = "";
|
|
$numberOfArticles = "";
|
|
$total = "";
|
|
$inThisLanguage = "";
|
|
|
|
$padding_left = 10 + ( 15 * ($db->f("level")+1) );
|
|
|
|
$text = $db2->f("title");
|
|
$online = $db2->f("online");
|
|
|
|
//************** number of arts **************
|
|
$db3 = new DB_ConLite();
|
|
|
|
//************** hits of art total **************
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::escapeDB($year, $db3)."
|
|
GROUP BY SUBSTRING(B.archived,1,4)";
|
|
|
|
$db3->query($sql);
|
|
$db3->next_record();
|
|
|
|
$total = $db3->f(0);
|
|
|
|
//************** hits of art in this language ***************
|
|
$sql = "SELECT visited FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND A.idcat='".Contenido_Security::toInteger($idcat)."'
|
|
AND A.idart='".Contenido_Security::toInteger($idart)."' AND B.idlang='".Contenido_Security::toInteger($lang)."' AND B.idclient='".Contenido_Security::toInteger($client)."'
|
|
AND SUBSTRING(B.archived,1,4) = ".Contenido_Security::escapeDB($year, $db3)." GROUP BY SUBSTRING(B.archived,1,4)";
|
|
|
|
$db3->query($sql);
|
|
$db3->next_record();
|
|
|
|
$inThisLanguage = $db3->f(0);
|
|
|
|
if ($online == 0) {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'offline_off.gif" alt="Artikel ist offline" title="Artikel ist offline">';
|
|
} else {
|
|
$offonline = '<img src="'.$cfg['path']['images'].'online_off.gif" alt="Artikel ist online" title="Artikel ist online">';
|
|
}
|
|
|
|
$icon = '<img src="'.$cfg['path']['images'].'article.gif" style="vertical-align:top;">';
|
|
$bgcolor = $cfg["color"]["table_light"];
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', $padding_left);
|
|
$tpl->set('d', 'TEXT', $text);
|
|
$tpl->set('d', 'ONCLICK', "");
|
|
$tpl->set('d', 'ICON', $icon);
|
|
$tpl->set('d', 'STATUS', $offonline);
|
|
$tpl->set('d', 'ROWNAME', implode('_', $aRowname));
|
|
$tpl->set('d', 'NUMBEROFARTICLES', $numberOfArticles);
|
|
$tpl->set('d', 'TOTAL', $total);
|
|
$tpl->set('d', 'ROWNAME', implode('_', $aRowname));
|
|
$tpl->set('d', 'EXPAND', '<img src="'.$cfg['path']['images'].'spacer.gif" width="7">');
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'INTHISLANGUAGE', $inThisLanguage);
|
|
$tpl->set('d', 'DISPLAY_ROW', 'none');
|
|
$tpl->next();
|
|
$currentRow++;
|
|
|
|
array_pop($aRowname);
|
|
}
|
|
}
|
|
|
|
//************** hits total**************
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idclient='".Contenido_Security::toInteger($client)."'
|
|
AND SUBSTRING(B.archived,1,4) = '".Contenido_Security::escapeDB($year, $db)."' GROUP BY SUBSTRING(B.archived,1,4)";
|
|
|
|
$db->query($sql);
|
|
$db->next_record();
|
|
|
|
$total = $db->f(0);
|
|
|
|
//************** hits total on this language ***************
|
|
$sql = "SELECT SUM(visited) FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["stat_archive"]." AS B WHERE A.idcatart=B.idcatart AND B.idlang='".Contenido_Security::toInteger($lang)."'
|
|
AND B.idclient='".Contenido_Security::toInteger($client)."' AND SUBSTRING(B.archived,1,4) = '".Contenido_Security::escapeDB($year, $db)."' GROUP BY SUBSTRING(B.archived,1,4)";
|
|
|
|
$db->query($sql);
|
|
$db->next_record();
|
|
|
|
$inThisLanguage = $db->f(0);
|
|
|
|
$bgcolor = '#FFFFFF';
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'TEXT', ' ');
|
|
$tpl->set('d', 'ICON', '');
|
|
$tpl->set('d', 'STATUS', '');
|
|
$tpl->set('d', 'PADDING_LEFT', '10');
|
|
$tpl->set('d', 'NUMBEROFARTICLES', '');
|
|
$tpl->set('d', 'TOTAL', '');
|
|
$tpl->set('d', 'ONCLICK', '');
|
|
$tpl->set('d', 'EXPAND', '');
|
|
$tpl->set('d', 'ROWNAME', '');
|
|
$tpl->set('d', 'INTHISLANGUAGE', '');
|
|
$tpl->set('d', 'DISPLAY_ROW', $sDisplay);
|
|
$bgcolor = $cfg["color"]["table_dark"];
|
|
$tpl->set('s', 'SUMBGCOLOR', $cfg["color"]["table_dark"]);
|
|
$tpl->set('s', 'SUMTEXT', "Summe");
|
|
$tpl->set('s', 'SUMNUMBEROFARTICLES', $sumNumberOfArticles);
|
|
$tpl->set('s', 'SUMTOTAL', $total);
|
|
$tpl->set('s', 'SUMINTHISLANGUAGE', $inThisLanguage);
|
|
$tpl->next();
|
|
}
|
|
|
|
/**
|
|
* Generates a top<n> statistics page
|
|
*
|
|
* @param $yearmonth Specifies the year and month from which to retrieve the
|
|
* statistics, specify "current" to retrieve the current
|
|
* entries
|
|
* @param $top Specifies the amount of pages to display
|
|
*
|
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return none
|
|
*
|
|
*/
|
|
function statsOverviewTop($yearmonth, $top) {
|
|
global $cfg, $db, $tpl, $client, $lang;
|
|
|
|
if (strcmp($yearmonth,"current") == 0) {
|
|
$sql = "SELECT
|
|
C.title, A.visited, B.idcat as idcat
|
|
FROM ".$cfg["tab"]["stat"]." AS A,
|
|
".$cfg["tab"]["cat_art"]." AS B,
|
|
".$cfg["tab"]["art_lang"]." AS C
|
|
WHERE
|
|
C.idart = B.idart
|
|
AND
|
|
C.idlang = A.idlang
|
|
AND
|
|
B.idcatart = A.idcatart
|
|
AND
|
|
A.idclient = '".Contenido_Security::toInteger($client)."'
|
|
AND
|
|
A.idlang = '".Contenido_Security::toInteger($lang)."'
|
|
ORDER BY
|
|
A.visited DESC
|
|
|
|
LIMIT
|
|
".Contenido_Security::escapeDB($top, $db);
|
|
} else {
|
|
$sql = "SELECT
|
|
C.title, A.visited, B.idcat as idcat
|
|
FROM ".$cfg["tab"]["stat_archive"]." AS A,
|
|
".$cfg["tab"]["cat_art"]." AS B,
|
|
".$cfg["tab"]["art_lang"]." AS C
|
|
WHERE
|
|
C.idart = B.idart
|
|
AND
|
|
C.idlang = A.idlang
|
|
AND
|
|
B.idcatart = A.idcatart
|
|
AND
|
|
A.idclient = '".Contenido_Security::toInteger($client)."'
|
|
AND
|
|
A.archived = '".Contenido_Security::escapeDB($yearmonth, $db)."'
|
|
AND
|
|
A.idlang = '".Contenido_Security::toInteger($lang)."'
|
|
ORDER BY
|
|
A.visited DESC
|
|
LIMIT
|
|
".Contenido_Security::escapeDB($top, $db);
|
|
}
|
|
|
|
$db->query($sql);
|
|
|
|
while ($db->next_record()) {
|
|
$cat_name = "";
|
|
statCreateLocationString($db->f('idcat')," / ", $cat_name);
|
|
$bgcolor = $cfg["color"]["table_light"];
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', '5');
|
|
$tpl->set('d', 'PATH', "Pfad: / ".$cat_name);
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'TEXT', $db->f(0));
|
|
$tpl->set('d', 'TOTAL', $db->f(1));
|
|
$tpl->next();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the canonical month.
|
|
*
|
|
* Wrapper for function getCanonicalMonth()
|
|
*
|
|
* @param int $month The digit representation of a month
|
|
* @return string Textual representation of a month
|
|
*/
|
|
function statReturnCanonicalMonth($month) {
|
|
return getCanonicalMonth($month);
|
|
}
|
|
|
|
|
|
/**
|
|
* Generates the location string for passed category id.
|
|
*
|
|
* Performs a recursive call, if parent category doesn't matches to 0
|
|
*
|
|
* @param int $idcat The category id
|
|
* @param string $seperator Separator for location string
|
|
* @param string $cat_str The location string variable (reference)
|
|
* @return void
|
|
*/
|
|
function statCreateLocationString($idcat, $seperator, &$cat_str) {
|
|
|
|
global $cfg, $db, $client, $lang;
|
|
|
|
$sql = "SELECT
|
|
a.name AS name,
|
|
a.idcat AS idcat,
|
|
b.parentid AS parentid
|
|
FROM
|
|
".$cfg["tab"]["cat_lang"]." AS a,
|
|
".$cfg["tab"]["cat"]." AS b
|
|
WHERE
|
|
a.idlang = '".Contenido_Security::toInteger($lang)."' AND
|
|
b.idclient = '".Contenido_Security::toInteger($client)."' AND
|
|
b.idcat = '".Contenido_Security::toInteger($idcat)."' AND
|
|
a.idcat = b.idcat";
|
|
|
|
$db4 = new DB_ConLite;
|
|
$db4->query($sql);
|
|
$db4->next_record();
|
|
|
|
$name = $db4->f("name");
|
|
$parentid = $db4->f("parentid");
|
|
|
|
$tmp_cat_str = $name . $seperator . $cat_str;
|
|
$cat_str = $tmp_cat_str;
|
|
|
|
if ($parentid != 0) {
|
|
statCreateLocationString($parentid, $seperator, $cat_str);
|
|
} else {
|
|
$sep_length = strlen($seperator);
|
|
$str_length = strlen($cat_str);
|
|
$tmp_length = $str_length - $sep_length;
|
|
$cat_str = substr($cat_str, 0, $tmp_length);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generates a top<n> statistics page
|
|
*
|
|
* @param $year Specifies the year from which to retrieve the
|
|
* statistics
|
|
* @param $top Specifies the amount of pages to display
|
|
*
|
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return none
|
|
*
|
|
*/
|
|
function statsOverviewTopYear($year, $top) {
|
|
global $cfg, $db, $tpl, $client, $lang;
|
|
|
|
$sql = "SELECT
|
|
C.title, SUM(A.visited) as visited, B.idcat as idcat
|
|
FROM ".$cfg["tab"]["stat_archive"]." AS A,
|
|
".$cfg["tab"]["cat_art"]." AS B,
|
|
".$cfg["tab"]["art_lang"]." AS C
|
|
WHERE
|
|
C.idart = B.idart
|
|
AND
|
|
C.idlang = A.idlang
|
|
AND
|
|
B.idcatart = A.idcatart
|
|
AND
|
|
A.idclient = '".Contenido_Security::toInteger($client)."'
|
|
AND
|
|
A.archived LIKE '".Contenido_Security::escapeDB($year, $db)."%'
|
|
AND
|
|
A.idlang = '".Contenido_Security::toInteger($lang)."'
|
|
GROUP BY A.idcatart
|
|
ORDER BY
|
|
visited DESC
|
|
|
|
LIMIT
|
|
".Contenido_Security::escapeDB($top, $db);
|
|
|
|
$db->query($sql);
|
|
|
|
while ($db->next_record()) {
|
|
$cat_name = "";
|
|
statCreateLocationString($db->f('idcat')," / ", $cat_name);
|
|
$tpl->set('d', 'PATH', "Pfad: / ".$cat_name);
|
|
$bgcolor = $cfg["color"]["table_light"];
|
|
$tpl->set('d', 'BGCOLOR', $bgcolor);
|
|
$tpl->set('d', 'PADDING_LEFT', '0');
|
|
$tpl->set('d', 'BORDERCOLOR', $cfg["color"]["table_border"]);
|
|
$tpl->set('d', 'TEXT', $db->f(0));
|
|
$tpl->set('d', 'TOTAL', $db->f(1));
|
|
$tpl->next();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a drop down to choose the stats to display
|
|
*
|
|
* @param none
|
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return string Returns a drop down string
|
|
*
|
|
*/
|
|
function statDisplayTopChooser($default) {
|
|
if ($default == "top10") { $defaultTop10 = "selected";}
|
|
if ($default == "top20") { $defaultTop20 = "selected";}
|
|
if ($default == "top30") { $defaultTop30 = "selected";}
|
|
if ($default == "all") { $defaultAll = "selected";}
|
|
|
|
return ("<form name=\"name\">" .
|
|
" <select class=\"text_medium\" onchange=\"top10Action(this)\">".
|
|
" <option value=\"top10\" $defaultTop10>".i18n("Top 10")."</option>".
|
|
" <option value=\"top20\" $defaultTop20>".i18n("Top 20")."</option>".
|
|
" <option value=\"top30\" $defaultTop30>".i18n("Top 30")."</option>".
|
|
" <option value=\"all\" $defaultAll>".i18n("All")."</option>".
|
|
" </select>".
|
|
"</form>");
|
|
}
|
|
|
|
/**
|
|
* Returns a drop down to choose the stats to display for yearly summary pages
|
|
*
|
|
* @param none
|
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return string Returns a drop down string
|
|
*
|
|
*/
|
|
function statDisplayYearlyTopChooser($default) {
|
|
if ($default == "top10") { $defaultTop10 = "selected";}
|
|
if ($default == "top20") { $defaultTop20 = "selected";}
|
|
if ($default == "top30") { $defaultTop30 = "selected";}
|
|
if ($default == "all") { $defaultAll = "selected";}
|
|
|
|
return ("<form name=\"name\">" .
|
|
" <select class=\"text_medium\" onchange=\"top10ActionYearly(this)\">".
|
|
" <option value=\"top10\" $defaultTop10>".i18n("Top 10")."</option>".
|
|
" <option value=\"top20\" $defaultTop20>".i18n("Top 20")."</option>".
|
|
" <option value=\"top30\" $defaultTop30>".i18n("Top 30")."</option>".
|
|
" <option value=\"all\" $defaultAll>".i18n("All")."</option>".
|
|
" </select>".
|
|
"</form>");
|
|
}
|
|
|
|
/**
|
|
* Return an array with all years which are available as stat files
|
|
*
|
|
* @param mixed many
|
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return array Array of strings with years.
|
|
*/
|
|
function statGetAvailableYears($client, $lang) {
|
|
global $cfg, $db;
|
|
|
|
$availableYears = array();
|
|
|
|
$sql = "SELECT SUBSTRING(`archived`,1,4)
|
|
FROM
|
|
".$cfg["tab"]["stat_archive"]."
|
|
WHERE
|
|
idlang = '".Contenido_Security::toInteger($lang)."' AND
|
|
idclient = '".Contenido_Security::toInteger($client)."'
|
|
GROUP BY
|
|
SUBSTRING(`archived`,1,4)
|
|
ORDER BY
|
|
SUBSTRING(`archived`,1,4) DESC";
|
|
|
|
$db->query($sql);
|
|
while ($db->next_record()) {
|
|
array_push($availableYears, $db->f(0));
|
|
}
|
|
|
|
return($availableYears);
|
|
}
|
|
|
|
/**
|
|
* Return an array with all months for a specific year which are available
|
|
* as stat files
|
|
*
|
|
* @param mixed many
|
|
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
|
|
* @copyright four for business AG <http://www.4fb.de>
|
|
*
|
|
* @return array Array of strings with months.
|
|
*/
|
|
function statGetAvailableMonths($year, $client, $lang) {
|
|
global $cfg, $db;
|
|
|
|
$availableYears = array();
|
|
|
|
$sql = "SELECT SUBSTRING(`archived`,5,2)
|
|
FROM
|
|
".$cfg["tab"]["stat_archive"]."
|
|
WHERE
|
|
idlang = '".Contenido_Security::toInteger($lang)."' AND
|
|
idclient = '".Contenido_Security::toInteger($client)."' AND
|
|
SUBSTRING(`archived`,1,4) = '".Contenido_Security::escapeDB($year, $db)."'
|
|
GROUP BY
|
|
SUBSTRING(`archived`,5,2)
|
|
ORDER BY SUBSTRING(`archived`,5,2) DESC";
|
|
|
|
$db->query($sql);
|
|
while ($db->next_record()) {
|
|
array_push($availableYears, $db->f(0));
|
|
}
|
|
|
|
return($availableYears);
|
|
}
|
|
|
|
|
|
/**
|
|
* Resets the statistic for passed client
|
|
*
|
|
* @param int $client Id of client
|
|
* @return void
|
|
*/
|
|
function statResetStatistic($client) {
|
|
global $db;
|
|
global $cfg;
|
|
$sql = "UPDATE ".$cfg["tab"]["stat"]." SET visited=0 WHERE idclient='".Contenido_Security::toInteger($client)."'";
|
|
$db->query($sql);
|
|
}
|
|
|
|
|
|
/**
|
|
* Deletes existing heap table (table in memory) and creates it.
|
|
*
|
|
* @param string $sHeapTable Table name
|
|
* @param DB_ConLite $db Database object
|
|
* @return void
|
|
*/
|
|
function buildHeapTable($sHeapTable, $db) {
|
|
global $cfg;
|
|
|
|
$sql = "DROP TABLE IF EXISTS ".Contenido_Security::escapeDB($sHeapTable, $db).";";
|
|
$db->query($sql);
|
|
|
|
$sql = "CREATE TABLE ".Contenido_Security::escapeDB($sHeapTable, $db)." TYPE=HEAP
|
|
SELECT
|
|
A.idcatart,
|
|
A.idcat,
|
|
A.idart,
|
|
B.idstatarch,
|
|
B.archived,
|
|
B.idlang,
|
|
B.idclient,
|
|
B.visited
|
|
FROM
|
|
".$cfg['tab']['cat_art']." AS A, ".$cfg['tab']['stat_archive']." AS B
|
|
WHERE
|
|
A.idcatart = B.idcatart;";
|
|
$db->query($sql);
|
|
|
|
$sql = "ALTER TABLE `".Contenido_Security::escapeDB($sHeapTable, $db)."` ADD PRIMARY KEY (`idcatart`,`idcat` ,`idart`,`idstatarch` ,`archived`,`idlang`,`idclient` ,`visited`);";
|
|
$db->query($sql);
|
|
}
|
|
?>
|