22 '"Pawel Solyga" <pawel.solyga@gmail.com>', |
22 '"Pawel Solyga" <pawel.solyga@gmail.com>', |
23 ] |
23 ] |
24 |
24 |
25 |
25 |
26 from django import http |
26 from django import http |
|
27 from django.conf.urls import defaults |
27 from django.utils.translation import ugettext_lazy |
28 from django.utils.translation import ugettext_lazy |
28 |
29 |
29 import soc.logic |
30 import soc.logic |
30 import soc.logic.out_of_band |
31 import soc.logic.out_of_band |
31 import soc.views.helper.lists |
32 import soc.views.helper.lists |
32 import soc.views.helper.responses |
33 import soc.views.helper.responses |
33 import soc.views.out_of_band |
34 import soc.views.out_of_band |
34 |
35 |
35 from soc.logic import dicts |
36 from soc.logic import dicts |
36 from soc.logic import models |
37 from soc.logic import models |
|
38 from soc.logic import path_link_name |
37 from soc.views import simple |
39 from soc.views import simple |
38 from soc.views import helper |
40 from soc.views import helper |
39 from soc.views.helper import access |
41 from soc.views.helper import access |
40 |
42 |
41 |
43 |
93 ('/%s/create', 'New %(name)s'), |
95 ('/%s/create', 'New %(name)s'), |
94 ('/%s/list', 'List %(plural)s'), |
96 ('/%s/list', 'List %(plural)s'), |
95 ] |
97 ] |
96 new_params['sidebar_additional'] = [] |
98 new_params['sidebar_additional'] = [] |
97 |
99 |
|
100 new_params['key_fields_prefix'] = [] |
|
101 |
|
102 new_params['django_patterns'] = None |
|
103 new_params['django_patterns_defaults'] = [ |
|
104 (r'^%(name_lower)s/show/%(key_fields)s$', |
|
105 'soc.views.models.%s.public', 'Show %(name)s'), |
|
106 (r'^%(name_lower)s/create$', |
|
107 'soc.views.models.%s.create', 'Create %(name)s'), |
|
108 (r'^%(name_lower)s/delete/%(key_fields)s$', |
|
109 'soc.views.models.%s.delete', 'Delete %(name)s'), |
|
110 (r'^%(name_lower)s/edit/%(key_fields)s$', |
|
111 'soc.views.models.%s.edit', 'Edit %(name)s'), |
|
112 (r'^%(name_lower)s/list$', |
|
113 'soc.views.models.%s.list', 'List %(name_plural)s'), |
|
114 ] |
|
115 |
98 self._rights = dicts.merge(rights, new_rights) |
116 self._rights = dicts.merge(rights, new_rights) |
99 self._params = dicts.merge(params, new_params) |
117 self._params = dicts.merge(params, new_params) |
100 |
118 |
101 def public(self, request, page_name=None, params=None, **kwargs): |
119 def public(self, request, page_name=None, params=None, **kwargs): |
102 """Displays the public page for the entity specified by **kwargs |
120 """Displays the public page for the entity specified by **kwargs |
480 for field, value in form.cleaned_data.iteritems(): |
498 for field, value in form.cleaned_data.iteritems(): |
481 fields[field] = value |
499 fields[field] = value |
482 |
500 |
483 return key_name, fields |
501 return key_name, fields |
484 |
502 |
|
503 def getKeyFieldsPattern(self, params): |
|
504 """ |
|
505 """ |
|
506 |
|
507 names = self._logic.getKeyFieldNames() |
|
508 patterns = params['key_fields_prefix'] |
|
509 |
|
510 for name in names: |
|
511 pattern = r'(?P<%s>%s)' % (name, path_link_name.LINKNAME_PATTERN_CORE) |
|
512 patterns.append(pattern) |
|
513 |
|
514 result = '/'.join(patterns) |
|
515 return result |
|
516 |
485 def _getSidebarItems(self, params): |
517 def _getSidebarItems(self, params): |
486 """Retrieves a list of sidebar entries for this view from self._params |
518 """Retrieves a list of sidebar entries for this view from self._params |
487 |
519 |
488 If params['sidebar'] is None default entries will be constructed |
520 If params['sidebar'] is None default entries will be constructed |
489 """ |
521 """ |
530 res = {} |
562 res = {} |
531 res['heading'] = params['name'] |
563 res['heading'] = params['name'] |
532 res['items'] = items |
564 res['items'] = items |
533 |
565 |
534 return res |
566 return res |
|
567 |
|
568 def getDjangoURLPatterns(self, params=None): |
|
569 """Retrieves a list of sidebar entries for this view from self._params |
|
570 |
|
571 If self._params['django_patterns'] is None default entries will be constructed |
|
572 """ |
|
573 |
|
574 params = dicts.merge(params, self._params) |
|
575 |
|
576 # Return the found result |
|
577 if params['django_patterns']: |
|
578 return params['django_patterns'] |
|
579 |
|
580 # Construct defaults manualy |
|
581 default_patterns = params['django_patterns_defaults'] |
|
582 key_fields_pattern = self.getKeyFieldsPattern(params) |
|
583 |
|
584 patterns = [] |
|
585 |
|
586 for url, module, name in default_patterns: |
|
587 name_short_lower = params['name_short'].lower() |
|
588 name_plural_lower = params['name_plural'].lower() |
|
589 |
|
590 name = name % { |
|
591 'name': name_short_lower, |
|
592 'name_plural': name_plural_lower, |
|
593 } |
|
594 |
|
595 module = module % name_short_lower |
|
596 |
|
597 url = url % { |
|
598 'name_lower': name_short_lower, |
|
599 'lnp': path_link_name.LINKNAME_ARG_PATTERN, |
|
600 'ulnp': path_link_name.LINKNAME_PATTERN_CORE, |
|
601 'key_fields': key_fields_pattern, |
|
602 } |
|
603 |
|
604 kwargs = {'page_name': name} |
|
605 |
|
606 item = (url, module, kwargs, name) |
|
607 patterns.append(item) |
|
608 |
|
609 return patterns |