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