53 """ |
53 """ |
54 |
54 |
55 DEF_SUBMIT_MSG_PARAM_NAME = 's' |
55 DEF_SUBMIT_MSG_PARAM_NAME = 's' |
56 DEF_SUBMIT_MSG_PROFILE_SAVED = 0 |
56 DEF_SUBMIT_MSG_PROFILE_SAVED = 0 |
57 |
57 |
58 DEF_CREATE_NEW_ENTITY_MSG = ugettext_lazy( |
58 DEF_CREATE_NEW_ENTITY_MSG_FMT = ugettext_lazy( |
59 ' You can create a new %(entity_type)s by visiting' |
59 ' You can create a new %(entity_type)s by visiting' |
60 ' <a href="%(create)s">Create ' |
60 ' <a href="%(create)s">Create ' |
61 'a New %(entity_type)s</a> page.') |
61 'a New %(entity_type)s</a> page.') |
62 |
62 |
63 def __init__(self, params=None): |
63 def __init__(self, params=None): |
81 delete_redirect: the Django template to redirect to on delete |
81 delete_redirect: the Django template to redirect to on delete |
82 create_redirect: the Django template to redirect to after creation |
82 create_redirect: the Django template to redirect to after creation |
83 save_message: the message to display when the entity is saved |
83 save_message: the message to display when the entity is saved |
84 edit_params: the params to use when editing |
84 edit_params: the params to use when editing |
85 sidebar: the sidebar menu items for this view |
85 sidebar: the sidebar menu items for this view |
86 sidebar_defaults: a dictionary with defaults for the sidebar |
86 sidebar_defaults: a dictionary with defaults for the sidebar; each |
|
87 value in the dict is a two-tuple: |
|
88 (url_format, # supplied a single positional url_name |
|
89 menu_text_format) # supplied the params dict |
87 """ |
90 """ |
88 |
91 |
89 rights = {} |
92 rights = {} |
90 rights['unspecified'] = [] |
93 rights['unspecified'] = [] |
91 rights['any_access'] = [access.checkIsUser] |
94 rights['any_access'] = [access.checkIsUser] |
100 new_params['missing_redirect'] = '/%s/create' % params['url_name'] |
103 new_params['missing_redirect'] = '/%s/create' % params['url_name'] |
101 |
104 |
102 new_params['sidebar'] = None |
105 new_params['sidebar'] = None |
103 new_params['sidebar_defaults'] = [ |
106 new_params['sidebar_defaults'] = [ |
104 ('/%s/create', 'New %(name)s'), |
107 ('/%s/create', 'New %(name)s'), |
105 ('/%s/list', 'List %(plural)s'), |
108 ('/%s/list', 'List %(name_plural)s'), |
106 ] |
109 ] |
107 new_params['sidebar_additional'] = [] |
110 new_params['sidebar_additional'] = [] |
|
111 new_params['sidebar_heading'] = None |
108 |
112 |
109 new_params['key_fields_prefix'] = [] |
113 new_params['key_fields_prefix'] = [] |
110 |
114 |
111 new_params['django_patterns'] = None |
115 new_params['django_patterns'] = None |
112 new_params['django_patterns_defaults'] = [ |
116 new_params['django_patterns_defaults'] = [ |
113 (r'^%(url_name)s/show/%(key_fields)s$', |
117 (r'^%(url_name)s/show/%(key_fields)s$', |
114 'soc.views.models.%s.public', 'Show %(name)s'), |
118 'soc.views.models.%s.public', 'Show %(name_short)s'), |
115 (r'^%(url_name)s/create$', |
119 (r'^%(url_name)s/create$', |
116 'soc.views.models.%s.create', 'Create %(name)s'), |
120 'soc.views.models.%s.create', 'Create %(name_short)s'), |
117 (r'^%(url_name)s/create/%(key_fields)s$', |
121 (r'^%(url_name)s/create/%(key_fields)s$', |
118 'soc.views.models.%s.create', 'Create %(name)s'), |
122 'soc.views.models.%s.create', 'Create %(name_short)s'), |
119 (r'^%(url_name)s/delete/%(key_fields)s$', |
123 (r'^%(url_name)s/delete/%(key_fields)s$', |
120 'soc.views.models.%s.delete', 'Delete %(name)s'), |
124 'soc.views.models.%s.delete', 'Delete %(name_short)s'), |
121 (r'^%(url_name)s/edit/%(key_fields)s$', |
125 (r'^%(url_name)s/edit/%(key_fields)s$', |
122 'soc.views.models.%s.edit', 'Edit %(name)s'), |
126 'soc.views.models.%s.edit', 'Edit %(name_short)s'), |
123 (r'^%(url_name)s/list$', |
127 (r'^%(url_name)s/list$', |
124 'soc.views.models.%s.list', 'List %(name_plural)s'), |
128 'soc.views.models.%s.list', 'List %(name_plural)s'), |
125 ] |
129 ] |
126 |
130 |
127 new_params['list_redirect_action'] = '/' + params['url_name'] + '/edit' |
131 new_params['list_redirect_action'] = '/' + params['url_name'] + '/edit' |
232 key_fields = self._logic.getKeyFieldsFromDict(kwargs) |
236 key_fields = self._logic.getKeyFieldsFromDict(kwargs) |
233 entity = self._logic.getIfFields(key_fields) |
237 entity = self._logic.getIfFields(key_fields) |
234 except soc.logic.out_of_band.ErrorResponse, error: |
238 except soc.logic.out_of_band.ErrorResponse, error: |
235 if not seed: |
239 if not seed: |
236 template = params['public_template'] |
240 template = params['public_template'] |
237 error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % { |
241 error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG_FMT % { |
238 'entity_type_lower' : params['name'].lower(), |
242 'entity_type_lower' : params['name'].lower(), |
239 'entity_type' : params['name'], |
243 'entity_type' : params['name'], |
240 'create' : params['missing_redirect'] |
244 'create' : params['missing_redirect'] |
241 } |
245 } |
242 return simple.errorResponse(request, page_name, error, template, |
246 return simple.errorResponse(request, page_name, error, template, |
394 try: |
398 try: |
395 key_fields = self._logic.getKeyFieldsFromDict(kwargs) |
399 key_fields = self._logic.getKeyFieldsFromDict(kwargs) |
396 entity = self._logic.getIfFields(key_fields) |
400 entity = self._logic.getIfFields(key_fields) |
397 except soc.logic.out_of_band.ErrorResponse, error: |
401 except soc.logic.out_of_band.ErrorResponse, error: |
398 template = params['edit_template'] |
402 template = params['edit_template'] |
399 error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG % { |
403 error.message = error.message + self.DEF_CREATE_NEW_ENTITY_MSG_FMT % { |
400 'entity_type_lower' : params['name'].lower(), |
404 'entity_type_lower' : params['name'].lower(), |
401 'entity_type' : params['name'], |
405 'entity_type' : params['name'], |
402 'create' : params['missing_redirect'] |
406 'create' : params['missing_redirect'] |
403 } |
407 } |
404 return simple.errorResponse(request, page_name, error, template, context) |
408 return simple.errorResponse(request, page_name, error, template, context) |
558 # Construct defaults manualy |
562 # Construct defaults manualy |
559 defaults = params['sidebar_defaults'] |
563 defaults = params['sidebar_defaults'] |
560 |
564 |
561 result = [] |
565 result = [] |
562 |
566 |
563 for url, title in defaults: |
567 for url, menu_text in defaults: |
564 url = url % params['url_name'].lower() |
568 url = url % params['url_name'].lower() |
565 |
569 item = (url, menu_text % params) |
566 title = title % { |
|
567 'name': params['name'], |
|
568 'plural': params['name_plural'] |
|
569 } |
|
570 |
|
571 item = (url, title) |
|
572 result.append(item) |
570 result.append(item) |
573 |
571 |
574 for item in params['sidebar_additional']: |
572 for item in params['sidebar_additional']: |
575 result.append(item) |
573 result.append(item) |
576 |
574 |
585 |
583 |
586 params = dicts.merge(params, self._params) |
584 params = dicts.merge(params, self._params) |
587 |
585 |
588 items = [] |
586 items = [] |
589 |
587 |
590 for url, title in self._getSidebarItems(params): |
588 for url, menu_text in self._getSidebarItems(params): |
591 items.append({'url': url, 'title': title}) |
589 items.append({'url': url, 'title': menu_text}) |
592 |
590 |
593 res = {} |
591 res = {} |
594 res['heading'] = params['name'] |
592 |
|
593 if not params['sidebar_heading']: |
|
594 params['sidebar_heading'] = params['name'] |
|
595 |
|
596 res['heading'] = params['sidebar_heading'] |
595 res['items'] = items |
597 res['items'] = items |
596 |
598 |
597 return res |
599 return res |
598 |
600 |
599 def getDjangoURLPatterns(self, params=None): |
601 def getDjangoURLPatterns(self, params=None): |
600 """Retrieves a list of sidebar entries for this view from self._params. |
602 """Retrieves a list of sidebar entries for this view from self._params. |
601 |
603 |
602 If self._params['django_patterns'] is None default entries will be constructed. |
604 If self._params['django_patterns'] is None default entries will be |
|
605 constructed. |
603 """ |
606 """ |
604 |
607 |
605 params = dicts.merge(params, self._params) |
608 params = dicts.merge(params, self._params) |
606 |
609 |
607 # Return the found result |
610 # Return the found result |
613 key_fields_pattern = self.getKeyFieldsPattern(params) |
616 key_fields_pattern = self.getKeyFieldsPattern(params) |
614 |
617 |
615 patterns = [] |
618 patterns = [] |
616 |
619 |
617 for url, module, name in default_patterns: |
620 for url, module, name in default_patterns: |
618 name_short = params['name_short'] |
621 name = name % params |
619 name_plural = params['name_plural'] |
|
620 |
|
621 name = name % { |
|
622 'name': name_short, |
|
623 'name_plural': name_plural, |
|
624 } |
|
625 |
|
626 module = module % params['module_name'] |
622 module = module % params['module_name'] |
627 |
623 |
628 url = url % { |
624 url = url % { |
629 'url_name': params['url_name'], |
625 'url_name': params['url_name'], |
630 'lnp': linkable.LINK_ID_ARG_PATTERN, |
626 'lnp': linkable.LINK_ID_ARG_PATTERN, |