Annotation of ECHO_content/ECHO_language.py, revision 1.11

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.11    ! dwinter    53:          def changeEntry(self,nr,slaveUrl,masterID):
1.10      dwinter    54:              """change an entry, only slaveUrl"""
                     55:              tmp=self.entries[nr]
1.11    ! dwinter    56:              tm=tmp['master']
1.10      dwinter    57:              tmp['slave']=(slaveUrl,"","")
1.11    ! dwinter    58:              tmp['master']=(tm[0],tm[1],masterID)
1.10      dwinter    59:              entries=self.entries[0:]
                     60:              entries[nr]=tmp 
                     61:              self.entries=entries[0:]
1.7       dwinter    62:              
1.8       dwinter    63:          def appendEntry(self,fn,id,type,pagelink):
1.7       dwinter    64:              """append an entry"""
                     65:              #check if last entry is complete
                     66:              createNew=False
1.8       dwinter    67:             
1.7       dwinter    68:              if len(self.entries)==0: #noch gar kein Eintrag
                     69:                  createNew=True
                     70:              else:
                     71:                  entry=self.entries[-1]
                     72:                  if entry.get('master',None) and entry.get('slave',None):
                     73:                      createNew=True
                     74:              if createNew:
                     75: 
                     76:                  self.entries.append({})
                     77:                  entry=self.entries[-1]
                     78:              if type=="master":
1.8       dwinter    79:                  entry['master']=(fn,id,pagelink)
1.7       dwinter    80:              elif type=="slave":
1.8       dwinter    81:                  entry['slave']=(fn,id,pagelink)
1.7       dwinter    82:              
1.8       dwinter    83:              entries=self.entries[0:]
                     84:              entries[-1]=entry 
                     85:              self.entries=entries[0:]
1.7       dwinter    86:              
                     87: class ECHO_linkCreator(Folder):
                     88:      """creator for links"""
                     89:      
                     90:      meta_type="ECHO_linkCreator"
                     91:      
                     92: 
                     93:                  
                     94:                      
                     95:      def getCollectionEntries(self,collection):
                     96:          col=getattr(self,collection,None)
                     97:          if not col:
                     98:              return []
                     99:        
                    100:          return col.getEntries()
                    101:      
1.11    ! dwinter   102:      def getAllRefIDs(self,collection):
        !           103:          """return all refids"""
        !           104:          ret=[]
        !           105:          entries=self.getCollectionEntries(collection)
        !           106:          
        !           107:          for entry in entries:
        !           108:              ret.append('_pagelink='+entry['master'][2])
        !           109:          return "&".join(ret)
1.9       dwinter   110:      
1.11    ! dwinter   111:              
1.9       dwinter   112:      def getCollectionXML(self,collection=None,RESPONSE=None):
                    113:          """exports the collection as an XML file"""
                    114:          if not collection:
                    115:              return "<error>no collection: need parameter collection=COLLECTION_NAME</error>"
                    116:        
                    117:          i=0
                    118:          ret=""
                    119:          ret+="""<?xml version="1.0" encoding="UTF-8"?>"""
                    120:          ret+="""<linklist xmlns="http://www.mpiwg-berlin.mpg.de/namespace">"""
                    121:          ret+="""<linklistname>%s</linklistname>"""%collection
                    122:          ret+="""<masterurl ref="%s"/>"""%self.getUrls(collection)[0]
                    123:          ret+="""<slaveurl ref="%s"/>"""%self.getUrls(collection)[1]
                    124:          
                    125:          for entry in self.getCollectionEntries(collection):
                    126:              ret+="""<link id="%s">"""%i
                    127:              i+=1
                    128:              
                    129:              if entry.has_key('master'):
                    130:                  ms=entry['master']
1.10      dwinter   131:   
                    132:              
1.9       dwinter   133:                  try:
1.10      dwinter   134:                      if urlparse.urlparse(ms[0])[0]=="http": # url
                    135:                          ret+="""<source filename="%s"/>"""%urllib.quote(ms[0])
                    136:                      else:
                    137:                          ret+="""<source filename="%s" refid="%s">"""%(ms[0],ms[1])
                    138:                          splitted=ms[2].split("/")
                    139:                          if (len(splitted)>3):
                    140:                              ret+="""<pagelink refid="%s" selectionNodeIndex="%s"/>"""%(splitted[0],splitted[3])
                    141:  
                    142:                          ret+="""</source>"""
1.9       dwinter   143:                  except: #ohne pagelink&
                    144:                      ret+="""<source filename="%s" refid="%s"/>"""%ms
                    145:              if entry.has_key('slave'):
                    146:                  ms=entry['slave']
                    147:                  try:
