Annotation of OSAS/OSA_system/OSAS_show.py, revision 1.36

1.15      dwinter     1: """ Classes for displaying, browsing and organizing the archive
                      2: 20040303 Needs configuration for rescaling thumbs
1.1       dwinter     3: 
1.15      dwinter     4: """
1.4       dwinter     5: 
1.2       dwinter     6: import addFolder
1.20      dwinter     7: import OSAS_helpers
1.1       dwinter     8: from OFS.Folder import Folder
                      9: from OFS.SimpleItem import SimpleItem
                     10: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     11: from Products.PageTemplates.PageTemplate import PageTemplate
1.8       dwinter    12: from AccessControl import ClassSecurityInfo
1.30      dwinter    13: from Globals import InitializeClass,package_home
1.34      dwinter    14: import zLOG
1.1       dwinter    15: 
                     16: class OSAS_ShowOnline(SimpleItem):
1.8       dwinter    17:     security=ClassSecurityInfo()
                     18:     
1.1       dwinter    19:     """OnlineBrowser"""
                     20:     def __init__(self,id):
                     21:         """initialize a new instance"""
                     22:         self.id = id
                     23: 
                     24:     meta_type="OSAS_ShowOnline"
1.8       dwinter    25:     
                     26:     security.declareProtected('View','index_html')
1.1       dwinter    27:     def index_html(self):
                     28:         """main view"""
1.30      dwinter    29:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_ViewFiles.zpt')).__of__(self)
1.1       dwinter    30:         return pt()
                     31:     
                     32:     def getfilesystem2(self,start,reload=0):
1.32      dwinter    33:         """load filesystem"""
1.1       dwinter    34: 
1.32      dwinter    35:         k=filesystem2(start,1)
                     36:         return k
1.1       dwinter    37: 
                     38:     def tree(self,start):
1.32      dwinter    39:         """get the filetree"""
                     40:         k=browse(start)
                     41:         return k
1.1       dwinter    42: 
                     43:     def path_to_link_view(self,path):
                     44:         """generates navigation bar for viewfiles"""
                     45:         return path_to_link_view(self.REQUEST['URL'],path)
                     46:     
                     47:     def isdigilib2(self,path):
                     48:         """check if digilib"""
                     49:         return isdigilib2(path)
                     50: 
                     51:     def changeName(self,name):
                     52:         return changeName(name)
                     53: 
                     54:     def hasMetafile(self,path):
                     55:         return hasMetafile(path)
                     56: 
                     57:     def getMetafile(self,path):
1.28      dwinter    58:         
1.29      dwinter    59:         return getMetafile(path).decode('utf-8')
1.1       dwinter    60: 
                     61:     def toggle_view(self,path,file):
1.36    ! casties    62:         """Oeffnen bzw. schliessen der Subfolders"""
1.1       dwinter    63:         self.tree(path).toggle(path,file)
                     64:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path)
1.8       dwinter    65: 
1.20      dwinter    66:     
1.8       dwinter    67: InitializeClass(OSAS_ShowOnline)
                     68: 
1.1       dwinter    69: def manage_AddOSAS_ShowOnlineForm(self):
                     70:     """interface for adding the OSAS_root"""
1.30      dwinter    71:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_ShowOnline.zpt')).__of__(self)
1.1       dwinter    72:     return pt()
                     73: 
                     74: def manage_AddOSAS_ShowOnline(self,id,RESPONSE=None):
                     75:     """add the OSAS_root"""
                     76:     newObj=OSAS_ShowOnline(id)
                     77:     self._setObject(id,newObj)
                     78:     if RESPONSE is not None:
                     79:         RESPONSE.redirect('manage_main')
                     80: 
                     81: 
1.2       dwinter    82: class OSAS_StoreOnline(SimpleItem):
1.36    ! casties    83:     """Webfrontend fuer das Storagesystem"""
1.8       dwinter    84:     security=ClassSecurityInfo()
                     85:     
1.2       dwinter    86:     def __init__(self,id):
                     87:         """initialize a new instance"""
                     88:         self.id = id
                     89: 
                     90:     meta_type="OSAS_StoreOnline"
                     91: 
1.8       dwinter    92:     security.declareProtected('View','index_html')
1.2       dwinter    93:     def index_html(self):
                     94:         """main view"""
1.30      dwinter    95:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_StoreFiles.zpt')).__of__(self)
1.2       dwinter    96:         return pt()
                     97: 
1.4       dwinter    98:     def readContexts(self,path):
                     99:         """Zeige Contexte"""
1.6       dwinter   100:         if os.path.exists(path+"/index.meta"):
1.7       dwinter   101:             
1.6       dwinter   102:             return readContexts(path)
1.7       dwinter   103:             
1.6       dwinter   104:         else:
1.7       dwinter   105:             
1.6       dwinter   106:             return []
1.9       dwinter   107: 
                    108:     def rescaleThumbs(self,path):
1.14      dwinter   109:         """rescale thumbs of images in path"""
1.9       dwinter   110: 
1.25      casties   111:         dlpath = re.sub('/mpiwg/online/','',self.REQUEST['path'])
1.34      dwinter   112:         ret=os.popen("ssh archive@nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat -src=/mpiwg/online -dest=/mpiwg/temp/online/scaled/thumb -dir=%s -scaleto=100 -sync >> /tmp/sc.out &"%dlpath )
1.25      casties   113:         #os.popen("ssh archive@nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat.pl %s /mpiwg/temp/online/scaled/thumb 90 --replace >> /tmp/sc.out &"% re.sub('/mpiwg/online/','',self.REQUEST['path']))
1.34      dwinter   114:    zLOG.LOG("OSAS_StoreOnline (rescleThumbs)",zLOG.INFO,ret.read())
                    115:    zLOG.LOG("OSAS_StoreOnline (rescleThumbs)",zLOG.INFO,"ssh archive@nausikaa2.rz-berlin.mpg.de /usr/local/mpiwg/scripts/scaleomat -src=/mpiwg/online -dest=/mpiwg/temp/online/scaled/thumb -dir=%s -scaleto=100 -sync >> /tmp/sc.out &"%dlpath)
1.10      dwinter   116:         self.REQUEST.SESSION['path']=self.REQUEST['path']
                    117:         #return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1'])
1.30      dwinter   118:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_scaled.zpt')).__of__(self)
1.10      dwinter   119:         return pt()
                    120: 
                    121:     
1.2       dwinter   122:     def getfilesystem2(self,start,reload=0):
1.32      dwinter   123:         """load filesystem"""
1.2       dwinter   124: 
1.32      dwinter   125:         k=filesystem2(start,1)
                    126:         return k
1.2       dwinter   127: 
                    128:     def tree(self,start):
1.32      dwinter   129:         """get the filetree"""
                    130:         k=browse(start)
                    131:         return k
