/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/

#include <sxpagefaqs.h>

/**
	Constructor.
*/

sxpagecontentbase::sxpagecontentbase( const ddstring& name, ddwebsite* site, const ddstring& type, const ddstring& title ) 
: sxpage( name, site, type, title )
{		
	// tag row basten
	_vgwortrow.create( get_site().get_config()["main"]["vg_wort_tag"], "|" );
	
	
} 

/**
	Rendert das VG-Wort-Tag
*/

ddstring sxpagecontentbase::get_vg_wort_tag()
{
	if( _vgworttag.empty() )
		return "";
	_vgwortrow[ 1 ] = _vgworttag;
	return _vgwortrow.join();
}

/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


/**
	Constructor.
*/

sxpagefaqs::sxpagefaqs( const ddstring& name, ddwebsite* site, const ddstring& title ) 
: sxpagecontentbase( name, site, "faqs", title )
{		
	
	init_requests();
	
	add_request_handler( "tipps",										"xx_faqs_categories", 			(ddmemptr) &sxpagefaqs::on_show_category, 2 );
	add_request_handler( "faqs_admin_categories",		"xx_faqs_admin_categories", (ddmemptr) &sxpagefaqs::on_faqs_admin_categories,	1, dduserid::usr_can_edit_news );
	add_request_handler( "faqs_admin_dossiers",			"xx_faqs_admin_dossiers", 	(ddmemptr) &sxpagefaqs::on_faqs_admin_dossiers,		1, dduserid::usr_can_edit_news );
	add_request_handler( "faqs_admin_teaser_box",		"xx_faqs_admin_teaser_box",	(ddmemptr) &sxpagefaqs::on_faqs_admin_teaser_box,	1, dduserid::usr_can_edit_news );  
	
	add_inner_call( "sn_box_faqs_categories", 			(ddmemptr) &sxpagefaqs::create_box_categories );
 	add_inner_call( "sn_box_faqs_categories_choose",(ddmemptr) &sxpagefaqs::create_box_categories_choose );
 	//add_inner_call( "sn_box_faqs_categories_select",(ddmemptr) &sxpagefaqs::create_box_categories );
 
 	add_inner_call( "sn_box_faqs_dossier", 					(ddmemptr) &sxpagefaqs::create_box_dossier );
 	add_inner_call( "sn_box_faqs_dossier_ovreview",	(ddmemptr) &sxpagefaqs::create_box_dossier_overview );
 	add_inner_call( "sn_box_jump", 									(ddmemptr) &sxpagefaqs::create_box_jump );
 
	_use_overlay_image = site->get_config()["main"].get_bool( "use_faqs_overlay_images", false );
	_use_overlay_links = site->get_config()["main"].get_bool( "use_faqs_overlay_links", false );
	
	try
	{
		// die dossiers aufbauen
		
        //get_view().fill( "on_create_dossiers" );	
		//_dossiermap.init_dossier_data( get_view(), get_view( "sxpagefaqs.dossiers" ) );
	
	}
	catch( exception& error )
	{
		cout << "---ERROR: " << error.what() << endl;
		throw( error );
	}
	
	//_categorymap.dump();
	
	
} 


/**
	Rendert die Kategorien-Box.
*/

dd_result sxpagefaqs::create_box_categories( dditem& item )
{	
	
	ddwebcategorymap& categorymap = get_site().get_category_map();

	// alles schön machen
	item.clear_children();	
	ddstring result;
	
	// cat-idpath holen
	ddstring catids;
	
	// /hack: jede faq enthält ihren gesamt pfad, wir wollen aber auch 
	// teilpfade 'eingeklappt' anzeigen: /tipps/newtzwerk
	const ddstringrow& sp = get_split_path();
	if( sp[0] != "tipps" )
	{
		get_view().execute( "on_fetch_categories", context.id ).read( catids );
	}
	else
	{
		// pfad ohne seitenangaben des navi
		size_t len = sp.size();
		if( sp[ len-1 ].is_number() )
			--len;
		catids = categorymap.get_entry( "/" + sp.join( "/", 1, len )+ "/" ).idpath;
	}
	
	categorymap.render_path( item, result, catids );
	get_buffer().append( result );
	
	return rs_ok;

}



/**
	Rendert die Kategorien-Box.
*/

dd_result sxpagefaqs::create_box_categories_choose( dditem& item )
{	
	
	ddwebcategorymap& categorymap = get_site().get_category_map();
	// alles schön machen
	item.clear_children();	
	ddstring result;
	// root heisst "/"
	categorymap.get_entry( "/" ).render_tree( item, result, 0 );
	get_buffer().append( result );
	
	return rs_ok;
	
}


