template/php2/template/phpui/edit_{{table}}.tpl
1.
<?php
2.
 
3.
/*
4.
 
5.
        Formulaire d'édition pour la table : {{table}}.
6.
 
7.
        {{datetime}}
8.
 
9.
        {{author}}
10.
         
11.
        {{licence}}
12.
 
13.
*/
14.
ID:editsort
15.
include_once "dbconnect.php";
16.
include_once "phpdb/class_{{table}}.php";
17.
include_once "phpdb/class_{{table}}_ext.php";
18.
 
19.
if (isset($_REQUEST['{{mainprefix}}_{{idkeyname}}_value']))    $id=$_REQUEST['{{mainprefix}}_{{idkeyname}}_value'];
20.
else 
21.
    if (isset($_REQUEST['{{idkeyname}}']))    $id=$_REQUEST['{{idkeyname}}'];
22.
    else die("Erreur : _REQUEST['id'] est manquant.");  
23.
                
24.
if (isset($_REQUEST['offset']))
25.
    $offset=$_REQUEST['offset'];
26.
else 
27.
    $offset '';
28.
 
29.
if (isset($_REQUEST['cle']))
30.
    $cle=$_REQUEST['cle'];
31.
else 
32.
    $cle '';
33.
 
34.
 
35.
$userUiMessage="";
36.
  
37.
// Class instance
38.
$my{{table}} = new {{table}}( $db );
39.
 
40.
%% ID:formupload 
41.
// Traitement des fichiers télédéposés
42.
 
43.
if ( isset($_REQUEST['{{mainprefix}}_{{fieldname}}_deletebefore']) && file_exists($_REQUEST["{{mainprefix}}_{{fieldname}}"])) {    
44.
    unlink($_REQUEST['{{mainprefix}}_{{fieldname}}']);
45.
    $_REQUEST['{{mainprefix}}_{{fieldname}}'] = '';
46.
}
47.
if(isset($_FILES['{{mainprefix}}_{{fieldname}}']) && $_FILES['{{mainprefix}}_{{fieldname}}']['name'] != '' ){
48.
 
49.
      $errors= array();
50.
      $file_name $_FILES['{{mainprefix}}_{{fieldname}}']['name'];
51.
      $file_size $_FILES['{{mainprefix}}_{{fieldname}}']['size'];
52.
      $file_tmp $_FILES['{{mainprefix}}_{{fieldname}}']['tmp_name'];
53.
      $file_type $_FILES['{{mainprefix}}_{{fieldname}}']['type'];
54.
      $file_ext=strtolower(end(explode('.',$_FILES['{{mainprefix}}_{{fieldname}}']['name'])));
55.
           
56.
      $extensions= array( {{extfile}} );
57.
      
58.
      if(in_array($file_ext,$extensions)=== false){
59.
         $errors[]="Extensions autorisées : {{extfile}}.";
60.
      }
61.
      
62.
      if($file_size > {{maxsize}} ) {
63.
         $errors[]='Taille maximum fichier : {{maxsize}} octets.';
64.
      }
65.
      
66.
      if(empty($errors)==true) {
67.
        $dest_dir="{{destdir}}";
68.
                    
69.
        if ( file_exists($_REQUEST['{{mainprefix}}_{{fieldname}}'] ) ) {
70.
            $userUiMessage='<div class="editmessageError">Le fichier existe déjà : '.$_REQUEST["{{mainprefix}}_{{fieldname}}"].'</div>';
71.
        }
72.
        else {
73.
            move_uploaded_file($file_tmp,$dest_dir.$file_name);
74.
            $_REQUEST['{{mainprefix}}_{{fieldname}}']= $dest_dir.$file_name// Database url doc update        
75.
            $userUiMessage .= '<div class="editmessageInfo">Fichier déposé : '.$dest_dir.$file_name.'</div>';        
76.
        }
77.
      }else{
78.
        $userUiMessage .= '<div class="editmessageError">';    
79.
        $userUiMessage .= 'Erreur upload :';
80.
        foreach ($errors as $verr) {
81.
            $userUiMessage .= $verr.'<br>';
82.
        }        
83.
        $userUiMessage .= '</div>';                  
84.
      }
85.
}   
86.
%%
87.
 