1.2       dwinter   132: 
                    133:     def path_to_link_store(self,path):
                    134:         """generates navigation bar for viewfiles"""
                    135:         return path_to_link_store(self.REQUEST['URL'],path)
                    136:     
                    137:     def isdigilib2(self,path):
                    138:         """check if digilib"""
                    139:         return isdigilib2(path)
                    140: 
                    141:     def changeName(self,name):
                    142:         return changeName(name)
                    143: 
                    144:     def hasMetafile(self,path):
                    145:         return hasMetafile(path)
                    146: 
                    147:     def getMetafile(self,path):
1.28      dwinter   148:         
                    149:         return getMetafile(path).decode('utf-8')
1.2       dwinter   150: 
                    151:     def toggle_view(self,path,file):
1.36    ! casties   152:         """Oeffnen bzw. schliessen der Subfolders"""
1.2       dwinter   153:         self.tree(path).toggle(path,file)
                    154:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path)
                    155: 
                    156:     def isFolder(self,path):
                    157:         """Test ob Eintrag ein Folder ist"""
                    158:         return isFolder(self,path)
                    159:     
                    160:     def isScannedDocument(self,path):
1.14      dwinter   161:         """Test ob Eintrag ein Scanned Document ist"""
1.2       dwinter   162:         return isScannedDocument(self,path)
                    163: 
                    164:     def isFullText(self,path,folder_name):
                    165:         """Test ob Eintrag ein Folder ist"""
                    166:         return isFullText(path,folder_name)
                    167: 
1.24      dwinter   168:     def isPdf(self,path,folder_name):
                    169:         """Test ob Eintrag ein Folder mit pdf2 ist"""
                    170:         return isPdf(path,folder_name)
                    171: 
                    172: 
1.17      dwinter   173:     def isPresentation(self,path,folder_name):
                    174:         """Test ob Eintrag ein Folder ist"""
                    175:         return isPresentation(path,folder_name)
                    176: 
1.14      dwinter   177:     def date(self):
1.32      dwinter   178:         return strftime("%d.%m.%Y",localtime()) 
1.14      dwinter   179: 
1.2       dwinter   180:     def addFolderForm(self,path):
                    181:         """add a new path"""
1.30      dwinter   182:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_addFolder.zpt')).__of__(self)
1.2       dwinter   183:         return pt()
                    184: 
1.18      dwinter   185:     def showHelp(self,refType,genericTag):
                    186:         """helptext"""
                    187:         for reference in self.ZopeFind(self.standardMD):
                    188:             if reference[1].title==refType:
                    189:                 text=getattr(reference[1],'md_'+genericTag)[2]
                    190:                 return text
                    191:         return "NO EXPLANATION"
                    192: 
                    193:     def showHelpTag(self,url,reftype,item):
                    194:         """gen javascript for showhelp"""
                    195:         url2=url+'/showHelp?refType=%s&genericTag=%s'%(reftype,item)
                    196:         ret="""javascript:wd=window.open(\'%s\',\'Help\',\'width=300,height=250\');void(\'\');wd.focus();"""%url2
                    197:         return ret
                    198: 
1.2       dwinter   199:     def addFolder(self,path,folder_name,description,archive_creation_date,creator):
                    200:         """add the folder to the filesystem and write the metadata files"""
                    201:         return addFolder.addFolder(self,path,folder_name,description,archive_creation_date,creator)
                    202: 
                    203:     def EditIndex(self,path):
                    204:         """Editiere das Index Metafile"""
                    205:         try:
                    206:             dom=xml.dom.minidom.parse(path+"/index.meta")
1.27      dwinter   207:             indexmeta=dom.toxml(encoding='UTF-8')
1.2       dwinter   208:         except:
                    209:             indexmeta=""
1.14      dwinter   210:             
1.2       dwinter   211:         self.REQUEST.SESSION['indexmeta']=indexmeta
                    212:         self.REQUEST.SESSION['path']=path
1.30      dwinter   213:         newtemplate=PageTemplateFile(os.path.join(package_home(globals()),'zpt','editindex')).__of__(self)
1.2       dwinter   214:         return newtemplate()
                    215: 
                    216:     def EditIndex2(self):
                    217:         """Sichern der Aenderungen in Index.meta"""
                    218:         if not self.REQUEST.has_key('fileupload'):
                    219:             #newtext=urllib.unquote(self.REQUEST['indexmeta'])
                    220:             newtext=self.REQUEST['indexmeta']
1.3       dwinter   221:            
1.2       dwinter   222:         else:
                    223:             self.file_name=self.REQUEST['fileupload'].filename
                    224:             #newtext=self.REQUEST.form['fileupload'].read()
                    225:             # HACK DW
                    226:             newtext=self.REQUEST['indexmeta']
                    227:             
                    228:         indexmeta=file(self.REQUEST.SESSION['path']+"/index.meta","w")
                    229:         indexmeta.writelines(newtext)
                    230:         return self.REQUEST.response.redirect(self.REQUEST['URL1']+"?path="+self.REQUEST.SESSION['path'])
                    231:       
1.3       dwinter   232:     def add_metafile(self):
                    233:         """nothing"""
1.30      dwinter   234:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','OSAS_addmetadata.zpt')).__of__(self)
1.3       dwinter   235:         return pt()
1.4       dwinter   236: 
1.20      dwinter   237:     def getTextToolsField(self,path,name,default=''):
                    238:         """Lese Textoolsfelder aus index.meta im path aus"""
                    239:         
                    240:         try:
                    241:             dom=xml.dom.minidom.parse(path+"/index.meta")
                    242:             node=dom.getElementsByTagName('texttool')[0] #getNode
                    243:             subnode=node.getElementsByTagName(name)[0]
1.22      dwinter   244: 
                    245:             # bei text wird nur der Folder gebraucht
                    246:             if name=="text":
                    247:                 splitted=getText(subnode.childNodes).split("/")
                    248:                 return splitted[len(splitted)-2]
                    249:             else:
                    250:                 return getText(subnode.childNodes)
1.20      dwinter   251:         except:
                    252:             return default
                    253:             
1.23      dwinter   254:     def getViewerTemplateSets(self,obj_ids=None):
                    255:         """Get the ViewerTemplateSet title for configuration"""
1.20      dwinter   256:         ret=[]
                    257:         
                    258:         try:
1.23      dwinter   259:             viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
1.20      dwinter   260:             
1.23      dwinter   261:             for viewerTemplateSet in viewerTemplateSets:
                    262:                 ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
1.20      dwinter   263:             
                    264:             return ret
                    265:         
                    266:         except:
1.23      dwinter   267:             return [('no ViewerTemplateSetfolders','')]
1.20      dwinter   268: 
                    269:     def changeTemplatesForm(self,path):
                    270:         """changeform"""
                    271:         path=self.REQUEST.SESSION['path']=path
1.30      dwinter   272:         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeTemplatesForm.zpt')).__of__(self)
1.20      dwinter   273:         return pt()
                    274: 
                    275:         
                    276: 
