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

    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 <sxpageasp.h>
#include <dditemset.h>
#include <dditemlink.h>

#include <ddwebconnection.h>

/**
	Such- und Ersetzungsworte aus einer Datei laden.
*/

void  sxpageasphelper::load_file( const ddstring& filename )
{
	ddstring source;
	source.from_file( filename );
	source.replace_all( "\r","" );
	ddstringrow row( source, "\n" );
	for( size_t i=0; i < row.size(); ++i )
	{
		if( !row[i].empty() )
		{
			ddstring key, value;
			row[i].split( "|", key, value );
			if( !key.empty() && !value.empty() )
				(*this)[ key ] = value;
 		}
	}
}

void sxpageasphelper::replace_all( ddstring& body )
{
	ddstringmap::const_iterator pos = begin();
	// über jeden eintrag
	for( ; pos != end(); ++pos )
	 	body.replace_all( (*pos).first, (*pos).second );
}


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

    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.
*/

sxpageasp::sxpageasp( const ddstring& name, ddwebsite* site )
//: ddwebpage( name, site )
: sxpage( name, site )
{

	_banner1 = get_site().get_translation( "ad1" );
	_banner2 = get_site().get_translation( "ad2" );
	_banner3 = get_site().get_translation( "ad3" );	

	_banner4 = get_site().get_translation( "ad4" );
	_banner5 = get_site().get_translation( "ad5" );
	_banner6 = get_site().get_translation( "ad6" );	
	_banner7 = get_site().get_translation( "ad7" );
	_banner8 = get_site().get_translation( "ad8" );
	_banner9 = get_site().get_translation( "ad9" );	
	_banner10 = get_site().get_translation( "ad10" );	
	_banner11 = get_site().get_translation( "ad11" );	

	
	_replacer.load_file( "replace.cfg" );
		
	// neu:
	// discussion/messages.asp?adminrecno=40 -> zu den jeweiligen Gruppenübersichten der dynamischen Seiten
	// discussion/listmessages.asp?autoid=160904 -> zu den jeweiligen dynamischen (oder den neuen öffentlichen dynamischen) Artikeln 
	
	add_request_handler( "discussion;newstat;_database;fresh;scripts;stat", "sn_main_asp" );
	

}


void sxpageasp::replace_links( ddstring& body )
{
	ddstring oldstr = "target=_new>";
	ddstring newstr = "target=_new rel='nofollow'>";
 	
 	int pos, index = 0, offset = newstr.length() - oldstr.length();
 	while( ( pos =  body.find( oldstr,index ) ) >= 0 )
 	{
 		
 		// den anfang des links finden
 		size_t beg = body.rfind( "<a href=", pos );
 		if( beg != ddstring::npos )
 		{
 			// <a href="http://
 			ddstring link = body.substr( beg, pos-beg );
 			// nur ersetzen, wenns ein externer link ist
 			if( !link.contains( "supportnet" ) && link[9] != '/' ) 			
 				body.replace( pos, oldstr.length(), newstr );
 		}

 		index = pos + offset;
 	}

}


/**
	Subject (in h2 tags) rausschneiden, hinter werbung_stat einfügen, dahinter noch ein neues tag
*/

void sxpageasp::prepare_adblock_fresh( ddstring& body )
{
	
	// das hier sind hacks, um die statischen per search & replace zu optimieren:
	// des subject samt h2 tag wird ausgeschnitten und hinter werbung nach dem nächsten
	// </table> tag platziert, dahinter wird werbung1_tag eingefügt.
	
	size_t p1, p2, p3, p4;
	
	
	
	// pfusch: 2. werbetag auch bei den übersichten einsetzten
	if( get_full_path().contains( "default" ) )
	{
		// insert place finden
		p1 = body.find( "<TABLE cellSpacing=\"0" );
		if( p1 != ddstring::npos )
			body.insert( p1, "<!--werbung_def_tag-->" );							
	}
	else // endfile
	{
		
		p1 = body.find( "<H2>" );
		if( p1 != ddstring::npos )
		{
			p2 = body.find( "</H2>", p1 );
			if( p2 != ddstring::npos)
			{
				ddstring subject = body.substr( p1, p2-p1+5 );		
				// subject löschen ...
				body.erase( p1, p2-p1+5 );
				// ... und verschieben
				//body.replace_all( "<!--werbung_tag-->", "<!--werbung_tag-->" + subject + "<!--werbung1_tag-->" );
				// hack: subject hinter das nächste table tag schieben
				p3 = body.find( "<!--werbung_tag-->" );
				if( p3 != ddstring::npos )
				{
					p4 = body.find( "</TABLE>", p3 );
					if( p4 != ddstring::npos )
						body.insert( p4+8, subject + "<!--werbung1_tag-->" );					
				}
			}
		}
	}
}

	

/**
	Subject (in h2 tags) rausschneiden, hinter werbung_stat einfügen, dahinter noch ein neues tag
*/

void sxpageasp::prepare_adblock_stat( ddstring& body )
{
	
	// hier scheint das ganze wesentlich einfacher zu sein:
	// das neue tag wird einfach hinter das subject geschrieben.
	
	size_t p1;
	
		// pfusch: 2. werbetag auch bei den übersichten einsetzten
	if( get_full_path().contains( "id" ) )
	{
		// insert place finden
			p1 = body.find( "<TABLE cellSpacing=\"0" );
		if( p1 != ddstring::npos )
			body.insert( p1, "<!--werbung_def_tag-->" );							

	}
	else
	{
		p1 = body.find( "</h2>" );
		if( p1 != ddstring::npos )
			body.insert( p1+5, "<!--werbung1_tag-->" );	
	}

}


