File:  [Repository] / ECHO_content / VLPExtension.py
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Tue Jun 8 15:25:11 2004 UTC (20 years ago) by dwinter
Branches: MAIN
CVS tags: HEAD
getMetaDatasXML added

    1: from ECHO_collection import *
    2: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    3: from Products.PageTemplates.PageTemplate import PageTemplate
    4: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
    5: 
    6: from Products.zogiLib import zogiLib
    7: 
    8: def getText(nodelist):
    9: 
   10:     rc = ""
   11:     for node in nodelist:
   12:     	if node.nodeType == node.TEXT_NODE:
   13:            rc = rc + node.data
   14:     return rc
   15: 
   16: class VLP_essay(Folder):
   17:     """classe für VLP essays"""
   18: 
   19:     meta_type="VLP_essay"
   20: 
   21:     def __init__(self,id,title,label):
   22:         """init"""
   23:         self.id=id
   24:         self.title=title
   25:         self.label=label
   26: 
   27:     def getPage(self,pagenum):
   28:         """gibt essay page mit num aus"""
   29:         def sortFind(x,y):
   30:             return cmp(x[0],y[0])
   31:             
   32:         pages=self.ZopeFind(self,obj_metatypes=['DTML Document','File'])
   33:         
   34:         pages.sort(sortFind)
   35:         #print str(pages[int(pagenum)][1]())
   36:         if pages[int(pagenum)-1][1].meta_type=='File':
   37:             return str(pages[int(pagenum)-1][1])
   38:         else:
   39:             return str(pages[int(pagenum)-1][1]())
   40:         
   41:     def nextPage(self,pagenum,url):
   42:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document'])) # teste ob performance ok, sonst in variable
   43:         if int(pagenum)+1 <= pages:
   44:             retstr=url+"?p="+str(int(pagenum)+1)
   45:             return """<td align="right" <a href="%s">next</a></td>"""%retstr
   46:         
   47:     def previousPage(self,pagenum,url):
   48:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document'])) # teste ob performance ok, sonst in variable
   49:         if int(pagenum)-1 > 0:
   50:             retstr=url+"?p="+str(int(pagenum)-1)
   51:             return """<td align="left" <a href="%s">previous</a></td>"""%retstr
   52:         
   53:         
   54: def manage_addVLP_essayForm(self):
   55:     """Form for adding"""
   56:     pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_essay.zpt').__of__(self)
   57:     return pt()
   58: 
   59: def manage_addVLP_essay(self, id,title,label,RESPONSE=None):
   60: 	"""add the copyright"""
   61: 
   62: 	
   63: 	self._setObject(id, VLP_essay(id, title,label))
   64: 
   65: 	if RESPONSE is not None:
   66: 		RESPONSE.redirect('manage_main')
   67: 	
   68: 
   69: 
   70: class VLP_collection(ECHO_collection):
   71:     """VLP spezifische Erweiterung der Collection"""
   72: 
   73:     meta_type="VLP_collection"
   74:     manage_options=ECHO_collection.manage_options+(
   75:         {'label':'Change Path','action':'VLP_path_configForm'},
   76:         {'label':'Update Library','action':'updateCollection'},
   77:         {'label':'Update Metadata','action':'updateCollectionMD'},
   78:         )
   79: 
   80:     def VLP_path_configForm(self):
   81:         """change pt"""
   82:         path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
   83:         return pt()
   84: 
   85:     def VLP_path_config(self,path,RESPONSE=None):
   86:         """config"""
   87:         self.path=path
   88:         if RESPONSE is not None:
   89:             RESPONSE.redirect('manage_main')
   90: 
   91:     def updateCollection(self,RESPONSE=None):
   92:         """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
   93:         files=os.listdir(self.path)
   94:         for fileName in files:
   95:             
   96:             if fileName[0:3]=="lit":
   97:                 
   98:                 metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta"
   99:                 newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','')
  100:                 self._setObject(fileName,newObj)
  101:                 
  102:                 genObj=getattr(self,fileName)
  103:                 genObj.createIndexFile()
  104:                 
  105:                 
  106:         if RESPONSE is not None:
  107:             RESPONSE.redirect('manage_main')
  108: 
  109:     def updateCollectionMD(self,RESPONSE=None):
  110:         """updateMD"""
  111:         files=os.listdir(self.path)
  112:         for fileName in files:
  113:             if fileName[0:3]=="lit":
  114:                 genObj=getattr(self,fileName)
  115:                 genObj.copyIndex_meta2echo_resource()
  116:                 genObj.generate_title()
  117: 
  118:         if RESPONSE is not None:
  119:             RESPONSE.redirect('manage_main')
  120: 
  121: 
  122: def manage_addVLP_collectionForm(self):
  123:         """Form for adding a ressource"""
  124:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_collectionForm.zpt').__of__(self)
  125:         return pt()
  126: 
  127: 
  128: 
  129: def manage_addVLP_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,path,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
  130:     """add a echo collection"""
  131:     
  132: 
  133:     newObj=VLP_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
  134: 
  135:     self._setObject(id,newObj)
  136:     setattr(newObj,'path',path)
  137: 
  138:     if RESPONSE is not None:
  139:         RESPONSE.redirect('manage_main')
  140: 
  141: 
  142: 
  143: class VLP_resource(ECHO_resource):
  144:     """VLP spezifische Erweiterung"""
  145: 
  146:     meta_type="VLP_resource"
  147: 
  148:     vlp_basis="/mpiwg/online/permanent/vlp"
  149: 
  150:     
  151:     referencetypes=[]
  152: 
  153:     manage_options=ECHO_resource.manage_options+(
  154:         {'label':'Update Index','action':'createIndexFile'},
  155:         {'label':'Reset MetaLink','action':'resetMetaLink'},
  156:         {'label':'Generate Title','action':'generate_title'},
  157:         )
  158: 
  159: 
  160:     def printDict(self):
  161:         """dict"""
  162:         return self.__dict__
  163:     
  164:     ## def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords):
  165: ##         """angepasstes init"""
  166:         
  167:             
  168: ##         return ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
  169: 
  170:         
  171:     def resetMetaLink(self,all="no",RESPONSE=None):
  172:         """resets metalink to standard resp. in case of server change it sets to the new server url"""
  173:         if all=="yes":
  174:             self.metalink=self.absolute_url()+"/index_meta"
  175:         else:
  176:             splitted=self.metalink.split("/")
  177:             if (len(splitted)>1) and (splitted[len(splitted)-1]=="index_meta") and (splitted[len(splitted)-2]==self.getId()): # heuristic nur generische Metadatafiles andern
  178:                 self.metalink=self.absolute_url()+"/index_meta"
  179: 
  180:         if RESPONSE:
  181:             return "done"
  182:             
  183:     def show(self):
  184:         """show the rendered file"""
  185:         pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
  186:         pt.content_type="text/html"
  187:         return pt()
  188:     
  189:     index_html=show
  190:     
  191:     def index_meta(self):
  192:         """index_meta"""
  193:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
  194:         pt.content_type="text/html"
  195:         return pt()
  196:     
  197: 
  198:     def dir2index(self):
  199:         """dir to index"""
  200: 
  201:         def calculateName(str):
  202:             ret="%s: %s"%(str[0],str[1:5])
  203:             return ret
  204: 
  205:         try:
  206:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))
  207:             self.imagePath='pageimg'
  208:         except:
  209:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))
  210:             self.imagePath='pagesHi'
  211:         temp=[]
  212:         for x in ret:
  213:             if not (x[0]=="."):
  214:                 
  215:                 temp.append(calculateName(x))
  216:         return temp
  217: 
  218:     def firstPage(self,url=None):
  219:         """showlink to the first image"""
  220:         if self.REQUEST.get('pn')=="1": #erste seinte dann kein a tag
  221:             return """<img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""
  222: 
  223:         else:
  224:             return """<a href=%s>
  225:                          <img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first
  226:                          </a>
  227:                          """%(self.REQUEST['URL']+"?pn=1")
  228: 
  229:     def lastPage(self,url=None):
  230:         """showlink to the first image"""
  231:         pages=self.readIndexFile(url)
  232:         if pages:
  233:             ln=len(pages)
  234:         
  235:         if self.REQUEST.get('pn')==str(ln): #letzte seite dann kein a tag
  236:             return """<img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""
  237: 
  238:         else:
  239:             return """<a href=%s>
  240:                          <img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last
  241:                          </a>
  242:                          """%(self.REQUEST['URL']+"?pn="+str(ln))
  243:             
  244:     def prevPage(self,url=None):
  245:         """showlink to the first image"""
  246:         
  247: 
  248:         nn = int(self.REQUEST.get('pn','1'))-1
  249:         if nn < 1: #letzte  seite dann kein a tag
  250:             return """<img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""
  251: 
  252:         else:
  253:             return """<a href=%s>
  254:                          <img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev
  255:                          </a>
  256:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
  257: 
  258:     def nextPage(self,url=None):
  259:         """showlink to the first image"""
  260:         pages=self.readIndexFile(url)
  261:         if pages:
  262:             ln=len(pages)
  263: 
  264:         nn = int(self.REQUEST.get('pn','1'))+1
  265:         if nn>int(ln): #letzte  seite dann kein a tag
  266:             return """<img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next"""
  267: 
  268:         else:
  269:             return """<a href=%s>
  270:                          <img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next
  271:                          </a>
  272:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
  273:         
  274:     
  275:     def readIndexFile(self,url=None):
  276:         """reads the indexfile. presently url not None isn't implemented. In the future url can be defined."""
  277:         pagelist=[]
  278:         if not url:
  279:             url=self.absolute_url()+"/index.xml"
  280: 
  281:         fh=urllib.urlopen(url)
  282:         dom=xml.dom.minidom.parse(fh)
  283:         
  284:         
  285:         for page in dom.getElementsByTagName('page'):
  286:             text=getText(page.childNodes)
  287:             pageNum=page.getAttribute('nr')
  288:             pagelist.append((pageNum,text))
  289: 
  290:         return pagelist
  291:     
  292:     def createIndexFile(self,RESPONSE=None):
  293:         """create index file"""
  294: 
  295:         
  296:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_template.zpt').__of__(self)()
  297: 
  298: 
  299:         
  300:         if not hasattr(self,'index.xml'):
  301:             zt=ZopePageTemplate('index.xml')
  302:             self._setObject('index.xml',zt)
  303:         else:
  304:             zt=getattr(self,'index.xml')
  305:             
  306:             
  307:         zt.pt_edit(pt, 'text/xml')
  308: 
  309:         if RESPONSE is not None:
  310:             RESPONSE.redirect('manage_main')
  311: 
  312:         
  313: def manage_addVLP_resourceForm(self):
  314:         """Form for adding a ressource"""
  315:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_resourceForm.zpt').__of__(self)
  316:         return pt()
  317: 
  318: 
  319: 
  320: 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):
  321:     """addaresource"""
  322: 
  323:     
  324:     if metalink=='':
  325:         metalink=self.absolute_url()+"/"+id+"/index_meta"
  326:             
  327:     newObj=VLP_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
  328: 
  329:     self._setObject(id,newObj)
  330: 
  331:     if RESPONSE is not None:
  332:         RESPONSE.redirect('manage_main')
  333:  

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