projects/genea/out/phpui/edit_metadata.php
1.
<?php
2.
 
3.
/*
4.
 
5.
        Formulaire d'édition pour la table : metadata.
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_metadata.php";
17.
include_once "phpdb/class_metadata_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.
$mymetadata = new metadata$db );
33.
 
34.
 
35.
 
36.
$sqlError false;
37.
 
38.
// Sauvegarde 
39.
if(isset($_POST['submitSave'])) 
40.
41.
    if ($id 0) {
42.
        $results $mymetadata->update
43.
$_REQUEST["a_id"], 
44.
$_REQUEST["a_name"], 
45.
$_REQUEST["a_code"], 
46.
$_REQUEST["a_value"], 
47.
$_REQUEST["a_type"], 
48.
$_REQUEST["a_description"] ); 
49.
 
50.
        if ($results === false) {           
51.
            $userUiMessage .= '<div class="editmessageError">Erreur sauvegarde (id='.$id.') :'.$mymetadata->lasterror.'</div>';        
52.
            $sqlError true;
53.
        }
54.
        else 
55.
            $userUiMessage .= '<div class="editmessageInfo">Sauvegarde effectuée (id='.$id.')</div>';        
56.
    }
57.
    else 
58.
    {
59.
        $results $mymetadata->insert
60.
$_REQUEST["a_name"], 
61.
$_REQUEST["a_code"], 
62.
$_REQUEST["a_value"], 
63.
$_REQUEST["a_type"], 
64.
$_REQUEST["a_description"]  ); 
65.
        echo '<div class="editmessage">';
66.
        if ($results === false) {
67.
            $userUiMessage .= '<div class="editmessageError">Erreur de création :'.$mymetadata->lasterror.'</div>';        
68.
            $sqlError true;
69.
        }
70.
        else {
71.
            $id=$mymetadata->lastInsertId;
72.
            $userUiMessage .= '<div class="editmessageInfo">Création effectuée (id='.$id.')</div>';
73.
        }        
74.
    }
75.
}
76.
 
77.
// Suppression
78.
if(isset($_POST['submitDelete'])) 
79.
80.
    if ($id 0) {
81.
        $results $mymetadata->delete$id ); 
82.
 
83.
        if ($results === false) {
84.
            $userUiMessage .= '<div class="editmessageError">Erreur Suppression (id='.$id.') :'.$mymetadata->lasterror.'</div>';
85.
            $sqlError true;
86.
        }
87.
        else {
88.
            $userUiMessage .= '<div class="editmessageInfo">Suppression effectuée (id='.$id.')</div>';
89.
            $id = -1;
90.
        }
91.
        
92.
    }
93.
}
94.
 
95.
// Select reccord by id :
96.
if ($sqlError === false ) {
97.
    
98.
    if ( isset($_POST['submitSave']) || isset($_POST['submitDelete']) ) 
99.
        $results $mymetadata->select$id );
100.
    else {
101.
        switch ($offset) {
102.
            case '_PREV':
103.
                $results $mymetadata->selectPrev$id );
104.
                $id $results[0]['a.id'];
105.
                break;
106.
            case '_NEXT':
107.
                $results $mymetadata->selectNext$id );
108.
                $id $results[0]['a.id'];
109.
                break;
110.
            default:
111.
                $results $mymetadata->select$id );
112.
                break;
113.
        }                
114.
    }
115.
        
116.
    if ($results === false) {           
117.
        $userUiMessage .= '<div class="editmessageError">Erreur Sql : '.$mymetadata->lasterror.'</div>';        
118.
        $sqlError true;
119.
    }
120.
    /*if ( empty($results) ) {           
121.
        $userUiMessage .= '<div class="editmessageInfo">Cet enregistrement n\'existe plus. id = '.$id.'  </div>';        
122.
        $sqlError = true;
123.
    }
124.
    */    
125.
}
126.
else {     
127.
        $results[0]["a.id"] = $_REQUEST['a_id'];    
128.
        $results[0]["a.code"] = $_REQUEST['a_code'];
129.
        $results[0]["a.name"] = $_REQUEST['a_name'];
130.
        $results[0]["a.value"] = $_REQUEST['a_value'];
131.
        $results[0]["a.type"] = $_REQUEST['a_type'];
132.
        $results[0]["a.description"] = $_REQUEST['a_description'];
133.
        
134.
    }
135.
 
136.
$recordcount $mymetadata->getCount();
137.
 
138.
echo '<div class="formtable">';
139.
 
140.
$protocol strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https'
141.
                === FALSE 'http' 'https';
142.
$host     $_SERVER['HTTP_HOST'];
143.
$script   $_SERVER['SCRIPT_NAME'];
144.
$params   $_SERVER['QUERY_STRING'];
145.
 
146.
$currentUrl $protocol '://' $host $script '?' $params;
147.
 
148.
// xxx  fix enctype
149.
echo '<form id="editform" class="formedit pure-form pure-form-aligned" method="post" action="'.$currentUrl.'"  enctype="multipart/form-data" >';
150.
 
