diff roundup/cgi/templating.py @ 1447:6118d4498db3

added "foo@" prefix to all but "context" form variable names
author Richard Jones <richard@users.sourceforge.net>
date Tue, 18 Feb 2003 10:58:33 +0000
parents 2b20294b934a
children 54349babfe85
line wrap: on
line diff
--- a/roundup/cgi/templating.py	Tue Feb 18 06:15:21 2003 +0000
+++ b/roundup/cgi/templating.py	Tue Feb 18 10:58:33 2003 +0000
@@ -160,11 +160,13 @@
         # add in the item if there is one
         if client.nodeid:
             if classname == 'user':
-                c['context'] = HTMLUser(client, classname, client.nodeid)
+                c['context'] = HTMLUser(client, classname, client.nodeid,
+                    anonymous=1)
             else:
-                c['context'] = HTMLItem(client, classname, client.nodeid)
+                c['context'] = HTMLItem(client, classname, client.nodeid,
+                    anonymous=1)
         elif client.db.classes.has_key(classname):
-            c['context'] = HTMLClass(client, classname)
+            c['context'] = HTMLClass(client, classname, anonymous=1)
         return c
 
     def render(self, client, classname, request, **options):
@@ -200,9 +202,15 @@
         # we want config to be exposed
         self.config = client.db.config
 
-    def __getitem__(self, item):
-        self._client.db.getclass(item)
-        return HTMLClass(self._client, item)
+    def __getitem__(self, item, desre=re.compile(r'(?P<cl>\w+)(?P<id>[-\d]+)')):
+        # check to see if we're actually accessing an item
+        m = desre.match(item)
+        if m:
+            self._client.db.getclass(m.group('cl'))
+            return HTMLItem(self._client, m.group('cl'), m.group('id'))
+        else:
+            self._client.db.getclass(item)
+            return HTMLClass(self._client, item)
 
     def __getattr__(self, attr):
         try:
@@ -250,9 +258,10 @@
 class HTMLClass(HTMLPermissions):
     ''' Accesses through a class (either through *class* or *db.<classname>*)
     '''
-    def __init__(self, client, classname):
+    def __init__(self, client, classname, anonymous=0):
         self._client = client
         self._db = client.db
+        self._anonymous = anonymous
 
         # we want classname to be exposed, but _classname gives a
         # consistent API for extending Class/Item
@@ -297,7 +306,8 @@
                     value = []
                 else:
                     value = None
-            return htmlklass(self._client, '', prop, item, value)
+            return htmlklass(self._client, self._classname, '', prop, item,
+                value, self._anonymous)
 
         # no good
         raise KeyError, item
@@ -455,7 +465,7 @@
 class HTMLItem(HTMLPermissions):
     ''' Accesses through an *item*
     '''
-    def __init__(self, client, classname, nodeid):
+    def __init__(self, client, classname, nodeid, anonymous=0):
         self._client = client
         self._db = client.db
         self._classname = classname
@@ -463,6 +473,9 @@
         self._klass = self._db.getclass(classname)
         self._props = self._klass.getprops()
 
+        # do we prefix the form items with the item's identification?
+        self._anonymous = anonymous
+
     def __repr__(self):
         return '<HTMLItem(0x%x) %s %s>'%(id(self), self._classname,
             self._nodeid)
@@ -478,7 +491,9 @@
         prop = self._props[item]
 
         # get the value, handling missing values
-        value = self._klass.get(self._nodeid, item, None)
+        value = None
+        if int(self._nodeid) > 0:
+            value = self._klass.get(self._nodeid, item, None)
         if value is None:
             if isinstance(self._props[item], hyperdb.Multilink):
                 value = []
@@ -486,7 +501,8 @@
         # look up the correct HTMLProperty class
         for klass, htmlklass in propclasses:
             if isinstance(prop, klass):
-                return htmlklass(self._client, self._nodeid, prop, item, value)
+                return htmlklass(self._client, self._classname,
+                    self._nodeid, prop, item, value, self._anonymous)
 
         raise KeyError, item
 
@@ -726,15 +742,15 @@
         self._security = client.db.security
 
     _marker = []
-    def hasPermission(self, role, classname=_marker):
-        ''' Determine if the user has the Role.
+    def hasPermission(self, permission, classname=_marker):
+        ''' Determine if the user has the Permission.
 
             The class being tested defaults to the template's class, but may
             be overidden for this test by suppling an alternate classname.
         '''
         if classname is self._marker:
             classname = self._default_classname
-        return self._security.hasPermission(role, self._nodeid, classname)
+        return self._security.hasPermission(permission, self._nodeid, classname)
 
     def is_edit_ok(self):
         ''' Is the user allowed to Edit the current class?
@@ -760,15 +776,22 @@
 
         A wrapper object which may be stringified for the plain() behaviour.
     '''
-    def __init__(self, client, nodeid, prop, name, value):
+    def __init__(self, client, classname, nodeid, prop, name, value,
+            anonymous=0):
         self._client = client
         self._db = client.db
+        self._classname = classname
         self._nodeid = nodeid
         self._prop = prop
-        self._name = name
         self._value = value
+        self._anonymous = anonymous
+        if not anonymous:
+            self._name = '%s%s@%s'%(classname, nodeid, name)
+        else:
+            self._name = name
     def __repr__(self):
-        return '<HTMLProperty(0x%x) %s %r %r>'%(id(self), self._name, self._prop, self._value)
+        return '<HTMLProperty(0x%x) %s %r %r>'%(id(self), self._name,
+            self._prop, self._value)
     def __str__(self):
         return self.plain()
     def __cmp__(self, other):
@@ -1013,8 +1036,8 @@
         entry identified by the assignedto property on item, and then the
         name property of that user)
     '''
-    def __init__(self, *args):
-        HTMLProperty.__init__(self, *args)
+    def __init__(self, *args, **kw):
+        HTMLProperty.__init__(self, *args, **kw)
         # if we're representing a form value, then the -1 from the form really
         # should be a None
         if str(self._value) == '-1':

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