Annotation of ECHO_content/ECHO_language.py, revision 1.10

1.1       dwinter     1: """Methoden fuer Language Technologies"""
1.2       dwinter     2: 
1.7       dwinter     3: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
1.4       dwinter     4: from Products.ECHO_content.analyseAndTag.analyseAndTag import DonatusFile
1.7       dwinter     5: from OFS.SimpleItem import SimpleItem
                      6: from OFS.Folder import Folder
1.4       dwinter     7: import xml.parsers
1.7       dwinter     8: import os.path
1.10    ! dwinter     9: import urlparse,urllib
1.7       dwinter    10: from Globals import package_home
1.4       dwinter    11: 
1.2       dwinter    12: class ECHO_language:
1.3       dwinter    13:         """language methods"""
                     14:         
1.4       dwinter    15:         
1.7       dwinter    16:         def tagLex(self,nr="1",id=None):
1.5       dwinter    17:             """gerateword tags"""
1.7       dwinter    18:             
1.4       dwinter    19:            
1.7       dwinter    20:             df=DonatusFile(txt=self.getPage(_pn=nr,_id=id),baseUri=self.baseUri)
1.4       dwinter    21:            
1.5       dwinter    22:             return df.convertedXML()
1.4       dwinter    23:             #return DonatusFile(txt=self.getPage(_pn=nr)).convertedXML()
                     24:         
1.7       dwinter    25: class Collection(SimpleItem):
1.9       dwinter    26:          def getCollectionXML(self,RESPONSE=None):
                     27:              
                     28:              """get collection as xml"""
                     29:              return self.aq_parent.getCollectionXML(collection=self.getId(),RESPONSE=RESPONSE)
1.7       dwinter    30:          
                     31:          def __init__(self,id):
                     32:              """initialise"""
                     33:              self.id=id
                     34:              self.entries=[]
                     35:              
                     36:          
                     37:          def getEntries(self):
                     38:              """get the entries"""
1.8       dwinter    39:              entries=self.entries
                     40:              for entry in entries: #backward compatibility, cannot be removed a.s.a.p.
                     41:                  print entry
                     42:                  if entry.has_key('master') and (len(entry['master'])<3):
                     43:                      entry['master']=(entry['master'][0],entry['master'][1],'')
                     44:                  if entry.has_key('slave') and (len(entry['slave'])<3):
                     45:                      entry['slave']=(entry['slave'][0],entry['slave'][1],'')
                     46:                  
1.7       dwinter    47:              return self.entries
                     48:          
                     49:          def deleteEntry(self,nr):
                     50:              """delete an entry"""
                     51:              del(self.entries[nr])
                     52:            
1.10    ! dwinter    53:          def changeEntry(self,nr,slaveUrl):
        !            54:              """change an entry, only slaveUrl"""
        !            55:              tmp=self.entries[nr]
        !            56:              tmp['slave']=(slaveUrl,"","")
        !            57:              
        !            58:              entries=self.entries[0:]
        !            59:              entries[nr]=tmp 
        !            60:              self.entries=entries[0:]
1.7       dwinter    61:              
1.8       dwinter    62:          def appendEntry(self,fn,id,type,pagelink):
1.7       dwinter    63:              """append an entry"""
                     64:              #check if last entry is complete
                     65:              createNew=False
1.8       dwinter    66:             
1.7       dwinter    67:              if len(self.entries)==0: #noch gar kein Eintrag
                     68:                  createNew=True
                     69:              else:
                     70:                  entry=self.entries[-1]
                     71:                  if entry.get('master',None) and entry.get('slave',None):
                     72:                      createNew=True
                     73:              if createNew:
                     74: 
                     75:                  self.entries.append({})
                     76:                  entry=self.entries[-1]
                     77:              if type=="master":
1.8       dwinter    78:                  entry['master']=(fn,id,pagelink)
1.7       dwinter    79:              elif type=="slave":
1.8       dwinter    80:                  entry['slave']=(fn,id,pagelink)
1.7       dwinter    81:              
1.8       dwinter    82:              entries=self.entries[0:]
                     83:              entries[-1]=entry 
                     84:              self.entries=entries[0:]
1.7       dwinter    85:              
                     86: class ECHO_linkCreator(Folder):
                     87:      """creator for links"""
                     88:      
                     89:      meta_type="ECHO_linkCreator"
                     90:      
                     91: 
                     92:                  
                     93:                      
                     94:      def getCollectionEntries(self,collection):
                     95:          col=getattr(self,collection,None)
                     96:          if not col:
                     97:              return []
                     98:        
                     99:          return col.getEntries()
                    100:      
1.9       dwinter   101:      
                    102:      def getCollectionXML(self,collection=None,RESPONSE=None):
                    103:          """exports the collection as an XML file"""
                    104:          if not collection:
                    105:              return "<error>no collection: need parameter collection=COLLECTION_NAME</error>"
                    106:        
                    107:          i=0
                    108:          ret=""
                    109:          ret+="""<?xml version="1.0" encoding="UTF-8"?>"""
                    110:          ret+="""<linklist xmlns="http://www.mpiwg-berlin.mpg.de/namespace">"""
                    111:          ret+="""<linklistname>%s</linklistname>"""%collection
                    112:          ret+="""<masterurl ref="%s"/>"""%self.getUrls(collection)[0]
                    113:          ret+="""<slaveurl ref="%s"/>"""%self.getUrls(collection)[1]
                    114:          
                    115:          for entry in self.getCollectionEntries(collection):
                    116:              ret+="""<link id="%s">"""%i
                    117:              i+=1
                    118:              
                    119:              if entry.has_key('master'):
                    120:                  ms=entry['master']
1.10    ! dwinter   121:   
        !           122:              
