Annotation of ECHO_content/VLPExtension.py, revision 1.29

1.10      dwinter     1: from Products.ECHO_content.ECHO_collection import *
1.1       dwinter     2: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      3: from Products.PageTemplates.PageTemplate import PageTemplate
                      4: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
1.26      dwinter     5: from OFS.Image import File
1.13      dwinter     6: try:
                      7:    from Products.zogiLib import zogiLib
                      8: except:
                      9:    print "Zogilib not installed, VLP_resource will not work"
                     10: 
1.11      dwinter    11: import xml.dom.minidom
                     12: import urllib
1.20      dwinter    13: import xmlrpclib
1.26      dwinter    14: import vlp_xmlhelpers
                     15: from types import *
1.20      dwinter    16: 
                     17: 
                     18: 
                     19: def lemmatize(str):
                     20:    """takes a str and addes links the dictionary service"""
                     21:    server = xmlrpclib.ServerProxy("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc")
                     22:    if server:
                     23:        splitted=str.split(" ")
                     24:        wordlist=["<w>%s</w>"%split for split in splitted].join()
                     25:    return wordlist
                     26: 
                     27:        
                     28: 
                     29:        
1.14      dwinter    30: def makeXML(str):
1.26      dwinter    31:      
1.14      dwinter    32:        try:
                     33:            dom=xml.dom.minidom.parseString(str)
                     34:            return str
                     35:        except:
1.26      dwinter    36:            str=str.replace("& ","&amp; ")
                     37:            return """<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><page>
1.15      dwinter    38:                      %s
                     39:                  </page>"""%str
1.14      dwinter    40:        
1.26      dwinter    41:                 
1.20      dwinter    42:        
1.1       dwinter    43: def getText(nodelist):
                     44: 
                     45:     rc = ""
                     46:     for node in nodelist:
                     47:        if node.nodeType == node.TEXT_NODE:
                     48:            rc = rc + node.data
                     49:     return rc
                     50: 
1.29    ! dwinter    51: class sendMailForm(ZopePageTemplate):
        !            52:    """sendMailForm"""
        !            53:    meta_type="sendMailForm"
        !            54: 
        !            55:    _default_content_fn = os.path.join(package_home(globals()), 'vlp/sendMail_template.zpt')
        !            56: 
        !            57:    manage_options = ZopePageTemplate.manage_options+(
        !            58:         {'label':'Main Config','action':'main_configForm'},
        !            59:         )
        !            60: 
        !            61:    main_configForm = PageTemplateFile(
        !            62:     'vlp/changeSendMailForm', globals())
        !            63: 
        !            64:    def main_config(self, toAddrs,mailServer, subjectAdd=None, RESPONSE=None):
        !            65:        """main_config"""
        !            66:        self.toAddrs=toAddrs.split("\n")
        !            67:        self.mailServer=mailServer
        !            68:        self.subjectAdd=subjectAdd
        !            69:        if RESPONSE:
        !            70:            RESPONSE.redirect('manage_main')
        !            71: 
        !            72:    def sendForm(self,fromaddr,subject,content,nextPage="index_html",RESPONSE=None):
        !            73:        """sendform"""
        !            74:        fromaddr=fromaddr.strip("\r\n\t") # sicherstellen dass keine zusaetzlichen headerzeilen eingefuegt werden
        !            75:        subject=subject.strip("\r\n\t") # sicherstellen dass keine zusaetzlichen headerzeilen eingefuegt werden
        !            76:        toaddrs=self.toAddrs
        !            77: 
        !            78:        subject="%s %s"%(self.subjectAdd,subject)
        !            79:        
        !            80:        msg = ("From: %s\r\nSubject: %s\r\nTo: %s\r\n\r\n"
        !            81:               % (fromaddr, subject, ", ".join(toaddrs)))
        !            82:        server = smtplib.SMTP(self.mailServer)
        !            83:            #server.set_debuglevel(1)
        !            84:        msg=msg+content
        !            85:        server.sendmail(fromaddr, toaddrs, msg)
        !            86:        server.quit()
        !            87: 
        !            88:        if RESPONSE:
        !            89:            RESPONSE.redirect(nextPage)
        !            90: 
        !            91: manage_addSendMailFormForm = PageTemplateFile(
        !            92:     'vlp/addSendMailForm', globals(), __name__='manage_addSendMailFormFrom')
        !            93: 
        !            94: from urllib import quote
        !            95: 
        !            96: def manage_addSendMailForm(self, id, toAddrs,mailServer, title=None, text=None, subjectAdd=None,
        !            97:                            REQUEST=None, submit=None):
        !            98:     "Add a Page Template with optional file content."
        !            99:     toAddrsList=toAddrs.split("\n")
        !           100:     id = str(id)
        !           101:     if REQUEST is None:
        !           102:         self._setObject(id, sendMailForm(id, text))
        !           103:         ob = getattr(self, id)
        !           104:         if title:
        !           105:             ob.pt_setTitle(title)
        !           106:    setattr(ob,'toAddrs',toAddrsList)
        !           107:    setattr(ob,'mailServer',mailServer)
        !           108:    setattr(ob,'subjectAdd',subjectAdd)
        !           109:         return ob
        !           110:     else:
        !           111:         file = REQUEST.form.get('file')
        !           112:         headers = getattr(file, 'headers', None)
        !           113:         if headers is None or not file.filename:
        !           114:             zpt = sendMailForm(id)
        !           115:         else:
        !           116:             zpt = sendMailForm(id, file, headers.get('content_type'))
        !           117: 
        !           118:         self._setObject(id, zpt)
        !           119: 
        !           120:         try:
        !           121:             u = self.DestinationURL()
        !           122:         except AttributeError:
        !           123:             u = REQUEST['URL1']
        !           124: 
        !           125:         if submit == " Add and Edit ":
        !           126:             u = "%s/%s" % (u, quote(id))
        !           127:        
        !           128:    ob = getattr(self, id)
        !           129:         if title:
        !           130:             ob.pt_setTitle(title)
        !           131:        
        !           132:    setattr(ob,'toAddrs',toAddrsList)
        !           133:    setattr(ob,'mailServer',mailServer)
        !           134:    setattr(ob,'subjectAdd',subjectAdd)
        !           135:         REQUEST.RESPONSE.redirect(u+'/manage_main')
        !           136:     return ''
        !           137: 
        !           138:    
