1.
<?php
2.
3.
/*
4.
5.
Formulaire d'édition pour la table : place.
6.
7.
07/03/2021 10:45
8.
9.
lvardon@laposte.net - 2021
10.
11.
Licence libre
12.
13.
*/
14.
15.
include_once "dbconnect.php";
16.
include_once "phpdb/class_place.php";
17.
include_once "phpdb/class_place_ext.php";
18.
19.
if (isset($_REQUEST['a_id_value'])) $id=$_REQUEST['a_id_value'];
20.
else
21.
if (isset($_REQUEST['id'])) $id=$_REQUEST['id'];
22.
else die("Erreur : _REQUEST['id'] est manquant.");
23.
24.
if (isset($_REQUEST['offset']))
25.
$offset=$_REQUEST['offset'];
26.
else
27.
$offset = '';
28.
29.
$userUiMessage="";
30.
31.
// Class instance
32.
$myplace = new place( $db );
33.
34.
35.
// Traitement des fichiers télédéposés
36.
37.
if ( isset($_REQUEST['a_icon_deletebefore']) && file_exists($_REQUEST["a_icon"])) {
38.
unlink($_REQUEST['a_icon']);
39.
$_REQUEST['a_icon'] = '';
40.
}
41.
if(isset($_FILES['a_icon']) && $_FILES['a_icon']['name'] != '' ){
42.
43.
$errors= array();
44.
$file_name = $_FILES['a_icon']['name'];
45.
$file_size = $_FILES['a_icon']['size'];
46.
$file_tmp = $_FILES['a_icon']['tmp_name'];
47.
$file_type = $_FILES['a_icon']['type'];
48.
$file_ext=strtolower(end(explode('.',$_FILES['a_icon']['name'])));
49.
50.
$extensions= array( 'jpeg', 'jpg', 'png' );
51.
52.
if(in_array($file_ext,$extensions)=== false){
53.
$errors[]="Extensions autorisées : 'jpeg', 'jpg', 'png'.";
54.
}
55.
56.
if($file_size > 2097152 ) {
57.
$errors[]='Taille maximum fichier : 2097152 octets.';
58.
}
59.
60.
if(empty($errors)==true) {
61.
$dest_dir="documents/icons/";
62.
63.
if ( file_exists($_REQUEST['a_icon'] ) ) {
64.
$userUiMessage='<div class="editmessageError">Le fichier existe déjà : '.$_REQUEST["a_icon"].'</div>';
65.
}
66.
else {
67.
move_uploaded_file($file_tmp,$dest_dir.$file_name);
68.
$_REQUEST['a_icon']= $dest_dir.$file_name; // Database url doc update
69.
$userUiMessage .= '<div class="editmessageInfo">Fichier déposé : '.$dest_dir.$file_name.'</div>';
70.
}
71.
}else{
72.
$userUiMessage .= '<div class="editmessageError">';
73.
$userUiMessage .= 'Erreur upload :';
74.
foreach ($errors as $verr) {
75.
$userUiMessage .= $verr.'<br>';
76.
}
77.
$userUiMessage .= '</div>';
78.
}
79.
}
80.
81.
82.
$sqlError = false;
83.
84.
// Sauvegarde
85.
if(isset($_POST['submitSave']))
86.
{
87.
if ($id > 0) {
88.
$results = $myplace->update(
89.
$_REQUEST["a_id"],
90.
$_REQUEST["a_name"],
91.
$_REQUEST["a_description"],
92.
$_REQUEST["a_private"],
93.
$_REQUEST["a_icon"],
94.
$_REQUEST["a_adress1"],
95.
$_REQUEST["a_adress2"],
96.
$_REQUEST["a_zipcode"],
97.
$_REQUEST["a_city"],
98.
$_REQUEST["a_cityinsee"],
99.
$_REQUEST["a_country"],
100.
$_REQUEST["a_url"],
101.
$_REQUEST["a_gpslat"],
102.
$_REQUEST["a_gpslon"],
103.
$_REQUEST["a_datecreated"] );
104.
105.
if ($results === false) {
106.
$userUiMessage .= '<div class="editmessageError">Erreur sauvegarde (id='.$id.') :'.$myplace->lasterror.'</div>';
107.
$sqlError = true;
108.
}
109.
else
110.
$userUiMessage .= '<div class="editmessageInfo">Sauvegarde effectuée (id='.$id.')</div>';
111.
}
112.
else
113.
{
114.
$results = $myplace->insert(
115.
$_REQUEST["a_name"],
116.
$_REQUEST["a_description"],
117.
$_REQUEST["a_private"],
118.
$_REQUEST["a_icon"],
119.
$_REQUEST["a_adress1"],
120.
$_REQUEST["a_adress2"],
121.
$_REQUEST["a_zipcode"],
122.
$_REQUEST["a_city"],
123.
$_REQUEST["a_cityinsee"],
124.
$_REQUEST["a_country"],
125.
$_REQUEST["a_url"],
126.
$_REQUEST["a_gpslat"],
127.
$_REQUEST["a_gpslon"],
128.
$_REQUEST["a_datecreated"] );
129.
echo '<div class="editmessage">';
130.
if ($results === false) {
131.
$userUiMessage .= '<div class="editmessageError">Erreur de création :'.$myplace->lasterror.'</div>';
132.
$sqlError = true;
133.
}
134.
else {
135.
$id=$myplace->lastInsertId;
136.
$userUiMessage .= '<div class="editmessageInfo">Création effectuée (id='.$id.')</div>';
137.
}
138.
}
139.
}
140.
141.
// Suppression
142.
if(isset($_POST['submitDelete']))
143.
{
144.
if ($id > 0) {
145.
$results = $myplace->delete( $id );
146.
147.
if ($results === false) {
148.
$userUiMessage .= '<div class="editmessageError">Erreur Suppression (id='.$id.') :'.$myplace->lasterror.'</div>';
149.
$sqlError = true;
150.
}
151.
else {
152.
$userUiMessage .= '<div class="editmessageInfo">Suppression effectuée (id='.$id.')</div>';
153.
$id = -1;
154.
}
155.
156.
}
157.
}
158.
159.
// Select reccord by id :
160.
if ($sqlError === false ) {
161.
162.
if ( isset($_POST['submitSave']) || isset($_POST['submitDelete']) )
163.
$results = $myplace->select( $id );
164.
else {
165.
switch ($offset) {
166.
case '_PREV':
167.
$results = $myplace->selectPrev( $id );
168.
$id = $results[0]['a.id'];
169.
break;
170.
case '_NEXT':
171.
$results = $myplace->selectNext( $id );
172.
$id = $results[0]['a.id'];
173.
break;
174.
default:
175.
$results = $myplace->select( $id );
176.
break;
177.
}
178.
}
179.
180.
if ($results === false) {
181.
$userUiMessage .= '<div class="editmessageError">Erreur Sql : '.$myplace->lasterror.'</div>';
182.
$sqlError = true;
183.
}
184.
/*if ( empty($results) ) {
185.
$userUiMessage .= '<div class="editmessageInfo">Cet enregistrement n\'existe plus. id = '.$id.' </div>';
186.
$sqlError = true;
187.
}
188.
*/
189.
}
190.
else {
191.
$results[0]["a.id"] = $_REQUEST['a_id'];
192.
$results[0]["a.name"] = $_REQUEST['a_name'];
193.
$results[0]["a.description"] = $_REQUEST['a_description'];
194.
$results[0]["a.private"] = $_REQUEST['a_private'];
195.
$results[0]["a.icon"] = $_REQUEST['a_icon'];
196.
$results[0]["a.adress1"] = $_REQUEST['a_adress1'];
197.
$results[0]["a.adress2"] = $_REQUEST['a_adress2'];
198.
$results[0]["a.zipcode"] = $_REQUEST['a_zipcode'];
199.
$results[0]["a.city"] = $_REQUEST['a_city'];
200.
$results[0]["a.cityinsee"] = $_REQUEST['a_cityinsee'];
201.
$results[0]["a.country"] = $_REQUEST['a_country'];
202.
$results[0]["a.gpslat"] = $_REQUEST['a_gpslat'];
203.
$results[0]["a.gpslon"] = $_REQUEST['a_gpslon'];
204.
$results[0]["a.datecreated"] = $_REQUEST['a_datecreated'];
205.
$results[0]["a.url"] = $_REQUEST['a_url'];
206.
207.
}
208.
209.
$recordcount = $myplace->getCount();
210.
211.
echo '<div class="formtable">';
212.
213.
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https')
214.
=== FALSE ? 'http' : 'https';
215.
$host = $_SERVER['HTTP_HOST'];
216.
$script = $_SERVER['SCRIPT_NAME'];
217.
$params = $_SERVER['QUERY_STRING'];
218.
219.
$currentUrl = $protocol . '://' . $host . $script . '?' . $params;
220.
221.
// xxx fix enctype
222.
echo '<form id="editform" class="formedit pure-form pure-form-aligned" method="post" action="'.$currentUrl.'" enctype="multipart/form-data" >';
223.
224.
echo '<fieldset>';
225.
226.
echo '<legend style="display:inline-block" class="titleedit"><span title="Liste des adresses des événements" class="titleedit">Lieu</span> #'.($id==-1?'?':$id).'/'.$recordcount['count'];
227.
228.
echo '<div style="font-size:80%; float:right; display:inline-block;">'.$userUiMessage.'</div>';
229.
230.
echo '</legend>';
231.
?>
232.
233.
<input type="hidden" readonly name="a.id.value" value="<?php echo $results[0]["a.id"]; ?>" >
234.
235.
<div class="pure-control-group"><label for="aligned-name">id</label>
236.
<input type="{{edithidden}}" readonly name="a.id" value="<?php echo $results[0]["a.id"]; ?>"
237.
style="width:6em;" ><span class="pure-form-message-inline"></span>
238.
</div>
239.
240.
<div class="pure-control-group"><label title="name" for="aligned-name">name</label>
241.
242.
243.
244.
245.
<input type="text" class="" name="a.name" id="a_name"
246.
value="<?php if ( $results[0]["a.name"] !='') echo $results[0]["a.name"]; else echo ''; ?>"
247.
style="width:30em;"
248.
>
249.
<div style="display:inline-block; color:red">*</div>
250.
251.
252.
253.
<span class="pure-form-message-inline"></span>
254.
255.
</div>
256.
257.
<div class="pure-control-group"><label title="description" for="aligned-name">description</label>
258.
259.
260.
261.
262.
<textarea text rows="4" cols="40" name="a.description" rows="4" cols="30" ><?php if ( $results[0]["a.description"] !='') echo $results[0]["a.description"]; else echo ''; ?></textarea>
263.
264.
265.
<span class="pure-form-message-inline"></span>
266.
267.
</div>
268.
269.
<div class="pure-control-group"><label title="private" for="aligned-name">private</label>
270.
271.
272.
273.
274.
<input type="checkbox" name="a.private"
275.
value="1"
276.
<?php echo ($results[0]["a.private"]==1?"checked='checked'":"") ?>
277.
>
278.
<div style="display:inline-block; color:red"> </div>
279.
280.
281.
<span class="pure-form-message-inline"></span>
282.
283.
</div>
284.
285.
<div class="pure-control-group"><label title="icon" for="aligned-name">icon</label>
286.
287.
288.
289.
290.
<input style="display:inline-block" type="file" class="" name="a.icon" id="a_icon"
291.
style="width:12em;"
292.
>
293.
294.
<input type="checkbox" name="a_icon_deletebefore" id="a_icon_deletebefore" title="Supprimer le fichier.">
295.
296.
<input type="hidden" class="" name="a_icon" id="a_icon"
297.
value="<?php echo $results[0]["a.icon"]; ?>"
298.
>
299.
<div style="display:inline-block; vertical-align:middle" >
300.
301.
<?php
302.
303.
if (file_exists($results[0]["a.icon"])) {
304.
305.
echo '<img width="50" height="50" style="width: 50px; height: 50px;" alt="'.$results[0]["a.icon"].'" title="'.$results[0]["a.icon"].'" src="'.$results[0]["a.icon"].' ">';
306.
} else {
307.
308.
echo '<img width="50" height="50" style="width: 50px; height: 50px;" alt="Image inexistante" title="Image inexistante" src="img/missing.png">';
309.
}
310.
311.
?>
312.
313.
</div>
314.
315.
316.
<span class="pure-form-message-inline"></span>
317.
318.
</div>
319.
320.
<div class="pure-control-group"><label title="adress1" for="aligned-name">adress1</label>
321.
322.
323.
324.
325.
<input type="text" class="" name="a.adress1" id="a_adress1"
326.
value="<?php if ( $results[0]["a.adress1"] !='') echo $results[0]["a.adress1"]; else echo ''; ?>"
327.
style="width:30em;"
328.
>
329.
<div style="display:inline-block; color:red"> </div>
330.
331.
332.
333.
<span class="pure-form-message-inline"></span>
334.
335.
</div>
336.
337.
<div class="pure-control-group"><label title="adress2" for="aligned-name">adress2</label>
338.
339.
340.
341.
342.
<input type="text" class="" name="a.adress2" id="a_adress2"
343.
value="<?php if ( $results[0]["a.adress2"] !='') echo $results[0]["a.adress2"]; else echo ''; ?>"
344.
style="width:30em;"
345.
>
346.
<div style="display:inline-block; color:red"> </div>
347.
348.
349.
350.
<span class="pure-form-message-inline"></span>
351.
352.
</div>
353.
354.
<div class="pure-control-group"><label title="zipcode" for="aligned-name">zipcode</label>
355.
356.
357.
358.
359.
<input type="text" class="" name="a.zipcode" id="a_zipcode"
360.
value="<?php if ( $results[0]["a.zipcode"] !='') echo $results[0]["a.zipcode"]; else echo ''; ?>"
361.
style="width:5em;"
362.
>
363.
<div style="display:inline-block; color:red"> </div>
364.
365.
366.
367.
<span class="pure-form-message-inline"></span>
368.
369.
</div>
370.
371.
<div class="pure-control-group"><label title="city" for="aligned-name">city</label>
372.
373.
374.
375.
376.
<input type="text" class="" name="a.city" id="a_city"
377.
value="<?php if ( $results[0]["a.city"] !='') echo $results[0]["a.city"]; else echo ''; ?>"
378.
style="width:12em;"
379.
>
380.
<div style="display:inline-block; color:red"> </div>
381.
382.
383.
384.
<span class="pure-form-message-inline"></span>
385.
386.
</div>
387.
388.
<div class="pure-control-group"><label title="cityinsee" for="aligned-name">cityinsee</label>
389.
390.
391.
392.
393.
<input type="text" class="" name="a.cityinsee" id="a_cityinsee"
394.
value="<?php if ( $results[0]["a.cityinsee"] !='') echo $results[0]["a.cityinsee"]; else echo ''; ?>"
395.
style="width:5em;"
396.
>
397.
<div style="display:inline-block; color:red"> </div>
398.
399.
400.
401.
<span class="pure-form-message-inline"></span>
402.
403.
</div>
404.
405.
<div class="pure-control-group"><label title="country" for="aligned-name">country</label>
406.
407.
408.
409.
410.
<input type="text" class="" name="a.country" id="a_country"
411.
value="<?php if ( $results[0]["a.country"] !='') echo $results[0]["a.country"]; else echo ''; ?>"
412.
style="width:15em;"
413.
>
414.
<div style="display:inline-block; color:red"> </div>
415.
416.
417.
418.
<span class="pure-form-message-inline"></span>
419.
420.
</div>
421.
422.
<div class="pure-control-group"><label title="gpslat" for="aligned-name">Lat</label>
423.
424.
425.
426.
427.
<input type="text" class="" name="a.gpslat" id="a_gpslat"
428.
value="<?php if ( $results[0]["a.gpslat"] !='') echo $results[0]["a.gpslat"]; else echo ''; ?>"
429.
style="width:8em;"
430.
>
431.
<div style="display:inline-block; color:red"> </div>
432.
433.
434.
435.
<span class="pure-form-message-inline"></span>
436.
437.
</div>
438.
439.
<div class="pure-control-group"><label title="gpslon" for="aligned-name">Lon</label>
440.
441.
442.
443.
444.
<input type="text" class="" name="a.gpslon" id="a_gpslon"
445.
value="<?php if ( $results[0]["a.gpslon"] !='') echo $results[0]["a.gpslon"]; else echo ''; ?>"
446.
style="width:8em;"
447.
>
448.
<div style="display:inline-block; color:red"> </div>
449.
450.
451.
452.
<span class="pure-form-message-inline"></span>
453.
454.
</div>
455.
456.
<div class="pure-control-group"><label title="datecreated" for="aligned-name">datecreated</label>
457.
458.
459.
460.
<span class="pure-form-message-inline"></span>
461.
462.
</div>
463.
464.
<div class="pure-control-group"><label title="" for="aligned-name">url</label>
465.
466.
467.
468.
469.
<input type="text" class="" name="a.url" id="a_url"
470.
value="<?php if ( $results[0]["a.url"] !='') echo $results[0]["a.url"]; else echo ''; ?>"
471.
style="width:30em;"
472.
>
473.
<div style="display:inline-block; color:red"> </div>
474.
475.
476.
477.
<span class="pure-form-message-inline"></span>
478.
479.
</div>
480.
481.
<?
482.
483.
echo ' <div class="pure-controls">'."\n";
484.
echo '<button type="submit" name = "submitSave" class="formbutton xpure-button xpure-button-primary">Enregistrer</button>'."\n";
485.
$confirmBox = "onclick=\"return confirm('Etes vous sûr de vouloir supprimer cet article ?')\"";
486.
if ($id > 0)
487.
echo '<button type="submit" name = "submitDelete" class="formbutton xpure-button xpure-button-primary" '.$confirmBox.' >Supprimer</button>'."\n";
488.
489.
490.
parse_str($_SERVER['QUERY_STRING'], $query_string);
491.
492.
if ($id != -1 and $id > $recordcount['minid'] ) {
493.
$urlPrev='';
494.
$query_string['id'] = $id;
495.
$query_string['offset'] = '_PREV';
496.
$paramPrev = http_build_query($query_string);
497.
$urlPrev = $protocol . '://' . $host . $script . '?' . $paramPrev;
498.
echo "<a class='formbutton' href='$urlPrev'>Précédent</a>\n";
499.
}
500.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Précédent</a>\n";
501.
502.
if ($id != -1 and $id < $recordcount['maxid'] ) {
503.
$urlNext='';
504.
$query_string['id'] = $id;
505.
$query_string['offset'] = '_NEXT';
506.
$paramNext = http_build_query($query_string);
507.
$urlNext = $protocol . '://' . $host . $script . '?' . $paramNext;
508.
echo "<a class='formbutton' href='$urlNext'>Suivant</a>\n";
509.
}
510.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Suivant</a>\n";
511.
512.
513.
echo '</div>'."\n";
514.
echo '</fieldset>'."\n";
515.
echo '</form>'."\n";
516.
517.
echo '</div>';
518.
519.
?>
520.
521.
522.
<script type="text/javascript">
523.
524.
$(document).ready(function(){
525.
526.
$(".selectlist").on("click", function() {
527.
startModal('selectplaceholder');
528.
//alert("Id du champ à remplir au retour : [" + $(this).attr('valuebackval') + "]");
529.
var url = "phpui/select_" + $(this).attr('valuetable') + ".php?valuebackfield=" + $(this).attr('valuebackfield') + '&valuebackval=' + $(this).attr('valuebackval');
530.
531.
$('#selectplaceholder').load(url, function() {
532.
$('#selectplaceholder').css("background-color", "white");
533.
$('#selectplaceholder').css("border", "1px solid #034668");
534.
//box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
535.
//-webkit-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
536.
//-moz-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
537.
$('#selectplaceholder').css("box-shadow", "5px 10px 12px -4px rgba(0,0,0,0.75)");
538.
$('#selectplaceholder').css("border-radius", "7px");
539.
});
540.
541.
});
542.
});
543.
544.
function startModal(id) {
545.
$("body").prepend(
546.
"<div id='PopupMask' style='position:fixed;width:100%;height:100%;z-index:10;background-color:gray;'></div>"+
547.
"<div style='position: fixed;top: 50%;left: 50%; transform: translate(-50%, -50%);' "+
548.
"id='selectplaceholder'><img width='180' height='60' src='img/loading.gif'></div>");
549.
$("#PopupMask").css('opacity', 0.5);
550.
$("#"+id).data('saveZindex', $("#"+id).css( "z-index"));
551.
$("#"+id).data('savePosition', $("#"+id).css( "position"));
552.
$("#"+id).css( "z-index" , 11 );
553.
$("#"+id).css( "position" , "fixed" );
554.
}
555.
556.
</script>
557.
558.
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
559.
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
560.
561.
<script>
562.
563.
// Disable autofill
564.
$(".datepicker").prop("autocomplete", "off");
565.
566.
$( function() {
567.
568.
$.datepicker.regional['fr'] = {
569.
yearRange: '1:2099',
570.
changeMonth: true,
571.
changeYear: true,
572.
closeText: 'Fermer',
573.
prevText: '<Préc',
574.
nextText: 'Suiv>',
575.
currentText: 'Aujourd\'hui',
576.
monthNames: ['Janvier','Fevrier','Mars','Avril','Mai','Juin',
577.
'Juillet','Aout','Septembre','Octobre','Novembre','Decembre'],
578.
monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun',
579.
'Jul','Aou','Sep','Oct','Nov','Dec'],
580.
dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
581.
dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
582.
dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
583.
weekHeader: 'Sm',
584.
dateFormat: 'dd/mm/yy',
585.
firstDay: 1,
586.
/*isRTL: false,*/
587.
/*showMonthAfterYear: false,*/
588.
/*yearSuffix: '',*/
589.
/*minDate: 0,*/
590.
/*maxDate: '+12M +0D',*/
591.
numberOfMonths: 1,
592.
showButtonPanel: true
593.
};
594.
595.
$.datepicker.setDefaults($.datepicker.regional['fr']);
596.
597.
$(".datepicker" ).datepicker().on("show", function() {
598.
var formDate = $(this).val()
599.
$(this).val(formDate).datepicker('update');
600.
});
601.
602.
} );
603.
604.
$("#over").remove();
605.
606.
// Page quit confirmation
607.
var form = $('#editform'),
608.
original = form.serialize()
609.
610.
form.submit(function(){
611.
$('body').append('<div id="over" style="background:rgba(0,0,0, 0.05); position:fixed; top:0; left:0; width:100%; height:100%;"> <img style="position:absolute; top:0; left:0; right:0; bottom:0; margin:auto;" width="180" height="60" src="img/loading.gif"> </div> ');
612.
window.onbeforeunload = null
613.
})
614.
615.
window.onbeforeunload = function(){
616.
if (form.serialize() != original)
617.
return "Confirmez-vous l'abandon de vos modifications ?"
618.
}
619.
620.
</script>
621.
622.