40 import soc.models.host |
40 import soc.models.host |
41 import soc.logic.models.host |
41 import soc.logic.models.host |
42 import soc.views.helper |
42 import soc.views.helper |
43 import soc.views.models.sponsor |
43 import soc.views.models.sponsor |
44 |
44 |
45 # TODO(pawel.solyga): Rename all list methods and functions to something else |
|
46 # and remove this tolist assignment |
|
47 tolist = list |
|
48 |
45 |
49 class View(role.View): |
46 class View(role.View): |
50 """View methods for the Host model. |
47 """View methods for the Host model. |
51 """ |
48 """ |
52 |
49 |
60 |
57 |
61 rights = {} |
58 rights = {} |
62 rights['create'] = [access.checkIsHost] |
59 rights['create'] = [access.checkIsHost] |
63 rights['edit'] = [access.checkIsMyActiveRole(soc.logic.models.host)] |
60 rights['edit'] = [access.checkIsMyActiveRole(soc.logic.models.host)] |
64 rights['invite'] = [access.checkIsHost] |
61 rights['invite'] = [access.checkIsHost] |
65 rights['list'] = [access.checkIsHost] |
62 rights['list'] = [access.checkIsDeveloper] |
66 rights['accept_invite'] = [access.checkCanCreateFromRequest('host')] |
63 rights['accept_invite'] = [access.checkCanCreateFromRequest('host')] |
67 rights['process_request'] = [access.checkIsHost, |
64 rights['process_request'] = [access.checkIsHost, |
68 access.checkCanProcessRequest('host')] |
65 access.checkCanProcessRequest('host')] |
69 |
66 |
70 new_params = {} |
67 new_params = {} |
94 |
91 |
95 params = dicts.merge(params, new_params) |
92 params = dicts.merge(params, new_params) |
96 |
93 |
97 super(View, self).__init__(params=params) |
94 super(View, self).__init__(params=params) |
98 |
95 |
|
96 # register the role with the group_view |
|
97 params['group_view'].registerRole(params['module_name'], self) |
|
98 |
99 # create and store the special form for invited users |
99 # create and store the special form for invited users |
100 updated_fields = { |
100 updated_fields = { |
101 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), |
101 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), |
102 required=False)} |
102 required=False)} |
103 |
103 |
104 invited_create_form = dynaform.extendDynaForm( |
104 invited_create_form = dynaform.extendDynaForm( |
105 dynaform = self._params['create_form'], |
105 dynaform = self._params['create_form'], |
106 dynafields = updated_fields) |
106 dynafields = updated_fields) |
107 |
107 |
108 params['invited_create_form'] = invited_create_form |
108 params['invited_create_form'] = invited_create_form |
109 |
|
110 |
|
111 def list(self, request, access_type, page_name=None, |
|
112 params=None, filter=None): |
|
113 """See base.View.list. |
|
114 |
|
115 Passes a filter to base.View.list so that only hosts from a sponsor |
|
116 that this user is host for are listed. |
|
117 """ |
|
118 |
|
119 user = user_logic.logic.getForCurrentAccount() |
|
120 |
|
121 # Don't bother looking up everything if there's no user |
|
122 if user and (not accounts.isDeveloper(user=user)): |
|
123 hosts = host_logic.logic.getForFields({'user': user}) |
|
124 sponsors = tolist((host.scope for host in hosts)) |
|
125 |
|
126 new_filter = {'scope': sponsors} |
|
127 filter = dicts.merge(filter, new_filter) |
|
128 |
|
129 return super(View, self).list(request, access_type, page_name=page_name, |
|
130 params=params, filter=filter) |
|
131 |
109 |
132 def _editPost(self, request, entity, fields): |
110 def _editPost(self, request, entity, fields): |
133 """See base.View._editPost(). |
111 """See base.View._editPost(). |
134 """ |
112 """ |
135 if not entity: |
113 if not entity: |