1.6       dwinter   139: class VLP_essay(Folder):
                    140:     """classe für VLP essays"""
                    141: 
                    142:     meta_type="VLP_essay"
                    143: 
1.8       dwinter   144:     manage_options = Folder.manage_options+(
                    145:        {'label':'Main Config','action':'ConfigVLP_essayForm'},
1.17      dwinter   146:        {'label':'Generate Essay Template','action':'generateEssayTemplateHTML'},
1.8       dwinter   147:                 )
                    148: 
1.9       dwinter   149:     def content_html(self,type='collection'):
                    150:         """template fuer content"""
                    151:         #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
                    152:         #
                    153:         #if templates:
                    154:         #    return templates[0][1]()
                    155:    
                    156:         if hasattr(self,type+"_template"):
                    157:             obj=getattr(self,type+"_template")
                    158:             return obj()
                    159:         else:
                    160:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
                    161:             pt.content_type="text/html"
                    162:             return pt()
                    163: 
1.8       dwinter   164:     def ConfigVLP_essayForm(self):
                    165:         """Form for adding"""
                    166:         pt=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLP_essay.zpt').__of__(self)
                    167:         return pt()
                    168: 
                    169:     def ChangeVLP_essay(self,title,label,description,RESPONSE=None):
                    170:         """Change vlp_essay"""
                    171:         self.title=title
                    172:         self.label=label
                    173:         self.description=description
                    174: 
                    175:         if RESPONSE is not None:
                    176:             RESPONSE.redirect('manage_main')
                    177: 
1.6       dwinter   178:     def __init__(self,id,title,label):
                    179:         """init"""
                    180:         self.id=id
                    181:         self.title=title
                    182:         self.label=label
                    183: 
1.17      dwinter   184:     def index_html(self):
                    185:    
                    186:        """show the rendered file"""
                    187:        
1.18      dwinter   188:        if hasattr(self,'essayTemplate.html'):
                    189:            return getattr(self,'essayTemplate.html')()
