Subversion Repositories Applications.gtt

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?php

// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1                                                                                      |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or                                        |
// | modify it under the terms of the GNU Lesser General Public                                           |
// | License as published by the Free Software Foundation; either                                         |
// | version 2.1 of the License, or (at your option) any later version.                                   |
// |                                                                                                      |
// | This library is distributed in the hope that it will be useful,                                      |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
// | Lesser General Public License for more details.                                                      |
// |                                                                                                      |
// | You should have received a copy of the GNU Lesser General Public                                     |
// | License along with this library; if not, write to the Free Software                                  |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
// +------------------------------------------------------------------------------------------------------+

// |@author ABDOOL RAHEEM shaheen shaheenar50@hotmail.com                                                 |
// |@version 3                                                                                            |

include_once "gtt_travail.class.php";
include_once "gtt_absence.class.php";
include_once "gtt_preference.class.php";
include_once CHEMIN_CLASSES."BOG_debogage.inc.php";
/**
  * class Utilisateur : g?re les fonction utilisateurs
  * classe m?tier
  * 
  */

class Utilisateur
{


    var $_id_utilisateur=NULL;
   
    var $_nom=NULL;
   
    var $_prenom=NULL;
    
    var $_password=NULL;
    
    var $_email=NULL;
   
    var $_telephone=NULL;
    
    var $_adresse=NULL;

    var $_code_postal=NULL;
  
    var $_ville=NULL;
    
    var $_quota_heures_sup=NULL;
  
    var $_conges_payes=NULL;
    var $temps_de_travail=NULL;
  
    var $_admin=NULL;
  
    var $_admin2=NULL;
    /**
    *indique si l'utilisateur figure dans les recapitulatifs ou non
    */
    var $_Notes=NULL;
   
    var $_statut=NULL;
    /**
    *aggregations
    */
    var $_liste_preferences =array();//contient liste de preferences
    
    var $_liste_travaux =array();//contient la liste des travaux
    
    var $_liste_depenses=array();
    
    var $_liste_absences=array();
    
  /*
  *cree un nouvel utilisateur a artir d'un identifiant
  */
  
  function Utilisateur($id)
  {
      $this->_id_utilisateur = $id;
  }
    
  
  /**construit un utilisateur a partir d'un tableau
  *remplit tous les champs except l'identifiant qui est deja attribué
  */
  
  
  function ConstruireUtilisateur($tableau)
  { 
         
    $this->_nom =$tableau[GEST_CHAMPS_NOM];
    
    $this->_prenom =$tableau[GEST_CHAMPS_PRENOM];
    
    $this->_password =$tableau[GEST_CHAMPS_PASSWORD];
    
    $this->_email =$tableau[GEST_CHAMPS_EMAIL];
    
    $this->_telephone = $tableau[GEST_CHAMPS_TELEPHONE];
    
    $this->_adresse = $tableau[GEST_CHAMPS_ADRESSE];
    
    $this->_code_postal = $tableau[GEST_CHAMPS_CODE_POSTAL];
    
    $this->_ville =$tableau[GEST_CHAMPS_VILLE];
    
    $this->_quota_heures_sup = $tableau[GEST_CHAMPS_QUOTA_HEURES_SUPP];
    
    $this->_conges_payes = $tableau[GEST_CHAMPS_CONGES_PAYES];
    
    $this->_temps_de_travail = $tableau[GEST_CHAMPS_TEMPS_DE_TRAVAIL];
    
    $this->_admin =$tableau[GEST_CHAMPS_ADMIN];
    
    $this->_admin2 =$tableau[GEST_CHAMPS_ADMIN2];
    
    $this->_statut =$tableau[GEST_CHAMPS_STATUT];
    
    if ($tableau[GEST_CHAMPS_NOTES]==NULL)
    {
        $this->_Notes=NULL;
    }else{
        $this->_Notes = $tableau[GEST_CHAMPS_NOTES];
   }
    
    }

  
  /**
    * permet de recuperer un utilisateur de la base de donnees
    * renvoie -1 si erreur
    *renvoie un utilisateur sinon
    */

