// (c) EIKONA AG, it.x informationssysteme gmbh, Alle Rechte vorbehalten. // Historie ---------------------------------------------------------------------------------------- // 06.08.02 mgs Erstellung // Historie ---------------------------------------------------------------------------------------- /** * Loader-Datei für das Portal. * * Folgende Eingabeparameter werden hier verwertet: * * ------------------------------------------------------------------------------------------------- * seite = Name oder SystemId der zu ladenden Seite, falls ungültig werden entsprechende * Fehler- bzw. Standardseiten geladen. * navigation = die SystemId des gerade aktiven Navigationspunkts oder 0. * root = die SystemId der aktuellen Sprache - falls installiert - oder 0. * kanal = der zu ladende Kanal aus der Templatedatei, falls "" wird der Standardkanal "html" verwendet. * markierung = Der übergebene String wird im gesamten Dokument gesucht, und mit einer Hintergrundfarbe markiert. * ------------------------------------------------------------------------------------------------- * * @package modul_seiten */ /** * Initialisierung */ require_once("./_konfig/includes.php"); require_once(const_portal_root."includes.php"); // PHP Laufzeitumgebung einstellen. init_cycon_php_runtime(); /**#@+ * Konstantendefinitionen * @ignore */ define("const_seiten_navigation", false); define("const_debug_ladezeitmessung", false); define("const_gzip_kanaele", "html,print,rss,xml"); /**#@-*/ // Hauptfunktion rufen main(array_merge(_GET(), _POST())); // ------------------------------------------------------------------------------------------------- // S T E U E R F U N K T I O N E N // ------------------------------------------------------------------------------------------------- /** * Hauptfunktion, läd das Template und füllt die Inhalte. * @ignore */ function main($array_form) { $bit_return = true; $int_root_id = 0; // Ladezeitmessung: if (const_debug_ladezeitmessung) $array_zeit_start = gettimeofday(); // Initialisierung if (get_magic_quotes_gpc()) $array_form = backslashes_entfernen($array_form); // Instanziierungen. $obj_server = new class_server($array_form, "portal", ((int)$array_form["portaleditor"] == 1 || (const_seiten_vorschau_rechte == "admin" && ($array_form["status"] == "vorschau" || $array_form["status"] == "vorschau_inhalte")) ? "admin_" : "portal_")); $obj_db = &$obj_server->get_obj_db(); $obj_session = &$obj_server->get_obj_session(); $obj_login = &$obj_server->get_obj_login(); require_once(const_portal_root."seiten/class_portal_konfig.php"); $obj_konfig = new class_portal_konfig($obj_server); // Als erstes auf die Navigationsmodul-Erweiterung Weiterleitungen prüfen if ($array_form["weiterleitung"] != "") { // Ein Trailing-Slash kann entfernt werden if (uc_substr($array_form["weiterleitung"], -1) == "/") $array_form["weiterleitung"] = uc_substr($array_form["weiterleitung"], 0, -1); // Direkt aus der Datenbank auslesen $array_weiterleitung = $obj_db->get_array(" SELECT weiterleitung_seite, weiterleitung_link FROM ".const_db_kuerzel."navigationen_weiterleitungen INNER JOIN ".const_db_kuerzel."system ON system_modul_id = ".const_modul_navigationen." AND system_klasse = 'navigationen_weiterleitungen' AND system_fremd_id = weiterleitung_id WHERE system_name = ".$obj_db->quote_wert($array_form["weiterleitung"], "string(240)")." "); // URL zusammenbauen, redirect und abbrechen $str_link = get_url_system($array_weiterleitung["weiterleitung_link"], $array_weiterleitung["weiterleitung_seite"]); $obj_server->redirect((!strstr($str_link, "://") ? const_url_root : "").$str_link); } else { // NTLM-Authentifizierung if (const_system_ntlm_authentifizierung && !$obj_login->ist_angemeldet() && _SERVER("REMOTE_USER") != "") $obj_login->aktion_login_per_ntlm(); // Usertracking (sofern installiert) if (pruefe_modul_version($obj_db, const_modul_usertrack, "3.1.0")) { require_once(const_portal_root."usertrack/class_portal_usertrack.php"); $obj_usertrack = new class_portal_usertrack($obj_server, $obj_konfig, 0, $array_form); $obj_usertrack->start(); } if (const_verweis_aliase_aktiv) { // Ist die Seite evtl. ein Alias? require_once(const_document_root."_include/class_verweis_alias.php"); $obj_alias = class_verweis_alias::get_instance($obj_server); $bit_alias_moved = false; $array_alias_parameter = $obj_alias->get_parameter($array_form["seite"], $array_form, $bit_alias_moved); if (count($array_alias_parameter) > 0) { // Parameter aus dem Alias zu den aktuellen Parametern dazuladen. $array_form = array_merge($array_form, $array_alias_parameter); $obj_server->array_variablen = $array_form; // Ist eine Sprachumschaltung erforderlich? if ($obj_server->get_sprache_kuerzel() != $array_alias_parameter["sprache"] && $array_alias_parameter["sprache"] != "") $obj_server->set_sprache_kuerzel($array_alias_parameter["sprache"]); // ist dieser Alias noch aktuell? if ($bit_alias_moved) $obj_server->redirect(get_url_system("", $array_form), 301); } } // Wurde die Seite mit der System-Id übergeben? if (is_numeric($array_form["seite"])) $int_seiten_system_id = (int)$array_form["seite"]; // eine Standardseite, falls keine andere gefunden werden kann. $str_std_index_seite = "index"; $str_std_fehler_seite = "_fehler_seite"; $str_std_fehler_recht = "_fehler_recht"; // Unterstützung für Masterseiten - 1 Masterseite für alle Seiten pro Sprache verwenden. $str_master_seite = "master"; // Gibt es das Domainmodul? if (pruefe_modul_version($obj_db, const_modul_domains, "3.1.0")) { require_once(const_portal_root."domains/class_portal_domains.php"); $obj_domains = new class_portal_domains($obj_server, $obj_konfig, 0, $array_form); $array_domain = $obj_domains->get_aktuelle_domain(); // für den Usertracker bereitstellen. $obj_server->set_domain_kuerzel($array_domain["domain_kuerzel"]); // Die ermittelte Root Id wird im Serverobjekt hinterlegt. $obj_server->set_root_aktuell((int)$array_domain["system_id"]); // Die Startseite ermitteln. if ($array_form["seite"] == "") $array_form["seite"] = $array_domain["domain_seite"]; $str_std_index_seite = $array_domain["domain_kuerzel"]."_".$str_std_index_seite; $str_std_fehler_seite = $array_domain["domain_kuerzel"]."_".$str_std_fehler_seite; $str_std_fehler_recht = $array_domain["domain_kuerzel"]."_".$str_std_fehler_recht; $str_master_seite = $array_domain["domain_kuerzel"]."_".$str_master_seite; } // Gibt es das Sprachmodul? if (pruefe_modul_version($obj_db, const_modul_sprachen, "3.2.1")) { // Die Sprachverwaltung kann nach der aktuellen Sprache gefragt werden: require_once(const_portal_root."sprachen/class_portal_sprachen.php"); $obj_sprachen = new class_portal_sprachen($obj_server, $obj_konfig, 0, $array_form); $array_sprache = $obj_sprachen->get_aktuelle_sprache(); // Die ermittelte Root Id wird im Serverobjekt hinterlegt. $obj_server->set_root_aktuell((int)$array_sprache["system_id"]); $obj_server->set_sprache_kuerzel($array_sprache["sprache_kuerzel"]); $obj_server->set_sprachen_erlaubt($obj_sprachen->get_sprachen_erlaubt()); $array_form["sprache_kuerzel"] = $array_sprache["sprache_kuerzel"]; $obj_konfig = new class_portal_konfig($obj_server, -1, $array_form, $array_form["sprache_kuerzel"]); // Die Startseite ermitteln. if ($array_form["seite"] == "") $array_form["seite"] = $array_sprache["sprache_seite"]; // besondere Fehlerseiten ermitteln: if ($array_form["fehler_seite"] == "") $array_form["fehler_seite"] = $array_sprache["sprache_fehler_seite"]; if ($array_form["fehler_recht"] == "") $array_form["fehler_recht"] = $array_sprache["sprache_fehler_recht"]; $str_std_index_seite = $str_std_index_seite."_".$array_sprache["sprache_kuerzel"]; $str_std_fehler_seite = $str_std_fehler_seite."_".$array_sprache["sprache_kuerzel"]; $str_std_fehler_recht = $str_std_fehler_recht."_".$array_sprache["sprache_kuerzel"]; $str_master_seite = $str_master_seite."_".$array_sprache["sprache_kuerzel"]; } // Wurde die Seite mit dem Seitennamen übergeben? if ($int_seiten_system_id == 0) { if ($array_form["seite"] == "" or $array_form["seite"] == "loader") $array_form["seite"] = $str_std_index_seite; $int_seiten_system_id = get_seite_id($array_form, $obj_server, $array_sprache); } // Id der Masterseite ermitteln. $int_masterseite_system_id = 0; if ($str_master_seite != "" && $str_master_seite != $array_form["seite"]) { $array_form_master = array("seite" => $str_master_seite, "status" => $array_form["status"]); $int_masterseite_system_id = get_seite_id($array_form_master, $obj_server, $array_sprache, false); } // Navigation ermitteln: // 1. Hohe Priorität: Id bei der Seite eingestellt. if ((int)$array_form["navigation"] == 0 && const_seiten_navigation == true) { $array_form["navigation"] = (int)$obj_db->get_value(" SELECT seite_navigation FROM ".const_db_kuerzel."system INNER JOIN ".const_db_kuerzel."seiten ON (system_fremd_id = seite_id) WHERE system_name =".$obj_db->quote_wert($array_form["seite"], "string(60)")." AND system_modul_id = ".const_modul_seiten." AND system_klasse= 'seiten' ", "seite_navigation"); } // 2. Niedrige Priorität: Id im Navigationsbaum suchen. if ((int)$array_form["navigation"] == 0) { $array_navigationen = $obj_db->get_result(" SELECT system_id FROM ".const_db_kuerzel."system INNER JOIN ".const_db_kuerzel."navigationen ON (system_fremd_id = navigation_id) WHERE ( navigation_seite = ".$obj_db->quote_wert($array_form["seite"], "string(60)")." OR navigation_seite LIKE ".$obj_db->quote_wert("?seite=".$array_form["seite"]."%", "string(60)").") AND navigation_seite NOT LIKE '%navigation=%' AND system_modul_id = ".(int)const_modul_navigationen." AND system_klasse = 'navigationen' AND system_status <> 0 ORDER BY system_erstell_datum ASC, system_id ASC ", "system_id"); if (count($array_navigationen) > 1 && (int)$obj_server->get_root_aktuell() > 0 && (int)$obj_db->get_value("SELECT parameter_wert FROM ".const_db_kuerzel."system_modul_parameter WHERE parameter_modul_id = ".const_modul_navigationen." AND parameter_name = 'mehrsprachig'") == 0) { $array_navigationen = array_keys($array_navigationen); $int_navigation_id = (int)array_shift($array_navigationen); while ($int_navigation_id > 0 && !is_null($int_navigation_id) && (int)$array_form["navigation"] <= 0) { // Hängt diese Navigation-Id an der aktuellen Sprache/Domain? $array_ids = get_ids_rekursiv($obj_db, $int_navigation_id); if (in_array((int)$obj_server->get_root_aktuell(), array_keys($array_ids))) $array_form["navigation"] = $int_navigation_id; else $int_navigation_id = (int)array_shift($array_navigationen); } } else { $array_navigationen_keys = array_keys($array_navigationen); $array_form["navigation"] = (int)array_shift($array_navigationen_keys); } } // Wurde der Kanal übergeben? if ($array_form["kanal"] == "") $array_form["kanal"] = "html"; // Welche Fehlerseiten sollen verwendet werden? if ($array_form["fehler_seite"] == "") $array_form["fehler_seite"] = $str_std_fehler_seite; if ($array_form["fehler_recht"] == "") $array_form["fehler_recht"] = $str_std_fehler_recht; // Modul Seitenverwaltung (seiten) instanziieren. require_once(const_portal_root."seiten/class_portal_seiten.php"); $obj_seiten = new class_portal_seiten($obj_server, $obj_konfig, (int)$int_seiten_system_id, $array_form, (int)$int_masterseite_system_id); $str_inhalt = $obj_seiten->aktion($array_form["com"]); // Usertracking (sofern installiert) if (pruefe_modul_version($obj_db, const_modul_usertrack, "3.1.0")) $obj_usertrack->fertig($int_seiten_system_id, array("seite" => $obj_seiten->get_variable("seite"), "seite_system_name" => $obj_seiten->array_system["system_name"], "status" => $array_form["status"])); // Ladezeitmessung: if (const_debug_ladezeitmessung) { $array_zeit_ende = gettimeofday(); $float_dauer = (float)($array_zeit_ende["sec"]-$array_zeit_start["sec"])*1000000+($array_zeit_ende["usec"]-$array_zeit_start["usec"]); $str_inhalt = "
cy:con DEBUG Mode, Aufbau-Dauer: ".sprintf("%3.3f", $float_dauer / 1000)." msec
".$str_inhalt;
}
}
$obj_server->str_inhalt = $str_inhalt;
// Ist für diesen Kanal die GZip-Komprimierung aktiv?
$array_kanaele_gzip = explode(",", const_gzip_kanaele);
if (in_array($array_form["kanal"], $array_kanaele_gzip))
$obj_server->str_transfer_encoding = "gzip";
// wir erzeugen zuerst den Inhalt, denn das kann Einfluss auf die Header haben
$str_inhalt = $obj_server->kodieren_inhalt($obj_server->str_transfer_encoding);
// Kanalabhängige Header setzen
$obj_server->set_kanal($array_form["kanal"]);
// Header erzeugen
$obj_server->erzeugen_mime_header();
// Ausgabe: HTTP Status.
header($obj_server->get_http_status());
// Ausgabe: Mime Header.
foreach ($obj_server->get_header() as $str_header)
header($str_header);
// Ausgabe: Inhalt.
echo $str_inhalt;
return $bit_return;
} // main()
// -------------------------------------------------------------------------------------------------
// H E L F E R F U N K T I O N E N
// -------------------------------------------------------------------------------------------------
/**
* Versucht auf Basis eines Seitennamens die korrekte Seiten ID zu ermitteln und berücksichtigt
* auch umbenannte Seiten.
*
* @param array enthält den Seitennamen, der hier auch verändert werden kann.
* @param class_server Serverobjekt.
*
* @return integer System-Id der gefundenen Seite. 0 falls keine Seite gefunden wurde.
*/
function get_seite_id(&$array_form, &$obj_server, $array_sprache, $bit_alte_seiten = true)
{
$int_return = 0;
$obj_db = &$obj_server->get_obj_db();
// Einfaches grabben der System-Id (ohne die Klasse zu initialisieren)
$str_where_portal = " AND system_status <> 0";
$str_where_portal .= " AND (system_start_datum <= NOW() OR system_start_datum = ".$obj_db->quote_wert("0000-00-00 00:00:00", "datetime").")";
$str_where_portal .= " AND (system_ende_datum >= NOW() OR system_ende_datum = ".$obj_db->quote_wert("0000-00-00 00:00:00", "datetime").")";
$int_return = (int)$obj_db->get_value("
SELECT system_id FROM ".const_db_kuerzel."system
WHERE system_name = ".$obj_db->quote_wert($array_form["seite"], "string(60)")."
AND system_modul_id = ".const_modul_seiten."
AND system_klasse= 'seiten'
".($array_form["status"] == "vorschau" || $array_form["status"] == "vorschau_inhalte" ? "" : $str_where_portal)."
");
// bei Mehrsprachigkeit auf Feldebene muss das Sprachkürzel noch entfernt werden.
if ((int)$obj_db->get_value("SELECT parameter_wert FROM ".const_db_kuerzel."system_modul_parameter WHERE parameter_modul_id = ".const_modul_seiten." AND parameter_name = 'mehrsprachig'") == 1 && $int_return <= 0)
{
$str_kuerzel = uc_substr($array_form["seite"], -(uc_strlen($array_sprache["sprache_kuerzel"])+1));
if (strcasecmp($str_kuerzel, "_".$array_sprache["sprache_kuerzel"]) == 0)
$str_seite = uc_substr($array_form["seite"], 0, -(uc_strlen($array_sprache["sprache_kuerzel"])+1));
// Einfaches grabben der System-Id (ohne die Klasse zu initialisieren)
$int_return = (int)$obj_db->get_value("
SELECT system_id FROM ".const_db_kuerzel."system
WHERE system_name = ".$obj_db->quote_wert($str_seite, "string(60)")."
AND system_modul_id = ".const_modul_seiten."
AND system_klasse= 'seiten'
".($array_form["status"] == "vorschau" || $array_form["status"] == "vorschau_inhalte" ? "" : $str_where_portal)."
");
if ($int_return > 0)
$array_form["seite"] = $str_seite;
}
// Vielleicht gab es diese Seite einmal?
if ($int_return <= 0 && $bit_alte_seiten)
{
// Einfaches grabben der System-Id (ohne die Klasse zu initialisieren)
$int_return = (int)$obj_db->get_value("
SELECT name_seite_id FROM ".const_db_kuerzel."seiten_namen
WHERE name_name = ".$obj_db->quote_wert($array_form["seite"], "string(60)")."
");
// kann jetzt noch der korrekte Seitennamen gesetzt werden?
if ($int_return > 0)
{
$array_form["seite"] = $obj_db->get_value("
SELECT system_name FROM ".const_db_kuerzel."system
WHERE system_id = ".(int)$int_return."
AND system_modul_id = ".const_modul_seiten."
AND system_klasse= 'seiten'
".($array_form["status"] == "vorschau" || $array_form["status"] == "vorschau_inhalte" ? "" : $str_where_portal)."
");
// 301: moved permanently.
$obj_server->redirect(get_url_system("", $array_form), 301);
}
}
return $int_return;
} // get_seite_id()
?>