diff roundup/cgi/form_parser.py @ 3656:0119e04886d8

@required in forms may now specify properties of linked items (patch [SF#1507093])
author Richard Jones <richard@users.sourceforge.net>
date Fri, 11 Aug 2006 00:18:59 +0000
parents 5004aeed5a3a
children 9a00da0f1da9
line wrap: on
line diff
--- a/roundup/cgi/form_parser.py	Fri Aug 11 00:04:29 2006 +0000
+++ b/roundup/cgi/form_parser.py	Fri Aug 11 00:18:59 2006 +0000
@@ -284,6 +284,17 @@
                             'value "%(entry)s" not a designator') % locals()
                     value.append((m.group(1), m.group(2)))
 
+                    # get details of linked class
+                    lcn = m.group(1)
+                    lcl = self.db.classes[lcn]
+                    lnodeid = m.group(2)
+                    if not all_propdef.has_key(lcn):
+                        all_propdef[lcn] = lcl.getprops()
+                    if not all_props.has_key((lcn, lnodeid)):
+                        all_props[(lcn, lnodeid)] = {}
+                    if not got_props.has_key((lcn, lnodeid)):
+                        got_props[(lcn, lnodeid)] = {}
+
                 # make sure the link property is valid
                 if (not isinstance(propdef[propname], hyperdb.Multilink) and
                         not isinstance(propdef[propname], hyperdb.Link)):
@@ -296,7 +307,19 @@
 
             # detect the special ":required" variable
             if d['required']:
-                all_required[this] = self.extractFormList(form[key])
+                for entry in self.extractFormList(form[key]):
+                    m = self.FV_SPECIAL.match(entry)
+                    if not m:
+                        raise FormError, self._('The form action claims to '
+                            'require property "%(property)s" '
+                            'which doesn\'t exist') % {
+                            'property':propname}
+                    if m.group('classname'):
+                        this = (m.group('classname'), m.group('id'))
+                        entry = m.group('propname')
+                    if not all_required.has_key(this):
+                        all_required[this] = []
+                    all_required[this].append(entry)
                 continue
 
             # see if we're performing a special multilink action

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