1.9       dwinter   123:                  try:
1.10    ! dwinter   124:                      if urlparse.urlparse(ms[0])[0]=="http": # url
        !           125:                          ret+="""<source filename="%s"/>"""%urllib.quote(ms[0])
        !           126:                      else:
        !           127:                          ret+="""<source filename="%s" refid="%s">"""%(ms[0],ms[1])
        !           128:                          splitted=ms[2].split("/")
        !           129:                          if (len(splitted)>3):
        !           130:                              ret+="""<pagelink refid="%s" selectionNodeIndex="%s"/>"""%(splitted[0],splitted[3])
        !           131:  
        !           132:                          ret+="""</source>"""
1.9       dwinter   133:                  except: #ohne pagelink&
                    134:                      ret+="""<source filename="%s" refid="%s"/>"""%ms
                    135:              if entry.has_key('slave'):
                    136:                  ms=entry['slave']
                    137:                  try:
1.10    ! dwinter   138:                     if urlparse.urlparse(ms[0])[0]=="http": # url
        !           139:                         ret+="""<target filename="%s"/>"""%urllib.quote(ms[0])
        !           140:                     else:
        !           141:                         ret+="""<target filename="%s" refid="%s">"""%(ms[0],ms[1])
        !           142:                         splitted=ms[2].split("/")
        !           143:                         if (len(splitted)>3):
        !           144:                             ret+="""<pagelink refid="%s" selectionNodeIndex="%s"/>"""%(splitted[0],splitted[3])
        !           145:                         ret+="""</target>"""
1.9       dwinter   146:                  except: #ohne pagelink
                    147:                      ret+="""<target filename="%s" refid="%s"/>"""%ms
                    148:                   
                    149:              ret+="</link>"
                    150:          ret+="""</linklist>"""
                    151:          if RESPONSE:
                    152:              RESPONSE.setHeader("Content-Type","text/xml")
                    153:          return ret
1.7       dwinter   154:      def index_html(self,collection=None):
                    155:          """show create links"""
                    156:          if not collection:
1.8       dwinter   157:              return "no collection: need parameter collection=COLLECTION_NAME"
1.7       dwinter   158:          
                    159:               
                    160:          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_linkCreator_main')).__of__(self)
                    161:          
                    162:          col=getattr(self,collection,None)
                    163:          if not col:
                    164:              return []
                    165:        
                    166:          masterUrl=getattr(col,'masterUrl','')
                    167:          slaveUrl=getattr(col,'slaveUrl','')
                    168:          
                    169:          return pt(collection=collection,masterUrl=masterUrl,slaveUrl=slaveUrl)
                    170:      
1.8       dwinter   171:      def addEntry(self,collection,fn,id,type,pagelink,fromurl=None,RESPONSE=None,REQUEST=None):
1.7       dwinter   172:          """add an entry"""
1.8       dwinter   173:         
1.7       dwinter   174:          col=getattr(self, collection,None)
                    175:          if not col:
                    176:              self._setObject(collection,Collection(collection))
                    177:              col=getattr(self, collection)
1.8       dwinter   178:          
                    179:          col.appendEntry(fn,id,type,pagelink)
1.7       dwinter   180:          
                    181:          if fromurl and RESPONSE:
1.8       dwinter   182:      
                    183:              RESPONSE.setHeader("Expires",(DateTime()-1).rfc822())
                    184:              RESPONSE.setHeader("Cache-Control", "no-cache")
1.7       dwinter   185:              RESPONSE.redirect(fromurl)
1.10    ! dwinter   186:    
        !           187: 
        !           188:      def changeEntry(self,collection,nr,slaveUrl,RESPONSE=None):
        !           189:          """change an entry 8only slaveUrl at the moment"""
        !           190:          col=getattr(self, collection,None)
        !           191:          col.changeEntry(nr,slaveUrl)
        !           192:          
        !           193:          if RESPONSE:
        !           194:              RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
        !           195:          
1.7       dwinter   196:      def removeEntry(self,collection,nr,RESPONSE=None):
                    197:          """remove an entry"""
                    198:          col=getattr(self, collection,None)
                    199:          col.deleteEntry(nr)
                    200:          
                    201:          if RESPONSE:
                    202:              RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
                    203:          
                    204:      def setUrls(self,collection,masterUrl,slaveUrl,RESPONSE=None):
                    205:          """set the urls for the document viewer"""
                    206:          col=getattr(self, collection,None)
                    207:          setattr(col,'masterUrl',masterUrl)
                    208:          setattr(col,'slaveUrl',slaveUrl)
                    209:          
                    210:          if RESPONSE:
                    211:              RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
                    212:          
1.9       dwinter   213:      def getUrls(self,collection,RESPONSE=None):
                    214:          """set the urls for the document viewer"""
                    215:          col=getattr(self, collection,None)
                    216:          x=getattr(col,'masterUrl')
                    217:          y=getattr(col,'slaveUrl')
                    218:          return x,y
1.7       dwinter   219:          
                    220: def manage_addECHO_linkCreatorForm(self,RESPONSE=None):
                    221:     """Form for adding"""
                    222:     manage_addECHO_linkCreator(self,RESPONSE)
                    223: 
                    224: def manage_addECHO_linkCreator(self,RESPONSE=None):
                    225:     """Add an ECHO_main"""
                    226:     id='linkCreator'
                    227:     self._setObject(id,ECHO_linkCreator(id))
                    228:     
                    229:   
                    230:     if RESPONSE is not None:
                    231:         RESPONSE.redirect('manage_main')      
                    232:          
                    233:          
                    234:          
                    235:          
                    236:          
                    237:          
                    238:          
                    239:          
                    240:          
                    241:          
                    242:          
                    243:          
                    244:          
                    245:          

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