#!/usr/bin/php . */ const N="\n"; if (!isset($argv[1]) || $argv[1]=='--help' || $argv[1]=='-h') { echo('[[[ DESCRIPTION ]]]'.N.' Adds a language to the «Languages» table.'.N.'[[[ SYNTAX ]]]'.N.' addlang.php '.N); exit(0); } $newlangcode=strtolower($argv[1]); $newlang=strtoupper($newlangcode); $test=locale_get_display_name($newlangcode,'en'); if ($test==$newlangcode) { echo('Sorry, «'.$newlangcode.'» is an unknown language code.'.N); exit(1); } else { echo('Adding language «'.$newlangcode.'» («'.$test.'»)...'.N); } $email='pezcurrel@tiscali.it'; require __DIR__.'/../lib/mb_ucfirst.php'; use function mysqli_real_escape_string as myesc; $inifp=__DIR__.'/../conf/mustard.ini'; $iniarr=@parse_ini_file($inifp) or mexit('Impossibile aprire il file di configurazione «'.$inifp.'»'.N,1); $link=@mysqli_connect($iniarr['db_host'],$iniarr['db_admin_name'],$iniarr['db_admin_password'],$iniarr['db_name'],$iniarr['db_port'],$iniarr['db_socket']) or mexit('Impossibile connettersi al server MySQL: '.mysqli_connect_error().N,1); mysqli_set_charset($link,'utf8mb4') or mexit(mysqli_error($link).N,1); $que='ALTER TABLE `Languages` ADD `Name'.$newlang.'` VARCHAR(64) NULL DEFAULT NULL AFTER `NameOrig`'; echo($que.N); mysqli_query($link,$que) or mexit(mysqli_error($link).N,2); $res=mysqli_query($link,'SELECT ID, Code FROM Languages') or mexit(mysqli_error($link).N,2); while ($row=mysqli_fetch_assoc($res)) { $que='UPDATE Languages SET Name'.$newlang.'=\''.myesc($link,mb_ucfirst(locale_get_display_name($row['Code'],$newlangcode))).'\' WHERE ID='.$row['ID']; echo($que.N); mysqli_query($link,$que) or mexit(mysqli_error($link).N,2); } /*$contextopts=array( 'http'=>array( 'timeout'=>5 ), 'socket'=>array( 'tcp_nodelay'=>true ) ); $context=stream_context_create($contextopts); $addrkeys=array('neighbourhood','borough','suburb','city','municipality','county','district','province','region','state','country'); $res=mysqli_query($link,'SELECT ID, OSMID, NameIT FROM Localities') or mexit(mysqli_error($link).N,2); while ($row=mysqli_fetch_assoc($res)) { $good=false; $url='https://nominatim.openstreetmap.org/lookup?osm_ids=R'.$row['OSMID'].'&format=json&accept-language='.$newlangcode.'&addressdetails=1&email='.$email; $osmdil=@file_get_contents($url,false,$context); if ($osmdil!==false) { $osmdil=json_decode($osmdil,true); if (array_key_exists(0,$osmdil) && array_key_exists('address',$osmdil[0])) { //$osmdil[0]['address']=array(); // simula errore $dispname=array(); foreach ($addrkeys as $addrkey) if (array_key_exists($addrkey,$osmdil[0]['address'])) $dispname[]=$osmdil[0]['address'][$addrkey]; if (count($dispname)>0) { $dispname=array_unique($dispname); $dispname=implode(', ',$dispname); $good=true; } else { echo($row['NameIT'].': No useful «address» data found in OpenStreetMap lookup data for lang «'.$newlangcode.'».'.N); } } else { echo($row['NameIT'].': No «address» found in OpenStreetMap lookup data for lang «'.$newlangcode.'».'.N); } } else { echo($row['NameIT'].': Couldn’t fetch OpenStreetMap lookup data for lang «'.$newlangcode.'».'.N); } if ($good) { $que='UPDATE Localities SET Name'.$newlang.'=\''.myesc($link,$dispname).'\' WHERE ID='.$row['ID']; echo($que.N); mysqli_query($link,$que) or mexit(mysqli_error($link).N,3); } }*/ mysqli_close($link); echo('done :-)'.N); exit(0); function mexit($msg,$rv) { global $link; if ($link) mysqli_close($link); echo($msg); exit($rv); } ?>