Bonjour,

Ceci est las suite à un échange des messages qui était 
passé dans la liste glpi-user.


Mon collègue Arnaud Gomes demandait:

>> Dans la version actuelle de GLPI, il n'est apparemment >> pas
possible d'associer deux document entre eux.
>> ...

Question à laquelle Julien avait répondu:

> Effectivement cette possibilité n'est pas présente 
> dans GLPI.
> ...
> Il suffit de rendre les documents liables à d'autres 
> documents comme les autres éléments.
> Si vous faites des modifications en ce sens, il 
> pourrait être intéressant de nous les faire parvenir 
> pour les intégrer.
> Cela vous évitera de les réintégrer à chaque 
> nouvelle version.
        
Voici donc deux fichiers de patch,
- un pour la version "stable" 0.70.2
- un pour la version de developpement (0.71.*)
  (il passe sur la SVN de cette nuit).

Petite explication sur la nécessité
d'une UNION dans la requête SQL
(je sais c'est pas bien :<)

Si on lie les documents entre eux,
quand on affiche les documents "liés"
à un document D, on aimerait bien
voir à la fois les documents qui sont
pointés par D mais aussi ceux qui
pointent vers D.
Comme ça on fait la liaison dans le sens qu'on veut.

Essayez mon patch et vous comprendrez.

Cela permet de créer de \\dossiers virtuels
implicites de documents liés
sans changer la structure de la base
pas plus que les autres objets que les documents.

Julien avait raison, vous verrez qu'il
s'agit d'un patch tout petit: 
quelques lignes de plus dans deux requêtes SQL.

On en profite au passage pour afficher
les documents liés en les triant par nom 
par un ORDER de plus ...

Et bravo à l'équipe, c'est vraiment un plaisir de proposer des patchs
pour un si sympathique projet !

Laurent Ghys



*** front/document.form.php.dist	2008-03-12 22:03:50.000000000 +0100
--- front/document.form.php	2008-03-12 19:31:42.000000000 +0100
***************
*** 156,161 ****
--- 156,162 ----
  		switch ($_SESSION['glpi_onglet']){
  			case -1 :
  				showDeviceDocument($_GET["ID"]);
+ 				showDocumentAssociated(DOCUMENT_TYPE,$_GET["ID"]);
  				displayPluginAction(DOCUMENT_TYPE,$_GET["ID"],$_SESSION['glpi_onglet']);
  				break;
  			case 10 :
***************
*** 165,170 ****
--- 166,172 ----
  				if ($_GET["ID"]){
  					if (!displayPluginAction(DOCUMENT_TYPE,$_GET["ID"],$_SESSION['glpi_onglet'])){
  						showDeviceDocument($_GET["ID"]);
+ 						showDocumentAssociated(DOCUMENT_TYPE,$_GET["ID"]);
  					}
  				}
  				break;
*** inc/document.function.php.dist	2008-01-27 17:44:22.000000000 +0100
--- inc/document.function.php	2008-03-17 20:37:47.000000000 +0100
***************
*** 186,193 ****
  
  	$doc=new Document();
  	if ($doc->getFromDB($instID)){
! 
! 		$query = "SELECT DISTINCT device_type FROM glpi_doc_device WHERE glpi_doc_device.FK_doc = '$instID' order by device_type";
  		
  		$result = $DB->query($query);
  		$number = $DB->numrows($result);
--- 186,196 ----
  
  	$doc=new Document();
  	if ($doc->getFromDB($instID)){
! 	  	// for a document,
! 	  	// don't show here others documents associated to this one,
! 	  	// it's done for both directions in showDocumentAssociated
! 		$query = "SELECT DISTINCT device_type FROM glpi_doc_device WHERE glpi_doc_device.FK_doc = '$instID' 
! 		AND glpi_doc_device.device_type !='".DOCUMENT_TYPE."' ORDER BY device_type";
  		
  		$result = $DB->query($query);
  		$number = $DB->numrows($result);
***************
*** 318,328 ****
  
  	$canread=haveTypeRight($device_type,"r");
  	$canedit=haveTypeRight($device_type,"w");
! 
! 	$query = "SELECT glpi_doc_device.ID as assocID, glpi_docs.* FROM glpi_doc_device 
  		LEFT JOIN glpi_docs ON (glpi_doc_device.FK_doc=glpi_docs.ID) 
  		WHERE glpi_doc_device.FK_device = '$ID' AND glpi_doc_device.device_type = '$device_type' ";
! 	//echo $query;
  	$result = $DB->query($query);
  	$number = $DB->numrows($result);
  	$i = 0;
--- 321,339 ----
  
  	$canread=haveTypeRight($device_type,"r");
  	$canedit=haveTypeRight($device_type,"w");
! 	
! 	$query = "SELECT glpi_doc_device.ID AS assocID, glpi_docs.name AS assocName, glpi_docs.* FROM glpi_doc_device
  		LEFT JOIN glpi_docs ON (glpi_doc_device.FK_doc=glpi_docs.ID) 
  		WHERE glpi_doc_device.FK_device = '$ID' AND glpi_doc_device.device_type = '$device_type' ";
! 
! 	// for documents show associations in both directions
! 	if ($device_type==DOCUMENT_TYPE){
! 		$query .= "UNION SELECT glpi_doc_device.ID as assocID, glpi_docs.name AS assocName, glpi_docs.* FROM glpi_doc_device
! 		LEFT JOIN glpi_docs ON (glpi_doc_device.FK_device=glpi_docs.ID) 
! 		WHERE glpi_doc_device.FK_doc = '$ID' AND glpi_doc_device.device_type = '$device_type' ";
! 	}
! 	$query .= "ORDER BY assocName";
! 
  	$result = $DB->query($query);
  	$number = $DB->numrows($result);
  	$i = 0;
*** front/document.form.php.orig	2008-03-19 06:36:48.000000000 +0100
--- front/document.form.php	2008-03-20 22:06:58.000000000 +0100
***************
*** 148,153 ****
--- 148,154 ----
  		switch ($_SESSION['glpi_onglet']){
  			case -1 :
  				showDeviceDocument($_GET["ID"]);
+ 				showDocumentAssociated(DOCUMENT_TYPE,$_GET["ID"]);
  				displayPluginAction(DOCUMENT_TYPE,$_GET["ID"],$_SESSION['glpi_onglet']);
  				break;
  			case 10 :
***************
*** 157,162 ****
--- 158,164 ----
  				if ($_GET["ID"]){
  					if (!displayPluginAction(DOCUMENT_TYPE,$_GET["ID"],$_SESSION['glpi_onglet'])){
  						showDeviceDocument($_GET["ID"]);
+ 						showDocumentAssociated(DOCUMENT_TYPE,$_GET["ID"]);
  					}
  				}
  				break;
*** inc/document.function.php.orig	2008-03-19 06:39:26.000000000 +0100
--- inc/document.function.php	2008-04-01 22:32:08.000000000 +0200
***************
*** 186,193 ****
  	if ($doc->getFromDB($instID)){
  		$canedit=$doc->can($instID,'w');
  
! 		$query = "SELECT DISTINCT device_type FROM glpi_doc_device WHERE glpi_doc_device.FK_doc = '$instID' order by device_type";
! 		
  		$result = $DB->query($query);
  		$number = $DB->numrows($result);
  		$i = 0;
--- 186,198 ----
  	if ($doc->getFromDB($instID)){
  		$canedit=$doc->can($instID,'w');
  
!  	  	// for a document,
!  	  	// don't show here others documents associated to this one,
!  	  	// it's done for both directions in showDocumentAssociated
!  		$query = "SELECT DISTINCT device_type FROM glpi_doc_device"
! 		        ." WHERE glpi_doc_device.FK_doc = '$instID' "
!  		        ." AND glpi_doc_device.device_type !='".DOCUMENT_TYPE."' ORDER BY device_type";
! 
  		$result = $DB->query($query);
  		$number = $DB->numrows($result);
  		$i = 0;
***************
*** 331,337 ****
  	$canread=$ci->obj->can($ID,'r');
  	$canedit=$ci->obj->can($ID,'w');
  
! 	$query = "SELECT glpi_doc_device.ID as assocID, glpi_docs.*, glpi_entities.ID AS entity "
  		." FROM glpi_doc_device"
  		." LEFT JOIN glpi_docs ON (glpi_doc_device.FK_doc=glpi_docs.ID)"
  		." LEFT JOIN glpi_entities ON (glpi_docs.FK_entities=glpi_entities.ID)" 
--- 336,344 ----
  	$canread=$ci->obj->can($ID,'r');
  	$canedit=$ci->obj->can($ID,'w');
  
! 	// use assocName for sorting
! 	$query = "SELECT glpi_doc_device.ID AS assocID, glpi_docs.name AS assocName,"
! 	        ." glpi_docs.*, glpi_entities.ID AS entity "
  		." FROM glpi_doc_device"
  		." LEFT JOIN glpi_docs ON (glpi_doc_device.FK_doc=glpi_docs.ID)"
  		." LEFT JOIN glpi_entities ON (glpi_docs.FK_entities=glpi_entities.ID)" 
***************
*** 343,348 ****
--- 350,376 ----
  		// Anonymous access from FAQ
  		$query .= " AND glpi_docs.FK_entities=0 ";
  	}
+  
+  	// for documents show associations in both directions
+  	if ($device_type==DOCUMENT_TYPE){
+  		$query .= "UNION SELECT glpi_doc_device.ID as assocID, glpi_docs.name AS assocName,"
+ 		         ." glpi_docs.*, glpi_entities.ID AS entity "
+ 		         ." FROM glpi_doc_device"
+  		         ." LEFT JOIN glpi_docs ON (glpi_doc_device.FK_device=glpi_docs.ID)"
+ 		         ." LEFT JOIN glpi_entities ON (glpi_docs.FK_entities=glpi_entities.ID)" 
+  		         ." WHERE glpi_doc_device.FK_doc = '$ID' AND glpi_doc_device.device_type = '$device_type' ";
+ 
+ 		if (isset($_SESSION["glpiID"])){
+ 		  $query .= getEntitiesRestrictRequest(" AND","glpi_docs",'','',true);
+ 		} else {
+ 		  // Anonymous access from FAQ
+ 		  $query .= " AND glpi_docs.FK_entities=0 ";
+ 		}
+  	}
+  	$query .= " ORDER BY assocName";
+  
+ 
+ 
  	//echo $query;
  	
  	$result = $DB->query($query);
_______________________________________________
Glpi-dev mailing list
Glpi-dev@gna.org
https://mail.gna.org/listinfo/glpi-dev

Reply via email to