/**
	Rendert die Dossier-Box.
	Erstmal muss ermittelt werden, ob ein Tipp überhaupt Teil eines Dossiers,
	daher wird eine Abbildung von Tipp-ID auf Dossiers benötigt.
	
	Die IDs der in Dossiers befindlichen Faqs zeigen auf die (interne) ID
	des Dossiers.
*/

dd_result sxpagefaqs::create_box_dossier( dditem& item )
{
	
	//??
	item.clear_children();
	//item.clear_value();
	ddstring result;
	_dossiermap.render_dossier_box( context.id, item, result );
	get_buffer().append( result );
	
	return rs_ok;
	
}

dd_result sxpagefaqs::create_box_dossier_overview( dditem& item )
{
	return rs_ok;
	//??
	item.clear_children();
	//item.clear_value();
	ddstring result;
	_dossiermap.render_dossier_box( context.id, item, result );
	get_buffer().append( result );
	
	return rs_ok;
	
	
	ddwebview& table = get_view( "sxpagefaqs.dossiers" );
	ddwebcgi& cgi = get_cgi();
	
	cgi.dump();
	
	// vor dem anzeigen speichern oder löschen
	if( !cgi["sx_sub_action"].empty() && !cgi["sn_msgsubject"].empty() )
		table.execute( cgi["sx_sub_action"], cgi );
	
	table.fill( "on_admin_dossiers" );
	table.on_render( *this, get_body()["sn_list"]["sn_msgentry"] );
	
	
}

/**
	Rendert die 'Nächster/Vorheriger Eintrag' Links eines Dossiers.
*/

dd_result sxpagefaqs::create_box_jump( dditem& item )
{
	
	//??
	item.clear_children();
	item.clear_value();
	ddstring result;
	//_dossiermap.render( context.id, item, result );
	ddstring idlst, idnxt;
	_dossiermap.get_neighbors( context.id, idlst, idnxt );
	
	item["sn_nxt"]["id"].from_string( idnxt );
	item["sn_lst"]["id"].from_string( idlst );		
	item["sn_nxt"].set_visible( !idnxt.empty() );
	item["sn_lst"].set_visible( !idlst.empty() );
	
	item["sn_lst"]["sn_pagetype"].from_string( "faqs" );
	item["sn_nxt"]["sn_pagetype"].from_string( "faqs" );			

	get_buffer().append( item.to_string() );
	
	return rs_ok;
	
}


/**
	Baut die Faqs Suchbox
*/

/*
dd_result sxpagefaqs::create_box_search_faqs( dditem& item )
{
	
	dditem& result = item["sn_msgentry"];
	const ddstring& key = get_cgi()["sn_key"];	
	ddwebview& table = get_view( "sxpagefaqs.dossiers" );

	// keine Anfrage? dann werden die 20 frischesten 
	// Tipps angezeigt.
	ddstring query = "on_search_faqs";
	if( key.empty() )	
		query = "on_list_faqs";
	
	// anfrage retten
	item["sn_key"].from_string( key );
	// FIX! keys hübschen!
	table.fill( query, key );
	table.on_render( *this, result );
	get_buffer().append( item.to_string() );	
	return rs_ok;
		
}


*/


/**
	Editor für die Teaserboxen
*/

dd_result sxpagefaqs::on_faqs_admin_teaser_box( dditem& item )
{
	
	ddwebview& table = get_view();
	ddwebcgi& cgi = get_cgi();
	
	cgi.dump();
	
	// vor dem anzeigen speichern oder löschen
	if( !cgi["sx_sub_action"].empty() && !cgi["id"].empty() && !cgi["sn_datepublish"].empty() )
			table.execute( cgi["sx_sub_action"], cgi );		
	
	table.fill( "on_admin_teaser_box" );
	table.on_render( *this, get_body()["sn_list"]["sn_msgentry"] );
	
		// alles schön machen
	dditem& form = get_body()["sn_form"];
	form.clear_children();	
	
	// dossier in den editor laden, falls gewünscht
	const ddstring&id = cgi["id"];
	int idx = -1;
	
	if( !id.empty() )
		idx = table.index_of( "id", id );
	if( idx > -1 )
		table.on_render_entry( *this, form, idx, true );
	
	
	
	// die suchbox auch behandeln
	
	dditem& list = get_body()["sn_search_faqs"];
	const ddstring& key = get_cgi()["sn_key"];	
	ddwebview& searchtable = get_view( "sxpagefaqs.dossiers" );

	// keine Anfrage? dann werden die 20 frischesten 
	// Tipps angezeigt.
	ddstring query = "on_search_faqs";
	if( key.empty() )	
		query = "on_list_faqs";
	
	// anfrage retten
	list["sn_key"].from_string( key );
	// FIX! keys hübschen!
	searchtable.fill( query, key );
	searchtable.on_render( *this, list["sn_msgentry"] );
	
	
	return rs_ok;	
	
		
}
	
