2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00
Files
CATI_Tool/include/limesurvey/admin/remotecontrol/lsrc.server.php

1216 lines
38 KiB
PHP

<?php
/*
* LimeSurvey
* Copyright (C) 2007 The LimeSurvey Project Team / Carsten Schmitz
* All rights reserved.
* License: GNU/GPL License v2 or later, see LICENSE.php
* LimeSurvey is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*
* $Id: lsrc.server.php 11664 2011-12-16 05:19:42Z tmswhite $
*
*/
// include the lsrc.config.php
include_once("lsrc.config.php");
// functions helping lsrcService to do some things with Limesurvey (import, activation, checks)
include("lsrc.helper.php");
// translation Object
require_once($rootdir.'/classes/core/language.php');
$clang = new limesurvey_lang($defaultlang);
// to generate statistics
include_once($rootdir."/classes/core/sanitize.php");
include_once($homedir.'/statistics_function.php');
/**
* if ?wsdl is set, generate wsdl with correct uri and send it back to whoever requesting
*/
if(isset($_GET['wsdl']))
{
if($lsrcOverSSL)
$http = "https://";
else
$http = "http://";
header('Content-type: text/wsdl');
header('Content-Disposition: attachment; filename=lsrc.wsdl');
$wsdlString = file_get_contents("lsrc_orig.wsdl");
$wsdlString = str_replace("{lsrclocation}",$http.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'],$wsdlString);
file_put_contents("lsrc.wsdl",$wsdlString);
}
//we initiate a SoapServer Objekt
if($useCert && $sslCert!=''){
/**
* TODO: no documentation in PHP manual... no doc here... Can't tell you what to do in order to get Communication working with fixed Certificates
* Can't even say, which certificates, however it says in the docu that this should be a .pem RSA encoded file with .key and .crt together.
*
*/
$context = array(
'ssl'=> array(
'verify_peer' => false,
'allow_self_signed' => true,
'local_cert' => $sslCert,
'passphrase' => 'hisuser',
'capture_peer_cert' => true
)
);
$stream_context = stream_context_create($context);
$server = new SoapServer($wsdl, array('soap_version' => SOAP_1_1,
'stream_context' => $stream_context));
}
else{
$server = new SoapServer($wsdl, array('soap_version' => SOAP_1_1));
}
/**
* adds the functions to the SoapServer Object,
*
* the sChangeSurvey function should be commented out for productive Use
*/
//$server->addFunction("sChangeSurvey");
$server->addFunction("sDeleteSurvey");
$server->addFunction("sActivateSurvey");
$server->addFunction("sCreateSurvey");
$server->addFunction("sInsertToken");
$server->addFunction("sTokenReturn");
$server->addFunction("sInsertParticipants");
$server->addFunction("sImportGroup");
$server->addFunction("sAvailableModules");
$server->addFunction("sImportQuestion");
$server->addFunction("sImportMatrix");
$server->addFunction("sImportFreetext");
$server->addFunction("sSendEmail");
$server->addFunction("sGetFieldmap");
$server->addFunction("fSendStatistic");
// handle the soap request!
if($enableLsrc===true)
{
$server->handle();
}
/**
*
* Function to change tables in Limesurvey Database, this is too sensitive for productive use, but useful for development and testing
* @param $sUser
* @param $sPass
* @param $table
* @param $key
* @param $value
* @param $where
* @param $mode
* @return unknown_type
*/
function sChangeSurvey($sUser, $sPass, $table, $key, $value, $where, $mode='0')
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
// check for appropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
//check for Surveyowner. Only owners and superadmins can change and activate surveys
if(!$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to change Databasetables");
exit;
}
return $lsrcHelper->changeTable($table, $key, $value, $where, $mode);
}
/**
*
* Function to send reminder, invitation or custom mails to participants of a specific survey
* @param $sUser
* @param $sPass
* @param $iVid
* @param $type
* @param $maxLsrcEmails
* @param $subject
* @param $emailText
* @return unknown_type
*/
function sSendEmail($sUser, $sPass, $iVid, $type, $maxLsrcEmails='', $subject='', $emailText='')
{
global $sitename, $siteadminemail;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
// wenn maxmails ber den lsrc gegeben wird das nurtzen, ansonsten die default werte aus der config.php
if($maxLsrcEmails!='')
$maxemails = $maxLsrcEmails;
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
// Check if all mandatory parameters are present, else abort...
if(!is_int($iVid) || $iVid==0 || $type=='')
{
throw new SoapFault("Server: ", "Mandatory Parameters missing");
exit;
}
if($type=='custom' && $subject!='' && $emailText!='')
{
//GET SURVEY DETAILS not working here... don't know why...
//$thissurvey=getSurveyInfo($iVid);
$from = $siteadminemail;
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", Admin Email: $from ; survey: $iVid ; dump: ".print_r($thissurvey)."");
$emquery = "SELECT firstname, lastname, email, token, tid, language";
//if ($ctfieldcount > 7) {$emquery .= ", attribute_1, attribute_2";}
$emquery .= " FROM ".db_table_name("tokens_{$iVid}")." WHERE email != '' ";
if (isset($tokenid)) {$emquery .= " and tid='{$tokenid}'";}
$tokenoutput .= "\n\n<!-- emquery: $emquery -->\n\n";
//$emresult = db_select_limit_assoc($emquery,$maxemails);
$emresult = db_execute_assoc($emquery);
$emcount = $emresult->RecordCount();
if ($emcount > 0)
{
$mailsSend = 0;
while ($emrow = $emresult->FetchRow())
{
if (SendEmailMessage($emailText, $subject, $emrow['email'] , $from, $sitename, $ishtml=false, getBounceEmail($iVid)))
{
$mailsSend++;
}
else
{
//$tokenoutput .= ReplaceFields($clang->gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) failed. Error Message:")." ".$maildebug."<br />", $fieldsarray);
if($n==1)
$failedAddresses .= ",".$emrow['email'];
else
{
$failedAddresses = $emrow['email'];
$n=1;
}
}
}
}
else
{
return "No Mails to send";
}
// if ($ctcount > $emcount)
// {
// $lefttosend = $ctcount-$maxemails;
//
// }else{$lefttosend = 0;}
// if($maxemails>0)
// {
// $returnValue = "".$mailsSend." Mails send. ".$lefttosend." Mails left to send";
// if(isset($failedAddresses))
// $returnValue .= "\nCould not send to: ".$failedAddresses;
// return $returnValue;
// }
if(isset($mailsSend))
{
$returnValue = "".$mailsSend." Mails send. ";
if(isset($failedAddresses))
$returnValue .= "\nCould not send to: ".$failedAddresses;
return $returnValue;
}
}
if($type=='invite' || $type=='remind')
{
$emailSenderReturn = $lsrcHelper->emailSender($iVid, $type, $maxLsrcEmails);
return $emailSenderReturn;
}
else
{
throw new SoapFault("Type: ", "Wrong send Type given. Possible types are: custom, invite or remind");
exit;
}
}
/**
*
* Function to activate a survey in the database and change some Values (starttime, endtime. Required parameters are:
* @param $sUser
* @param $sPass
* @param $iVid
* @param $dStart
* @param $dEnd
* @return unknown_type
*/
function sActivateSurvey($sUser, $sPass, $iVid, $dStart, $dEnd)
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
// check for apropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
// Check if all mandatory parameters are present, else abort...
if(!is_int($iVid) || $iVid==0)
{
throw new SoapFault("Server: ", "Mandatory Parameters missing");
exit;
}
// Check if the survey to create already exists. If not, abort with Fault.
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey you want to activate does not exists");
exit;
}
//check for Surveyowner. Only owners and superadmins can change and activate surveys
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to change Surveys from other people");
exit;
}
$activateResult = $lsrcHelper->activateSurvey($iVid);
if($activateResult!=true)
{
throw new SoapFault("Server: ", "Import went wrong. Check lsrc.log.");
exit;
}
if($dStart!='' && substr($dStart,0,10)!='1980-01-01')
{
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", CHANGE start ");
$lsrcHelper->changeTable('surveys','startdate',$dStart,'sid='.$iVid);
}
if($dEnd!='' && substr($dEnd,0,10)!='1980-01-01')
{
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", CHANGE end ");
$lsrcHelper->changeTable('surveys','expires',$dEnd,'sid='.$iVid);
}
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", aktivierung OK ");
return $iVid;
}
/**
*
* Function to import a survey into the database and change some Values. Required parameters are:
* @param $sUser
* @param $sPass
* @param $iVid
* @param $sVtit
* @param $sVbes
* @param $sVwel
* @param $sMail
* @param $sName
* @param $sUrl
* @param $sUbes
* @param $sVtyp
* @param $autoRd
* @return unknown_type
*/
function sCreateSurvey($sUser, $sPass, $iVid, $sVtit, $sVbes, $sVwel, $sVend, $sMail, $sName, $sUrl, $sUbes, $sVtyp, $autoRd='N' )
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",surveyid=$iVid START OK ");
if($sVwel=='')
{//if no welcometext is given, set this one
$sVwel = "Herzlich Willkommen zur Evaluation von \"".$sVtit."\"";
}
// if($sVend=='')
// {//if no endtext is given, set this one
// $sVend = "Vielen Dank für Ihre Teilnahme an der Umfrage!";
// }
if(!$lsrcHelper->checkUser($sUser, $sPass))
{// check for appropriate rights
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
if((!is_int($iVid) || $iVid==0) || $sVtit=='' || $sVbes=='')
{// Check if mandatory parameters are empty, if so-> abort
throw new SoapFault("Server: ", "Mandatory Parameters missing");
exit;
}
if($lsrcHelper->surveyExists($iVid))
{// Check if the survey to create already exists. If so, abort with Fault.
throw new SoapFault("Database: ", "Survey already exists");
exit;
}
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",vor import OK ");
$iNewSid = $lsrcHelper->importSurvey($iVid, $sVtyp);
if($iNewSid==NULL)
{
throw new SoapFault("Server: ", "Import went wrong somehow");
exit;
}
// if import of survey went ok it returns true, else nothing
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",surveyid=$iNewSid nach import OK ");
//get the optional data into db
if($sMail!='')
{
$lsrcHelper->changeTable("surveys", "adminemail", $sMail, "sid='$iNewSid'");
$lsrcHelper->changeTable("surveys", "bounce_email", $sMail, "sid='$iNewSid'");
}
if($sName!='')
$lsrcHelper->changeTable("surveys", "admin", $sName, "sid='$iNewSid'");
if($sUrl!='')
$lsrcHelper->changeTable("surveys_languagesettings", "surveyls_url", $sUrl, "surveyls_survey_id='$iNewSid'");
if($sUbes!='')
$lsrcHelper->changeTable("surveys_languagesettings", "surveyls_urldescription", $sUbes, "surveyls_survey_id='$iNewSid'");
if($autoRd=='Y')
$lsrcHelper->changeTable("surveys", "autoredirect", "Y", "sid='$iNewSid'");
if($sVtit!='')
$lsrcHelper->changeTable("surveys_languagesettings", "surveyls_title", $sVtit, "surveyls_survey_id='$iNewSid'");
if($sVbes!='')
$lsrcHelper->changeTable("surveys_languagesettings", "surveyls_description", $sVbes, "surveyls_survey_id='$iNewSid'");
if($sVwel!='')
$lsrcHelper->changeTable("surveys_languagesettings", "surveyls_welcometext", $sVwel, "surveyls_survey_id='$iNewSid'");
if($sVend!='')
$lsrcHelper->changeTable("surveys_languagesettings", "surveyls_endtext", $sVend, "surveyls_survey_id='$iNewSid'");
$lsrcHelper->changeTable("surveys", "datecreated", date("Y-m-d"), "sid='$iNewSid'");
return $iNewSid;
}//end of function sCreateSurvey
/**
*
* Function to insert Tokens to an existing Survey, makes it "closed"
* @param $sUser
* @param $sPass
* @param $iVid
* @param $sToken
* @return unknown_type
*/
function sInsertToken($sUser, $sPass, $iVid, $sToken)
{
global $connect ;
global $dbprefix ;
//$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
// check for apropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
// check if there is a $iVid, else abort
if(!isset($iVid) || $iVid=='' || $iVid==0 )
{
throw new SoapFault("Server: ", "No SurveyId given");
exit;
}
// check if the Survey we want to populate with tokens already exists, else -> Fault
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey does not exists");
exit;
}
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", ckecks ueberstanden ");
// check if the Token table already exists, if not, create it...
if(!db_tables_exist("{$dbprefix}tokens_".$iVid))
{
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", TOken Table existiert nicht ");
$createtokentable=
"tid int I NOTNULL AUTO PRIMARY,\n "
. "firstname C(40) ,\n "
. "lastname C(40) ,\n ";
//MSSQL needs special treatment because of some strangeness in ADODB
if ($databasetype == 'odbc_mssql' || $databasetype == 'odbtp' || $databasetype == 'mssql_n' || $databasetype == 'mssqlnative')
{
$createtokentable.= "email C(320) ,\n "
."emailstatus C(300) DEFAULT 'OK',\n ";
}
else
{
$createtokentable.= "email X(320) ,\n "
."emailstatus X(300) DEFAULT 'OK',\n ";
}
$createtokentable.= "token C(36) ,\n "
. "language C(25) ,\n "
. "sent C(17) DEFAULT 'N',\n "
. "remindersent C(17) DEFAULT 'N',\n "
. "remindercount int I DEFAULT 0,\n "
. "completed C(17) DEFAULT 'N',\n "
. "attribute_1 C(100) ,\n"
. "attribute_2 C(100) ,\n"
. "mpid I ";
$tabname = "{$dbprefix}tokens_{$iVid}"; # not using db_table_name as it quotes the table name (as does CreateTableSQL)
$taboptarray = array('mysql' => 'ENGINE='.$databasetabletype.' CHARACTER SET utf8 COLLATE utf8_unicode_ci',
'mysqli' => 'ENGINE='.$databasetabletype.' CHARACTER SET utf8 COLLATE utf8_unicode_ci');
$dict = NewDataDictionary($connect);
$sqlarray = $dict->CreateTableSQL($tabname, $createtokentable, $taboptarray);
$execresult=$dict->ExecuteSQLArray($sqlarray, false);
$createtokentableindex = $dict->CreateIndexSQL("{$tabname}_idx", $tabname, array('token'));
$dict->ExecuteSQLArray($createtokentableindex, false);
}
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", Token tabelle sollte erstellt sein ");
#################
//if the lsrcSeperator is not set, set the default seperator, a comma...
if($sLsrcSeparator=='')
{
$sLsrcSeparator = ",";
}
// prepare to fill the table lime_tokens_*
// this is sensitiv, if the Seperator is not the defined one, almost everything could happen, BE AWARE OF YOUR SEPERATOR!...
$asTokens = explode($sLsrcSeparator, $sToken);
$givenTokenCount = count($asTokens);
// write the tokens in the token_table
$insertedTokenCount=0;
foreach($asTokens as $value)
{
if($value!='')
{
$sInsertToken = "INSERT INTO {$dbprefix}tokens_".$iVid."
(token,language) VALUES ('".$value."' , '".$_SESSION['lang']."'); ";
if(!$connect->Execute($sInsertToken))
{
throw new SoapFault("Server: ", "Token could not be inserted");
exit;
}
else
{
++$insertedTokenCount;
}
}
}
return "".$givenTokenCount." Token given, ".$insertedTokenCount." Token inserted.";
} //end of function sInsertToken
/**
* The new one...
* * Function to insert Participant data while auto creating token if non is supported...
* @param $sUser
* @param $sPass
* @param $iVid
* @param $sParticipantData (FIRSTNAME;LASTNAME;EMAIL;LANG;TOKEN;VALIDFROM;VALIDTO;attrib1,attrib2,attrib3,attrib4,attrib5::)
* @return unknown_type
*/
function sInsertParticipants($sUser, $sPass, $iVid, $sParticipantData)
{
global $connect ;
global $dbprefix ;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
// check for appropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
// check if there is a $iVid, else abort
if(!isset($iVid) || $iVid=='' || $iVid==0 )
{
throw new SoapFault("Server: ", "No SurveyId given");
exit;
}
// check if the Survey we want to populate with data and tokens already exists, else -> Fault
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey does not exists");
exit;
}
return $lsrcHelper->insertParticipants($iVid, $sParticipantData);
//return "".$iCountParticipants."Datasets given, ".$iInsertedParticipants." rows inserted. ";
}
/**
*
* function to return unused Tokens as String, seperated by commas, to get the people who did not complete the Survey
* @param $sUser
* @param $sPass
* @param $iVid
* @return unknown_type
*/
function sTokenReturn($sUser, $sPass, $iVid)
{
global $connect ;
global $dbprefix ;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
// check for appropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
// check if there is a $iVid, else abort
if(!isset($iVid) || $iVid=='' || $iVid==0 )
{
throw new SoapFault("Server: ", "No SurveyId given");
exit;
}
// check if the Survey exists, else -> Fault
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey does not exists");
exit;
}
// check if the token table exists, else throw fault message
if(db_tables_exist($dbprefix."tokens_".$iVid))
{
// select all the tokens that did not complete the Survey
$query2select_token = "SELECT token from {$dbprefix}tokens_".$iVid." WHERE completed = 'N'; ";
$rs = db_execute_assoc($query2select_token);
if($rs->RecordCount()<1)
{
throw new SoapFault("Database: ", "No unused Tokens found");
exit;
}
$n=0;
while($row = $rs->FetchRow())
{
if($n == 0)
{
$sReturn = $row['token'];
}
else
{
$sReturn .= ",".$row['token'];
}
$n++;
}
// return Response: array([iVid],[return]) on the client side, you get this as an Array resp. list
// the keys in the array, containing the values, are named as defined in the wsdl under the response Message, in this case: array(iVid =>$iVid, return=>$sReturn)
return $sReturn;
exit;
}
else
{
throw new SoapFault("Database: ", "Token table for this Survey does not exists");
exit;
}
}//end of function sTokenReturn
/**
*
* function to import an exported group of questions into a survey
* @param $sUser
* @param $sPass
* @param $iVid
* @param $sMod
* @param $gName
* @param $gDesc
* @return unknown_type
*/
function sImportGroup($sUser, $sPass, $iVid, $sMod, $gName='', $gDesc='')
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or Password wrong");
exit;
}
//check for Surveyowner
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to change Surveys from other people");
exit;
}
if(!is_file($modDir.$sMod.".csv"))
{
throw new SoapFault("Server: ", "Survey Module $sMod does not exist");
exit;
}
$checkImport = $lsrcHelper->importGroup($iVid, $sMod);
if(is_array($checkImport))
{
if($gName!='')
$lsrcHelper->changeTable("groups", "group_name", $gName, "gid='".$checkImport['gid']."'");
if($gDesc!='')
$lsrcHelper->changeTable("groups", "description", $gDesc, "gid='".$checkImport['gid']."'");
return "Import OK";
}
else
{
throw new SoapFault("Server: ", $checkImport);
exit;
}
}
/**
*
* function to import a fixed question
* @param $sUser
* @param $sPass
* @param $iVid
* @param $sMod
* @param $mandatory
* @return unknown_type
*/
function sImportQuestion($sUser, $sPass, $iVid, $sMod, $mandatory='N')
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
// check for appropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
//check for Surveyowner
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to change Surveys from other people");
exit;
}
// Check if the file to import exists
if(!is_file($queDir.$sMod.".csv"))
{
throw new SoapFault("Server: ", "Survey Module $sMod does not exist");
exit;
}
//import the module
$lastId = $lsrcHelper->importQuestion($iVid,$sMod);
if(is_array($lastId))
{
// $lsrcHelper->changeTable("questions", "title", $qTitle, "qid='".$lastId['qid']."'");
// $lsrcHelper->changeTable("questions", "question", $qText, "qid='".$lastId['qid']."'");
// $lsrcHelper->changeTable("questions", "help", $qHelp, "qid='".$lastId['qid']."'");
$lsrcHelper->changeTable("questions", "mandatory", $mandatory, "qid='".$lastId['qid']."'");
return "OK";
}
else
{
throw new SoapFault("Server: ", $lastId);
exit;
}
}
/**
*
* function to import one freetext question and change it
* @param $sUser
* @param $sPass
* @param $iVid
* @param $qTitle
* @param $qText
* @param $qHelp
* @param $sMod
* @param $mandatory
* @return unknown_type
*/
function sImportFreetext($sUser, $sPass, $iVid, $qTitle, $qText, $qHelp, $sMod='Freitext', $mandatory='N')
{
/*
* this var maybe added later to constructor,
* to determine if a new group should be build for the question
* or if the question should be added to the last group in survey
*/
if($sMod=='')
$sMod='Freitext';
if($mandatory=='')
$mandatory='N';
$newGroup=0;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK ");
// check for appropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
//check for Surveyowner
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to change Surveys from other people");
exit;
}
// Check if the file to import exists
if(!is_file($queDir.$sMod.".csv"))
{
throw new SoapFault("Server: ", "Survey Module $sMod does not exist");
exit;
}
//import the module
$lastId = $lsrcHelper->importQuestion($iVid,$sMod,0);
if(is_array($lastId))
{
$lsrcHelper->changeTable("questions", "title", $qTitle, "qid='".$lastId['qid']."'");
$lsrcHelper->changeTable("questions", "question", $qText, "qid='".$lastId['qid']."'");
$lsrcHelper->changeTable("questions", "help", $qHelp, "qid='".$lastId['qid']."'");
$lsrcHelper->changeTable("questions", "mandatory", $mandatory, "qid='".$lastId['qid']."'");
return "OK";
}
else
{
throw new SoapFault("Server: ", $lastId);
exit;
}
}
/**
*
* function to import a five scale Matrix question and set 1 to n items
* @param $sUser
* @param $sPass
* @param $iVid
* @param $qTitle
* @param $qText
* @param $qHelp
* @param $sItems
* @param $sMod
* @param $mandatory
* @return unknown_type
*/
function sImportMatrix($sUser, $sPass, $iVid, $qTitle, $qText, $qHelp, $sItems, $sMod='Matrix5', $mandatory='N')
{
/*
* this var maybe added later to constructor,
* to determine if a new group should be build for the question
* or if the question should be added to the last group in survey
*/
if($sMod=='')
$sMod='Matrix5';
if($mandatory=='')
$mandatory='N';
$newGroup=0;
global $connect ;
global $dbprefix ;
//$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK");
// check for appropriate rights
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
//check for surveyOwner
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to change Surveys from other people");
exit;
}
// Check if the file to import exists
if(!is_file($queDir.$sMod.".csv"))
{
throw new SoapFault("Server: ", "Survey Module $sMod does not exist");
exit;
}
$lastId = $lsrcHelper->importQuestion($iVid,$sMod,$newGroup);
if(is_array($lastId))
{
$lsrcHelper->changeTable("questions", "title", $qTitle, "qid='".$lastId['qid']."'");
$lsrcHelper->changeTable("questions", "question", $qText, "qid='".$lastId['qid']."'");
$lsrcHelper->changeTable("questions", "help", $qHelp, "qid='".$lastId['qid']."'");
if($mandatory==''){$mandatory='N';}
$lsrcHelper->changeTable("questions", "mandatory", $mandatory, "qid='".$lastId['qid']."'");
$aItems = explode(",", $sItems);
$n=0;
foreach($aItems as $item)
{
++$n;
$lsrcHelper->changeTable("answers", "qid,code,answer,default_value,sortorder,language", "'".$lastId['qid']."', '$n','$item','N','$n','".GetBaseLanguageFromSurveyID($iVid)."' " , "", 1);
}
return "OK";
}
else
{
throw new SoapFault("Server: ", $lastId);
exit;
}
}
/**
*
* function to collect all available Modules and send them comma seperated to the client
* @param String $sUser
* @param String $sPass
* @param String $mode ("mod" or "core")
* @return commma seperated list of available Modules (groups)
*/
function sAvailableModules($sUser, $sPass, $mode='mod')
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",mode=$mode START OK ");
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
switch($mode){
case ('mod'):
$mDir = opendir($modDir);
$n=0;
while(false !== ($file = readdir($mDir)))
{
if(substr($file,-4,4)==".lss" || substr($file,-4,4)==".csv")
{
//$file = basename ($file, ".csv");
//$file = str_replace("mod_", "", $file);
if($n == 0)
{
$return = $file;
$n=1;
}
else
{
$return .= ",".$file;
}
}
}
return $return;
break;
case ('core'):
$cDir = opendir($coreDir);
$n=0;
while(false !== ($file = readdir($cDir)))
{
if(substr($file,-4,4)==".lss" || substr($file,-4,4)==".csv")
{
//$file = basename ($file, ".csv");
//$file = str_replace("mod_", "", $file);
if($n == 0)
{
$return = $file;
$n=1;
}
else
{
$return .= ",".$file;
}
}
}
return $return;
break;
case ('que'):
$cDir = opendir($queDir);
$n=0;
while(false !== ($file = readdir($cDir)))
{
if(substr($file,-4,4)==".lss" || substr($file,-4,4)==".csv")
{
//$file = basename ($file, ".csv");
//$file = str_replace("mod_", "", $file);
if($n == 0)
{
$return = $file;
$n=1;
}
else
{
$return .= ",".$file;
}
}
}
return $return;
break;
}
}
/**
*
* function to delete a survey
* @param unknown_type $sUser
* @param unknown_type $sPass
* @param unknown_type $iVid
*/
function sDeleteSurvey($sUser, $sPass, $iVid)
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",sid=$iVid START OK ");
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to delete Surveys from other people");
exit;
}
// check if the Survey exists, else -> Fault
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey $iVid does not exist");
exit;
}
if($lsrcHelper->deleteSurvey($iVid))
{
return "Survey $iVid deleted";
}
else
{
throw new SoapFault("Server: ", "Survey $iVid was not deleted");
exit;
}
}
/**
*
* Enter description here...
* @param $sUser Limesurvey user
* @param $sPass Password
* @param $iVid surveyid
* @param $email e-mail adress of the recipient
* @param $docType pdf, xls or html
* @param $graph with 1 it includes graphs in pdf files
* @return "OK" or SoapFault
*/
function fSendStatistic($sUser, $sPass, $iVid, $email, $docType='pdf', $graph='0')
{
global $connect ;
global $dbprefix ;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
// Check if all mandatory parameters are present, else abort...
if(!is_int($iVid) || $iVid==0 || $email=='')
{
throw new SoapFault("Server: ", "Mandatory Parameters missing");
exit;
}
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to send statistics from other peoples Surveys");
exit;
}
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey $iVid does not exists");
exit;
}
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",sid=$iVid email=$email doctype=$docType graph=$graph START OK ");
/**
* Build up the fields to generate statistics from
*/
$summarySql=" SELECT gid, lid, qid, type "
." FROM {$dbprefix}questions "
." WHERE sid=$surveyid ";
$summaryRs = $connect->Execute($summarySql);
$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",sid=$iVid OK ");
foreach($summaryRs as $field)
{
$myField = $surveyid."X".$field['gid']."X".$field['qid'];
// Multiple choice get special treatment
if ($field['type'] == "M" || $field['type'] == "P") {$myField = "M$myField";}
//numerical input will get special treatment (arihtmetic mean, standard derivation, ...)
if ($field['type'] == "N") {$myField = "N$myField";}
if ($field['type'] == "Q") {$myField = "Q$myField";}
// textfields get special treatment
if ($field['type'] == "S" || $field['type'] == "T" || $field['type'] == "U"){$myField = "T$myField";}
//statistics for Date questions are not implemented yet.
if ($field['type'] == "D") {$myField = "D$myField";}
if ($field['type'] == "F" || $field['type'] == "H")
{
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
//Get answers. We always use the answer code because the label might be too long elsewise
$query = "SELECT code, answer FROM ".db_table_name("answers")." WHERE qid='".$field['qid']."' AND language='{$language}' ORDER BY sortorder, answer";
$result = $connect->Execute($query) or safe_die ("Couldn't get answers!<br />$query<br />".$connect->ErrorMsg());
$counter2=0;
//check all the answers
while ($row=$result->FetchRow())
{
$myField = "$myField{$row[0]}";
}
//$myField = "{$surveyid}X{$flt[1]}X{$flt[0]}{$row[0]}[]";
}
$summary[]=$myField;
}
//$lsrcHelper->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",".print_r($summary)." ");
switch ($docType)
{
case 'pdf':
$tempFile = generate_statistics($iVid,$summary,'all',$graph,$docType,'F');
if($lsrcHelper->sendStatistic($iVid, $email, $tempFile))
{
unlink($tempFile);
return 'PDF send';
}
else
{
unlink($tempFile);
throw new SoapFault("Mail System", "Mail could not be send! Check LimeSurveys E-Mail Settings.");
exit;
}
break;
case 'xls':
$tempFile = generate_statistics($iVid,$summary,'all',0,$docType, 'F');
if($lsrcHelper->sendStatistic($iVid, $email, $tempFile))
{
unlink($tempFile);
return 'XLS send';
}
else
{
unlink($tempFile);
throw new SoapFault("Mail System", "Mail could not be send! Check LimeSurveys E-Mail Settings.");
exit;
}
break;
case 'html':
$html = generate_statistics($iVid,$summary,'all',0,$docType, 'F');
if($lsrcHelper->sendStatistic($iVid, $email, null, $html))
{
return 'HTML send';
}
else
{
throw new SoapFault("Mail System", "Mail could not be send! Check LimeSurveys E-Mail Settings.");
exit;
}
break;
}
}
/**
*
* This function pulls a CSV representation of the Field map
* @param $sUser
* @param $sPass
* @param $iVid
* @return unknown_type
*/
function sGetFieldmap($sUser, $sPass, $iVid)
{
include("lsrc.config.php");
$lsrcHelper = new lsrcHelper();
if(!$lsrcHelper->checkUser($sUser, $sPass))
{
throw new SoapFault("Authentication: ", "User or password wrong");
exit;
}
if($lsrcHelper->getSurveyOwner($iVid)!=$_SESSION['loginID'] && !$_SESSION['USER_RIGHT_SUPERADMIN']=='1')
{
throw new SoapFault("Authentication: ", "You have no right to get fieldmaps from other peoples Surveys");
exit;
}
if(!$lsrcHelper->surveyExists($iVid))
{
throw new SoapFault("Database: ", "Survey $iVid does not exists");
exit;
}
$returnCSV = "".$lsrcHelper->FieldMap2CSV($iVid);
return $returnCSV;
}
?>