From 1ffc15712ad41d7252124410cf19659eb3d653e8 Mon Sep 17 00:00:00 2001 From: Denis Chenu Date: Wed, 10 Feb 2016 15:49:54 +0100 Subject: [PATCH] Dev: fixed issue : broken index for admin for pgsql Dev: Cast value when delete global setting fo IN condition : pgsql need it. Unsure for mssql --- application/controllers/admin/index.php | 18 ++++++++++++------ application/models/Survey.php | 18 ++++++++++++++++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/application/controllers/admin/index.php b/application/controllers/admin/index.php index 9b4c422ce51..347577a7880 100644 --- a/application/controllers/admin/index.php +++ b/application/controllers/admin/index.php @@ -52,7 +52,7 @@ public function run() $setting_entry = 'last_question_sid_'.Yii::app()->user->getId(); $lastquestionsid = getGlobalSetting($setting_entry); - if( $lastquestion != null && $lastquestiongroup != null && $survey) + if( $lastquestion && $lastquestiongroup && $lastquestionsid) { $baselang = $survey->language; $aData['showLastQuestion'] = true; @@ -60,14 +60,20 @@ public function run() $gid = $lastquestiongroup; $sid = $lastquestionsid; $qrrow = Question::model()->findByAttributes(array('qid' => $qid, 'gid' => $gid, 'sid' => $sid, 'language' => $baselang)); + if($qrrow) + { + $aData['last_question_name'] = $qrrow['title']; + if($qrrow['question']) + { + $aData['last_question_name'] .= ' : '.$qrrow['question']; + } - $aData['last_question_name'] = $qrrow['title']; - if($qrrow['question']) + $aData['last_question_link'] = $this->getController()->createUrl("admin/questions/sa/view/surveyid/$iSurveyID/gid/$gid/qid/$qid"); + } + else { - $aData['last_question_name'] .= ' : '.$qrrow['question']; + $aData['showLastQuestion'] = false; } - - $aData['last_question_link'] = $this->getController()->createUrl("admin/questions/sa/view/surveyid/$iSurveyID/gid/$gid/qid/$qid"); } else { diff --git a/application/models/Survey.php b/application/models/Survey.php index e91a62a3f0f..079562ccde6 100644 --- a/application/models/Survey.php +++ b/application/models/Survey.php @@ -495,13 +495,27 @@ public function deleteSurvey($iSurveyID, $recursive=true) $aGroupId=CHtml::listData(QuestionGroup::model()->findAll(array('select'=>'gid','condition'=>'sid=:sid','params'=>array(':sid'=>$iSurveyID))),'gid','gid'); $oCriteria = new CDbCriteria(); $oCriteria->compare('stg_name','last_question_gid_%',true,'AND',false); - $oCriteria->addInCondition('stg_value',$aGroupId); + if(Yii::app()->db->getDriverName() == 'pgsql' || Yii::app()->db->getDriverName() == 'mssql') // pgsql need casting, unsure for mssql, but cast as int is OK + { + $oCriteria->addInCondition('CAST(stg_value as '.App()->db->schema->getColumnType("integer").')',$aGroupId); + } + else //mysql App()->db->schema->getColumnType("integer") give int(11) + { + $oCriteria->addInCondition('stg_value',$aGroupId); + } SettingGlobal::model()->deleteAll($oCriteria); // All Question id from this survey for ALL users $aQuestionId=CHtml::listData(Question::model()->findAll(array('select'=>'qid','condition'=>'sid=:sid','params'=>array(':sid'=>$iSurveyID))),'qid','qid'); $oCriteria = new CDbCriteria(); $oCriteria->compare('stg_name','last_question_%',true,'OR',false); - $oCriteria->addInCondition('stg_value',$aQuestionId); + if(Yii::app()->db->getDriverName() == 'pgsql' || Yii::app()->db->getDriverName() == 'mssql') + { + $oCriteria->addInCondition('CAST(stg_value as '.App()->db->schema->getColumnType("integer").')',$aQuestionId); + } + else + { + $oCriteria->addInCondition('stg_value',$aQuestionId); + } SettingGlobal::model()->deleteAll($oCriteria); $oResult = Question::model()->findAllByAttributes(array('sid' => $iSurveyID));