/** * Load only subquestion specific screen only. * * @access public * @param int $surveyid * @param int $gid * @param int $qid * @return void */ public function _editsubquestion($surveyid, $gid, $qid) { $surveyid = sanitize_int($surveyid); $qid = sanitize_int($qid); $gid = sanitize_int($gid); $clang = $this->getController()->lang; // Get languages select on survey. $anslangs = Survey::model()->findByPk($surveyid)->additionalLanguages; $baselang = Survey::model()->findByPk($surveyid)->language; $resultrow = Questions::model()->findByPk(array('qid' => $qid, 'language' => $baselang))->attributes; $sQuestiontype = $resultrow['type']; $aQuestiontypeInfo = getQuestionTypeList($sQuestiontype, 'array'); $iScaleCount = $aQuestiontypeInfo[$sQuestiontype]['subquestions']; for ($iScale = 0; $iScale < $iScaleCount; $iScale++) { $subquestiondata = Questions::model()->findAllByAttributes(array('parent_qid' => $qid, 'language' => $baselang, 'scale_id' => $iScale)); if (empty($subquestiondata)) { //Questions::model()->insert(); $data = array('sid' => $surveyid, 'gid' => $gid, 'parent_qid' => $qid, 'title' => 'SQ001', 'question' => $clang->gT('Some example subquestion'), 'question_order' => 1, 'language' => $baselang, 'scale_id' => $iScale); Questions::model()->insertRecords($data); $subquestiondata = Questions::model()->findAllByAttributes(array('parent_qid' => $qid, 'language' => $baselang, 'scale_id' => $iScale)); } // Check that there are subquestions for every language supported by the survey foreach ($anslangs as $language) { foreach ($subquestiondata as $row) { $qrow = Questions::model()->count(' parent_qid = :qid AND language = :language AND qid = ' . $row->qid . ' AND scale_id = :iScale', array(':qid' => $qid, ':language' => $language, ':iScale' => $iScale)); // Means that no record for the language exists in the questions table if (empty($qrow)) { switchMSSQLIdentityInsert('questions', true); $question = new Questions(); $question->qid = $row->qid; $question->sid = $surveyid; $question->gid = $row->gid; $question->parent_qid = $qid; $question->title = $row->title; $question->question = $row->question; $question->question_order = $row->question_order; $question->language = $language; $question->scale_id = $iScale; $question->save(); /** //activerecord is not not new bugfix! Questions::model()->insert(array( 'qid' => $row->qid, 'sid' => $surveyid, 'gid' => $row->gid, 'parent_qid' => $qid, 'title' => $row->title, 'question' => $row->question, 'question_order' => $row->question_order, 'language' => $language, 'scale_id' => $iScale, )); */ switchMSSQLIdentityInsert('questions', false); } } } } array_unshift($anslangs, $baselang); // Delete the subquestions in languages not supported by the survey $criteria = new CDbCriteria(); $criteria->addColumnCondition(array('parent_qid' => $qid)); $criteria->addNotInCondition('language', $anslangs); Questions::model()->deleteAll($criteria); // Check sort order for subquestions $qresult = Questions::model()->findByAttributes(array('qid' => $qid, 'language' => $baselang)); if (!is_null($qresult)) { $qtype = $qresult->type; } if (!empty($_POST['ansaction'])) { // Check if any nulls exist. If they do, redo the sortorders $cacount = Questions::model()->count(array('parent_qid' => $qid, 'question_order' => null, 'language' => $baselang)); if ($cacount) { Answers::updateSortOrder($qid, Survey::model()->findByPk($surveyid)->language); } } Yii::app()->loadHelper('admin/htmleditor'); // Print Key Control JavaScript $result = Questions::model()->findAllBYAttributes(array('parent_qid' => $qid, 'language' => Survey::model()->findByPk($surveyid)->language), array('order' => 'question_order desc')); $aData['anscount'] = $anscount = count($result); $row = $result[0]->attributes; $aData['row'] = $row; $maxsortorder = $row['question_order'] + 1; /** * The following line decides if the assessment input fields are visible or not * for some question types the assessment values is set in the label set instead of the answers */ $qtypes = getQuestionTypeList('', 'array'); Yii::app()->loadHelper('surveytranslator'); $aData['scalecount'] = $scalecount = $qtypes[$qtype]['subquestions']; $sumresult1 = Survey::model()->with(array('languagesettings' => array('condition' => 'surveyls_language=language')))->together()->findByAttributes(array('sid' => $surveyid)); if ($sumresult1 == null) { $this->getController()->error('Invalid survey id'); } $surveyinfo = $sumresult1->attributes; $surveyinfo = array_merge($surveyinfo, $sumresult1->languagesettings[0]->attributes); $surveyinfo = array_map('flattenText', $surveyinfo); $aData['activated'] = $activated = $surveyinfo['active']; $aData['surveyid'] = $surveyid; $aData['gid'] = $gid; $aData['qid'] = $qid; $aData['anslangs'] = $anslangs; $aData['maxsortorder'] = $maxsortorder; foreach ($anslangs as $anslang) { for ($scale_id = 0; $scale_id < $scalecount; $scale_id++) { $criteria = new CDbCriteria(); $criteria->condition = 'parent_qid = :pqid AND language = :language AND scale_id = :scale_id'; $criteria->order = 'question_order, title ASC'; $criteria->params = array(':pqid' => $qid, ':language' => $anslang, ':scale_id' => $scale_id); $aData['results'][$anslang][$scale_id] = Questions::model()->findAll($criteria); } } $aViewUrls['subQuestion_view'][] = $aData; return $aViewUrls; }