Ok, então é isso que eu estava escrevendo ontem.
Apenas para Joomla 2.5 e 3.x
- Verifique se o
http://
prefixo está ausente no URL. Se for, então ele adiciona. Observe que, neste caso, não levei https://
em consideração.
- Em seguida, tenta obter o arquivo de manifesto do Joomla e verifica se existe / é legível.
- Se existir, obtém o valor da
<version>
tag.
- Se o arquivo XML não estiver legível, escrevi um fallback para obter a versão do TinyMCE. Novamente, ele tentará ler o valor da
<version>
tag.
- A partir daqui, passei muito tempo revisando as notas de versão de cada versão do Joomla para ver quais versões possuem uma atualização do TinyMCE. Aqueles que fizeram, eu adicionei ao
switch
bloco mais adiante no código. Essa abordagem não fornecerá a versão exata além de duas delas, mas fornecerá uma média. Eu estava pensando em detectar a versão do jQuery, mas percebi que muitas pessoas atualizavam a versão principal para a mais recente, o que tornaria os resultados imprecisos.
- Se a versão do TinyMCE não puder ser encontrada (portanto, basicamente, um site que não seja do Joomla), a função retornará
Unknown
.
Nota: Este script usa, CURL
portanto, verifique se ele está ativado no seu servidor.
class JoomlaVersions
{
public function getJoomlaVersion($site)
{
// Add http prefix if missing
if (strpos($site,'http://') === false)
{
$site = 'http://'.$site;
}
// Get the number value from the <version> tag in the XML file
$dom = new DOMDocument;
$url = $site . '/administrator/manifests/files/joomla.xml';
libxml_use_internal_errors(true);
$exists = $this->XMLexists($url);
if( $exists )
{
$dom->load($url);
$versions = $dom->getElementsByTagName('version');
foreach ($versions as $version)
{
return $version->nodeValue;
}
}
else
{
$mce = $this->getTinyMCEversion($site);
if($mce)
{
// Base Joomla version on the TinyMCE version
switch ($mce)
{
case '3.5.6':
$joomla = '3.0.0 - 3.1.6';
break;
case '4.0.10':
$joomla = '3.2.0 - 3.2.1';
break;
case '4.0.12':
$joomla = '3.2.2';
break;
case '4.0.18':
$joomla = '3.2.3 - 3.2.4';
break;
case '4.0.22':
$joomla = '3.3.0';
break;
case '4.0.28':
$joomla = '3.3.1 - 3.3.6';
break;
case '4.1.7':
$joomla = '3.4.0';
break;
default:
$joomla = '3.x';
}
return $joomla;
}
else
{
return 'Unknown';
}
}
}
// Get TinyMCE Version
private function getTinyMCEversion($site)
{
$tinymce = $site . '/plugins/editors/tinymce/tinymce.xml';
libxml_use_internal_errors(true);
$exists = $this->XMLexists($tinymce);
if( $exists )
{
$dom->load($tinymce);
$vTag = $dom->getElementsByTagName('version');
foreach ($vTag as $tag)
{
return $tag->nodeValue;
}
}
}
// Check file exists using CURL
private function XMLexists($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$getinfo = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $getinfo;
}
}
Em seguida, chame a função da seguinte maneira:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
Eu criei um módulo no meu site como uma ferramenta para outros usuários:
Ferramenta de Detecção de Versão do Joomla
Também criei um repositório do Github, se você deseja bifurcar ou enviar solicitações pull:
Versão do Joomla Detect Repo Github
De qualquer forma, como alguns de vocês sabem, eu não sou um desenvolvedor de back-end, então provavelmente há muitas melhorias que podem ser feitas no código. Se você tiver outra solução ou puder atualizar o que tenho atualmente, não deixe de publicá-la como uma nova resposta.