1.17      dwinter   190: 
                    191:        pt=PageTemplateFile('Products/ECHO_content/vlp/essay_template.zpt').__of__(self)
                    192:        pt.content_type="text/html"
                    193:        return pt()
                    194: 
                    195:     def generateEssayTemplateHTML(self,RESPONSE=None):
                    196:         """lege standard index.html an"""
                    197: 
                    198:    if not hasattr(self,'essayTemplate.html'):
                    199:             zt=ZopePageTemplate('essayTemplate.html')
                    200:             self._setObject('essayTemplate.html',zt)
                    201:             default_content_fn = os.path.join(package_home(globals()),
                    202:                                                'vlp/essay_template.zpt')
                    203:             text = open(default_content_fn).read()
                    204:             zt.pt_edit(text, 'text/html')
                    205: 
                    206:         else:
                    207:             return "already exists!"
                    208:         
                    209:         if RESPONSE is not None:
                    210:             RESPONSE.redirect('manage_main')
                    211: 
                    212: 
1.6       dwinter   213:     def getPage(self,pagenum):
                    214:         """gibt essay page mit num aus"""
                    215:         def sortFind(x,y):
                    216:             return cmp(x[0],y[0])
1.16      dwinter   217:         pages=[]
                    218:         pagestmp=self.ZopeFind(self,obj_metatypes=['DTML Document','File'])
                    219:    for page in pagestmp:
                    220:        if not (page[1].getId()[0]=="."):
                    221:            pages.append(page)
                    222:            
1.6       dwinter   223:         pages.sort(sortFind)
                    224:         #print str(pages[int(pagenum)][1]())
                    225:         if pages[int(pagenum)-1][1].meta_type=='File':
1.26      dwinter   226:        
1.20      dwinter   227:        #return makeXML(str(pages[int(pagenum)-1][1]))
1.26      dwinter   228:        #txt=pages[int(pagenum)-1][1].data.decode('utf-8')
                    229:        txt=pages[int(pagenum)-1][1].data
                    230:        #print txt.encode('utf-8')
                    231:        
                    232:        return self.xml2html(makeXML(txt),quote="no")
1.6       dwinter   233:         else:
1.26      dwinter   234:        
                    235:        
1.27      dwinter   236: 
1.20      dwinter   237:        return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no")
1.6       dwinter   238:         
                    239:     def nextPage(self,pagenum,url):
1.7       dwinter   240:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
1.6       dwinter   241:         if int(pagenum)+1 <= pages:
                    242:             retstr=url+"?p="+str(int(pagenum)+1)
                    243:             return """<td align="right" <a href="%s">next</a></td>"""%retstr
                    244:         
                    245:     def previousPage(self,pagenum,url):
1.7       dwinter   246:         
1.6       dwinter   247:         if int(pagenum)-1 > 0:
                    248:             retstr=url+"?p="+str(int(pagenum)-1)
                    249:             return """<td align="left" <a href="%s">previous</a></td>"""%retstr
                    250:         
1.19      dwinter   251:     def nextURL(self,pagenum,url):
                    252:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
                    253:         if int(pagenum)+1 <= pages:
                    254:             retstr=url+"?p="+str(int(pagenum)+1)
                    255:             return retstr
                    256:         
                    257:     def previousURL(self,pagenum,url):
                    258:         
                    259:         if int(pagenum)-1 > 0:
                    260:             retstr=url+"?p="+str(int(pagenum)-1)
                    261:             return retstr
                    262:         
1.6       dwinter   263:         
                    264: def manage_addVLP_essayForm(self):
                    265:     """Form for adding"""
                    266:     pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_essay.zpt').__of__(self)
                    267:     return pt()
                    268: 
                    269: def manage_addVLP_essay(self, id,title,label,RESPONSE=None):
                    270:    """add the copyright"""
                    271: 
                    272:    
                    273:    self._setObject(id, VLP_essay(id, title,label))
                    274: 
                    275:    if RESPONSE is not None:
                    276:        RESPONSE.redirect('manage_main')
                    277:    
                    278: 
