tao-test/app/tao/helpers/class.Request.php

137 lines
4.4 KiB
PHP
Raw Normal View History

2022-08-29 20:14:13 +02:00
<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2008-2010 (original work) Deutsche Institut für Internationale Pädagogische Forschung (under the project TAO-TRANSFER);
* 2009-2012 (update and modification) Public Research Centre Henri Tudor (under the project TAO-SUSTAIN & TAO-DEV);
* 2012-2016 (update and modification) Open Assessment Technologies SA;
*
*/
/**
* Utilities on requests
*
* @access public
* @author Bertrand Chevrier, <bertrand.chevrier@tudor.lu>
* @package tao
*/
class tao_helpers_Request
{
// --- ASSOCIATIONS ---
// --- ATTRIBUTES ---
// --- OPERATIONS ---
/**
* Enables you to know if the request in the current scope is an ajax
*
* @access public
* @author Bertrand Chevrier, <bertrand.chevrier@tudor.lu>
* @return boolean
*/
public static function isAjax()
{
$returnValue = (bool) false;
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$returnValue = true;
}
}
return (bool) $returnValue;
}
/**
* Returns the current relative call url, without leading slash
*
* @param string $url
* @throws ResolverException
* @return string
*/
public static function getRelativeUrl($url = null)
{
$url = is_null($url) ? '/' . ltrim($_SERVER['REQUEST_URI'], '/') : $url;
$rootUrlPath = parse_url(ROOT_URL, PHP_URL_PATH);
$absPath = parse_url($url, PHP_URL_PATH);
if (substr($absPath, 0, strlen($rootUrlPath)) != $rootUrlPath) {
throw new ResolverException('Request Uri ' . $url . ' outside of TAO path ' . ROOT_URL);
}
if ($absPath === $rootUrlPath) {
$result = '';
} else {
$result = substr($absPath, strlen($rootUrlPath));
}
return $result;
}
/**
* Perform an HTTP Request on the defined url and return the content
*
* @access public
* @author Bertrand Chevrier, <bertrand.chevrier@tudor.lu>
* @param string url
* @param boolean useSession if you want to use the same session in the remotre server
* @return string
* @throws Exception
*/
public static function load($url, $useSession = false)
{
$returnValue = (string) '';
if (!empty($url)) {
if ($useSession) {
session_write_close();
}
$curlHandler = curl_init();
//if there is an http auth, it's mandatory to connect with curl
if (USE_HTTP_AUTH) {
curl_setopt($curlHandler, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curlHandler, CURLOPT_USERPWD, USE_HTTP_USER . ":" . USE_HTTP_PASS);
}
curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);
//to keep the session
if ($useSession) {
if (!preg_match("/&$/", $url)) {
$url .= '&';
}
$url .= 'session_id=' . session_id();
curl_setopt($curlHandler, CURLOPT_COOKIE, session_name() . '=' . $_COOKIE[session_name()] . '; path=/');
}
curl_setopt($curlHandler, CURLOPT_URL, $url);
$returnValue = curl_exec($curlHandler);
if (curl_errno($curlHandler) > 0) {
throw new Exception("Request error " . curl_errno($curlHandler) . ": " . curl_error($curlHandler));
}
curl_close($curlHandler);
}
return (string) $returnValue;
}
}