  function recupererUtilisateur($id)
  {
    
    $requete ="SELECT * FROM ".GEST_UTILISATEUR.
                 " WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $id";
    
    $ligne = $GLOBALS['db']->query($requete);
    
    $resultat =$ligne->fetchRow(DB_FETCHMODE_ASSOC);

   (DB::isError($resultat)) ?
        die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
    $nb_ligne_selectionne = $ligne->numRows();
      
    if($nb_ligne_selectionne==1) 
    {
    //construction d'un nouvel utilisateur
   
     $user = new Utilisateur ($resultat[GEST_CHAMPS_ID_UTILISATEUR]) ;  
     $user->ConstruireUtilisateur($resultat);
     return $user;
   }
   else {
       return -1;
    }

  }

/**on travaille sur les instances car on suppose que les donnees utilisateurs 
*ne sont pas en constante evolution dans la base
*on limite ainsi les acces a la base de donnees
*/



  /**recuperer le nom 
    * 
    */
  function getNom( )
  {
     return $this->_nom;
    }


  /**
    * 
    */
  function getPrenom( )
  {
    return $this->_prenom;
  }
 
 
  function getVille()
  {
      return $this->_ville;
  }
  /**
    * 
    */
  function getQuota( )
  {
    return $this->_quota_heures_sup;
    
  }


  function getConges( )
  {
    return $this->_conges_payes;
  }
  /**
 *recuperer le statut
    */
  function getStatut( )
  {
    return $this->_statut;
  }

  /**
  *recupere l'adresse
  */
  function getAdresse()
  {
      return $this->_adresse;
  }
  /**
  *modifier les attributs de la classe
 */
 
 
  function setNom($nom)
 {
     $this->_nom= $nom;
 } 
  
 
 
  function setEmail($mail)
 {
     $this->_email= $mail;
 }
 
  function setTelephone ($tel)
 {
     $this->_telephone= $tel;
 }
 
 
  function setAdresse($adr)
  {
   $this->_adresse = $adr;
  }
  
  
  function setCodePostal($code)
  {
   $this->_code_postal = $code;
  }
  
  
  function setVille($ville)
  {
   $this->_ville = $ville;
  }
  
  
  function setQuota($quota)
  {
   $this->_quota_heures_sup = $quota;
  }
  
  
  function setConges($nb)
  {
   $this->_conges_payes = $nb;
  }
  
  function setAdmin($nb)
  {
   $this->admin = $nb;
   }
 
 function setAdmin2($nb)
  {
   $this->admin2 = $nb;
  }
  
  
 function setStatut($st)
  {
   $this->statut = $st;
  }

  
  /**insertion de notes sur l'utilisateur
    
  */
  
  function setNotes($notes)
  {
  $this->Notes = $notes;
  }
   
   
 /**augmenter le nombre d'heure sup
 *un acces est fait a la bse de donnees pour enregistrer les changements en temps reel 
 */
  function augmenterQuotaHeuresSup($nb)
 {
    
    $requete = "UPDATE ".GEST_UTILISATEUR.
                 "SET ".GEST_CHAMPS_QUOTA_HEURES_SUPP." = ".GEST_CHAMPS_QUOTA_HEURES_SUPP."+ $nb 
                  WHERE ".GEST_CHAMPS_ID_UTILISATEUR."= $this->_id_utilisateur";
    
    $resultat = $GLOBALS['db']->query($requete);
    
    (DB::isError($resultat)) ? 
         die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
   
   $this->_quota_heures_sup =  $this->_quota_heures_sup +$nb;
   
 }
 
 
 
 /**diminuer le nb d'heures sup*/
 
  function diminuerQuotaHeuresSup($nb)
  {
    $requete = "UPDATE ".GEST_UTILISATEUR." 
                  SET ".GEST_CHAMPS_QUOTA_HEURES_SUPP." = ".GEST_CHAMPS_QUOTA_HEURES_SUPP."- $nb 
                  WHERE ".GEST_CHAMPS_ID_UTILISATEUR."= $this->_id_utilisateur";
    
    $resultat = $GLOBALS['db']->query($requete);
    
    (DB::isError($resultat)) ? 
         die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
     
     $this->_quota_heures_sup =  $this->_quota_heures_sup -$nb;
     /*un quota heure supp negatif implique qu'il y a des heures a rattraper*/
  } 
  
  
 /*augmenter le nombre de jours de conges */
     
