#!/usr/local/bin/python
## ===========================================================================
##  (C) Harald Scheirich 1995
## ===========================================================================
##  NAME:       manager
##  TYPE:       python script
##  PROJECT:    private
##  CONTENT:    Manager script for happenings
##  VERSION:    0.9
## ===========================================================================
##  AUTHORS:    hs      Harald Scheirich
## ===========================================================================
##  HISTORY:
##
##  23-mar-95 15:18:51  hs      last modification
##  23-mar-95 15:18:51  hs      changed edit and delete post to followup
##  17-mar-95 15:59:02  hs      fixed newsposting, fixed ? intermittent bug
##                              added new form for reposting news !
##  17-dec-94 16:43:47  hs      created
## ===========================================================================
print 'Content-type: text/html\n'
print '<HTML>'

import sys
#sys.stderr = sys.stdout
sys.path.append('/home/private/scheich/public_html/happenings/')
filename = ('/home/private/scheich/public_html/happenings/happenings.txt')
from os import environ
import cgi
import event
import mynntplib
import Mail
from string import strip
import string

Hrefs={'Homepage':'<A HREF=/>Home</A>',
       'AndereInfos':'<A HREF=/otherinfos.html>Andere Infos</A>',
       'Veranst' :'<A HREF=/happenings/happenings.html>Veranstaltungskalender</A>',
       'manager' :'<A HREF=/happenings/manager.py>Editieren/L&ouml;schen</A>',
       'editieren':'<A HREF=/happenings/manager.py?function=try&dowhat=new>Editieren</A>'
      }
       

# The signature !
sig= ['\n', 
      '----------','Automatisch erzeugter Text des Veranstaltungskalenders',
      'URL: http://www.cg.tuwien.ac.at/happenings/',
      '----------']

try:
    form = cgi.FormContent()
    keys = form.keys
except KeyError:
    form = None
    keys = []

# Opening the file 
eventList=event.EventList()
eventList.open(filename)

def printTop(xxx) :
#
# print the Header
#
    print '\n<HEAD>\n<TITLE>'+xxx+'</TITLE>\n</HEAD>\n<BODY>' 

def printHidden(name, value) :
# print Hidden information
    print '<INPUT TYPE="hidden" NAME="'+name+'" VALUE="'+value+'">'

def printBottom(list) :
# Print Footer Information
    print '<HR>'
    print Hrefs[list[0]]
    for i in list[1:] :
    	print ' - '+Hrefs[i]
    print """
    <HR>
    <A HREF=/~scheich>Harald Scheirich</A>,  email:
    <A HREF=mailto:scheirich@cg.tuwien.ac.at>scheirich@cg.tuwien.ac.at</A><P>
    </BODY>
    </HTML>
    """
        
def printEditForm(myEvent) :
#
# Print form for editing of event
#
    printTop('Editieren einer Veranstaltung')
    print """
    <H1>Editieren einer Veranstaltung</H1>
    &Auml;nderungen einfach hier eintragen und danach das ganze wieder abschicken.<BR>
    <STRONG>Achtung.</STRONG> Bitte keine Umlaute verwenden auch wenn sie 
    sch&ouml;n aussehen!
    <HR><IMG SRC=/happenings/gifs/questionS.gif ALT=(?)>
    <A HREF=help/edit.html>Hilfe</A> <IMG SRC=gifs/questionS.gif ALT=(?)>
    f&uuml;r das Editieren.<HR>	
    <FORM ACTION="manager.py" METHOD="POST">
    """
    printHidden('function', 'confirm')
    printHidden('dowhat', 'edit')
    printHidden('oldeventID', myEvent.getString('eventID'))
    printHidden('oldNNTPGroups', myEvent.getString('NNTPGroups'))
    myEvent.printEditHTML()
    print """
    <INPUT TYPE="submit" VALUE=" Ich bin fertig! " >
    <INPUT TYPE="reset" VALUE=" Formular l&ouml;schen " >
    </FORM>
    """
    printBottom(['editieren','Veranst'])
        
