예제 #1
0
 /**
  * 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;
 }