gestion des groupes d'utilisateurs (ou service)

Contribuer au projet de part vos connaissances: PHP, HTML, CSS, SQL, JS ....
a.martin-rio
Gsup LEVEL 0
Messages : 3
Enregistré le : mar. 10 mai 2016 11:45

bonjour, voici les modif que j'ai implémenté dans notre société pour permettre aux utilisateurs avec pouvoirs de voir les tickets de leurs services. Pour cela je me suis basé sur la notion de groupe d'utilisateur.
Ces modifications sont basé sur la version 3.1.7

1°) passer le script en BDD : il ajoute un droit "voir les tickets du services"

Code : Tout sélectionner

alter table  `trights`add column  `side_service` int(1) NOT NULL COMMENT 'Affiche la section service'

2°) Modifier login.php
ajouter le code ci-dessous au début du fichier (ligne 30)

Code : Tout sélectionner

// MODIF AMR pour la gestion des group d'utilisateurs
if(!isset($u_group)) $u_group = ''; 
if(!isset($_GET['u_group'])) $_GET['u_group'] = ''; 
// fin modif AMR
ajouter à la ligne 73 :

Code : Tout sélectionner

// MODIF AMR pour la gestion des group d'utilisateurs
		$query = $db->query("SELECT * FROM `tgroups_assoc` where user ='$user_id' ");
		while ($row = $query->fetch()) 
		{
				
			$u_group=$row['group'];
			$_SESSION['u_group'] = "$u_group";
		}
		// fin modif AMR

3°) Modifier le fichier Menu.php

modifier le paragraphe

Code : Tout sélectionner


<ul class=\"submenu\" >";
				    //display all states link
					if ($_GET['page']=='dashboard' && $_GET['userid']!='%' && $_GET['state']=='%') {echo '<li class="active">';} else {echo "<li>";} echo "
						<a href=\"./index.php?page=dashboard&userid=$_SESSION[user_id]&state=%&ticket=%&\">
							<i class=\"icon-double-angle-right\"></i>
							Tous les états ($cntall[0])
						</a>
					</li>";
					 //display meta  states link
					if ($rparameters['meta_state']==1 && $rright['side_your_meta']!=0)
					{
						$query=$db->query("SELECT count(*) FROM `tincidents` WHERE $profile='$uid' and disable='0' and (state=1 OR state=2 OR state=6)");
						$cntmeta=$query->fetch();
						$query->closeCursor();  
					
    					if ($_GET['page']=='dashboard' && $_GET['userid']!='%' && $_GET['state']=='meta') {echo '<li class="active">';} else {echo "<li>";} echo "
    						<a title=\"Meta-état regroupant les états: Attente de PEC, En cours, et Attente de retour.\" href=\"./index.php?page=dashboard&userid=$_SESSION[user_id]&state=meta\">
    							<i class=\"icon-double-angle-right\"></i>
    							A traiter ($cntmeta[0])
    						</a>
    					</li>";
					}
					//display unread ticket
					if ($cnt3[0]>0 && $rright['side_your_not_read']!=0)
					{
						if ($_GET['techread']!='' && $_GET['page']!='searchengine') echo '<li class="active">'; else echo '<li>'; echo '
							<a href="./index.php?page=dashboard&userid='.$_SESSION['user_id'].'&techread=0">
								<i class="icon-double-angle-right"></i>
								Non lus ('.$cnt3[0].')&nbsp;&nbsp;&nbsp;<i title="Des tickets non lus sont en attente" class="icon-warning-sign light-orange bigger-130"></i>
							</a>
						</li>';
						
					}
					//foreach state display in sub-menu
					$query = $db->query("SELECT * FROM `tstates` WHERE id not like 5 ORDER BY number");
					while ($row = $query->fetch())
					{
						$query2=$db->query("SELECT count(*) FROM `tincidents` WHERE $profile='$uid' and state LIKE '$row[id]' and disable='0'");
						$cnt=$query2->fetch();
						$query2->closeCursor(); 
						echo '
						<li';  
						if ($_GET['page']=='dashboard' && $_GET['userid']!='%' && $_GET['state']==$row['id']) echo ' class="active"';
						echo '>
							<a title="'.$row['description'].'" href="./index.php?page=dashboard&userid='.$_SESSION['user_id'].'&state='.$row['id'].'">
								<i class="icon-double-angle-right"></i>
								'.$row['name'].' ('.$cnt[0].')
							</a>
						</li>';
					}
					$query->closeCursor();
					echo "
				</ul>

