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 |