1.10      dwinter   148:                     if urlparse.urlparse(ms[0])[0]=="http": # url
                    149:                         ret+="""<target filename="%s"/>"""%urllib.quote(ms[0])
                    150:                     else:
                    151:                         ret+="""<target filename="%s" refid="%s">"""%(ms[0],ms[1])
                    152:                         splitted=ms[2].split("/")
                    153:                         if (len(splitted)>3):
                    154:                             ret+="""<pagelink refid="%s" selectionNodeIndex="%s"/>"""%(splitted[0],splitted[3])
                    155:                         ret+="""</target>"""
1.9       dwinter   156:                  except: #ohne pagelink
                    157:                      ret+="""<target filename="%s" refid="%s"/>"""%ms
                    158:                   
                    159:              ret+="</link>"
                    160:          ret+="""</linklist>"""
                    161:          if RESPONSE:
                    162:              RESPONSE.setHeader("Content-Type","text/xml")
                    163:          return ret
1.7       dwinter   164:      def index_html(self,collection=None):
                    165:          """show create links"""
                    166:          if not collection:
1.8       dwinter   167:              return "no collection: need parameter collection=COLLECTION_NAME"
1.7       dwinter   168:          
                    169:               
                    170:          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','ECHO_linkCreator_main')).__of__(self)
                    171:          
                    172:          col=getattr(self,collection,None)
                    173:          if not col:
                    174:              return []
                    175:        
                    176:          masterUrl=getattr(col,'masterUrl','')
                    177:          slaveUrl=getattr(col,'slaveUrl','')
                    178:          
                    179:          return pt(collection=collection,masterUrl=masterUrl,slaveUrl=slaveUrl)
                    180:      
1.8       dwinter   181:      def addEntry(self,collection,fn,id,type,pagelink,fromurl=None,RESPONSE=None,REQUEST=None):
1.7       dwinter   182:          """add an entry"""
1.8       dwinter   183:         
1.7       dwinter   184:          col=getattr(self, collection,None)
                    185:          if not col:
                    186:              self._setObject(collection,Collection(collection))
                    187:              col=getattr(self, collection)
1.8       dwinter   188:          
                    189:          col.appendEntry(fn,id,type,pagelink)
1.7       dwinter   190:          
                    191:          if fromurl and RESPONSE:
1.8       dwinter   192:      
                    193:              RESPONSE.setHeader("Expires",(DateTime()-1).rfc822())
                    194:              RESPONSE.setHeader("Cache-Control", "no-cache")
1.7       dwinter   195:              RESPONSE.redirect(fromurl)
1.10      dwinter   196:    
                    197: 
1.11    ! dwinter   198:      def changeEntry(self,collection,nr,slaveUrl,masterID,RESPONSE=None):
1.10      dwinter   199:          """change an entry 8only slaveUrl at the moment"""
                    200:          col=getattr(self, collection,None)
1.11    ! dwinter   201:          col.changeEntry(nr,slaveUrl,masterID)
        !           202: 
1.10      dwinter   203:          if RESPONSE:
                    204:              RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
                    205:          
1.7       dwinter   206:      def removeEntry(self,collection,nr,RESPONSE=None):
                    207:          """remove an entry"""
                    208:          col=getattr(self, collection,None)
                    209:          col.deleteEntry(nr)
                    210:          
                    211:          if RESPONSE:
                    212:              RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
                    213:          
                    214:      def setUrls(self,collection,masterUrl,slaveUrl,RESPONSE=None):
                    215:          """set the urls for the document viewer"""
                    216:          col=getattr(self, collection,None)
                    217:          setattr(col,'masterUrl',masterUrl)
                    218:          setattr(col,'slaveUrl',slaveUrl)
                    219:          
                    220:          if RESPONSE:
                    221:              RESPONSE.redirect(self.absolute_url()+"?collection="+collection)
                    222:          
1.9       dwinter   223:      def getUrls(self,collection,RESPONSE=None):
                    224:          """set the urls for the document viewer"""
                    225:          col=getattr(self, collection,None)
                    226:          x=getattr(col,'masterUrl')
                    227:          y=getattr(col,'slaveUrl')
                    228:          return x,y
1.7       dwinter   229:          
                    230: def manage_addECHO_linkCreatorForm(self,RESPONSE=None):
                    231:     """Form for adding"""
                    232:     manage_addECHO_linkCreator(self,RESPONSE)
                    233: 
                    234: def manage_addECHO_linkCreator(self,RESPONSE=None):
                    235:     """Add an ECHO_main"""
                    236:     id='linkCreator'
                    237:     self._setObject(id,ECHO_linkCreator(id))
                    238:     
                    239:   
                    240:     if RESPONSE is not None:
                    241:         RESPONSE.redirect('manage_main')      
                    242:          
                    243:          
                    244:          
                    245:          
                    246:          
                    247:          
                    248:          
                    249:          
                    250:          
                    251:          
                    252:          
                    253:          
                    254:          
                    255:          

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