par

Code : Tout sélectionner

			
				<ul class=\"submenu\" >";
				    //display all states link
					if ($_GET['page']=='dashboard' && $_GET['user']!='S'  && $_GET['userid']!='%' && $_GET['state']=='%') {echo '<li class="active">';} else {echo "<li>";} echo "
						<a href=\"./index.php?page=dashboard&userid=$_SESSION[user_id]&state=%&ticket=%&\">
							<i class=\"icon-double-angle-right\"></i>
							Tous les états ($cntall[0])
						</a>
					</li>";
					 //display meta  states link
					if ($rparameters['meta_state']==1 && $rright['side_your_meta']!=0)
					{
						$query=$db->query("SELECT count(*) FROM `tincidents` WHERE $profile='$uid' and disable='0' and (state=1 OR state=2 OR state=6)");
						$cntmeta=$query->fetch();
						$query->closeCursor();  
					
    					if ($_GET['page']=='dashboard' && $_GET['user']!='S'  && $_GET['userid']!='%' && $_GET['state']=='meta') {echo '<li class="active">';} else {echo "<li>";} echo "
    						<a title=\"Meta-état regroupant les états: Attente de PEC, En cours, et Attente de retour.\" href=\"./index.php?page=dashboard&userid=$_SESSION[user_id]&state=meta\">
    							<i class=\"icon-double-angle-right\"></i>
    							A traiter ($cntmeta[0])
    						</a>
    					</li>";
					}
					//display unread ticket
					if ($cnt3[0]>0 && $rright['side_your_not_read']!=0)
					{
						if ($_GET['techread']!='' && $_GET['page']!='searchengine') echo '<li class="active">'; else echo '<li>'; echo '
							<a href="./index.php?page=dashboard&userid='.$_SESSION['user_id'].'&techread=0">
								<i class="icon-double-angle-right"></i>
								Non lus ('.$cnt3[0].')&nbsp;&nbsp;&nbsp;<i title="Des tickets non lus sont en attente" class="icon-warning-sign light-orange bigger-130"></i>
							</a>
						</li>';
						
					}
					//foreach state display in sub-menu
					$query = $db->query("SELECT * FROM `tstates` WHERE id not like 5 ORDER BY number");
					while ($row = $query->fetch())
					{
						$query2=$db->query("SELECT count(*) FROM `tincidents` WHERE $profile='$uid' and state LIKE '$row[id]' and disable='0'");
						$cnt=$query2->fetch();
						$query2->closeCursor(); 
						echo '
						<li';  
						if ($_GET['page']=='dashboard' && $_GET['user']!='S'  && $_GET['userid']!='%' && $_GET['state']==$row['id']) echo ' class="active"';
						echo '>
							<a title="'.$row['description'].'" href="./index.php?page=dashboard&userid='.$_SESSION['user_id'].'&state='.$row['id'].'">
								<i class="icon-double-angle-right"></i>
								'.$row['name'].' ('.$cnt[0].')
							</a>
						</li>';
					}
					$query->closeCursor();
					echo "
				</ul>
	

ajouter avant la ligne if ($rright['side_all']!=0)