1.26      dwinter   279: class VLP_encyclopaedia(VLP_essay):
                    280:    """essay"""
                    281: 
                    282:    meta_type="VLP_encyclopaedia"
                    283:    
                    284:    manage_options = VLP_essay.manage_options+(
                    285:        {'label':'Load File','action':'loadNewFileForm'},
                    286:        )
                    287: 
                    288:    
                    289:    def loadNewFileForm(self):
                    290:        """Neues XML-File einlesen"""
                    291:        pt=PageTemplateFile('Products/ECHO_content/vlp/VLP_newfile.zpt').__of__(self)
                    292:        return pt()
                    293: 
                    294:    def loadNewFile(self,RESPONSE=None):
                    295:        """einlesen des neuen files"""
                    296:        fileupload=self.REQUEST['fileupload']
                    297:        if fileupload:
                    298:            file_name=fileupload.filename
                    299:            filedata=fileupload.read()
                    300: 
                    301:            argv=vlp_xmlhelpers.proj2hash(self,filedata)
                    302:            textsStr=string.join(argv['text']).encode('utf-8')
                    303:            
                    304:            texts=textsStr.split("<pb/>")
                    305:            
                    306:            i=0
                    307:            for text in texts:
                    308:                i+=1
                    309:                pageName='page%03d.xml'%i
                    310:                pages=self.ZopeFind(self,obj_ids=[pageName])
                    311:                if pages:
                    312:                    pages[0][1].update_data(text)
                    313: 
                    314:                else:
                    315:                    zt=File(pageName,pageName,text,content_type="text/plain")
                    316:                    self._setObject(pageName,zt)
                    317:                
                    318:        if RESPONSE is not None:
                    319:            RESPONSE.redirect('manage_main')
                    320:            
                    321:    
                    322: def manage_addVLP_encycForm(self):
                    323:     """Form for adding"""
                    324:     pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_encyc.zpt').__of__(self)
                    325:     return pt()
                    326: 
                    327: def manage_addVLP_encyc(self, id,title,label,RESPONSE=None):
                    328:    """add the copyright"""
                    329: 
                    330:    
                    331:    self._setObject(id, VLP_encyclopaedia(id, title,label))
                    332: 
                    333:    if RESPONSE is not None:
                    334:        RESPONSE.redirect('manage_main')
                    335:    
1.6       dwinter   336: 
1.2       dwinter   337: class VLP_collection(ECHO_collection):
                    338:     """VLP spezifische Erweiterung der Collection"""
                    339: 
1.3       dwinter   340:     meta_type="VLP_collection"
                    341:     manage_options=ECHO_collection.manage_options+(
                    342:         {'label':'Change Path','action':'VLP_path_configForm'},
                    343:         {'label':'Update Library','action':'updateCollection'},
                    344:         {'label':'Update Metadata','action':'updateCollectionMD'},
                    345:         )
                    346: 
                    347:     def VLP_path_configForm(self):
1.5       dwinter   348:         """change pt"""
                    349:         path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
