@@ -1477,9 +1477,6 @@ public static function getServerVersions(array $checkFor): array
14771477 */
14781478 public static function getFileVersions (array &$ versionOptions ): array
14791479 {
1480- // Default place to find the languages would be the default theme dir.
1481- $ lang_dir = Theme::$ current ->settings ['default_theme_dir ' ] . '/languages ' ;
1482-
14831480 $ version_info = [
14841481 'root_versions ' => [],
14851482 'file_versions ' => [],
@@ -1530,6 +1527,8 @@ public static function getFileVersions(array &$versionOptions): array
15301527 Config::$ sourcedir . '/minify/* ' ,
15311528 Config::$ sourcedir . '/ReCaptcha/* ' ,
15321529 Config::$ sourcedir . '/Tasks/* ' ,
1530+ Config::$ sourcedir . '/ZxcvbnPhp/* ' ,
1531+ Config::$ sourcedir . '/Unicode/* ' ,
15331532 ];
15341533
15351534 foreach ($ sources_dir as $ filename => $ file ) {
@@ -1616,31 +1615,37 @@ public static function getFileVersions(array &$versionOptions): array
16161615 }
16171616
16181617 // Load up all the files in the default language directory and sort by language.
1619- $ this_dir = dir ($ lang_dir );
1618+ $ langauges_dir = new \RecursiveIteratorIterator (
1619+ new \RecursiveDirectoryIterator (
1620+ Config::$ boarddir . '/Languages ' ,
1621+ \RecursiveDirectoryIterator::SKIP_DOTS ,
1622+ ),
1623+ );
16201624
1621- while ($ entry = $ this_dir ->read ()) {
1622- if (str_ends_with ($ entry , '.php ' ) && $ entry != 'index.php ' && !is_dir ($ lang_dir . '/ ' . $ entry )) {
1623- // Read the first 768 bytes from the file.... enough for the header.
1624- $ fp = fopen ($ lang_dir . '/ ' . $ entry , 'rb ' );
1625- $ header = fread ($ fp , 768 );
1626- fclose ($ fp );
1625+ foreach ($ langauges_dir as $ filename => $ file ) {
1626+ if (!$ file ->isFile () || $ file ->getFilename () === 'index.php ' || $ file ->getExtension () !== 'php ' ) {
1627+ continue ;
1628+ }
16271629
1628- // Split the file name off into useful bits.
1629- list ($ name , $ language ) = explode ('. ' , $ entry );
1630+ $ language = basename (\dirname ($ filename ));
1631+ $ short_name = $ file ->getBasename ('. ' . $ file ->getExtension ());
1632+ $ name = $ file ->getBasename ();
16301633
1631- // Look for the version comment in the file header.
1632- if (preg_match ('~(?://|/\*)\s*Version:\s+(.+?);\s* ' . preg_quote ($ name , '~ ' ) . '(?:[\s]{2}|\*/)~i ' , $ header , $ match ) == 1 ) {
1633- $ version_info ['default_language_versions ' ][$ language ][$ name ] = $ match [1 ];
1634- }
1635- // It wasn't found, but the file was... show a '??'.
1636- else {
1637- $ version_info ['default_language_versions ' ][$ language ][$ name ] = '?? ' ;
1638- }
1634+ // Read the first 768 bytes from the file.... enough for the header.
1635+ $ fp = $ file ->openFile ('rb ' );
1636+ $ header = $ fp ->fread (768 );
1637+ $ fp = null ;
1638+
1639+ // Look for the version comment in the file header.
1640+ if (preg_match ('~(?://|/\*)\s*Version:\s+(.+?);\s* ' . preg_quote ($ short_name , '~ ' ) . '(?:[\s]{2}|\*/|$)~i ' , $ header , $ match ) == 1 ) {
1641+ $ version_info ['default_language_versions ' ][$ language ][$ name ] = $ match [1 ];
1642+ }
1643+ // It wasn't found, but the file was... show a '??'.
1644+ else {
1645+ $ version_info ['default_language_versions ' ][$ language ][$ name ] = '?? ' ;
16391646 }
16401647 }
16411648
1642- $ this_dir ->close ();
1643-
16441649 // Sort the file versions by filename.
16451650 if (!empty ($ versionOptions ['sort_results ' ])) {
16461651 ksort ($ version_info ['file_versions ' ]);
0 commit comments