Code : Tout sélectionner

		
		// MODIF AMR pour la gestion des group d'utilisateurs
	if ($rright['side_service']!=0)
		{
		echo "
		<li class='active'>
				<a href=\"./index.php?page=dashboard&userid=%&state=%\" class=\"dropdown-toggle\" >
					<i class=\"icon-ticket\"></i>
					<span class=\"menu-text\">
						Les tickets du service
					</span>
					<b class=\"arrow icon-angle-down\"></b>
				</a>
				
				<ul class=\"submenu\" >";
						$query2=$db->query("SELECT count(*) FROM `tincidents` WHERE  (tincidents.u_group LIKE '$_GET[u_group]' or tincidents.user in (select user    FROM `tgroups_assoc` where `group` = '$_GET[u_group]')) and state LIKE '$row[id]' and disable='0'");
						$cnt=$query2->fetch();
						$query2->closeCursor(); 
						
					if ($_GET['page']=='dashboard' && $_GET['user']='S' && $_GET['state']=='%') {echo '<li class="active">';} else {echo "<li>";} echo "
						<a href=\"./index.php?page=dashboard&u_group=$_SESSION[u_group]&userid=$_SESSION[user_id]&state=%&ticket=%&user=S\">
							<i class=\"icon-double-angle-right\"></i>
							Tous les états  (".$cnt[0].")
						</a>
					</li>";
					
						$query->closeCursor();
					 	
						//foreach state display in sub-menu
					$query = $db->query("SELECT * FROM `tstates` WHERE id not like 5 ORDER BY number");
					while ($row = $query->fetch())
					{
						$query2=$db->query("SELECT count(*) FROM `tincidents` WHERE  (tincidents.u_group LIKE '$_GET[u_group]' or tincidents.user in (select user    FROM `tgroups_assoc` where `group` = '$_GET[u_group]')) and state LIKE '$row[id]' and disable='0'");
						$cnt=$query2->fetch();
						$query2->closeCursor(); 
						echo '
						<li';  
						if ($_GET['page']=='dashboard' && $_GET['user']='S'   && $_GET['state']==$row['id']) echo ' class="active"';
						echo '>
							<a title="'.$row['description'].'" href="./index.php?page=dashboard&userid='.$_SESSION['user_id'].'&user=S&u_group='.$_SESSION['u_group'].'&state='.$row['id'].'">
								<i class="icon-double-angle-right"></i>
								'.$row['name'].' ('.$cnt[0].')
							</a>
						</li>';
					}
					$query->closeCursor();
					
					
			echo "		
				</ul>
			</li>";
		}
		// fin modif AMR
	
		
4°)Modifier Index.php

remplacer

Code : Tout sélectionner

//security check for page
								if((($_SESSION['profile_id']!=4 && $_SESSION['profile_id']!=0 && $_SESSION['profile_id']!=3) && ($_SESSION['user_id']!=$_GET['userid'])) || (($_SESSION['profile_id']!=4 && $_SESSION['profile_id']!=0 && $_SESSION['profile_id']!=3) &&($rticket[0]!=$_SESSION['user_id'])))
								{
									if ($_GET['page']=='plugins/availability/index' && $rright['availability']!=0 && $rparameters['availability']==1) 
									{include("$_GET[page].php");} 
									elseif ($_GET['page']=='asset_list' && $rright['asset']!=0 && $rparameters['asset']==1) {include("$_GET[page].php");}
									else
								    echo '<div class="alert alert-danger"><strong><i class="icon-remove"></i>Erreur:</strong> Vous n\'avez pas les droits d\'accès a cette page, contacter votre administrateur.<br></div>';
								} else	{
							    	include("$_GET[page].php");
								}

par

Code : Tout sélectionner

// Modif AMR pour la gestion des droits par service
								if( $_GET['user']==S && ($_SESSION['u_group']==$_GET['u_group'])) {
									include("$_GET[page].php");
									 
								} else {
									 
									if((($_SESSION['profile_id']!=4 && $_SESSION['profile_id']!=0 && $_SESSION['profile_id']!=3) && ($_SESSION['user_id']!=$_GET['userid'])) 
										|| (($_SESSION['profile_id']!=4 && $_SESSION['profile_id']!=0 && $_SESSION['profile_id']!=3) &&($rticket[0]!=$_SESSION['user_id']))
										  )
									{
										if ($_GET['page']=='plugins/availability/index' && $rright['availability']!=0 && $rparameters['availability']==1) 
										{include("$_GET[page].php");} 
										elseif ($_GET['page']=='asset_list' && $rright['asset']!=0 && $rparameters['asset']==1) {include("$_GET[page].php");}
										else
										echo '<div class="alert alert-danger"><strong><i class="icon-remove"></i>Erreur:</strong> Vous n\'avez pas les droits d\'accès a cette page, contacter votre administrateur.<br></div>';
									} else	{
										include("$_GET[page].php");
									}
								}
							    	
								//fin modif AMR	