1.3       dwinter   350:         return pt()
                    351: 
                    352:     def VLP_path_config(self,path,RESPONSE=None):
                    353:         """config"""
                    354:         self.path=path
                    355:         if RESPONSE is not None:
                    356:             RESPONSE.redirect('manage_main')
                    357: 
                    358:     def updateCollection(self,RESPONSE=None):
                    359:         """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
                    360:         files=os.listdir(self.path)
                    361:         for fileName in files:
                    362:             
                    363:             if fileName[0:3]=="lit":
                    364:                 
                    365:                 metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta"
                    366:                 newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','')
                    367:                 self._setObject(fileName,newObj)
                    368:                 
                    369:                 genObj=getattr(self,fileName)
                    370:                 genObj.createIndexFile()
                    371:                 
                    372:                 
                    373:         if RESPONSE is not None:
                    374:             RESPONSE.redirect('manage_main')
                    375: 
                    376:     def updateCollectionMD(self,RESPONSE=None):
                    377:         """updateMD"""
                    378:         files=os.listdir(self.path)
                    379:         for fileName in files:
1.4       dwinter   380:             if fileName[0:3]=="lit":
1.3       dwinter   381:                 genObj=getattr(self,fileName)
                    382:                 genObj.copyIndex_meta2echo_resource()
                    383:                 genObj.generate_title()
                    384: 
                    385:         if RESPONSE is not None:
                    386:             RESPONSE.redirect('manage_main')
                    387: 
1.20      dwinter   388:     def copyFullTextsFromDB(self,RESPONSE=None):
                    389:        """copy fulltext aus DB"""
1.2       dwinter   390: 
1.20      dwinter   391:        ress=self.ZopeFind(self,obj_metatypes=['VLP_resource'])
                    392:        ret=""
                    393:        for res in ress:
                    394:            tmp=res[1].copyTranscriptionFromDB()
                    395:            ret+=tmp
                    396: 
                    397:            if RESPONSE:
                    398:                RESPONSE.write(tmp+"\n")
                    399:        if not RESPONSE:            
                    400:            return ret
                    401:        else:
                    402:            RESPONSE.write("END\n")
                    403:            
                    404:        
1.2       dwinter   405: def manage_addVLP_collectionForm(self):
                    406:         """Form for adding a ressource"""
                    407:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_collectionForm.zpt').__of__(self)
                    408:         return pt()
                    409: 
                    410: 
                    411: 
1.3       dwinter   412: def manage_addVLP_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,path,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.2       dwinter   413:     """add a echo collection"""
                    414:     
                    415: 
                    416:     newObj=VLP_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
                    417: 
                    418:     self._setObject(id,newObj)
1.3       dwinter   419:     setattr(newObj,'path',path)
1.2       dwinter   420: 
                    421:     if RESPONSE is not None:
                    422:         RESPONSE.redirect('manage_main')
                    423: 
                    424: 
1.1       dwinter   425: 
                    426: class VLP_resource(ECHO_resource):
                    427:     """VLP spezifische Erweiterung"""
                    428: 
                    429:     meta_type="VLP_resource"
                    430: 
                    431:     vlp_basis="/mpiwg/online/permanent/vlp"
                    432: 
                    433:     
                    434:     referencetypes=[]
                    435: 
                    436:     manage_options=ECHO_resource.manage_options+(
                    437:         {'label':'Update Index','action':'createIndexFile'},
                    438:         {'label':'Reset MetaLink','action':'resetMetaLink'},
                    439:         {'label':'Generate Title','action':'generate_title'},
1.14      dwinter   440:    {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
1.1       dwinter   441:         )
                    442: 
1.20      dwinter   443:     
                    444:     def transcription(self):
                    445:        """show the rendered transcriptiofile"""
                    446:        
                    447:        if hasattr(self,'libraryTranscriptionTemplate.html'):
                    448:            return getattr(self,'libraryTranscriptionTemplate.html')()
                    449: 
                    450:        pt=PageTemplateFile('Products/ECHO_content/vlp/library_transcriptionTemplate.zpt').__of__(self)
                    451:        pt.content_type="text/html"
                    452:        return pt()
                    453: 
                    454: 
                    455: 
                    456:     def copyTranscriptionFromDB(self):
                    457:        """checks if transcription exits in DB"""
                    458:        founds=self.search(var='select * from vl_transcript where source=\''+self.resourceID+'\' order by id')
                    459: 
                    460:        
                    461:        ret="""<?xml version="1.0" encoding="utf-8"?>
                    462:                <text>"""
                    463:         
                    464:        if founds:
                    465:            
                    466:            for found in founds:
                    467:                text=found.transcript
                    468:                if not text: text=""
                    469:                ret+="<page><pb/>"+text+"</page>"
                    470: 
                    471:            ret+="</text>"
                    472:            re2=ret[0:]
                    473:            re3=re2.decode('latin-1')
                    474:            
                    475:            ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText'])
                    476:            
                    477:            if ft:
                    478:            
                    479:                ft[0][1].pt_edit(re3.encode('utf-8','ignore'),'text/xml')
                    480:            
                    481:            else:
                    482:                self._setObject('fulltext',ECHO_fullText(id,re3))
                    483:            
                    484:            return "FT: %s"%self.getId()
                    485:        else:
                    486:            return "no: %s"%self.getId()
                    487:        
1.1       dwinter   488:     def resetMetaLink(self,all="no",RESPONSE=None):
                    489:         """resets metalink to standard resp. in case of server change it sets to the new server url"""
                    490:         if all=="yes":
                    491:             self.metalink=self.absolute_url()+"/index_meta"
                    492:         else:
                    493:             splitted=self.metalink.split("/")
                    494:             if (len(splitted)>1) and (splitted[len(splitted)-1]=="index_meta") and (splitted[len(splitted)-2]==self.getId()): # heuristic nur generische Metadatafiles andern
                    495:                 self.metalink=self.absolute_url()+"/index_meta"
                    496: 
                    497:         if RESPONSE:
                    498:             return "done"
                    499:             
                    500:     def show(self):
                    501:         """show the rendered file"""
1.11      dwinter   502: 
                    503:         if self.REQUEST.get('p',None):
1.28      dwinter   504:             #self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None)))
                    505:        self.REQUEST.RESPONSE.redirect(self.REQUEST['URL']+"?pn="+self.file2page(self.REQUEST.get('p',None)))
                    506: 
1.12      dwinter   507:            
1.14      dwinter   508:    if hasattr(self,'libraryTemplate.html'):
                    509:        return getattr(self,'libraryTemplate.html')()
                    510:    
1.1       dwinter   511:         pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
                    512:         pt.content_type="text/html"
                    513:         return pt()
                    514:     
1.3       dwinter   515:     index_html=show
1.14      dwinter   516: 
                    517:     def generateLibraryTemplateHTML(self,RESPONSE=None):
                    518:         """lege standard index.html an"""
                    519: 
                    520:    if not hasattr(self,'libraryTemplate.html'):
                    521:             zt=ZopePageTemplate('libraryTemplate.html')
                    522:             self._setObject('libraryTemplate.html',zt)
                    523:             default_content_fn = os.path.join(package_home(globals()),
                    524:                                                'vlp/library_template.zpt')
                    525:             text = open(default_content_fn).read()
                    526:             zt.pt_edit(text, 'text/html')
                    527: 
                    528:         else:
                    529:             return "already exists!"
                    530:         
                    531:         if RESPONSE is not None:
                    532:             RESPONSE.redirect('manage_main')
                    533: 
                    534: 
1.1       dwinter   535:     def index_meta(self):
                    536:         """index_meta"""
1.11      dwinter   537:         
1.1       dwinter   538:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
                    539:         pt.content_type="text/html"
                    540:         return pt()
1.11      dwinter   541: 
                    542:     def file2page(self,p):
                    543:         """converts filename to pagenumber"""
1.21      dwinter   544:         dom=xml.dom.minidom.parse(ECHO_helpers.urlopen(getattr(self,'index.xml').absolute_url()))
1.11      dwinter   545:         
                    546:         for page in dom.getElementsByTagName('page'):
1.23      dwinter   547:         # pageummer mit lo oder hi sind aequivalent
                    548:         if (page.getAttribute('file')==p) or ("%slo"%page.getAttribute('file')==p) or ("%shi"%page.getAttribute('file')==p):
                    549:             return page.getAttribute('nr')
1.11      dwinter   550:             
                    551:         return 0
1.1       dwinter   552:     
                    553:     def dir2index(self):
                    554:         """dir to index"""
                    555: 
                    556:         def calculateName(str):
                    557:             ret="%s: %s"%(str[0],str[1:5])
                    558:             return ret
1.2       dwinter   559: 
                    560:         try:
                    561:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))
                    562:             self.imagePath='pageimg'
                    563:         except:
                    564:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))
                    565:             self.imagePath='pagesHi'
1.1       dwinter   566:         temp=[]
                    567:         for x in ret:
                    568:             if not (x[0]=="."):
                    569:                 
1.11      dwinter   570:                 temp.append((calculateName(x),os.path.splitext(x)[0]))
1.1       dwinter   571:         return temp
                    572: 
1.11      dwinter   573:     
1.1       dwinter   574:     def firstPage(self,url=None):
                    575:         """showlink to the first image"""
1.24      dwinter   576:         if self.REQUEST.get('pn','1')=="1": #erste seinte dann kein a tag
1.1       dwinter   577:             return """<img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""
                    578: 
                    579:         else:
                    580:             return """<a href=%s>
                    581:                          <img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first
                    582:                          </a>
                    583:                          """%(self.REQUEST['URL']+"?pn=1")
                    584: 
                    585:     def lastPage(self,url=None):
                    586:         """showlink to the first image"""
                    587:         pages=self.readIndexFile(url)
                    588:         if pages:
                    589:             ln=len(pages)
                    590:         
