view.ctp 9.06 KB
<?php

/*
 * ****************************** 
 * VUE DÉTAILLÉE GÉNÉRIQUE (view)
 * ****************************** 
 */

/*
use App\Controller\SurCategoriesController;
use Cake\ORM\Entity;
use App\Model\Entity\GroupesThematique;
use App\Model\Entity\GroupesMetier;
*/

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

// Arguments passés par le contrôleur

$CAN_EDIT = $CAN_EDIT;
$CAN_DELETE = $CAN_DELETE;
// Optionnel (pour categories...)
$CAN_ADD_SUB_ENTITY = isset($CAN_ADD_SUB_ENTITY) ? $CAN_ADD_SUB_ENTITY : false;


$role = $role;

$id = $id;

$entity = $entity;
//debug($entity);
//$parent_entity_infos=$parent_entity_infos;
$parent_entities_infos = $parent_entities_infos;
//$parent_entities_infos['groupes_thematique_id']['improved'] = 'groupe_thematique_with_resp';
//$parent_entities_infos['groupes_metier_id']['improved'] = 'groupe_metier_with_resp';
//debug($parent_entities_infos);
$fields_label = $fields_label;
/*
$parent_entity_controller_name = $parent_entity_controller_name;
$parent_entity_type_name = $parent_entity_type_name;
$parent_entity_name = $parent_entity_name;
$parent_entity_id = $parent_entity_id;
*/

//$categories = $categories;
//$materiels = $materiels;
$entity_article = $entity_article;
$entity_type_name_singular = $entity_type_name_singular;
$entity_name = $entity_name;

// Liste des entités à afficher (en tant qu'entité associée) :
// En général, par défaut : "Matériels associés" et "Utilisateurs associés"
$child_entities_list = $child_entities_list;
$excluded = $excluded;

// OPTIONNELS
if (isset($sub_controller)) {
    $sub_controller = $sub_controller;
    $sub_controller_singular = $sub_controller_singular;
}
    
// Fonctions
//$displayElement = $displayElement;

//debug($entity);
//debug($entity->getSource());
//exit;

?>


<!-- 
<div class="surCategories view">
 -->
