Ok, esto es lo que estaba escribiendo ayer.
Solo para Joomla 2.5 y 3.x
- Compruebe si
http://
falta el prefijo de la URL. Si es así, entonces lo agrega. Nótese que en este caso he no tenido https://
en cuenta.
- Luego intenta obtener el archivo de manifiesto de Joomla y comprueba si existe / es legible.
- Si existe, obtiene el valor de la
<version>
etiqueta.
- Si el archivo XML no es legible, he escrito una copia de respaldo para obtener la versión TinyMCE. Nuevamente, intentará leer el valor de la
<version>
etiqueta.
- De aquí en adelante, pasé bastante tiempo revisando las notas de lanzamiento de cada versión de Joomla para ver qué versiones tienen una actualización de TinyMCE. Los que lo hicieron, agregué al
switch
bloque más propio en el código. Este enfoque no dará la versión exacta aparte de 2 de ellos, pero dará un promedio. Estaba pensando en detectar la versión jQuery, pero luego me di cuenta de que muchas personas actualizan la versión principal a la última, lo que haría que los resultados fueran inexactos.
- Si no se puede encontrar la versión de TinyMCE (básicamente un sitio que no es de Joomla), la función volverá
Unknown
.
Nota: Esta secuencia de comandos utiliza, CURL
así que asegúrese de que esté habilitada en su 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;
}
}
Luego llame a la función así:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
He creado un módulo en mi sitio web como herramienta para otros usuarios:
Herramienta de detección de versiones de Joomla
También he creado un repositorio de Github si desea bifurcarlo o enviar solicitudes de extracción:
Versión Joomla Detect Github Repo
De todos modos, como algunos de ustedes saben, no soy un desarrollador de back-end, por lo que probablemente hay muchas mejoras que se pueden hacer en el código. Si tiene otra solución o puede actualizar lo que tengo actualmente, asegúrese de publicarlo como una nueva respuesta.