app/soc/views/models/presence.py
changeset 901 d580a057103d
parent 858 e79e7a22326f
child 904 a6397daf4006
--- a/app/soc/views/models/presence.py	Thu Jan 22 16:03:17 2009 +0000
+++ b/app/soc/views/models/presence.py	Thu Jan 22 16:04:48 2009 +0000
@@ -27,6 +27,7 @@
 from django import forms
 from django.utils.translation import ugettext_lazy
 
+from soc.logic import cleaning
 from soc.logic import dicts
 from soc.logic import validate
 from soc.logic.models import document as document_logic
@@ -42,79 +43,6 @@
 import soc.views.helper.widgets
 
 
-class SettingsValidationForm(helper.forms.BaseForm):
-  """Django form displayed when creating or editing Settings.
-  
-  This form includes validation functions for Settings fields.
-  """
-
-  # TODO(tlarsen): scope_path will be a hard-coded read-only
-  #   field for some (most?) User Roles
-  home_scope_path = forms.CharField(required=False,
-      label=ugettext_lazy('home page Document scope path'),
-      help_text=soc.models.work.Work.scope_path.help_text)
-
-  # TODO(tlarsen): actually, using these two text fields to specify
-  #   the Document is pretty cheesy; this needs to be some much better
-  #   Role-scoped Document selector that we don't have yet.  See:
-  #     http://code.google.com/p/soc/issues/detail?id=151
-  home_link_id = forms.CharField(required=False,
-      label=ugettext_lazy('home page Document link ID'),
-      help_text=soc.models.work.Work.link_id.help_text)
-
-  # TODO(tlarsen): scope_path will be a hard-coded read-only
-  #   field for some (most?) User Roles
-  tos_scope_path = forms.CharField(required=False,
-      label=ugettext_lazy('Terms of Service Document scope path'),
-      help_text=soc.models.work.Work.scope_path.help_text)
-
-  # TODO(tlarsen): actually, using these two text fields to specify
-  #   the Document is pretty cheesy; this needs to be some much better
-  #   Role-scoped Document selector that we don't have yet
-  #   See:
-  #     http://code.google.com/p/soc/issues/detail?id=151
-  tos_link_id = forms.CharField(required=False,
-      label=ugettext_lazy('Terms of Service Document link ID'),
-      help_text=soc.models.work.Work.link_id.help_text)
-
-  def clean_feed_url(self):
-    feed_url = self.cleaned_data.get('feed_url')
-
-    if feed_url == '':
-      # feed url not supplied (which is OK), so do not try to validate it
-      return None
-    
-    if not validate.isFeedURLValid(feed_url):
-      raise forms.ValidationError('This URL is not a valid ATOM or RSS feed.')
-
-    return feed_url
-
-
-class CreateForm(SettingsValidationForm):
-  """Django form displayed when creating or editing Settings.
-  """
-
-  class Meta:
-    """Inner Meta class that defines some behavior for the form.
-    """
-    #: db.Model subclass for which the form will gather information
-    model = soc.models.presence.Presence
-
-    #: list of model fields which will *not* be gathered by the form
-    exclude = ['scope',
-      # TODO(tlarsen): this needs to be enabled once a button to a list
-      #   selection "interstitial" page is implemented, see:
-      #     http://code.google.com/p/soc/issues/detail?id=151
-      'home', 'tos']
-
-
-class EditForm(CreateForm):
-  """Django form displayed a Document is edited.
-  """
-
-  pass
-
-
 class View(base.View):
   """View methods for the Presence model.
   """
@@ -127,25 +55,26 @@
       params: a dict with params for this View
     """
 
-    rights = {}
-    rights['any_access'] = [access.allow]
-    rights['show'] = [access.allow]
+    new_params = {}
+
+    new_params['extra_dynaexclude'] = ['home', 'tos']
 
-    new_params = {}
-    new_params['logic'] = soc.logic.models.presence.logic
-    new_params['rights'] = rights
+    new_params['create_extra_dynafields'] = {
+        # override some editors
+        'home_link_id': forms.CharField(required=False,
+            label=ugettext_lazy('Home page Document link ID'),
+            help_text=soc.models.work.Work.link_id.help_text),
 
-    new_params['name'] = "Home Settings"
-    new_params['url_name'] = "home/settings"
-    new_params['module_name'] = "presence"
+        'tos_link_id': forms.CharField(required=False,
+            label=ugettext_lazy('Terms of Service Document link ID'),
+            help_text=soc.models.work.Work.link_id.help_text),
 
-    new_params['edit_form'] = EditForm
-    new_params['create_form'] = CreateForm
+        # add cleaning of the link id and feed url
+        'clean_link_id': cleaning.clean_link_id,
+        'clean_feed_url': cleaning.clean_feed_url,
+        }
 
-    # Disable the presence sidebar until we have some use for it
-    new_params['sidebar_defaults'] = []
-
-    params = dicts.merge(params, new_params)
+    params = dicts.merge(params, new_params, sub_merge=True)
 
     super(View, self).__init__(params=params)
 
@@ -171,11 +100,12 @@
 
     try:
       if entity.home:
-        form.fields['home_scope_path'].initial = entity.home.scope_path
         form.fields['home_link_id'].initial = entity.home.link_id
+    except db.Error:
+      pass
 
+    try:
       if entity.tos:
-        form.fields['tos_scope_path'].initial = entity.tos.scope_path
         form.fields['tos_link_id'].initial = entity.tos.link_id
     except db.Error:
       pass
@@ -186,33 +116,21 @@
     """See base.View._editPost().
     """
 
-    home_scope_path = fields['home_scope_path']
+    scope_path = entity.key().name()
     home_link_id = fields['home_link_id']
 
     # TODO notify the user if home_doc is not found
     home_doc = document_logic.logic.getFromFields(
-      scope_path=home_scope_path, link_id=home_link_id)
+      scope_path=scope_path, link_id=home_link_id)
 
     fields['home'] = home_doc
 
-    tos_scope_path = fields['tos_scope_path']
     tos_link_id = fields['tos_link_id']
 
     # TODO notify the user if tos_doc is not found
     tos_doc = document_logic.logic.getFromFields(
-      scope_path=tos_scope_path, link_id=tos_link_id)
+      scope_path=scope_path, link_id=tos_link_id)
 
     fields['tos'] = tos_doc
 
     super(View, self)._editPost(request, entity, fields)
-
-
-view = View()
-
-create = view.create
-edit = view.edit
-delete = view.delete
-list = view.list
-public = view.public
-export = view.export
-