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