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
=== modified file 'survey/__openerp__.py'
--- survey/__openerp__.py 2012-11-29 22:26:45 +0000
+++ survey/__openerp__.py 2013-10-25 11:13:01 +0000
@@ -36,12 +36,12 @@
36 'author': 'OpenERP SA',36 'author': 'OpenERP SA',
37 'depends': ['mail'],37 'depends': ['mail'],
38 'data': [38 'data': [
39 'security/survey_security.xml',
40 'security/ir.model.access.csv',
39 'survey_report.xml',41 'survey_report.xml',
40 'survey_data.xml',42 'survey_data.xml',
41 'wizard/survey_selection.xml',43 'wizard/survey_selection.xml',
42 'wizard/survey_answer.xml',44 'wizard/survey_answer.xml',
43 'security/survey_security.xml',
44 'security/ir.model.access.csv',
45 'survey_view.xml',45 'survey_view.xml',
46 'wizard/survey_print_statistics.xml',46 'wizard/survey_print_statistics.xml',
47 'wizard/survey_print_answer.xml',47 'wizard/survey_print_answer.xml',
4848
=== modified file 'survey/security/ir.model.access.csv'
--- survey/security/ir.model.access.csv 2012-03-07 05:47:59 +0000
+++ survey/security/ir.model.access.csv 2013-10-25 11:13:01 +0000
@@ -22,3 +22,13 @@
22access_survey_response_line_survey_user,survey.response.line.survey.user,model_survey_response_line,base.group_survey_user,1,1,1,122access_survey_response_line_survey_user,survey.response.line.survey.user,model_survey_response_line,base.group_survey_user,1,1,1,1
23access_survey_question_column_heading_survey_user,survey.question.column.heading.survey.user,model_survey_question_column_heading,base.group_survey_user,1,0,0,023access_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
24access_survey_question_column_heading_user,survey.question.column.heading user,model_survey_question_column_heading,base.group_tool_user,1,1,1,124access_survey_question_column_heading_user,survey.question.column.heading user,model_survey_question_column_heading,base.group_tool_user,1,1,1,1
25access_survey_invitee,survey.invitee,model_survey,base.group_survey_invitee,1,0,0,0
26access_survey_page_invitee,survey.page.invitee,model_survey_page,base.group_survey_invitee,1,0,0,0
27access_survey_question_invitee,survey.question.invitee,model_survey_question,base.group_survey_invitee,1,0,0,0
28access_survey_answer_invitee,survey.answer.invitee,model_survey_answer,base.group_survey_invitee,1,0,0,0
29access_survey_response_invitee,survey.response.invitee,model_survey_response,base.group_survey_invitee,1,1,1,0
30access_survey_response_line_invitee,survey.response.line.invitee,model_survey_response_line,base.group_survey_invitee,1,1,1,0
31access_survey_response_answer_invitee,survey.response.answer.invitee,model_survey_response_answer,base.group_survey_invitee,1,1,1,0
32access_survey_history_invitee,survey.history.invitee,model_survey_history,base.group_survey_invitee,1,0,1,0
33access_survey_question_column_heading_invitee,survey.question.column.heading.invitee,model_survey_question_column_heading,base.group_survey_invitee,1,0,0,0
34access_res_partner_invitee,res.partner.invitee,base.model_res_partner,base.group_survey_invitee,1,0,0,0
2535
=== modified file 'survey/security/survey_security.xml'
--- survey/security/survey_security.xml 2012-04-04 09:08:30 +0000
+++ survey/security/survey_security.xml 2013-10-25 11:13:01 +0000
@@ -15,5 +15,58 @@
15 <field name="name">Survey / User</field>15 <field name="name">Survey / User</field>
16 <field name="users" eval="[(4, ref('base.user_root'))]"/>16 <field name="users" eval="[(4, ref('base.user_root'))]"/>
17 </record>17 </record>
18 </data>18 <record model="res.groups" id="base.group_survey_invitee">
19 <field name="name">Survey / Invitee</field>
20 </record>
21 <record id="rule_survey_invitee" model="ir.rule">
22 <field name="model_id" ref="model_survey" />
23 <field name="domain_force">[("invited_user_ids", "=", user.id)]</field>
24 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
25 </record>
26 <record id="rule_survey_page_invitee" model="ir.rule">
27 <field name="model_id" ref="model_survey_page" />
28 <field name="domain_force">[("survey_id.invited_user_ids", "=", user.id)]</field>
29 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
30 </record>
31 <record id="rule_survey_question_invitee" model="ir.rule">
32 <field name="model_id" ref="model_survey_question" />
33 <field name="domain_force">[("survey.invited_user_ids", "=", user.id)]</field>
34 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
35 </record>
36 <record id="rule_survey_answer_invitee" model="ir.rule">
37 <field name="model_id" ref="model_survey_answer" />
38 <field name="domain_force">[("question_id.survey.invited_user_ids", "=", user.id)]</field>
39 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
40 </record>
41 <record id="rule_survey_response_invitee" model="ir.rule">
42 <field name="model_id" ref="model_survey_response" />
43 <field name="domain_force">[("user_id", "=", user.id)]</field>
44 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
45 </record>
46 <record id="rule_survey_response_line_invitee" model="ir.rule">
47 <field name="model_id" ref="model_survey_response_line" />
48 <field name="domain_force">[("response_id.user_id", "=", user.id)]</field>
49 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
50 </record>
51 <record id="rule_survey_response_answer_invitee" model="ir.rule">
52 <field name="model_id" ref="model_survey_response_answer" />
53 <field name="domain_force">[("response_id.response_id.user_id", "=", user.id)]</field>
54 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
55 </record>
56 <record id="rule_survey_history_invitee" model="ir.rule">
57 <field name="model_id" ref="model_survey_history" />
58 <field name="domain_force">[("survey_id.invited_user_ids", "=", user.id)]</field>
59 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
60 </record>
61 <record id="rule_survey_question_column_heading_invitee" model="ir.rule">
62 <field name="model_id" ref="model_survey_question_column_heading" />
63 <field name="domain_force">[("question_id.survey.invited_user_ids", "=", user.id)]</field>
64 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
65 </record>
66 <record id="rule_res_partner_invitee" model="ir.rule">
67 <field name="model_id" ref="base.model_res_partner" />
68 <field name="domain_force">[("id", "=", user.id)]</field>
69 <field name="groups" eval="[(6, 0,[ref('base.group_survey_invitee')])]" />
70 </record>
71 </data>
19</openerp>72</openerp>
2073
=== modified file 'survey/survey_report.xml'
--- survey/survey_report.xml 2012-06-28 06:40:05 +0000
+++ survey/survey_report.xml 2013-10-25 11:13:01 +0000
@@ -6,20 +6,23 @@
6 id="report_survey_form"6 id="report_survey_form"
7 model="survey"7 model="survey"
8 name="survey.form"8 name="survey.form"
9 string="Survey"/>9 string="Survey"
10 groups="base.group_survey_user" />
1011
11 <report auto="True"12 <report auto="True"
12 id="survey_analysis"13 id="survey_analysis"
13 model="survey"14 model="survey"
14 name="survey.analysis"15 name="survey.analysis"
15 rml=""16 rml=""
16 string="Survey Statistics"/>17 string="Survey Statistics"
18 groups="base.group_survey_user" />
1719
18 <report auto="True"20 <report auto="True"
19 id="survey_browse_response"21 id="survey_browse_response"
20 model="survey"22 model="survey"
21 name="survey.browse.response"23 name="survey.browse.response"
22 rml=""24 rml=""
23 string="Survey Answers"/>25 string="Survey Answers"
26 groups="base.group_survey_user" />
24 </data>27 </data>
25</openerp>28</openerp>
2629
=== modified file 'survey/survey_view.xml'
--- survey/survey_view.xml 2013-06-11 10:02:43 +0000
+++ survey/survey_view.xml 2013-10-25 11:13:01 +0000
@@ -268,6 +268,35 @@
268 </field>268 </field>
269 </record>269 </record>
270270
271 <record model="ir.ui.view" id="survey_form_invitee">
272 <field name="name">survey_form_invitee</field>
273 <field name="model">survey</field>
274 <field name="groups_id" eval="[(6, 0, [ref('base.group_survey_invitee')])]" />
275 <field name="priority" eval="1" />
276 <field name="inherit_id" ref="survey_form" />
277 <field name="arch" type="xml">
278 <data>
279 <form position="replace">
280 <form string="Survey" version="7.0">
281 <sheet>
282 <field name="state" invisible="True" />
283 <div class="oe_button_box oe_right">
284 <button name="fill_survey" states="open" string="Answer Survey" type="object" icon="gtk-execute" context="{'survey_id': active_id}" attrs="{'invisible':[('state','!=','open')]}"/>
285 </div>
286 <div class="oe_title">
287 <label for="title" class="oe_edit_only"/>
288 <h1>
289 <field name="title" attrs="{'readonly':[('state','=','close')]}"/>
290 </h1>
291 </div>
292 <field name="note" />
293 </sheet>
294 </form>
295 </form>
296 </data>
297 </field>
298 </record>
299
271 <record id="survey_search" model="ir.ui.view">300 <record id="survey_search" model="ir.ui.view">
272 <field name="name">survey_search</field>301 <field name="name">survey_search</field>
273 <field name="model">survey</field>302 <field name="model">survey</field>
@@ -1224,14 +1253,16 @@
1224 id="act_survey_pages"1253 id="act_survey_pages"
1225 name="Pages"1254 name="Pages"
1226 res_model="survey.page"1255 res_model="survey.page"
1227 src_model="survey"/>1256 src_model="survey"
1257 groups="base.group_survey_user"/>
12281258
1229 <act_window1259 <act_window
1230 context="{'search_default_survey': active_id, 'default_survey': active_id}"1260 context="{'search_default_survey': active_id, 'default_survey': active_id}"
1231 id="act_survey_question"1261 id="act_survey_question"
1232 name="Questions"1262 name="Questions"
1233 res_model="survey.question"1263 res_model="survey.question"
1234 src_model="survey"/>1264 src_model="survey"
1265 groups="base.group_survey_user"/>
12351266
12361267
1237 <act_window1268 <act_window
@@ -1239,7 +1270,7 @@
1239 id="act_survey_page_question"1270 id="act_survey_page_question"
1240 name="Questions"1271 name="Questions"
1241 res_model="survey.question"1272 res_model="survey.question"
1242 src_model="survey.page"/>1273 src_model="survey.page" />
12431274
1244 <act_window domain="[('question_id', '=', active_id)]"1275 <act_window domain="[('question_id', '=', active_id)]"
1245 id="act_survey_answer"1276 id="act_survey_answer"
@@ -1252,7 +1283,8 @@
1252 id="act_survey_request"1283 id="act_survey_request"
1253 name="Survey Requests"1284 name="Survey Requests"
1254 res_model="survey.request"1285 res_model="survey.request"
1255 src_model="survey"/>1286 src_model="survey"
1287 groups="base.group_survey_user"/>
12561288
1257 </data>1289 </data>
1258</openerp>1290</openerp>
12591291
=== modified file 'survey/test/draft2open2close_survey.yml'
--- survey/test/draft2open2close_survey.yml 2011-12-20 16:03:42 +0000
+++ survey/test/draft2open2close_survey.yml 2013-10-25 11:13:01 +0000
@@ -82,7 +82,7 @@
82 context = {'active_model':'survey', 'active_id': ref('survey_Initial_partner_feedback'), 'active_ids': [ref('survey_Initial_partner_feedback')]}82 context = {'active_model':'survey', 'active_id': ref('survey_Initial_partner_feedback'), 'active_ids': [ref('survey_Initial_partner_feedback')]}
83 values = self.default_get(cr, uid, ['mail_from', 'mail_subject', 'send_mail_existing', 'mail_subject_existing', 'mail', 'partner_ids', 'send_mail'], context)83 values = self.default_get(cr, uid, ['mail_from', 'mail_subject', 'send_mail_existing', 'mail_subject_existing', 'mail', 'partner_ids', 'send_mail'], context)
84 values['mail_from'] = 'Surveyor'84 values['mail_from'] = 'Surveyor'
85 new_id = self.create(cr, uid, values)85 new_id = self.create(cr, uid, values, context)
86 self.action_send(cr, uid, [new_id], context)86 self.action_send(cr, uid, [new_id], context)
87-87-
88 I set the value in "Total start survey" field.88 I set the value in "Total start survey" field.
8989
=== modified file 'survey/wizard/survey_answer.py'
--- survey/wizard/survey_answer.py 2013-09-20 12:39:38 +0000
+++ survey/wizard/survey_answer.py 2013-10-25 11:13:01 +0000
@@ -27,7 +27,7 @@
2727
28from openerp import addons, netsvc, tools28from openerp import addons, netsvc, tools
29from openerp.osv import fields, osv29from openerp.osv import fields, osv
30from openerp.tools import to_xml30from openerp.tools import to_xml, SUPERUSER_ID
31from openerp.tools.translate import _31from openerp.tools.translate import _
32from openerp.tools.safe_eval import safe_eval32from openerp.tools.safe_eval import safe_eval
3333
@@ -124,7 +124,7 @@
124 raise osv.except_osv(_('Warning!'),_("You cannot answer this survey more than %s times.") % (user_limit))124 raise osv.except_osv(_('Warning!'),_("You cannot answer this survey more than %s times.") % (user_limit))
125125
126 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:126 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:
127 survey_obj.write(cr, uid, survey_id, {'state':'close', 'date_close':strftime("%Y-%m-%d %H:%M:%S")})127 survey_obj.write(cr, SUPERUSER_ID, survey_id, {'state':'close', 'date_close':strftime("%Y-%m-%d %H:%M:%S")})
128128
129 p_id = p_id[sur_name_rec.page_no + 1]129 p_id = p_id[sur_name_rec.page_no + 1]
130 surv_name_wiz.write(cr, uid, [context['sur_name_id'],], {'page_no' : sur_name_rec.page_no + 1})130 surv_name_wiz.write(cr, uid, [context['sur_name_id'],], {'page_no' : sur_name_rec.page_no + 1})
@@ -397,8 +397,8 @@
397 result['fields'] = fields397 result['fields'] = fields
398 result['context'] = context398 result['context'] = context
399 else:399 else:
400 survey_obj.write(cr, uid, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})400 survey_obj.write(cr, SUPERUSER_ID, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
401 sur_response_obj.write(cr, uid, [sur_name_read.response], {'state' : 'done'})401 sur_response_obj.write(cr, uid, int(sur_name_read.response), {'state' : 'done'})
402402
403 # mark the survey request as done; call 'survey_req_done' on its actual model403 # mark the survey request as done; call 'survey_req_done' on its actual model
404 survey_req_obj = self.pool.get(context.get('active_model'))404 survey_req_obj = self.pool.get(context.get('active_model'))
@@ -606,7 +606,7 @@
606 'date': strftime('%Y-%m-%d %H:%M:%S'), 'survey_id': sur_name_read['survey_id'][0]})606 'date': strftime('%Y-%m-%d %H:%M:%S'), 'survey_id': sur_name_read['survey_id'][0]})
607 survey_id = sur_name_read['survey_id'][0]607 survey_id = sur_name_read['survey_id'][0]
608 sur_rec = survey_obj.read(cr, uid, survey_id)608 sur_rec = survey_obj.read(cr, uid, survey_id)
609 survey_obj.write(cr, uid, survey_id, {'tot_start_survey' : sur_rec['tot_start_survey'] + 1})609 survey_obj.write(cr, SUPERUSER_ID, survey_id, {'tot_start_survey' : sur_rec['tot_start_survey'] + 1})
610 if context.has_key('cur_id'):610 if context.has_key('cur_id'):
611 if context.has_key('request') and context.get('request',False):611 if context.has_key('request') and context.get('request',False):
612 self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id})612 self.pool.get(context.get('object',False)).write(cr, uid, [int(context.get('cur_id',False))], {'response' : response_id})
613613
=== modified file 'survey/wizard/survey_send_invitation.py'
--- survey/wizard/survey_send_invitation.py 2012-12-06 14:56:32 +0000
+++ survey/wizard/survey_send_invitation.py 2013-10-25 11:13:01 +0000
@@ -60,6 +60,7 @@
60 survey_obj = self.pool.get('survey')60 survey_obj = self.pool.get('survey')
61 msg = ""61 msg = ""
62 name = ""62 name = ""
63 survey_id = 0
63 for sur in survey_obj.browse(cr, uid, context.get('active_ids', []), context=context):64 for sur in survey_obj.browse(cr, uid, context.get('active_ids', []), context=context):
64 name += "\n --> " + sur.title + "\n"65 name += "\n --> " + sur.title + "\n"
65 if sur.state != 'open':66 if sur.state != 'open':
@@ -67,6 +68,7 @@
67 data['mail_subject'] = _("Invitation for %s") % (sur.title)68 data['mail_subject'] = _("Invitation for %s") % (sur.title)
68 data['mail_subject_existing'] = _("Invitation for %s") % (sur.title)69 data['mail_subject_existing'] = _("Invitation for %s") % (sur.title)
69 data['mail_from'] = sur.responsible_id.email70 data['mail_from'] = sur.responsible_id.email
71 survey_id = sur.id
70 if msg:72 if msg:
71 raise osv.except_osv(_('Warning!'), _('The following surveys are not in open state: %s') % msg)73 raise osv.except_osv(_('Warning!'), _('The following surveys are not in open state: %s') % msg)
72 data['mail'] = _('''74 data['mail'] = _('''
@@ -77,7 +79,12 @@
77 Your login ID: %%(login)s\n79 Your login ID: %%(login)s\n
78 Your password: %%(passwd)s\n80 Your password: %%(passwd)s\n
79\n\n81\n\n
80Thanks,''') % (name, self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context))82Thanks,''') % (
83 name,
84 self.pool.get('ir.config_parameter').get_param(
85 cr, uid, 'web.base.url', default='http://localhost:8069',
86 context=context)
87 + '#id=%d&view_type=form&model=survey' % survey_id)
81 return data88 return data
8289
83 def create_report(self, cr, uid, res_ids, report_name=False, file_name=False):90 def create_report(self, cr, uid, res_ids, report_name=False, file_name=False):
@@ -108,8 +115,8 @@
108 mail_message = self.pool.get('mail.message')115 mail_message = self.pool.get('mail.message')
109116
110 model_data_obj = self.pool.get('ir.model.data')117 model_data_obj = self.pool.get('ir.model.data')
111 group_id = model_data_obj._get_id(cr, uid, 'base', 'group_survey_user')118 group_id = model_data_obj.get_object_reference(
112 group_id = model_data_obj.browse(cr, uid, group_id, context=context).res_id119 cr, uid, 'base', 'group_survey_invitee')[1]
113120
114 act_id = self.pool.get('ir.actions.act_window')121 act_id = self.pool.get('ir.actions.act_window')
115 act_id = act_id.search(cr, uid, [('res_model', '=' , 'survey.name.wiz'), \122 act_id = act_id.search(cr, uid, [('res_model', '=' , 'survey.name.wiz'), \
@@ -188,7 +195,9 @@
188 'address_id': partner.id,195 'address_id': partner.id,
189 'groups_id': [[6, 0, [group_id]]],196 'groups_id': [[6, 0, [group_id]]],
190 'action_id': act_id[0],197 'action_id': act_id[0],
191 'survey_id': [[6, 0, survey_ids]]198 'survey_id': [[6, 0, survey_ids]],
199 'partner_id': partner.id,
200 'tz': context.get('tz'),
192 }201 }
193 user = user_ref.create(cr, uid, res_data)202 user = user_ref.create(cr, uid, res_data)
194 if user not in new_user:203 if user not in new_user:
195204
=== modified file 'survey/wizard/survey_send_invitation.xml'
--- survey/wizard/survey_send_invitation.xml 2012-11-29 22:26:45 +0000
+++ survey/wizard/survey_send_invitation.xml 2013-10-25 11:13:01 +0000
@@ -45,7 +45,8 @@
45 <act_window id="action_act_view_survey_send_invitation"45 <act_window id="action_act_view_survey_send_invitation"
46 key2="client_action_multi" name="Send Invitations"46 key2="client_action_multi" name="Send Invitations"
47 res_model="survey.send.invitation" src_model="survey"47 res_model="survey.send.invitation" src_model="survey"
48 view_mode="form" target="new" view_type="form" />48 view_mode="form" target="new" view_type="form"
49 groups="base.group_survey_user"/>
4950
50 <!-- Survey send invitation Display Log Form View -->51 <!-- Survey send invitation Display Log Form View -->
5152