  function augmenterConges($nb)
    {
   $requete = "UPDATE ".GEST_UTILISATEUR." SET "
                .GEST_CHAMPS_CONGES_PAYES." = ".GEST_CHAMPS_CONGES_PAYES." + $nb 
                 WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $this->_id_utilisateur";

    $resultat = $GLOBALS['db']->query($requete);
      
    (DB::isError($resultat)) ? 
          die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
    $this->_conges_payes = $this->_conges_payes +$nb;
    
    }
    
    
    /*diminuer le nombre de jour de conges */
  
  function diminuerConges($nb)
    {
   
    $requete = "UPDATE ".GEST_UTILISATEUR." SET "
                 .GEST_CHAMPS_CONGES_PAYES." = ".GEST_CHAMPS_CONGES_PAYES."- $nb 
                  WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $this->_id_utilisateur
                  AND ".GEST_CHAMPS_CONGES_PAYES.">= $nb";
    
    $resultat = $GLOBALS['db']->query($requete);
    
    
    (DB::isError($resultat)) ?
            die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
    $nb_ligne_modifie = $GLOBALS['db']->affectedRows();
    
    
    /**si le update a bien eu lieu on renvoie 1
    *sinon on renvoie -1 qui est synonyme d'erreur
    */
    if($nb_ligne_modifie==1)
    {
    $this->_conges_payes = $this->_conges_payes -$nb;
    return 1;
    }
    else return -1;
    
    }
  
    
    
    /**
    * permet d'enregistrer un utilisateur dans une base de donnees a partir du nom de la
    * base de donnes, du nom de la table et des attributs à ajouter
    *
    */
 function enregistrerNewUtilisateur()
  {
   //verification si identifiant deja attribue
   //ou si email deja utilise
  $b=&Utilisateur::nextId();
  $this->_id_utilisateur =$b;
  
  $requete= "INSERT INTO ".GEST_UTILISATEUR.
            " SET ".GEST_CHAMPS_ID_UTILISATEUR." =$this->_id_utilisateur ,"
            .GEST_CHAMPS_NOM." =\"$this->_nom\" ,"
            .GEST_CHAMPS_PRENOM." =\"$this->_prenom\" ,"
            .GEST_CHAMPS_PASSWORD." =MD5(\"$this->_password\") ,"
            .GEST_CHAMPS_EMAIL." =\"$this->_email\" ,"
            .GEST_CHAMPS_TELEPHONE." =$this->_telephone ,"
            .GEST_CHAMPS_ADRESSE." =\"$this->_adresse\" ,"
            .GEST_CHAMPS_CODE_POSTAL." =$this->_code_postal ,"
            .GEST_CHAMPS_VILLE." =\"$this->_ville\" ,"
            .GEST_CHAMPS_QUOTA_HEURES_SUPP." =$this->_quota_heures_sup ,"
            .GEST_CHAMPS_CONGES_PAYES." =$this->_conges_payes ,"
            .GEST_CHAMPS_TEMPS_DE_TRAVAIL." =$this->_temps_de_travail ,"
            .GEST_CHAMPS_ADMIN." =$this->_admin ,"
            .GEST_CHAMPS_ADMIN2." =$this->_admin2 ,"
            .GEST_CHAMPS_STATUT." =$this->_statut ,"
            .GEST_CHAMPS_NOTES." =\"$this->_Notes\" ";
    
    
  $resultat =$GLOBALS['db']->query($requete);
  
  (DB::isError($resultat)) ? 
          die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
  
  $j=$GLOBALS['db']->affectedRows();
  
  if ($j==1)
  {
      return 1;
  }else return -1;
  
  }

  
  /*enregistrer la valeur d'un champs donne dans la table*/
  
  function enregistrerChamps($field,$valeur)
  {
      $requete ="INSERT INTO ".GEST_UTILISATEUR.
                " ($field) VALUES ($valeur)";
      $resultat = $GLOBALS['db']->query($requete);
      
      (DB::isError($resultat)) ? 
               die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
}

  /**mettre a jour la table utilisateur pour prendre en compte les modifications
  *sur les donnees utilisateur 
  *renvoie 1 si utilisateur mis a jour et -1 sinon 
  */    
  
