summaryrefslogtreecommitdiff
path: root/coip
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-03-03 11:48:43 +0100
committerLeif Johansson <leifj@sunet.se>2011-03-03 11:48:43 +0100
commit85b6c6dc096dfbf44d51a13a8a9d16e152e58fe8 (patch)
tree3597f97a89ba0b797e09b4f7feba5b5fa39b83c7 /coip
parent2f74fb8b791eade1c0f4d1093139e4f0066efc40 (diff)
client side validation
Diffstat (limited to 'coip')
-rw-r--r--coip/apps/name/forms.py23
-rw-r--r--coip/apps/name/models.py28
2 files changed, 42 insertions, 9 deletions
diff --git a/coip/apps/name/forms.py b/coip/apps/name/forms.py
index 759579c..dc36ecd 100644
--- a/coip/apps/name/forms.py
+++ b/coip/apps/name/forms.py
@@ -19,20 +19,29 @@ class AttributeForm(forms.ModelForm):
class NameEditForm(BetterModelForm):
description = forms.CharField(widget=forms.Textarea(attrs={'cols': 60, 'rows': 6}))
+ error_css_class = 'error'
+ required_css_class = 'required'
class Meta:
model = Name
- fields = ['short','description']
+ fields = ['short','description','format']
fieldsets = [('step1', {'fields': ['short', 'description'],
'legend': 'Describe your group',
- 'classes': ['step submit_step'],
- 'description': 'Provide a short and (optionally) longer description of your group..'})]
+ 'classes': ['step'],
+ 'description': 'Provide a short and (optionally) longer description of your group.'}),
+ ('step2', {'fields': ['format'],
+ 'legend': 'Step 2 (optional): Advanced options',
+ 'classes': ['step','submit_step'],
+ 'description': 'Only change these settings if you know what you are doing.'})
+ ]
class NewNameForm(BetterModelForm):
description = forms.CharField(widget=forms.Textarea(attrs={'cols': 60, 'rows': 6}))
value = forms.CharField(label="Name")
+ #error_css_class = 'error'
+ #required_css_class = 'required'
class Meta:
model = Name
- fields = ['value','short','description','type']
+ fields = ['value','short','description','type','format']
fieldsets = [('step1', {'fields': ['value'],
'legend': 'Step 1: Name your group',
'classes': ['step'],
@@ -40,11 +49,11 @@ class NewNameForm(BetterModelForm):
('step2', {'fields': ['short', 'description'],
'legend': 'Step 2: Describe your group',
'classes': ['step'],
- 'description': 'Provide a short and (optionally) longer description of your group..'}),
- ('step3', {'fields': ['type'],
+ 'description': 'Provide a short and (optionally) longer description of your group.'}),
+ ('step3', {'fields': ['type','format'],
'legend': 'Step 3 (optional): Advanced options',
'classes': ['step','submit_step'],
- 'description': 'Only set the type if you know what you are doing. You almost certainly do not need this.'})]
+ 'description': 'Only change these settings if you know what you are doing...'})]
class NameDeleteForm(BetterForm):
recursive = fields.BooleanField(label="Also delete everything below this name?",required=False)
diff --git a/coip/apps/name/models.py b/coip/apps/name/models.py
index 142cd5e..a1384a3 100644
--- a/coip/apps/name/models.py
+++ b/coip/apps/name/models.py
@@ -21,10 +21,13 @@ class Attribute(models.Model):
def __unicode__(self):
return self.name;
+FMT_URN = 0
+FMT_URL = 1
+
class Name(models.Model):
'''
A name-space/authorization/right/group/collaboration/thing
- '''
+ '''
type = models.ForeignKey(Attribute, blank=True, null=True,related_name='names')
value = models.CharField(max_length=255)
parent = models.ForeignKey('self', blank=True, null=True,related_name='children')
@@ -32,9 +35,16 @@ class Name(models.Model):
creator = models.ForeignKey(User,blank=True, null=True)
display = models.TextField(editable=False)
description = models.TextField(blank=True)
+ format = models.SmallIntegerField(default=FMT_URN,choices=((FMT_URN,"URN"),(FMT_URL,"URL")))
timecreated = models.DateTimeField(auto_now_add=True)
lastupdated = models.DateTimeField(auto_now=True)
+ def mode(self):
+ if not self.format:
+ return FMT_URN
+ else:
+ return self.format
+
def shortname(self):
if self.short:
return self.short
@@ -50,6 +60,14 @@ class Name(models.Model):
def __unicode__(self):
return self.display
+ def display_str(self):
+ if self.mode() == FMT_URN:
+ return self.display_str_urn()
+ elif self.mode() == FMT_URL:
+ return self.display_str_url()
+ else:
+ raise Exception,"unknown format for %s (%d)" % (self.value,self.id)
+
def display_str_urn(self):
n = self
str = ""
@@ -88,6 +106,12 @@ class Name(models.Model):
def url(self):
return "%s/name/%s" % (PREFIX_URL,self.display_str_url())
+
+ def uri(self):
+ if self.mode() == FMT_URN:
+ return self.display
+ else: # implement more format as needed
+ return "%s/name/%s" % (PREFIX_URL,self.display)
def summary(self):
return {'name': self.display, 'url': self.url(), 'short': self.short}
@@ -166,7 +190,7 @@ class Name(models.Model):
return filter(lambda s: s.has_permission(user,perm),self.children.all())
def set_display(sender,**kwargs):
- kwargs['instance'].display = kwargs['instance'].display_str_urn()
+ kwargs['instance'].display = kwargs['instance'].display_str()
pre_save.connect(set_display,sender=Name)