File:  [Repository] / ECHO_content / VLPExtension.py
Revision 1.9: download - view: text, annotated - select for diffs - revision graph
Tue Jun 8 17:49:31 2004 UTC (20 years ago) by dwinter
Branches: MAIN
CVS tags: HEAD
minors

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

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