annotate frontends/ZRoundup/ZRoundup.py @ 5548:fea11d05110e

Avoid errors from selecting "no selection" on multilink (issue2550722). As discussed in issue 2550722 there are various cases where selecting "no selection" on a multilink can result in inappropriate errors from Roundup: * If selecting "no selection" produces a null edit (a value was set in the multilink in an edit with an error, then removed again, along with all other changes, in the next form submission), so the page is rendered from the form contents including the "-<id>" value for "no selection" for the multilink. * If creating an item with a nonempty value for a multilink has an error, and the resubmission changes that multilink to "no selection" (and this in turn has subcases, according to whether the creation then succeeds or fails on the resubmission, which need fixes in different places in the Roundup code). All of these cases have in common that it is expected and OK to have a "-<id>" value for a submission for a multilink when <id> is not set in that multilink in the database (because the original attempt to set <id> in that multilink had an error), so the hyperdb.py logic to give an error in that case is thus removed. In the subcase of the second case where the resubmission with "no selection" has an error, the templating code tries to produce a menu entry for the "-<id>" multilink value, which also results in an error, hence the templating.py change to ignore such values in the list for a multilink.
author Joseph Myers <jsm@polyomino.org.uk>
date Thu, 27 Sep 2018 11:33:01 +0000
parents 88dbacd11cd1
children fed0f839c260
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 # This module is free software, and you may redistribute it and/or modify
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # under the same terms as Python, so long as this copyright message and
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # disclaimer are retained in their original form.
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 #
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # POSSIBILITY OF SUCH DAMAGE.
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 #
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 #
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 ''' ZRoundup module - exposes the roundup web interface to Zope
447
70bdd0cef7e4 added some implementation notes
Richard Jones <richard@users.sourceforge.net>
parents: 446
diff changeset
18
506
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
19 This frontend works by providing a thin layer that sits between Zope and the
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
20 regular CGI interface of roundup, providing the web frontend with the minimum
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
21 of effort.
447
70bdd0cef7e4 added some implementation notes
Richard Jones <richard@users.sourceforge.net>
parents: 446
diff changeset
22
506
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
23 This means that the regular CGI interface does all authentication quite
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
24 independently of Zope. The roundup code is kept in memory though, and it
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
25 runs in the same server as all your other Zope stuff, so it does have _some_
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
26 advantages over regular CGI :)
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 '''
768
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
28
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5399
diff changeset
29 from roundup.anypy import urllib_
768
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
30
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 from Globals import InitializeClass, HTMLFile
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 from OFS.SimpleItem import Item
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 from OFS.PropertyManager import PropertyManager
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
34 from Acquisition import Explicit, Implicit
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 from Persistence import Persistent
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 from AccessControl import ClassSecurityInfo
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 from AccessControl import ModuleSecurityInfo
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 modulesecurity = ModuleSecurityInfo()
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 import roundup.instance
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2612
diff changeset
41 from roundup.cgi import client
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42
506
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
43 modulesecurity.declareProtected('View management screens',
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
44 'manage_addZRoundupForm')
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 manage_addZRoundupForm = HTMLFile('dtml/manage_addZRoundupForm', globals())
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 modulesecurity.declareProtected('Add Z Roundups', 'manage_addZRoundup')
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 def manage_addZRoundup(self, id, instance_home, REQUEST):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 """Add a ZRoundup product """
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 # validate the instance_home
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 roundup.instance.open(instance_home)
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 self._setObject(id, ZRoundup(id, instance_home))
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 return self.manage_main(self, REQUEST)
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 class RequestWrapper:
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 '''Make the Zope RESPONSE look like a BaseHTTPServer
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 '''
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 def __init__(self, RESPONSE):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 self.RESPONSE = RESPONSE
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 self.wfile = self.RESPONSE
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 def send_response(self, status):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 self.RESPONSE.setStatus(status)
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 def send_header(self, header, value):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 self.RESPONSE.addHeader(header, value)
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 def end_headers(self):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 # not needed - the RESPONSE object handles this internally on write()
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 pass
3962
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
68 def start_response(self, headers, response):
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
69 self.send_response(response)
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
70 for key, value in headers:
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
71 self.send_header(key, value)
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
72 self.end_headers()
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 class FormItem:
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 '''Make a Zope form item look like a cgi.py one
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 '''
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 def __init__(self, value):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 self.value = value
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 if hasattr(self.value, 'filename'):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 self.filename = self.value.filename
2869
908c27314abf merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
81 self.value = self.value.read()
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 class FormWrapper:
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 '''Make a Zope form dict look like a cgi.py one
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 '''
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 def __init__(self, form):
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3180
diff changeset
87 self.__form = form
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 def __getitem__(self, item):
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3180
diff changeset
89 entry = self.__form[item]
2612
7cf56f5b3991 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 1911
diff changeset
90 if isinstance(entry, type([])):
5399
dccae35caa59 Python 3 preparation: update map() calls as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5395
diff changeset
91 entry = list(map(FormItem, entry))
2612
7cf56f5b3991 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 1911
diff changeset
92 else:
7cf56f5b3991 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 1911
diff changeset
93 entry = FormItem(entry)
7cf56f5b3991 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 1911
diff changeset
94 return entry
3962
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
95 def __iter__(self):
41d297d7dcec Fix ZRoundup to work with Zope 2.8.5 [SF#1806125]
Richard Jones <richard@users.sourceforge.net>
parents: 3505
diff changeset
96 return iter(self.__form)
2612
7cf56f5b3991 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 1911
diff changeset
97 def getvalue(self, key, default=None):
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
98 if key in self.__form:
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3180
diff changeset
99 return self.__form[key]
2612
7cf56f5b3991 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 1911
diff changeset
100 else:
2869
908c27314abf merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
101 return default
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 def has_key(self, item):
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5378
diff changeset
103 return item in self.__form
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 def keys(self):
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
105 return list(self.__form.keys())
3505
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3180
diff changeset
106
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3180
diff changeset
107 def __repr__(self):
b294cc477f2c ZRoundup works again [SF#1263842]
Richard Jones <richard@users.sourceforge.net>
parents: 3180
diff changeset
108 return '<ZRoundup.FormWrapper %r>'%self.__form
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 class ZRoundup(Item, PropertyManager, Implicit, Persistent):
506
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
111 '''An instance of this class provides an interface between Zope and
453096f811f0 reformatting for 80 cols
Richard Jones <richard@users.sourceforge.net>
parents: 448
diff changeset
112 roundup for one roundup instance
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 '''
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 meta_type = 'Z Roundup'
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 security = ClassSecurityInfo()
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 def __init__(self, id, instance_home):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 self.id = id
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 self.instance_home = instance_home
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 # define the properties that define this object
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 _properties = (
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 {'id':'id', 'type': 'string', 'mode': 'w'},
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 {'id':'instance_home', 'type': 'string', 'mode': 'w'},
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 )
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 property_extensible_schema__ = 0
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 # define the tabs for the management interface
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 manage_options= PropertyManager.manage_options + (
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 {'label': 'View', 'action':'index_html'},
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 ) + Item.manage_options
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 icon = "misc_/ZRoundup/icon"
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
135 security.declarePrivate('roundup_opendb')
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
136 def roundup_opendb(self):
448
6e3911304700 Fixed some problems with user editing
Richard Jones <richard@users.sourceforge.net>
parents: 447
diff changeset
137 '''Open the roundup instance database for a transaction.
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 '''
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2612
diff changeset
139 tracker = roundup.instance.open(self.instance_home)
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 request = RequestWrapper(self.REQUEST['RESPONSE'])
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 env = self.REQUEST.environ
765
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
142
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
143 # figure out the path components to set
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5399
diff changeset
144 url = urllib_.urlparse( self.absolute_url() )
808
b7f38cc4680a fixed [SF#576086] (dumb copying mistake)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 771
diff changeset
145 path = url[2]
b7f38cc4680a fixed [SF#576086] (dumb copying mistake)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 771
diff changeset
146 path_components = path.split( '/' )
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
147
765
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
148 # special case when roundup is '/' in this virtual host,
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
149 if path == "/" :
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
150 env['SCRIPT_NAME'] = "/"
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
151 env['TRACKER_NAME'] = ''
765
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
152 else :
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
153 # all but the last element is the path
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
154 env['SCRIPT_NAME'] = '/'.join( path_components[:-1] )
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
155 # the last element is the name
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
156 env['TRACKER_NAME'] = path_components[-1]
765
1b5575ccffe1 Fixed the logic for determing the cookie path. (Closes [SF#562130].)
Derrick Hudson <dman13@users.sourceforge.net>
parents: 717
diff changeset
157
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
158 form = FormWrapper(self.REQUEST.form)
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2612
diff changeset
159 if hasattr(tracker, 'Client'):
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2612
diff changeset
160 return tracker.Client(tracker, request, env, form)
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2612
diff changeset
161 return client.Client(tracker, request, env, form)
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 security.declareProtected('View', 'index_html')
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 def index_html(self):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 '''Alias index_html to roundup's index
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 '''
768
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
167 # Redirect misdirected requests -- bugs 558867 , 565992
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
168 # PATH_INFO, as defined by the CGI spec, has the *real* request path
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
169 orig_path = self.REQUEST.environ['PATH_INFO']
768
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
170 if orig_path[-1] != '/' :
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5399
diff changeset
171 url = urllib_.urlparse( self.absolute_url() )
768
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
172 url = list( url ) # make mutable
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
173 url[2] = url[2]+'/' # patch
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5399
diff changeset
174 url = urllib_.urlunparse( url ) # reassemble
768
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
175 RESPONSE = self.REQUEST.RESPONSE
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
176 RESPONSE.setStatus( "MovedPermanently" ) # 301
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
177 RESPONSE.setHeader( "Location" , url )
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
178 return RESPONSE
ce439805c617 Fixed [SF#558867] by redirecting /instance requests to /instance/
Derrick Hudson <dman13@users.sourceforge.net>
parents: 765
diff changeset
179
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
180 client = self.roundup_opendb()
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 # fake the path that roundup should use
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 client.split_path = ['index']
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 return client.main()
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 def __getitem__(self, item):
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 '''All other URL accesses are passed throuh to roundup
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 '''
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
188 return PathElement(self, item).__of__(self)
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
189
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
190 class PathElement(Item, Implicit):
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
191 def __init__(self, zr, path):
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
192 self.zr = zr
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
193 self.path = path
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
194
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
195 def __getitem__(self, item):
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
196 ''' Get a subitem.
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
197 '''
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
198 return PathElement(self.zr, self.path + '/' + item).__of__(self)
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
199
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
200 def index_html(self, REQUEST=None):
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
201 ''' Actually call through to roundup to handle the request.
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
202 '''
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 try:
1911
f5c804379c85 fixed ZRoundup - mostly changes to classic template
Richard Jones <richard@users.sourceforge.net>
parents: 1291
diff changeset
204 client = self.zr.roundup_opendb()
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 # fake the path that roundup should use
1291
bf8b2380adb3 added CGI :remove:<propname> and :add:<propname>...
Richard Jones <richard@users.sourceforge.net>
parents: 1285
diff changeset
206 client.path = self.path
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207 # and call roundup to do something
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 client.main()
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 return ''
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2612
diff changeset
210 except client.NotFound:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4570
diff changeset
211 raise Exception('NotFound ' + REQUEST.URL)
446
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 pass
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 except:
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 import traceback
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215 traceback.print_exc()
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 # all other exceptions in roundup are valid
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 raise
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 InitializeClass(ZRoundup)
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 modulesecurity.apply(globals())
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222
ea9a4ca3fb84 Added a Zope frontend for roundup.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/