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

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):
                     62:         """Oeffnen bzw. schließen der Subfolders"""
                     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):
                     83:     """Webfrontend für 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):
                    152:         """Oeffnen bzw. schließen der Subfolders"""
                    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"]
                    346: class fsentry(Implicit, Persistent, RoleManager):
                    347:       """File entry class"""
                    348:       path = ""
                    349:       user = ""
                    350:       month = ""
                    351:       date =""
                    352:       time = ""
                    353:       
                    354:       security=ClassSecurityInfo()
                    355:       def __init__(self,extpath):
1.32      dwinter   356:              """initialize class"""
                    357:              extpath=os.path.abspath(re.search(r"(.*)\n",extpath).group(1))
1.1       dwinter   358:              self.all=extpath
1.32      dwinter   359:              self.path=extpath
                    360:              self.user=""
                    361:              self.mtime=os.path.getmtime(extpath)
1.1       dwinter   362:           
                    363:           
                    364:       security.declarePublic('getPath')
                    365:       def getPath(self):
1.32      dwinter   366:           """Ausgabe von path"""
                    367:           return self.path
1.1       dwinter   368: 
                    369:       security.declarePublic('getUser')
                    370:       def getUser(self):
1.32      dwinter   371:           """Ausgabe von user"""
                    372:           return self.user
1.1       dwinter   373: 
                    374:       security.declarePublic('getDate')
                    375:       def getDate(self):
1.32      dwinter   376:           """Ausgabe von Date"""
                    377:           return strftime("%Y%m%d%H%M",time.gmtime(self.mtime))
                    378:                           
1.1       dwinter   379:       security.declarePublic('getDate')
                    380:       def getID(self):
1.32      dwinter   381:           """Ausgabe einer eindeutigen Sortierbaren ID"""
                    382:           return self.getDate()+self.getPath()
                    383:                 
1.1       dwinter   384:       security.declarePublic('getTime')
                    385:       def getTime(self):
1.32      dwinter   386:           """Ausgabe von path"""
                    387:           return self.time
1.1       dwinter   388:       security.declarePublic('getAll')
                    389:       def getAll(self):
1.32      dwinter   390:           """Ausgabe von path"""
                    391:           return self.all
1.1       dwinter   392: 
                    393: class filesystem(Implicit, Persistent, RoleManager):
                    394:       """store filesystem"""
                    395:       node={}
                    396:       hasindex={}
                    397:       security=ClassSecurityInfo()
                    398:      
                    399:       def getfs(self,start):
                    400:         """load filessystem"""
                    401:         f = os.popen("find "+ start+" -name '*' ","r")
1.32      dwinter   402:         lines = f.readlines()
                    403:         
1.1       dwinter   404:         return lines
                    405: 
                    406:       def loadfs(self,start):
                    407:         """analyse filesystem"""
1.32      dwinter   408:         for line in self.getfs(start):
                    409:             
                    410:             g=re.search(r"(.*/)(.*)\n",line)
                    411:             if not g==None:
                    412:                     path=g.group(1)
                    413:                     file=g.group(2)
                    414:                     if self.node.has_key(path):
                    415:                      elements=self.node[path]
                    416:                      elements.append(file)
                    417:                      self.node[path]=elements
                    418:                     else:
                    419:                      self.node[path]=[file]
                    420:                     if (file=="index.meta") | (file=="meta"):
                    421:                      self.hasindex[path]="1"
1.1       dwinter   422:        
                    423:       def __init__(self,start,reload=0):
                    424:            if reload==1:
1.32      dwinter   425:                    self.node={}
                    426:                    self.hasindex={}
                    427:                    self.loadfs(start)
1.1       dwinter   428:                    
                    429:           
                    430:       security.declarePublic('getNode')
                    431:       def getNode(self):
1.32      dwinter   432:            return self.node
1.1       dwinter   433:       
                    434:       security.declarePublic('getKeys')
                    435:       def getKeys(self):
1.32      dwinter   436:            return self.node.keys()
1.1       dwinter   437:       
                    438:       security.declarePublic('clearnode')
                    439:       def clearnode(self):
1.32      dwinter   440:            self.node={}
                    441:            return 0
1.1       dwinter   442: 
                    443:       security.declarePublic('hasIndex')
                    444:       def hasIndex(self,path):
1.32      dwinter   445:         
                    446:            return self.hasindex.has_key(path)
1.1       dwinter   447: 
                    448:       
                    449:       def onlyIndex_old(self):
1.32      dwinter   450:            """return only files with archive material"""
                    451:            j={}
                    452:            for k in self.node:
                    453:                if self.hasindex.has_key(k):
                    454:                   if len(self.node[k])>1:
                    455:                      if (len(self.node[k])==2) & ('meta' not in self.node[k]):
                    456:                         j[k]=self.node[k]
                    457:                      elif (len(self.node[k])==2) & ('meta' in self.node[k]):
1.1       dwinter   458:                         """ nothing """
1.32      dwinter   459:                      else:
                    460:                         j[k]=self.node[k]         
                    461:            return j
1.1       dwinter   462: 
                    463:       def archive_the_path(self,path):
                    464:            """parse indexmeta and return digilib path"""
1.13      dwinter   465:            
1.1       dwinter   466:            try:
                    467:                  #f = os.popen("cat "+path+"/index.meta","r")
                    468:                  f =file(path+"/index.meta","r")
                    469:                  
                    470:                  lines = f.read()
1.13      dwinter   471:                  
1.1       dwinter   472:                  try:
                    473:                        dom = xml.dom.minidom.parseString(lines)
1.13      dwinter   474:                        if dom.getElementsByTagName("content-type"):
                    475:                            if getText(dom.getElementsByTagName("content-type")[0].childNodes)=="folder":
                    476:                                """folder nicht archivieren"""
                    477:                                return 0
                    478:                            
                    479:                        archive_storage_date=getText(dom.getElementsByTagName("archive-storage-date")[0].childNodes)
                    480:                        
                    481:                        if archive_storage_date=="":
                    482:                            
                    483:                            """leer also archivieren"""
                    484:                            return 1
1.1       dwinter   485:                        else:
1.13      dwinter   486:                            """nicht archivieren"""
                    487:                            return 0
1.1       dwinter   488:                  except:
                    489:                        """kein tag also archivieren"""
                    490:                        return 1
                    491:            except:
                    492:                  """kein index.meta also nicht archivieren"""
                    493:                  return 0
                    494:      
                    495:       security.declarePublic('onlyIndex')
                    496:       def onlyIndex(self):
1.32      dwinter   497:            """return only files with archive material (archive-storage-date not set)"""
                    498:            j={}
1.1       dwinter   499:            
1.32      dwinter   500:            for k in self.node:
                    501:               if self.archive_the_path(k):
1.1       dwinter   502:                     j[k]=self.node[k]
1.32      dwinter   503:            return j
1.1       dwinter   504:       security.declarePublic('getImageDirs')
                    505:       def getImageDirs(self,dom,path):
1.32      dwinter   506:           dirs=dom.getElementsByTagName("dir")
                    507:           dirback=[]
                    508:           for dir in dirs:
                    509:               temp=getText(dir.getElementsByTagName("name")[0].childNodes)
                    510:               temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
                    511:               if not temp2==None:
1.1       dwinter   512:                     try:
                    513:                           dirback.append(temp2.group(2))
                    514:                     except:
                    515:                           """nothing"""
1.32      dwinter   516:               else:
                    517:                 dirback.append(temp)
1.1       dwinter   518:           return dirback
                    519:       
                    520:          
                    521:       
                    522: 
1.32      dwinter   523:       security.declarePublic('digilib')   
1.1       dwinter   524:       def digilib(self, path):
1.32      dwinter   525:           """check if folder is a container for digilib files"""
                    526:           if self.hasindex.has_key(path+"/"):
                    527:                 return(self.parseIndexMeta(path))
                    528:           else:
                    529:                 return "NO"
1.1       dwinter   530: 
                    531: 
                    532:      
                    533: 
1.32      dwinter   534:       security.declarePublic('isdigilib')         
1.1       dwinter   535:       def isdigilib(self, path):
1.32      dwinter   536:           """return number of possible image directories usefull for digilib""" 
                    537:           if self.hasindex.has_key(path+"/"):
                    538:              return(len(self.parseIndexMeta(path)))
                    539:           else:
                    540:              return 0
1.1       dwinter   541: 
                    542:       security.declarePublic('parseIndexMeta')
                    543:       def parseIndexMeta(self,k):
1.32      dwinter   544:           """parse indexmeta and return digilib path"""
                    545:           f = os.popen("cat "+k+"/index.meta","r")
1.1       dwinter   546:           lines = f.read()
1.32      dwinter   547:           
1.1       dwinter   548:           try:
1.32      dwinter   549:            dom = xml.dom.minidom.parseString(lines)
                    550:            content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    551:            if (content_type=="scanned-document") or (content_type=="scanned document"):
                    552:                    dirs=self.getImageDirs(dom,k)
                    553:                 
                    554:            return dirs
                    555:           except:
                    556:            return []
                    557:           
                    558:           
1.1       dwinter   559: class filesystem2(Implicit, Persistent, RoleManager):
                    560:       """store filesystem"""
                    561:       node={}
                    562:       hasindex={}
                    563:       security=ClassSecurityInfo()
                    564:      
                    565:       def getfs(self,start):
                    566:         """load filessystem"""
1.13      dwinter   567:         
1.1       dwinter   568:         f = os.popen("find "+ start+" -name '*' ","r")
1.32      dwinter   569:         lines = f.readlines()
                    570:         
1.1       dwinter   571:         return lines
                    572: 
                    573:       def loadfs(self,start):
                    574:         """analyse filesystem"""
1.32      dwinter   575:         for line in self.getfs(start):
                    576:             
                    577:             g=re.search(r"(.*/)(.*)\n",line)
                    578:             if not g==None:
1.1       dwinter   579:                   try:
                    580:                         path=g.group(1)
                    581:                         file=g.group(2)
                    582:                   except:
                    583:                         """nothing"""
                    584:                   if self.node.has_key(path):
1.32      dwinter   585:                      elements=self.node[path]
                    586:                      elements.append(file)
                    587:                      self.node[path]=elements
1.1       dwinter   588:                   else:
1.32      dwinter   589:                      self.node[path]=[file]
1.1       dwinter   590:                   if (file=="index.meta") | (file=="meta"):
                    591:                      self.hasindex[path]="1"
                    592:        
                    593:       def __init__(self,start,reload=0):
                    594:            """nothing"""
                    595:            
                    596:            
                    597:       security.declarePublic('getImageDirs')
                    598:       def getImageDirs(self,dom,path):
1.32      dwinter   599:           dirs=dom.getElementsByTagName("dir")
                    600:           dirback=[]
                    601:           for dir in dirs:
                    602:               temp=getText(dir.getElementsByTagName("name")[0].childNodes)
                    603:               temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
                    604:               if not temp2==None:
1.1       dwinter   605:                     try:
                    606:                           dirback.append(temp2.group(2))
                    607:                     except:
                    608:                           """nothing"""
1.32      dwinter   609:               else:
                    610:                 dirback.append(temp)
1.1       dwinter   611:           return dirback
                    612:       
                    613:          
1.32      dwinter   614:       security.declarePublic('digilib')   
1.1       dwinter   615:       def digilib(self, path):
1.32      dwinter   616:           """check if folder is a container for digilib files"""
                    617:           if os.path.exists(path+"/index.meta"):
                    618:                 return(self.parseIndexMeta(path))
                    619:           else:
                    620:                 return "NO"
1.1       dwinter   621: 
1.32      dwinter   622:       security.declarePublic('isdigilib')         
1.1       dwinter   623:       def isdigilib(self, path):
1.32      dwinter   624:           if os.path.exists(path+"/index.meta"):
                    625:              return(len(self.parseIndexMeta(path)))
                    626:           else:
                    627:              return 0
1.1       dwinter   628:       security.declarePublic('parseIndexMeta')
                    629:       def parseIndexMeta(self,k):
1.32      dwinter   630:           """parse indexmeta and return digilib path"""
                    631:           f = os.popen("cat "+k+"/index.meta","r")
1.1       dwinter   632:           lines = f.read()
1.32      dwinter   633:           
1.1       dwinter   634:           try:
1.32      dwinter   635:            dom = xml.dom.minidom.parseString(lines)
                    636:            content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    637:            if content_type=="scanned-document":
                    638:                    dirs=self.getImageDirs(dom,k)
                    639:                 
                    640:            return dirs
                    641:           except:
                    642:            return []
                    643:           
                    644:           
1.1       dwinter   645: class browse(Implicit, Persistent, RoleManager):
                    646:       
                    647:       security=ClassSecurityInfo()
                    648:       tree={}
                    649:       toggledict={}
                    650: 
                    651:       def filterExcluded(self,dir):
1.32      dwinter   652:           ret=[]
                    653:           for item in dir:
                    654:                 if not item in exclusion:
                    655:                         ret.append(item) 
                    656:           return ret
                    657:         
1.1       dwinter   658:       def __init__(self,startpath):
1.32      dwinter   659:           self.tree={}
                    660:           self.tree[startpath]=self.filterExcluded(dircache.listdir(startpath))
1.1       dwinter   661: 
                    662:       security.declarePublic('getTree')
1.32      dwinter   663:       def getTree(self,path):   
                    664:           if self.tree.has_key(path):
                    665:                     return self.tree[path]
1.1       dwinter   666:           else:
1.32      dwinter   667:              self.tree[path]=self.filterExcluded(dircache.listdir(path))
                    668:              return self.tree[path]
1.1       dwinter   669:       
                    670:       security.declarePublic('isDirectory')
1.32      dwinter   671:       def isDirectory(self,path,file):  
                    672:           return os.path.isdir(os.path.abspath(path+"/"+file))
1.1       dwinter   673:       
                    674:       security.declarePublic('toggle')
                    675:       def toggle(self,tmppath,file):
1.32      dwinter   676:           path=tmppath+"/"+file
                    677:           
                    678:           if self.toggledict.has_key(path):
                    679:              if self.toggledict[path]==0:
                    680:                 self.toggledict[path]=1
                    681:                 
                    682:              else:
                    683:                 self.toggledict[path]=0
1.1       dwinter   684:                 
                    685:           else:
1.32      dwinter   686:              self.toggledict[path]=4
                    687:              
1.1       dwinter   688: 
                    689:       security.declarePublic('isToggle')
                    690:       def isToggle(self,tmppath,file):
1.32      dwinter   691:           path=tmppath+"/"+file
1.1       dwinter   692: 
1.32      dwinter   693:           if self.toggledict.has_key(path):
                    694:                 
                    695:                 return self.toggledict[path]
1.1       dwinter   696:           else:
1.32      dwinter   697:                 
                    698:                 return 0      
1.1       dwinter   699: 
                    700:       
                    701: def getfs(start):
1.32      dwinter   702:         """return filesystem"""
1.13      dwinter   703:         
                    704: 
1.1       dwinter   705:         f = os.popen("find "+ start+" -name '*'","r")
1.32      dwinter   706:         lines = f.readlines()
1.1       dwinter   707:         return lines
                    708: 
                    709: def showall(start):
1.32      dwinter   710:         lines = getfs(start)
                    711:         for line in lines:
                    712:             print line
1.1       dwinter   713:         return 0
                    714: 
                    715: def entries(start):
1.32      dwinter   716:         """retrun list of entries of a filesystem"""
                    717:         i=0
                    718:         fs=[]
                    719:         lines=getfs(start)
                    720:         for line in lines:
1.1       dwinter   721:             try:
                    722:                   if os.path.exists(os.path.abspath(re.search(r"(.*)\n",line).group(1))):
                    723:                         fs.append(fsentry(line))
                    724:                         i=i+1
                    725:             except:
                    726:                   """nothing"""
1.32      dwinter   727:         return fs
1.1       dwinter   728: 
                    729: def getfilesystem(start,reload=0):
1.32      dwinter   730:         """load filesystem"""
                    731:         
                    732:         k=filesystem(start,1)
                    733:         return k
1.1       dwinter   734: 
                    735: 
                    736: 
                    737: def sort_by_date(fs):
1.32      dwinter   738:         """sorts lists of fileentries"""
                    739:         ls=[]
                    740:         dict={}
                    741:         for k in fs:
1.1       dwinter   742:             ls.append(k.getID())
1.32      dwinter   743:             dict[k.getID()]=k
                    744:         ls.sort()
1.1       dwinter   745:         ls.reverse()
                    746:         ret=[]
1.32      dwinter   747:         for j in ls:
                    748:             ret.append(dict[j])
1.1       dwinter   749:         return ret
                    750: 
                    751: def path_to_link(path):
                    752:     """generates navigation bar for showfiles"""
                    753:     string=""
                    754:     
                    755:     tmppath=os.path.dirname(path)
                    756:     i=0
                    757:     pathes=[[path, os.path.basename(path)]]
                    758:     
                    759:     while not (len(tmppath)==1):
1.32      dwinter   760:           
                    761:           i=i+1
                    762:           if i>20: break
                    763:         
                    764:           pathes.append([tmppath, os.path.basename(tmppath)])
                    765:           tmppath=os.path.dirname(tmppath)
1.1       dwinter   766: 
                    767:     while i>=0:
1.32      dwinter   768:           string=string+"<a href=showfiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    769:           
                    770:           i=i-1
1.1       dwinter   771:     return string
                    772: 
                    773: def path_to_link_view(URL,path):
                    774:     """generates navigation bar for viewfiles"""
                    775:     string=""
                    776:     
                    777:     tmppath=os.path.dirname(path)
                    778:     i=0
                    779:     pathes=[[path, os.path.basename(path)]]
                    780:     
                    781:     while not (len(tmppath)==1):
1.32      dwinter   782:           
                    783:           i=i+1
                    784:           if i>20: break
                    785:           
                    786:           pathes.append([tmppath, os.path.basename(tmppath)])
                    787:           tmppath=os.path.dirname(tmppath)
1.1       dwinter   788: 
                    789:     while i>=0:
1.32      dwinter   790:           string=string+"<a href="+URL+"?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    791:           
                    792:           i=i-1
1.1       dwinter   793:     return string
                    794: 
1.2       dwinter   795: def path_to_link_store(URL,path):
1.1       dwinter   796:     """generates navigation bar for viewfiles"""
                    797:     string=""
                    798:     
                    799:     tmppath=os.path.dirname(path)
                    800:     i=0
                    801:     pathes=[[path, os.path.basename(path)]]
                    802:     
                    803:     while not (len(tmppath)==1):
1.32      dwinter   804:           
                    805:           i=i+1
                    806:           if i>20: break
                    807:           
                    808:           pathes.append([tmppath, os.path.basename(tmppath)])
                    809:           tmppath=os.path.dirname(tmppath)
1.1       dwinter   810: 
                    811:     while i>=0:
1.32      dwinter   812:           string=string+"<a href="+URL+"?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    813:           
                    814:           i=i-1
1.1       dwinter   815:     return string
                    816: 
                    817: 
                    818: class Error(Implicit, Persistent, RoleManager):
1.32      dwinter   819:         
                    820:         error=[]
                    821:         security=ClassSecurityInfo()
                    822:         def __init__(self,initerror):
1.1       dwinter   823:               self.error=initerror[0:]
                    824: 
1.32      dwinter   825:         security.declarePublic('getError')
                    826:         def getError(self):
                    827:                 return self.error
1.1       dwinter   828: 
                    829: class metacheck(Implicit, Persistent, RoleManager):
                    830:         lines=[]
1.32      dwinter   831:         security=ClassSecurityInfo()
                    832:         def parsearchive(self,str):
                    833:                 """parse for error"""
                    834:                 retstr=''
1.1       dwinter   835:                 
                    836:                 if not len(str)==0:
                    837:                       for line in str:
                    838:                             retstr=retstr+line+"<br>"
                    839:                       check=re.search(r"(.*):(.*)",line)
                    840:                       if check.group(1)=='ABORT':
                    841:                             error="error"
                    842:                       elif check.group(1)=='DONE':
                    843:                             error="ok"
                    844:                       else:
                    845:                             error="running"
                    846:                             
                    847:                       return [retstr,error]
                    848:                 else:
                    849:                       return ['','running']
1.32      dwinter   850:         def __init__(self,path):
                    851:                 """archive the documents in path"""
                    852:                 self.lines=[]
                    853:                 
                    854:                 if type(path)==StringType:
                    855:                         f = os.popen("/usr/local/mpiwg/archive/metacheck "+path,"r")
                    856:                         self.lines.append(Error([path,self.parsearchive(f.readlines())]))
                    857:                 else:
                    858:                         for singlepath in path:
                    859:                                 f = os.popen("/usr/local/mpiwg/archive/metacheck "+singlepath,"r")
                    860:                                 self.lines.append(Error([singlepath,self.parsearchive(f.readlines())]))
1.1       dwinter   861:         security.declarePublic('messages')
1.32      dwinter   862:         
                    863:         def messages(self):
                    864:                 return self.lines
                    865:         
                    866:                 
1.1       dwinter   867: 
                    868: 
                    869: class archive(Implicit, Persistent, RoleManager):
                    870:       lines=[]
                    871:       security=ClassSecurityInfo()
                    872:       def parsearchive(self,str):
                    873:             """parse for error"""
                    874:             retstr=''
                    875:             
                    876:             if not len(str)==0:
                    877:                   for line in str:
                    878:                         retstr=retstr+line+"<br>"
                    879:                   check=re.search(r"(.*):(.*)",line)
                    880:                   if check.group(1)=='ABORT':
                    881:                         error="error"
                    882:                   elif check.group(1)=='DONE':
                    883:                         error="ok"
                    884:                   else:
                    885:                         error="running"
                    886:                   
                    887:                   return [retstr,error]
                    888:             else:
                    889:                   return ['','running']
                    890:                   
                    891:       def __init__(self,path,session):
                    892:             """archive the documents in path"""
                    893:             self.lines=[]
                    894:             self.filenames={}
                    895:             session['archiver']=self
                    896:            
                    897:            
                    898:             if type(path)==StringType:
                    899:                   self.filenames[path]=tempfile.mktemp()
                    900:                   f = os.popen("/usr/local/mpiwg/archive/archiver "+path+" > "+self.filenames[path]+" &","r")
                    901:             else:
                    902:                   for singlepath in path:
                    903:                         self.filenames[singlepath]=tempfile.mktemp()
                    904:                         f = os.popen("/usr/local/mpiwg/archive/archiver "+singlepath+" > "+self.filenames[singlepath]+" &","r")
                    905:                             
                    906:       security.declarePublic('messages')
                    907:       def messages(self):
                    908:             self.lines=[]
                    909:             for path in self.filenames.keys():
                    910:                   
                    911:                   self.lines.append(Error([path,self.parsearchive(open(self.filenames[path],"r").readlines())]))
                    912:             return self.lines
                    913: 
1.32      dwinter   914:         
1.1       dwinter   915: def evalext(str):
                    916:      return eval(str)
                    917: 
                    918: def storeerror(ret,path,context,i):
                    919:      session=context.REQUEST.SESSION
                    920:      session['error%i'%i]=ret
                    921:      session['path%i'%i]=path
                    922:      
                    923:      return 'error?number=%i'%i
                    924: 
                    925: def geterror(str,context):
                    926:      session=context.REQUEST.SESSION
                    927:      return session[str]
                    928: 
                    929: def readfile(path):
                    930:      
                    931:      ret=""
                    932:      f=open(path,'r')
                    933:      for g in f.readlines():
1.32      dwinter   934:         ret=ret+g
1.1       dwinter   935:      return ret
                    936: 
                    937: def writefile(self,path,txt,REQUEST):
                    938:      f=open(path,'w')
                    939:      f.write(txt)
                    940:      f.close()
                    941:      rval=self.aq_acquire('archive2')
                    942:      return rval()
                    943: 
                    944: 
                    945: def metachecker(self,path):
                    946:     """check the metadata the documents in path"""
                    947:     self.REQUEST.SESSION['path']=self.REQUEST['path']
                    948:     return metacheck(path)
                    949: 
                    950: def archiver(self,path):
                    951:     """archive the documents in path"""
                    952:     tmp=archive(path,self.REQUEST.SESSION)
                    953:     return self.REQUEST.RESPONSE.redirect('archive4')
                    954: 
                    955: def getText(nodelist):
                    956:     
                    957:     rc = ""
                    958:     for node in nodelist:
1.32      dwinter   959:         if node.nodeType == node.TEXT_NODE:
1.1       dwinter   960:            rc = rc + node.data
                    961:     return rc
                    962: 
                    963: def getBib(nodelist):
                    964:     rc= "<table border='0'>"
1.3       dwinter   965:     
1.1       dwinter   966:     for node in nodelist:
                    967:         
1.32      dwinter   968:         if node.nodeType == node.ELEMENT_NODE:
                    969:            """nothing"""
1.27      dwinter   970:            
1.32      dwinter   971:            rc = rc+"<tr><td valign='right'>"+str(node.nodeName)+":</td><td> "+getText(node.childNodes)+"</td></tr>"
1.27      dwinter   972:            
1.1       dwinter   973:     #print rc
                    974:     return rc+"</table>"
                    975: 
                    976: def getMetafile(path):
1.14      dwinter   977:     """get index.meta and translate it to an HTML"""
1.1       dwinter   978:     html=[]
                    979:     if not os.path.exists(path+"/index.meta"):
                    980:           
                    981:           return "NO_METADATA"
                    982:     else:
                    983:        f = os.popen("cat "+path+"/index.meta","r")
                    984:        lines = f.read()
                    985:        dom = xml.dom.minidom.parseString(lines)
1.12      dwinter   986:        try:
                    987:            name=getText(dom.getElementsByTagName("name")[0].childNodes)
                    988:        except:
                    989:            name="NOT_DEFINED!!!"
                    990:        try:
                    991:            creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
                    992:        except:
                    993:            creator="NOT_DEFINED!!!"
                    994: 
                    995:        try:
                    996:            creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
                    997:        except:
                    998:            creation_date="NOT_DEFINED!!!"
                    999: 
                   1000:        try:
                   1001:            description=getText(dom.getElementsByTagName("description")[0].childNodes)
                   1002:        except:
                   1003:            description="NOT_DEFINED!!!"
                   1004:            
1.1       dwinter  1005:        try:
1.32      dwinter  1006:         type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
1.1       dwinter  1007:        except:
                   1008:         type=""
                   1009:        if type=="scanned document":
1.32      dwinter  1010:                 html="<h3>Document: "+name+"</h3>"
1.1       dwinter  1011:        elif type=="folder":
1.32      dwinter  1012:                 html="<h3>Folder: "+name+"</h3>"
1.1       dwinter  1013:        else:
1.32      dwinter  1014:                 html="<h3>Document: "+name+"</h3>"
1.1       dwinter  1015: 
                   1016:        html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>" 
                   1017:        html=html+"<h4>Description</h4><p>"+description+"</p>"
                   1018:        try:
                   1019:         bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
                   1020:         if bib.attributes.has_key('type'):
1.32      dwinter  1021:           html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
                   1022:         else:
                   1023:           html=html+"<h4>Info</h4>"
1.1       dwinter  1024:         html=html+getBib(bib.childNodes)
1.3       dwinter  1025:         
1.1       dwinter  1026:        except:
                   1027:         """none"""
                   1028:        
                   1029: #        html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
                   1030:        
1.27      dwinter  1031:        return html.encode('utf-8')
1.1       dwinter  1032: 
                   1033: def hasMetafile(path):
                   1034:     """get index.meta"""
                   1035:     return os.path.exists(path+"/index.meta")
                   1036:     #return path
1.17      dwinter  1037: 
                   1038: 
1.1       dwinter  1039: 
                   1040: def isdigilib2(path):
1.32      dwinter  1041:           """check if folder is candidate for digilib without metadata""" 
1.1       dwinter  1042:           try:
                   1043:                 dir=os.listdir(path)
                   1044: 
                   1045:                 imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif','.JPG','.TIFF','.TIF']
                   1046:                 ret=""
                   1047:                 for a in dir:
                   1048:                       
                   1049:                       suffix=os.path.splitext(a)
1.32      dwinter  1050:                 
1.1       dwinter  1051:                       if suffix[1] in imagesuffixes:
                   1052:                             return 1
                   1053: 
                   1054:                 try:
                   1055:                       dom=xml.dom.minidom.parse(os.path.split(path)[0]+"/index.meta")
                   1056:                       for node in dom.getElementsByTagName("dir"):
                   1057:                   
                   1058:                             if getText(node.getElementsByTagName("content-type")[0].childNodes)=="images":
                   1059:                         
                   1060:                                   if getText(node.getElementsByTagName("name")[0].childNodes)==os.path.split(path)[1]:
                   1061:                                         return 1
                   1062:                       return 0
                   1063:                 except:
                   1064:             
                   1065:                       return 0
                   1066: 
                   1067: 
                   1068:                 
                   1069:                 
                   1070: 
                   1071:           except:
                   1072:                 return 0
                   1073: 
                   1074: def isFullText(path,folder_name):
                   1075:       """check if foldername in path is full text"""
                   1076:       try:
                   1077:             dom=xml.dom.minidom.parse(path+"/index.meta")
                   1078:             for node in dom.getElementsByTagName("dir"):
                   1079:                   
                   1080:                   if getText(node.getElementsByTagName("content-type")[0].childNodes)=="fulltext":
                   1081:                         
                   1082:                         if getText(node.getElementsByTagName("name")[0].childNodes)==folder_name:
                   1083:                               return 1
                   1084:             return 0
                   1085:       except:
                   1086:             
                   1087:             return 0
                   1088: 
1.24      dwinter  1089: def isPdf(path,folder_name):
                   1090:       """check if foldername in path is full text"""
                   1091:       try:
                   1092:             dom=xml.dom.minidom.parse(path+"/index.meta")
                   1093:             for node in dom.getElementsByTagName("dir"):
                   1094:                   
                   1095:                   if getText(node.getElementsByTagName("content-type")[0].childNodes).lower()=="pdf":
                   1096:                         
                   1097:                         if getText(node.getElementsByTagName("name")[0].childNodes)==folder_name:
                   1098:                               return 1
                   1099:             return 0
                   1100:       except:
                   1101:             
                   1102:             return 0
1.1       dwinter  1103: 
                   1104: def isPresentation(path,folder_name):
                   1105:       """check if foldername in path is full text"""
                   1106:       try:
                   1107:             dom=xml.dom.minidom.parse(path+"/index.meta")
                   1108:             #print dom.toxml()
                   1109:             for dirnode in dom.getElementsByTagName("dir"):
                   1110:                   try:
                   1111:                          
                   1112:                         if getText(dirnode.getElementsByTagName('content-type')[0].childNodes)=='presentation':
                   1113:                               if getText(dirnode.getElementsByTagName("name")[0].childNodes)==folder_name:
                   1114:                                     return 1
                   1115:                   except:
                   1116:                         """nothing"""
                   1117:             return 0
                   1118:       except:
                   1119:             
                   1120:             return 0
                   1121:                   
                   1122:                   
                   1123:                         
                   1124: 
                   1125: 
                   1126: def changeName(path):
                   1127:       try:
                   1128:          temp2=re.search(r"(.*)/mpiwg/online/(.*)",path)
1.32      dwinter  1129:          if temp2==None:         
                   1130:                         return "digifiles/"+re.search(r"(.*)/mpiwg/production/docuserver/(.*)",path).group(2)
                   1131:          else:  
                   1132:                         return temp2.group(2)
1.1       dwinter  1133:       except: # hack - im archivbereich keine online darstellung gibt jetzt ein no zurück.
                   1134:             return "NO"
                   1135: 
1.32      dwinter  1136:         
1.1       dwinter  1137: def test(self):
                   1138:         self.i=1
1.32      dwinter  1139:         #newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/test').__of__(self)
1.1       dwinter  1140:         self.manage_addProduct['OFSP'].manage_addDTMLMethod('neu','neu')
                   1141:         self.getattr('neu').manage_edit('HELLO','neu')
                   1142:         return "ok"
                   1143: 
                   1144: 
                   1145: class ls(Implicit, Persistent, RoleManager):
                   1146:       """File entry class"""
                   1147:       path = ""
                   1148:       user = ""
                   1149:       month = ""
                   1150:       date =""
                   1151:       time = ""
                   1152:       
                   1153:       security=ClassSecurityInfo()
                   1154: 
                   1155:       def __init__(self,start):
                   1156:             self.outfile=tempfile.mktemp()
                   1157:             start['outfile']=self
                   1158:             os.popen("ls -R / >"+self.outfile+" &","r")
                   1159:             
                   1160:             
                   1161:       security.declarePublic('read')
                   1162:       def read(self):
                   1163:             return self.f.read()
                   1164:       security.declarePublic('retself')
                   1165:       def retself(self):
                   1166:             return self
                   1167:       security.declarePublic('all')
                   1168:       def all(self):
                   1169:             ret=""
                   1170:             for g in self.f:
                   1171:                   ret=ret+g
                   1172:             return ret
                   1173: 
                   1174:       security.declarePublic('printOutfile')
                   1175:       def printOutfile(self):
                   1176:             while not os.path.exists(self.outfile):
                   1177:                   """nothing"""
                   1178:             return open(self.outfile).readlines()
                   1179:       
                   1180: class overview(Implicit,Persistent, RoleManager):
                   1181:       dir=[]
                   1182:       resources={}
                   1183:       security=ClassSecurityInfo()
                   1184:       
                   1185:       def __init__(self,path):
                   1186:             dir=os.listdir(path)
                   1187:             
                   1188:             for file in dir:
                   1189:                   self.resources[self.getResource(path,file)]=path+"/"+file
                   1190:         
                   1191:             
                   1192:       def getResource(self,path,filename):
                   1193:             f=file(path+"/"+filename,'r')
                   1194:       
                   1195:             for line in f.readlines():
                   1196:                   
                   1197:                   if line[0:4]=="INFO":
                   1198:                         if line[6:14]=="resource":
                   1199:                               return line
                   1200:             return "error"
                   1201: 
                   1202:       def parsearchive(self,str):
                   1203:             """parse for error"""
                   1204:             retstr=''
                   1205:             
                   1206:             if not len(str)==0:
                   1207:                   for line in str:
                   1208:                         retstr=retstr+line+"<br>"
                   1209:                   check=re.search(r"(.*):(.*)",line)
                   1210:                   if check.group(1)=='ABORT':
                   1211:                         error="error"
                   1212:                   elif check.group(1)=='DONE':
                   1213:                         error="ok"
                   1214:                   else:
                   1215:                         error="running"
                   1216:                   
                   1217:                   return [retstr,error]
                   1218:             else:
                   1219:                   return ['','running']
                   1220: 
                   1221:       security.declarePublic('messages')
                   1222:       def messages(self):
                   1223:             self.lines=[]
                   1224:             for name in self.resources.keys():
                   1225:                   path=self.resources[name]
                   1226:                   
                   1227:                   self.lines.append(Error([name,self.parsearchive(open(path,"r").readlines())]))
                   1228:             return self.lines
                   1229: 
                   1230:       security.declarePublic('printResource')
                   1231:       def printResource(self):
                   1232:             return self.resources
                   1233:       
                   1234: def getoverview(path):
                   1235:       
                   1236:       return overview(path)
                   1237: 
                   1238:       
                   1239: def ls_test(self):
                   1240:       tmp=ls(self.REQUEST.SESSION)
                   1241:       return self.REQUEST.RESPONSE.redirect('next')
                   1242: 
                   1243: def storeFile(self,something):
                   1244:       self.REQUEST.SESSION['something']=something
                   1245:       return 1
                   1246: 
                   1247: def getFile(self):
                   1248:       return self.REQUEST.SESSION['something']
                   1249: 
                   1250: def isFolder(self,path):
                   1251:       """returns TRUE, wenn path ein Folder ist in den weitere Objekte Folder oder Dokumente gelegt werden dürfen"""
                   1252:       return not isScannedDocument(self,path) # vorläufig sind alle Documente die keine scanned documente sind folder.
                   1253: 
                   1254: def isScannedDocument(self,path):
                   1255:       """returns TRUE, wenn path der Stammordner eines gescannten Documents ist"""
                   1256:       try:
                   1257:             f = file(path+"/index.meta","r")
                   1258:             lines = f.read()
                   1259:       
                   1260:             try:
                   1261:                   dom = xml.dom.minidom.parseString(lines)
                   1262:                   content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
1.19      dwinter  1263:                   if (content_type=="scanned-document") or (content_type=="scanned document") or (content_type=="fulltext document"):
1.1       dwinter  1264:                         return 1
                   1265:                   else:
                   1266:                         return 0
                   1267:             except:
                   1268:                   return 0
                   1269:       except:
                   1270:             return 0
                   1271: 
                   1272: from time import localtime,strftime
                   1273: 
                   1274: def date(self):
1.32      dwinter  1275:         return strftime("%d.%m.%Y",localtime()) 
1.1       dwinter  1276: 
                   1277:       
                   1278:       

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