From 3d1da4c0054458ee4674e911242359c2988a3db5 Mon Sep 17 00:00:00 2001 From: Denis Chenu Date: Mon, 3 Apr 2017 15:18:51 +0200 Subject: [PATCH] Fixed issue #12249: This survey does not work with quota Dev: 2.63 release have issue with debug=2, else same fix than before + add warning log --- application/controllers/admin/quotas.php | 4 +++- application/models/Quota.php | 24 ++++++++++++++----- application/models/QuotaMember.php | 4 ++-- .../quotas/viewquotas_quota_members_item.php | 4 ++-- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/application/controllers/admin/quotas.php b/application/controllers/admin/quotas.php index 6b013d96523..9333a433cb0 100644 --- a/application/controllers/admin/quotas.php +++ b/application/controllers/admin/quotas.php @@ -217,10 +217,12 @@ function index($iSurveyId, $quickreport = false) foreach ($oQuota->quotaMembers as $oQuotaMember) { $aQuestionAnswers = self::getQuotaAnswers($oQuotaMember['qid'], $iSurveyId, $oQuota['id']); + $answerText=isset($aQuestionAnswers[$oQuotaMember['code']]) ? flattenText($aQuestionAnswers[$oQuotaMember['code']]['Display']) : null; $aQuotaItems[$oQuota['id']][] = array( 'oQuestion' => Question::model()->findByPk(array('qid' => $oQuotaMember['qid'], 'language' => $oSurvey->language)), - 'answer_title' => flattenText($aQuestionAnswers[$oQuotaMember['code']]['Display']), + 'answer_title' => $answerText, 'oQuotaMember'=>$oQuotaMember, + 'valid'=>isset($answerText), ); } diff --git a/application/models/Quota.php b/application/models/Quota.php index 7675d4ceaf8..3a9dc1a49bd 100644 --- a/application/models/Quota.php +++ b/application/models/Quota.php @@ -159,16 +159,28 @@ public function getMainLanguagesetting(){ } public function getCompleteCount(){ - if(!tableExists("survey_{$this->sid}")) - return; - - if (count($this->quotaMembers) > 0) - { + if(!tableExists("survey_{$this->sid}")) { + return; + } + /* Must control if column name exist (@todo : move this to QuotaMember::model(), even with deactivated survey*/ + $aExistingColumnName=SurveyDynamic::model($this->sid)->getTableSchema()->getColumnNames(); + if (count($this->quotaMembers) > 0) { // Keep a list of fields for easy reference $aQuotaColumns = array(); foreach ($this->quotaMembers as $member) { - $aQuotaColumns[$member->memberInfo['fieldname']][] = $member->memberInfo['value']; + if(!in_array($member->memberInfo['fieldname'],$aExistingColumnName)) { + \Yii::log( + sprintf( + "Invalid quota member %s", + $member->memberInfo['fieldname'] + ), + 'warning', + 'application.model.Quota' + ); + return; + } + $aQuotaColumns[$member->memberInfo['fieldname']][] = $member->memberInfo['value']; } $oCriteria = new CDbCriteria; diff --git a/application/models/QuotaMember.php b/application/models/QuotaMember.php index 13f8a4012f9..a32bbdd9afb 100644 --- a/application/models/QuotaMember.php +++ b/application/models/QuotaMember.php @@ -72,8 +72,8 @@ public function primaryKey() public function getMemberInfo() { - $sFieldName = "0"; - $sValue = ""; + $sFieldName = null; + $sValue = null; switch($this->question->type) { case "L": diff --git a/application/views/admin/quotas/viewquotas_quota_members_item.php b/application/views/admin/quotas/viewquotas_quota_members_item.php index 87eef6534e2..4adbf603c50 100644 --- a/application/views/admin/quotas/viewquotas_quota_members_item.php +++ b/application/views/admin/quotas/viewquotas_quota_members_item.php @@ -8,7 +8,7 @@ /* @var Question $oQuestion */ $oQuestion = $data['oQuestion']; ?> - +"> title?> @@ -24,4 +24,4 @@ )); ?> - +