<?php
$tpl->assign("MODULE_IMG_DIR", $location."templates/images/");
/* alles ausgeben
if(empty($COLUMN_restriction)) {
$nav->getMenu();
} else {
$base = $COLUMN_select->fid;
$restrictStatus = $COLUMN_select->status;
$nav->setStartLevel($COLUMN_select->status);
$children = $nav->folder[$restrictStatus][$base]['children'];
$nav->getChildren($children, ($restrictStatus + 1), $base);
}
*/
/**
* markNodes()
* Funktion markiert jeden Zweig mit einem zusätzlichen Attribt visibility = 1,
* wenn sie zu sehen ist. Ausgehend von der $openfolder wird rekursiv
* jedes Level durchlaufen und alle Eltern und deren Geschwister zur
* Anzeige gebracht
*
* @param array $nodeArray Array mit allen zur Anzeige in Frage kommenden Nodes
* @param array $childrenStruct Array welches zu jeder Parent ID alle Kinder liefert
* @param int $actualID aktuelle ID
* @return array $nodeArray Am Ende wird das markierte Array zurück geliefert
**/
function markNodes(&$nodeArray, &$childrenStruct, $actualID) {
// Alle Kinder der aktuellen ID werden markiert
if(is_array($childrenStruct[$actualID])) {
foreach($childrenStruct[$actualID] as $k => $v) {
$nodeArray[$v]['visibility'] = 1;
}
}
// Abbruchbedingung
if($nodeArray[$actualID]['level'] > 0) {
// Reskursives Parsen des Baumes
markNodes($nodeArray, $childrenStruct, $nodeArray[$actualID]['parent']);
}
// fertig markiertes Array ausliefern
return $nodeArray;
}
/*
* Ermittlung der Default Sprache ... wird leider noch als article Option gesetzt
*/
$dlQuery = mysql_fetch_array(mysql_query("SELECT * FROM ".TABLE."_options WHERE name = 'default_lang' AND module = 'art'"));
$defaultLanguage = $dlQuery[value];
/*
* Wenn im Cookie ne andere Sprache steht, diese nehmen
*/
if(!empty($_COOKIE['main_language'])) {
if(ereg("^[0-9]*$", $_COOKIE['main_language'])) {
$defaultLanguage = $_COOKIE['main_language'];
}
}
/*
* Initialisierung der NeSet Array's für das
* Folder Nested Set Objekt
*/
$folderParams = array (
'table' => TABLE.'_columns',
'id' => 'fid',
'parent' => 'mfolder',
'root' => 'rootID',
'l' => 'leftID',
'r' => 'rightID',
'level' => 'level',
'norder' => 'order_num'
);
$folderAdditional = array (
'name' => 'fname',
'status' => 'status',
'writestatus' => 'writestatus',
'description' => 'describt',
'loadurl' => 'loadurl',
'usersallowed' => 'usersallowed',
'groupsAllowed' => 'groupsAllowed',
'skin' => 'skin'
);
$nestedSet = CB_NestedSet::factory($folderParams, $folderAdditional);
// Zusatz SQL für die Mehrsprachigkeit der Rubriken
$additionalSQL = array (
"field" => ", lang.text, lang.languageID",
"join" => "LEFT JOIN ".TABLE."_language AS lang ON lang.typeID = n.fid AND lang.type = 'column' AND lang.languageID = '$defaultLanguage'"
);
// wird benötigt, um an die RootID zu kommen (kann eingespart werden)
// [*OPTIMIERUNG*]
$actualOpenfolder = $nestedSet->getNode($openfolder, true);
// getAllNodes kann rootNodes nicht ordnen, also separates auslesen der Roots
$rootFolder = $nestedSet->getRootNodes(true, $additionalSQL);
// ganzen Zweig in der $openfolder steckt abfragen
$openfolderBranch = $nestedSet->getBranch($actualOpenfolder[root], true, $additionalSQL);
// let's go
if($openfolderBranch != false) {
// Kinder Array aufbauen, in dem zu jeder ElternID alle Kinder gelistet sind
foreach($openfolderBranch as $v) {
$childrenStruct[$v['parent']][] = $v[id];
}
// Aufbau des korrekt sortierten Menus
$folderMenu = array();
foreach($rootFolder as $k => $v) {
// alle Wurzeln abgehen, bis zur der Wurzel der $openfolder
$_merge = 0;
if($actualOpenfolder != false) {
if($k == $actualOpenfolder[root]) {
// wenn diese Wurzel mit der der openfolder übereinstimmt
// dann zusammenführen der openfolderBranch mit den Wurzeln
foreach($openfolderBranch as $key => $value) {
$folderMenu[$key] = $value;
}
$_merge = 1;
}
}
// ansonsten Wurzel einfügen
if ($_merge == 0) {
$v[visibility] = 1;
$folderMenu[$k] = $v;
}
}
// getBranch liefert alle Nachkommen der Wurzel der openfolder. Es müssen
// noch die markiert werden, die zu sehen sind
$folderMenu = markNodes($folderMenu, $childrenStruct, $openfolder);
// Aubereitung des korrekt sortierten Menus für die Darstellung
foreach($folderMenu as $v) {
// wenn Sichtbarkeitstag angegeben wurde, gehts weiter
if($v[visibility] == 1) {
// Ist dieser Zweig ein aktuell gewählter? Konkret: gehört dieser Zweig
// zu den direkten Vorfahren der openfolder bzw. ist die openfolder?
$_fStatus = 0;
if($v[root] == $GLOBALS[openfolderData][root] && $v[l] <= $GLOBALS[openfolderData][l] && $v[r] >= $GLOBALS[openfolderData][r]) {
$_fStatus = 1;
}
// es gibt verschiedene Möglichkeiten das loadurl Feld zu interpretieren:
if($v['loadurl'] != "") {
if(!ereg("^http://", $v['loadurl'])) {
// fängt es nicht mit http an, ist es ein Modulaufruf
$fURL[] = $v[id]."&load=".$v['loadurl'];
$fFidSet[] = "1";
} else {
// ansonsten isses ein externer Link
$fURL[] = $v['loadurl'];
$fFidSet[] = "0";
}
} else {
// steht nichts drin wird nur die Rubrik geladen (und das Standardmodul)
$fURL[] = $v[id];
$fFidSet[] = "1";
}
// Markierung ob es openfolder ist oder nicht, für die Artikelausgabe
if($v[id] == $openfolder) {
$fArtPrint[] = "1";
$fOpenfolderName = $v[name];
$fMatchSpace = ($v[level] * 20) + 4;
} else {
$fArtPrint[]= "0";
}
// wenn ein anderssprachiger Rubrikname gefunden wurde, dann den nehmen
$_fName = $v[name];
if($v[text] != "") {
$_fName = $v[text];
}
// Aufbau der Array's
$fStatus[] = $_fStatus;
$fID[] = $v[id];
$fName[] = $_fName;
$fLevel[] = $v[level];
$fSpace[] = ($v[level] - 1) * 20;
}
}
}
// senden ans Template
$tpl->assign("navFolderData",
array (
"DEEPNESS" => $fSpace,
"NAV_FOLDER" => $fName,
"NAV_URL" => $fURL,
"NAV_FID" => $fID,
"NAV_FID_SET" => $fFidSet,
"FOLDER_ART" => $fArtPrint,
"LEVEL" => $fLevel,
"STATUS" => $fStatus
)
);
// Article Liste laden
if($archive == 1) {
$artAmount = 10000;
} else {
if(!$cbOption->getSingleOption("artAmount")) {
$artAmount = 10;
} else {
$artAmount = $cbOption->getSingleOption("artAmount");
}
}
if(!is_object($artOption)) {
//Ableitung des Article Option Objektes
$artOption = new CBOption();
$artOption->setModule("art");
$artOption->getOptionList();
}
if($load == "article2") {
/* Implementation of stage rules in module article2 */
$today = date( "Ymd", time() );
if($cbOption->getSingleOption("timepost")) {
if(!$preview) {
$stageStatement = "AND general.stage = '3' AND general.publishfrom <= '".$today."' AND (general.publishto >= '".$today."' OR general.publishto = '00000000')";
} else {
$stageStatement = "";
}
} else {
$stageStatement = "AND general.stage = '3'";
}
/*
* Sortier Methode
*/
$sortMethod = $artOption->getSingleOption("sortMethod");
switch($sortMethod){
case ART_SORT_NUMERIC:
$sortMethodString = "ORDER BY general.order_num ASC";
break;
default:
$sortMethodString = "ORDER BY general.datetime DESC";
} // switch
$dlQuery = mysql_fetch_array(mysql_query("SELECT * FROM ".TABLE."_options WHERE name = 'default_lang' AND module = 'art'"));
$defaultLanguage = $dlQuery[value];
if(!empty($_COOKIE['main_language'])) {
if(ereg("^[0-9]*$", $_COOKIE['main_language'])) {
$defaultLanguage = $_COOKIE['main_language'];
}
}
$contentWhere = "WHERE content.ide = general.ide AND ((relFolder.folderID = '$openfolder' AND relFolder.articleID = general.ide) OR general.folderID = '$openfolder') $stageStatement AND content.language = '$defaultLanguage'";
$query = "SELECT content.ide, content.language, content.title, general.datetime FROM ".TABLE."_art_content AS content, ".TABLE."_art_general AS general LEFT JOIN ".TABLE."_art_folder AS relFolder ON general.ide = relFolder.articleID $contentWhere GROUP BY general.ide $sortMethodString LIMIT 0,$artAmount";
$result = mysql_query($query);
$noArticles = true;
while($artData = mysql_fetch_object($result)) {
$title = substr($artData->title, 0, 20);
if(strlen($artData->title > 20)) {
$title .= "...";
}
$artTitle[] = $title;
$artIde[] = $artData->ide;
$artFolderId[] = $openfolder;
$noArticles = false;
}
$artType = "article2";
} else {
$query = mysql_query("SELECT title, ide, folder FROM ".TABLE."_article WHERE folder = '$openfolder' AND stage = '3' ORDER BY datum DESC LIMIT 0,$artAmount");
$artTitle = array();
$artIde = array();
$artFolderId = array();
$noArticles = true;
while($articles = mysql_fetch_array($query)) {
$title = substr($articles[title], 0, 20);
if(strlen($articles[title]) > 20) {
$title .= "...";
}
$artTitle[] = $title;
$artIde[] = $articles[ide];
$artFolderId[] = $articles[folder];
$noArticles = false;
}
unset($articles);
$artType = "article";
}
if(!$noArticles) {
$tpl->assign("navigationArticleSet", "1");
$navArticleData = array(
"NAV_FOLDER" => $artFolderId,
"ARTICLE_TITLE" => $artTitle,
"IDE" => $artIde
);
$tpl->assign("navArticleData", $navArticleData);
$tpl->assign("navArticleType", $artType);
$tpl->assign("navArticleDeepness", $fMatchSpace);
}
// Template ausgeben
$tpl->display("menu.template");
?>