1.21      dwinter   277:     def changeTemplates(self,path,RESPONSE=None):
1.20      dwinter   278:         """Andere alle Eintraege in index.meta"""
1.21      dwinter   279:         os.path.walk(path,OSAS_helpers.changeIndexMeta,self.REQUEST.form)
1.32      dwinter   280:         if RESPONSE is not None:
                    281:                 RESPONSE.redirect(self.REQUEST['URL1']+"?path="+self.REQUEST.SESSION['path'])
1.20      dwinter   282: 
                    283:         
1.8       dwinter   284: InitializeClass(OSAS_StoreOnline)
1.32      dwinter   285:         
1.2       dwinter   286: def manage_AddOSAS_StoreOnlineForm(self):
                    287:     """interface for adding the OSAS_root"""
1.30      dwinter   288:     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddOSAS_StoreOnline.zpt')).__of__(self)
1.2       dwinter   289:     return pt()
                    290: 
                    291: def manage_AddOSAS_StoreOnline(self,id,RESPONSE=None):
                    292:     """add the OSAS_root"""
                    293:     newObj=OSAS_StoreOnline(id)
                    294:     self._setObject(id,newObj)
                    295:     if RESPONSE is not None:
                    296:         RESPONSE.redirect('manage_main')
                    297: 
1.1       dwinter   298: 
                    299: 
                    300: 
1.4       dwinter   301: def readContexts(path):
                    302:     """ReadContext from index.meta"""
                    303:     dom=xml.dom.minidom.parse(path+"/index.meta")
                    304:     nodes=dom.getElementsByTagName('context')
                    305:     ret=[]
                    306:     
1.7       dwinter   307:     
1.4       dwinter   308:     for node in nodes:
1.7       dwinter   309:         try:
                    310:             link=getText(node.getElementsByTagName('link')[0].childNodes)
                    311:             name=getText(node.getElementsByTagName('name')[0].childNodes)
                    312:             ret.append((link,name))
                    313:         except:
                    314:             """nothing"""
1.4       dwinter   315:     return ret
                    316: 
                    317:     
1.1       dwinter   318: ### Ab hier Baustelle
                    319: 
                    320:         
                    321: from types import *
                    322: import urllib
                    323: import os
                    324: import sys
                    325: import re
                    326: from AccessControl import ClassSecurityInfo
                    327: from AccessControl.Role import RoleManager
                    328: from Acquisition import Implicit
                    329: from Globals import Persistent
1.16      dwinter   330: try:
                    331:     from time import strptime
                    332: except:
                    333:     print "ignoring time.strptime import"
                    334:     
1.1       dwinter   335: from time import strftime
                    336: import time
                    337: import os.path
                    338: import dircache
                    339: import xml.dom.minidom
                    340: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                    341: from Products.PageTemplates.PageTemplate import PageTemplate
                    342: import tempfile
1.31      dwinter   343: tempfile.tempdir="/var/tmp"
1.1       dwinter   344: 
                    345: exclusion=[".HSResource","lost+found","Network Trash Folder","TheFindByContentFolder","TheVolumeSettingsFolder"]
1.35      casties   346: 
1.1       dwinter   347: class fsentry(Implicit, Persistent, RoleManager):
                    348:       """File entry class"""
                    349:       path = ""
                    350:       user = ""
                    351:       month = ""
                    352:       date =""
                    353:       time = ""
                    354:       
                    355:       security=ClassSecurityInfo()
                    356:       def __init__(self,extpath):
1.32      dwinter   357:              """initialize class"""
                    358:              extpath=os.path.abspath(re.search(r"(.*)\n",extpath).group(1))
1.1       dwinter   359:              self.all=extpath
1.32      dwinter   360:              self.path=extpath
                    361:              self.user=""
                    362:              self.mtime=os.path.getmtime(extpath)
1.1       dwinter   363:           
                    364:           
                    365:       security.declarePublic('getPath')
                    366:       def getPath(self):
1.32      dwinter   367:           """Ausgabe von path"""
                    368:           return self.path
1.1       dwinter   369: 
                    370:       security.declarePublic('getUser')
                    371:       def getUser(self):
1.32      dwinter   372:           """Ausgabe von user"""
                    373:           return self.user
1.1       dwinter   374: 
                    375:       security.declarePublic('getDate')
                    376:       def getDate(self):
1.32      dwinter   377:           """Ausgabe von Date"""
                    378:           return strftime("%Y%m%d%H%M",time.gmtime(self.mtime))
                    379:                           
1.1       dwinter   380:       security.declarePublic('getDate')
                    381:       def getID(self):
1.32      dwinter   382:           """Ausgabe einer eindeutigen Sortierbaren ID"""
                    383:           return self.getDate()+self.getPath()
                    384:                 
1.1       dwinter   385:       security.declarePublic('getTime')
                    386:       def getTime(self):
1.32      dwinter   387:           """Ausgabe von path"""
                    388:           return self.time
1.1       dwinter   389:       security.declarePublic('getAll')
                    390:       def getAll(self):
1.32      dwinter   391:           """Ausgabe von path"""
                    392:           return self.all
1.1       dwinter   393: 
                    394: class filesystem(Implicit, Persistent, RoleManager):
                    395:       """store filesystem"""
                    396:       node={}
                    397:       hasindex={}
                    398:       security=ClassSecurityInfo()
                    399:      
                    400:       def getfs(self,start):
                    401:         """load filessystem"""
                    402:         f = os.popen("find "+ start+" -name '*' ","r")
1.32      dwinter   403:         lines = f.readlines()
                    404:         
1.1       dwinter   405:         return lines
                    406: 
                    407:       def loadfs(self,start):
                    408:         """analyse filesystem"""
1.32      dwinter   409:         for line in self.getfs(start):
                    410:             
                    411:             g=re.search(r"(.*/)(.*)\n",line)
                    412:             if not g==None:
                    413:                     path=g.group(1)
                    414:                     file=g.group(2)
                    415:                     if self.node.has_key(path):
                    416:                      elements=self.node[path]
                    417:                      elements.append(file)
                    418:                      self.node[path]=elements
                    419:                     else:
                    420:                      self.node[path]=[file]
                    421:                     if (file=="index.meta") | (file=="meta"):
                    422:                      self.hasindex[path]="1"
1.1       dwinter   423:        
                    424:       def __init__(self,start,reload=0):
                    425:            if reload==1:
1.32      dwinter   426:                    self.node={}
                    427:                    self.hasindex={}
                    428:                    self.loadfs(start)
1.1       dwinter   429:                    
                    430:           
                    431:       security.declarePublic('getNode')
                    432:       def getNode(self):
1.32      dwinter   433:            return self.node
1.1       dwinter   434:       
                    435:       security.declarePublic('getKeys')
                    436:       def getKeys(self):
1.32      dwinter   437:            return self.node.keys()
1.1       dwinter   438:       
                    439:       security.declarePublic('clearnode')
                    440:       def clearnode(self):