dd_result sxpagefaqs::on_faqs_admin_categories( dditem& item )
{
		
	ddwebview& table = get_view();
	dditem& block = get_body()["sn_subbody"];
	ddwebcgi& cgi = get_cgi();
	
	// vor dem anzeigen speichern oder löschen
	if( !cgi["sx_sub_action"].empty() )
		table.execute( cgi["sx_sub_action"], cgi );
	
	table.fill( "on_admin_categories" );
	table.on_render( *this, block["sn_msgentry"] );
	
	// alles schön machen
	block["sn_form"].clear_children();	
	// kategorie in den editor laden, falls gewünscht
	const ddstring&id = cgi["id"];
	int idx = -1;
	
	
	if( !id.empty() )
		idx = table.index_of( "id", id );
	if( idx > -1 )
		table.on_render_entry( *this, block["sn_form"], idx, true );
	
	return rs_ok;
	
}



/**
	Der Dossier-Editor
*/

dd_result sxpagefaqs::on_faqs_admin_dossiers( dditem& item )
{


	ddwebview& table = get_view( "sxpagefaqs.dossiers" );
	ddwebcgi& cgi = get_cgi();
	
	cgi.dump();
	
	// vor dem anzeigen speichern oder löschen
	if( !cgi["sx_sub_action"].empty() && !cgi["sn_msgsubject"].empty() )
		table.execute( cgi["sx_sub_action"], cgi );
	
	table.fill( "on_admin_dossiers" );
	table.on_render( *this, get_body()["sn_list"]["sn_msgentry"] );
	
	// alles schön machen
	
	dditem& form = get_body()["sn_form"];
	dditem& dossier = get_body()["sn_msgentry"];
	form.clear_children();	
	dossier.set_visible( false );	
	
	// dossier in den editor laden, falls gewünscht.
	// wenn gerade ein neues dossier angelegt wurde,
	// dieses auch holen
	//const ddstring& id = cgi["id"];
	const ddstring& id = context.id;
	int idx = -1;	
	if( !id.empty() )
	{
		idx = table.index_of( "id", id );
	}
	else if( !cgi["sn_msgsubject"].empty() )
	{
		table.fill( "on_admin_dossiers" );
		idx = table.index_of( "id", table.get_last_insert_id() );
	}
	
	
	if( idx > -1 )
	{
		// aktionen mit dossiers vor der Anzeige ausführen
		if( !cgi["sx_entry_action"].empty() )
		{
			ddwebdossier& dossier = _dossiermap.get_dossier( id );
			dossier.action_at_key( cgi["id_entry"], cgi["sn_msgsubject"], cgi["sx_entry_action"] );	
			// und ggf. gleich speichern
			if( dossier.is_modified() )
				table.execute( "on_admin_dossiers_update", dossier.get_entries(), id );
		}
		
		table.on_render_entry( *this, form, idx, true );
		// Wild: Die Inhalte des dossiers werden von der 
		// dossiermap gerendert.
		_dossiermap.render_dossier_editor( id, dossier );	

	}
	
	
	// die suchbox auch behandeln
	
	dditem& list = get_body()["sn_search_faqs"];
	const ddstring& key = get_cgi()["sn_key"];	
	ddwebview& searchtable = get_view( "sxpagefaqs.dossiers" );

	// keine Anfrage? dann werden die 20 frischesten 
	// Tipps angezeigt.
	ddstring query = "on_search_faqs";
	if( key.empty() )	
		query = "on_list_faqs";
	
	// anfrage retten
	list["sn_key"].from_string( key );
	// FIX! keys hübschen!
	searchtable.fill( query, key );
	searchtable.on_render( *this, list["sn_msgentry"] );
	
	
	return rs_ok;	


	
}
	

/**
	Redirect alten contents
*/

dd_result sxpagefaqs::on_redirect( dditem& item )
{
	if( get_split_path()[0].rfind( "list" ) != ddstring::npos )
		return create_redirect( "/linknotfound?sn_key=" + get_full_path().dup().escape(), ret_301_moved_permanently );
	
	if( get_split_path()[0].rfind( "comthread" ) != ddstring::npos )
		return create_redirect( "/faqscomthread/" + context.id, ret_301_moved_permanently );				
	
	if( get_split_path()[0].rfind( "thread" ) != ddstring::npos )
		return create_redirect( "/faqsthread/" + context.id, ret_301_moved_permanently );				
	
	return create_redirect( "/faqs", ret_301_moved_permanently );
	
}


