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

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