Merge lp:~therp-nl/openobject-addons/7.0_make_survey_module_usable_for_external_users into lp:openobject-addons/7.0

Proposed by Holger Brunn (Therp)
Status: Needs review
Proposed branch: lp:~therp-nl/openobject-addons/7.0_make_survey_module_usable_for_external_users
Merge into: lp:openobject-addons/7.0
Diff against target: 333 lines (+129/-21)
9 files modified
survey/__openerp__.py (+2/-2)
survey/security/ir.model.access.csv (+10/-0)
survey/security/survey_security.xml (+54/-1)
survey/survey_report.xml (+6/-3)
survey/survey_view.xml (+36/-4)
survey/test/draft2open2close_survey.yml (+1/-1)
survey/wizard/survey_answer.py (+5/-5)
survey/wizard/survey_send_invitation.py (+13/-4)
survey/wizard/survey_send_invitation.xml (+2/-1)
To merge this branch: bzr merge lp:~therp-nl/openobject-addons/7.0_make_survey_module_usable_for_external_users
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+180328@code.launchpad.net

Description of the change

The up to now proposed patch is dangerous because it assigns way to many permissions to the created user. This is an attempt to fix the issue in question and also add some minor usability improvements.

To post a comment you must log in.
9364. By Stefan Rijnhart (Opener)

[FIX] Prevent possibly unreferenced variable in invitation wizard
[FIX] Call invitation wizard with context in tests

Unmerged revisions

9364. By Stefan Rijnhart (Opener)

[FIX] Prevent possibly unreferenced variable in invitation wizard
[FIX] Call invitation wizard with context in tests

9363. By Holger Brunn (Therp)

