|
@@ -0,0 +1,384 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+
|
|
|
+use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField;
|
|
|
+use Chamilo\UserBundle\Entity\User;
|
|
|
+
|
|
|
+
|
|
|
+ * @package chamilo.webservices
|
|
|
+ */
|
|
|
+require_once '../inc/global.inc.php';
|
|
|
+
|
|
|
+
|
|
|
+error_reporting(E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR);
|
|
|
+
|
|
|
+$libpath = api_get_path(LIBRARY_PATH);
|
|
|
+
|
|
|
+$debug = true;
|
|
|
+
|
|
|
+define('WS_ERROR_SECRET_KEY', 1);
|
|
|
+define('WS_ERROR_NOT_FOUND_RESULT', 2);
|
|
|
+define('WS_ERROR_INVALID_INPUT', 3);
|
|
|
+define('WS_ERROR_SETTING', 4);
|
|
|
+
|
|
|
+
|
|
|
+ * @param string $code
|
|
|
+ * @return null|soap_fault
|
|
|
+ */
|
|
|
+function returnError($code)
|
|
|
+{
|
|
|
+ $fault = null;
|
|
|
+ switch ($code) {
|
|
|
+ case WS_ERROR_SECRET_KEY:
|
|
|
+ $fault = new soap_fault('Server', '', 'Secret key is not correct or params are not correctly set');
|
|
|
+ break;
|
|
|
+ case WS_ERROR_NOT_FOUND_RESULT:
|
|
|
+ $fault = new soap_fault('Server', '', 'No result was found for this query');
|
|
|
+ break;
|
|
|
+ case WS_ERROR_INVALID_INPUT:
|
|
|
+ $fault = new soap_fault('Server', '', 'The input variables are invalid o are not correctly set');
|
|
|
+ break;
|
|
|
+ case WS_ERROR_SETTING:
|
|
|
+ $fault = new soap_fault('Server', '', 'Please check the configuration for this webservice');
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return $fault;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+ * @param array $params
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+function WSHelperVerifyKey($params)
|
|
|
+{
|
|
|
+ global $_configuration, $debug;
|
|
|
+ if (is_array($params)) {
|
|
|
+ $secret_key = $params['secret_key'];
|
|
|
+ } else {
|
|
|
+ $secret_key = $params;
|
|
|
+ }
|
|
|
+
|
|
|
+ $check_ip = false;
|
|
|
+ $ip_matches = false;
|
|
|
+ $ip = trim($_SERVER['REMOTE_ADDR']);
|
|
|
+
|
|
|
+
|
|
|
+ if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
|
|
+ list($ip1) = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
|
|
|
+ $ip = trim($ip1);
|
|
|
+ }
|
|
|
+ if ($debug)
|
|
|
+ error_log("ip: $ip");
|
|
|
+
|
|
|
+
|
|
|
+ if (is_file('webservice-auth-ip.conf.php')) {
|
|
|
+ include 'webservice-auth-ip.conf.php';
|
|
|
+ if ($debug)
|
|
|
+ error_log("webservice-auth-ip.conf.php file included");
|
|
|
+ if (!empty($ws_auth_ip)) {
|
|
|
+ $check_ip = true;
|
|
|
+ $ip_matches = api_check_ip_in_range($ip, $ws_auth_ip);
|
|
|
+ if ($debug) {
|
|
|
+ error_log("ip_matches: $ip_matches");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($debug) {
|
|
|
+ error_log("checkip " . intval($check_ip));
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($check_ip) {
|
|
|
+ $security_key = $_configuration['security_key'];
|
|
|
+ } else {
|
|
|
+ $security_key = $ip.$_configuration['security_key'];
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = api_is_valid_secret_key($secret_key, $security_key);
|
|
|
+
|
|
|
+ if ($debug) {
|
|
|
+ error_log('WSHelperVerifyKey result: '.intval($result));
|
|
|
+ }
|
|
|
+ return $result;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+$server = new soap_server();
|
|
|
+
|
|
|
+$server->soap_defencoding = 'UTF-8';
|
|
|
+
|
|
|
+
|
|
|
+$server->configureWSDL('WSTCC', 'urn:WSTCC');
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+$server->wsdl->addComplexType(
|
|
|
+ 'paramsUpdateTCCUserIdAndGetUser',
|
|
|
+ 'complexType',
|
|
|
+ 'struct',
|
|
|
+ 'all',
|
|
|
+ '',
|
|
|
+ array(
|
|
|
+ 'email' => array('name' => 'email', 'type' => 'xsd:string'),
|
|
|
+ 'tcc_user_id' => array('name' => 'tcc_user_id', 'type' => 'xsd:string'),
|
|
|
+ 'secret_key' => array('name' => 'secret_key', 'type' => 'xsd:string'),
|
|
|
+ )
|
|
|
+);
|
|
|
+
|
|
|
+$fields = array(
|
|
|
+ 'Genre' => array('name' => 'Genre', 'type' => 'xsd:string'),
|
|
|
+ 'Nom' => array('name' => 'Nom', 'type' => 'xsd:string'),
|
|
|
+ 'Prenom' => array('name' => 'Prenom', 'type' => 'xsd:string'),
|
|
|
+ 'DateNaissance' => array('name' => 'DateNaissance', 'type' => 'xsd:string'),
|
|
|
+ 'Langue' => array('name' => 'Langue', 'type' => 'xsd:string'),
|
|
|
+ 'Nationalite' => array('name' => 'Nationalite', 'type' => 'xsd:string'),
|
|
|
+ 'Pays' => array('name' => 'Pays', 'type' => 'xsd:string'),
|
|
|
+ 'Adresse' => array('name' => 'Adresse', 'type' => 'xsd:string'),
|
|
|
+ 'CodePostal' => array('name' => 'CodePostal', 'type' => 'xsd:string'),
|
|
|
+ 'Ville' => array('name' => 'Ville', 'type' => 'xsd:string'),
|
|
|
+ 'Email'=> array('name' => 'Email', 'type' => 'xsd:string')
|
|
|
+);
|
|
|
+
|
|
|
+$server->wsdl->addComplexType(
|
|
|
+ 'resultUpdateTCCUserIdAndGetUserArray',
|
|
|
+ 'complexType',
|
|
|
+ 'struct',
|
|
|
+ 'all',
|
|
|
+ '',
|
|
|
+ $fields
|
|
|
+);
|
|
|
+
|
|
|
+
|
|
|
+$server->register('WSUpdateTCCUserIdAndGetUser',
|
|
|
+ array('paramsUpdateTCCUserIdAndGetUser' => 'tns:paramsUpdateTCCUserIdAndGetUser'),
|
|
|
+ array('return' => 'tns:resultUpdateTCCUserIdAndGetUserArray'),
|
|
|
+ 'urn:WSTCC',
|
|
|
+ 'urn:WSTCC#WSCreateUserPasswordCrypted',
|
|
|
+ 'rpc',
|
|
|
+ 'encoded',
|
|
|
+ 'This service adds users'
|
|
|
+);
|
|
|
+
|
|
|
+
|
|
|
+function WSUpdateTCCUserIdAndGetUser($params)
|
|
|
+{
|
|
|
+ global $_configuration, $debug;
|
|
|
+ $debug = 1;
|
|
|
+ if ($debug) error_log('WSUpdateTCCUserIdAndGetUser');
|
|
|
+ if ($debug) error_log(print_r($params, 1));
|
|
|
+
|
|
|
+ if (!WSHelperVerifyKey($params)) {
|
|
|
+ return returnError(WS_ERROR_SECRET_KEY);
|
|
|
+ }
|
|
|
+
|
|
|
+ $users = UserManager::getRepository()->getUsersByEmail($params['email']);
|
|
|
+
|
|
|
+ if (!empty($users)) {
|
|
|
+ if (isset($users[0]) && $users[0] instanceof User) {
|
|
|
+
|
|
|
+ $user = $users[0];
|
|
|
+
|
|
|
+ $userInfo = api_get_user_info(
|
|
|
+ $user->getId(),
|
|
|
+ false,
|
|
|
+ false,
|
|
|
+ true,
|
|
|
+ false
|
|
|
+ );
|
|
|
+
|
|
|
+ if ($params['tcc_user_id'] !== '') {
|
|
|
+ $extraFieldValue = new ExtraFieldValue('user');
|
|
|
+
|
|
|
+ $extraField = new ExtraField('user');
|
|
|
+ $extraFieldData = $extraField->get_handler_field_info_by_field_variable('tcc_user_id');
|
|
|
+ $params = [
|
|
|
+ 'field_id' => $extraFieldData['id'],
|
|
|
+ 'value' => $params['tcc_user_id'],
|
|
|
+ 'item_id' => $user->getId(),
|
|
|
+ ];
|
|
|
+ $extraFieldValue->save($params);
|
|
|
+ }
|
|
|
+
|
|
|
+ $extraFields = [
|
|
|
+ 'terms_genre',
|
|
|
+ 'terms_datedenaissance',
|
|
|
+ 'terms_ville',
|
|
|
+ 'terms_paysresidence',
|
|
|
+ 'terms_nationalite',
|
|
|
+ 'terms_codepostal'
|
|
|
+ ];
|
|
|
+
|
|
|
+ $extraFieldResults = [];
|
|
|
+
|
|
|
+ foreach ($userInfo['extra'] as $field) {
|
|
|
+
|
|
|
+ $extraFieldValue = $field['value'];
|
|
|
+ $variable = $extraFieldValue->getField()->getVariable();
|
|
|
+ $extraFieldResults[$variable] = '';
|
|
|
+ if (in_array($variable, $extraFields)) {
|
|
|
+ $extraFieldResults[$variable] = $extraFieldValue->getValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $parts = explode('-', $extraFieldResults['terms_datedenaissance']);
|
|
|
+ $extraFieldResults['terms_datedenaissance'] = $parts[0].'/'.$parts[1].'/'.$parts[2];
|
|
|
+ $extraFieldResults['terms_genre'] = $extraFieldResults['terms_genre'] === 'homme' ? 'Masculin' : 'Féminin';
|
|
|
+
|
|
|
+ $language = 'fr-FR';
|
|
|
+ switch ($user->getLanguage()) {
|
|
|
+ case 'french2':
|
|
|
+ case 'french':
|
|
|
+ $language = 'fr-FR';
|
|
|
+ break;
|
|
|
+ case 'german':
|
|
|
+ $language = 'de-DE';
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = [
|
|
|
+ 'Genre' => $extraFieldResults['terms_genre'],
|
|
|
+ 'Nom' => $user->getLastname(),
|
|
|
+ 'Prenom' => $user->getFirstname(),
|
|
|
+ 'DateNaissance' => $extraFieldResults['terms_datedenaissance'],
|
|
|
+ 'Langue' => $language,
|
|
|
+ 'Nationalite' => $extraFieldResults['terms_nationalite'],
|
|
|
+ 'Pays' => $extraFieldResults['terms_paysresidence'],
|
|
|
+ 'Adresse' => $user->getAddress() ,
|
|
|
+ 'CodePostal' => $extraFieldResults['terms_codepostal'],
|
|
|
+ 'Ville' => $extraFieldResults['terms_ville'],
|
|
|
+ 'Email' => $user->getEmail(),
|
|
|
+ ];
|
|
|
+
|
|
|
+ if ($debug) error_log(print_r($result, 1));
|
|
|
+
|
|
|
+ return $result;
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $return;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+$fields = $fields + [
|
|
|
+ 'tcc_user_id' => array('name' => 'tcc_user_id', 'type' => 'xsd:string'),
|
|
|
+ 'secret_key' => array('name' => 'secret_key', 'type' => 'xsd:string')
|
|
|
+];
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+$server->wsdl->addComplexType(
|
|
|
+ 'editUser',
|
|
|
+ 'complexType',
|
|
|
+ 'struct',
|
|
|
+ 'all',
|
|
|
+ '',
|
|
|
+ $fields
|
|
|
+);
|
|
|
+
|
|
|
+
|
|
|
+$server->register('WSEditUserTCC',
|
|
|
+ array('editUser' => 'tns:editUser'),
|
|
|
+ array('return' => 'xsd:string'),
|
|
|
+ 'urn:WSTCC',
|
|
|
+ 'urn:WSTCC#WSEditUserTCC',
|
|
|
+ 'rpc',
|
|
|
+ 'encoded',
|
|
|
+ 'This service edits a user from wiener'
|
|
|
+);
|
|
|
+
|
|
|
+
|
|
|
+function WSEditUserTCC($params)
|
|
|
+{
|
|
|
+ if (!WSHelperVerifyKey($params)) {
|
|
|
+ return returnError(WS_ERROR_SECRET_KEY);
|
|
|
+ }
|
|
|
+
|
|
|
+ $extraFieldValue = new ExtraFieldValue('user');
|
|
|
+ $data = $extraFieldValue->get_item_id_from_field_variable_and_field_value('tcc_user_id', $params['tcc_user_id']);
|
|
|
+ if ($data && isset($data['item_id'])) {
|
|
|
+ $userId = $data['item_id'];
|
|
|
+ $user = api_get_user_entity($userId);
|
|
|
+ if (!empty($user)) {
|
|
|
+
|
|
|
+ switch ($params['Langue']) {
|
|
|
+ case 'fr-FR':
|
|
|
+ $params['Langue'] = 'french2';
|
|
|
+ break;
|
|
|
+ case 'de-DE':
|
|
|
+ $params['Langue'] = 'german';
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ $user
|
|
|
+ ->setFirstname($params['Prenom'])
|
|
|
+ ->setLastname($params['Nom'])
|
|
|
+ ->setLanguage($params['Langue'])
|
|
|
+ ->setAddress($params['Adresse'])
|
|
|
+ ->setEmail($params['Email'])
|
|
|
+ ;
|
|
|
+
|
|
|
+ $em = Database::getManager();
|
|
|
+ $em->merge($user);
|
|
|
+ $em->flush();
|
|
|
+
|
|
|
+ $extraField = new ExtraField('user');
|
|
|
+ $extraFieldValue = new ExtraFieldValue('user');
|
|
|
+
|
|
|
+ $fields = [
|
|
|
+ 'terms_genre' => 'Genre',
|
|
|
+ 'terms_datedenaissance' => 'DateNaissance',
|
|
|
+ 'terms_ville' => 'Ville',
|
|
|
+ 'terms_paysresidence' => 'Pays',
|
|
|
+ 'terms_nationalite' => 'Nationalite',
|
|
|
+ 'terms_codepostal' => 'CodePostal'
|
|
|
+ ];
|
|
|
+
|
|
|
+ foreach ($fields as $extraFieldName => $externalName) {
|
|
|
+ $fieldInfo = $extraField->get_handler_field_info_by_field_variable($extraFieldName);
|
|
|
+
|
|
|
+ switch ($extraFieldName) {
|
|
|
+ case 'terms_genre':
|
|
|
+ $params[$externalName] = $params[$externalName] === 'Masculin' ? 'homme' : 'femme';
|
|
|
+ break;
|
|
|
+ case 'terms_datedenaissance':
|
|
|
+ if (!empty($params[$externalName])) {
|
|
|
+ $parts = explode('/', $params[$externalName]);
|
|
|
+ $params[$externalName] = $parts[2].'-'.$parts[1].'-'.$parts[0];
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($fieldInfo) {
|
|
|
+ $paramsToSave = [
|
|
|
+ 'field_id' => $fieldInfo['id'],
|
|
|
+ 'item_id' => $userId,
|
|
|
+ 'value' => $params[$externalName]
|
|
|
+ ];
|
|
|
+ error_log($extraFieldName);
|
|
|
+ error_log(print_r($paramsToSave, 1));
|
|
|
+ $extraFieldValue->save($paramsToSave);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+$decodeUTF8 = api_get_setting('registration.soap.php.decode_utf8');
|
|
|
+if ($decodeUTF8 === 'true') {
|
|
|
+ $server->decode_utf8 = true;
|
|
|
+} else {
|
|
|
+ $server->decode_utf8 = false;
|
|
|
+}
|
|
|
+$server->service(file_get_contents('php://input'));
|