Tratamento de url para gerenciar proxy do Moodle

Tratamento de url para gerenciar proxy do Moodle

por Lino Vaz Moniz -
Número de respostas: 0

Quando vc faz proxy do Moodle, ou seja, redirecionando endereço dependo de onde usuário quer acessar, é necessário fazer um tratamento de URL para para casos de Moodle instalado em pastas ou subpastas de um domínio virtual. 

Para ficar mais claro, vamos imaginar o seguinte contexto.  Quando o aluno tentar acessar o endereço MOODLE_URL/my envie usuário para um outro URL seja dentro do Moodle ou um sistema externo. 

Para efetuar esse lógica é necessário mapear $_SERVER['REQUEST_URI'] a URL que usuário está tentando acessar. Só que isso pode trazer resultados diferentes se o Moodle estiver num domínio virtual ou numa pasta do domínio virtual. Se o Moodle estiver instalado em www.ead.com e o aluno tentar acessar  www.ead.com/my  o comando $_SERVER['REQUEST_URI']  vai retornar /my já se o Moodle estiver instalado numa subpasta do domínio como www.ead.com/moodle e o aluno tentar acessar www.ead.com/moodle/my o comando $_SERVER['REQUEST_URI'] vai retorna /moodle/my.

Para abstrair  se moodle estiver numa subpasta do domínio e sempre retornar URI a partir do do endereço raiz do Moodle configurado em $CFG->wwwroot, criei a função badiu_clean_uri(). Essa função retorna URI fazendo abstração se URL do Moodle for um domínio virtual ou uma pasta do domínio. 

Segue o código da função

function badiu_clean_uri() {
global $CFG;
$uri = $_SERVER['REQUEST_URI'];
$host = $CFG->wwwroot;
$p = explode("//", $host);
if (!isset($p[1])) {
return $uri;
}
$shost = explode("/", $p[1]);
$suri = explode("/", $uri);
$cont = 0;
$newuri = "";
foreach ($suri as $key => $value) {
$phost = null;
if (isset($shost[$key])) {
$phost = $shost[$key];
}
if ($key > 0) {
if (empty($value)) {
$newuri .= '/';
$cont++;
} else if ($phost != $value) {
if ($newuri != '/') {
$newuri .= '/' . $value;
$cont++;
}
}
}
}
if ($cont == 0) {
return $uri;
}
return $newuri;
}

Para checar aluno estiver acessando endereço MOODLE_URL/my e fazer redirecionamento usando a função badiu_clean_uri, veja a lógica a seguir:

$currenturi = badiu_clean_uri();
if ($currenturi=='/my' || $currenturi=='/my/') {
$url='https://comunidade.badiu.com.br/'; //coloque aqui o seu url
redirect($url);
}

Adapte essa lógica ao seu projeto