Remove unused imports and fix too long lines in soc.views.models.site module.
[Melange.git] / app / soc / views / models / site.py
blobaadbba9b095ddd588f0048939334c59becee1c0d
1 #!/usr/bin/python2.5
3 # Copyright 2008 the Melange authors.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
17 """Views for Site Settings.
18 """
20 __authors__ = [
21 '"Sverre Rabbelier" <sverre@rabbelier.nl>',
25 from django import forms
26 from django.utils.translation import ugettext
28 from soc.logic import cleaning
29 from soc.logic import dicts
30 from soc.views import out_of_band
31 from soc.views.helper import access
32 from soc.views.helper import decorators
33 from soc.views.helper import redirects
34 from soc.views.helper import responses
35 from soc.views.helper import widgets
36 from soc.views.models import document as document_view
37 from soc.views.models import presence_with_tos
39 import soc.models.site
40 import soc.logic.models.site
41 import soc.logic.dicts
44 class View(presence_with_tos.View):
45 """View methods for the Document model.
46 """
48 DEF_DOWN_FOR_MAINTENANCE_MSG = ugettext("Down for maintenance")
49 DEF_NOT_IN_MAINTENANCE_MSG = ugettext(
50 "The site is currently not in maintenance mode.")
52 def __init__(self, params=None):
53 """Defines the fields and methods required for the base View class
54 to provide the user with list, public, create, edit and delete views.
56 Params:
57 params: a dict with params for this View
58 """
60 rights = access.Checker(params)
61 rights['unspecified'] = ['checkIsDeveloper']
62 rights['any_access'] = ['allow']
63 rights['show'] = ['checkIsDeveloper']
65 new_params = {}
66 new_params['logic'] = soc.logic.models.site.logic
67 new_params['rights'] = rights
69 new_params['name'] = "Site Settings"
70 new_params['name_plural'] = new_params['name']
71 new_params['document_prefix'] = 'site'
72 new_params['name_short'] = "Site"
74 new_params['sidebar_defaults'] = [('/%s/edit', 'Edit %(name)s', 'edit')]
75 new_params['sidebar_heading'] = new_params['name_short']
77 new_params['edit_template'] = 'soc/site/edit.html'
78 new_params['home_template'] = 'soc/site/home.html'
80 new_params['create_extra_dynaproperties'] = {
81 'link_id': forms.CharField(widget=forms.HiddenInput, required=True),
82 'clean_noreply_email': cleaning.clean_empty_field('noreply_email'),
84 new_params['edit_extra_dynaproperties'] = {
85 'link_id': forms.CharField(widget=forms.HiddenInput, required=True),
86 'home_link_id': widgets.ReferenceField(
87 reference_url='document', required=False,
88 filter_fields={'prefix': new_params['document_prefix']},
89 label=ugettext('Home page Document link ID'),
90 help_text=soc.models.work.Work.link_id.help_text),
91 'tos_link_id': widgets.ReferenceField(
92 reference_url='document', required=False,
93 filter_fields={'prefix': new_params['document_prefix']},
94 label=ugettext('Terms of Service Document link ID'),
95 help_text=soc.models.work.Work.link_id.help_text),
98 patterns = []
100 page_name = "Home Page"
101 patterns += [(r'^$', 'soc.views.models.%(module_name)s.main_public',
102 page_name)]
104 page_name = "Maintenance"
105 patterns += [(r'^maintenance$',
106 'soc.views.models.%(module_name)s.maintenance', page_name)]
108 page_name = "Edit Site"
109 patterns += [(r'^%(url_name)s/(?P<access_type>edit)$',
110 'soc.views.models.%(module_name)s.main_edit',
111 page_name)]
113 new_params['extra_django_patterns'] = patterns
115 params = dicts.merge(params, new_params)
117 super(View, self).__init__(params=params)
119 def getSidebarMenus(self, id, user, params=None):
120 """See base.View.getSidebarMenus.
122 Returns a custom sidebar entry for the 'site' singleton.
125 entity = self._logic.getSingleton()
127 submenus = []
129 if entity:
130 submenus += document_view.view.getMenusForScope(entity, self._params)
132 try:
133 rights = self._params['rights']
134 rights.setCurrentUser(id, user)
135 rights.checkIsHost()
136 is_host = True
137 except out_of_band.Error:
138 is_host = False
140 if is_host:
141 submenus += [(redirects.getCreateDocumentRedirect(entity, 'site'),
142 "Create a New Document", 'any_access')]
144 submenus += [(redirects.getListDocumentsRedirect(entity, 'site'),
145 "List Documents", 'any_access')]
147 new_params = {}
148 new_params['sidebar_additional'] = submenus
150 params = dicts.merge(params, new_params)
151 return super(View, self).getSidebarMenus(id, user, params=params)
153 def maintenance(self, request, page_name):
154 """Returns a 'down for maintenance' view.
157 context = responses.getUniversalContext(request)
158 context['page_name'] = page_name
160 notice = context.pop('site_notice')
162 if not notice:
163 context['body_content'] = self.DEF_NOT_IN_MAINTENANCE_MSG
164 else:
165 context['body_content'] = notice
166 context['header_title'] = self.DEF_DOWN_FOR_MAINTENANCE_MSG
167 context['sidebar_menu_items'] = [
168 {'heading': self.DEF_DOWN_FOR_MAINTENANCE_MSG,
169 'group': ''},
172 template = 'soc/base.html'
174 return responses.respond(request, template, context=context)
176 def mainPublic(self, request, page_name=None, **kwargs):
177 """Displays the main site settings page.
179 Args:
180 request: the standard Django HTTP request object
181 page_name: the page name displayed in templates as page and header title
182 kwargs: not used
185 keys = self._logic.getKeyFieldNames()
187 # No entity in this case, since Site key values are hard-coded for the
188 # Site singleton, so pass in None to match parent method footprint.
189 values = self._logic.getKeyValuesFromEntity(None)
190 key_values = dicts.zip(keys, values)
192 return self.home(request, "home", page_name=page_name, **key_values)
194 def mainEdit(self, request, page_name=None, **kwargs):
195 """Displays the edit page for the main site settings page.
197 Args:
198 request: the standard Django HTTP request object
199 page_name: the page name displayed in templates as page and header title
200 kwargs: not used
203 keys = self._logic.getKeyFieldNames()
205 # No entity in this case, since Site key values are hard-coded for the
206 # Site singleton, so pass in None to match parent method footprint.
207 values = self._logic.getKeyValuesFromEntity(None)
208 key_values = dicts.zip(keys, values)
210 return self.edit(request, "edit", page_name, seed=key_values, **key_values)
213 view = View()
215 admin = decorators.view(view.admin)
216 create = decorators.view(view.create)
217 edit = decorators.view(view.edit)
218 delete = decorators.view(view.delete)
219 list = decorators.view(view.list)
220 public = decorators.view(view.public)
221 export = decorators.view(view.export)
222 main_public = decorators.view(view.mainPublic)
223 main_edit = decorators.view(view.mainEdit)
224 maintenance = decorators.view(view.maintenance)
225 home = decorators.view(view.home)