def printConfirmDeleteForm(myEvent) :
#
# Confirm the deletion of an event
#
    printTop('Veranstaltung Loeschen')
    myEvent.printHTML()
    if myEvent.getValue('NNTP') :
	print """
	Du hast diese Veranstaltung in verschiedenen Newsgroups gepostet
	Gib <strong>bitte</strong> ein Begr&uuml;ndung an, warum du sie
	l&ouml;schen willst.<BR>
	<TEXTAREA ROWS=2 COLS=40 NAME="reason"></TEXTAREA><BR>
	(Diese Begr&uuml;dung wird an die betroffenen Newsgroups gepostet)<BR>
	"""
  
    print '<HR>Dies ist die entsprechende Veranstaltung,  ich will Sie jetzt :<P>'
    print '\n<FORM ACTION="manager.py" METHOD="POST">'
    printHidden('function', 'cancel')
    printHidden('dowhat', 'delete')
    printHidden('eventID', myEvent.getString('eventID'))
    print '<INPUT TYPE="submit" VALUE=" Nicht L&ouml;schen!  "></FORM>'
    print '\n<FORM ACTION="manager.py" METHOD="POST">'
    print 'Begr&uuml;dung: '
    print '<TEXTAREA ROWS=2 COLS=40 NAME="reason"></TEXTAREA><BR>'
    printHidden('function', 'confirm')
    printHidden('dowhat', 'delete')
    printHidden('eventID', myEvent.getString('eventID'))
    print """
    <INPUT TYPE="submit" VALUE="  L&ouml;schen!  ">
    </FORM>
    <HR><IMG SRC=/happenings/gifs/questionS.gif ALT=(?)>
    <A HREF=help/edit.html>Hilfe</A> <IMG SRC=gifs/questionS.gif ALT=(?)>
    f&uuml;r das L&oumlschen.	
    """
    printBottom(['editieren','Veranst'])

def printNewEventForm(event) :
#
# print form that does the editing
#
    printTop('Neue Veranstaltungen')
    print """
    <H1>Neue Veranstaltungen</H1>
    <HR><IMG SRC=/happenings/gifs/questionS.gif ALT=(?)>
    <A HREF=help/eingeben.html>Hilfe</A> <IMG SRC=gifs/questionS.gif ALT=(?)>
    f&uuml;r das Eingeben.<HR>
    <STRONG>Achtung.</STRONG>Bitte keine Umlaute verwenden auch wenn sie 
    sch&ouml;n aussehen!<P>
    <FORM ACTION="manager.py" METHOD="POST">
    <INPUT TYPE="hidden" NAME="function" VALUE="confirm">
    <INPUT TYPE="hidden" NAME="dowhat" VALUE="new">
    """
    myEvent.printEditHTML()
    print """
    <INPUT TYPE="submit" VALUE=" Ich bin fertig! " >
    <INPUT TYPE="reset" VALUE=" Form l&ouml;schen " >
    </FORM>
    </BODY>
    """
    printBottom(['Veranst'])


def printRepostForm(myEvent) :
    printTop('Erneutes Posten')
    print"""
    <H1>Erneutes Posten</H1>
    Falls das Posten Deiner Veranstaltung nicht geklappt hat oder Du Deine
    Veranstaltung in anderen Gruppen posten willst, kannst Du das hier tun.<P>
    """
 
    if myEvent.getValue('NNTP')=='on' :
   	groups=myEvent.getValue('NNTPGroups')
	groupstr=""
	for i in groups :
	    groupstr = ' , '+i
	print 'Du hast schon in '+groupstr[2:]+' gepostet.<P>'
	print """
	<H3>Repost</H3>
	<FORM ACTION=manager.py METHOD=post>
	<INPUT TYPE=hidden NAME=function VALUE=confirm>
	<INPUT TYPE=hidden NAME=dowhat VALUE=repost>
	"""
	printHidden('eventID', myEvent.getValue('eventID'))
	print """
	<INPUT TYPE=submit VALUE="Neuerliches Posten">
	</FORM>
	<HR>
	<H3>Zus&auml;ztliche Newsgroups</H3>
	"""
	print 'Gib hier alle'
	print 'Groups an in denen <EM>zus&auml;tzlich</EM> noch gepostet soll<P>'
    else :
	print """
	<H3>Neue Groups</H3>
	Du hast noch nicht in einer Newsgroup gepostet, in welche Groups willst
	du eine Nachricht &uuml;ber Deine Veranstaltung posten.<P>
	"""
    print '<FORM ACTION=manager.py METHOD=POST>'
    printHidden('function', 'confirm')
    printHidden('dowhat', 'addpost')
    printHidden('evenID', myEvent.getValue('eventID'))
    print """
    <INPUT TYPE=text SIZE=40 NAME=NNTPGroups><P>
    <EM>Achtung.</EM>Nicht vergessen, mehrere Groups durch Beistriche trennen !<P>
    <INPUT TYPE=submit VALUE="Dort Posten !">
    </FORM>
    """
    printBottom(['manager', 'Veranst'])
    
           
    
def postDeleteMessage(myEvent, reason=[]) :
#
# The User has deleted an event, we want to tell it to the newsgroups
#
    body = ['Die Veranstaltung "'+myEvent.getValue('title')+'" wurde geloescht']
    body.append('Die wichtigsten Daten:')
    body.append(myEvent.headline())
    body.append('')
    if reason :
	body.append('Die Begruendung dafuer lautet :')
	body=body+reason
    else :
	body.append('Es wurde keine Begruendung angegeben')
    
    body = body+sig
    myEvent.followup(body)
    
