#! /usr/bin/python2.2 # a simple page editor for the pysocks system #------------------------------------------------------------------------ BASE_DIR = '/home/crypt/Work/pysocks/' TEMPLATE_DIR = BASE_DIR + 'Templates/' import cgi import access import os import constants from utils import * #------------------------------------------------------------------------ class Edit: def __init__(self, db, page_info=None, extra_info=None): print extra_info self.__action = extra_info['action'] self.__extra_info = extra_info if extra_info.has_key('page_id'): self.__page_id = extra_info['page_id'] self.__jump_table = {'show':self.show, 'list':self.list, 'create_and_edit':self.create_and_edit, 'edit':self.edit, 'new':self.new, 'save':self.save} def do(self): ' perform the right action for this page ' print self.__action print self.__jump_table.keys() if self.__action in self.__jump_table.keys(): return self.__jump_table[self.__action]() def show(self): header = 'this is the header' page_template = get_file_as_string(TEMPLATE_DIR+'default_template') page_side_bar = get_file_as_string(TEMPLATE_DIR+'default_sidebar') page_content = get_file_as_string(TEMPLATE_DIR+'edit_screen') footer = 'end of page' return page_template%(header, page_side_bar, page_content, footer) def new(self): '''\ create a new page entry in the db and then display a blank page for people to put stuff in''' # create a new entry in the db after checking that there isn't # already an item of that name existing. # # use some of the code from the table editor class # db stuff goes here. header = 'new page' page_template = get_file_as_string(TEMPLATE_DIR+'default_template') page_side_bar = get_file_as_string(TEMPLATE_DIR+'default_sidebar') page_content = get_file_as_string(TEMPLATE_DIR+'new_screen') footer = 'end of page' return page_template%(header, page_side_bar, page_content, footer) def create_and_edit(self): print 'create and edit method' def edit(self): print 'edit method' def save(self): print 'save method' # what tables do we need to update here. #self.__db.set('') def list(self): ' provide a list of pages that can be editied. ' list_template_line = '<a href='+\ '"./editor.cgi?page=edit&action=show&page_id=%(page_id)s">'+\ '%(description)s</a><br>' header = 'new page' page_template = get_file_as_string(TEMPLATE_DIR+'default_template') page_side_bar = get_file_as_string(TEMPLATE_DIR+'default_sidebar') # query the db to locate all top level pages and then build a table page_content = [] #pages = self.db.get_dict(....) # debug stuff pages = [ {'page_id':1, 'description':'first page'}, {'page_id':2, 'description':'second page'}] for i in pages: page_content.append(list_template_line%i) footer = 'end of page' return page_template%(header, page_side_bar, '\n'.join(page_content), footer) #------------------------------------------------------------------------ page_types = {'edit':Edit} def get_default_page(): header = 'this is the header' page_template = get_file_as_string(TEMPLATE_DIR+'default_template') page_side_bar = get_file_as_string(TEMPLATE_DIR+'default_sidebar') page_content = get_file_as_string(TEMPLATE_DIR+'default_content') footer = 'end of page' return page_template%(header, page_side_bar, page_content, footer) def get_extra_info(form): data = {} for i in form.keys(): data[i] = form[i].value return data def main(): print 'Content-type: text/html' print form = cgi.FieldStorage() #db = access.Access(dbname='pysocks' user='crypt') db = page_info = extra_info = None extra_info = get_extra_info(form) print extra_info if form.has_key('page'): if form['page'].value in page_types.keys(): page = page_types[form['page'].value](db, page_info, extra_info) ret = page.do() else: ret = get_default_page() print ret pass if __name__ == '__main__': main()