151.
echo '<fieldset>';
152.
 
153.
echo '<legend style="display:inline-block" class="titleedit"><span title="Param&egrave;tres et m&eacute;tadonn&eacute;es" class="titleedit">Param&egrave;tre</span> #'.($id==-1?'?':$id).'/'.$recordcount['count'];
154.
 
155.
echo '<div style="font-size:80%; float:right; display:inline-block;">'.$userUiMessage.'</div>';
156.
 
157.
echo '</legend>';
158.
?>
159.
160.
<input type="hidden" readonly name="a.id.value" value="<?php echo $results[0]["a.id"]; ?>" >
161.
 
162.
<div class="pure-control-group"><label for="aligned-name">id</label>
163.
        <input type="{{edithidden}}" readonly name="a.id" value="<?php echo $results[0]["a.id"]; ?>"         
164.
        style="width:12em;" ><span class="pure-form-message-inline"></span>
165.
</div>
166.
        
167.
        <div class="pure-control-group"><label title="code" for="aligned-name">code</label>
168.
    
169.
            
170.
            
171.
            
172.
                <input type="text"  class="" name="a.code" id="a_code" 
173.
                value="<?php if ( $results[0]["a.code"] !='') echo $results[0]["a.code"]; else echo ''?>"
174.
                style="width:12em;" 
175.
                >            
176.
                <div style="display:inline-block; color:red">&nbsp;</div>
177.
                
178.
            
179.
                        
180.
            <span class="pure-form-message-inline"></span>    
181.
                                
182.
        </div>
183.
        
184.
        <div class="pure-control-group"><label title="name" for="aligned-name">name</label>
185.
    
186.
            
187.
            
188.
            
189.
                <input type="text"  class="" name="a.name" id="a_name" 
190.
                value="<?php if ( $results[0]["a.name"] !='') echo $results[0]["a.name"]; else echo ''?>"
191.
                style="width:30em;" 
192.
                >            
193.
                <div style="display:inline-block; color:red">*</div>
194.
                
195.
            
196.
                        
197.
            <span class="pure-form-message-inline"></span>    
198.
                                
199.
        </div>
200.
        
201.
        <div class="pure-control-group"><label title="value" for="aligned-name">value</label>
202.
    
203.
            
204.
            
205.
            
206.
                <input type="text"  class="" name="a.value" id="a_value" 
207.
                value="<?php if ( $results[0]["a.value"] !='') echo $results[0]["a.value"]; else echo ''?>"
208.
                style="width:30em;" 
209.
                >            
210.
                <div style="display:inline-block; color:red">*</div>
211.
                
212.
            
213.
                        
214.
            <span class="pure-form-message-inline"></span>    
215.
                                
216.
        </div>
217.
        
218.
        <div class="pure-control-group"><label title="type" for="aligned-name">type</label>
219.
    
220.
            
221.
        
222.
            
223.
                <select  name="a.type" >
224.
                    <option  value="" <?php if ($results[0]["a.type"]=="") echo "selected"?>  >Pas de type</option>
225.
<option  value="gedcom" <?php if ($results[0]["a.type"]=="gedcom") echo "selected"?>  >Meta données Gedcom</option>
226.
<option  value="mailto" <?php if ($results[0]["a.type"]=="mailto") echo "selected"?>  >Url Mailto</option>
227.
<option  value="href" <?php if ($results[0]["a.type"]=="href") echo "selected"?>  >Url Href</option>
228.
                    
229.
                </select>
230.
                <div style="display:inline-block; color:red">&nbsp;</div>
231.
            
232.
                        
233.
            <span class="pure-form-message-inline"></span>    
234.
                                
235.
        </div>
236.
        
237.
        <div class="pure-control-group"><label title="description" for="aligned-name">description</label>
238.
    
239.
            
240.
                        
241.
            
242.
                <textarea  text rows="4" cols="40" name="a.description" rows="4" cols="12" ><?php if ( $results[0]["a.description"] !='') echo $results[0]["a.description"]; else echo ''?></textarea>
243.
            
244.
                        
245.
            <span class="pure-form-message-inline"></span>    
246.
                                
247.
        </div>
248.
 
249.
<?
250.
 
251.
echo ' <div class="pure-controls">'."\n";
252.
echo '<button type="submit" name = "submitSave" class="formbutton xpure-button xpure-button-primary">Enregistrer</button>'."\n";
253.
$confirmBox "onclick=\"return confirm('Etes vous sûr de vouloir supprimer cet article ?')\"";
254.
if ($id 0)
255.
    echo '<button type="submit" name = "submitDelete" class="formbutton xpure-button xpure-button-primary" '.$confirmBox.'  >Supprimer</button>'."\n";
256.
 
257.
 
258.
parse_str($_SERVER['QUERY_STRING'], $query_string);
259.
 
260.
if ($id != -and $id $recordcount['minid'] ) {     
261.
    $urlPrev='';
262.
    $query_string['id'] = $id;
263.
    $query_string['offset'] = '_PREV';
264.
    $paramPrev http_build_query($query_string);
265.
    $urlPrev $protocol '://' $host $script '?' $paramPrev;
266.
    echo "<a class='formbutton' href='$urlPrev'>Précédent</a>\n";
267.
}
268.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Précédent</a>\n";
269.
 