88.
$sqlError false;
89.
 
90.
// Sauvegarde 
91.
if(isset($_POST['submitSave'])) 
92.
93.
    if ($id 0) {
94.
        $results $my{{table}}->update( {{fieldlistrequest}} ); 
95.
 
96.
        if ($results === false) {           
97.
            $userUiMessage .= '<div class="editmessageError">Erreur sauvegarde (id='.$id.') :'.$my{{table}}->lasterror.'</div>';        
98.
            $sqlError true;
99.
        }
100.
        else 
101.
            $userUiMessage .= '<div class="editmessageInfo">Sauvegarde effectuée (id='.$id.')</div>';   
102.
        // $userUiMessage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];      
103.
    }
104.
    else 
105.
    {
106.
        $results $my{{table}}->insert( {{fieldlistrequestnoid}}  ); 
107.
        echo '<div class="editmessage">';
108.
        if ($results === false) {
109.
            $userUiMessage .= '<div class="editmessageError">Erreur de création :'.$my{{table}}->lasterror.'</div>';        
110.
            $sqlError true;
111.
        }
112.
        else {
113.
            $id=$my{{table}}->lastInsertId;
114.
            $userUiMessage .= '<div class="editmessageInfo">Création effectuée (id='.$id.')</div>';
115.
            //$userUiMessage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
116.
        }        
117.
    }
118.
}
119.
 
120.
// Suppression
121.
if(isset($_POST['submitDelete'])) 
122.
123.
    if ($id 0) {
124.
        $results $my{{table}}->delete$id ); 
125.
 
126.
        if ($results === false) {
127.
            $userUiMessage .= '<div class="editmessageError">Erreur Suppression (id='.$id.') :'.$my{{table}}->lasterror.'</div>';
128.
            $sqlError true;
129.
        }
130.
        else {
131.
            $userUiMessage .= '<div class="editmessageInfo">Suppression effectuée (id='.$id.')</div>';
132.
            $id = -1;
133.
        }
134.
        
135.
    }
136.
}
137.
 
138.
// Select reccord by id :
139.
if ($sqlError === false ) {
140.
    
141.
    if ( isset($_POST['submitSave']) || isset($_POST['submitDelete']) ) 
142.
        $results $my{{table}}->select$id );
143.
    else {
144.
        switch ($offset) {
145.
            /*case '_PREV':
146.
                $results = $my{{table}}->selectPrev( $id );
147.
                $id = $results[0]['{{mainprefix}}.{{idkeyname}}'];
148.
                break;
149.
            case '_NEXT':
150.
                $results = $my{{table}}->selectNext( $id );
151.
                $id = $results[0]['{{mainprefix}}.{{idkeyname}}'];
152.
                break;
153.
            */
154.
            default:
155.
                $results $my{{table}}->select$id );
156.
                break;
157.
        }                
158.
    }
159.
        
160.
    if ($results === false) {           
161.
        $userUiMessage .= '<div class="editmessageError">Erreur Sql : '.$my{{table}}->lasterror.'</div>';        
162.
        $sqlError true;
163.
    }
164.
    /*if ( empty($results) ) {           
165.
        $userUiMessage .= '<div class="editmessageInfo">Cet enregistrement n\'existe plus. {{idkeyname}} = '.$id.'  </div>';        
166.
        $sqlError = true;
167.
    }
168.
    */    
169.
}
170.
else {     
171.
        $results[0]["{{mainprefix}}.{{idkeyname}}"] = $_REQUEST['{{mainprefix}}_{{idkeyname}}'];    
172.
        %%$results[0]["{{mainprefix}}.{{fieldname}}"] = $_REQUEST['{{mainprefix}}_{{fieldname}}'];
173.
        %%
174.
    }
175.
 
176.
//echo 'CLE='.$cle.'<br>';
177.
 
