diff --git a/addons/survey/controllers/main.py b/addons/survey/controllers/main.py index d657bf000d1..da1ec450cca 100644 --- a/addons/survey/controllers/main.py +++ b/addons/survey/controllers/main.py @@ -204,6 +204,10 @@ class Survey(http.Controller): * a token linked to a survey; * a token linked to an answer or generate a new token if access is allowed; """ + # Get the current answer token from cookie + if not answer_token: + answer_token = request.httprequest.cookies.get('survey_%s' % survey_token) + access_data = self._get_access_data(survey_token, answer_token, ensure_token=False) if access_data['validity_code'] is not True: return self._redirect_with_error(access_data, access_data['validity_code']) diff --git a/addons/survey/static/src/js/survey_form.js b/addons/survey/static/src/js/survey_form.js index 661127221c8..d48523e8324 100644 --- a/addons/survey/static/src/js/survey_form.js +++ b/addons/survey/static/src/js/survey_form.js @@ -7,6 +7,7 @@ var time = require('web.time'); var core = require('web.core'); var Dialog = require('web.Dialog'); var dom = require('web.dom'); +var utils = require('web.utils'); var _t = core._t; @@ -35,6 +36,12 @@ publicWidget.registry.SurveyFormWidget = publicWidget.Widget.extend({ self.options = self.$target.find('form').data(); self.readonly = self.options.readonly; self.selectedAnswers = self.options.selectedAnswers; + + // Add Survey cookie to retrieve the survey if you quit the page and restart the survey. + if (!utils.get_cookie('survey_' + self.options.surveyToken)) { + utils.set_cookie('survey_' + self.options.surveyToken, self.options.answerToken, 60*60*24); + } + // Init fields if (!self.options.isStartScreen && !self.readonly) { self._initTimer(); @@ -422,6 +429,7 @@ publicWidget.registry.SurveyFormWidget = publicWidget.Widget.extend({ var selectorsToFadeout = ['.o_survey_form_content']; if (options.isFinish) { selectorsToFadeout.push('.breadcrumb', '.o_survey_timer'); + utils.set_cookie('survey_' + self.options.surveyToken, '', -1); // delete cookie } self.$(selectorsToFadeout.join(',')).fadeOut(this.fadeInOutDelay, function () { resolveFadeOut();