[ADD] place invitees into their own group with appropriate access rights
[IMP] link created user to partner
[IMP] prefill timezone with user's timezone
[IMP] strip down survey form for invitees

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'survey/__openerp__.py'
2--- survey/__openerp__.py 2012-11-29 22:26:45 +0000
3+++ survey/__openerp__.py 2013-10-25 11:13:01 +0000
4@@ -36,12 +36,12 @@
5 'author': 'OpenERP SA',
6 'depends': ['mail'],
7 'data': [
8+ 'security/survey_security.xml',
9+ 'security/ir.model.access.csv',
10 'survey_report.xml',
11 'survey_data.xml',
12 'wizard/survey_selection.xml',
13 'wizard/survey_answer.xml',
14- 'security/survey_security.xml',
15- 'security/ir.model.access.csv',
16 'survey_view.xml',
17 'wizard/survey_print_statistics.xml',
18 'wizard/survey_print_answer.xml',
19
20=== modified file 'survey/security/ir.model.access.csv'
21--- survey/security/ir.model.access.csv 2012-03-07 05:47:59 +0000
22+++ survey/security/ir.model.access.csv 2013-10-25 11:13:01 +0000
23@@ -22,3 +22,13 @@
24 access_survey_response_line_survey_user,survey.response.line.survey.user,model_survey_response_line,base.group_survey_user,1,1,1,1
25 access_survey_question_column_heading_survey_user,survey.question.column.heading.survey.user,model_survey_question_column_heading,base.group_survey_user,1,0,0,0
26 access_survey_question_column_heading_user,survey.question.column.heading user,model_survey_question_column_heading,base.group_tool_user,1,1,1,1
27+access_survey_invitee,survey.invitee,model_survey,base.group_survey_invitee,1,0,0,0
28+access_survey_page_invitee,survey.page.invitee,model_survey_page,base.group_survey_invitee,1,0,0,0
29+access_survey_question_invitee,survey.question.invitee,model_survey_question,base.group_survey_invitee,1,0,0,0
30+access_survey_answer_invitee,survey.answer.invitee,model_survey_answer,base.group_survey_invitee,1,0,0,0
31+access_survey_response_invitee,survey.response.invitee,model_survey_response,base.group_survey_invitee,1,1,1,0
32+access_survey_response_line_invitee,survey.response.line.invitee,model_survey_response_line,base.group_survey_invitee,1,1,1,0
33+access_survey_response_answer_invitee,survey.response.answer.invitee,model_survey_response_answer,base.group_survey_invitee,1,1,1,0
34+access_survey_history_invitee,survey.history.invitee,model_survey_history,base.group_survey_invitee,1,0,1,0
35+access_survey_question_column_heading_invitee,survey.question.column.heading.invitee,model_survey_question_column_heading,base.group_survey_invitee,1,0,0,0
36+access_res_partner_invitee,res.partner.invitee,base.model_res_partner,base.group_survey_invitee,1,0,0,0
37
38=== modified file 'survey/security/survey_security.xml'
39--- survey/security/survey_security.xml 2012-04-04 09:08:30 +0000
40+++ survey/security/survey_security.xml 2013-10-25 11:13:01 +0000
41@@ -15,5 +15,58 @@
42 <field name="name">Survey / User</field>
43 <field name="users" eval="[(4, ref('base.user_root'))]"/>
44 </record>
45- </data>
46+ <record model="res.groups" id="base.group_survey_invitee">
47+ <field name="name">Survey / Invitee</field>
48+ </record>
49+ <record id="rule_survey_invitee" model="ir.rule">
50+ <field name="model_id" ref="model_survey" />
51+ <field name="domain_force">[("invited_user_ids", "=", user.id)]</field>
52+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
53+ </record>
54+ <record id="rule_survey_page_invitee" model="ir.rule">
55+ <field name="model_id" ref="model_survey_page" />
56+ <field name="domain_force">[("survey_id.invited_user_ids", "=", user.id)]</field>
57+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
58+ </record>
59+ <record id="rule_survey_question_invitee" model="ir.rule">
60+ <field name="model_id" ref="model_survey_question" />
61+ <field name="domain_force">[("survey.invited_user_ids", "=", user.id)]</field>
62+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
63+ </record>
64+ <record id="rule_survey_answer_invitee" model="ir.rule">
65+ <field name="model_id" ref="model_survey_answer" />
66+ <field name="domain_force">[("question_id.survey.invited_user_ids", "=", user.id)]</field>
67+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
68+ </record>
69+ <record id="rule_survey_response_invitee" model="ir.rule">
70+ <field name="model_id" ref="model_survey_response" />
71+ <field name="domain_force">[("user_id", "=", user.id)]</field>
72+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
73+ </record>
74+ <record id="rule_survey_response_line_invitee" model="ir.rule">
75+ <field name="model_id" ref="model_survey_response_line" />
76+ <field name="domain_force">[("response_id.user_id", "=", user.id)]</field>
77+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
78+ </record>
79+ <record id="rule_survey_response_answer_invitee" model="ir.rule">
80+ <field name="model_id" ref="model_survey_response_answer" />
81+ <field name="domain_force">[("response_id.response_id.user_id", "=", user.id)]</field>
82+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
83+ </record>
84+ <record id="rule_survey_history_invitee" model="ir.rule">
85+ <field name="model_id" ref="model_survey_history" />
86+ <field name="domain_force">[("survey_id.invited_user_ids", "=", user.id)]</field>
87+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
88+ </record>
89+ <record id="rule_survey_question_column_heading_invitee" model="ir.rule">
90+ <field name="model_id" ref="model_survey_question_column_heading" />
91+ <field name="domain_force">[("question_id.survey.invited_user_ids", "=", user.id)]</field>
92+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
93+ </record>
94+ <record id="rule_res_partner_invitee" model="ir.rule">
95+ <field name="model_id" ref="base.model_res_partner" />
96+ <field name="domain_force">[("id", "=", user.id)]</field>
97+ <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
98+ </record>
99+ </data>
100 </openerp>
101
102=== modified file 'survey/survey_report.xml'
103--- survey/survey_report.xml 2012-06-28 06:40:05 +0000
104+++ survey/survey_report.xml 2013-10-25 11:13:01 +0000
105@@ -6,20 +6,23 @@
106 id="report_survey_form"
107 model="survey"
108 name="survey.form"
109- string="Survey"/>
110+ string="Survey"
111+ groups="base.group_survey_user" />
112
113 <report auto="True"
114 id="survey_analysis"
115 model="survey"
116 name="survey.analysis"
117 rml=""
118- string="Survey Statistics"/>
119+ string="Survey Statistics"
120+ groups="base.group_survey_user" />
121
122 <report auto="True"
123 id="survey_browse_response"
124 model="survey"
125 name="survey.browse.response"
126 rml=""
127- string="Survey Answers"/>
128+ string="Survey Answers"
129+ groups="base.group_survey_user" />
130 </data>
131 </openerp>
132
133=== modified file 'survey/survey_view.xml'
134--- survey/survey_view.xml 2013-06-11 10:02:43 +0000
135+++ survey/survey_view.xml 2013-10-25 11:13:01 +0000
136@@ -268,6 +268,35 @@
137 </field>
138 </record>
139
140+ <record model="ir.ui.view" id="survey_form_invitee">
141+ <field name="name">survey_form_invitee</field>
142+ <field name="model">survey</field>
143+ <field name="groups_id" eval="[(6, 0, [ref('base.group_survey_invitee')])]" />
144+ <field name="priority" eval="1" />
145+ <field name="inherit_id" ref="survey_form" />
146+ <field name="arch" type="xml">
147+ <data>
148+ <form position="replace">
149+ <form string="Survey" version="7.0">
150+ <sheet>
151+ <field name="state" invisible="True" />
152+ <div class="oe_button_box oe_right">
153+ <button name="fill_survey" states="open" string="Answer Survey" type="object" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/>
154+ </div>
155+ <div class="oe_title">
156+ <label for="title" class="oe_edit_only"/>
157+ <h1>
158+ <field name="title" attrs="{'readonly':[('state','=','close')]}"/>
159+ </h1>
160+ </div>
161+ <field name="note" />
162+ </sheet>
163+ </form>
164+ </form>
165+ </data>
166+ </field>
167+ </record>
168+
169 <record id="survey_search" model="ir.ui.view">
170 <field name="name">survey_search</field>
171 <field name="model">survey</field>
172@@ -1224,14 +1253,16 @@
173 id="act_survey_pages"
174 name="Pages"
175 res_model="survey.page"
176- src_model="survey"/>
177+ src_model="survey"
178+ groups="base.group_survey_user"/>
179
180 <act_window
181 context="{'search_default_survey': active_id, 'default_survey': active_id}"
182 id="act_survey_question"
183 name="Questions"
184 res_model="survey.question"
185- src_model="survey"/>
186+ src_model="survey"
187+ groups="base.group_survey_user"/>
188
189
190 <act_window
191@@ -1239,7 +1270,7 @@
192 id="act_survey_page_question"
193 name="Questions"
194 res_model="survey.question"
195- src_model="survey.page"/>
196+ src_model="survey.page" />
197
198 <act_window domain="[('question_id', '=', active_id)]"
199 id="act_survey_answer"
200@@ -1252,7 +1283,8 @@
201 id="act_survey_request"
202 name="Survey Requests"
203 res_model="survey.request"
204- src_model="survey"/>
205+ src_model="survey"
206+ groups="base.group_survey_user"/>
207
208 </data>
209 </openerp>
210
211=== modified file 'survey/test/draft2open2close_survey.yml'
212--- survey/test/draft2open2close_survey.yml 2011-12-20 16:03:42 +0000
213+++ survey/test/draft2open2close_survey.yml 2013-10-25 11:13:01 +0000
214@@ -82,7 +82,7 @@
215 context = {'active_model':'survey', 'active_id': ref('survey_Initial_partner_feedback'), 'active_ids': [ref('survey_Initial_partner_feedback')]}
216 values = self.default_get(cr, uid, ['mail_from', 'mail_subject', 'send_mail_existing', 'mail_subject_existing', 'mail', 'partner_ids', 'send_mail'], context)
217 values['mail_from'] = 'Surveyor'
218- new_id = self.create(cr, uid, values)
219+ new_id = self.create(cr, uid, values, context)
220 self.action_send(cr, uid, [new_id], context)
221 -
222 I set the value in "Total start survey" field.
223
224=== modified file 'survey/wizard/survey_answer.py'
225--- survey/wizard/survey_answer.py 2013-09-20 12:39:38 +0000
226+++ survey/wizard/survey_answer.py 2013-10-25 11:13:01 +0000
227@@ -27,7 +27,7 @@
228
229 from openerp import addons, netsvc, tools
230 from openerp.osv import fields, osv
231-from openerp.tools import to_xml
232+from openerp.tools import to_xml, SUPERUSER_ID
233 from openerp.tools.translate import _
234 from openerp.tools.safe_eval import safe_eval
235
236@@ -124,7 +124,7 @@
237 raise osv.except_osv(_('Warning!'),_("You cannot answer this survey more than %s times.") % (user_limit))
238
239 if sur_rec.max_response_limit and sur_rec.max_response_limit <= sur_rec.tot_start_survey and not sur_name_rec.page_no + 1:
240- survey_obj.write(cr, uid, survey_id, {'state':'close', 'date_close':strftime("%Y-%m-%d %H:%M:%S")})
241+ survey_obj.write(cr, SUPERUSER_ID, survey_id, {'state':'close', 'date_close':strftime("%Y-%m-%d %H:%M:%S")})
242
243 p_id = p_id[sur_name_rec.page_no + 1]
244 surv_name_wiz.write(cr, uid, [context['sur_name_id'],], {'page_no' : sur_name_rec.page_no + 1})
245@@ -397,8 +397,8 @@
246 result['fields'] = fields
247 result['context'] = context
248 else:
249- survey_obj.write(cr, uid, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
250- sur_response_obj.write(cr, uid, [sur_name_read.response], {'state' : 'done'})
251+ survey_obj.write(cr, SUPERUSER_ID, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
252+ sur_response_obj.write(cr, uid, int(sur_name_read.response), {'state' : 'done'})
253
254 # mark the survey request as done; call 'survey_req_done' on its actual model
255 survey_req_obj = self.pool.get(context.get('active_model'))
256@@ -606,7 +606,7 @@
257 'date': strftime('%Y-%m-%d %H:%M:%S'), 'survey_id': sur_name_read['survey_id'][0]})
258 survey_id = sur_name_read['survey_id'][0]
259 sur_rec = survey_obj.read(cr, uid, survey_id)
260- survey_obj.write(cr, uid, survey_id, {'tot_start_survey' : sur_rec['tot_start_survey'] + 1})
261+ survey_obj.write(cr, SUPERUSER_ID, survey_id, {'tot_start_survey' : sur_rec['tot_start_survey'] + 1})
262 if context.has_key('cur_id'):
263 if context.has_key('request') and context.get('request',False):
264 self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id})
265
266=== modified file 'survey/wizard/survey_send_invitation.py'
267--- survey/wizard/survey_send_invitation.py 2012-12-06 14:56:32 +0000
268+++ survey/wizard/survey_send_invitation.py 2013-10-25 11:13:01 +0000
269@@ -60,6 +60,7 @@
270 survey_obj = self.pool.get('survey')
271 msg = ""
272 name = ""
273+ survey_id = 0
274 for sur in survey_obj.browse(cr, uid, context.get('active_ids', []), context=context):
275 name += "\n --> " + sur.title + "\n"
276 if sur.state != 'open':
277@@ -67,6 +68,7 @@
278 data['mail_subject'] = _("Invitation for %s") % (sur.title)
279 data['mail_subject_existing'] = _("Invitation for %s") % (sur.title)
280 data['mail_from'] = sur.responsible_id.email
281+ survey_id = sur.id
282 if msg:
283 raise osv.except_osv(_('Warning!'), _('The following surveys are not in open state: %s') % msg)
284 data['mail'] = _('''
285@@ -77,7 +79,12 @@
286 Your login ID: %%(login)s\n
287 Your password: %%(passwd)s\n
288 \n\n
289-Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context))
290+Thanks,''') % (
291+ name,
292+ self.pool.get('ir.config_parameter').get_param(
293+ cr, uid, 'web.base.url', default='http://localhost:8069',
294+ context=context)
295+ + '#id=%d&view_type=form&model=survey' % survey_id)
296 return data
297
298 def create_report(self, cr, uid, res_ids, report_name=False, file_name=False):
299@@ -108,8 +115,8 @@
300 mail_message = self.pool.get('mail.message')
301
302 model_data_obj = self.pool.get('ir.model.data')
303- group_id = model_data_obj._get_id(cr, uid, 'base', 'group_survey_user')
304- group_id = model_data_obj.browse(cr, uid, group_id, context=context).res_id
305+ group_id = model_data_obj.get_object_reference(
306+ cr, uid, 'base', 'group_survey_invitee')[1]
307
308 act_id = self.pool.get('ir.actions.act_window')
309 act_id = act_id.search(cr, uid, [('res_model', '=' , 'survey.name.wiz'), \
310@@ -188,7 +195,9 @@
311 'address_id': partner.id,
312 'groups_id': [[6, 0, [group_id]]],
313 'action_id': act_id[0],
314- 'survey_id': [[6, 0, survey_ids]]
315+ 'survey_id': [[6, 0, survey_ids]],
316+ 'partner_id': partner.id,
317+ 'tz': context.get('tz'),
318 }
319 user = user_ref.create(cr, uid, res_data)
320 if user not in new_user:
321
322=== modified file 'survey/wizard/survey_send_invitation.xml'
323--- survey/wizard/survey_send_invitation.xml 2012-11-29 22:26:45 +0000
324+++ survey/wizard/survey_send_invitation.xml 2013-10-25 11:13:01 +0000
325@@ -45,7 +45,8 @@
326 <act_window id="action_act_view_survey_send_invitation"
327 key2="client_action_multi" name="Send Invitations"
328 res_model="survey.send.invitation" src_model="survey"
329- view_mode="form" target="new" view_type="form" />
330+ view_mode="form" target="new" view_type="form"
331+ groups="base.group_survey_user"/>
332
333 <!-- Survey send invitation Display Log Form View -->
334