  function mettreAJourUtilisateur()
  {
    $table = GEST_UTILISATEUR;
    
    $requete= "UPDATE $table SET "
        .GEST_CHAMPS_NOM." =\"$this->_nom\","
        .GEST_CHAMPS_PRENOM." = \"$this->_prenom\","
        //.GEST_CHAMPS_PASSWORD." =MD5(\"$this->_password\") ,"
        .GEST_CHAMPS_EMAIL." = \"$this->_email\","
        .GEST_CHAMPS_TELEPHONE." =\"$this->_telephone\","
        .GEST_CHAMPS_ADRESSE. "=\"$this->_adresse\","
        .GEST_CHAMPS_CODE_POSTAL."  = $this->_code_postal,"
        .GEST_CHAMPS_VILLE." = \"$this->_ville\","
        .GEST_CHAMPS_QUOTA_HEURES_SUPP." = $this->_quota_heures_sup,"
        .GEST_CHAMPS_CONGES_PAYES." = $this->_conges_payes,"
        .GEST_CHAMPS_TEMPS_DE_TRAVAIL." = $this->_temps_de_travail,"
        .GEST_CHAMPS_ADMIN." = $this->_admin,"
        .GEST_CHAMPS_ADMIN2." = $this->_admin2,"
        .GEST_CHAMPS_NOTES." =\"$this->_Notes\","
        .GEST_CHAMPS_STATUT." = $this->_statut"
        ." WHERE ".GEST_CHAMPS_ID_UTILISATEUR. " = $this->_id_utilisateur "; 
   
        $resultat= $GLOBALS['db']->query($requete);
       
       (DB::isError($resultat)) ?
                 die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
     
       $nb_ligne_modifie = $GLOBALS['db']->affectedRows();
      if ($nb_ligne_modifie==1)
      {
         return 1;
       }
       else return -1;
         
  }
  
  /**
  *mettre a jour le champ password 
  */
  function mettreAJourPassword($p)
  {
   $table = GEST_UTILISATEUR;
   $requete= "UPDATE $table SET "
             .GEST_CHAMPS_PASSWORD." =MD5(\"$p\")"
             ." WHERE ".GEST_CHAMPS_ID_UTILISATEUR. " = $this->_id_utilisateur "; 
   
   $resultat= $GLOBALS['db']->query($requete);
  
   (DB::isError($resultat)) ?
                 die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
     
   $nb_ligne_modifie = $GLOBALS['db']->affectedRows();
   if ($nb_ligne_modifie==1)
      {
         return 1;
       }
       else return -1;
         
  }
  
    
    /**supprimer un utilisateur
    *renvoie 1 si suppression effectuée et -1 sinon
    */
    
  function supprimerUtilisateur($id)
  {
    $requete = "DELETE FROM ".GEST_UTILISATEUR.
                 " WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $id";
    
    $resultat =$GLOBALS['db'] ->query($requete);
    
    (DB::isError($resultat)) ? 
          die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
    
    /* verification avant destruction de l'instance de l'objet */
    
    $nb_ligne_modifie = $GLOBALS['db']-> affectedRows();
    if ($nb_ligne_modifie==1)
       { 
         return 1;
       }
       else return -1;
         
    
  }

  
   /**
   *ajouter preferences
   *prend en parametre une liste de projets 
   */
   function ajouterPreference($tableau)
   {
      //supression des preferences existantes
      
      //creation d'un controleur
      $cont=new Preference(0,0);
      
      $ligne=$cont->supprimerPreferences($this->_id_utilisateur);
   
      /*parcourt de la liste de projets
      *pour creer des preferences
      *et les enregistrer
      */
      if ($ligne>=0)
      {
      foreach($tableau as $id)
      {
          $pref=new Preference($this->_id_utilisateur,$id);
          $res= $pref->enregistrerPreference();
          if ($res!=1){
              exit;
          }
      }
      }
        
   }
   
   /**
   *recuperer les preferences d'un utilisateur
   */
   
   function recupererPreferencesUtilisateur()
   {
       $controleur=new Preference($this->_id_utilisateur,0);
       $liste_pref=$controleur->recupererTableauPreferences();
       return $liste_pref;
   }
    
    /**
    *modifie la liste de preferences
    */
    function setPreferences($tableau)
    {
        $this->_liste_preferences=$tableau;
    }
    
    /**
    *ajoute une absence a la liste d'absence
    *de l'utilisateur
    *@param abs=tableau de donnees
    */
    