178.
$recordcount $my{{table}}->getCount();
179.
 
180.
echo '<div class="formtable">';
181.
 
182.
$protocol $_SERVER['REQUEST_SCHEME'];
183.
$host     $_SERVER['HTTP_HOST'];
184.
$script   $_SERVER['SCRIPT_NAME'];
185.
$params   $_SERVER['QUERY_STRING'];
186.
 
187.
$currentUrl $protocol '://' $host $script '?' $params;
188.
 
189.
// xxx  fix enctype
190.
echo '<form id="editform" class="formedit pure-form pure-form-aligned" method="post" action="'.$currentUrl.'"  enctype="multipart/form-data" >';
191.
 
192.
echo '<fieldset>';
193.
 
194.
echo '<legend style="display:inline-block" class="titleedit"><span title="{{tabledes}}" class="titleedit">{{tablelib}}</span> #'.($id==-1?'?':$id).'/'.$recordcount['count'];
195.
echo '<div style="font-size:80%; float:right; display:inline-block;">'.$userUiMessage.'</div>';
196.
echo '</legend>';
197.
?>
198.
199.
<input type="hidden" readonly name="{{mainprefix}}.{{idkeyname}}.value" value="<?php echo $results[0]["{{mainprefix}}.{{idkeyname}}"]; ?>" >
200.
 
201.
<div class="pure-control-group"><label for="aligned-name">{{idkeyeditlib}}</label>
202.
        <input type="{{edithidden}}" readonly name="{{mainprefix}}.{{idkeyname}}" value="<?php echo $results[0]["{{mainprefix}}.{{idkeyname}}"]; ?>"         
203.
        style="width:{{idkeyeditlen}}em;" ><span class="pure-form-message-inline"></span>
204.
</div>
205.
%%        
206.
        <div class="pure-control-group"><label title="{{metades}}" for="aligned-name">{{editlib}}</label>
207.
    
208.
            ##editype=uploaddoc 
209.
                <input style="display:inline-block" type="file" class="{{datepickerclass}}" name="{{mainprefix}}.{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
210.
                style="width:{{editlen}}em;" 
211.
                >    
212.
                
213.
                <input type="checkbox" name="{{mainprefix}}_{{fieldname}}_deletebefore" id="{{mainprefix}}_{{fieldname}}_deletebefore" title="Supprimer le fichier.">
214.
                                
215.
                <input type="hidden" class="" name="{{mainprefix}}_{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
216.
                value="<?php echo $results[0]["{{mainprefix}}.{{fieldname}}"]; ?>"
217.
                >
218.
                <div style="display:inline-block; vertical-align:middle" >
219.
                <?php
220.
                    if (file_exists($results[0]["{{mainprefix}}.{{fieldname}}"])) {
221.
                        $ext pathinfo$results[0]["{{mainprefix}}.{{fieldname}}"], PATHINFO_EXTENSION); 
222.
                        echo '<a href="'.$results[0]["{{mainprefix}}.{{fieldname}}"].'">';
223.
                        echo '<div style="display:inline-block; vertical-align:middle" class="fi fi-'.$ext.'">
224.
                            <div title="'.$results[0]["{{mainprefix}}.{{fieldname}}"].'" class="fi-content">'.$ext.'</div>
225.
                        </div>';    
226.
                        echo '</a>';                
227.
                    }                
228.
                ?>
229.
                </div>
230.
            ##    
231.
            
232.
            ##editype=uploadpic 
233.
                <input style="display:inline-block" type="file" class="{{datepickerclass}}" name="{{mainprefix}}.{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
234.
                style="width:{{editlen}}em;" 
235.
                >    
236.
                
237.
                <input type="checkbox" name="{{mainprefix}}_{{fieldname}}_deletebefore" id="{{mainprefix}}_{{fieldname}}_deletebefore" title="Supprimer le fichier.">
238.
                                                
239.
                <input type="hidden" class="" name="{{mainprefix}}_{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
