Mise en place pour l'onglet Planning des vacances
Après avoir créé l'onglet Gestion plages de vacances, créer ce nouvel Onglet nécessite moins de fichiers.
A la racine du module dPpersonnel, on a les fichiers :
-
vw_planning_vacances.php : c'est le contrôleur principal du planning
-
ajax_planning.php : ce contrôleur est appelé lorsque le planning est rechargé en ajax
Et au niveau du dossier templates :
-
vw_planning_vacances.tpl : la vue principale du planning, elle inclue inc_planning.tpl et inc_planning_annee.tpl qui seront affichés en ajax.
-
inc_planning.tpl : les modes semaine et mois sont compris dans cette vue
-
inc_planning_annee.tpl : cette vue contient le mode année
-
vw_conge.tpl : ce fichier contient la vue qui est appelée dans le module mediusers, accessible par le bouton Mon compte, puis dans le volet Congés.
Le secret du drag & drop
Tout réside dans l'utilisation de Scriptaculous.
On déclare un élément comme étant draggable.
Ensuite, on a définit la propriété snap : c'est-à-dire un pas pour le déplacement de cet élément. L'ajout de l'attribut Constraint avec pour valeur Horizontal permet de limiter le déplacement de l'élément selon une ligne horizontale.
Enfin, la propriété onEnd permet d'associer une fonction à appeler quand l'élément est droppé. Cette fonction va appeler le contrôleur do_plagevac_aed pour enregistrer les modifications apportées sur la plage qui a subi le drag & drop. De plus, cela permet de ne pas réactualiser tout le planning.
Un détail technique : il faut également également être en mesure de replacer une plage qui rentrerait en conflit avec une autre plage, c'est-à-dire si accidentellement une partie ou toute une plage est déposée sur une zone qu'une autre plage occupe déjà. Dans ce cas, la plage déposée doit revenir à sa place initiale. Pour ce faire, une autre propriété onStart existe. On lui associe la fonction savePosition qui sauvegarde la position de la plage au moment où on clique dessus pour la dragger.
|