Пример #1
0
 /**
  * Function responsible to import a question.
  *
  * @access public
  * @return void
  */
 public function import()
 {
     $action = returnGlobal('action');
     $surveyid = returnGlobal('sid');
     $gid = returnGlobal('gid');
     $clang = $this->getController()->lang;
     $aViewUrls = array();
     $aData['display']['menu_bars']['surveysummary'] = 'viewquestion';
     $aData['display']['menu_bars']['gid_action'] = 'viewgroup';
     if ($action == 'importquestion') {
         $sFullFilepath = Yii::app()->getConfig('tempdir') . DIRECTORY_SEPARATOR . $_FILES['the_file']['name'];
         $aPathInfo = pathinfo($sFullFilepath);
         $sExtension = $aPathInfo['extension'];
         if (!@move_uploaded_file($_FILES['the_file']['tmp_name'], $sFullFilepath)) {
             $fatalerror = sprintf($clang->gT("An error occurred uploading your file. This may be caused by incorrect permissions in your %s folder."), Yii::app()->getConfig('tempdir'));
         }
         // validate that we have a SID and GID
         if (!$surveyid) {
             $fatalerror .= $clang->gT("No SID (Survey) has been provided. Cannot import question.");
         }
         if (!$gid) {
             $fatalerror .= $clang->gT("No GID (Group) has been provided. Cannot import question");
         }
         if (isset($fatalerror)) {
             unlink($sFullFilepath);
             $this->getController()->error($fatalerror);
         }
         // IF WE GOT THIS FAR, THEN THE FILE HAS BEEN UPLOADED SUCCESFULLY
         Yii::app()->loadHelper('admin/import');
         if (strtolower($sExtension) == 'csv') {
             $aImportResults = CSVImportQuestion($sFullFilepath, $surveyid, $gid);
         } elseif (strtolower($sExtension) == 'lsq') {
             $aImportResults = XMLImportQuestion($sFullFilepath, $surveyid, $gid);
         } else {
             $this->getController()->error($clang->gT('Unknown file extension'));
         }
         fixLanguageConsistency($surveyid);
         if (isset($aImportResults['fatalerror'])) {
             unlink($sFullFilepath);
             $this->getController()->error($aImportResults['fatalerror']);
         }
         unlink($sFullFilepath);
         $aData['aImportResults'] = $aImportResults;
         $aData['surveyid'] = $surveyid;
         $aData['gid'] = $gid;
         $aData['sExtension'] = $sExtension;
         $aViewUrls[] = 'import_view';
     }
     $this->_renderWrappedTemplate('survey/Question', $aViewUrls, $aData);
 }