240.
                value="<?php echo $results[0]["{{mainprefix}}.{{fieldname}}"]; ?>"
241.
                >    
242.
                <div style="display:inline-block; vertical-align:middle" >
243.
                    
244.
                    <?php
245.
                    
246.
                    if (file_exists($results[0]["{{mainprefix}}.{{fieldname}}"])) {
247.
                        
248.
                        echo '<img width="{{width}}" height="{{height}}" style="width: {{width}}px; height: {{height}}px;" alt="'.$results[0]["{{mainprefix}}.{{fieldname}}"].'" title="'.$results[0]["{{mainprefix}}.{{fieldname}}"].'" src="'.$results[0]["{{mainprefix}}.{{fieldname}}"].' ">';
249.
                    } else {
250.
                        
251.
                        echo '<img width="{{width}}" height="{{height}}" style="width: {{width}}px; height: {{height}}px;" alt="Image inexistante" title="Image inexistante" src="img/missing.png">';            
252.
                    }            
253.
                        
254.
                    ?>                    
255.
                    
256.
                </div>
257.
            ##
258.
            
259.
            ##editype=input 
260.
                <input type="{{edithidden}}" {{editread}} class="{{datepickerclass}}" name="{{mainprefix}}.{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
261.
                value="<?php if ( $results[0]["{{mainprefix}}.{{fieldname}}"] !='') echo $results[0]["{{mainprefix}}.{{fieldname}}"]; else echo {{defaultvalue}}; ?>"
262.
                style="width:{{editlen}}em;" 
263.
                >            
264.
                <div style="display:inline-block; color:red">{{notnull}}</div>
265.
                
266.
            ##
267.
 
268.
            ##editype=color 
269.
                <input type="color" {{editread}} name="{{mainprefix}}.{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
270.
                value="<?php if ( $results[0]["{{mainprefix}}.{{fieldname}}"] !='') echo $results[0]["{{mainprefix}}.{{fieldname}}"]; else echo {{defaultvalue}}; ?>"
271.
                style="padding: 3px; margin:0; height:{{height}}em; width:{{width}}em;" 
272.
                
273.
                >            
274.
                <div style="display:inline-block; color:red">{{notnull}}</div>
275.
                
276.
            ##
277.
 
278.
            ##editype=url 
279.
                <input type="{{edithidden}}" {{editread}} class="{{datepickerclass}}" name="{{mainprefix}}.{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
280.
                value="<?php if ( $results[0]["{{mainprefix}}.{{fieldname}}"] !='') echo $results[0]["{{mainprefix}}.{{fieldname}}"]; else echo {{defaultvalue}}; ?>"
281.
                style="width:{{editlen}}em;" 
282.
                >    
283.
                <div style="display:inline-block; color:red">{{notnull}}</div>                
284.
                <a href="<?php if ( $results[0]["{{mainprefix}}.{{fieldname}}"] !='') echo $results[0]["{{mainprefix}}.{{fieldname}}"]; else echo {{defaultvalue}}; ?>" target="_blank" " >Ouvrir</a>
285.
 
286.
            ##
287.
                        
288.
            ##editype=textarea 
289.
                <textarea {{editread}} {{edithidden}} rows="{{rows}}" cols="{{cols}}" name="{{mainprefix}}.{{fieldname}}" rows="4" cols="{{editlen}}" ><?php if ( $results[0]["{{mainprefix}}.{{fieldname}}"] !='') echo $results[0]["{{mainprefix}}.{{fieldname}}"]; else echo {{defaultvalue}}; ?></textarea>
290.
            ##
291.
            
292.
            ##editype=checkbox 
293.
                <input type="checkbox" {{editread}} name="{{mainprefix}}.{{fieldname}}" 
294.
                value="1" 
295.
                <?php echo ($results[0]["{{mainprefix}}.{{fieldname}}"]==1?"checked='checked'":""?>
296.
                >
297.
                <div style="display:inline-block; color:red">{{notnull}}</div>
298.
            ##
299.
        
300.
            ##editype=select 
301.
                <select {{editread}} name="{{mainprefix}}.{{fieldname}}" >
302.
                    {{selectoptionvalues}}                    
303.
                </select>
304.
                <div style="display:inline-block; color:red">{{notnull}}</div>
305.
            ##        
306.
        
307.
            ##editype=selectmulti 
308.
                <select {{editread}} name="{{mainprefix}}.{{fieldname}}" size="3" multiple >
309.
                    <option value="1">1</option>
310.
                    <option value="2">2</option>
311.
                    <option value="3">3</option>                
312.
                </select>
313.
                <div style="display:inline-block; color:red">{{notnull}}</div>
314.
            ##        
315.
            
316.
            ##editype=selectfk 
317.
                <input type="{{edithidden}}" {{editread}} name="{{mainprefix}}.{{fieldname}}" id="{{mainprefix}}_{{fieldname}}" 
318.
                value="<?php echo $results[0]["{{mainprefix}}.{{fieldname}}"]; ?>
319.
                style="width:{{editlen}}em;" 
320.
                >
321.
                <input readonly type="text" style="width:{{fkeditlen}}em;"  id="valback_{{mainprefix}}_{{fieldname}}"  value="<?php echo ($results[0]["{{fkvalue}}"]) ;?>">
322.
                <div style="display:inline-block; color:red">{{notnull}}</div>
323.
                <a class="selectlist" valuetable="{{fktable}}" valuefield="{{fkfield}}" valuebackfield="{{mainprefix}}_{{fieldname}}" valuebackval="valback_{{mainprefix}}_{{fieldname}}" href="#" >Select</a>    
324.
            ##
325.
                        
326.
            <span class="pure-form-message-inline"></span>    
327.
                                
328.
        </div>
329.
%%
330.
<?
331.
 
332.
echo ' <div class="pure-controls">'."\n";
333.
echo '<button type="submit" name = "submitSave" class="formbutton xpure-button xpure-button-primary">Enregistrer</button>'."\n";
334.
$confirmBox "onclick=\"return confirm('Etes vous sûr de vouloir supprimer cet article ?')\"";
335.
if ($id 0)
336.
    echo '<button type="submit" name = "submitDelete" class="formbutton xpure-button xpure-button-primary" '.$confirmBox.'  >Supprimer</button>'."\n";
337.
 
338.
/*
339.
parse_str($_SERVER['QUERY_STRING'], $query_string);
340.
 
341.
 
342.
if ($id != -1 and $id > $recordcount['minid'] ) {     
343.
    $urlPrev='';
344.
    $query_string['id'] = $id;
345.
    $query_string['offset'] = '_PREV';
346.
    $paramPrev = http_build_query($query_string);
347.
    $urlPrev = $protocol . '://' . $host . $script . '?' . $paramPrev;
348.
    echo "<a class='formbutton' href='$urlPrev'>Précédent</a>\n";
349.
}
350.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Précédent</a>\n";
351.
 
352.
if ($id != -1 and $id < $recordcount['maxid']  ) { 
353.
    $urlNext='';
354.
    $query_string['id'] = $id;
355.
    $query_string['offset'] = '_NEXT';
356.
    $paramNext = http_build_query($query_string);
357.
    $urlNext = $protocol . '://' . $host . $script . '?' . $paramNext;
358.
    echo "<a class='formbutton' href='$urlNext'>Suivant</a>\n";
359.
}
360.
else echo "<a class='formbutton' style='color:gray; pointer-events: none' href=''>Suivant</a>\n";
361.
*/
362.
    
363.
echo '</div>'."\n";
364.
echo '</fieldset>'."\n";
365.
echo '</form>'."\n";
366.
 
367.
echo '</div>';
368.
 
369.
?>
370.
371.
 
372.
<script type="text/javascript">
373.
    
374.
    $(document).ready(function(){
375.
        
376.
        $(".selectlist").on("click", function() {            
377.
            startModal('selectplaceholder');                                    
378.
            //alert("Id du champ à remplir au retour : [" + $(this).attr('valuebackval')  + "]");
379.
            var url = "phpui/select_" + $(this).attr('valuetable') + ".php?valuebackfield=" + $(this).attr('valuebackfield') + '&valuebackval=' + $(this).attr('valuebackval');
380.
            
381.
            $('#selectplaceholder').load(url, function() {
382.
                $('#selectplaceholder').css("background-color", "white");
383.
                $('#selectplaceholder').css("border", "1px solid #034668");
384.
                //box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
385.
                //-webkit-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
386.
                //-moz-box-shadow: 5px 10px 12px -4px rgba(0,0,0,0.75);
387.
                $('#selectplaceholder').css("box-shadow", "5px 10px 12px -4px rgba(0,0,0,0.75)");                
388.
                $('#selectplaceholder').css("border-radius", "7px");
389.
            });            
390.
            
391.
        });
392.
    });
393.
 
394.
    function startModal(id) {
395.
        $("body").prepend(
396.
            "<div id='PopupMask' style='position:fixed;width:100%;height:100%;z-index:10;background-color:gray;'></div>"+
397.
            "<div style='position: fixed;top: 50%;left: 50%; transform: translate(-50%, -50%);' "+
398.
                "id='selectplaceholder'><img  width='180' height='60' src='img/loading.gif'></div>");
399.
        $("#PopupMask").css('opacity', 0.5);  
400.
        $("#"+id).data('saveZindex', $("#"+id).css( "z-index"));
401.
        $("#"+id).data('savePosition', $("#"+id).css( "position"));
402.
        $("#"+id).css( "z-index" , 11 );
403.
        $("#"+id).css( "position" , "fixed" );
404.
    }
405.
 
406.
</script>
407.
 
408.
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
409.
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
410.
 
411.
<script>
412.
 
413.
    // Disable autofill
414.
    $(".datepicker").prop("autocomplete", "off");
415.
 
416.
    $( function() {
417.
        
418.
        $.datepicker.regional['fr'] = {
419.
                yearRange: '1:2099',
420.
                changeMonth: true,
421.
                changeYear: true,
422.
                closeText: 'Fermer',
423.
                prevText: '&#x3c;Préc',
424.
                nextText: 'Suiv&#x3e;',
425.
                currentText: 'Aujourd\'hui',
426.
                monthNames: ['Janvier','Fevrier','Mars','Avril','Mai','Juin',
427.
                'Juillet','Aout','Septembre','Octobre','Novembre','Decembre'],
428.
                monthNamesShort: ['Jan','Fev','Mar','Avr','Mai','Jun',
429.
                'Jul','Aou','Sep','Oct','Nov','Dec'],
430.
                dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
431.
                dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
432.
                dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
433.
                weekHeader: 'Sm',
434.
                dateFormat: 'dd/mm/yy',
435.
                firstDay: 1,
436.
                /*isRTL: false,*/
437.
                /*showMonthAfterYear: false,*/
438.
                /*yearSuffix: '',*/
439.
                /*minDate: 0,*/
440.
                /*maxDate: '+12M +0D',*/
441.
                numberOfMonths: 1,
442.
                showButtonPanel: true
443.
            };
444.
                        
445.
        $.datepicker.setDefaults($.datepicker.regional['fr']);
446.
                
447.
        $(".datepicker" ).datepicker().on("show", function() {
448.
                            var formDate = $(this).val()                            
449.
                            $(this).val(formDate).datepicker('update');
450.
                        });
451.
                                
452.
    } );
453.
 
454.
    $("#over").remove();
455.
    
456.
    // Page quit confirmation
457.
    var form = $('#editform'),
458.
      original = form.serialize()
459.
 
460.
    form.submit(function(){
461.
        $('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> ');
462.
        window.onbeforeunload = null
463.
    })
464.
 
465.
    window.onbeforeunload = function(){
466.
      if (form.serialize() != original)
467.
        return "Confirmez-vous l'abandon de vos modifications ?"
468.
    }
469.
 
470.
</script>
471.
  
472.