1.32      dwinter   441:            self.node={}
                    442:            return 0
1.1       dwinter   443: 
                    444:       security.declarePublic('hasIndex')
                    445:       def hasIndex(self,path):
1.32      dwinter   446:         
                    447:            return self.hasindex.has_key(path)
1.1       dwinter   448: 
                    449:       
                    450:       def onlyIndex_old(self):
1.32      dwinter   451:            """return only files with archive material"""
                    452:            j={}
                    453:            for k in self.node:
                    454:                if self.hasindex.has_key(k):
                    455:                   if len(self.node[k])>1:
                    456:                      if (len(self.node[k])==2) & ('meta' not in self.node[k]):
                    457:                         j[k]=self.node[k]
                    458:                      elif (len(self.node[k])==2) & ('meta' in self.node[k]):
1.1       dwinter   459:                         """ nothing """
1.32      dwinter   460:                      else:
                    461:                         j[k]=self.node[k]         
                    462:            return j
1.1       dwinter   463: 
                    464:       def archive_the_path(self,path):
                    465:            """parse indexmeta and return digilib path"""
1.13      dwinter   466:            
1.1       dwinter   467:            try:
                    468:                  #f = os.popen("cat "+path+"/index.meta","r")
                    469:                  f =file(path+"/index.meta","r")
                    470:                  
                    471:                  lines = f.read()
1.13      dwinter   472:                  
1.1       dwinter   473:                  try:
                    474:                        dom = xml.dom.minidom.parseString(lines)
1.13      dwinter   475:                        if dom.getElementsByTagName("content-type"):
                    476:                            if getText(dom.getElementsByTagName("content-type")[0].childNodes)=="folder":
                    477:                                """folder nicht archivieren"""
                    478:                                return 0
                    479:                            
                    480:                        archive_storage_date=getText(dom.getElementsByTagName("archive-storage-date")[0].childNodes)
                    481:                        
                    482:                        if archive_storage_date=="":
                    483:                            
                    484:                            """leer also archivieren"""
                    485:                            return 1
1.1       dwinter   486:                        else:
1.13      dwinter   487:                            """nicht archivieren"""
                    488:                            return 0
1.1       dwinter   489:                  except:
                    490:                        """kein tag also archivieren"""
                    491:                        return 1
                    492:            except:
                    493:                  """kein index.meta also nicht archivieren"""
                    494:                  return 0
                    495:      
                    496:       security.declarePublic('onlyIndex')
                    497:       def onlyIndex(self):
1.32      dwinter   498:            """return only files with archive material (archive-storage-date not set)"""
                    499:            j={}
1.1       dwinter   500:            
1.32      dwinter   501:            for k in self.node:
                    502:               if self.archive_the_path(k):
1.1       dwinter   503:                     j[k]=self.node[k]
1.32      dwinter   504:            return j
1.1       dwinter   505:       security.declarePublic('getImageDirs')
                    506:       def getImageDirs(self,dom,path):
1.32      dwinter   507:           dirs=dom.getElementsByTagName("dir")
                    508:           dirback=[]
                    509:           for dir in dirs:
                    510:               temp=getText(dir.getElementsByTagName("name")[0].childNodes)
                    511:               temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
                    512:               if not temp2==None:
1.1       dwinter   513:                     try:
                    514:                           dirback.append(temp2.group(2))
                    515:                     except:
                    516:                           """nothing"""
1.32      dwinter   517:               else:
                    518:                 dirback.append(temp)
1.1       dwinter   519:           return dirback
                    520:       
                    521:          
                    522:       
                    523: 
1.32      dwinter   524:       security.declarePublic('digilib')   
1.1       dwinter   525:       def digilib(self, path):
1.32      dwinter   526:           """check if folder is a container for digilib files"""
                    527:           if self.hasindex.has_key(path+"/"):
                    528:                 return(self.parseIndexMeta(path))
                    529:           else:
                    530:                 return "NO"
1.1       dwinter   531: 
                    532: 
                    533:      
                    534: 
1.32      dwinter   535:       security.declarePublic('isdigilib')         
1.1       dwinter   536:       def isdigilib(self, path):
1.32      dwinter   537:           """return number of possible image directories usefull for digilib""" 
                    538:           if self.hasindex.has_key(path+"/"):
                    539:              return(len(self.parseIndexMeta(path)))
                    540:           else:
                    541:              return 0
1.1       dwinter   542: 
                    543:       security.declarePublic('parseIndexMeta')
                    544:       def parseIndexMeta(self,k):
1.32      dwinter   545:           """parse indexmeta and return digilib path"""
                    546:           f = os.popen("cat "+k+"/index.meta","r")
1.1       dwinter   547:           lines = f.read()
1.32      dwinter   548:           
1.1       dwinter   549:           try:
1.32      dwinter   550:            dom = xml.dom.minidom.parseString(lines)
                    551:            content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    552:            if (content_type=="scanned-document") or (content_type=="scanned document"):
                    553:                    dirs=self.getImageDirs(dom,k)
                    554:                 
                    555:            return dirs
                    556:           except:
                    557:            return []
                    558:           
                    559:           
1.1       dwinter   560: class filesystem2(Implicit, Persistent, RoleManager):
                    561:       """store filesystem"""
                    562:       node={}
                    563:       hasindex={}
                    564:       security=ClassSecurityInfo()
                    565:      
                    566:       def getfs(self,start):
                    567:         """load filessystem"""
1.13      dwinter   568:         
1.1       dwinter   569:         f = os.popen("find "+ start+" -name '*' ","r")
1.32      dwinter   570:         lines = f.readlines()
                    571:         
1.1       dwinter   572:         return lines
                    573: 
                    574:       def loadfs(self,start):
                    575:         """analyse filesystem"""
1.32      dwinter   576:         for line in self.getfs(start):
1.35      casties   577:             logging.debug("loadfs: reading %s"%repr(line))
1.32      dwinter   578:             g=re.search(r"(.*/)(.*)\n",line)
                    579:             if not g==None:
1.1       dwinter   580:                   try:
                    581:                         path=g.group(1)
                    582:                         file=g.group(2)
                    583:                   except:
                    584:                         """nothing"""
1.35      casties   585:                   logging.debug("loadfs: file=%s"%repr(file))
                    586:                   #if file[0] in ('.',':'):
                    587:                       # skip dot-files
                    588:                   #    continue
1.1       dwinter   589:                   if self.node.has_key(path):
1.32      dwinter   590:                      elements=self.node[path]
                    591:                      elements.append(file)
                    592:                      self.node[path]=elements
1.1       dwinter   593:                   else:
1.32      dwinter   594:                      self.node[path]=[file]
1.1       dwinter   595:                   if (file=="index.meta") | (file=="meta"):
                    596:                      self.hasindex[path]="1"
                    597:        
                    598:       def __init__(self,start,reload=0):
                    599:            """nothing"""
                    600:            
                    601:            
                    602:       security.declarePublic('getImageDirs')
                    603:       def getImageDirs(self,dom,path):
