etudiants:2014:jeremy.habit:docuwiki

Ceci est une ancienne révision du document !


Docu-Pro

Etablissement

Une grande surface spécialisée dans différents secteurs (notion de Monde).

Développement

Il s'agit de créer un gestionnaire de documentation adapté à une entreprise, qui permettra aux salariés de gérer/créer puis consulter/rechercher dans une documentation partagée.

Outils

  • Développement sous Eclipse.
  • Utilisation de doctrine, DAO, JsUtils.
  • Utilisation du framework CodeIgniter.

Langages

  • PHP
  • MySQL
  • jquery

Fonctionnalité : Recherche quelconque

• Définition de la fonctionnalité :

La fonctionnalité « rechercher » permettra donc à un membre de saisir une valeur puis de choisir le type de recherche. Recherche de type document, theme, utilisateur, groupe, domaine, monde ou bien de tout type.

• Contenu

1/ La valeur recherchée et le choix du type seront récupérés en paramètre dans une fonction :

function SearchBar ($valeurRecherchée, $type=utilisateur)

La fonction sera appelée via le click d’un bouton représentant une image de loupe, logo habituellement associé à la recherche et/ou via un keyPress de la touche Entrée.

2/ Ensuite ces valeurs seront retransmises vers une deuxième fonction : cette dernière contiendra donc plusieurs requêtes SQL selon le type du style :

SELECT id, tnom FROM utilisateur WHERE nom like '%valeurrecherhée%'

3/ Enfin, il faudra afficher pour chaque résultat un lien permettant à l’utilisateur d’afficher le contenu d’un monde par exemple, ou le contenu d’un document. Il sera donc appelé au click, une troisième fonction qui contiendra l’id de l’élement cliqué ainsi que son type!

Exemples : si on clique sur le monde informatique ayant pour id=2, cette troisième fonction récupère donc l’integer 2 et le type=monde et exécute une requête du style :

If (type==monde){ SELECT * FROM domaines WHERE idmonde =2 ; }

Controleur

→ Un seul contrôleur « CRecherche ».

Voici les fonctions :

Nom Description
index() Charge les vues
_construct() Charge la librairie pour les sessions
search() Récupère la valeur recherchée ainsi que les cases cochées par l'utilisateur puis retourne ces informations vers resultatSearch()
resultatSearch() Effectue les requêtes SQL selon les cases cochées et la valeur recherchée. Tout type de résultat est géré (valeur recherchée nulle, aucun résultat après la recherche,etc)
loadViewExecSearch() Fonction exécutée au click d'un résultat : si on clique sur un monde, cette fonction se chargera d'afficher les domaines contenus dans ce dernier. Si on clique sur un domaine, sera alors affichés les thèmes présents dans ce domaine, etc

Vues

Nom Description
vHeader Affichage de l’en tête de la page
vMenu Affichage du menu à gauche
vRecherche Affichage de la zone de saisie pour la recherche, les cases a cochées et une zone consacrées aux résultats
vResultatRecherche Affichage des résultats dans la zone prévue dans la vue vRecherche
vExecSearch Affichage des informations concernant l'élément cliqué toujours dans la zone prévue dans la vue vRecherche
v_footer Affichage du pied-de-page

Base de donnée

! Remarque :

  • il faut supprimer les ORM pour les models Utilisateur, Partie et Version.
  • Des modifications sont nécessaires sur la base de donnés : dans la table partie, il faut rajouter un champ document_id, qui est donc en relation avec la table document. Pensez à ajouter ce dernier champ au model Partie sur eclipse !
  • Dans la fonction loadViewExecSearch, le click sur un utilisateur n'a pas encore été traité. Des modifications de la base de données sont nécessaires pour cela.

		public function search(){			
		// on récupere la valeur recherchée
		$searched=$_POST['searchBar'];
		// stock l'array des casés cochées en session (le temps d'une requête)
		$caseChecked=$_POST['Recherche'];
		$this->session->set_flashdata('caseChecked', $caseChecked);
	
		// get avec la valeur recherchée par l'utilisateur vers resultatSearch
		$this->jsutils->get("CRecherche/resultatSearch/".$searched,"#SearchResultContainer");
		echo $this->jsutils->compile();
	}