270.
if ($id != -and $id $recordcount['maxid']  ) { 
271.
    $urlNext='';
272.
    $query_string['id'] = $id;
273.
    $query_string['offset'] = '_NEXT';
274.
    $paramNext http_build_query($query_string);
275.
    $urlNext $protocol '://' $host $script '?' $paramNext;
276.
    echo "<a class='formbutton' href='$urlNext'>Suivant</a>\n";
277.
}
278.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Suivant</a>\n";
279.
 
280.
    
281.
echo '</div>'."\n";
282.
echo '</fieldset>'."\n";
283.
echo '</form>'."\n";
284.
 
285.
echo '</div>';
286.
 
287.
?>
288.
289.
 
290.
<script type="text/javascript">
291.
    
292.
    $(document).ready(function(){
293.
        
294.
        $(".selectlist").on("click", function() {            
295.
            startModal('selectplaceholder');                                    
296.
            //alert("Id du champ à remplir au retour : [" + $(this).attr('valuebackval')  + "]");
297.
            var url = "phpui/select_" + $(this).attr('valuetable') + ".php?valuebackfield=" + $(this).attr('valuebackfield') + '&valuebackval=' + $(this).attr('valuebackval');
298.
            
299.
            $('#selectplaceholder').load(url, function() {
300.
                $('#selectplaceholder').css("background-color", "white");
301.
                $('#selectplaceholder').css("border", "1px solid #034668");
302.
                //box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
303.
                //-webkit-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
304.
                //-moz-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
305.
                $('#selectplaceholder').css("box-shadow", "5px 10px 12px -4px rgba(0,0,0,0.75)");                
306.
                $('#selectplaceholder').css("border-radius", "7px");
307.
            });            
308.
            
309.
        });
310.
    });
311.
 
312.
    function startModal(id) {
313.
        $("body").prepend(
314.
            "<div id='PopupMask' style='position:fixed;width:100%;height:100%;z-index:10;background-color:gray;'></div>"+
315.
            "<div style='position: fixed;top: 50%;left: 50%; transform: translate(-50%, -50%);' "+
316.
                "id='selectplaceholder'><img  width='180' height='60' src='img/loading.gif'></div>");
317.
        $("#PopupMask").css('opacity', 0.5);  
318.
        $("#"+id).data('saveZindex', $("#"+id).css( "z-index"));
319.
        $("#"+id).data('savePosition', $("#"+id).css( "position"));
320.
        $("#"+id).css( "z-index" , 11 );
321.
        $("#"+id).css( "position" , "fixed" );
322.
    }
323.
 
324.
</script>
325.
 
326.
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
327.
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
328.
 
329.
<script>
330.
 
331.
    // Disable autofill
332.
    $(".datepicker").prop("autocomplete", "off");
333.
 
334.
    $( function() {
335.
        
336.
        $.datepicker.regional['fr'] = {
337.
                yearRange: '1:2099',
338.
                changeMonth: true,
339.
                changeYear: true,
340.
                closeText: 'Fermer',
341.
                prevText: '&#x3c;Préc',
342.
                nextText: 'Suiv&#x3e;',
343.
                currentText: 'Aujourd\'hui',
344.
                monthNames: ['Janvier','Fevrier','Mars','Avril','Mai','Juin',
345.
                'Juillet','Aout','Septembre','Octobre','Novembre','Decembre'],
346.
                monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun',
347.
                'Jul','Aou','Sep','Oct','Nov','Dec'],
348.
                dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
349.
                dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
350.
                dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
351.
                weekHeader: 'Sm',
352.
                dateFormat: 'dd/mm/yy',
353.
                firstDay: 1,
354.
                /*isRTL: false,*/
355.
                /*showMonthAfterYear: false,*/
356.
                /*yearSuffix: '',*/
357.
                /*minDate: 0,*/
358.
                /*maxDate: '+12M +0D',*/
359.
                numberOfMonths: 1,
360.
                showButtonPanel: true
361.
            };
362.
                        
363.
        $.datepicker.setDefaults($.datepicker.regional['fr']);
364.
                
365.
        $(".datepicker" ).datepicker().on("show", function() {
366.
                            var formDate = $(this).val()                            
367.
                            $(this).val(formDate).datepicker('update');
368.
                        });
369.
                                
370.
    } );
371.
 
372.
    $("#over").remove();
373.
    
374.
    // Page quit confirmation
375.
    var form = $('#editform'),
376.
      original = form.serialize()
377.
 
378.
    form.submit(function(){
379.
        $('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> ');
380.
        window.onbeforeunload = null
381.
    })
382.
 
383.
    window.onbeforeunload = function(){
384.
      if (form.serialize() != original)
385.
        return "Confirmez-vous l'abandon de vos modifications ?"
386.
    }
387.
 
388.
</script>
389.
  
390.