/**
	Create the headline news entry.
*/

dd_result sxpageasp::create_content( dditem& item )
{ 
	item.clear_value();
	
	const ddstring& req = get_split_path()[0];
	
	// pfusch hack
	//if( req == "archive" )
	//	return create_archive( item );
		
	if( req == "discussion" )
	{
		ddstring newpath;
		ddwebcgi& cgi = get_cgi();
		ddstring& autoid = cgi["AutoID"];
		if( autoid.empty() )
			autoid = cgi["autoid"];
		if( !autoid.empty() )
		{
			ddstring newid;
			get_site().get_view( "site.redirect" ).execute( "getid", autoid ).read( newid );
				newpath = "/listthread/" + newid;
			return create_redirect( newpath, ret_301_moved_permanently );
			//request.parse_path( newpath );
			
		}
		ddstring grp = cgi["adminrecno"];
		if( grp.empty() )
			grp = "3";
		newpath = "/groups/" + grp;
		return create_redirect( newpath, ret_301_moved_permanently );
		//request.parse_path( newpath );				
	}
	else if( req == "fresh" || req == "newstat" )
	{
		// datei laden
		ddwebrequest&  request  = get_connection().get_request();		
		ddstring body;
		body.from_file( request.get_local_url().get_full_path() );		
		
		// links ändern ...
		replace_links( body );
		
		// ... subject verschieben ...
		prepare_adblock_fresh( body );
		
		// .. und die statischen ersetzugnen vornehmen
		_replacer.replace_all( body );
		
		// die banner ...
		body.replace_all( "<!--werbung_tag-->", 	_banner1 );
		body.replace_all( "<!--sky_tag-->",  			_banner2 );
		body.replace_all( "<!--copyright_tag-->", _banner3 );
		
		body.replace_all( "<!--werbung1_tag-->", 	_banner4 );
		body.replace_all( "<!--werbung2_tag-->", 	_banner5 );
		body.replace_all( "<!--werbung3_tag-->", 	_banner6 );
		body.replace_all( "<!--werbung4_tag-->", 	_banner7 );
		body.replace_all( "<!--werbung5_tag-->", 	_banner8 );
		body.replace_all( "<!--werbung6_tag-->", 	_banner9 );
		body.replace_all( "<!--werbung7_tag-->", 	_banner10);
		body.replace_all( "<!--werbung_def_tag-->", 	_banner11 );
		
		get_item().from_string( body );
		return rs_ok;
	}
	else if( req == "scripts" )
	{
		if( get_split_path().size()>1 && get_split_path()[1] == "volltext1.asp" )
			return create_redirect( "/quicksearch?sn_key=" + get_cgi()["eingabe"] );			
	}
	else if( req == "stat" || req == "_database" )
	{								
		ddwebrequest&  request  = get_connection().get_request();		
		ddstring body;
		body.from_file( request.get_local_url().get_full_path() );
		
		// links ändern ...
		replace_links( body );
				
		// ... subject verschieben ...
		prepare_adblock_stat( body );

		// die "stats" können nunmehr auch aus den neuen
		// templates generiert worden sein.
				
		/*
		siehe unten
		if( body.contains( "<!--werbung_tag-->" ) )
		{
			// die banner ...
			body.replace_all( "<!--werbung_tag-->", _banner1 );
			body.replace_all( "<!--sky_tag-->",  _banner2 );
			body.replace_all( "<!--copyright_tag-->", _banner3 );	
			//get_item().from_string( body );
			//return rs_ok;	
		}
		*/
		
		// die banner ...
		body.replace_all( "<!--#include virtual=\"contentad_statisch.asp\"-->", _banner1 );
		body.replace_all( "<!--#include file=\"../../../sky.asp\"-->",  _banner2 );
		body.replace_all( "<!--#include file=\"../../../copyright.asp\"-->", _banner3 );
		
		// .. und die statischen ersetzugnen vornehmen
		_replacer.replace_all( body );
		
		// die banner ...
		body.replace_all( "<!--werbung_tag-->", 	_banner1 );
		body.replace_all( "<!--sky_tag-->",  			_banner2 );
		body.replace_all( "<!--copyright_tag-->", _banner3 );
		
		body.replace_all( "<!--werbung1_tag-->", 	_banner4 );
		body.replace_all( "<!--werbung2_tag-->", 	_banner5 );
		body.replace_all( "<!--werbung3_tag-->", 	_banner6 );
		body.replace_all( "<!--werbung4_tag-->", 	_banner7 );
		body.replace_all( "<!--werbung5_tag-->", 	_banner8 );
		body.replace_all( "<!--werbung6_tag-->", 	_banner9 );
		body.replace_all( "<!--werbung7_tag-->", 	_banner10);
		body.replace_all( "<!--werbung_def_tag-->", 	_banner11 );
		
		// temp hack, FIX ME!
		body.replace_all( "http://www.supportnet.de/", "/" );
		body.replace_all( "/discussion/discussion.asp", "/home" );
				
		// hässlich		
		body.replace_all( "<%=BackAll%>", "white" );
		body.replace_all( "<%=BackCell%>", "white" );		
	
		get_item().from_string( body );
		return rs_ok;
	}
	return create_redirect( "/" );
	
}


