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

1.1       dwinter     1: # Classes for displaying, browsing and organizing the archive
                      2: 
                      3: from OFS.Folder import Folder
                      4: from OFS.SimpleItem import SimpleItem
                      5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      6: from Products.PageTemplates.PageTemplate import PageTemplate
                      7: 
                      8: class OSAS_ShowOnline(SimpleItem):
                      9:     """OnlineBrowser"""
                     10:     def __init__(self,id):
                     11:         """initialize a new instance"""
                     12:         self.id = id
                     13: 
                     14:     meta_type="OSAS_ShowOnline"
                     15: 
                     16:     def index_html(self):
                     17:         """main view"""
                     18:         pt=PageTemplateFile('products/OSA_system/OSAS_ViewFiles.zpt').__of__(self)
                     19:         return pt()
                     20:     
                     21:     def getfilesystem2(self,start,reload=0):
                     22:    """load filesystem"""
                     23: 
                     24:    k=filesystem2(start,1)
                     25:    return k
                     26: 
                     27:     def tree(self,start):
                     28:    """get the filetree"""
                     29:    k=browse(start)
                     30:    return k
                     31: 
                     32:     def path_to_link_view(self,path):
                     33:         """generates navigation bar for viewfiles"""
                     34:         return path_to_link_view(self.REQUEST['URL'],path)
                     35:     
                     36:     def isdigilib2(self,path):
                     37:         """check if digilib"""
                     38:         return isdigilib2(path)
                     39: 
                     40:     def changeName(self,name):
                     41:         return changeName(name)
                     42: 
                     43:     def hasMetafile(self,path):
                     44:         return hasMetafile(path)
                     45: 
                     46:     def getMetafile(self,path):
                     47:         return getMetafile(path)
                     48: 
                     49:     def toggle_view(self,path,file):
                     50:         """Oeffnen bzw. schließen der Subfolders"""
                     51:         self.tree(path).toggle(path,file)
                     52:         return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"?path="+path)
                     53:     
                     54: def manage_AddOSAS_ShowOnlineForm(self):
                     55:     """interface for adding the OSAS_root"""
                     56:     pt=PageTemplateFile('products/OSA_system/AddOSAS_ShowOnline.zpt').__of__(self)
                     57:     return pt()
                     58: 
                     59: def manage_AddOSAS_ShowOnline(self,id,RESPONSE=None):
                     60:     """add the OSAS_root"""
                     61:     newObj=OSAS_ShowOnline(id)
                     62:     self._setObject(id,newObj)
                     63:     if RESPONSE is not None:
                     64:         RESPONSE.redirect('manage_main')
                     65: 
                     66: 
                     67: 
                     68: 
                     69: 
                     70: ### Ab hier Baustelle
                     71: 
                     72:         
                     73: from types import *
                     74: import urllib
                     75: import os
                     76: import sys
                     77: import re
                     78: from AccessControl import ClassSecurityInfo
                     79: from AccessControl.Role import RoleManager
                     80: from Acquisition import Implicit
                     81: from Globals import Persistent
                     82: from time import strptime
                     83: from time import strftime
                     84: import time
                     85: import os.path
                     86: import dircache
                     87: import xml.dom.minidom
                     88: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                     89: from Products.PageTemplates.PageTemplate import PageTemplate
                     90: import tempfile
                     91: tempfile.tempdir="/var/tmp/archiver"
                     92: 
                     93: exclusion=[".HSResource","lost+found","Network Trash Folder","TheFindByContentFolder","TheVolumeSettingsFolder"]
                     94: class fsentry(Implicit, Persistent, RoleManager):
                     95:       """File entry class"""
                     96:       path = ""
                     97:       user = ""
                     98:       month = ""
                     99:       date =""
                    100:       time = ""
                    101:       
                    102:       security=ClassSecurityInfo()
                    103:       def __init__(self,extpath):
                    104:         """initialize class"""
                    105:         extpath=os.path.abspath(re.search(r"(.*)\n",extpath).group(1))
                    106:              self.all=extpath
                    107:         self.path=extpath
                    108:         self.user=""
                    109:         self.mtime=os.path.getmtime(extpath)
                    110:           
                    111:           
                    112:       security.declarePublic('getPath')
                    113:       def getPath(self):
                    114:          """Ausgabe von path"""
                    115:          return self.path
                    116: 
                    117:       security.declarePublic('getUser')
                    118:       def getUser(self):
                    119:          """Ausgabe von user"""
                    120:          return self.user
                    121: 
                    122:       security.declarePublic('getDate')
                    123:       def getDate(self):
                    124:          """Ausgabe von Date"""
                    125:      return strftime("%Y%m%d%H%M",time.gmtime(self.mtime))
                    126:              
                    127:       security.declarePublic('getDate')
                    128:       def getID(self):
                    129:          """Ausgabe einer eindeutigen Sortierbaren ID"""
                    130:      return self.getDate()+self.getPath()
                    131:        
                    132:       security.declarePublic('getTime')
                    133:       def getTime(self):
                    134:          """Ausgabe von path"""
                    135:          return self.time
                    136:       security.declarePublic('getAll')
                    137:       def getAll(self):
                    138:          """Ausgabe von path"""
                    139:          return self.all
                    140: 
                    141: class filesystem(Implicit, Persistent, RoleManager):
                    142:       """store filesystem"""
                    143:       node={}
                    144:       hasindex={}
                    145:       security=ClassSecurityInfo()
                    146:      
                    147:       def getfs(self,start):
                    148:         """load filessystem"""
                    149:         f = os.popen("find "+ start+" -name '*' ","r")
                    150:    lines = f.readlines()
                    151:    
                    152:         return lines
                    153: 
                    154:       def loadfs(self,start):
                    155:         """analyse filesystem"""
                    156:        for line in self.getfs(start):
                    157:        
                    158:        g=re.search(r"(.*/)(.*)\n",line)
                    159:        if not g==None:
                    160:                path=g.group(1)
                    161:                file=g.group(2)
                    162:                if self.node.has_key(path):
                    163:                 elements=self.node[path]
                    164:                 elements.append(file)
                    165:                 self.node[path]=elements
                    166:                else:
                    167:             self.node[path]=[file]
                    168:                    if (file=="index.meta") | (file=="meta"):
                    169:             self.hasindex[path]="1"
                    170:        
                    171:       def __init__(self,start,reload=0):
                    172:            if reload==1:
                    173:           self.node={}
                    174:           self.hasindex={}
                    175:                   self.loadfs(start)
                    176:                    
                    177:           
                    178:       security.declarePublic('getNode')
                    179:       def getNode(self):
                    180:               return self.node
                    181:       
                    182:       security.declarePublic('getKeys')
                    183:       def getKeys(self):
                    184:               return self.node.keys()
                    185:       
                    186:       security.declarePublic('clearnode')
                    187:       def clearnode(self):
                    188:       self.node={}
                    189:               return 0
                    190: 
                    191:       security.declarePublic('hasIndex')
                    192:       def hasIndex(self,path):
                    193:    
                    194:               return self.hasindex.has_key(path)
                    195: 
                    196:       
                    197:       def onlyIndex_old(self):
                    198:       """return only files with archive material"""
                    199:           j={}
                    200:       for k in self.node:
                    201:           if self.hasindex.has_key(k):
                    202:              if len(self.node[k])>1:
                    203:             if (len(self.node[k])==2) & ('meta' not in self.node[k]):
                    204:                j[k]=self.node[k]
                    205:             elif (len(self.node[k])==2) & ('meta' in self.node[k]):
                    206:                         """ nothing """
                    207:             else:
                    208:                    j[k]=self.node[k]     
                    209:               return j
                    210: 
                    211:       def archive_the_path(self,path):
                    212:            """parse indexmeta and return digilib path"""
                    213:            try:
                    214:                  #f = os.popen("cat "+path+"/index.meta","r")
                    215:                  f =file(path+"/index.meta","r")
                    216:                  
                    217:                  lines = f.read()
                    218:            
                    219:                  try:
                    220:                        dom = xml.dom.minidom.parseString(lines)
                    221:                        if getText(dom.getElementsByTagName("content-type")[0].childNodes)=="folder":
                    222:                              """folder nicht archivieren"""
                    223:                              return 0
                    224:                        else:
                    225:                              archive_storage_date=getText(dom.getElementsByTagName("archive-storage-date")[0].childNodes)
                    226:            
                    227:                              if archive_storage_date=="":
                    228:                              
                    229:                                    """leer also archivieren"""
                    230:                                    return 1
                    231:                              else:
                    232:                                    """nicht archivieren"""
                    233:                                    return 0
                    234:                  except:
                    235:                        """kein tag also archivieren"""
                    236:                        return 1
                    237:            except:
                    238:                  """kein index.meta also nicht archivieren"""
                    239:                  return 0
                    240:      
                    241:       security.declarePublic('onlyIndex')
                    242:       def onlyIndex(self):
                    243:       """return only files with archive material (archive-storage-date not set)"""
                    244:           j={}
                    245:            
                    246:       for k in self.node:
                    247:          if self.archive_the_path(k):
                    248:                     j[k]=self.node[k]
                    249:               return j
                    250:       security.declarePublic('getImageDirs')
                    251:       def getImageDirs(self,dom,path):
                    252:          dirs=dom.getElementsByTagName("dir")
                    253:      dirback=[]
                    254:      for dir in dirs:
                    255:          temp=getText(dir.getElementsByTagName("name")[0].childNodes)
                    256:          temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
                    257:          if not temp2==None:
                    258:                     try:
                    259:                           dirback.append(temp2.group(2))
                    260:                     except:
                    261:                           """nothing"""
                    262:          else:
                    263:        dirback.append(temp)
                    264:           return dirback
                    265:       
                    266:          
                    267:       
                    268: 
                    269:       security.declarePublic('digilib')      
                    270:       def digilib(self, path):
                    271:          """check if folder is a container for digilib files"""
                    272:      if self.hasindex.has_key(path+"/"):
                    273:            return(self.parseIndexMeta(path))
                    274:      else:
                    275:        return "NO"
                    276: 
                    277: 
                    278:      
                    279: 
                    280:       security.declarePublic('isdigilib')    
                    281:       def isdigilib(self, path):
                    282:      """return number of possible image directories usefull for digilib""" 
                    283:          if self.hasindex.has_key(path+"/"):
                    284:         return(len(self.parseIndexMeta(path)))
                    285:      else:
                    286:         return 0
                    287: 
                    288:       security.declarePublic('parseIndexMeta')
                    289:       def parseIndexMeta(self,k):
                    290:          """parse indexmeta and return digilib path"""
                    291:          f = os.popen("cat "+k+"/index.meta","r")
                    292:           lines = f.read()
                    293:      
                    294:           try:
                    295:       dom = xml.dom.minidom.parseString(lines)
                    296:       content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    297:               if (content_type=="scanned-document") or (content_type=="scanned document"):
                    298:               dirs=self.getImageDirs(dom,k)
                    299:        
                    300:       return dirs
                    301:      except:
                    302:       return []
                    303:          
                    304:      
                    305: class filesystem2(Implicit, Persistent, RoleManager):
                    306:       """store filesystem"""
                    307:       node={}
                    308:       hasindex={}
                    309:       security=ClassSecurityInfo()
                    310:      
                    311:       def getfs(self,start):
                    312:         """load filessystem"""
                    313:         f = os.popen("find "+ start+" -name '*' ","r")
                    314:    lines = f.readlines()
                    315:    
                    316:         return lines
                    317: 
                    318:       def loadfs(self,start):
                    319:         """analyse filesystem"""
                    320:        for line in self.getfs(start):
                    321:        
                    322:        g=re.search(r"(.*/)(.*)\n",line)
                    323:        if not g==None:
                    324:                   try:
                    325:                         path=g.group(1)
                    326:                         file=g.group(2)
                    327:                   except:
                    328:                         """nothing"""
                    329:                   if self.node.has_key(path):
                    330:                 elements=self.node[path]
                    331:                 elements.append(file)
                    332:                 self.node[path]=elements
                    333:                   else:
                    334:             self.node[path]=[file]
                    335:                   if (file=="index.meta") | (file=="meta"):
                    336:                      self.hasindex[path]="1"
                    337:        
                    338:       def __init__(self,start,reload=0):
                    339:            """nothing"""
                    340:            
                    341:            
                    342:       security.declarePublic('getImageDirs')
                    343:       def getImageDirs(self,dom,path):
                    344:          dirs=dom.getElementsByTagName("dir")
                    345:      dirback=[]
                    346:      for dir in dirs:
                    347:          temp=getText(dir.getElementsByTagName("name")[0].childNodes)
                    348:          temp2=re.search(r"(.*)/mpiwg/online/(.*)",path+"/"+temp)
                    349:          if not temp2==None:
                    350:                     try:
                    351:                           dirback.append(temp2.group(2))
                    352:                     except:
                    353:                           """nothing"""
                    354:          else:
                    355:        dirback.append(temp)
                    356:           return dirback
                    357:       
                    358:          
                    359:       security.declarePublic('digilib')      
                    360:       def digilib(self, path):
                    361:          """check if folder is a container for digilib files"""
                    362:      if os.path.exists(path+"/index.meta"):
                    363:            return(self.parseIndexMeta(path))
                    364:      else:
                    365:        return "NO"
                    366: 
                    367:       security.declarePublic('isdigilib')    
                    368:       def isdigilib(self, path):
                    369:          if os.path.exists(path+"/index.meta"):
                    370:         return(len(self.parseIndexMeta(path)))
                    371:      else:
                    372:         return 0
                    373:       security.declarePublic('parseIndexMeta')
                    374:       def parseIndexMeta(self,k):
                    375:          """parse indexmeta and return digilib path"""
                    376:          f = os.popen("cat "+k+"/index.meta","r")
                    377:           lines = f.read()
                    378:      
                    379:           try:
                    380:       dom = xml.dom.minidom.parseString(lines)
                    381:       content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    382:               if content_type=="scanned-document":
                    383:               dirs=self.getImageDirs(dom,k)
                    384:        
                    385:       return dirs
                    386:      except:
                    387:       return []
                    388:          
                    389:      
                    390: class browse(Implicit, Persistent, RoleManager):
                    391:       
                    392:       security=ClassSecurityInfo()
                    393:       tree={}
                    394:       toggledict={}
                    395: 
                    396:       def filterExcluded(self,dir):
                    397:      ret=[]
                    398:      for item in dir:
                    399:        if not item in exclusion:
                    400:            ret.append(item) 
                    401:      return ret
                    402:    
                    403:       def __init__(self,startpath):
                    404:          self.tree={}
                    405:      self.tree[startpath]=self.filterExcluded(dircache.listdir(startpath))
                    406: 
                    407:       security.declarePublic('getTree')
                    408:       def getTree(self,path):  
                    409:          if self.tree.has_key(path):
                    410:                return self.tree[path]
                    411:           else:
                    412:         self.tree[path]=self.filterExcluded(dircache.listdir(path))
                    413:         return self.tree[path]
                    414:       
                    415:       security.declarePublic('isDirectory')
                    416:       def isDirectory(self,path,file): 
                    417:          return os.path.isdir(os.path.abspath(path+"/"+file))
                    418:       
                    419:       security.declarePublic('toggle')
                    420:       def toggle(self,tmppath,file):
                    421:          path=tmppath+"/"+file
                    422:      
                    423:          if self.toggledict.has_key(path):
                    424:         if self.toggledict[path]==0:
                    425:            self.toggledict[path]=1
                    426:        
                    427:         else:
                    428:            self.toggledict[path]=0
                    429:                 
                    430:           else:
                    431:         self.toggledict[path]=4
                    432:         
                    433: 
                    434:       security.declarePublic('isToggle')
                    435:       def isToggle(self,tmppath,file):
                    436:          path=tmppath+"/"+file
                    437: 
                    438:      if self.toggledict.has_key(path):
                    439:        
                    440:            return self.toggledict[path]
                    441:           else:
                    442:        
                    443:        return 0      
                    444: 
                    445:       
                    446: def getfs(start):
                    447:    """return filesystem"""
                    448:         f = os.popen("find "+ start+" -name '*'","r")
                    449:    lines = f.readlines()
                    450:         return lines
                    451: 
                    452: def showall(start):
                    453:    lines = getfs(start)
                    454:    for line in lines:
                    455:        print line
                    456:         return 0
                    457: 
                    458: def entries(start):
                    459:    """retrun list of entries of a filesystem"""
                    460:    i=0
                    461:    fs=[]
                    462:    lines=getfs(start)
                    463:    for line in lines:
                    464:             try:
                    465:                   if os.path.exists(os.path.abspath(re.search(r"(.*)\n",line).group(1))):
                    466:                         fs.append(fsentry(line))
                    467:                         i=i+1
                    468:             except:
                    469:                   """nothing"""
                    470:    return fs
                    471: 
                    472: def getfilesystem(start,reload=0):
                    473:    """load filesystem"""
                    474:    
                    475:    k=filesystem(start,1)
                    476:    return k
                    477: 
                    478: 
                    479: 
                    480: def sort_by_date(fs):
                    481:    """sorts lists of fileentries"""
                    482:    ls=[]
                    483:    dict={}
                    484:    for k in fs:
                    485:             ls.append(k.getID())
                    486:        dict[k.getID()]=k
                    487:    ls.sort()
                    488:         ls.reverse()
                    489:         ret=[]
                    490:    for j in ls:
                    491:        ret.append(dict[j])
                    492:         return ret
                    493: 
                    494: def path_to_link(path):
                    495:     """generates navigation bar for showfiles"""
                    496:     string=""
                    497:     
                    498:     tmppath=os.path.dirname(path)
                    499:     i=0
                    500:     pathes=[[path, os.path.basename(path)]]
                    501:     
                    502:     while not (len(tmppath)==1):
                    503:          
                    504:          i=i+1
                    505:      if i>20: break
                    506:    
                    507:          pathes.append([tmppath, os.path.basename(tmppath)])
                    508:          tmppath=os.path.dirname(tmppath)
                    509: 
                    510:     while i>=0:
                    511:          string=string+"<a href=showfiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    512:      
                    513:      i=i-1
                    514:     return string
                    515: 
                    516: def path_to_link_view(URL,path):
                    517:     """generates navigation bar for viewfiles"""
                    518:     string=""
                    519:     
                    520:     tmppath=os.path.dirname(path)
                    521:     i=0
                    522:     pathes=[[path, os.path.basename(path)]]
                    523:     
                    524:     while not (len(tmppath)==1):
                    525:          
                    526:          i=i+1
                    527:      if i>20: break
                    528:      
                    529:          pathes.append([tmppath, os.path.basename(tmppath)])
                    530:          tmppath=os.path.dirname(tmppath)
                    531: 
                    532:     while i>=0:
                    533:          string=string+"<a href="+URL+"?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    534:      
                    535:      i=i-1
                    536:     return string
                    537: 
                    538: def path_to_link_store(path):
                    539:     """generates navigation bar for viewfiles"""
                    540:     string=""
                    541:     
                    542:     tmppath=os.path.dirname(path)
                    543:     i=0
                    544:     pathes=[[path, os.path.basename(path)]]
                    545:     
                    546:     while not (len(tmppath)==1):
                    547:          
                    548:          i=i+1
                    549:      if i>20: break
                    550:      
                    551:          pathes.append([tmppath, os.path.basename(tmppath)])
                    552:          tmppath=os.path.dirname(tmppath)
                    553: 
                    554:     while i>=0:
                    555:          string=string+"<a href=storefiles?path="+pathes[i][0]+">"+pathes[i][1]+"</a>/"
                    556:      
                    557:      i=i-1
                    558:     return string
                    559: 
                    560: 
                    561: class Error(Implicit, Persistent, RoleManager):
                    562:    
                    563:    error=[]
                    564:        security=ClassSecurityInfo()
                    565:    def __init__(self,initerror):
                    566:               self.error=initerror[0:]
                    567: 
                    568:    security.declarePublic('getError')
                    569:    def getError(self):
                    570:        return self.error
                    571: 
                    572: class metacheck(Implicit, Persistent, RoleManager):
                    573:         lines=[]
                    574:    security=ClassSecurityInfo()
                    575:    def parsearchive(self,str):
                    576:            """parse for error"""
                    577:            retstr=''
                    578:                 
                    579:                 if not len(str)==0:
                    580:                       for line in str:
                    581:                             retstr=retstr+line+"<br>"
                    582:                       check=re.search(r"(.*):(.*)",line)
                    583:                       if check.group(1)=='ABORT':
                    584:                             error="error"
                    585:                       elif check.group(1)=='DONE':
                    586:                             error="ok"
                    587:                       else:
                    588:                             error="running"
                    589:                             
                    590:                       return [retstr,error]
                    591:                 else:
                    592:                       return ['','running']
                    593:    def __init__(self,path):
                    594:        """archive the documents in path"""
                    595:            self.lines=[]
                    596:        
                    597:            if type(path)==StringType:
                    598:            f = os.popen("/usr/local/mpiwg/archive/metacheck "+path,"r")
                    599:                self.lines.append(Error([path,self.parsearchive(f.readlines())]))
                    600:        else:
                    601:                for singlepath in path:
                    602:                    f = os.popen("/usr/local/mpiwg/archive/metacheck "+singlepath,"r")
                    603:                    self.lines.append(Error([singlepath,self.parsearchive(f.readlines())]))
                    604:         security.declarePublic('messages')
                    605:    
                    606:    def messages(self):
                    607:        return self.lines
                    608:    
                    609:        
                    610: 
                    611: 
                    612: class archive(Implicit, Persistent, RoleManager):
                    613:       lines=[]
                    614:       security=ClassSecurityInfo()
                    615:       def parsearchive(self,str):
                    616:             """parse for error"""
                    617:             retstr=''
                    618:             
                    619:             if not len(str)==0:
                    620:                   for line in str:
                    621:                         retstr=retstr+line+"<br>"
                    622:                   check=re.search(r"(.*):(.*)",line)
                    623:                   if check.group(1)=='ABORT':
                    624:                         error="error"
                    625:                   elif check.group(1)=='DONE':
                    626:                         error="ok"
                    627:                   else:
                    628:                         error="running"
                    629:                   
                    630:                   return [retstr,error]
                    631:             else:
                    632:                   return ['','running']
                    633:                   
                    634:       def __init__(self,path,session):
                    635:             """archive the documents in path"""
                    636:             self.lines=[]
                    637:             self.filenames={}
                    638:             session['archiver']=self
                    639:            
                    640:            
                    641:             if type(path)==StringType:
                    642:                   self.filenames[path]=tempfile.mktemp()
                    643:                   f = os.popen("/usr/local/mpiwg/archive/archiver "+path+" > "+self.filenames[path]+" &","r")
                    644:             else:
                    645:                   for singlepath in path:
                    646:                         self.filenames[singlepath]=tempfile.mktemp()
                    647:                         f = os.popen("/usr/local/mpiwg/archive/archiver "+singlepath+" > "+self.filenames[singlepath]+" &","r")
                    648:                             
                    649:       security.declarePublic('messages')
                    650:       def messages(self):
                    651:             self.lines=[]
                    652:             for path in self.filenames.keys():
                    653:                   
                    654:                   self.lines.append(Error([path,self.parsearchive(open(self.filenames[path],"r").readlines())]))
                    655:             return self.lines
                    656: 
                    657:    
                    658: def evalext(str):
                    659:      return eval(str)
                    660: 
                    661: def storeerror(ret,path,context,i):
                    662:      session=context.REQUEST.SESSION
                    663:      session['error%i'%i]=ret
                    664:      session['path%i'%i]=path
                    665:      
                    666:      return 'error?number=%i'%i
                    667: 
                    668: def geterror(str,context):
                    669:      session=context.REQUEST.SESSION
                    670:      return session[str]
                    671: 
                    672: def readfile(path):
                    673:      
                    674:      ret=""
                    675:      f=open(path,'r')
                    676:      for g in f.readlines():
                    677:    ret=ret+g
                    678:      return ret
                    679: 
                    680: def writefile(self,path,txt,REQUEST):
                    681:      f=open(path,'w')
                    682:      f.write(txt)
                    683:      f.close()
                    684:      rval=self.aq_acquire('archive2')
                    685:      return rval()
                    686: 
                    687: 
                    688: def metachecker(self,path):
                    689:     """check the metadata the documents in path"""
                    690:     self.REQUEST.SESSION['path']=self.REQUEST['path']
                    691:     return metacheck(path)
                    692: 
                    693: def archiver(self,path):
                    694:     """archive the documents in path"""
                    695:     tmp=archive(path,self.REQUEST.SESSION)
                    696:     return self.REQUEST.RESPONSE.redirect('archive4')
                    697: 
                    698: def getText(nodelist):
                    699:     
                    700:     rc = ""
                    701:     for node in nodelist:
                    702:        if node.nodeType == node.TEXT_NODE:
                    703:            rc = rc + node.data
                    704:     return rc
                    705: 
                    706: def getBib(nodelist):
                    707:     rc= "<table border='0'>"
                    708:     print "HI"
                    709:     for node in nodelist:
                    710:         
                    711:        if node.nodeType == node.ELEMENT_NODE:
                    712:       """nothing"""
                    713:       rc = rc+"<tr><td valign='right'>"+str(node.nodeName)+":</td><td> "+getText(node.childNodes)+"</td></tr>"
                    714:     #print rc
                    715:     return rc+"</table>"
                    716: 
                    717: def getMetafile(path):
                    718:     """get index.meta"""
                    719:     html=[]
                    720:     if not os.path.exists(path+"/index.meta"):
                    721:           
                    722:           return "NO_METADATA"
                    723:     else:
                    724:        f = os.popen("cat "+path+"/index.meta","r")
                    725:        lines = f.read()
                    726:        dom = xml.dom.minidom.parseString(lines)
                    727:        name=getText(dom.getElementsByTagName("name")[0].childNodes) 
                    728:        creator=getText(dom.getElementsByTagName("creator")[0].childNodes)   
                    729:        creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes) 
                    730:        description=getText(dom.getElementsByTagName("description")[0].childNodes) 
                    731:        try:
                    732:            type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    733:        except:
                    734:         type=""
                    735:        if type=="scanned document":
                    736:        html="<h3>Document: "+name+"</h3>"
                    737:        elif type=="folder":
                    738:        html="<h3>Folder: "+name+"</h3>"
                    739:        else:
                    740:                html="<h3>Document: "+name+"</h3>"
                    741: 
                    742:        html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>" 
                    743:        html=html+"<h4>Description</h4><p>"+description+"</p>"
                    744:        try:
                    745:         bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
                    746:         if bib.attributes.has_key('type'):
                    747:      html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
                    748:    else:
                    749:      html=html+"<h4>Info</h4>"
                    750:         html=html+getBib(bib.childNodes)
                    751:         print html
                    752:        except:
                    753:         """none"""
                    754:        
                    755: #        html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
                    756:        
                    757:        return html
                    758: 
                    759: def hasMetafile(path):
                    760:     """get index.meta"""
                    761:     return os.path.exists(path+"/index.meta")
                    762:     #return path
                    763: 
                    764: def isdigilib2(path):
                    765:      """check if folder is candidate for digilib without metadata""" 
                    766:           try:
                    767:                 dir=os.listdir(path)
                    768: 
                    769:                 imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif','.JPG','.TIFF','.TIF']
                    770:                 ret=""
                    771:                 for a in dir:
                    772:                       
                    773:                       suffix=os.path.splitext(a)
                    774:        
                    775:                       if suffix[1] in imagesuffixes:
                    776:                             return 1
                    777: 
                    778:                 try:
                    779:                       dom=xml.dom.minidom.parse(os.path.split(path)[0]+"/index.meta")
                    780:                       for node in dom.getElementsByTagName("dir"):
                    781:                   
                    782:                             if getText(node.getElementsByTagName("content-type")[0].childNodes)=="images":
                    783:                         
                    784:                                   if getText(node.getElementsByTagName("name")[0].childNodes)==os.path.split(path)[1]:
                    785:                                         return 1
                    786:                       return 0
                    787:                 except:
                    788:             
                    789:                       return 0
                    790: 
                    791: 
                    792:                 
                    793:                 
                    794: 
                    795:           except:
                    796:                 return 0
                    797: 
                    798: def isFullText(path,folder_name):
                    799:       """check if foldername in path is full text"""
                    800:       try:
                    801:             dom=xml.dom.minidom.parse(path+"/index.meta")
                    802:             for node in dom.getElementsByTagName("dir"):
                    803:                   
                    804:                   if getText(node.getElementsByTagName("content-type")[0].childNodes)=="fulltext":
                    805:                         
                    806:                         if getText(node.getElementsByTagName("name")[0].childNodes)==folder_name:
                    807:                               return 1
                    808:             return 0
                    809:       except:
                    810:             
                    811:             return 0
                    812: 
                    813: 
                    814: def isPresentation(path,folder_name):
                    815:       """check if foldername in path is full text"""
                    816:       try:
                    817:             dom=xml.dom.minidom.parse(path+"/index.meta")
                    818:             #print dom.toxml()
                    819:             for dirnode in dom.getElementsByTagName("dir"):
                    820:                   try:
                    821:                          
                    822:                         if getText(dirnode.getElementsByTagName('content-type')[0].childNodes)=='presentation':
                    823:                               if getText(dirnode.getElementsByTagName("name")[0].childNodes)==folder_name:
                    824:                                     return 1
                    825:                   except:
                    826:                         """nothing"""
                    827:             return 0
                    828:       except:
                    829:             
                    830:             return 0
                    831:                   
                    832:                   
                    833:                         
                    834: 
                    835: 
                    836: def changeName(path):
                    837:       try:
                    838:          temp2=re.search(r"(.*)/mpiwg/online/(.*)",path)
                    839:     if temp2==None:     
                    840:            return "digifiles/"+re.search(r"(.*)/mpiwg/production/docuserver/(.*)",path).group(2)
                    841:     else:  
                    842:            return temp2.group(2)
                    843:       except: # hack - im archivbereich keine online darstellung gibt jetzt ein no zurück.
                    844:             return "NO"
                    845: 
                    846:    
                    847: def test(self):
                    848:         self.i=1
                    849:        #newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/test').__of__(self)
                    850:         self.manage_addProduct['OFSP'].manage_addDTMLMethod('neu','neu')
                    851:         self.getattr('neu').manage_edit('HELLO','neu')
                    852:         return "ok"
                    853: 
                    854: 
                    855: class ls(Implicit, Persistent, RoleManager):
                    856:       """File entry class"""
                    857:       path = ""
                    858:       user = ""
                    859:       month = ""
                    860:       date =""
                    861:       time = ""
                    862:       
                    863:       security=ClassSecurityInfo()
                    864: 
                    865:       def __init__(self,start):
                    866:             self.outfile=tempfile.mktemp()
                    867:             start['outfile']=self
                    868:             os.popen("ls -R / >"+self.outfile+" &","r")
                    869:             
                    870:             
                    871:       security.declarePublic('read')
                    872:       def read(self):
                    873:             return self.f.read()
                    874:       security.declarePublic('retself')
                    875:       def retself(self):
                    876:             return self
                    877:       security.declarePublic('all')
                    878:       def all(self):
                    879:             ret=""
                    880:             for g in self.f:
                    881:                   ret=ret+g
                    882:             return ret
                    883: 
                    884:       security.declarePublic('printOutfile')
                    885:       def printOutfile(self):
                    886:             while not os.path.exists(self.outfile):
                    887:                   """nothing"""
                    888:             return open(self.outfile).readlines()
                    889:       
                    890: class overview(Implicit,Persistent, RoleManager):
                    891:       dir=[]
                    892:       resources={}
                    893:       security=ClassSecurityInfo()
                    894:       
                    895:       def __init__(self,path):
                    896:             dir=os.listdir(path)
                    897:             
                    898:             for file in dir:
                    899:                   self.resources[self.getResource(path,file)]=path+"/"+file
                    900:         
                    901:             
                    902:       def getResource(self,path,filename):
                    903:             f=file(path+"/"+filename,'r')
                    904:       
                    905:             for line in f.readlines():
                    906:                   
                    907:                   if line[0:4]=="INFO":
                    908:                         if line[6:14]=="resource":
                    909:                               return line
                    910:             return "error"
                    911: 
                    912:       def parsearchive(self,str):
                    913:             """parse for error"""
                    914:             retstr=''
                    915:             
                    916:             if not len(str)==0:
                    917:                   for line in str:
                    918:                         retstr=retstr+line+"<br>"
                    919:                   check=re.search(r"(.*):(.*)",line)
                    920:                   if check.group(1)=='ABORT':
                    921:                         error="error"
                    922:                   elif check.group(1)=='DONE':
                    923:                         error="ok"
                    924:                   else:
                    925:                         error="running"
                    926:                   
                    927:                   return [retstr,error]
                    928:             else:
                    929:                   return ['','running']
                    930: 
                    931:       security.declarePublic('messages')
                    932:       def messages(self):
                    933:             self.lines=[]
                    934:             for name in self.resources.keys():
                    935:                   path=self.resources[name]
                    936:                   
                    937:                   self.lines.append(Error([name,self.parsearchive(open(path,"r").readlines())]))
                    938:             return self.lines
                    939: 
                    940:       security.declarePublic('printResource')
                    941:       def printResource(self):
                    942:             return self.resources
                    943:       
                    944: def getoverview(path):
                    945:       
                    946:       return overview(path)
                    947: 
                    948:       
                    949: def ls_test(self):
                    950:       tmp=ls(self.REQUEST.SESSION)
                    951:       return self.REQUEST.RESPONSE.redirect('next')
                    952: 
                    953: def storeFile(self,something):
                    954:       self.REQUEST.SESSION['something']=something
                    955:       return 1
                    956: 
                    957: def getFile(self):
                    958:       return self.REQUEST.SESSION['something']
                    959: 
                    960: def isFolder(self,path):
                    961:       """returns TRUE, wenn path ein Folder ist in den weitere Objekte Folder oder Dokumente gelegt werden dürfen"""
                    962:       return not isScannedDocument(self,path) # vorläufig sind alle Documente die keine scanned documente sind folder.
                    963: 
                    964: def isScannedDocument(self,path):
                    965:       """returns TRUE, wenn path der Stammordner eines gescannten Documents ist"""
                    966:       try:
                    967:             f = file(path+"/index.meta","r")
                    968:             lines = f.read()
                    969:       
                    970:             try:
                    971:                   dom = xml.dom.minidom.parseString(lines)
                    972:                   content_type=getText(dom.getElementsByTagName("content-type")[0].childNodes) 
                    973:                   if (content_type=="scanned-document") or (content_type=="scanned document"):
                    974:                         return 1
                    975:                   else:
                    976:                         return 0
                    977:             except:
                    978:                   return 0
                    979:       except:
                    980:             return 0
                    981: 
                    982: from time import localtime,strftime
                    983: 
                    984: def date(self):
                    985:    return strftime("%d.%m.%Y",localtime()) 
                    986: 
                    987:       
                    988:       
                    989: def EditIndex(self,path):
                    990:       try:
                    991:             dom=xml.dom.minidom.parse(path+"/index.meta")
                    992:             indexmeta=dom.toxml()
                    993:       except:
                    994:             indexmeta=""
                    995:       self.REQUEST.SESSION['indexmeta']=indexmeta
                    996:       self.REQUEST.SESSION['path']=path
                    997:       newtemplate=PageTemplateFile('/usr/local/mpiwg/Zope/Extensions/editindex').__of__(self)
                    998:       return newtemplate()
                    999: 
                   1000: def EditIndex2(self):
                   1001:       if not self.REQUEST.has_key('fileupload'):
                   1002:             #newtext=urllib.unquote(self.REQUEST['indexmeta'])
                   1003:             newtext=self.REQUEST['indexmeta']
                   1004:             print newtext
                   1005:       else:
                   1006:             self.file_name=self.REQUEST['fileupload'].filename
                   1007:             #newtext=self.REQUEST.form['fileupload'].read()
                   1008:             # HACK DW
                   1009:             newtext=self.REQUEST['indexmeta']
                   1010:       
                   1011:       indexmeta=file(self.REQUEST.SESSION['path']+"/index.meta","w")
                   1012:       indexmeta.writelines(newtext)
                   1013:       return self.REQUEST.response.redirect("storage/storefiles?path="+self.REQUEST.SESSION['path'])
                   1014: 
                   1015:     

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