/** * fixes the numbering of questions * This can happen if question 1 have subquestion code 1 and have question 11 in same survey and group (then same SGQA) * @param int $fixnumbering * @todo can call this function (no $_GET, but getParam) AND do it with Yii */ function fixNumbering($iQuestionID, $iSurveyID) { Yii::app()->loadHelper("database"); LimeExpressionManager::RevertUpgradeConditionsToRelevance($iSurveyID); //Fix a question id - requires renumbering a question $iQuestionID = (int) $iQuestionID; $iMaxQID = Question::model()->getMaxId('qid', true); // Always refresh as we insert new qid's $iNewQID = $iMaxQID + 1; // Not sure we can do this in MSSQL ? $sQuery = "UPDATE {{questions}} SET qid={$iNewQID} WHERE qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); // Update subquestions $sQuery = "UPDATE {{questions}} SET parent_qid={$iNewQID} WHERE parent_qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); //Update conditions.. firstly conditions FOR this question $sQuery = "UPDATE {{conditions}} SET qid={$iNewQID} WHERE qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); //Update default values $sQuery = "UPDATE {{defaultvalues}} SET qid={$iNewQID} WHERE qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); $sQuery = "UPDATE {{defaultvalues}} SET sqid={$iNewQID} WHERE sqid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); //Update quotas $sQuery = "UPDATE {{quota_members}} SET qid={$iNewQID} WHERE qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); //Update url params $sQuery = "UPDATE {{survey_url_parameters}} SET targetqid={$iNewQID} WHERE targetqid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); $sQuery = "UPDATE {{survey_url_parameters}} SET targetsqid={$iNewQID} WHERE targetsqid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); //Now conditions based upon this question $sQuery = "SELECT cqid, cfieldname FROM {{conditions}} WHERE cqid={$iQuestionID}"; $sResult = Yii::app()->db->createCommand($sQuery)->query(); foreach ($sResult->readAll() as $row) { $aSwitcher[] = array("cqid" => $row['cqid'], "cfieldname" => $row['cfieldname']); } if (isset($aSwitcher)) { foreach ($aSwitcher as $aSwitch) { $sQuery = "UPDATE {{conditions}}\n SET cqid={$iNewQID},\n cfieldname='" . str_replace("X" . $iQuestionID, "X" . $iNewQID, $aSwitch['cfieldname']) . "'\n WHERE cqid={$iQuestionID}"; $sResult = db_execute_assosc($sQuery); } } //Now question_attributes $sQuery = "UPDATE {{question_attributes}} SET qid={$iNewQID} WHERE qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); //Now answers $sQuery = "UPDATE {{answers}} SET qid={$iNewQID} WHERE qid={$iQuestionID}"; Yii::app()->db->createCommand($sQuery)->query(); LimeExpressionManager::UpgradeConditionsToRelevance($iSurveyID); }
/** * fixes the numbering of questions * @param <type> $fixnumbering */ function fixNumbering($fixnumbering, $iSurveyID) { Yii::app()->loadHelper("database"); LimeExpressionManager::RevertUpgradeConditionsToRelevance($iSurveyID); //Fix a question id - requires renumbering a question $oldqid = $fixnumbering; $query = "SELECT qid FROM {{questions}} ORDER BY qid DESC"; $result = dbSelectLimitAssoc($query, 1); foreach ($result->readAll() as $row) { $lastqid = $row['qid']; } $newqid = $lastqid + 1; $query = "UPDATE {{questions}} SET qid={$newqid} WHERE qid={$oldqid}"; $result = db_execute_assosc($query); // Update subquestions $query = "UPDATE {{questions}} SET parent_qid={$newqid} WHERE parent_qid={$oldqid}"; $result = db_execute_assosc($query); //Update conditions.. firstly conditions FOR this question $query = "UPDATE {{conditions}} SET qid={$newqid} WHERE qid={$oldqid}"; $result = db_execute_assosc($query); //Now conditions based upon this question $query = "SELECT cqid, cfieldname FROM {{conditions}} WHERE cqid={$oldqid}"; $result = dbExecuteAssoc($query); foreach ($result->readAll() as $row) { $switcher[] = array("cqid" => $row['cqid'], "cfieldname" => $row['cfieldname']); } if (isset($switcher)) { foreach ($switcher as $switch) { $query = "UPDATE {{conditions}}\n SET cqid={$newqid},\n cfieldname='" . str_replace("X" . $oldqid, "X" . $newqid, $switch['cfieldname']) . "'\n WHERE cqid={$oldqid}"; $result = db_execute_assosc($query); } } // TMSW Conditions->Relevance: (1) Call LEM->ConvertConditionsToRelevance()when done. (2) Should relevance for old conditions be removed first? //Now question_attributes $query = "UPDATE {{question_attributes}} SET qid={$newqid} WHERE qid={$oldqid}"; $result = db_execute_assosc($query); //Now answers $query = "UPDATE {{answers}} SET qid={$newqid} WHERE qid={$oldqid}"; $result = db_execute_assosc($query); LimeExpressionManager::UpgradeConditionsToRelevance($iSurveyID); }