1.24      dwinter   591:         if (self.REQUEST.get('pn')==str(ln)) or (ln==1): #letzte seite dann kein a tag oder nur eine Seite
1.1       dwinter   592:             return """<img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""
                    593: 
                    594:         else:
                    595:             return """<a href=%s>
                    596:                          <img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last
                    597:                          </a>
                    598:                          """%(self.REQUEST['URL']+"?pn="+str(ln))
                    599:             
                    600:     def prevPage(self,url=None):
                    601:         """showlink to the first image"""
                    602:         
                    603: 
                    604:         nn = int(self.REQUEST.get('pn','1'))-1
                    605:         if nn < 1: #letzte  seite dann kein a tag
1.22      dwinter   606:             return """<img src="../../images/lisePrev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""
1.1       dwinter   607: 
                    608:         else:
                    609:             return """<a href=%s>
1.22      dwinter   610:                          <img src="../../images/lisePrev.gif" alt="prev" width="14" height="14" border="0"><br>prev
1.1       dwinter   611:                          </a>
                    612:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
                    613: 
                    614:     def nextPage(self,url=None):
                    615:         """showlink to the first image"""
                    616:         pages=self.readIndexFile(url)
                    617:         if pages:
                    618:             ln=len(pages)
                    619: 
                    620:         nn = int(self.REQUEST.get('pn','1'))+1
1.24      dwinter   621:         if (nn>int(ln)) or (ln==1): #letzte  seite dann kein a tag
1.22      dwinter   622:             return """<img src="../../images/liseNext.gif" alt="next" width="14" height="14" border="0"><br>next"""
1.1       dwinter   623: 
                    624:         else:
                    625:             return """<a href=%s>
