Annotation of OSAS/OSA_system/OSAS_show.py, revision 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>