1.32      dwinter   604:           dirs=dom.getElementsByTagName("dir")
                    605:           dirback=[]
                    606:           for dir in dirs:
                    607:               temp=getText(dir.getElementsByTagName("name")[0].childNodes)
                    608:               temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
                    609:               if not temp2==None:
1.1       dwinter   610:                     try:
                    611:                           dirback.append(temp2.group(2))
                    612:                     except:
                    613:                           """nothing"""
1.32      dwinter   614:               else:
                    615:                 dirback.append(temp)
1.1       dwinter   616:           return dirback
                    617:       
                    618:          
1.32      dwinter   619:       security.declarePublic('digilib')   
1.1       dwinter   620:       def digilib(self, path):
1.32      dwinter   621:           """check if folder is a container for digilib files"""
                    622:           if os.path.exists(path+"/index.meta"):
                    623:                 return(self.parseIndexMeta(path))
                    624:           else:
                    625:                 return "NO"
1.1       dwinter   626: 
1.32      dwinter   627:       security.declarePublic('isdigilib')         
1.1       dwinter   628:       def isdigilib(self, path):
1.32      dwinter   629:           if os.path.exists(path+"/index.meta"):
                    630:              return(len(self.parseIndexMeta(path)))
                    631:           else:
                    632:              return 0
1.1       dwinter   633:       security.declarePublic('parseIndexMeta')
                    634:       def parseIndexMeta(self,k):
1.32      dwinter   635:           """parse indexmeta and return digilib path"""
                    636:           f = os.popen("cat "+k+"/index.meta","r")
1.1       dwinter   637:           lines = f.read()
1.32      dwinter   638:           
1.1       dwinter   639:           try:
1.32      dwinter   640:            dom = xml.dom.minidom.parseString(lines)
                    641:            content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    642:            if content_type=="scanned-document":
                    643:                    dirs=self.getImageDirs(dom,k)
                    644:                 
                    645:            return dirs
                    646:           except:
                    647:            return []
                    648:           
                    649:           
1.1       dwinter   650: class browse(Implicit, Persistent, RoleManager):
                    651:       
                    652:       security=ClassSecurityInfo()
                    653:       tree={}
                    654:       toggledict={}
                    655: 
                    656:       def filterExcluded(self,dir):
1.32      dwinter   657:           ret=[]
                    658:           for item in dir:
1.35      casties   659:                 if not ((item in exclusion) or (item[0] in ('.',':'))):
1.32      dwinter   660:                         ret.append(item) 
                    661:           return ret
                    662:         
1.1       dwinter   663:       def __init__(self,startpath):
1.32      dwinter   664:           self.tree={}
                    665:           self.tree[startpath]=self.filterExcluded(dircache.listdir(startpath))
1.1       dwinter   666: 
                    667:       security.declarePublic('getTree')
1.32      dwinter   668:       def getTree(self,path):   
                    669:           if self.tree.has_key(path):
                    670:                     return self.tree[path]
1.1       dwinter   671:           else:
1.32      dwinter   672:              self.tree[path]=self.filterExcluded(dircache.listdir(path))
                    673:              return self.tree[path]
1.1       dwinter   674:       
                    675:       security.declarePublic('isDirectory')
1.32      dwinter   676:       def isDirectory(self,path,file):  
                    677:           return os.path.isdir(os.path.abspath(path+"/"+file))
1.1       dwinter   678:       
                    679:       security.declarePublic('toggle')
                    680:       def toggle(self,tmppath,file):
1.32      dwinter   681:           path=tmppath+"/"+file
                    682:           
                    683:           if self.toggledict.has_key(path):
                    684:              if self.toggledict[path]==0:
                    685:                 self.toggledict[path]=1
                    686:                 
                    687:              else:
                    688:                 self.toggledict[path]=0
1.1       dwinter   689:                 
                    690:           else:
1.32      dwinter   691:              self.toggledict[path]=4
                    692:              
1.1       dwinter   693: 
                    694:       security.declarePublic('isToggle')
                    695:       def isToggle(self,tmppath,file):
1.32      dwinter   696:           path=tmppath+"/"+file
1.1       dwinter   697: 
1.32      dwinter   698:           if self.toggledict.has_key(path):
                    699:                 
                    700:                 return self.toggledict[path]
1.1       dwinter   701:           else:
1.32      dwinter   702:                 
                    703:                 return 0      
1.1       dwinter   704: 
                    705:       
                    706: def getfs(start):
1.32      dwinter   707:         """return filesystem"""
1.13      dwinter   708:         
                    709: 
1.1       dwinter   710:         f = os.popen("find "+ start+" -name '*'","r")
1.32      dwinter   711:         lines = f.readlines()
1.1       dwinter   712:         return lines
                    713: 
                    714: def showall(start):
1.32      dwinter   715:         lines = getfs(start)
                    716:         for line in lines:
                    717:             print line
1.1       dwinter   718:         return 0
                    719: 
                    720: def entries(start):
1.32      dwinter   721:         """retrun list of entries of a filesystem"""
                    722:         i=0
                    723:         fs=[]
                    724:         lines=getfs(start)
                    725:         for line in lines:
1.1       dwinter   726:             try:
                    727:                   if os.path.exists(os.path.abspath(re.search(r"(.*)\n",line).group(1))):
                    728:                         fs.append(fsentry(line))
                    729:                         i=i+1
                    730:             except:
                    731:                   """nothing"""
1.32      dwinter   732:         return fs
1.1       dwinter   733: 
                    734: def getfilesystem(start,reload=0):
1.32      dwinter   735:         """load filesystem"""
                    736:         
                    737:         k=filesystem(start,1)
                    738:         return k
1.1       dwinter   739: 
                    740: 
                    741: 
                    742: def sort_by_date(fs):
1.32      dwinter   743:         """sorts lists of fileentries"""
                    744:         ls=[]
                    745:         dict={}
                    746:         for k in fs:
1.1       dwinter   747:             ls.append(k.getID())
1.32      dwinter   748:             dict[k.getID()]=k
                    749:         ls.sort()
1.1       dwinter   750:         ls.reverse()
                    751:         ret=[]
1.32      dwinter   752:         for j in ls:
                    753:             ret.append(dict[j])
1.1       dwinter   754:         return ret
                    755: 
                    756: def path_to_link(path):
                    757:     """generates navigation bar for showfiles"""
                    758:     string=""
                    759:     
                    760:     tmppath=os.path.dirname(path)
                    761:     i=0
                    762:     pathes=[[path, os.path.basename(path)]]
                    763:     
                    764:     while not (len(tmppath)==1):
1.32      dwinter   765:           
                    766:           i=i+1
                    767:           if i>20: break
                    768:         
                    769:           pathes.append([tmppath, os.path.basename(tmppath)])
                    770:           tmppath=os.path.dirname(tmppath)