5°) Modifier dashboard.php
remplacer

Code : Tout sélectionner

$from.="

			AND	tincidents.user LIKE '$_POST[user]'
			AND	tincidents.u_group LIKE '$_GET[u_group]'
			AND	tincidents.technician LIKE '$_POST[technician]'
			AND	tincidents.t_group LIKE '$_GET[t_group]'
			AND	tincidents.techread LIKE '$_GET[techread]'
			AND	tincidents.disable='0'
			AND	(tincidents.category LIKE '$_POST[category]')
			AND	tincidents.subcat LIKE '$_POST[subcat]'
			AND	tincidents.id LIKE '$_POST[ticket]'


			AND	tincidents.user LIKE '$_POST[userid]'




			AND tincidents.date_hope LIKE '$_POST[date_hope]%'
			$state
			AND	tincidents.priority LIKE '$_POST[priority]'
			AND	tincidents.criticality LIKE '$_POST[criticality]'
			AND	tincidents.title LIKE '%$_POST[title]%'
			";
par

Code : Tout sélectionner

// MODIF AMR pour la gestion des group d'utilisateurs
			$from.="
			AND	( tincidents.u_group LIKE '$_GET[u_group]' or tincidents.user in (select user    FROM `tgroups_assoc` where `group` = '$_GET[u_group]'))


			AND	tincidents.technician LIKE '$_POST[technician]'
			AND	tincidents.t_group LIKE '$_GET[t_group]'
			AND	tincidents.techread LIKE '$_GET[techread]'
			AND	tincidents.disable='0'
			AND	(tincidents.category LIKE '$_POST[category]')
			AND	tincidents.subcat LIKE '$_POST[subcat]'
			AND	tincidents.id LIKE '$_POST[ticket]'";
			 
			 if (substr($_GET['u_group'], 0, 1) =='' || substr($_GET['u_group'], 0, 1) =='%') 
					$from.="AND	tincidents.user LIKE '$_POST[userid]' AND	tincidents.user LIKE '$_POST[user]'";
				else $from.="AND	tincidents.user LIKE '%'";
			
			$from.="
			
			AND tincidents.date_hope LIKE '$_POST[date_hope]%'
			$state
			AND	tincidents.priority LIKE '$_POST[priority]'
			AND	tincidents.criticality LIKE '$_POST[criticality]'
			AND	tincidents.title LIKE '%$_POST[title]%'
			";
			// fin MODIF AMR pour la gestion des group d'utilisateurs	

et 
if($_GET['userid']=='%')
			{
			    if ($_GET['state']=='%') {echo '<i class="icon-ticket"></i> Tous les tickets';} else {echo '<i class="icon-ticket"></i> Tous les '.$rstate['description'].'';}
			}
			else if ($_GET['userid']!='0')
			

par

			if($_GET['userid']=='%')
			{
			    if ($_GET['state']=='%') {echo '<i class="icon-ticket"></i> Tous les tickets';} else {echo '<i class="icon-ticket"></i> Tous les '.$rstate['description'].'';}
			}
			//modif AMR pour la gestion du service
			else if (substr($_GET['u_group'], 0, 1) !='' && substr($_GET['u_group'], 0, 1) !='%') 
			{
			    if ($_GET['state']=='%') {echo '<i class="icon-ticket"></i> Tous les tickets du Service';} else {echo '<i class="icon-ticket"></i> Tous les '.$rstate['description'].' du service';}
			}
			// fin modif AMR
			else if ($_GET['userid']!='0')		
