Пример #1
0
 /**
  * RPC Routine to update a response in a given survey.
  * Routine supports only single response updates.
  * Response to update will be identified either by the response id, or the token if response id is missing.
  * Routine is only applicable for active surveys with alloweditaftercompletion = Y.
  *
  * @access public
  * @param string $sSessionKey Auth credentials
  * @param int $iSurveyID Id of the Survey to update response
  * @param struct $aResponseData The actual response
  * @return mixed TRUE(bool) on success. errormessage on error
  */
 public function update_response($sSessionKey, $iSurveyID, $aResponseData)
 {
     if (!$this->_checkSessionKey($sSessionKey)) {
         return 'Invalid session key';
     }
     $oSurvey = Survey::model()->findByPk($iSurveyID);
     if (is_null($oSurvey)) {
         return 'Error: Invalid survey ID';
     }
     if ($oSurvey->getAttribute('active') !== 'Y') {
         return 'Error: Survey is not active.';
     }
     if ($oSurvey->getAttribute('alloweditaftercompletion') !== 'Y') {
         return 'Error: Survey does not allow edit after completion.';
     }
     if (Permission::model()->hasSurveyPermission($iSurveyID, 'responses', 'update')) {
         if (!Yii::app()->db->schema->getTable('{{survey_' . $iSurveyID . '}}')) {
             return 'Error: No survey response table';
         }
         if (!isset($aResponseData['id']) && !isset($aResponseData['token'])) {
             return 'Error: Missing response identifier (id|token).';
         }
         SurveyDynamic::sid($iSurveyID);
         $oSurveyDynamic = new SurveyDynamic();
         if (isset($aResponseData['id'])) {
             $aResponses = $oSurveyDynamic->findAllByPk($aResponseData['id']);
         } else {
             $aResponses = $oSurveyDynamic->findAllByAttributes(array('token' => $aResponseData['token']));
         }
         if (empty($aResponses)) {
             return 'Error: No matching Response.';
         }
         if (count($aResponses) > 1) {
             return 'Error: More then one matching response, updateing multiple responses at once is not supported.';
         }
         $aBasicDestinationFields = $oSurveyDynamic->tableSchema->columnNames;
         $aInvalidFields = array_diff_key($aResponseData, array_flip($aBasicDestinationFields));
         if (count($aInvalidFields) > 0) {
             return 'Error: Invalid Column names supplied: ' . implode(', ', array_keys($aInvalidFields));
         }
         unset($aResponseData['token']);
         foreach ($aResponseData as $sAtributeName => $value) {
             $aResponses[0]->setAttribute($sAtributeName, $value);
         }
         $bResult = $aResponses[0]->save(true);
         if ($bResult) {
             return $bResult;
         } else {
             return 'Unable to edit response';
         }
     } else {
         return 'No permission';
     }
 }