Пример #2
0
 /**
  * RPC Routine to import a question - imports lsq,csv.
  *
  * @access public
  * @param string $sSessionKey
  * @param int $iSurveyID The id of the survey that the question will belong
  * @param int $iGroupID The id of the group that the question will belong
  * @param string $sImportData String containing the BASE 64 encoded data of a lsg,csv
  * @param string $sImportDataType  lsq,csv
  * @param string $sMandatory Optional Mandatory question option (default to No)
  * @param string $sNewQuestionTitle  Optional new title for the question
  * @param string $sNewqQuestion An optional new question
  * @param string $sNewQuestionHelp An optional new question help text
  * @return array|integer iQuestionID  - ID of the new question - Or status
  */
 public function import_question($sSessionKey, $iSurveyID, $iGroupID, $sImportData, $sImportDataType, $sMandatory = 'N', $sNewQuestionTitle = NULL, $sNewqQuestion = NULL, $sNewQuestionHelp = NULL)
 {
     if ($this->_checkSessionKey($sSessionKey)) {
         $oSurvey = Survey::model()->findByPk($iSurveyID);
         if (!isset($oSurvey)) {
             return array('status' => 'Error: Invalid survey ID');
         }
         if (Permission::model()->hasSurveyPermission($iSurveyID, 'survey', 'update')) {
             if ($oSurvey->getAttribute('active') == 'Y') {
                 return array('status' => 'Error:Survey is Active and not editable');
             }
             $oGroup = QuestionGroup::model()->findByAttributes(array('gid' => $iGroupID));
             if (!isset($oGroup)) {
                 return array('status' => 'Error: Invalid group ID');
             }
             $sGroupSurveyID = $oGroup['sid'];
             if ($sGroupSurveyID != $iSurveyID) {
                 return array('status' => 'Error: Missmatch in surveyid and groupid');
             }
             if (!in_array($sImportDataType, array('csv', 'lsq'))) {
                 return array('status' => 'Invalid extension');
             }
             libxml_use_internal_errors(true);
             Yii::app()->loadHelper('admin/import');
             // First save the data to a temporary file
             $sFullFilePath = Yii::app()->getConfig('tempdir') . DIRECTORY_SEPARATOR . randomChars(40) . '.' . $sImportDataType;
             file_put_contents($sFullFilePath, base64_decode(chunk_split($sImportData)));
             if (strtolower($sImportDataType) == 'lsq') {
                 $sXMLdata = file_get_contents($sFullFilePath);
                 $xml = @simplexml_load_string($sXMLdata, 'SimpleXMLElement', LIBXML_NONET);
                 if (!$xml) {
                     unlink($sFullFilePath);
                     return array('status' => 'Error: Invalid LimeSurvey question structure XML ');
                 }
                 $aImportResults = XMLImportQuestion($sFullFilePath, $iSurveyID, $iGroupID);
             } else {
                 return array('status' => 'Really Invalid extension');
             }
             //just for symmetry!
             unlink($sFullFilePath);
             if (isset($aImportResults['fatalerror'])) {
                 return array('status' => 'Error: ' . $aImportResults['fatalerror']);
             } else {
                 fixLanguageConsistency($iSurveyID);
                 $iNewqid = $aImportResults['newqid'];
                 $oQuestion = Question::model()->findByAttributes(array('sid' => $iSurveyID, 'gid' => $iGroupID, 'qid' => $iNewqid));
                 if ($sNewQuestionTitle != NULL) {
                     $oQuestion->setAttribute('title', $sNewQuestionTitle);
                 }
                 if ($sNewqQuestion != '') {
                     $oQuestion->setAttribute('question', $sNewqQuestion);
                 }
                 if ($sNewQuestionHelp != '') {
                     $oQuestion->setAttribute('help', $sNewQuestionHelp);
                 }
                 if (in_array($sMandatory, array('Y', 'N'))) {
                     $oQuestion->setAttribute('mandatory', $sMandatory);
                 } else {
                     $oQuestion->setAttribute('mandatory', 'N');
                 }
                 try {
                     $oQuestion->save();
                 } catch (Exception $e) {
                     // no need to throw exception
                 }
                 return (int) $aImportResults['newqid'];
             }
         } else {
             return array('status' => 'No permission');
         }
     } else {
         return array('status' => 'Invalid session key');
     }
 }
Пример #3
0
 /**
  * Function responsible to import a question.
  *
  * @access public
  * @return void
  */
 public function import()
 {
     $action = returnGlobal('action');
     $surveyid = $iSurveyID = returnGlobal('sid');
     $gid = returnGlobal('gid');
     $aViewUrls = array();
     $aData['display']['menu_bars']['surveysummary'] = 'viewquestion';
     $aData['display']['menu_bars']['gid_action'] = 'viewgroup';
     if ($action == 'importquestion') {
         $sFullFilepath = Yii::app()->getConfig('tempdir') . DIRECTORY_SEPARATOR . randomChars(20);
         $sExtension = pathinfo($_FILES['the_file']['name'], PATHINFO_EXTENSION);
         if (!@move_uploaded_file($_FILES['the_file']['tmp_name'], $sFullFilepath)) {
             $fatalerror = sprintf(gT("An error occurred uploading your file. This may be caused by incorrect permissions in your %s folder."), Yii::app()->getConfig('tempdir'));
         }
         // validate that we have a SID and GID
         if (!$surveyid) {
             $fatalerror .= gT("No SID (Survey) has been provided. Cannot import question.");
         }
         if (!$gid) {
             $fatalerror .= gT("No GID (Group) has been provided. Cannot import question");
         }
         if (isset($fatalerror)) {
             unlink($sFullFilepath);
             $message = $fatalerror;
             $message .= '<p>
                             <a class="btn btn-default btn-lg"
                                href="' . $this->getController()->createUrl('admin/survey/sa/listquestions/surveyid/') . '/' . $surveyid . '">' . gT("Return to question list") . '</a></p>';
             $this->_renderWrappedTemplate('super', 'messagebox', array('title' => gT('Error'), 'message' => $message));
             die;
         }
         // IF WE GOT THIS FAR, THEN THE FILE HAS BEEN UPLOADED SUCCESFULLY
         Yii::app()->loadHelper('admin/import');
         if (strtolower($sExtension) == 'lsq') {
             $aImportResults = XMLImportQuestion($sFullFilepath, $surveyid, $gid);
         } else {
             $this->getController()->error(gT('Unknown file extension'));
         }
         fixLanguageConsistency($surveyid);
         if (isset($aImportResults['fatalerror'])) {
             //echo htmlentities($aImportResults['fatalerror']); die();
             $message = $aImportResults['fatalerror'];
             $message .= '<p>
                             <a class="btn btn-default btn-lg"
                                href="' . $this->getController()->createUrl('admin/survey/sa/listquestions/surveyid/') . '/' . $surveyid . '">' . gT("Return to question list") . '</a></p>';
             $this->_renderWrappedTemplate('super', 'messagebox', array('title' => gT('Error'), 'message' => $message));
             die;
         }
         unlink($sFullFilepath);
         $aData['aImportResults'] = $aImportResults;
         $aData['surveyid'] = $surveyid;
         $aData['gid'] = $gid;
         $aData['sExtension'] = $sExtension;
         $aViewUrls[] = 'import_view';
     }
     /////
     $aData['sidemenu']['state'] = false;
     $aData['surveyid'] = $iSurveyID;
     $surveyinfo = Survey::model()->findByPk($iSurveyID)->surveyinfo;
     $aData['title_bar']['title'] = $surveyinfo['surveyls_title'] . "(" . gT("ID") . ":" . $iSurveyID . ")";
     $this->_renderWrappedTemplate('survey/Question', $aViewUrls, $aData);
 }
