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 @@ )); ?> - +