Fonction resultatSearch()

	public function resultatSearch($searched){
		$caseChecked=$this->session->flashdata('caseChecked');
		$searched=urldecode($searched);
		if ($searched=='undefined')
		{
			$src=ressource_url('sad.png');
			echo "<div class='NoResult'>
					<img src='".$src."'/>
					<h1 class='recherche'>Aucune valeur saisie !</h1>
				</div>";
		}else{
			$documents=array();
			$groupes=array();
			$domaines=array();
			$utilisateurs=array();
			$themes=array();
			$mondes=array();
			$tablesNeeded=array();
				
			foreach($caseChecked as $valeur)
			{
				if ($valeur=="tout"){
					$documents=DAO\getAll("document","o.titre LIKE '%".$searched."%'");
					$groupes=DAO\getAll("groupe","o.libelle LIKE '%".$searched."%'");
					$domaines=DAO\getAll("domaine","o.libelle LIKE '%".$searched."%'");
					$utilisateurs=DAO\getAll("utilisateur","o.prenom LIKE '%".$searched."%' OR o.nom LIKE '%".$searched."%'");
					$themes=DAO\getAll("theme","o.libelle LIKE '%".$searched."%'");
					$mondes=DAO\getAll("monde","o.libelle LIKE '%".$searched."%'");
					$allResult=array($documents,$groupes,$domaines,$utilisateurs,$themes,$mondes);
					$i=0;
					foreach($allResult as $typeRes)
					{	$strTablesName="";
					$i++;
					if (!empty($typeRes)){
						switch ($i){
							case 1:
								$strTablesName="document";
								break;
							case 2:
								$strTablesName="groupe";
								break;
							case 3:
								$strTablesName="domaine";
								break;
							case 4:
								$strTablesName="utilisateur";
								break;
							case 5:
								$strTablesName="theme";
								break;
							case 6:
								$strTablesName="monde";
								break;
						}
						array_push($tablesNeeded, $strTablesName);
					}
					}
				}else{
					if ($valeur=="groupe" OR $valeur=="domaine" OR $valeur=="theme" OR $valeur=="monde"){
						${$valeur."s"}=DAO\getAll($valeur,"o.libelle LIKE '%".$searched."%'");
					}else{
						if ($valeur=="document"){
							${$valeur."s"}=DAO\getAll($valeur,"o.titre LIKE '%".$searched."%'");
						}else{
							${$valeur."s"}=DAO\getAll($valeur,"o.prenom LIKE '%".$searched."%' OR o.nom LIKE '%".$searched."%'");
						}
					}
					$allResult=array();
					$allResultName=array();
					array_push($allResult, ${$valeur."s"});
					array_push($allResultName, $valeur);
					$i=0;
					foreach ($allResult as $typeRes){
						$strTablesName="";
						if (!empty($typeRes)){
							$strTablesName=$allResultName[$i];
							array_push($tablesNeeded, $strTablesName);
						}
						$i++;
					}
				}
					
			}
				
			$this->jsutils->getAndBindTo(".eltRes_text_world", "click", "CRecherche/loadViewExecSearch/monde","#SearchResultContainer","{'eltId': $(this).attr('id')}");
			$this->jsutils->getAndBindTo(".eltRes_text_user", "click", "CRecherche/loadViewExecSearch/utilisateur","#SearchResultContainer","{'eltId': $(this).attr('id')}");
			$this->jsutils->getAndBindTo(".eltRes_text_grp", "click", "CRecherche/loadViewExecSearch/groupe","#SearchResultContainer","{'eltId': $(this).attr('id')}");
			$this->jsutils->getAndBindTo(".eltRes_text_doc", "click", "CRecherche/loadViewExecSearch/document","#SearchResultContainer","{'eltId': $(this).attr('id')}");
			$this->jsutils->getAndBindTo(".eltRes_text_dom", "click", "CRecherche/loadViewExecSearch/domaine","#SearchResultContainer","{'eltId': $(this).attr('id')}");
			$this->jsutils->getAndBindTo(".eltRes_text_thm", "click", "CRecherche/loadViewExecSearch/theme","#SearchResultContainer","{'eltId': $(this).attr('id')}");
			$this->jsutils->compile();
			$this->load->view('vResultatRecherche',array("documents"=>$documents,"groupes"=>$groupes,"domaines"=>$domaines,"utilisateurs"=>$utilisateurs,"themes"=>$themes,"mondes"=>$mondes,"searched"=>$searched,"tablesNeeded"=>$tablesNeeded));
		}
	}
	

Exemple DQL (doctrine)

<?php
//Création de la requête d'update
$query = $this->doctrine->em->createQuery("UPDATE utilisateur u SET u.nom ='%$nom%' WHERE u.id=1"); 
//Exécution de la requête.
$search = $contenu->execute();

Avant Aprés
  • etudiants/2014/jeremy.habit/docuwiki.1419863316.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)