Annotation of versionedFile/versionedFile.py, revision 1.2
1.1 dwinter 1: from OFS.Folder import Folder
2: from OFS.Image import File
3: from OFS.Image import cookId
4: from Globals import DTMLFile, InitializeClass
5: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
6: from AccessControl import getSecurityManager
7: from Products.PageTemplates.PageTemplate import PageTemplate
8: from AccessControl import ClassSecurityInfo
9:
10: def sortv(x,y):
11: return cmp(x[0],y[0])
12:
13: class versionedFileFolder(Folder):
14: """Folder with versioned files"""
15:
16: meta_type = "versionedFileFolder"
17:
18: security= ClassSecurityInfo()
19: security.declareProtected('AUTHENTICATED_USER','addFileForm')
20:
21: def getVersionedFiles(self):
22: """get all versioned files"""
1.2 ! dwinter 23: print "hi"
! 24: versionedFiles=self.ZopeFind(self,obj_metatypes=['versionedFile'])
! 25: print "hi",versionedFiles
1.1 dwinter 26: return versionedFiles
27:
28:
29: def index_html(self):
30: """main"""
31: pt=PageTemplateFile('Products/versionedFile/zpt/versionFileFolderMain').__of__(self)
32: return pt()
33:
34:
35: def addFileForm(self):
36: """add a file"""
37: out=DTMLFile('dtml/newFileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject',version='1').__of__(self)
38: return out()
39:
40:
41: def addFile(self,vC,file,content_type='',RESPONSE=None):
42: """ add a new file"""
43: id=file.filename
44:
45: vC=self.REQUEST.form['vC']
46: manage_addVersionedFile(self,id,'','')
47: ob=self._getOb(id)
48: ob.title=id
1.2 ! dwinter 49:
1.1 dwinter 50: ob.manage_addVersionedFileObject(self,id,vC,file,content_type=content_type)
51:
52: RESPONSE.redirect(self.REQUEST['URL1'])
53:
54:
55: manage_addVersionedFileFolderForm=DTMLFile('dtml/folderAdd', globals())
56:
57:
58: def manage_addVersionedFileFolder(self, id, title='',
59: createPublic=0,
60: createUserF=0,
61: REQUEST=None):
62: """Add a new Folder object with id *id*.
63:
64: If the 'createPublic' and 'createUserF' parameters are set to any true
65: value, an 'index_html' and a 'UserFolder' objects are created respectively
66: in the new folder.
67: """
68: ob=versionedFileFolder()
69: ob.id=str(id)
70: ob.title=title
71: self._setObject(id, ob)
72: ob=self._getOb(id)
73:
74: checkPermission=getSecurityManager().checkPermission
75:
76: if createUserF:
77: if not checkPermission('Add User Folders', ob):
78: raise Unauthorized, (
79: 'You are not authorized to add User Folders.'
80: )
81: ob.manage_addUserFolder()
82:
83:
84: if REQUEST is not None:
85: return self.manage_main(self, REQUEST, update_menu=1)
86:
87:
88:
89: class versionedFileObject(File):
90: """File Object im Folder"""
91:
92: meta_type = "versionedFileObject"
93:
94: manage_editForm =DTMLFile('dtml/fileEdit',globals(),
95: Kind='File',kind='file')
96: manage_editForm._setName('manage_editForm')
97:
98:
99: def setVersionNumber(self,versionNumber):
100: """set version"""
101: self.versionNumber=versionNumber
102:
103: def getVersionNumber(self):
104: """get version"""
105: return self.versionNumber
106:
107: def lastEditor(self):
108: """last Editor"""
109: jar=self._p_jar
110: oid=self._p_oid
111: if jar is None or oid is None: return None
112: return jar.db().history(oid)[0]['user_name']
113:
114:
115:
116:
117: manage_addVersionedFileObjectForm=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject', version='1')
118:
119: def manage_addVersionedFileObject(self,id,vC='',file='',title='',precondition='', content_type='',
120: REQUEST=None):
121: """Add a new File object.
122:
123: Creates a new File object 'id' with the contents of 'file'"""
124:
125: id=str(id)
126: title=str(title)
127: content_type=str(content_type)
128: precondition=str(precondition)
129:
130: id, title = cookId(id, title, file)
131:
132: self=self.this()
133:
134: # First, we create the file without data:
135: self._setObject(id, versionedFileObject(id,title,'',content_type, precondition))
136: self._getOb(id).versionComment=str(vC)
137:
138: # Now we "upload" the data. By doing this in two steps, we
139: # can use a database trick to make the upload more efficient.
140: if file:
141: self._getOb(id).manage_upload(file)
142: if content_type:
143: self._getOb(id).content_type=content_type
144:
145: if REQUEST is not None:
146: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
147:
148:
149:
150:
151: class versionedFile(Folder):
152: """Versioniertes File"""
153:
154: def __init__(self, id, title, lockedBy):
155: """init"""
156: self.id=id
157: self.title=title
158: self.lockedBy=lockedBy
159:
160: meta_type="versionedFile"
161:
162: def getLastVersion(self):
163: """Last Version"""
164: tmp=0
165: lastVersion=None
1.2 ! dwinter 166:
1.1 dwinter 167: for version in self.ZopeFind(self):
1.2 ! dwinter 168:
1.1 dwinter 169: if hasattr(version[1],'versionNumber'):
1.2 ! dwinter 170:
1.1 dwinter 171: if int(version[1].versionNumber) > tmp:
172: tmp=int(version[1].versionNumber,)
173: lastVersion=version[1]
174: return lastVersion
175:
176: def index_html(self):
177: """main view"""
178: lastVersion=self.getLastVersion()
179: #return "File:"+self.title+" Version:%i"%lastVersion.versionNumber," modified:",lastVersion.bobobase_modification_time()," size:",lastVersion.getSize(),"modified by:",lastVersion.lastEditor()
180: return "File: %s Version:%i modified:%s size:%s modified by:%s"%(self.title,lastVersion.versionNumber,lastVersion.bobobase_modification_time(),lastVersion.getSize(),lastVersion.lastEditor())
181:
182: def getVersion(self):
183: tmp=0
184: for version in self.ZopeFind(self):
1.2 ! dwinter 185:
1.1 dwinter 186: if hasattr(version[1],'versionNumber'):
1.2 ! dwinter 187:
1.1 dwinter 188: if int(version[1].versionNumber) > tmp:
189: tmp=int(version[1].versionNumber,)
190: return tmp+1
191:
192: security= ClassSecurityInfo()
193: security.declareProtected('AUTHENTICATED_USER','unlock')
194:
195: def history(self):
196: """history"""
197: pt=PageTemplateFile('Products/versionedFile/zpt/versionHistory').__of__(self)
198: return pt()
199:
200: def getVersions(self):
201: """get all versions"""
202: ret=[]
203: for version in self.ZopeFind(self):
204: if hasattr(version[1],'versionNumber'):
205: ret.append((version[1].versionNumber,version[1]))
206: ret.sort(sortv)
207: return ret
208:
209:
210: def unlock(self,RESPONSE):
211: """unlock"""
1.2 ! dwinter 212: if str(self.lockedBy) in [str(self.REQUEST['AUTHENTICATED_USER'])]:
1.1 dwinter 213: self.lockedBy=''
214: RESPONSE.redirect(self.REQUEST['URL2'])
215: else:
216: return "Sorry, not locked by you! (%s,%s)"%(self.lockedBy,self.REQUEST['AUTHENTICATED_USER'])
217:
218: security= ClassSecurityInfo()
219: security.declareProtected('AUTHENTICATED_USER','addVersionedFileObjectForm')
220:
221: def addVersionedFileObjectForm(self):
222: """add a new version"""
1.2 ! dwinter 223:
! 224: if str(self.REQUEST['AUTHENTICATED_USER']) in ["Anonymous User"]:
1.1 dwinter 225: return "please login first"
226: if (self.lockedBy==self.REQUEST['AUTHENTICATED_USER']) or (self.lockedBy==''):
227: out=DTMLFile('dtml/fileAdd', globals(),Kind='VersionedFileObject',kind='versionedFileObject',version=self.getVersion()).__of__(self)
228: return out()
229: else:
230: return "Sorry file is locked by somebody else"
231:
232: def manage_addVersionedFileObject(self,id,vC,file='',title='',precondition='', content_type='',RESPONSE=None):
233: """add"""
234:
235: vC=self.REQUEST['vC']
236: id="V%i"%self.getVersion()+"_"+self.title
237: manage_addVersionedFileObject(self,id,vC,file,"V%i"%self.getVersion()+"_"+self.title,precondition, content_type)
238: objs=self.ZopeFind(self,obj_ids=[id])[0][1].setVersionNumber(int(self.getVersion()))
239:
240: if RESPONSE:
241: RESPONSE.redirect(self.REQUEST['URL2'])
242:
243: security.declareProtected('AUTHENTICATED_USER','downloadLocked')
244:
245: def downloadLocked(self):
246: """download and lock"""
247: if self.REQUEST['AUTHENTICATED_USER']=='Anonymous User':
248: return "please login first"
249: if not self.lockedBy=="":
250: return "cannot be locked because is already locked by %s"%self.lockedBy
251: self.lockedBy=self.REQUEST['AUTHENTICATED_USER']
252:
253: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+'/'+self.getId()+'/'+self.getLastVersion().getId())
254:
255: def manage_addVersionedFileForm(self):
256: """interface for adding the OSAS_root"""
257: pt=PageTemplateFile('Products/versionedFile/zpt/addVersionedFile.zpt').__of__(self)
258: return pt()
259:
260: def manage_addVersionedFile(self,id,title,lockedBy, RESPONSE=None):
261: """add the OSAS_root"""
262: newObj=versionedFile(id,title,lockedBy)
263: self._setObject(id,newObj)
264: if RESPONSE is not None:
265: RESPONSE.redirect('manage_main')
266:
267:
268: InitializeClass(versionedFile)
269: InitializeClass(versionedFileFolder)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>