def postEditMessage(event) :
#
# The User has changed an event, we want to tell it to the newsgroups
#
    body = ['Die Veranstaltung "'+myEvent.getValue('title')+'" wurde geaendert']
    body.append('Die wichtigsten Daten:')
    body.append(event.headline())
    body.append('')
    
    body = body+sig
    myEvent.followup(body)
    del post

    
    
if not form :
# Nothing has happened yet !

    print """
    <HEAD>
    <TITLE>Veranstaltungen Editieren</TITLE>
    </HEAD>
    <BODY>
    <H1>Editieren von Veranstaltungen</H1>
    F&uuml;r das Editieren einer Veranstaltung brauchst Du die Nummer
    die Du nach den Eingeben erhalten hast. Ohne diese Nummer l&auml;&szlig;t sich
    nichts mehr &auml;ndern.<P>
    
    <FORM ACTION="manager.py" METHOD="POST">
    <INPUT TYPE="hidden" NAME="function" VALUE="try">
    Veranstaltungsnummer: <INPUT TYPE="text" NAME="eventID" SIZE=10><P>
    <INPUT TYPE="radio" NAME="dowhat" VALUE="delete"> L&ouml;schen
    <INPUT TYPE="radio" NAME="dowhat" VALUE="edit" CHECKED> Editieren
    <INPUT TYPE="radio" NAME="dowhat" VALUE="new"> Einen Neuen Event.
    <INPUT TYPE="radio" NAME="dowhat" VALUE="post"> Nochmals posten.<P>
    <INPUT TYPE="submit" VALUE=" Ich will's versuchen ">
    </FORM>
    W&auml;hle einen der Buttons aus und versuchs', oder sieh Dir die
    <IMG SRC=gifs/questionS.gif ALT=(?)> <A HREF=help/edit.html>Hilfe</A> 
    <IMG SRC=gifs/questionS.gif ALT=(?)> an.
    """
    printBottom(['Veranst'])
    #<INPUT TYPE="reset" VALUE=" Ein neues Form bitte ">
    
