Mooc :: Le framework puzzleApp

Plus qu'un tutoriel vous retrouvez ici le détail du coeur du framework

Leçon Les applications

Dans puzzleApp on parle d'application plutôt que de module ou plugin, car chaque application est indépendante et contient tout le code nécessaire pour qu'elle fonctionne.

1. Architecture d'une application 

Chaque application est constitué :

  • d'un fichier XXX.php : qui est le coeur de l'application coté php
  • d'un fichier XXX.js : qui est le coeur de l'application coté javascript
  • d'un fichier XXX.css : pour définir les styles des composants
  • d'un fichier XXX.xml : qui est le fichier d'interface coté backoffice
  • d'un dossier Db : contenant tous les scripts sql afin de pouvoir ajouter/supprimer les tables proprement dans votre base de donnée
  • d'un dossier Entity : qui sont toutes les entités métiers. Chaque entité fait le lien entre votre base de données et les différentes vue
  • d'un dossier Helper : qui sont des classe d'aide pour organiser correctement votre code
  • dun dossier Model : contenant les model, un model fait le lien entre vos entité et le controller
  • d'un dosser Module : chaque module gére un fonctionnalité spécifique

Chaque application est concue pour apporter du contenu coté front en géneral via le module Front et le controler FronController.

Ce module n'est pas automatiquement implaté par l'ide car votre application ne peut rien avoir à gérer coté front.

Comme par exemple l'application newsletter, celle-ci permet d'envoyer des emails en masse à vos contacts, tout ce fait donc coté Administrateur.

 

Par contre chaque application contient un module Home car celui-ci est utilisé par l'administration.

Toute la partie administration est en Ajax pure afin d'offrir une meilleur expérince utilisateur.

 

2. Fonctions importantes

 

Lorsque le DashBoard JS lance votre application elle appelle la fonction Load de votre application. 

Profitez en alors pour placer ici le code qui initalise les évenements ( comme les click sur vos bouton ...)

exemple : forum.js

/*
 * Chargement de l'application
 */
 Forum.Load = function(parameter)
 {
   this.LoadEvent();
  };

/*
 * Chargement des évenements
 */
 Forum.LoadEvent = function()
 {
   Dashboard.AddEventAppMenu(Forum.Execute, "", "Forum");
   Dashboard.AddEventWindowsTool("Forum");
 
   Dashboard.AddEventById("btnNewDiscussion", "click", ForumAction.ShowNewDiscussion);
   Dashboard.AddEventById("btnHome", "click", ForumAction.ReturnHome);
};

/*
* Gestion des évenements
*/
ForumAction = fucntion(){};

/*
* Démarre une nouvelle discussion
*/
ForumAction.ShowNewDiscussion()
{
}

/*
* Retourne à la page d'accueil
*/
ForumAction.ReturnHome()
{
}

 

 

 

3.Interactions entre applications 

Toutes les applications peuvent intéragir entre elle via le DashboardManager. Il suffit de les appeller et d'utiliser les méthodes partagées.

Exemple avec l'application de notification Notify. Elle posséde la méthôde suivante

/**
 * Ajoute une notification
 * 
 * @param type $userId
 * @param type $DestinataireId
 * @param type $AppName
 * @param type $EntityId
 * @param type $Code
 */
 public function AddNotify($userId, $code, $destinataireId= "", $AppName = "", $EntityId = "",  
                           $emailSubjet ="" , $emailMessage="")
 {
      NotifyHelper::AddNotify($this->Core, $userId, $code, $destinataireId, $AppName, $EntityId, 
                              $emailSubjet, $emailMessage);
 }

Paramétres : 

  • $userId: Identifiant de celui qui lance la notifiaction
  • $code : Code de la notification
  • $destinataireId : identifiant de l'utilisateur qui recevera la notification
  • $AppName : nom de l'application qui lance la notification
  • $EntityId : Identifiant de l'élement qui lance la notification
  • $emailSubjet : sujet de l'email
  • $emailMessage : message de l'email

Cette méthôde ajoute une notification d'un utilisateur vers un destinataire et lui envoie un email.

Exemple d'appel :

//Envoi d'un notification au porteur de projet
$Notify = DashboarManager::GetApp("Notify", $this->Core);
$Notify->AddNotify($this->Core->User->IdEntite, $this->Core->GetCode("EeProjet.NewEmailTesteur"), $projet->UserId->Value, "Projet", $projet->IdEntite,  $this->Core->GetCode("Projet.AddEmailLandingPageEmailSubject"), $this->Core->GetCode("Projet.AddEmailLandingPageEmailMessage"));