From bb2be1541ddffada017148bc259f1b5be5ce0756 Mon Sep 17 00:00:00 2001 From: Denis Chenu Date: Tue, 24 Jul 2018 10:45:49 +0200 Subject: [PATCH] Fixed issue #13901: Prefilling single choice prefill other and comment New feature : allow to use EM code for subquestions in prefilling Dev: Less for inside for, use LimeExpressionManager::getLEMqcode2sgqa Dev: remove unneeded part in getLEMqcode2sgqa (no need to set in all in one mode) --- .../helpers/expressions/em_manager_helper.php | 10 ++++--- application/helpers/frontend_helper.php | 30 +++++++++++-------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/application/helpers/expressions/em_manager_helper.php b/application/helpers/expressions/em_manager_helper.php index 228b97879db..07b56f89f87 100644 --- a/application/helpers/expressions/em_manager_helper.php +++ b/application/helpers/expressions/em_manager_helper.php @@ -840,14 +840,16 @@ public static function RevertUpgradeConditionsToRelevance($surveyId=NULL, $qid=N * Return array database name as key, LEM name as value * @example (['gender'] => '38612X10X145') * @param integer $iSurveyId + * @param boolean $initialize force initialisation of Survey * @return array **/ public static function getLEMqcode2sgqa($iSurveyId){ $LEM =& LimeExpressionManager::singleton(); - - $LEM->SetEMLanguage(Survey::model()->findByPk($iSurveyId)->language); - $LEM->SetSurveyId($iSurveyId); - $LEM->StartProcessingPage(true,true); + $LEM->SetSurveyId($iSurveyId); // This update session only if needed + if( !in_array(Yii::app()->session['LEMlang'],Survey::model()->findByPk($iSurveyId)->getAllLanguages()) ) { + $LEM->SetEMLanguage(Survey::model()->findByPk($iSurveyId)->language);// Reset language only if needed + } + $LEM->setVariableAndTokenMappingsForExpressionManager($iSurveyId); return $LEM->qcode2sgqa; } diff --git a/application/helpers/frontend_helper.php b/application/helpers/frontend_helper.php index 592b848edb0..8f6cbcf262c 100644 --- a/application/helpers/frontend_helper.php +++ b/application/helpers/frontend_helper.php @@ -869,19 +869,25 @@ function prefillFromCommandLine($surveyid) } else { $startingValues = $_SESSION['survey_'.$surveyid]['startingValues']; } - - if (isset($_GET)) { - - foreach ($_GET as $k=>$v) { - - if (!in_array($k, $reservedGetValues) && isset($_SESSION['survey_'.$surveyid]['fieldmap'][$k])) { - $startingValues[$k] = $v; - } else { - // Search question codes to use those for prefilling. - foreach ($_SESSION['survey_'.$surveyid]['fieldmap'] as $sgqa => $details) { - if ($details['title'] == $k) { - $startingValues[$sgqa] = $v; + if (Yii::app()->getRequest()->getRequestType()=='GET') { + $getValues = array_diff_key($_GET,array_combine($reservedGetValues, $reservedGetValues)); + if(!empty($getValues)) { + $qcode2sgqa = LimeExpressionManager::getLEMqcode2sgqa($surveyid); + foreach ($getValues as $k=>$v) { + if (isset($_SESSION['survey_'.$surveyid]['fieldmap'][$k])) { + // sXgXqa prefilling + $startingValues[$k] = $v; + } elseif( !empty($qcode2sgqa) && array_key_exists($k,$qcode2sgqa) ) { + // EM code prefilling + $startingValues[$qcode2sgqa[$k]] = $v; + /* Alternative + foreach ($_SESSION['survey_'.$surveyid]['fieldmap'] as $sgqa => $details) { + // Need Yii::import('application.helpers.viewHelper'); + if (viewHelper::getFieldCode($details,array('LEMcompat'=>true)) == $k) { + $startingValues[$sgqa] = $v; + } } + */ } } }