1) You must use the SGQ, not the question code to identify the questions. It is the column name in the database.
2) Sub-questions are identified by their code (also in the column name). So, a sub-question identifier might look like:
3) Answers are identified by their codes. So, if your codes are simple numerics, yes, otherwise they would be something like "A1".
4) The token can be included in the $aResponseData array as seen below.
Here is a quick example using JSON-RPC that will set 3 rows of an array to 2, 5 and 3 respectively and then update the token as "Completed":
Code:
<?php
require_once 'jsonRPCClient.php';
define( 'LS_BASEURL', 'https://pathTo/limeSurvey/');
define( 'LS_USER', 'username' );
define( 'LS_PASSWORD', 'password' );
$iSurveyID = 11111;
$group1ID = 222;
$question1ID = 333;
$question1SGQ = $iSurveyID.'X'.$group1ID.'X'.$question1ID;
$token = 'asdf';
if(ctype_alnum($iSurveyID) && (strlen($iSurveyID) == 5 || strlen($iSurveyID) == 6)) { // Valid SID format
// Instantiate a new RPC client
$myJSONRPCClient = new jsonRPCClient( LS_BASEURL.'/index.php/admin/remotecontrol' );
// Get a session key
$sSessionKey= $myJSONRPCClient->get_session_key( LS_USER, LS_PASSWORD );
if(is_array($sSessionKey)) { // Invalid session
echo $sSessionKey['status'];
}
else if($sSessionKey) { // Valid session
// Get token properties (to check if already used)
$aTokenQueryProperties = array('token'=>$token);
$aTokenProperties = array('email', 'firstname', 'lastname', 'token', 'tid', 'completed');
$participantProperties = $myJSONRPCClient->get_participant_properties( $sSessionKey, $iSurveyID, $aTokenQueryProperties, $aTokenProperties);
if($participantProperties['completed'] != 'N') { // Token already used
echo 'This token has already been used!';
}
else { // Token not used
// Set a new response
$aResponseData = array('token'=>$token, $question1SGQ.'SQ001'=>2, $question1SGQ.'SQ002'=>5, $question1SGQ.'SQ003'=>3);
$newResponse = $myJSONRPCClient->add_response($sSessionKey, $iSurveyID, $aResponseData);
// Set the token as "used"
$aTokenData = array('completed'=>date('Y-m-d h:m'), 'usesleft'=>0);
$newTokenProperties = $myJSONRPCClient->set_participant_properties($sSessionKey, $iSurveyID, $aTokenQueryProperties, $aTokenData);
}
}
// Release the session key
$myJSONRPCClient->release_session_key( $sSessionKey );
}
else { // Invalid SID format
die( 'Invalid format!' );
}
?>