app/soc/views/models/document.py
changeset 1095 0122dc66e5d2
parent 1007 3b66772d21a5
child 1135 24d695060863
equal deleted inserted replaced
1094:e143974a6e27 1095:0122dc66e5d2
    26 
    26 
    27 from google.appengine.api import users
    27 from google.appengine.api import users
    28 
    28 
    29 from django import forms
    29 from django import forms
    30 
    30 
       
    31 from soc.logic import cleaning
    31 from soc.logic import dicts
    32 from soc.logic import dicts
    32 from soc.logic import validate
    33 from soc.logic import validate
    33 from soc.logic.models import user as user_logic
    34 from soc.logic.models.user import logic as user_logic
       
    35 from soc.logic.models.document import logic as document_logic
       
    36 from soc.models import linkable
    34 from soc.views import helper
    37 from soc.views import helper
    35 from soc.views.helper import access
    38 from soc.views.helper import access
    36 from soc.views.helper import redirects
    39 from soc.views.helper import redirects
       
    40 from soc.views.helper import params as params_helper
    37 from soc.views.models import base
    41 from soc.views.models import base
    38 
    42 
    39 import soc.models.document
    43 import soc.models.document
    40 import soc.logic.models.document
    44 import soc.logic.models.document
    41 import soc.logic.dicts
    45 import soc.logic.dicts
    42 import soc.views.helper
    46 import soc.views.helper
    43 import soc.views.helper.widgets
    47 import soc.views.helper.widgets
    44 
       
    45 
       
    46 class CreateForm(helper.forms.BaseForm):
       
    47   """Django form displayed when Developer creates a Document.
       
    48   """
       
    49 
       
    50   content = forms.fields.CharField(widget=helper.widgets.TinyMCE(
       
    51       attrs={'rows':10, 'cols':40}))
       
    52 
       
    53   class Meta:
       
    54     """Inner Meta class that defines some behavior for the form.
       
    55     """
       
    56     model = soc.models.document.Document
       
    57 
       
    58     #: list of model fields which will *not* be gathered by the form
       
    59     exclude = ['author', 'created', 'modified_by', 'modified', 'scope']
       
    60 
       
    61   def clean_scope_path(self):
       
    62     scope_path = self.cleaned_data.get('scope_path')
       
    63     # TODO(tlarsen): combine path and link_id and check for uniqueness
       
    64     if not validate.isScopePathFormatValid(scope_path):
       
    65       raise forms.ValidationError("This scope path is in wrong format.")
       
    66     return scope_path
       
    67 
       
    68   def clean_link_id(self):
       
    69     link_id = self.cleaned_data.get('link_id').lower()
       
    70     # TODO(tlarsen): combine path and link_id and check for uniqueness
       
    71     if not validate.isLinkIdFormatValid(link_id):
       
    72       raise forms.ValidationError("This link ID is in wrong format.")
       
    73     return link_id
       
    74 
       
    75 
       
    76 class EditForm(CreateForm):
       
    77   """Django form displayed a Document is edited.
       
    78   """
       
    79 
       
    80   doc_key_name = forms.fields.CharField(widget=forms.HiddenInput)
       
    81   created_by = forms.fields.CharField(widget=helper.widgets.ReadOnlyInput(),
       
    82                                       required=False)
       
    83   last_modified_by = forms.fields.CharField(
       
    84       widget=helper.widgets.ReadOnlyInput(), required=False)
       
    85 
    48 
    86 
    49 
    87 class View(base.View):
    50 class View(base.View):
    88   """View methods for the Document model.
    51   """View methods for the Document model.
    89   """
    52   """
    99     rights = access.Checker(params)
    62     rights = access.Checker(params)
   100     rights['any_access'] = ['allow']
    63     rights['any_access'] = ['allow']
   101     rights['show'] = ['checkIsDocumentPublic']
    64     rights['show'] = ['checkIsDocumentPublic']
   102 
    65 
   103     new_params = {}
    66     new_params = {}
   104     new_params['logic'] = soc.logic.models.document.logic
    67     new_params['logic'] = document_logic
   105     new_params['rights'] = rights
    68     new_params['rights'] = rights
       
    69 
       
    70     new_params['name'] = "Document"
   106 
    71 
   107     new_params['export_content_type'] = 'text/text'
    72     new_params['export_content_type'] = 'text/text'
   108 
    73 
   109     new_params['name'] = "Document"
    74     names = [i for i in document_logic.getKeyFieldNames() if i != 'link_id']
       
    75     create_pattern = params_helper.getPattern(names, linkable.SCOPE_PATH_ARG_PATTERN)
   110 
    76 
   111     new_params['edit_form'] = EditForm
    77     new_params['extra_django_patterns'] = [
   112     new_params['create_form'] = CreateForm
    78         (r'^document/(?P<access_type>create)/%s$' % create_pattern,
       
    79         'soc.views.models.%(module_name)s.create', 'Create %(name_short)s')]
       
    80 
       
    81     new_params['no_create_with_scope'] = True
       
    82     new_params['no_create_with_key_fields'] = True
       
    83 
       
    84     new_params['create_extra_dynafields'] = {
       
    85         'content': forms.fields.CharField(
       
    86             widget=helper.widgets.TinyMCE(attrs={'rows':10, 'cols':40})),
       
    87         'scope_path': forms.fields.CharField(widget=forms.HiddenInput,
       
    88                                              required=True),
       
    89         'prefix': forms.fields.CharField(widget=helper.widgets.ReadOnlyInput(),
       
    90                                         required=True),
       
    91 
       
    92         'clean_link_id': cleaning.clean_link_id('link_id'),
       
    93         'clean_scope_path': cleaning.clean_scope_path('scope_path'),
       
    94         }
       
    95     new_params['extra_dynaexclude'] = ['author', 'created',
       
    96                                        'modified_by', 'modified']
       
    97 
       
    98     new_params['edit_extra_dynafields'] = {
       
    99         'doc_key_name': forms.fields.CharField(widget=forms.HiddenInput),
       
   100         'created_by': forms.fields.CharField(widget=helper.widgets.ReadOnlyInput(),
       
   101                                              required=False),
       
   102         'last_modified_by': forms.fields.CharField(
       
   103             widget=helper.widgets.ReadOnlyInput(), required=False),
       
   104         }
   113 
   105 
   114     params = dicts.merge(params, new_params)
   106     params = dicts.merge(params, new_params)
   115 
   107 
   116     super(View, self).__init__(params=params)
   108     super(View, self).__init__(params=params)
   117 
   109 
   118   def _editPost(self, request, entity, fields):
   110   def _editPost(self, request, entity, fields):
   119     """See base.View._editPost().
   111     """See base.View._editPost().
   120     """
   112     """
   121 
   113 
   122     account = users.get_current_user()
   114     account = users.get_current_user()
   123     user = user_logic.logic.getForFields({'account': account}, unique=True)
   115     user = user_logic.getForFields({'account': account}, unique=True)
   124 
   116 
   125     if not entity:
   117     if not entity:
   126       fields['author'] = user
   118       fields['author'] = user
   127     else:
   119     else:
   128       fields['author'] = entity.author
   120       fields['author'] = entity.author