Ok, c'est ce que j'écrivais hier.
Pour Joomla 2.5 et 3.x uniquement
- Vérifiez si le
http://
préfixe manque dans l'URL. Si c'est le cas, il l'ajoute. Notez que dans ce cas je n'ai pas pris https://
en considération.
- Il essaie ensuite d'obtenir le fichier manifeste Joomla et vérifie s'il existe / est lisible.
- S'il existe, il obtient la valeur de la
<version>
balise.
- Si le fichier XML n'est pas lisible, j'ai écrit une solution de rechange pour obtenir la version TinyMCE. Encore une fois, il essaiera de lire la valeur de la
<version>
balise.
- À partir de là, j'ai passé assez de temps à parcourir les notes de publication de chaque version de Joomla pour voir quelles versions ont une mise à jour TinyMCE. Ceux qui l'ont fait, j'ai ajouté au
switch
bloc plus propre dans le code. Cette approche ne donnera pas la version exacte en dehors de 2 d'entre eux, mais elle donnera une moyenne. Je pensais à détecter la version jQuery, mais j'ai réalisé que beaucoup de gens mettaient à jour la version principale vers la dernière, ce qui rendrait les résultats inexacts.
- Si la version de TinyMCE est introuvable (donc en gros un site non Joomla), alors la fonction reviendra
Unknown
.
Remarque: Ce script utilise CURL
alors assurez-vous qu'il est activé sur votre serveur.
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;
}
}
Appelez ensuite la fonction comme suit:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
J'ai créé un module sur mon site Web en tant qu'outil pour les autres utilisateurs:
Outil de détection de version de Joomla
J'ai également créé un référentiel Github si vous souhaitez le fork ou soumettre des requêtes pull:
Joomla Version Detect Github Repo
Quoi qu'il en soit, comme certains d'entre vous le savent, je ne suis pas un développeur principal, donc il y a probablement beaucoup d'améliorations qui peuvent être apportées au code. Si vous avez une autre solution ou pouvez mettre à jour ce que j'ai actuellement, assurez-vous de la poster en tant que nouvelle réponse.