    function ajouterAbsenceUtilisateur($abs)
    {
        $controleur=new Absence(0,0,time());
        $controleur->construireAbsence($abs);
        //ajout a la liste
        array_push($this->_liste_absences,$controleur);
        //enregistrement de l'absence
        $res=$controleur->enregistrerNewAbsence();
        if ($res!=1)
        {
            echo "erreur ajout absence ";
        }
    }
    
   /**
   *ajouter un nouveau travail dans la liste
   *de travaux
   */
   
   function ajouterTravailUtilisateur($trav)
   {
       $controleur=new Travail(0,0);
       $controleur->construireTravail($trav);
       array_push($this->_liste_travaux,controleur);
       $res=$controleur->enregistrerNewTravail();
       if($res!=1)
       {
           "echo erreur ajout travail";
       }
   }
    
   /*
   *indique si la personn est administrateur
   *renvoie 1 si administrateur
    *0 sinon   */
   
   function isAdmin()
   {
       return $this->_admin;
   }
   
   /*
   *
   recupere code _postal
   */
   function getCode()
   {
       return $this->_code_postal;
   }
   
   /**
   *telephone
   */
   function getTelephone()
   {
       return $this->_telephone;
   }
   /**
   *temsp de travail
   */
   
   function getTempsTravail()
   {
       return $this->_temps_de_travail;
   }
   /*
   *fonction recuperant le mot de passe 
   */
   function getPassword()
   {
       return $this->_password;
   }
   
   /**
   *recupere l'identifiant de la base de donnees
   */
   
   function nextId()
   {
    $requete = 'SELECT MAX('.GEST_CHAMPS_ID_UTILISATEUR.') AS maxi FROM '.GEST_UTILISATEUR;
    $resultat = $GLOBALS['db']->query($requete);
    if (DB::isError($resultat) || $resultat->numRows() > 1) {
        return false;
    }
    
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
    return $ligne->maxi + 1;  
   }
   
   
   /*
   **indqiue si la personne ne doit pas figurer dans les recapitulatifs
   *renvoie 1 si ne figuer pas
   *0 sinon
   */
   
   function isAdmin2()
   {
       return $this->_admin2;
   }
   
   /**
   *fonction recuperant le mail
   */
   function getEmail()
   {
       return $this->_email;
   }
   /**
   *fonction permettant de chercher un utilisateur
   * a partir de son email
   */
   function recupIDUtilisateurMail($mail)
   {
       $requete="SELECT ".GEST_CHAMPS_ID_UTILISATEUR.
                " FROM ".GEST_UTILISATEUR.
                " WHERE ".GEST_CHAMPS_EMAIL." ='$mail' ";
        
       $resultat =$GLOBALS['db']->query($requete) ;
       
       (DB::isError($resultat)) ? 
       
            die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
       
       $i=$resultat->fetchRow(DB_FETCHMODE_ORDERED);
       
       return   $i[0];
   }
       
  
      
   /*afficher un utilisateur */
   
   function afficherUtilisateur()
   {
       
    //if ($this->_id_utilisateur !=null){
    echo " utilisateur : ";
    echo "$this->_id_utilisateur<BR> \n" ;
    echo "nom : ";
    echo "$this->_nom  \n";
    echo "prenom :";
    echo "$this->_prenom <BR>\n";
    echo "mot de passe : ";
    echo "$this->_password \n";
    echo "email :";
    echo "$this->_email<BR> \n";
    echo "tel";
    echo "$this->_telephone <BR>\n";
    echo "adre : ";
    echo "$this->_adresse \n";
    echo "code_postal";
    echo "$this->_code_postal \n";
    echo "ville :";
    echo "$this->_ville<BR> \n";
    echo "nb heure supp :";
    echo "$this->_quota_heures_sup <BR>\n";
    echo "nb jour de conges restants : ";
    echo "$this->_conges_payes<BR> \n";
    echo "nb d'heure de travail par jour : ";
    echo "$this->_temps_de_travail <BR>\n";
    echo "admin : ";
    echo "$this->_admin<BR> \n ";
    echo "admin2 : ";
    echo "$this->_admin2 <BR>\n";
    echo "statut : ";
    echo "$this->_statut<BR> \n";
    echo "notes :";
    echo "$this->_Notes<BR> \n";
   }
   //}
   
  }
   ?>