1.22      dwinter   626:                          <img src="../../images/liseNext.gif" alt="next" width="14" height="14" border="0"><br>next
1.1       dwinter   627:                          </a>
                    628:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
                    629:         
                    630:     
                    631:     def readIndexFile(self,url=None):
                    632:         """reads the indexfile. presently url not None isn't implemented. In the future url can be defined."""
                    633:         pagelist=[]
                    634:         if not url:
                    635:             url=self.absolute_url()+"/index.xml"
                    636: 
1.21      dwinter   637:         fh=ECHO_helpers.urlopen(url)
1.1       dwinter   638:         dom=xml.dom.minidom.parse(fh)
                    639:         
                    640:         
                    641:         for page in dom.getElementsByTagName('page'):
                    642:             text=getText(page.childNodes)
                    643:             pageNum=page.getAttribute('nr')
1.22      dwinter   644:        fileName=page.getAttribute('file')
                    645:             pagelist.append((pageNum,text,fileName))
1.1       dwinter   646: 
                    647:         return pagelist
1.22      dwinter   648: 
                    649:     def getFileName(self):
                    650:       """getNameOfCurrentFile"""
1.25      dwinter   651:       try:
                    652:        pn=int(self.REQUEST.get('pn','1'))
                    653:       except:
                    654:        pn=1
1.22      dwinter   655:       pageinfo=self.readIndexFile()[pn-1]
                    656:       return pageinfo[2]
                    657:    
1.1       dwinter   658:     def createIndexFile(self,RESPONSE=None):
                    659:         """create index file"""
                    660: 
                    661:         
                    662:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_template.zpt').__of__(self)()
                    663: 
                    664: 
                    665:         
                    666:         if not hasattr(self,'index.xml'):
                    667:             zt=ZopePageTemplate('index.xml')
                    668:             self._setObject('index.xml',zt)
                    669:         else:
                    670:             zt=getattr(self,'index.xml')
                    671:             
                    672:             
                    673:         zt.pt_edit(pt, 'text/xml')
                    674: 
                    675:         if RESPONSE is not None:
                    676:             RESPONSE.redirect('manage_main')
                    677: 
                    678:         
                    679: def manage_addVLP_resourceForm(self):
                    680:         """Form for adding a ressource"""
                    681:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_resourceForm.zpt').__of__(self)
                    682:         return pt()
                    683: 
                    684: 
                    685: 
                    686: def manage_addVLP_resource(self,id,title,label,description,responsible,link,metalink,weight,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
                    687:     """addaresource"""
                    688: 
                    689:     
1.2       dwinter   690:     if metalink=='':
                    691:         metalink=self.absolute_url()+"/"+id+"/index_meta"
                    692:             
1.1       dwinter   693:     newObj=VLP_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
                    694: 
                    695:     self._setObject(id,newObj)
                    696: 
                    697:     if RESPONSE is not None:
                    698:         RESPONSE.redirect('manage_main')
                    699:  

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>