<div class="Entity view">

	<!-- 
	<h2>Informations sur <=$entity_article.$entity_type_name_singular.' "'.$entity_name.'"'?></h2>
	 -->
	<h2><?=ucfirst($entity_type_name_singular).' "'.$entity_name.'"'?></h2>
	
	<?= $this->Html->link("Voir toutes les entités (liste)", ['action'=>'index']) ?>
	<br />
	<br />

	<div id="boutons" class="actions" style="margin-bottom:20px; width:100%; float:none; padding:5px 0;">
    	
    	<!--  BOUTONS edit / delete -->
    	<?php

    	$bStyle = 'margin-right: 10px';

    	// Bouton Modifier
    	/*
    	$CAN_EDIT = in_array($role, [
    	   //'Administration Plus',
    	   'Administration',
    	   'Super Administrateur'
        ]);
        */
    	if ($CAN_EDIT) $this->MyHelper->echoActionButton('icon-pencil', $bStyle, '', 'edit', $entity->id,
    	   null, [], 'Modifier'
    	);

        // - Lien Supprimer
    	if ($CAN_DELETE) $this->MyHelper->echoDeleteButton('', $entity->id);

        ?>
        
	</div>
	
	
	<div id="FIELDS">
        
        <table style="margin-bottom: 30px;">
        
        <tr>
            <!-- Label -->
            <th style="width: 250px;"></th>
            <!-- Value -->
            <th></th>
        </tr>
        
        <?php

        /* 
         * I - Affichage des champs de l'entité (nom, description, ...)
         * 
         *  avec les entités associées "PARENTES" (groupes metier/thema, projet, user, ...)
         */
        
        //debug($entity);
        //debug($fields_label);
        //debug($parent_entities_infos); 
        foreach ($entity->toArray() as $fname=>$fval) {
            if (in_array($fname, $excluded)) continue;
            if ( $fval!==null && $fname!='id' && $fname!='description' && !is_array($fval) ) {
                //debug($fname);
                //debug($fval);
                $flabel = ucfirst($fields_label[$fname]);
                $fvalue = $fval;
                // Si le champ n'est pas une FK (terminant par '_id') => on l'affiche directement
                //if ( strpos($fname,'_id') !== strlen($fname)-3 )
                if ( substr($fname,-3)!='_id' )
                    $this->MyHelper->displayTableRowLabelAndValue(__($flabel), h($fvalue));
                // Si le champ est une FK => on récupère la valeur du 'contained'
                else {
                    //debug($fname);
                    $parent_entity_infos = &$parent_entities_infos[$fname];
                    //debug($parent_entity_infos);
                    $fk_contained_name = $parent_entity_infos['fk_contained_name'];
                    //debug($fk_contained_name);
                    //$fvalue = $associated_entity_infos['name'];
                    
                    //$fvalue = $entity->$fk_contained_name->nom;
                    $fk_field = isset($parent_entity_infos['improved']) ? $parent_entity_infos['improved'] : null;
                    $fvalue = $fk_field ? $entity->$fk_field : $entity->$fk_contained_name->nom;
                    
                    $this->MyHelper->displayTableRowLabelAndValue(
                        __(ucfirst($parent_entity_infos['type_name'])),
                        //$category->has('sur_category') ? $this->Html->link($category->sur_category->nom, [
                        $this->Html->link($fvalue, [
                            'controller' => $parent_entity_infos['controller_name'],
                            //'controller' => 'SurCategories',
                            'action' => 'view',
                            //$associated_entity_infos['id']
                            $fval
                            //$category->sur_category->id
                        ])
                    );
                }
                //$this->MyHelper->displayElement(__(ucfirst($fname)), h($fval));
            } // if
        } // foreach

        ?>

    </table>
    
    <!-- champ DESCRIPTION (affichage spécial pour sauts de lignes) -->
    <!-- 
    <=$this->Text->autoParagraph(h($entity->description));?>
     -->
    <?php 
    if ($entity->has('description') && $entity->description) {
        echo "<b><u>Description :</b></u>";
        echo "<br/><br/>";
        echo $this->Text->autoParagraph(h($entity->description));
        echo "<br/><br/>";
    }
    ?>
    
	</div> <!-- FIELDS -->
    
    
	<!-- Bouton "Ajouter" pour ajouter un sous-élément -->
	<div id="add_sub_entity">
	<?php
	if (isset($sub_controller)) {
    	if ($CAN_ADD_SUB_ENTITY) echo $this->element('button_add', compact(
    	    'id',
        	'sub_controller',
    	    'sub_controller_singular'
    	));
    	//echo "<br />";
	}
	?>
	</div> <!-- add_sub_entity -->
	

	<!-- II - Affichage des entités associées "ENFANTS" (matériels, utilisateurs, ...) -->
	<div id="associated_data">

	<?php
	//debug($entity);
	//debug($child_entities_list);
	foreach ($child_entities_list as $child_controller_name => $es) {
	    //debug($es);
	    // function displaySectionShowHide($controller_name, $entity_type_name, $title, $id_name, $is_masculine, $name_field_name, $entities) {
	    $fk_contained_name = $es['fk_contained_name'];
	    //debug($entity->$fk_contained_name);
	    //$entities = $entity->$fk_contained_name;
	    //debug($entities); exit;
	    
	    /* (EP202010)
	     * CAS TRES PARTICULIER DES UTILISATEURS ASSOCIÉS À UN GROUPE THÉMATIQUE OU MÉTIER
	     * => On ajoute à chaque nom d'utilisateur la mention '(responsable)' s'il est responsabble du groupe 
	     * (bidouille, pas très clean, mais difficile de gérer des cas très particuliers dans des algos génériques...)
	     */
	    if ( 
	       ($entity instanceof GroupesThematique || $entity instanceof GroupesMetier)
	       && 
	       $child_controller_name == 'Users'
        ) {
            $f_isresp_name = ($entity instanceof GroupesThematique) ? 'is_resp_groupes_thematique' : 'is_resp_groupes_metier';
            foreach ($entity->$fk_contained_name as $user)
                if ($user->$f_isresp_name) $user->nom = $user->nom.' (responsable)';
	    }
	    
	    $this->MyHelper->displayAssociatedEntitiesAsSectionShowHide(
    	    //$es['controller_name'],
	        $child_controller_name,
    	    $es['entity_type_name_singular'],
    	    $es['entity_title'],
    	    //$es['id_name'],
    	    $es['is_masculin'],
    	    $es['name_field_label'],
	        $entity->$fk_contained_name
	    );
	    /*
	    $this->MyHelper->displayAssociatedEntitiesAsSectionShowHide(
	       $es['controller_name'],
	       $es['entity_type_name_singular'],
	       $es['entity_title'], 
	       //$es['id_name'], 
	       $es['is_masculin'], 
	       $es['name_field_label'], 
	       $es['entities'] 
	    );
	    */
    	//displaySectionShowHide($this->Html, false, 'Aucune catégorie liée', 'categs', 'Catégories', $categories, 'nom', 'Categories', 'catégorie');
    	//$this->MyButton->displaySectionShowHide(false, 'Aucune catégorie liée', 'categs', 'Catégories', $categories, 'nom', 'Categories', 'catégorie');
    	//$this->MyButton->displaySectionShowHide(true, 'Aucun matériel lié', 'materiels', 'Matériels', $materiels, 'designation', 'Materiels', 'matériel');
	}
	?>
	
	</div> <!-- associated_data -->
	

</div> <!-- General div (Entity) -->

<!--
<div class="actions">
			<php echo $this->element('menu') ?>
			<php

echo $this->element('menu_view', [
    'pluralHumanName' => 'Domaines',
    'singularHumanName' => 'Domaine',
    'lien' => $surCategory->id
])?>
		</div>
-->