1.1       dwinter   771: 
                    772:     while i>=0:
1.32      dwinter   773:           string=string+"<a href=showfiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    774:           
                    775:           i=i-1
1.1       dwinter   776:     return string
                    777: 
                    778: def path_to_link_view(URL,path):
                    779:     """generates navigation bar for viewfiles"""
                    780:     string=""
                    781:     
                    782:     tmppath=os.path.dirname(path)
                    783:     i=0
                    784:     pathes=[[path, os.path.basename(path)]]
                    785:     
                    786:     while not (len(tmppath)==1):
1.32      dwinter   787:           
                    788:           i=i+1
                    789:           if i>20: break
                    790:           
                    791:           pathes.append([tmppath, os.path.basename(tmppath)])
                    792:           tmppath=os.path.dirname(tmppath)
1.1       dwinter   793: 
                    794:     while i>=0:
1.32      dwinter   795:           string=string+"<a href="+URL+"?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    796:           
                    797:           i=i-1
1.1       dwinter   798:     return string
                    799: 
1.2       dwinter   800: def path_to_link_store(URL,path):
1.1       dwinter   801:     """generates navigation bar for viewfiles"""
                    802:     string=""
                    803:     
                    804:     tmppath=os.path.dirname(path)
                    805:     i=0
                    806:     pathes=[[path, os.path.basename(path)]]
                    807:     
                    808:     while not (len(tmppath)==1):
1.32      dwinter   809:           
                    810:           i=i+1
                    811:           if i>20: break
                    812:           
                    813:           pathes.append([tmppath, os.path.basename(tmppath)])
                    814:           tmppath=os.path.dirname(tmppath)
1.1       dwinter   815: 
                    816:     while i>=0:
1.32      dwinter   817:           string=string+"<a href="+URL+"?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    818:           
                    819:           i=i-1
1.1       dwinter   820:     return string
                    821: 
                    822: 
                    823: class Error(Implicit, Persistent, RoleManager):
1.32      dwinter   824:         
                    825:         error=[]
                    826:         security=ClassSecurityInfo()
                    827:         def __init__(self,initerror):
1.1       dwinter   828:               self.error=initerror[0:]
                    829: 
1.32      dwinter   830:         security.declarePublic('getError')
                    831:         def getError(self):
                    832:                 return self.error
1.1       dwinter   833: 
                    834: class metacheck(Implicit, Persistent, RoleManager):
                    835:         lines=[]
1.32      dwinter   836:         security=ClassSecurityInfo()
                    837:         def parsearchive(self,str):
                    838:                 """parse for error"""
                    839:                 retstr=''
1.1       dwinter   840:                 
                    841:                 if not len(str)==0:
                    842:                       for line in str:
                    843:                             retstr=retstr+line+"<br>"
                    844:                       check=re.search(r"(.*):(.*)",line)
                    845:                       if check.group(1)=='ABORT':
                    846:                             error="error"
                    847:                       elif check.group(1)=='DONE':
                    848:                             error="ok"
                    849:                       else:
                    850:                             error="running"
                    851:                             
                    852:                       return [retstr,error]
                    853:                 else:
                    854:                       return ['','running']
1.32      dwinter   855:         def __init__(self,path):
                    856:                 """archive the documents in path"""
                    857:                 self.lines=[]
                    858:                 
                    859:                 if type(path)==StringType:
                    860:                         f = os.popen("/usr/local/mpiwg/archive/metacheck "+path,"r")
                    861:                         self.lines.append(Error([path,self.parsearchive(f.readlines())]))
                    862:                 else:
                    863:                         for singlepath in path:
                    864:                                 f = os.popen("/usr/local/mpiwg/archive/metacheck "+singlepath,"r")
                    865:                                 self.lines.append(Error([singlepath,self.parsearchive(f.readlines())]))
1.1       dwinter   866:         security.declarePublic('messages')
1.32      dwinter   867:         
                    868:         def messages(self):
                    869:                 return self.lines
                    870:         
                    871:                 
1.1       dwinter   872: 
                    873: 
                    874: class archive(Implicit, Persistent, RoleManager):
                    875:       lines=[]
                    876:       security=ClassSecurityInfo()
                    877:       def parsearchive(self,str):
                    878:             """parse for error"""
                    879:             retstr=''
                    880:             
                    881:             if not len(str)==0:
                    882:                   for line in str:
                    883:                         retstr=retstr+line+"<br>"
                    884:                   check=re.search(r"(.*):(.*)",line)
                    885:                   if check.group(1)=='ABORT':
                    886:                         error="error"
                    887:                   elif check.group(1)=='DONE':
                    888:                         error="ok"
                    889:                   else:
                    890:                         error="running"
                    891:                   
                    892:                   return [retstr,error]
                    893:             else:
                    894:                   return ['','running']
                    895:                   
                    896:       def __init__(self,path,session):
                    897:             """archive the documents in path"""
                    898:             self.lines=[]
                    899:             self.filenames={}
                    900:             session['archiver']=self
                    901:            
                    902:            
                    903:             if type(path)==StringType:
                    904:                   self.filenames[path]=tempfile.mktemp()
                    905:                   f = os.popen("/usr/local/mpiwg/archive/archiver "+path+" > "+self.filenames[path]+" &","r")
                    906:             else:
                    907:                   for singlepath in path:
                    908:                         self.filenames[singlepath]=tempfile.mktemp()
                    909:                         f = os.popen("/usr/local/mpiwg/archive/archiver "+singlepath+" > "+self.filenames[singlepath]+" &","r")
                    910:                             
                    911:       security.declarePublic('messages')
                    912:       def messages(self):
                    913:             self.lines=[]
                    914:             for path in self.filenames.keys():
                    915:                   
                    916:                   self.lines.append(Error([path,self.parsearchive(open(self.filenames[path],"r").readlines())]))
                    917:             return self.lines
                    918: 
1.32      dwinter   919:         
1.1       dwinter   920: def evalext(str):
                    921:      return eval(str)
                    922: 
                    923: def storeerror(ret,path,context,i):
                    924:      session=context.REQUEST.SESSION
                    925:      session['error%i'%i]=ret
                    926:      session['path%i'%i]=path
                    927:      
                    928:      return 'error?number=%i'%i
                    929: 
                    930: def geterror(str,context):
                    931:      session=context.REQUEST.SESSION
                    932:      return session[str]
                    933: 
                    934: def readfile(path):
                    935:      
                    936:      ret=""
                    937:      f=open(path,'r')
                    938:      for g in f.readlines():
