Skip to content

Instantly share code, notes, and snippets.

@luukverhoeven
Created February 14, 2022 23:09
Show Gist options
  • Save luukverhoeven/0c4fcfc0950b8947995f713602c8c7d2 to your computer and use it in GitHub Desktop.
Save luukverhoeven/0c4fcfc0950b8947995f713602c8c7d2 to your computer and use it in GitHub Desktop.
Simple way to get all Moodle versions
<?php
$htmlinput = file_get_contents('https://docs.moodle.org/dev/Releases');
$doc = new \DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($htmlinput);
$xpath = new \DOMXpath($doc);
$ths = $xpath->query('//tr/th[position()=1]');
$versions = [];
foreach($ths as $th){
if(!stristr($th->nodeValue , 'Moodle')){
continue;
}
$v = trim((substr(trim($th->nodeValue) , 7)));
if(!strpos($v , '.')){
continue;
}
$key = explode('.' , $v);
$versions[$key[0].$key[1]][$v] = $v;
}
$versions;
@luukverhoeven
Copy link
Author

Sample

=> [
     311 => [
       "3.11" => "3.11",
       "3.11.1" => "3.11.1",
       "3.11.2" => "3.11.2",
       "3.11.3" => "3.11.3",
       "3.11.4" => "3.11.4",
       "3.11.5" => "3.11.5",
     ],
     310 => [
       "3.10" => "3.10",
       "3.10.1" => "3.10.1",
       "3.10.2" => "3.10.2",
       "3.10.3" => "3.10.3",
       "3.10.4" => "3.10.4",
       "3.10.5" => "3.10.5",
       "3.10.6" => "3.10.6",
       "3.10.7" => "3.10.7",
       "3.10.8" => "3.10.8",
       "3.10.9" => "3.10.9",
     ],
     39 => [
       "3.9" => "3.9",
       "3.9.1" => "3.9.1",
       "3.9.2" => "3.9.2",
       "3.9.3" => "3.9.3",
       "3.9.4" => "3.9.4",
       "3.9.5" => "3.9.5",
       "3.9.6" => "3.9.6",
       "3.9.7" => "3.9.7",
       "3.9.8" => "3.9.8",
       "3.9.9" => "3.9.9",
       "3.9.10" => "3.9.10",
       "3.9.11" => "3.9.11",
       "3.9.12" => "3.9.12",
     ],
     38 => [
       "3.8" => "3.8",
       "3.8.1" => "3.8.1",
       "3.8.2" => "3.8.2",
       "3.8.3" => "3.8.3",
       "3.8.4" => "3.8.4",
       "3.8.5" => "3.8.5",
       "3.8.6" => "3.8.6",
       "3.8.7" => "3.8.7",
       "3.8.8" => "3.8.8",
       "3.8.9" => "3.8.9",
     ],
     37 => [
       "3.7" => "3.7",
       "3.7.1" => "3.7.1",
       "3.7.2" => "3.7.2",
       "3.7.3" => "3.7.3",
       "3.7.4" => "3.7.4",
       "3.7.5" => "3.7.5",
       "3.7.6" => "3.7.6",
       "3.7.7" => "3.7.7",
       "3.7.8" => "3.7.8",
       "3.7.9" => "3.7.9",
     ],
     36 => [
       "3.6" => "3.6",
       "3.6.1" => "3.6.1",
       "3.6.2" => "3.6.2",
       "3.6.3" => "3.6.3",
       "3.6.4" => "3.6.4",
       "3.6.5" => "3.6.5",
       "3.6.6" => "3.6.6",
       "3.6.7" => "3.6.7",
       "3.6.8" => "3.6.8",
       "3.6.9" => "3.6.9",
       "3.6.10" => "3.6.10",
     ],
     35 => [
       "3.5" => "3.5",
       "3.5.1" => "3.5.1",
       "3.5.2" => "3.5.2",
       "3.5.3" => "3.5.3",
       "3.5.4" => "3.5.4",
       "3.5.5" => "3.5.5",
       "3.5.6" => "3.5.6",
       "3.5.7" => "3.5.7",
       "3.5.8" => "3.5.8",
       "3.5.9" => "3.5.9",
       "3.5.10" => "3.5.10",
       "3.5.11" => "3.5.11",
       "3.5.12" => "3.5.12",
       "3.5.13" => "3.5.13",
       "3.5.14" => "3.5.14",
       "3.5.15" => "3.5.15",
       "3.5.16" => "3.5.16",
       "3.5.17" => "3.5.17",
       "3.5.18" => "3.5.18",
     ],
     34 => [
       "3.4" => "3.4",
       "3.4.1" => "3.4.1",
       "3.4.2" => "3.4.2",
       "3.4.3" => "3.4.3",
       "3.4.4" => "3.4.4",
       "3.4.5" => "3.4.5",
       "3.4.6" => "3.4.6",
       "3.4.7" => "3.4.7",
       "3.4.8" => "3.4.8",
       "3.4.9" => "3.4.9",
     ],
     33 => [
       "3.3" => "3.3",
       "3.3.1" => "3.3.1",
       "3.3.2" => "3.3.2",
       "3.3.3" => "3.3.3",
       "3.3.4" => "3.3.4",
       "3.3.5" => "3.3.5",
       "3.3.6" => "3.3.6",
       "3.3.7" => "3.3.7",
       "3.3.8" => "3.3.8",
       "3.3.9" => "3.3.9",
     ],
     32 => [
       "3.2" => "3.2",
       "3.2.1" => "3.2.1",
       "3.2.2" => "3.2.2",
       "3.2.3" => "3.2.3",
       "3.2.4" => "3.2.4",
       "3.2.5" => "3.2.5",
       "3.2.6" => "3.2.6",
       "3.2.7" => "3.2.7",
       "3.2.8" => "3.2.8",
       "3.2.9" => "3.2.9",
     ],
     31 => [
       "3.1" => "3.1",
       "3.1.1" => "3.1.1",
       "3.1.2" => "3.1.2",
       "3.1.3" => "3.1.3",
       "3.1.4" => "3.1.4",
       "3.1.5" => "3.1.5",
       "3.1.6" => "3.1.6",
       "3.1.7" => "3.1.7",
       "3.1.8" => "3.1.8",
       "3.1.9" => "3.1.9",
       "3.1.10" => "3.1.10",
       "3.1.11" => "3.1.11",
       "3.1.12" => "3.1.12",
       "3.1.13" => "3.1.13",
       "3.1.14" => "3.1.14",
       "3.1.15" => "3.1.15",
       "3.1.16" => "3.1.16",
       "3.1.17" => "3.1.17",
       "3.1.18" => "3.1.18",
     ],
     30 => [
       "3.0" => "3.0",
       "3.0.1" => "3.0.1",
       "3.0.2" => "3.0.2",
       "3.0.3" => "3.0.3",
       "3.0.4" => "3.0.4",
       "3.0.5" => "3.0.5",
       "3.0.6" => "3.0.6",
       "3.0.7" => "3.0.7",
       "3.0.8" => "3.0.8",
       "3.0.9" => "3.0.9",
       "3.0.10" => "3.0.10",
     ],
     29 => [
       "2.9" => "2.9",
       "2.9.1" => "2.9.1",
       "2.9.2" => "2.9.2",
       "2.9.3" => "2.9.3",
       "2.9.4" => "2.9.4",
       "2.9.5" => "2.9.5",
       "2.9.6" => "2.9.6",
       "2.9.7" => "2.9.7",
       "2.9.8" => "2.9.8",
       "2.9.9" => "2.9.9",
     ],
     28 => [
       "2.8" => "2.8",
       "2.8.1" => "2.8.1",
       "2.8.2" => "2.8.2",
       "2.8.3" => "2.8.3",
       "2.8.4" => "2.8.4",
       "2.8.5" => "2.8.5",
       "2.8.6" => "2.8.6",
       "2.8.7" => "2.8.7",
       "2.8.8" => "2.8.8",
       "2.8.9" => "2.8.9",
       "2.8.10" => "2.8.10",
       "2.8.11" => "2.8.11",
       "2.8.12" => "2.8.12",
     ],
     27 => [
       "2.7" => "2.7",
       "2.7.1" => "2.7.1",
       "2.7.2" => "2.7.2",
       "2.7.3" => "2.7.3",
       "2.7.4" => "2.7.4",
       "2.7.5" => "2.7.5",
       "2.7.6" => "2.7.6",
       "2.7.7" => "2.7.7",
       "2.7.8" => "2.7.8",
       "2.7.9" => "2.7.9",
       "2.7.10" => "2.7.10",
       "2.7.11" => "2.7.11",
       "2.7.12" => "2.7.12",
       "2.7.13" => "2.7.13",
       "2.7.14" => "2.7.14",
       "2.7.15" => "2.7.15",
       "2.7.16" => "2.7.16",
       "2.7.17" => "2.7.17",
       "2.7.18" => "2.7.18",
       "2.7.19" => "2.7.19",
       "2.7.20" => "2.7.20",
     ],
     26 => [
       "2.6" => "2.6",
       "2.6.1" => "2.6.1",
       "2.6.2" => "2.6.2",
       "2.6.3" => "2.6.3",
       "2.6.4" => "2.6.4",
       "2.6.5" => "2.6.5",
       "2.6.6" => "2.6.6",
       "2.6.7" => "2.6.7",
       "2.6.8" => "2.6.8",
       "2.6.9" => "2.6.9",
       "2.6.10" => "2.6.10",
       "2.6.11" => "2.6.11",
     ],
     25 => [
       "2.5" => "2.5",
       "2.5.1" => "2.5.1",
       "2.5.2" => "2.5.2",
       "2.5.3" => "2.5.3",
       "2.5.4" => "2.5.4",
       "2.5.5" => "2.5.5",
       "2.5.6" => "2.5.6",
       "2.5.7" => "2.5.7",
       "2.5.8" => "2.5.8",
       "2.5.9" => "2.5.9",
     ],
     24 => [
       "2.4" => "2.4",
       "2.4.1" => "2.4.1",
       "2.4.2" => "2.4.2",
       "2.4.3" => "2.4.3",
       "2.4.4" => "2.4.4",
       "2.4.5" => "2.4.5",
       "2.4.6" => "2.4.6",
       "2.4.7" => "2.4.7",
       "2.4.8" => "2.4.8",
       "2.4.9" => "2.4.9",
       "2.4.10" => "2.4.10",
       "2.4.11" => "2.4.11",
     ],
     23 => [
       "2.3" => "2.3",
       "2.3.1" => "2.3.1",
       "2.3.2" => "2.3.2",
       "2.3.3" => "2.3.3",
       "2.3.4" => "2.3.4",
       "2.3.5" => "2.3.5",
       "2.3.6" => "2.3.6",
       "2.3.7" => "2.3.7",
       "2.3.8" => "2.3.8",
       "2.3.9" => "2.3.9",
       "2.3.10" => "2.3.10",
       "2.3.11" => "2.3.11",
     ],
     22 => [
       "2.2" => "2.2",
       "2.2.1" => "2.2.1",
       "2.2.2" => "2.2.2",
       "2.2.3" => "2.2.3",
       "2.2.4" => "2.2.4",
       "2.2.5" => "2.2.5",
       "2.2.6" => "2.2.6",
       "2.2.7" => "2.2.7",
       "2.2.8" => "2.2.8",
       "2.2.9" => "2.2.9",
       "2.2.10" => "2.2.10",
       "2.2.11" => "2.2.11",
     ],
     21 => [
       "2.1" => "2.1",
       "2.1.1" => "2.1.1",
       "2.1.2" => "2.1.2",
       "2.1.3" => "2.1.3",
       "2.1.4" => "2.1.4",
       "2.1.5" => "2.1.5",
       "2.1.6" => "2.1.6",
       "2.1.7" => "2.1.7",
       "2.1.8" => "2.1.8",
       "2.1.9" => "2.1.9",
       "2.1.10" => "2.1.10",
     ],
     20 => [
       "2.0" => "2.0",
       "2.0.1" => "2.0.1",
       "2.0.2" => "2.0.2",
       "2.0.3" => "2.0.3",
       "2.0.4" => "2.0.4",
       "2.0.5" => "2.0.5",
       "2.0.6" => "2.0.6",
       "2.0.7" => "2.0.7",
       "2.0.8" => "2.0.8",
       "2.0.9" => "2.0.9",
       "2.0.10" => "2.0.10",
     ],
     19 => [
       "1.9" => "1.9",
       "1.9.1" => "1.9.1",
       "1.9.2" => "1.9.2",
       "1.9.3" => "1.9.3",
       "1.9.4" => "1.9.4",
       "1.9.5" => "1.9.5",
       "1.9.6" => "1.9.6",
       "1.9.7" => "1.9.7",
       "1.9.8" => "1.9.8",
       "1.9.9" => "1.9.9",
       "1.9.10" => "1.9.10",
       "1.9.11" => "1.9.11",
       "1.9.12" => "1.9.12",
       "1.9.13" => "1.9.13",
       "1.9.14" => "1.9.14",
       "1.9.15" => "1.9.15",
       "1.9.16" => "1.9.16",
       "1.9.17" => "1.9.17",
       "1.9.18" => "1.9.18",
       "1.9.19" => "1.9.19",
     ],
   ]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment