edit.ctp 8.25 KB
<?php

use App\Model\Table\MaterielsTable;
use Cake\Utility\Inflector;

$DEBUG = false;
//$DEBUG = true;


// Variables générales cakephp
$_REQUEST = $_REQUEST;
$_COOKIE = $_COOKIE;
$_ENV = $_ENV;
//debug($_COOKIE);
/*
[
    'CAKEPHP' => 'hiraigc02eb46spa06iiog6tvh'
]
*/
//debug($_ENV);
//debug($_REQUEST);

// Variables passées par le controleur
$CAN_EDIT = true;
$CAN_EDIT = $CAN_EDIT; 
$READONLY = $READONLY;
$contact = $contact;
$fieldsets = $fieldsets;
//debug($fieldsets);

$icon = $READONLY ? '' : "<i class='icon-edit'></i>";
//$icon = $READONLY ? '' : "<i class='icon-pencil'></i>";
//$end = $READONLY ? "(Visualisation)" : "(Modification)";
//$title = "Configuration des champs obligatoires ou non modifiables de la fiche Matériel $end";
$title = "Configuration des champs obligatoires ou non modifiables de la fiche Matériel";
echo "<br><h2>$icon $title</h2><br>";

/*
    Autres icones possibles :
echo "<br><h2><i class='icon-edit'></i> $title</h2><br><br>";
echo "<br><h2><i class='icon-list'></i> $title</h2><br><br>";
echo "<br><h2><i class='icon-plus'></i> $title</h2><br><br>";
echo "<br><h2><i class='icon-pencil'></i> $title</h2><br><br>";
echo "<br><h2><i class='icon-trash'></i> $title</h2><br><br>";
*/
function echo_buttons($READONLY, $CAN_EDIT, $helper) {
    if ($READONLY && $CAN_EDIT) {
        echo "<table><tr>";
            echo "<td>"; 
                $helper->echoEditButton(); 
            echo "</td>"; 
            echo "<td>"; 
                $helper->echoButtonForAction('icon-trash', 'reset-to-default', 'Remettre les valeurs par défaut', 'Remettre les valeurs par défaut', true);
            echo "</td>";
        echo "</tr></table>";
    }
}

echo_buttons($READONLY, $CAN_EDIT, $this->MyHelper);

?>

<div id="Présentation">

<p>
Cette page vous permet de configurer les <b>champs obligatoires, recommandés, et/ou readonly de la fiche matériel</b>, ce qui vous permet de customiser le comportement de ce logiciel selon vos besoins.
</p>

<p>
Il vous suffit de cocher/décocher les champs qui sont obligatoires (ou recommandés, ou readonly) à chaque étape (aussi appelée LOT) :
<ul>
    <li>(LOT-0) pour <b>créer</b> la fiche</li>

	<li>(LOT-1) pour <b>commander</b> un matériel (demande d'achat) : cette étape est optionnelle et désactivable (via cette même page web)</li>

	<li>(LOT-2) pour <b>valider</b> un matériel (le déclarer payé et livré)</li>
</ul>
</p>

</p>
En plus de définir les champs obligatoires, vous pouvez aussi définir :
<ul>
	<li>les champs <b>readonly</b>, qui ne sont plus modifiables APRÈS chaque étape</li>
	<li>les champs qui ne sont pas obligatoires mais <b>recommandés</b> APRÈS chaque étape : si un de ces champs n'est pas rempli après l'étape, un message de rappel est affiché sur la fiche détaillée du matériel pour inciter à remplir ce champ (mais sans obligation, juste un rappel systématique)</li>
</ul>
<br>

<p>
Enfin, si vous avez fait une erreur et voulez <b>revenir à la configuration par défaut</b>, pas de panique, il suffit de cliquer sur le bouton 'Remettre les valeurs par défaut'.
</p>
<br>
<hr>
<br>

</div>


<?php


//echo $this->Html->icon('pencil');

echo $this->Form->create($contact);

    if (!$READONLY) {
        echo $this->Form->button('Enregistrer', ['class'=>'btn btn-outline-success', 'type'=>'submit']);
        //echo $this->Form->button('Submit');
        echo '<br><br>';
    }
    
    //echo $this->Form->button($this->Html->icon('pencil'), ['escape' => false]);
    // ...can be easily rewritten as:
    //echo $this->Form->button('i:pencil');

    foreach ($fieldsets as $fieldset_name => $fields) {
        $controls = [];
        
        //foreach ($fields as $field) {
        foreach ($fields as $field_name => $attributes) {

            if ($field_name=='fieldset_comment') {
                $controls["$fieldset_name.fieldset_comment"] = [
                    'hidden' => true,
                    //'type' => 'text',
                    'type' => 'hidden',
                    'label' => false,
                    'val' => $attributes,
                    //'size' => 20,
                    //'disabled' => $READONLY,
                    //'readonly' => $READONLY,
                ];
                continue;
            }
            
            // champ activé ou désactivé
            $checked = $attributes['selected'];
            $comment = $attributes['comment'];
            $except_roles = isset($attributes['except_roles']) ? $attributes['except_roles'] : [];
            
            $name = "$fieldset_name.$field_name";

            // - CHAMP de la table materiel : Checkbox pour le dé/sélectionner
            $label = $field_name;
            if ($READONLY) {
                if ($comment) $label .= ' ('.$comment.')';
                if ($except_roles) $label .= ' (sauf '.implode(', ',$except_roles).')';
            }
            $controls["$name.selected"] = [
                'type' => 'checkbox',
                //'hiddenField' => true,
                'label' => $label,
                'checked' => $checked,
                'disabled' => $READONLY,
                //'readonly' =>$READONLY,
                //'readonly' => 'readonly',
            ];

            // (EDIT ONLY)
            // - Label associé au champ (entre parenthèses) doit pouvoir être modifié
            if (!$READONLY) $controls["$name.comment"] = [
                //'type' => 'input',
                'label' => false,
                'val' => $comment,
                //'size' => 20,
                //'disabled' => $READONLY,
                //'readonly' => $READONLY,
            ];
            
            // (EDIT ONLY)
            $fieldsets_with_roles = ['UNEDITABLE_FIELDS','UNEDITABLE_FIELDS_AFTER_LOT0', 'UNEDITABLE_FIELDS_AFTER_LOT1', 'UNEDITABLE_FIELDS_AFTER_LOT2'];
            // - ROLES exceptés (select multiple list)
            //if (!$READONLY && $field_name!='HAS_ORDER_BUTTON')
            if ( !$READONLY && in_array($fieldset_name, $fieldsets_with_roles) ) $controls["$name.except_roles"] = [
                'type' => 'select',
                'label' => '(excepté pour les rôles)',
                //'options' => ['<aucune exception>', 'user', 'admin', 'resp'],
                //'options' => ['Utilisateur', 'Responsable', 'Administration'],
                'options' => [
                    ['text' => 'Utilisateur', 'value' => 'Utilisateur'],
                    ['text' => 'Responsable', 'value' => 'Responsable'],
                    ['text' => 'Administration', 'value' => 'Administration'],
                ],
                //'val' => ['Responsable', 'Utilisateur'],
                'val' => $except_roles,
                'multiple' => 'checkbox',
                //'size' => 20,
                'disabled' => $READONLY,
            ];
            
        } // foreach $fields
        
        // https://api.cakephp.org/3.5/class-Cake.View.Helper.FormHelper.html#_controls
        $DEBUG && debug($controls);
        /*
        $fieldset_name_with_comment = $fieldset_name; 
        if ( isset($fields['fieldset_comment']) ) $fieldset_name_with_comment .= ' ('. $fields['fieldset_comment'] .')';
        */
        
        //echo $this->MyHelper->echoSectionStart($fieldset_name, Inflector::humanize($fieldset_name));
        echo $this->MyHelper->echoSectionStart($fieldset_name, true, $fields['fieldset_comment'], ' ');
            echo $this->Form->controls(
                // fields
                $controls,
                // options
                [
                    //'legend' => $fields['fieldset_comment'],
                    'legend' => false,
                    /*
                    // paramètres html
                    'id' => "t_$fieldset_name",
                    'class' => 'toggle',
                    */
                ]
            );
        echo $this->MyHelper->echoSectionStop();
        
    } // foreach $fieldsets
        
    /*
    echo $this->Form->control('name');
    echo $this->Form->control('email');
    echo $this->Form->control('body');
    */
    
    if (!$READONLY) 
        echo $this->Form->button('Enregistrer', ['class'=>'btn btn-outline-success', 'type'=>'submit']);
        //echo $this->Form->button('Submit');
    

echo $this->Form->end();


echo_buttons($READONLY, $CAN_EDIT, $this->MyHelper);
//if ($READONLY && $CAN_EDIT) $this->MyHelper->echoEditButton();