diff --git a/web/clitools/getinstinfo.php b/web/clitools/getinstinfo.php index 5636782..fc964ab 100755 --- a/web/clitools/getinstinfo.php +++ b/web/clitools/getinstinfo.php @@ -640,9 +640,9 @@ if ($instanswered && isset($idata['languages']) && is_array($idata['languages']) eecho(1,'«'.$opts['hostname'].'»: declared languages: '.implode(', ',$idata['languages']).N); if (!$opts['dryrun']) { myq($link,'DELETE FROM InstLangs WHERE InstID='.$instid,__LINE__); + $langids=getlangsidsarr($idata['languages'],$link,$opts['hostname'],$opts['dryrun']); $pos=0; - foreach ($idata['languages'] as $lang) { - $langid=getlangid($link,$lang,$opts['hostname'],$opts['dryrun'],__LINE__); + foreach ($langids as $langid) { $pos++; myq($link,'INSERT INTO InstLangs SET InstID='.$instid.', LangID='.$langid.', Pos='.$pos,__LINE__); } @@ -656,8 +656,6 @@ if ($instanswered && isset($idata['languages']) && is_array($idata['languages']) $idata['ourlanguages']=get_instance_langs($opts['hostname']); while (count($idata['ourlanguages'])>5) array_pop($idata['ourlanguages']); - foreach ($idata['ourlanguages'] as $key=>$lang) - $idata['ourlanguages'][$key]=str_replace('-','_',$lang);// this is just cosmetic: lang code canonicalization happens in getlangid() eecho(1,'«'.$opts['hostname'].'»: detected languages: '.implode(', ',$idata['ourlanguages']).N); } else { $idata['ourlanguages']=$idata['languages']; @@ -665,9 +663,9 @@ if ($instanswered && isset($idata['languages']) && is_array($idata['languages']) } if (!$opts['dryrun']) { myq($link,'DELETE FROM InstOurLangs WHERE InstID='.$instid,__LINE__); + $langids=getlangsidsarr($idata['languages'],$link,$opts['hostname'],$opts['dryrun']); $pos=0; foreach ($idata['ourlanguages'] as $lang) { - $langid=getlangid($link,$lang,$opts['hostname'],$opts['dryrun'],__LINE__); $pos++; myq($link,'INSERT INTO InstOurLangs SET InstID='.$instid.', OurLangID='.$langid.', Pos='.$pos,__LINE__); } @@ -1213,7 +1211,11 @@ function get_instance_langs($host) { } function getlangid(&$link,$lang,$hostname,$dryrun,$line) { - $lang=locale_canonicalize($lang); + $code=locale_canonicalize($lang); + if (preg_match('/^\s*$/',$lang)===1 || preg_match('/__/',$code)===1) { + notify('«'.$hostname.'»: «'.$lang.'» is not a valid language code, falling back to default «en».',2,true); + $code='en'; + } $res=myq($link,'SELECT * FROM Languages WHERE Code=\''.myesc($link,$lang).'\'',$line); $nrows=mysqli_num_rows($res); if ($nrows==0) { @@ -1243,4 +1245,14 @@ function getlangid(&$link,$lang,$hostname,$dryrun,$line) { return($langid); } +function getlangsidsarr(&$langs,&$link,$hostname,$dryrun) { + $langids=[]; + foreach ($langs as $lang) { + $langid=getlangid($link,$lang,$hostname,$dryrun,__LINE__); + $langids[]=$langid; + } + $langids=array_unique($langids); + return($langids); +} + ?>