diff --git a/__init__.py b/__init__.py index 4f121fde31e31b188e0b2a3b97a8e451341cf955..36c841aaf7f1bee5505046dc8f493b38060ed994 100644 --- a/__init__.py +++ b/__init__.py @@ -2,3 +2,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models +from . import controllers diff --git a/controllers/__init__.py b/controllers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a676f817085c409e6659d0aef11f06ae9c2ff2f5 --- /dev/null +++ b/controllers/__init__.py @@ -0,0 +1,4 @@ +# © 2020 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import main diff --git a/controllers/main.py b/controllers/main.py new file mode 100644 index 0000000000000000000000000000000000000000..87f423e8a6b7c1d49f850d4ca6ca5b4b24fa7f02 --- /dev/null +++ b/controllers/main.py @@ -0,0 +1,60 @@ +# © 2020 Le Filament (<https://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging +import json + +from odoo import http, SUPERUSER_ID +from odoo.addons.survey.controllers.main import Survey +from odoo.http import request + +_logger = logging.getLogger(__name__) + + +class WebsiteSurveyExtend(Survey): + + # TODO - Si possible : trouver une manière d'hériter plutôt que réécrire + # AJAX submission of a page + @http.route(['/survey/submit/<model("survey.survey"):survey>'], type='http', methods=['POST'], auth='public', website=True) + def submit(self, survey, **post): + _logger.debug('Incoming data: %s', post) + page_id = int(post['page_id']) + questions = request.env['survey.question'].search([('page_id', '=', page_id)]) + + # Answer validation + errors = {} + for question in questions: + answer_tag = "%s_%s_%s" % (survey.id, page_id, question.id) + errors.update(question.validate_question(post, answer_tag)) + + ret = {} + if len(errors): + # Return errors messages to webpage + ret['errors'] = errors + else: + # Store answers into database + try: + user_input = request.env['survey.user_input'].sudo().search([('token', '=', post['token'])], limit=1) + except KeyError: # Invalid token + return request.render("survey.403", {'survey': survey}) + user_id = request.env.user.id if user_input.type != 'link' else SUPERUSER_ID + + for question in questions: + answer_tag = "%s_%s_%s" % (survey.id, page_id, question.id) + request.env['survey.user_input_line'].sudo(user=user_id).save_lines(user_input.id, question, post, + answer_tag) + save_quit = post['button_submit'] == 'save_quit' + go_back = post['button_submit'] == 'previous' + next_page, _, last = request.env['survey.survey'].next_page(user_input, page_id, go_back=go_back) + vals = {'last_displayed_page_id': page_id} + if next_page is None and not go_back: + vals.update({'state': 'done'}) + else: + vals.update({'state': 'skip'}) + user_input.sudo(user=user_id).write(vals) + ret['redirect'] = '/survey/fill/%s/%s' % (survey.id, post['token']) + if go_back: + ret['redirect'] += '/prev' + if save_quit: + ret['redirect'] = 'https://longtimelabel.com/' + return json.dumps(ret) diff --git a/templates/layout.xml b/templates/layout.xml index 0ce5839ca18bc0c1e1d4190ee29e7ca97baa6571..68fd0cb8e748f23940a10c5553132ea1ebceae3d 100644 --- a/templates/layout.xml +++ b/templates/layout.xml @@ -160,7 +160,8 @@ </t> <div class="text-right mt16 mb16 mr32"> <button t-if="survey.users_can_go_back and page_nr > 0" type="submit" class="btn ethikis-btn-green" name="button_submit" value="previous">Previous page</button> - <button t-if="not last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="next">Save or continue</button> + <button t-if="not last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="save_quit">Sauvegarder et quitter</button> + <button t-if="not last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="next">Page suivante</button> <button t-if="last" type="submit" class="btn ethikis-btn-blue" name="button_submit" value="finish">Submit survey</button> </div> <div class="float-left">