1.32      dwinter   939:         ret=ret+g
1.1       dwinter   940:      return ret
                    941: 
                    942: def writefile(self,path,txt,REQUEST):
                    943:      f=open(path,'w')
                    944:      f.write(txt)
                    945:      f.close()
                    946:      rval=self.aq_acquire('archive2')
                    947:      return rval()
                    948: 
                    949: 
                    950: def metachecker(self,path):
                    951:     """check the metadata the documents in path"""
                    952:     self.REQUEST.SESSION['path']=self.REQUEST['path']
                    953:     return metacheck(path)
                    954: 
                    955: def archiver(self,path):
                    956:     """archive the documents in path"""
                    957:     tmp=archive(path,self.REQUEST.SESSION)
                    958:     return self.REQUEST.RESPONSE.redirect('archive4')
                    959: 
                    960: def getText(nodelist):
                    961:     
                    962:     rc = ""
                    963:     for node in nodelist:
1.32      dwinter   964:         if node.nodeType == node.TEXT_NODE:
1.1       dwinter   965:            rc = rc + node.data
                    966:     return rc
                    967: 
                    968: def getBib(nodelist):
                    969:     rc= "<table border='0'>"
1.3       dwinter   970:     
1.1       dwinter   971:     for node in nodelist:
                    972:         
1.32      dwinter   973:         if node.nodeType == node.ELEMENT_NODE:
                    974:            """nothing"""
1.27      dwinter   975:            
1.32      dwinter   976:            rc = rc+"<tr><td valign='right'>"+str(node.nodeName)+":</td><td> "+getText(node.childNodes)+"</td></tr>"
1.27      dwinter   977:            
1.1       dwinter   978:     #print rc
                    979:     return rc+"</table>"
                    980: 
                    981: def getMetafile(path):
1.14      dwinter   982:     """get index.meta and translate it to an HTML"""
1.1       dwinter   983:     html=[]
                    984:     if not os.path.exists(path+"/index.meta"):
                    985:           
                    986:           return "NO_METADATA"
                    987:     else:
                    988:        f = os.popen("cat "+path+"/index.meta","r")
                    989:        lines = f.read()
                    990:        dom = xml.dom.minidom.parseString(lines)
1.12      dwinter   991:        try:
                    992:            name=getText(dom.getElementsByTagName("name")[0].childNodes)
                    993:        except:
                    994:            name="NOT_DEFINED!!!"
                    995:        try:
                    996:            creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
                    997:        except:
                    998:            creator="NOT_DEFINED!!!"
                    999: 
                   1000:        try:
                   1001:            creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
                   1002:        except:
                   1003:            creation_date="NOT_DEFINED!!!"
                   1004: 
                   1005:        try:
                   1006:            description=getText(dom.getElementsByTagName("description")[0].childNodes)
                   1007:        except:
                   1008:            description="NOT_DEFINED!!!"
                   1009:            
1.1       dwinter  1010:        try:
1.32      dwinter  1011:         type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
1.1       dwinter  1012:        except:
                   1013:         type=""
                   1014:        if type=="scanned document":
1.32      dwinter  1015:                 html="<h3>Document: "+name+"</h3>"
1.1       dwinter  1016:        elif type=="folder":
1.32      dwinter  1017:                 html="<h3>Folder: "+name+"</h3>"
1.1       dwinter  1018:        else:
1.32      dwinter  1019:                 html="<h3>Document: "+name+"</h3>"
1.1       dwinter  1020: 
                   1021:        html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>" 
                   1022:        html=html+"<h4>Description</h4><p>"+description+"</p>"
                   1023:        try:
                   1024:         bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
                   1025:         if bib.attributes.has_key('type'):
1.32      dwinter  1026:           html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
                   1027:         else:
                   1028:           html=html+"<h4>Info</h4>"
1.1       dwinter  1029:         html=html+getBib(bib.childNodes)
1.3       dwinter  1030:         
1.1       dwinter  1031:        except:
                   1032:         """none"""
                   1033:        
                   1034: #        html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
                   1035:        
1.27      dwinter  1036:        return html.encode('utf-8')
1.1       dwinter  1037: 
                   1038: def hasMetafile(path):
                   1039:     """get index.meta"""
                   1040:     return os.path.exists(path+"/index.meta")
                   1041:     #return path
1.17      dwinter  1042: 
                   1043: 
1.1       dwinter  1044: 
                   1045: def isdigilib2(path):
1.32      dwinter  1046:           """check if folder is candidate for digilib without metadata""" 
1.1       dwinter  1047:           try:
                   1048:                 dir=os.listdir(path)
                   1049: 
                   1050:                 imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif','.JPG','.TIFF','.TIF']
                   1051:                 ret=""
                   1052:                 for a in dir:
                   1053:                       
                   1054:                       suffix=os.path.splitext(a)
1.32      dwinter  1055:                 
1.1       dwinter  1056:                       if suffix[1] in imagesuffixes:
                   1057:                             return 1
                   1058: 
                   1059:                 try:
                   1060:                       dom=xml.dom.minidom.parse(os.path.split(path)[0]+"/index.meta")
                   1061:                       for node in dom.getElementsByTagName("dir"):
                   1062:                   
                   1063:                             if getText(node.getElementsByTagName("content-type")[0].childNodes)=="images":
                   1064:                         
                   1065:                                   if getText(node.getElementsByTagName("name")[0].childNodes)==os.path.split(path)[1]:
                   1066:                                         return 1
                   1067:                       return 0
                   1068:                 except:
                   1069:             
                   1070:                       return 0
                   1071: 
                   1072: 
                   1073:                 
                   1074:                 
                   1075: 
                   1076:           except:
                   1077:                 return 0
                   1078: 
                   1079: def isFullText(path,folder_name):
                   1080:       """check if foldername in path is full text"""
                   1081:       try:
                   1082:             dom=xml.dom.minidom.parse(path+"/index.meta")
                   1083:             for node in dom.getElementsByTagName("dir"):
                   1084:                   
                   1085:                   if getText(node.getElementsByTagName("content-type")[0].childNodes)=="fulltext":
                   1086:                         
                   1087:                         if getText(node.getElementsByTagName("name")[0].childNodes)==folder_name:
                   1088:                               return 1
                   1089:             return 0
                   1090:       except:
                   1091:             
                   1092:             return 0
                   1093: 
1.24      dwinter  1094: def isPdf(path,folder_name):
                   1095:       """check if foldername in path is full text"""
                   1096:       try:
                   1097:             dom=xml.dom.minidom.parse(path+"/index.meta")
                   1098:             for node in dom.getElementsByTagName("dir"):
                   1099:                   
                   1100:                   if getText(node.getElementsByTagName("content-type")[0].childNodes).lower()=="pdf":
                   1101:                         
                   1102:                         if getText(node.getElementsByTagName("name")[0].childNodes)==folder_name:
                   1103:                               return 1
                   1104:             return 0
                   1105:       except:
                   1106:             
                   1107:             return 0
