edinsth.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. <?php
  2. require('include/glob.php');
  3. require('include/muoribene.php');
  4. require('include/sessionstart.php');
  5. require('include/myconn.php');
  6. require('include/getadmacc.php');
  7. require('include/tables.php');
  8. $tables=tables($link);
  9. require('include/mb_ucfirst.php');
  10. $dbg='';
  11. use function mysqli_real_escape_string as myesc;
  12. // praticamente una macro
  13. function hspech($str) {
  14. return(htmlspecialchars($str,ENT_QUOTES|ENT_HTML5,'UTF-8'));
  15. }
  16. $contextopts=array(
  17. 'http'=>array(
  18. 'timeout'=>5
  19. ),
  20. 'socket'=>array(
  21. 'tcp_nodelay'=>true
  22. )
  23. );
  24. $context=stream_context_create($contextopts);
  25. $email='pezcurrel@tiscali.it';
  26. $langs=array('xx'=>'Local language','en'=>'English','es'=>'Español','fr'=>'Français','it'=>'Italiano');
  27. $exvalsjsarr='null;'.N;
  28. $morejs='';
  29. $dbg.='<pre>GET:'.N.print_r($_GET,1).'POST:'.N.print_r($_POST,1).'</pre>';
  30. function edaddrem($id,$table,$column,$dispselarr,$lntable,$lncolumn,$searchid,$dispselid,$recbid) {
  31. global $link, $morejs, $account, $dlang;
  32. if ($_POST['m']=='edit') {
  33. if ($table!='Languages') {
  34. mysqli_query($link,'UPDATE '.$table.' SET '.$column.'=\''.myesc($link,$_POST['v']).'\' WHERE ID='.$id)
  35. or muoribene(__LINE__.': '.mysqli_error($link),true);
  36. } else {
  37. $langs=array('NameOrig'=>mb_ucfirst(locale_get_display_name($_POST['v'],$_POST['v'])),
  38. 'NameEN'=>mb_ucfirst(locale_get_display_name($_POST['v'],'en')),
  39. 'NameES'=>mb_ucfirst(locale_get_display_name($_POST['v'],'es')),
  40. 'NameFR'=>mb_ucfirst(locale_get_display_name($_POST['v'],'fr')),
  41. 'NameIT'=>mb_ucfirst(locale_get_display_name($_POST['v'],'it')));
  42. if ($_POST['v']==$langs['NameOrig']) {
  43. muoribene('«'.$_POST['v'].'»: unknown language identifier.',true);
  44. } else {
  45. mysqli_query($link,'UPDATE '.$table.' SET Code=\''.myesc($link,$_POST['v']).'\', NameOrig=\''.myesc($link,$langs['NameOrig']).'\', NameEN=\''.myesc($link,$langs['NameEN']).'\', NameES=\''.myesc($link,$langs['NameES']).'\', NameFR=\''.myesc($link,$langs['NameFR']).'\', NameIT=\''.myesc($link,$langs['NameIT']).'\' WHERE ID='.$id)
  46. or muoribene(__LINE__.': '.mysqli_error($link),true);
  47. $_POST['v']=$langs['Name'.$dlang].' ['.$_POST['v'].']';
  48. }
  49. }
  50. $morejs.='parent.'.$dispselarr.'=parent.cheltxtbyval(parent.'.$dispselarr.','.$id.',"'.jsencode($_POST['v']).'");'.N;
  51. $morejs.='parent.'.$dispselarr.'=parent.sortByKey(parent.'.$dispselarr.',0);'.N;
  52. $morejs.='parent.'.$dispselarr.'=parent.selonebyval(parent.'.$dispselarr.','.$id.');'.N;
  53. } elseif ($_POST['m']=='add') {
  54. if ($table!='Languages') {
  55. mysqli_query($link,'INSERT INTO '.$table.' (ID, '.$column.', AddedBy) VALUES (NULL, \''.myesc($link,$_POST['v']).'\', \''.$account['ID'].'\')')
  56. or muoribene(__LINE__.': '.mysqli_error($link),true);
  57. $newid=mysqli_insert_id($link);
  58. } else {
  59. $langs=array('NameOrig'=>mb_ucfirst(locale_get_display_name($_POST['v'],$_POST['v'])),
  60. 'NameEN'=>mb_ucfirst(locale_get_display_name($_POST['v'],'en')),
  61. 'NameES'=>mb_ucfirst(locale_get_display_name($_POST['v'],'es')),
  62. 'NameFR'=>mb_ucfirst(locale_get_display_name($_POST['v'],'fr')),
  63. 'NameIT'=>mb_ucfirst(locale_get_display_name($_POST['v'],'it')));
  64. if (strtolower($_POST['v'])==strtolower($langs['NameOrig'])) {
  65. muoribene('«'.$_POST['v'].'»: unknown language identifier.',true);
  66. } else {
  67. mysqli_query($link,'INSERT INTO '.$table.' (ID, Code, NameOrig, NameEN, NameES, NameFR, NameIT, AddedBy) VALUES (NULL, \''.myesc($link,$_POST['v']).'\', \''.myesc($link,$langs['NameOrig']).'\', \''.myesc($link,$langs['NameEN']).'\', \''.myesc($link,$langs['NameES']).'\', \''.myesc($link,$langs['NameFR']).'\', \''.myesc($link,$langs['NameIT']).'\', '.$account['ID'].')')
  68. or muoribene(__LINE__.': '.mysqli_error($link),true);
  69. $newid=mysqli_insert_id($link);
  70. $_POST['v']=$langs['Name'.$dlang].' ['.$_POST['v'].']';
  71. }
  72. }
  73. $morejs.='parent.'.$dispselarr.'.push(["'.jsencode($_POST['v']).'",'.$newid.',true]);'.N;
  74. $morejs.='parent.'.$dispselarr.'=parent.sortByKey(parent.'.$dispselarr.',0);'.N;
  75. $morejs.='parent.'.$dispselarr.'=parent.selonebyval(parent.'.$dispselarr.','.$newid.');'.N;
  76. } elseif ($_POST['m']=='remove') {
  77. if (!array_key_exists('subst',$_POST) || preg_match('/^[0-9]+$/',$_POST['subst'])!==1)
  78. muoribene(__LINE__.': Malformed input.',true);
  79. $newid=$_POST['subst']+0;
  80. mysqli_query($link,'DELETE FROM '.$table.' WHERE ID='.$id)
  81. or muoribene(__LINE__.': '.mysqli_error($link),true);
  82. if ($newid==0) {
  83. $res=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE '.$lncolumn.'='.$id)
  84. or muoribene(__LINE__.': '.mysqli_error($link),true);
  85. mysqli_query($link,'DELETE FROM '.$lntable.' WHERE '.$lncolumn.'='.$id)
  86. or muoribene(__LINE__.': '.mysqli_error($link),true);
  87. while ($row=mysqli_fetch_assoc($res)) {
  88. $rres=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE InstID='.$row['InstID'].' ORDER BY Pos ASC') or muoribene(__LINE__.': '.mysqli_error($link),true);
  89. $pos=0;
  90. while ($rrow=mysqli_fetch_assoc($rres)) {
  91. $pos++;
  92. mysqli_query($link,'UPDATE '.$lntable.' SET Pos='.$pos.' WHERE InstID='.$rrow['InstID'].' AND '.$lncolumn.'='.$rrow[$lncolumn].' AND Pos='.$rrow['Pos'])
  93. or muoribene(__LINE__.': '.mysqli_error($link),true);
  94. }
  95. }
  96. } else {
  97. $res=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE '.$lncolumn.'='.$id)
  98. or muoribene(__LINE__.': '.mysqli_error($link),true);
  99. while ($row=mysqli_fetch_assoc($res)) {
  100. $rres=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE InstID='.$row['InstID'].' AND '.$lncolumn.'='.$newid) or muoribene(__LINE__.': '.mysqli_error($link),true);
  101. if (mysqli_num_rows($rres)==0) {
  102. mysqli_query($link,'UPDATE '.$lntable.' SET '.$lncolumn.'='.$newid.' WHERE InstID='.$row['InstID'].' AND '.$lncolumn.'='.$id.' AND Pos='.$row['Pos']) or muoribene(__LINE__.': '.mysqli_error($link),true);
  103. //+++ potrebbe aver senso mettere js qui che sposti la voce agli associati se non è già lì, magari con un alerta
  104. } else {
  105. mysqli_query($link,'DELETE FROM '.$lntable.' WHERE InstID='.$row['InstID'].' AND '.$lncolumn.'='.$id.' AND Pos='.$row['Pos']) or muoribene(__LINE__.': '.mysqli_error($link),true);
  106. $rres=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE InstID='.$row['InstID'].' ORDER BY Pos ASC') or muoribene(__LINE__.': '.mysqli_error($link),true);
  107. $pos=0;
  108. while ($rrow=mysqli_fetch_assoc($rres)) {
  109. $pos++;
  110. mysqli_query($link,'UPDATE '.$lntable.' SET Pos='.$pos.' WHERE InstID='.$rrow['InstID'].' AND '.$lncolumn.'='.$rrow[$lncolumn].' AND Pos='.$rrow['Pos'])
  111. or muoribene(__LINE__.': '.mysqli_error($link),true);
  112. }
  113. }
  114. }
  115. }
  116. $morejs.='parent.'.$dispselarr.'=parent.rmelbyval(parent.'.$dispselarr.','.$id.');'.N;
  117. }
  118. $morejs.='parent.filtsel (parent.'.$dispselarr.', parent.document.getElementById("'.$searchid.'").value, "'.$dispselid.'", "'.$recbid.'", "'.$searchid.'", "white", "#ff8080");'.N;
  119. $morejs.='parent.closeinpup();'.N;
  120. }
  121. if (array_key_exists('w',$_GET) && array_key_exists('i',$_GET) && preg_match('/^[0-9]+$/',$_GET['i'])===1 && array_key_exists('m',$_GET) && in_array($_GET['m'],array('edit','add','remove'))) {
  122. $id=$_GET['i']+0;
  123. switch ($_GET['w']) {
  124. case 'LocalityID':
  125. $out=buildform($id,'Localities','Name'.$dlang,'Locality name','Instances','LocalityID');
  126. $exvalsjsarr=setjsarr('Localities','Name'.$dlang);
  127. break;
  128. case 'DispLangs':
  129. $out=buildform($id,'Languages','Code','Language code','InstOurLangs','OurLangID');
  130. $exvalsjsarr=setjsarr('Languages','Code');
  131. break;
  132. case 'DispFinModes':
  133. $out=buildform($id,'Financing','Type','Financing method','InstFinancing','FinID');
  134. $exvalsjsarr=setjsarr('Financing','Type');
  135. break;
  136. case 'DispPolicies':
  137. $out=buildform($id,'Policies','Name','Policy','InstPolicies','PolID');
  138. $exvalsjsarr=setjsarr('Policies','Name');
  139. break;
  140. case 'DispTags':
  141. $out=buildform($id,'Tags','Name','Tag','InstTags','TagID');
  142. $exvalsjsarr=setjsarr('Tags','Name');
  143. break;
  144. default:
  145. muoribene(__LINE__.': Malformed input.',true);
  146. break;
  147. }
  148. } elseif (array_key_exists('m',$_POST) && in_array($_POST['m'],array('edit','add','remove')) && array_key_exists('t',$_POST) && in_array($_POST['t'],array('Localities','Languages','Financing','Policies','Tags')) && array_key_exists('i',$_POST) && preg_match('/^[0-9]+$/',$_POST['i'])===1) {
  149. $id=$_POST['i']+0;
  150. if (array_key_exists('v',$_POST)) {
  151. $out='';
  152. if ($_POST['t']=='Localities') {
  153. if ($_POST['m']!='remove') {
  154. //https://nominatim.openstreetmap.org/search?q=bresso,+milano&format=json&accept-language=fr&email=pezcurrel@tiscali.it
  155. //https://nominatim.openstreetmap.org/lookup?osm_ids=R45266&format=json&accept-language=fr&addressdetails=1&email=pezcurrel@tiscali.it
  156. $url='https://nominatim.openstreetmap.org/search?q='.urlencode($_POST['v']).'&format=json&email='.$email;
  157. $osmd=@file_get_contents($url,false,$context);
  158. if ($osmd!==false) {
  159. $out.='<form action="edinsth.php" method="post" id="f">'.N;
  160. $addrkeys=array('suburb','city','county','state','country');
  161. $osmd=json_decode($osmd,true);
  162. if (count($osmd)>0) {
  163. $some=false;
  164. $out.='<p><strong>Please choose the most detailed appropriate entry</strong></p>'.N;
  165. foreach ($osmd as $loc) {
  166. if (array_key_exists('osm_id',$loc) && array_key_exists('osm_type',$loc) && $loc['osm_type']=='relation') {
  167. $out.='<div class="hifloc" onclick="subosmd(\''.$loc['osm_id'].'\');">'.N;
  168. $out.='<ul class="hiful">'.N;
  169. foreach ($langs as $code=>$lang) {
  170. $url='https://nominatim.openstreetmap.org/lookup?osm_ids=R'.$loc['osm_id'].'&format=json&accept-language='.$code.'&addressdetails=1&email='.$email;
  171. $osmdil=@file_get_contents($url,false,$context);
  172. if ($osmdil!==false) {
  173. $some=true; //+++
  174. $osmdil=json_decode($osmdil,true);
  175. if (array_key_exists(0,$osmdil) && array_key_exists('address',$osmdil[0])) {
  176. $dispname='';
  177. foreach ($addrkeys as $addrkey)
  178. if (array_key_exists($addrkey,$osmdil[0]['address']))
  179. $dispname.=$osmdil[0]['address'][$addrkey].', ';
  180. $dispname=substr($dispname,0,-2);
  181. $out.='<li><strong>'.$lang.':</strong> '.hspech($dispname).'</li>'.N;
  182. $out.='<input type="hidden" id="Loc'.strtoupper($code).'-'.$loc['osm_id'].'" value="'.jsencode($dispname).'">'.N;
  183. } else {
  184. $out.='<li class="hiferr"><strong>'.$lang.':</strong> Couldn’t parse OpenStreetMap lookup data.</li>'.N;
  185. $out.='<input type="hidden" id="Loc'.strtoupper($code).'-'.$loc['osm_id'].'" value="">'.N;
  186. }
  187. } else {
  188. $out.='<li class="hiferr"><strong>'.$lang.':</strong> Couldn’t fetch OpenStreetMap lookup data.</li>'.N;
  189. }
  190. }
  191. $out.='</ul>'.N.'</div>'.N;
  192. }
  193. }
  194. if ($some) {
  195. $out.='<input type="hidden" id="i" name="i" value="'.$_POST['i'].'">'.N;
  196. $out.='<input type="hidden" id="t" name="t" value="'.$_POST['t'].'">'.N;
  197. $out.='<input type="hidden" id="m" name="m" value="'.$_POST['m'].'">'.N;
  198. $out.='<input type="hidden" id="LocXX" name="LocXX" value="">'.N;
  199. $out.='<input type="hidden" id="LocEN" name="LocEN" value="">'.N;
  200. $out.='<input type="hidden" id="LocES" name="LocES" value="">'.N;
  201. $out.='<input type="hidden" id="LocFR" name="LocFR" value="">'.N;
  202. $out.='<input type="hidden" id="LocIT" name="LocIT" value="">'.N;
  203. $out.='</form>'.N;
  204. } else {
  205. $out='<p class="hiferr">Couldn’t find localized OpenStreetMap data for «'.hspech($_POST['v']).'».</p>';
  206. }
  207. } else {
  208. $out='<p class="hiferr">Couldn’t find OpenStreetMap data for «'.hspech($_POST['v']).'».</p>';
  209. }
  210. } else {
  211. $out='<p class="hiferr">Couldn’t fetch OpenStreetMap search data.</p>'.N;
  212. }
  213. } else {
  214. // locality remove
  215. $out='CANCELLO!';
  216. if (!array_key_exists('subst',$_POST) || preg_match('/^[0-9]+$/',$_POST['subst'])!==1)
  217. muoribene(__LINE__.': Malformed input.',true);
  218. $_POST['subst']+=0;
  219. if ($_POST['subst']==0) {
  220. mysqli_query($link,'UPDATE Instances SET LocalityID=NULL WHERE LocalityID='.$id)
  221. or muoribene(__LINE__.': '.mysqli_error($link),true);
  222. } else {
  223. mysqli_query($link,'UPDATE Instances SET LocalityID='.$_POST['subst'].' WHERE LocalityID='.$id)
  224. or muoribene(__LINE__.': '.mysqli_error($link),true);
  225. }
  226. mysqli_query($link,'DELETE FROM Localities WHERE ID='.$id)
  227. or muoribene(__LINE__.': '.mysqli_error($link),true);
  228. $morejs.='parent.locselarr=parent.rmelbyval(parent.locselarr,'.$id.');'.N;
  229. $morejs.='parent.filtsel (parent.locselarr, parent.document.getElementById("locsearch").value, "LocalityID", "locselre", "locsearch", "white", "#ff8080");'.N;
  230. $morejs.='parent.closeinpup();'.N;
  231. }
  232. } elseif ($_POST['t']=='Languages') {
  233. edaddrem($id,'Languages','Name'.$dlang,'langselarr','InstOurLangs','OurLangID','langsearch','DispLangs','langselre');
  234. } elseif ($_POST['t']=='Financing') {
  235. edaddrem($id,'Financing','Type','finselarr','InstFinancing','FinID','finsearch','DispFinModes','finselre');
  236. } elseif ($_POST['t']=='Policies') {
  237. edaddrem($id,'Policies','Name','polselarr','InstPolicies','PolID','polsearch','DispPolicies','polselre');
  238. } elseif ($_POST['t']=='Tags') {
  239. edaddrem($id,'Tags','Name','tagselarr','InstTags','TagID','tagsearch','DispTags','tagselre');
  240. } else {
  241. // questo è ridondante ma fa niente
  242. muoribene(__LINE__.': Malformed input.',true);
  243. }
  244. } elseif (array_key_exists('LocXX',$_POST) && array_key_exists('LocEN',$_POST) && array_key_exists('LocES',$_POST) && array_key_exists('LocFR',$_POST) && array_key_exists('LocIT',$_POST)) {
  245. // locality edit/add
  246. $out='EDITO/AGGIUNGO!';
  247. // qui, sia su add sia su edit, serve check che non esista già +++
  248. if ($_POST['m']=='add') {
  249. mysqli_query($link,'INSERT INTO Localities (ID, NameOrig, NameEN, NameES, NameFR, NameIT, AddedBy) VALUES (NULL, \''.myesc($link,$_POST['LocXX']).'\', \''.myesc($link,$_POST['LocEN']).'\', \''.myesc($link,$_POST['LocES']).'\', \''.myesc($link,$_POST['LocFR']).'\', \''.myesc($link,$_POST['LocIT']).'\', \''.$account['ID'].'\')')
  250. or muoribene(__LINE__.': '.mysqli_error($link),true);
  251. $id=mysqli_insert_id($link);
  252. $morejs.='parent.locselarr.push(["'.jsencode($_POST['Loc'.$dlang]).'",'.$id.',true]);'.N;
  253. } elseif ($_POST['m']=='edit') {
  254. mysqli_query($link,'UPDATE Localities SET NameOrig=\''.myesc($link,$_POST['LocXX']).'\', NameEN=\''.myesc($link,$_POST['LocEN']).'\', NameES=\''.myesc($link,$_POST['LocES']).'\', NameFR=\''.myesc($link,$_POST['LocFR']).'\', NameIT=\''.myesc($link,$_POST['LocIT']).'\' WHERE ID='.$id)
  255. or muoribene(__LINE__.': '.mysqli_error($link),true);
  256. $morejs.='parent.locselarr=parent.cheltxtbyval(parent.locselarr,'.$id.',"'.jsencode($_POST['Loc'.$dlang]).'");'.N;
  257. }
  258. $morejs.='parent.locselarr=parent.sortByKey(parent.locselarr,0);'.N;
  259. $morejs.='parent.locselarr=parent.selonebyval(parent.locselarr,'.$id.');'.N;
  260. $morejs.='parent.filtsel (parent.locselarr, parent.document.getElementById("locsearch").value, "LocalityID", "locselre", "locsearch", "white", "#ff8080");'.N;
  261. $morejs.='parent.closeinpup();'.N;
  262. } else {
  263. muoribene(__LINE__.': Malformed input.',true);
  264. }
  265. } else {
  266. muoribene(__LINE__.': Malformed input.',true);
  267. }
  268. function buildform($id,$table,$column,$title,$lntable,$lncolumn) {
  269. global $account, $tables, $link;
  270. $out='';
  271. if ($_GET['m']=='edit' || $_GET['m']=='remove') {
  272. $res=mysqli_query($link,'SELECT * FROM '.$table.' WHERE ID='.$id)
  273. or muoribene(__LINE__.': '.mysqli_error($link),true);
  274. if (mysqli_num_rows($res)==1) {
  275. $row=mysqli_fetch_assoc($res);
  276. if ($account['Level']=='guest') {
  277. if ($row['AddedBy']!=$account['ID'])
  278. muoribene('You can’t modify an entry you didn’t add.',true);
  279. $rres=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE '.$lncolumn.'='.$id.' AND AddedBy!='.$account['ID'])
  280. or muoribene(__LINE__.': '.mysqli_error($link),true);
  281. if (mysqli_num_rows($rres)>0)
  282. muoribene('You can’t modify an entry that has already been linked by others.',true);
  283. }
  284. if ($_GET['m']=='edit') {
  285. $out.='<div class="hiflab"><label for="v">'.$title.'</label></div>'.N;
  286. $out.='<input type="text" class="hifinp" name="v" id="v" maxlength="'.$tables[$table][$column].'" value="'.hspech($row[$column]).'">'.N;
  287. $out.='<script language="JavaScript">'.N;
  288. $out.='<!--'.N;
  289. $out.='document.getElementById(\'v\').focus();'.N;
  290. $out.='document.getElementById(\'v\').select();'.N;
  291. $out.='//-->'.N;
  292. $out.='</script>'.N;
  293. } elseif ($_GET['m']=='remove') {
  294. $lnres=mysqli_query($link,'SELECT * FROM '.$lntable.' WHERE '.$lncolumn.'='.$id)
  295. or muoribene(__LINE__.': '.mysqli_error($link),true);
  296. $nlinking=mysqli_num_rows($lnres);
  297. if ($nlinking>0) {
  298. $out.='<div class="hiflab">«'.hspech($row[$column]).'» is referenced by '.$nlinking.' '.(($nlinking==1) ? 'instance' : 'instances').'!</div>'.N;
  299. $out.='<div class="hifdiv">What do you want to do with '.(($nlinking==1) ? 'this reference' : 'those '.$nlinking.' references').'?<br>If you choose “Delete” '.(($nlinking==1) ? 'it' : 'they').' will be removed; otherwise you can select a substitution record.</div>'.N;
  300. $out.='<select id="subst" name="subst" class="hifinp">'.N;
  301. $out.='<option value="0">Delete</option>'.N;
  302. $lnres=mysqli_query($link,'SELECT * FROM '.$table.' WHERE ID!='.$id.' ORDER BY '.$column.' ASC')
  303. or muoribene(__LINE__.': '.mysqli_error($link),true);
  304. while ($lnrow=mysqli_fetch_assoc($lnres)) {
  305. $out.='<option value="'.$lnrow['ID'].'">Subst. with «'.hspech($lnrow[$column]).'»</option>'.N;
  306. }
  307. $out.='</select>'.N;
  308. } else {
  309. $out.='<input type="hidden" name="subst" value="0">'.N;
  310. }
  311. $out.='<div class="hiflab">Are you sure you want to remove «'.$row[$column].'»?</div>'.N;
  312. $out.='<input type="hidden" name="v" value="IGNORAMI">'.N;
  313. }
  314. $out.='<input type="hidden" name="i" value="'.$id.'">'.N;
  315. } else {
  316. $out.='<p>There is no '.$title.' with ID='.$id.'</p>'.N;
  317. }
  318. } elseif ($_GET['m']=='add') {
  319. $out.='<div class="hiflab"><label for="v">'.$title.'</label></div>'.N;
  320. $out.='<input type="text" class="hifinp" name="v" id="v" maxlength="'.$tables[$table][$column].'" value="">'.N;
  321. $out.='<script language="JavaScript">'.N;
  322. $out.='<!--'.N;
  323. $out.='document.getElementById(\'v\').focus();'.N;
  324. $out.='document.getElementById(\'v\').select();'.N;
  325. $out.='//-->'.N;
  326. $out.='</script>'.N;
  327. $out.='<input type="hidden" name="i" value="0">'.N;
  328. }
  329. $out.='<input type="hidden" name="m" value="'.$_GET['m'].'">'.N;
  330. $out.='<input type="hidden" name="t" value="'.$table.'">'.N;
  331. $out.='<div id="errmsg"></div>'.N;
  332. $out.='<table class="hiftab"><tr><td style="width:50%"><input type="button" value="Cancel" class="hifbut" onclick="parent.closeinpup()"></td><td style="width:50%"><input type="button" value="Ok" class="hifbut" onclick="ckf(\''.$_GET['m'].'\',\''.$table.'\')"></td></tr></table>'.N;
  333. $out='<form action="edinsth.php" method="post" id="f" onsubmit="return ckf(\''.$_GET['m'].'\',\''.$table.'\');">'.N.$out.'</form>'.N;
  334. return($out);
  335. }
  336. function jsencode($str) {
  337. return(str_replace('"','\"',$str));
  338. }
  339. function setjsarr($table,$column) {
  340. global $link;
  341. $jsarr=array();
  342. $res=mysqli_query($link,'SELECT '.$column.' FROM '.$table)
  343. or muoribene(__LINE__.': '.mysqli_error($link),true);
  344. while ($row=mysqli_fetch_assoc($res)) {
  345. $jsarr[]=jsencode(strtolower($row[$column]));
  346. }
  347. $jsarr='["'.implode('","',$jsarr).'"];'.N;
  348. return($jsarr);
  349. }
  350. mysqli_close($link);
  351. ?>
  352. <!DOCTYPE HTML>
  353. <html lang="en">
  354. <head>
  355. <title>Mastodon Startpage Admin - Little edit’s helper</title>
  356. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  357. <meta name="description" content="Admin pages for Mastodon Startpage">
  358. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  359. <script language="JavaScript" src="js/confirma.js?v=<?php echo($cjrand); ?>"></script>
  360. <script language="JavaScript" src="js/alerta.js?v=<?php echo($cjrand); ?>"></script>
  361. <link rel="stylesheet" type="text/css" href="theme.css?v=<?php echo($cjrand); ?>">
  362. <script language="JavaScript">
  363. <!--
  364. exvalsarr=<?php echo($exvalsjsarr); ?>
  365. function ckf(mode,table) {
  366. var ok=false;
  367. if (mode=='remove') {
  368. ok=true;
  369. } else if (mode=='add' || mode=='edit') {
  370. var val=document.getElementById('v').value.trim(), vallow=val.toLowerCase(), len=exvalsarr.length, i=0, found=false;
  371. document.getElementById('v').value=val;
  372. if (val!='') {
  373. for (i=0; i<len; i++) {
  374. if (exvalsarr[i]==vallow) {
  375. found=true;
  376. break;
  377. }
  378. }
  379. if (found) {
  380. document.getElementById('errmsg').innerHTML='«'+val+'» already exists!';
  381. } else {
  382. ok=true;
  383. }
  384. } else {
  385. document.getElementById('errmsg').innerHTML='You can’t submit an empty value!';
  386. }
  387. }
  388. if (ok) {
  389. var wdiv=document.getElementById('wait');
  390. if (table=='Localities' && mode!='remove')
  391. wdiv.innerHTML='Fetching data from OpenStreetMap.org ...';
  392. else
  393. wdiv.innerHTML='Sending data ...';
  394. wdiv.style.display='block';
  395. document.getElementById('f').submit();
  396. } else {
  397. return false;
  398. }
  399. }
  400. function subosmd(osmid) {
  401. document.getElementById('LocXX').value=document.getElementById('LocXX-'+osmid).value;
  402. document.getElementById('LocEN').value=document.getElementById('LocEN-'+osmid).value;
  403. document.getElementById('LocES').value=document.getElementById('LocES-'+osmid).value;
  404. document.getElementById('LocFR').value=document.getElementById('LocFR-'+osmid).value;
  405. document.getElementById('LocIT').value=document.getElementById('LocIT-'+osmid).value;
  406. if (document.getElementById('LocXX').value=='' || document.getElementById('LocEN').value=='' || document.getElementById('LocES').value=='' || document.getElementById('LocFR').value=='' || document.getElementById('LocIT').value=='') {
  407. alert('NO GOOD!');
  408. } else {
  409. document.getElementById('f').submit();
  410. }
  411. }
  412. <?php echo($morejs); ?>
  413. //-->
  414. </script>
  415. </head>
  416. <body class="hifbody">
  417. <div id="fullscreen">
  418. <div id="middlerow">
  419. <?php echo($out); ?>
  420. </div>
  421. </div>
  422. <div id="debugh">
  423. <?php echo($dbg); ?>
  424. </div>
  425. <div id="wait">
  426. ...
  427. </div>
  428. </body>
  429. </html>