et remplacer

Code : Tout sélectionner

//generate open ticket link
							$open_ticket_link="./index.php?page=ticket&id=$row[id]&state=$_GET[state]&userid=$_GET[userid]&technician=$_GET[technician]&category=$_GET[category]&subcat=$_GET[subcat]&title=$_GET[title]&date_create=$_GET[date_create]&priority=$_GET[priority]&criticality=$_GET[criticality]&viewid=$_GET[viewid]";
							


par

//generate open ticket link
							// modif AMR pour la gestion du service
							 if (substr($_GET['u_group'], 0, 1) !='' && substr($_GET['u_group'], 0, 1) !='%')  $open_ticket_link="./index.php?page=ticket&id=$row[id]&state=$_GET[state]&u_group=$_SESSION[u_group]&user=S&technician=$_GET[technician]&category=$_GET[category]&subcat=$_GET[subcat]&title=$_GET[title]&date_create=$_GET[date_create]&priority=$_GET[priority]&criticality=$_GET[criticality]&viewid=$_GET[viewid]";
								else $open_ticket_link="./index.php?page=ticket&id=$row[id]&state=$_GET[state]&userid=$_GET[userid]&technician=$_GET[technician]&category=$_GET[category]&subcat=$_GET[subcat]&title=$_GET[title]&date_create=$_GET[date_create]&priority=$_GET[priority]&criticality=$_GET[criticality]&viewid=$_GET[viewid]";
							// fin modif AMR


6°) modifier core/ticket.php
remplacer

Code : Tout sélectionner

	window.location='./index.php?page=ticket&id=$_GET[id]&userid=$_GET[userid]&state=$_GET[state]&category=$_GET[category]&subcat=$_GET[subcat]&viewid=$_GET[viewid]&action=$_POST[action]&edituser=$_POST[edituser]&cat=$_POST[category]&editcat=$_POST[subcat]$down'

par

Code : Tout sélectionner

	window.location='./index.php?page=ticket&id=$_GET[id]&userid=$_GET[userid]&state=$_GET[state]&u_group=$_GET[u_group]&user=$_GET[user]&category=$_GET[category]&subcat=$_GET[subcat]&viewid=$_GET[viewid]&action=$_POST[action]&edituser=$_POST[edituser]&cat=$_POST[category]&editcat=$_POST[subcat]$down'
Fichiers joints
GESTION_SERVICE.ZIP
(28.57 Kio) Téléchargé 517 fois
a.martin-rio
Gsup LEVEL 0
Messages : 3
Enregistré le : mar. 10 mai 2016 11:45

et pour ceux qui utilisent ldap, il faut ajouter dans login.php après les lignes

} else {
//update last time connection

Code : Tout sélectionner

// MODIF AMR pour la gestion des group d'utilisateurs
			 
		$query = $db->query("SELECT * FROM `tgroups_assoc` where user=$_SESSION[user_id]");
		while ($row = $query->fetch()) 
		{
				
			$u_group=$row['group'];
			$_SESSION['u_group'] = "$u_group";
		}
		$query->closeCursor();
		// fin modif AMR
Eric_03
Gsup LEVEL 1
Messages : 24
Enregistré le : mar. 21 mai 2013 10:06

Bonjour,

merci pour ce partage

Eric
fabrice
Gsup LEVEL 7
Messages : 327
Enregistré le : mar. 11 mars 2014 12:01

bonjour, est ce que cette solution sera implémenté dans une prochaine version ?
La gestion des tickets par groupe de technicien est très intéressante.

Par contre cette solution est valable pour l'utilisateur mais pas pour le groupe technicien.

Est ce que l'on pourrait faire la même chose avec les groupes de techniciens.
OS : Linux gestsup 4.15.0-158-generic #166-Ubuntu SMP Fri Sep 17 19:37:52 UTC 2021 x86_64
MariaDB : 10.4.21-MariaDB-1:10.4.21+maria~bionic (base : bsup 183.8MB)
PHP : 7.3.30-1+ubuntu18.04.1+deb.sury.org+1
GestSup : 3.2.15 (8871 Tickets)
anna
Gsup LEVEL 0
Messages : 3
Enregistré le : mar. 30 août 2016 18:39
Contact :

Merci a.martin-rio pour l'astuce, bonne contribution
Serveur: GestSup: 3.1.9 | OS: Debian 3.16.0.4 | Apache: 2.4.17 | MySQL: 5.7.9 | PHP: 7.0.0
TBR
Gsup LEVEL 2
Messages : 40
Enregistré le : jeu. 6 mars 2014 16:53

Bonjour,

Bravo pour le boulot sur le code et merci pour le partage !

A l'instar de Fabrice, je suis très intéressé par la fonction groupe de techniciens pour laquelle j'ai posté un sujet il y a peu : viewtopic.php?f=5&t=2710

Si jamais vous faites cette modif pour votre société, je suis ultra preneur !

Merci @bientôt ;)