1.1       dwinter  1108: 
                   1109: def isPresentation(path,folder_name):
                   1110:       """check if foldername in path is full text"""
                   1111:       try:
                   1112:             dom=xml.dom.minidom.parse(path+"/index.meta")
                   1113:             #print dom.toxml()
                   1114:             for dirnode in dom.getElementsByTagName("dir"):
                   1115:                   try:
                   1116:                          
                   1117:                         if getText(dirnode.getElementsByTagName('content-type')[0].childNodes)=='presentation':
                   1118:                               if getText(dirnode.getElementsByTagName("name")[0].childNodes)==folder_name:
                   1119:                                     return 1
                   1120:                   except:
                   1121:                         """nothing"""
                   1122:             return 0
                   1123:       except:
                   1124:             
                   1125:             return 0
                   1126:                   
                   1127:                   
                   1128:                         
                   1129: 
                   1130: 
                   1131: def changeName(path):
                   1132:       try:
                   1133:          temp2=re.search(r"(.*)/mpiwg/online/(.*)",path)
1.32      dwinter  1134:          if temp2==None:         
                   1135:                         return "digifiles/"+re.search(r"(.*)/mpiwg/production/docuserver/(.*)",path).group(2)
                   1136:          else:  
                   1137:                         return temp2.group(2)
1.36    ! casties  1138:       except: # hack - im archivbereich keine online darstellung gibt jetzt ein no zurueck.
1.1       dwinter  1139:             return "NO"
                   1140: 
1.32      dwinter  1141:         
1.1       dwinter  1142: def test(self):
                   1143:         self.i=1
1.32      dwinter  1144:         #newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/test').__of__(self)
1.1       dwinter  1145:         self.manage_addProduct['OFSP'].manage_addDTMLMethod('neu','neu')
                   1146:         self.getattr('neu').manage_edit('HELLO','neu')
                   1147:         return "ok"
                   1148: 
                   1149: 
                   1150: class ls(Implicit, Persistent, RoleManager):
                   1151:       """File entry class"""
                   1152:       path = ""
                   1153:       user = ""
                   1154:       month = ""
                   1155:       date =""
                   1156:       time = ""
                   1157:       
                   1158:       security=ClassSecurityInfo()
                   1159: 
                   1160:       def __init__(self,start):
                   1161:             self.outfile=tempfile.mktemp()
                   1162:             start['outfile']=self
                   1163:             os.popen("ls -R / >"+self.outfile+" &","r")
                   1164:             
                   1165:             
                   1166:       security.declarePublic('read')
                   1167:       def read(self):
                   1168:             return self.f.read()
                   1169:       security.declarePublic('retself')
                   1170:       def retself(self):
                   1171:             return self
                   1172:       security.declarePublic('all')
                   1173:       def all(self):
                   1174:             ret=""
                   1175:             for g in self.f:
                   1176:                   ret=ret+g
                   1177:             return ret
                   1178: 
                   1179:       security.declarePublic('printOutfile')
                   1180:       def printOutfile(self):
                   1181:             while not os.path.exists(self.outfile):
                   1182:                   """nothing"""
                   1183:             return open(self.outfile).readlines()
                   1184:       
                   1185: class overview(Implicit,Persistent, RoleManager):
                   1186:       dir=[]
                   1187:       resources={}
                   1188:       security=ClassSecurityInfo()
                   1189:       
                   1190:       def __init__(self,path):
                   1191:             dir=os.listdir(path)
                   1192:             
                   1193:             for file in dir:
                   1194:                   self.resources[self.getResource(path,file)]=path+"/"+file
                   1195:         
                   1196:             
                   1197:       def getResource(self,path,filename):
                   1198:             f=file(path+"/"+filename,'r')
                   1199:       
                   1200:             for line in f.readlines():
                   1201:                   
                   1202:                   if line[0:4]=="INFO":
                   1203:                         if line[6:14]=="resource":
                   1204:                               return line
                   1205:             return "error"
                   1206: 
                   1207:       def parsearchive(self,str):
                   1208:             """parse for error"""
                   1209:             retstr=''
                   1210:             
                   1211:             if not len(str)==0:
                   1212:                   for line in str:
                   1213:                         retstr=retstr+line+"<br>"
                   1214:                   check=re.search(r"(.*):(.*)",line)
                   1215:                   if check.group(1)=='ABORT':
                   1216:                         error="error"
                   1217:                   elif check.group(1)=='DONE':
                   1218:                         error="ok"
                   1219:                   else:
                   1220:                         error="running"
                   1221:                   
                   1222:                   return [retstr,error]
                   1223:             else:
                   1224:                   return ['','running']
                   1225: 
                   1226:       security.declarePublic('messages')
                   1227:       def messages(self):
                   1228:             self.lines=[]
                   1229:             for name in self.resources.keys():
                   1230:                   path=self.resources[name]
                   1231:                   
                   1232:                   self.lines.append(Error([name,self.parsearchive(open(path,"r").readlines())]))
                   1233:             return self.lines
                   1234: 
                   1235:       security.declarePublic('printResource')
                   1236:       def printResource(self):
                   1237:             return self.resources
                   1238:       
                   1239: def getoverview(path):
                   1240:       
                   1241:       return overview(path)
                   1242: 
                   1243:       
                   1244: def ls_test(self):
                   1245:       tmp=ls(self.REQUEST.SESSION)
                   1246:       return self.REQUEST.RESPONSE.redirect('next')
                   1247: 
                   1248: def storeFile(self,something):
                   1249:       self.REQUEST.SESSION['something']=something
                   1250:       return 1
                   1251: 
                   1252: def getFile(self):
                   1253:       return self.REQUEST.SESSION['something']
                   1254: 
                   1255: def isFolder(self,path):
1.36    ! casties  1256:       """returns TRUE, wenn path ein Folder ist in den weitere Objekte Folder oder Dokumente gelegt werden duerfen"""
        !          1257:       return not isScannedDocument(self,path) # vorlaeufig sind alle Documente die keine scanned documente sind folder.
1.1       dwinter  1258: 
                   1259: def isScannedDocument(self,path):
                   1260:       """returns TRUE, wenn path der Stammordner eines gescannten Documents ist"""
                   1261:       try:
                   1262:             f = file(path+"/index.meta","r")
1.35      casties  1263:             logging.debug("isscanneddocument: file=%s"%f)
1.1       dwinter  1264:             lines = f.read()
                   1265:             try:
                   1266:                   dom = xml.dom.minidom.parseString(lines)
                   1267:                   content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
1.35      casties  1268:                   logging.debug("isscanneddocument: content_type=%s"%content_type)
1.19      dwinter  1269:                   if (content_type=="scanned-document") or (content_type=="scanned document") or (content_type=="fulltext document"):
1.1       dwinter  1270:                         return 1
                   1271:                   else:
                   1272:                         return 0
                   1273:             except:
                   1274:                   return 0
                   1275:       except:
                   1276:             return 0
                   1277: 
                   1278: from time import localtime,strftime
                   1279: 
                   1280: def date(self):
1.32      dwinter  1281:         return strftime("%d.%m.%Y",localtime()) 
1.1       dwinter  1282: 
                   1283:       
                   1284:       

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