Пример #4
0
    $postgid = returnglobal('gid');
}
if (isset($fatalerror)) {
    $importquestion .= "<div class='warningheader'>" . $clang->gT("Error") . "</div><br />\n";
    $importquestion .= $fatalerror . "<br /><br />\n";
    $importquestion .= "<input type='submit' value='" . $clang->gT("Main Admin Screen") . "' onclick=\"window.open('{$scriptname}', '_self')\" /><br /><br />\n";
    $importquestion .= "</div>\n";
    unlink($sFullFilepath);
    return;
}
// IF WE GOT THIS FAR, THEN THE FILE HAS BEEN UPLOADED SUCCESFULLY
$importquestion .= "<div class='successheader'>" . $clang->gT("Success") . "</div>&nbsp;<br />\n" . $clang->gT("File upload succeeded.") . "<br /><br />\n" . $clang->gT("Reading file..") . "<br /><br />\n";
if (strtolower($sExtension) == 'csv') {
    $aImportResults = CSVImportQuestion($sFullFilepath, $surveyid, $gid);
} elseif (strtolower($sExtension) == 'lsq') {
    $aImportResults = XMLImportQuestion($sFullFilepath, $surveyid, $gid);
} else {
    die('Unknown file extension');
}
FixLanguageConsistency($surveyid);
if (isset($aImportResults['fatalerror'])) {
    $importquestion .= "<div class='warningheader'>" . $clang->gT("Error") . "</div><br />\n";
    $importquestion .= $aImportResults['fatalerror'] . "<br /><br />\n";
    $importquestion .= "<input type='submit' value='" . $clang->gT("Main Admin Screen") . "' onclick=\"window.open('{$scriptname}', '_self')\" />\n";
    $importquestion .= "</div>\n";
    unlink($sFullFilepath);
    return;
}
$importquestion .= "<div class='successheader'>" . $clang->gT("Success") . "</div><br />\n" . "<strong><u>" . $clang->gT("Question import summary") . "</u></strong><br />\n" . "<ul style=\"text-align:left;\">\n" . "\t<li>" . $clang->gT("Questions") . ": " . $aImportResults['questions'] . "</li>\n" . "\t<li>" . $clang->gT("Subquestions") . ": " . $aImportResults['subquestions'] . "</li>\n" . "\t<li>" . $clang->gT("Answers") . ": " . $aImportResults['answers'] . "</li>\n";
if (strtolower($sExtension) == 'csv') {
    $importquestion .= "\t<li>" . $clang->gT("Label sets") . ": " . $aImportResults['labelsets'] . " (" . $aImportResults['labels'] . ")</li>\n";