* @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$: */ 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 = '
'.$text.'
'; 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)).", '1000-01-01 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 * @modified Timo A. Hummel * @copyright four for business AG * * @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 = ''; //************ 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 = ''.i18n('; } else { $offonline = ''.i18n('; } //************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', ' '.i18n( '); } else { $tpl->set('d', 'EXPAND', ''); } $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 = 'Artikel ist offline'; } else { $offonline = 'Artikel ist online'; } $icon = ''; $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', ''); $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 * @modified Timo A. Hummel * @copyright four for business AG * * @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 = ''; //************ 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 = 'Kategorie ist offline'; } else { $offonline = 'Kategorie ist online'; } //************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', ' '.i18n( '); } else { $tpl->set('d', 'EXPAND', ''); } 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 = 'Artikel ist offline'; } else { $offonline = 'Artikel ist online'; } $icon = ''; $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', ''); $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 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 * @copyright four for business AG * * @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 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 * @copyright four for business AG * * @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, C.title 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 * @copyright four for business AG * * @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 ("
" . " ". "
"); } /** * Returns a drop down to choose the stats to display for yearly summary pages * * @param none * @author Timo A. Hummel * @copyright four for business AG * * @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 ("
" . " ". "
"); } /** * Return an array with all years which are available as stat files * * @param mixed many * @author Timo A. Hummel * @copyright four for business AG * * @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 * @copyright four for business AG * * @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); } ?>