/**
	Eigentlich Übersichtsdarstellung basteln, aber hier wird erstmal 
	nur eine statische Seite angezeigt, daher die überladene Version.
*/

dd_result sxpagefaqs::on_overview( dditem& item )
{
	return rs_ok;
}


/**
	Eine Tipp-Kategorie auflisten,entspricht von der Optik den alten
	Faq-Gruppen, allerdings können auch die Toplevel-Kategorien
	navigiert werden ( Betriebssysteme, ... )
*/

dd_result sxpagefaqs::on_show_category( dditem& item )
{

 	// pfad-key basteln
	ddstring catpath = "/";
	for( size_t i = 1; i < get_split_path().size(); ++i )
	{
		if( get_split_path()[i].is_number() )
			break;
		catpath += get_split_path()[i] + "/";
	}
	
	ddwebcategorymap& categorymap = get_site().get_category_map();	
	if( !categorymap.contains_key( catpath ) )
		return create_error( "Kategorie nicht gefunden: " +  catpath, ddwebresponse::ret_404_not_found );
	
	ddwebcategory& category = categorymap.get_entry( catpath );
	
	
	// header krempel anzeigen	
	/*
	ddwebgroup<ddwebgroupmgr>& group = get_groups()[ context.idgrp ];
	context.navilinkbase = "/" + context.pagetype + "groups/" + context.idgrp + "/";			
	// FIX! Automatisieren! Gruppen-Schrempel  
	context.pagetitle = "Supportnet - Gruppe " + group.get_name();
	get_item()["sn_meta"]["sn_meta_header"].from_string( group.get_description() );
	get_item()["sn_meta"]["sn_meta_keyword"].from_string( group.get_keys() );
	*/
	
	context.navilinkbase = "/tipps" + catpath;			
	
	// müll gruppe nicht anzeigen
	dditem& block = get_body()["sn_content"];
	block.clear_value();

	// tabellenausschnitt ermitteln...
	ddwebview& table = get_view();
	ddstring from   = ddstrutil::from_int( context.navifrom );
	ddstring xcount = ddstrutil::from_int( context.itemspp );
		
		
	ddstring siblings;
	category.collect_siblings( siblings );	
	
	// ...daten holen...	
	context.numrows = table.fill( "on_show_category", siblings, DDADMFILTER, from, xcount );	
	
	// ...testen...
	if( context.numrows <= 0 )
		return create_hint_box( block, DDHINTNOCATEGORYENTRY );	
	
	block["sn_cat1"].from_string( category.title );
	block["sn_cat2"].from_string( category.title );
	block["sn_cat3"].from_string( category.name );
	
	// ...alles fein...
	get_body().set_visible( true );
	// könnte vorher abgeschaltet worden sein
	get_body().set_visible( true );
	
	// ...anzeigen...
	table.on_render( *this, block["sn_msgentry"], 0, context.numrows );	
	
	// für die navigation innerhalb der cache-table
	context.numrows = 20;
	
	//table.execute( "on_count", category.id, DDADMFILTER ).read( context.numrows );	
	
	
 	// ...und gut
	return rs_ok;
	
}


/**
 	Einen Faqs-Thread anzeigen (Ohne das Antwortformular zu säubern).
*/