#------------------------- We want to try something
else:
#
# That is the 'TRY' branch (print the forms for the different functions
#
    if form['function'][0] == 'try' :
	what = form['dowhat'][0]
	if what == 'new' :
	    myEvent = event.Event()
	    printNewEventForm(myEvent)
	    
	else :
	    # first find if this happening really exists
	    myEvent=eventList.fileFind(strip(form['eventID'][0]))
	    if myEvent :
		what = form['dowhat'][0]
		# Found it,  print the right form !
		if what == 'delete' :
		    printConfirmDeleteForm(myEvent)
		elif what == 'edit' :
		    printEditForm(myEvent)
		elif what == 'post' :
		    printRepostForm(myEvent)
	    else :
		# We didn't find it, return to start
		printTop('Leider nichts gefunden')
		print"""
		Diese Veranstaltung gibt es leider nicht Du wirst wahrscheinlich
		<A HREF="manager.py">zur&uuml;ck</A> gehen m&uuml;ssen<P>
		"""
		printBottom(['editieren','Veranst'])
		
    elif form['function'][0] == 'confirm' :
	what = form['dowhat'][0]
	## Delete an Event
	if what == 'delete' :
	    myEvent = eventList.fileFind(strip(form['eventID'][0]))
	    result = eventList.fileDelete(strip(form['eventID'][0]))
	    if myEvent.getValue('NNTP') == 'on' :
		if form.has_key('reason') :
		    reason = form['reason']
		else :
		    reason = ''        		
	    	postDeleteMessage(myEvent, reason)

	    if result == 1 :
		printTop('Gelungen')
		print"""
		Das L&ouml;schen ist gelungen
		"""
	    else :
		printTop('Fehlschlag')
		print"""
		Deine Veranstaltung konnte nicht gel&ouml;scht werden.<P>
		"""
		print 'ID: '+form['eventID'][0]
	    printBottom(['editieren','Veranst'])
	
	## Enter a New Event 
	elif what == 'new' :
	    print 'Event from FORM'
	    myEvent=event.eventFromForm(form)
	    if myEvent :
		printTop('Veranstaltung verarbeitet')
		print 'Die Veranstaltung wurde verarbeitet und abgespeichert'
		print 'Die ID ist :'
		print '<H2>'+myEvent.getValue('eventID')+'</H2>'
		print 'Du brauchst die ID um Deine Veranstaltung sp&auml;ter'
		print 'editieren oder l&ouml;schen zu k&ouml;nnen'
		print '<HR>'
		title = myEvent.getValue('title')
		if title[0:3]<> '!@#' :
		    eventList.fileAppend(myEvent)
		else :
		    print '<H1> NO SAVE MODE</H1>'
		Mail.Mail('scheirich@cg.tuwien.ac.at',myEvent.stringASCII()+sig,myEvent.getValue('title'))
		
		myEvent.printHTML()
		
		if myEvent.getValue('NNTP') :
		    server = environ['REMOTE_HOST']
		    if server[-2:] == 'at'or server=='localhost':
			result = myEvent.post(sig)
		    else :
			print '<HR>Dein Server ist nicht in &Ouml;sterreich deshalb kann ich es nicht'
			print ' erlauben,  da&szlig; Du auf at.veranstaltung Meldungen schickst.<BR>' 
		    	print 'Der Servername der &uuml;bermittelt wurde lautet: '+server+'<P>'
		    if not result :
			print """
			<HR>
			Beim Posting hat etwas nicht funktioniert, aber sonst
			gab es kein Problem.
			"""
		    else :
			print """
			<HR>
			Posting hat anscheinend geklappt.
			"""
		else :
		    print """
		    <HR>
		    Kein Posting war gew&uuml;nscht.
		    """
	    else :
		printTop('Fehler beim Eintragen')
		print 'Irgendetwas hat nicht funktioniert bei der Verarbeitung'
	   
	    printBottom(['Veranst'])
	
	## Edit An old Event
	elif what == 'edit' :
	    myEvent=event.eventFromForm(form)
	    if myEvent :
		# Update Event List accordingly 
		eventList.fileDelete(form['oldeventID'][0])
		myEvent.set('eventID', form['oldeventID'][0])
		eventList.fileAppend(myEvent)
		
		printTop('Veranstaltung verarbeitet')
		print '<H1>&Auml;nderung durchgef&uuml;hrt</H1>'
		print 'Die Veranstaltung wurde verarbeitet und abgespeichert.'
		print 'Die ID ist die gleiche geblieben :'
		print '<H2>'+myEvent.getValue('eventID')+'</H2>'
		if myEvent.getValue('NNTP')=='on' :
	    	    postEditMessage(myEvent)
	    else :
		printTop('Fehler beim Eintragen')
		print 'Irgendetwas hat bei der Verarbeitung nicht funktioniert'
	    printBottom(['Veranst'])
	
	## Repost event in old newsgroups
	elif what=='repost' :
	    myEvent = eventList.fileFind(strip(form['eventID'][0]))
	    myEvent.post(sig)
	    printTop('Veranstaltung erneut gepostet')
	    print 'Deine Veranstaltung wurde noch einmal auf die Newsgroups gepostet.'
	    printBottom(['manager', 'Veranst'])
	
	## Add new newsgroups to evnt !
	elif what=='addpost' :
	    myEvent = eventList.fileFind(strip(form['eventID'][0]))
	    if myEvent.getValue('NNTP')=='on' and form.has_key('NNTPGroups') :
		result = eventList.fileDelete(strip(form['eventID'][0]))
		groups = string.split(form['NNTPGroups'][0])
		oldGroups = myEvent.getValue('NNTPGRoups')
		myEvent.set('NNTPGroups', groups)
		myEvent.set('NNTP', 'on')
		myEvent.post(sig)
		myEvent.set('NNTPGroups', groups+oldGroups)
		eventList.fileAppend(myEvent)
		printTop('Veranstaltung erneut gepostet')
		print 'Deine Veranstaltung wurde in die neuen Newsgroups gepostet.'
		printBottom(['manager', 'Veranst'])
	
	else :
	    print"""
	    <HTML>
	    <HEAD><TITLE>An Error</TITLE></HEAD>
	    <BODY>A Error has occured please contact 
	    <A HREF="mailto:scheirich@cg.tuwien.ac.at">scheirich@cg.tuwien.ac.at</A>
	    describing the circumstances of how you got here.
	    </BODY>
	    """
	    printBottom(['Veranst'])

    elif form['function'][0] == 'cancel' :
	# Send the user back to the original form
	printTop('Cancel')
	print '<H1>Nichts ist passiert</H1>'
	print 'Du kannst von hier aus zu auf die anderen Seiten zugreifen'
	printBottom(['editieren','Veranst'])
    else :
	print"""
	<HTML>
	<HEAD><TITLE>An Error</TITLE></HEAD>
	<BODY>A Error has occured please contact 
	<A HREF="mailto:scheirich@cg.tuwien.ac.at">scheirich@cg.tuwien.ac.at</A>
	describing the circumstances of how you got here.
	</BODY>
	"""
	
	
print '</HTML>'

