From f2acf6ae2286e59d0599a07e32d497385b614e94 Mon Sep 17 00:00:00 2001 From: Denis Chenu Date: Wed, 10 Feb 2016 14:39:18 +0100 Subject: [PATCH] Fixed issue #10337 : Delete survey don't delete all user's settings Dev: Delete in model : deleted for RC and plugin (if using model) Dev: Delete other user settings if linked with survey Dev: use compare and addInCondition : better quote value for PG and ms --- application/controllers/admin/surveyadmin.php | 10 -------- application/models/Survey.php | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/application/controllers/admin/surveyadmin.php b/application/controllers/admin/surveyadmin.php index 9050da71b35..74d0090ed73 100644 --- a/application/controllers/admin/surveyadmin.php +++ b/application/controllers/admin/surveyadmin.php @@ -918,16 +918,6 @@ public function delete($iSurveyID) $aData['issuperadmin'] = Permission::model()->hasGlobalPermission('superadmin','read'); $this->_deleteSurvey($iSurveyID); Yii::app()->session['flashmessage'] = gT("Survey deleted."); - - // We clean all the last visited - $lastLikeSurvey = 'last%'.$iSurveyID.'%'; - $lastQuestionGidUser = 'last_question_gid_'.Yii::app()->user->getId(); - $lastQuestionUser = 'last_question_'.Yii::app()->user->getId(); - SettingGlobal::model()->deleteAll( - "stg_name LIKE ':stg_name' OR stg_name = ':last_question_gid_user' OR stg_name = ':last_question_user' OR stg_value = ':stg_value'", - array(':stg_name' => $lastLikeSurvey, ':last_question_gid_user' => $lastQuestionGidUser, ':last_question_user' => $lastQuestionUser , ':stg_value' => $iSurveyID ) - ); - $this->getController()->redirect(array("admin/index")); } else diff --git a/application/models/Survey.php b/application/models/Survey.php index 61577d90813..574bd803186 100644 --- a/application/models/Survey.php +++ b/application/models/Survey.php @@ -481,6 +481,29 @@ public function deleteSurvey($iSurveyID, $recursive=true) Yii::app()->db->createCommand()->dropTable("{{tokens_".intval($iSurveyID)."}}"); } + /* Remove User/global settings part : need Question and QuestionGroup*/ + // Settings specific for this survey + $oCriteria = new CDbCriteria(); + $oCriteria->compare('stg_name','last_%',true,'AND',false); + $oCriteria->compare('stg_value',$iSurveyID,false,'AND'); + SettingGlobal::model()->deleteAll($oCriteria); + // Settings specific for this survey, 2nd part + $oCriteria = new CDbCriteria(); + $oCriteria->compare('stg_name','last_%'.$iSurveyID.'%',true,'AND',false); + SettingGlobal::model()->deleteAll($oCriteria); + // All Group id from this survey for ALL users + $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); + 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); + SettingGlobal::model()->deleteAll($oCriteria); + $oResult = Question::model()->findAllByAttributes(array('sid' => $iSurveyID)); foreach ($oResult as $aRow) {