dd_result sxpagefaqs::on_show_entry( dditem& item )
{
	cout << "------- XXXXXXXXXXXXXX: sxpageFAQS::on_show_entry " << endl;

	// doppelten content vermeiden: wenn es diesen eintrag
	// auch als alias gibt, dann redirecten wir dorthin.
	bool isredirected = get_connection().get_request().is_internal_redirect();
	bool isalias = get_site().get_alias_map().is_alias( get_full_path() );
	
	// nicht umgebogen und ein alias existiert: dann dahin	
	if( !isredirected && isalias )
		return create_redirect( get_site().get_alias_map().get_alias( get_full_path() ), ret_301_moved_permanently );
	
	// erstmal haupeintrag holen & rendern...
	ddwebview& table = get_view( get_name()+".show" );
	
	//??
	dditem& msg = get_body()["sn_content"];
	msg.set_visible( true );
	
	context.numrows = table.fill( "on_show", context.id, DDADMFILTER );
	// exceptions vermeiden
	if( context.numrows <= 0 )
		return create_redirect( "/linknotfound?sn_key=" + get_full_path().dup().escape(), ret_301_moved_permanently );
	
	if( !context.pagetype.empty() && context.pagetype != table[0]["id_type"] )
		return create_error( "Falscher Artikeltyp: " + table[0]["id_type"], ddwebresponse::ret_404_not_found );
	
	// eventuell vg-wort tag sichern
	if( table.contains_field( "sn_msgvgwort" ) )
		_vgworttag = table[ 0 ]["sn_msgvgwort"];
	
	// ...Artikel anzeigen...
	table.on_render( *this, msg, 0, 1 );	

	/*
	// werbebanner für den autor einblenden
	item["sn_ad_main1"].clear_value();
	item["sn_sky"].clear_value();
	
	// user daten holen
	int idx = get_user_manager().index_of( table[0]["sn_nickname"].as_lower() );
  if( idx > -1 )
  {
		dduserid& uid = get_user_manager()[idx];
		if( !uid.get_google_channel1().empty() )
			item["sn_ad_main1"].from_string( uid.get_google_channel1() );
		if( !uid.get_google_channel2().empty() )
			item["sn_sky"].from_string( uid.get_google_channel2() );		
	}
	*/
	
	// thread geschlossen?
	//dditem& comform = get_body()["sn_comments"]["sn_comcreate"];	
	
	create_header_entries( table, item );
		
	// Fallunterscheidung:
	// Für Member wird ein Eintrag samt kommentaren angezeigt. 
	// Bei Gästen werden entweder der Eintrag _oder_ die Kommentare 
	// angezeigt.
		
	dditem& comments  = get_body()["sn_comments"];

	// formular säubern
	dduserid& uid = get_user_id();	
	comments.set_visible( uid.is_member() );	
	if( !uid.is_member() )
		return rs_ok;

	dditem& comblock = comments["sn_content"];
	
	if( context.numrows <= 1 )
	{
		// block ausblenden
		comblock.set_visible( false );
		return rs_ok;
	}
	
	// block wieder einblenden
	comblock.set_visible( true );
	// ...anzeigen...
	table.on_render( *this, comblock["sn_msgentry"], context.navifrom+1, context.navito+1 );	
	
	return rs_ok;
	(void) item;

}


/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


/**
	Constructor.
*/

sxpagefaqsgames::sxpagefaqsgames( const ddstring& name, ddwebsite* site, const ddstring& title ) 
: sxpagefaqs( name, site, title )
{	
	
	// wie pagefaqs, aber mit redirects der alten sachen
	add_request_handler( "solutions",						"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect );
	add_request_handler( "solutionslist",				"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect );
	add_request_handler( "solutionsthread",			"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "solutionscomthread",	"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	
	add_request_handler( "cheats",							"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect );
	add_request_handler( "cheatslist",					"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect );	
	add_request_handler( "cheatsthread",				"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "cheatscomthread",			"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	
	/*
	add_request_handler( "news",							"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "newsthread"				,	"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "newscomthread",			"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	*/

} 



/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


/**
	Constructor.
*/

sxpagefaqskochen::sxpagefaqskochen( const ddstring& name, ddwebsite* site, const ddstring& title ) 
: sxpagefaqs( name, site, title )
{		
	// wie pagefaqs, aber mit redirects der alten sachen
	add_request_handler( "recipes",						"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect );
	add_request_handler( "recipeslist",				"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect );	
	add_request_handler( "recipesthread",			"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "recipescomthread",	"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );

	add_request_handler( "news",							"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "newsthread"				,	"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );
	add_request_handler( "newscomthread",			"xx_faqs_overview", 	(ddmemptr) &sxpagefaqs::on_redirect, 2 );

} 


/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


/**
	Constructor.
*/
/*
sxpagesolutions::sxpagesolutions( const ddstring& name, ddwebsite* site, const ddstring& title ) 
: sxpage( name, site, "solutions", title )
{	

	init_requests();	

} 
*/


/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/


/**
	Constructor.
*/
/*
sxpagerecipes::sxpagerecipes( const ddstring& name, ddwebsite* site, const ddstring& title ) 
: sxpage( name, site, "recipes", title )
{	
	
	init_requests();
	
} 
*/


/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

***************************************************************************/

/**
	Constructor.
*/
/*
sxpagecheats::sxpagecheats( const ddstring& name, ddwebsite* site, const ddstring& title ) 
: sxpage( name, site, "cheats", title )
{	
	
	init_requests();
	//context.breadcrumpstatic = "<a href='/cheats' class='box_title_bc'>Cheats</a>";
	
} 
*/








