|
|
|
@ -87,12 +87,12 @@ class WSCMError |
|
|
|
|
*/ |
|
|
|
|
interface WSCMErrorHandler |
|
|
|
|
{ |
|
|
|
|
/** |
|
|
|
|
* Handle method |
|
|
|
|
* |
|
|
|
|
* @param WSError $error Error |
|
|
|
|
*/ |
|
|
|
|
public function handle($error); |
|
|
|
|
/** |
|
|
|
|
* Handle method |
|
|
|
|
* |
|
|
|
|
* @param WSError $error Error |
|
|
|
|
*/ |
|
|
|
|
public function handle($error); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -100,57 +100,57 @@ interface WSCMErrorHandler |
|
|
|
|
*/ |
|
|
|
|
class WSCM |
|
|
|
|
{ |
|
|
|
|
/** |
|
|
|
|
* Chamilo configuration |
|
|
|
|
* |
|
|
|
|
* @var array |
|
|
|
|
*/ |
|
|
|
|
protected $_configuration; |
|
|
|
|
/** |
|
|
|
|
* Chamilo configuration |
|
|
|
|
* |
|
|
|
|
* @var array |
|
|
|
|
*/ |
|
|
|
|
protected $_configuration; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Constructor |
|
|
|
|
*/ |
|
|
|
|
public function __construct() |
|
|
|
|
/** |
|
|
|
|
* Constructor |
|
|
|
|
*/ |
|
|
|
|
public function __construct() |
|
|
|
|
{ |
|
|
|
|
$this->_configuration = $GLOBALS['_configuration']; |
|
|
|
|
} |
|
|
|
|
$this->_configuration = $GLOBALS['_configuration']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Verifies the API key |
|
|
|
|
* |
|
|
|
|
* @param string $secret_key Secret key |
|
|
|
|
* @return mixed WSError in case of failure, null in case of success |
|
|
|
|
*/ |
|
|
|
|
protected function verifyKey($secret_key) |
|
|
|
|
/** |
|
|
|
|
* Verifies the API key |
|
|
|
|
* |
|
|
|
|
* @param string $secret_key Secret key |
|
|
|
|
* @return mixed WSError in case of failure, null in case of success |
|
|
|
|
*/ |
|
|
|
|
protected function verifyKey($secret_key) |
|
|
|
|
{ |
|
|
|
|
$ip = trim($_SERVER['REMOTE_ADDR']); |
|
|
|
|
// if we are behind a reverse proxy, assume it will send the |
|
|
|
|
// HTTP_X_FORWARDED_FOR header and use this IP instead |
|
|
|
|
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { |
|
|
|
|
list($ip1, $ip2) = split(',', $_SERVER['HTTP_X_FORWARDED_FOR']); |
|
|
|
|
$ip = trim($ip1); |
|
|
|
|
} |
|
|
|
|
$security_key = $ip.$this->_configuration['security_key']; |
|
|
|
|
$ip = trim($_SERVER['REMOTE_ADDR']); |
|
|
|
|
// if we are behind a reverse proxy, assume it will send the |
|
|
|
|
// HTTP_X_FORWARDED_FOR header and use this IP instead |
|
|
|
|
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { |
|
|
|
|
list($ip1, $ip2) = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); |
|
|
|
|
$ip = trim($ip1); |
|
|
|
|
} |
|
|
|
|
$security_key = $ip.$this->_configuration['security_key']; |
|
|
|
|
|
|
|
|
|
if (!api_is_valid_secret_key($secret_key, $security_key)) { |
|
|
|
|
return new WSCMError(1, "API key is invalid"); |
|
|
|
|
} else { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!api_is_valid_secret_key($secret_key, $security_key)) { |
|
|
|
|
return new WSCMError(1, "API key is invalid"); |
|
|
|
|
} else { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Verifies if the user is valid |
|
|
|
|
* |
|
|
|
|
* @param string $username of the user in chamilo |
|
|
|
|
* @param string $pass of the same user (in MD5 of SHA) |
|
|
|
|
* |
|
|
|
|
* @return mixed "valid" if username e password are correct! Else, return a message error |
|
|
|
|
*/ |
|
|
|
|
public function verifyUserPass($username, $pass) |
|
|
|
|
/** |
|
|
|
|
* Verifies if the user is valid |
|
|
|
|
* |
|
|
|
|
* @param string $username of the user in chamilo |
|
|
|
|
* @param string $pass of the same user (in MD5 of SHA) |
|
|
|
|
* |
|
|
|
|
* @return mixed "valid" if username e password are correct! Else, return a message error |
|
|
|
|
*/ |
|
|
|
|
public function verifyUserPass($username, $pass) |
|
|
|
|
{ |
|
|
|
|
$login = $username; |
|
|
|
|
$password = $pass; |
|
|
|
|
$login = $username; |
|
|
|
|
$password = $pass; |
|
|
|
|
|
|
|
|
|
$userRepo = UserManager::getRepository(); |
|
|
|
|
/** @var User $uData */ |
|
|
|
@ -183,17 +183,17 @@ class WSCM |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return get_lang('InvalidId'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Gets the real user id based on the user id field name and value. |
|
|
|
|
* Note that if the user id field name is "chamilo_user_id", it will use the user id |
|
|
|
|
* in the system database |
|
|
|
|
* |
|
|
|
|
* @param string $user_id_field_name User id field name |
|
|
|
|
* @param string $user_id_value User id value |
|
|
|
|
* @return mixed System user id if the user was found, WSError otherwise |
|
|
|
|
*/ |
|
|
|
|
/** |
|
|
|
|
* Gets the real user id based on the user id field name and value. |
|
|
|
|
* Note that if the user id field name is "chamilo_user_id", it will use the user id |
|
|
|
|
* in the system database |
|
|
|
|
* |
|
|
|
|
* @param string $user_id_field_name User id field name |
|
|
|
|
* @param string $user_id_value User id value |
|
|
|
|
* @return mixed System user id if the user was found, WSError otherwise |
|
|
|
|
*/ |
|
|
|
|
protected function getUserId($user_id_field_name, $user_id_value) |
|
|
|
|
{ |
|
|
|
|
if ($user_id_field_name == "chamilo_user_id") { |
|
|
|
@ -215,16 +215,16 @@ class WSCM |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Gets the real course id based on the course id field name and value. |
|
|
|
|
* Note that if the course id field name is "chamilo_course_id", it will use the course id |
|
|
|
|
* in the system database |
|
|
|
|
* |
|
|
|
|
* @param string $course_id_field_name Course id field name |
|
|
|
|
* @param string $course_id_value Course id value |
|
|
|
|
* @return mixed System course id if the course was found, WSError otherwise |
|
|
|
|
*/ |
|
|
|
|
protected function getCourseId($course_id_field_name, $course_id_value) |
|
|
|
|
/** |
|
|
|
|
* Gets the real course id based on the course id field name and value. |
|
|
|
|
* Note that if the course id field name is "chamilo_course_id", it will use the course id |
|
|
|
|
* in the system database |
|
|
|
|
* |
|
|
|
|
* @param string $course_id_field_name Course id field name |
|
|
|
|
* @param string $course_id_value Course id value |
|
|
|
|
* @return mixed System course id if the course was found, WSError otherwise |
|
|
|
|
*/ |
|
|
|
|
protected function getCourseId($course_id_field_name, $course_id_value) |
|
|
|
|
{ |
|
|
|
|
if ($course_id_field_name == "chamilo_course_id") { |
|
|
|
|
if (CourseManager::get_course_code_from_course_id($course_id_value) != null) { |
|
|
|
@ -243,78 +243,78 @@ class WSCM |
|
|
|
|
return $courseId; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Gets the real session id based on the session id field name and value. |
|
|
|
|
* Note that if the session id field name is "chamilo_session_id", it will use the session id |
|
|
|
|
* in the system database |
|
|
|
|
* |
|
|
|
|
* @param string $session_id_field_name Session id field name |
|
|
|
|
* @param string $session_id_value Session id value |
|
|
|
|
* @return mixed System session id if the session was found, WSError otherwise |
|
|
|
|
*/ |
|
|
|
|
protected function getSessionId($session_id_field_name, $session_id_value) |
|
|
|
|
{ |
|
|
|
|
if ($session_id_field_name == "chamilo_session_id") { |
|
|
|
|
$session = SessionManager::fetch((int) $session_id_value); |
|
|
|
|
if (!empty($session)) { |
|
|
|
|
return intval($session_id_value); |
|
|
|
|
} else { |
|
|
|
|
return new WSCMError(300, "Session not found"); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$session_id = SessionManager::getSessionIdFromOriginalId( |
|
|
|
|
$session_id_value, |
|
|
|
|
$session_id_field_name |
|
|
|
|
); |
|
|
|
|
if ($session_id == 0) { |
|
|
|
|
return new WSCMError(300, "Session not found"); |
|
|
|
|
} else { |
|
|
|
|
return $session_id; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Gets the real session id based on the session id field name and value. |
|
|
|
|
* Note that if the session id field name is "chamilo_session_id", it will use the session id |
|
|
|
|
* in the system database |
|
|
|
|
* |
|
|
|
|
* @param string $session_id_field_name Session id field name |
|
|
|
|
* @param string $session_id_value Session id value |
|
|
|
|
* @return mixed System session id if the session was found, WSError otherwise |
|
|
|
|
*/ |
|
|
|
|
protected function getSessionId($session_id_field_name, $session_id_value) |
|
|
|
|
{ |
|
|
|
|
if ($session_id_field_name == "chamilo_session_id") { |
|
|
|
|
$session = SessionManager::fetch((int) $session_id_value); |
|
|
|
|
if (!empty($session)) { |
|
|
|
|
return intval($session_id_value); |
|
|
|
|
} else { |
|
|
|
|
return new WSCMError(300, "Session not found"); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$session_id = SessionManager::getSessionIdFromOriginalId( |
|
|
|
|
$session_id_value, |
|
|
|
|
$session_id_field_name |
|
|
|
|
); |
|
|
|
|
if ($session_id == 0) { |
|
|
|
|
return new WSCMError(300, "Session not found"); |
|
|
|
|
} else { |
|
|
|
|
return $session_id; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Handles an error by calling the WSError error handler |
|
|
|
|
* |
|
|
|
|
* @param WSError $error Error |
|
|
|
|
*/ |
|
|
|
|
protected function handleError($error) |
|
|
|
|
{ |
|
|
|
|
$handler = WSCMError::getErrorHandler(); |
|
|
|
|
$handler->handle($error); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Handles an error by calling the WSError error handler |
|
|
|
|
* |
|
|
|
|
* @param WSError $error Error |
|
|
|
|
*/ |
|
|
|
|
protected function handleError($error) |
|
|
|
|
{ |
|
|
|
|
$handler = WSCMError::getErrorHandler(); |
|
|
|
|
$handler->handle($error); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Gets a successful result |
|
|
|
|
* |
|
|
|
|
* @return array Array with a code of 0 and a message 'Operation was successful' |
|
|
|
|
*/ |
|
|
|
|
protected function getSuccessfulResult() |
|
|
|
|
{ |
|
|
|
|
return array('code' => 0, 'message' => 'Operation was successful'); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Gets a successful result |
|
|
|
|
* |
|
|
|
|
* @return array Array with a code of 0 and a message 'Operation was successful' |
|
|
|
|
*/ |
|
|
|
|
protected function getSuccessfulResult() |
|
|
|
|
{ |
|
|
|
|
return array('code' => 0, 'message' => 'Operation was successful'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test function. Returns the string success |
|
|
|
|
* |
|
|
|
|
* @return string Success |
|
|
|
|
*/ |
|
|
|
|
public function test() |
|
|
|
|
{ |
|
|
|
|
return "success"; |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* Test function. Returns the string success |
|
|
|
|
* |
|
|
|
|
* @return string Success |
|
|
|
|
*/ |
|
|
|
|
public function test() |
|
|
|
|
{ |
|
|
|
|
return "success"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* *Strictly* reverts PHP's nl2br() effects (whether it was used in XHTML mode or not) |
|
|
|
|
* @param string $string |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function nl2br_revert($string) |
|
|
|
|
/** |
|
|
|
|
* *Strictly* reverts PHP's nl2br() effects (whether it was used in XHTML mode or not) |
|
|
|
|
* @param string $string |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function nl2br_revert($string) |
|
|
|
|
{ |
|
|
|
|
return preg_replace('`<br(?: /)?>([\\n\\r])`', '$1', $string); |
|
|
|
|
} |
|
|
|
|
return preg_replace('`<br(?: /)?>([\\n\\r])`', '$1', $string); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|