TBR
- GestSup 3.2.0
- Windows Server 2016
- Apache 2.4.41
- PHP 7.3.12
- MariaDB 10.4.10
Avatar du membre
Flox
Administrateur du site
Messages : 8972
Enregistré le : jeu. 21 juin 2012 19:00

Bonjour,

pour la gestion par groupe votre besoin est d'avoir une vue dédié (ex: Groupe techniciens réseaux dans vos tickets)pour l'affichage des tickets attribués à des groupes dans lesquelles le technicien est membre.
Sans titre.png
Sans titre.png (47.45 Kio) Vu 20131 fois
Ou bien de retrouver dans les états existant de la section vos tickets, les demandes faites au nom du groupe ?

Merci pour votre retour.
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.58 | MariaDB: 11.3.2 | PHP: 8.3.4 | https://doc.gestsup.fr/
HPDG
Gsup LEVEL 0
Messages : 2
Enregistré le : lun. 9 janv. 2017 14:12

Bonjour,

Je me permets de remonter le sujet car c'est une fonctionnalité qui nous permettrait de donner l'accès à ce système de ticket aux "superviseurs" de nos clients afin qu'ils puissent suivre l'ensemble des demandes des utilisateurs de leur/leurs groupe(s). Le filtre par société ressemble pas mal à notre besoin, mais nous avons des super-utilisateurs qui gèrent plusieurs sociétés et que donc nous gérons par groupes.

En gros, cette nouvelle fonctionnalité s'apparenterait, il me semble, au droit et à la fonction liée : "side_your_tech_group Affiche les tickets associés à un groupe de technicien dans lequel vous êtes présent." mais bien évidemment pas pour les techniciens mais pour les utilisateurs.

J'aimerais savoir si cette fonctionnalité peut être intégrée et si oui, est-elle est prévue dans votre roadmap.

Merci d'avance.
lionel
Gsup LEVEL 1
Messages : 18
Enregistré le : lun. 28 juil. 2014 11:25

Flox a écrit : mar. 20 déc. 2016 20:25 Bonjour,

pour la gestion par groupe votre besoin est d'avoir une vue dédié (ex: Groupe techniciens réseaux dans vos tickets)pour l'affichage des tickets attribués à des groupes dans lesquelles le technicien est membre.
Sans titre.png

Ou bien de retrouver dans les états existant de la section vos tickets, les demandes faites au nom du groupe ?

Merci pour votre retour.
Bonjour,

je vois la possibilité d'afficher le groupe dans vos tickets, comment faire ?

j'ai crée un groupe tech, j'ai associer des techs , mais je ne vois pas sur la barre de gauche :(

merci d'avance pour votre aide
Avatar du membre
Flox
Administrateur du site
Messages : 8972
Enregistré le : jeu. 21 juin 2012 19:00

Bonjour,

vous pouvez regarder le droit "side_your_tech_group" = Affiche les tickets associés à un groupe de technicien dans lequel vous êtes présent.


cdt
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.58 | MariaDB: 11.3.2 | PHP: 8.3.4 | https://doc.gestsup.fr/
Répondre