<?php
class Fonction 
{

    public function CripteDecriptePwd($MotdePAsse)
    {
		$ChaineCryptage = "0182838455687895987665493218001234567890987654321021001234567812345678909876541001234";
        $l=strlen($MotdePAsse);
		$NewPwd="";
        for ($i = 0; $i < $l; $i++)
		{
			$NewPwd=$NewPwd."".chr(ord($MotdePAsse[$i]) ^ ord($ChaineCryptage[$i]));
		}
		return $NewPwd;
    }
	
	public function dateJour(){
		$dat=  date("l j m Y");	;
		$tab=explode(" ",$dat);
		switch ($tab[0]) {
			case 'Monday':
				$jour="Lun.";
				break;
			case 'Tuesday':
				$jour="Mar.";
				break;
			case 'Wednesday':
				$jour="Mer.";
				break;
			case 'Thursday':
				$jour="Jeu.";
				break;
			case 'Friday':
				$jour="Ven.";
				break;
			case 'Saturday':
				$jour="Sam.";
				break;
			case 'Sunday':
				$jour="Dim.";
				break;
		}
		
		switch ($tab[2]) {
			case 1:
				$mois="Jan.";
				break;
			case 2:
				$mois="Fev.";
				break;
			case 3:
				$mois="Mar.";
				break;
			case 4:
				$mois="Avr.";
				break;
			case 5:
				$mois="Mai";
				break;
			case 6:
				$mois="Juin";
				break;
			case 7:
				$mois="Juil.";
				break;
			case 8:
				$mois="Aout";
				break;
			case 9:
				$mois="Sept.";
				break;
			case 10:
				$mois="Oct.";
				break;
			case 11:
				$mois="Nov.";
				break;
			case 12:
				$mois="Dec.";
				break;
		}
		
		return $jour." ".$tab[1]." ".$mois." ".$tab[3];
	}
	
	public function Mois($val){
		
		switch ($val) {
			case 1:
				$mois="Janvier";
				break;
			case 2:
				$mois="Fevrier";
				break;
			case 3:
				$mois="Mars";
				break;
			case 4:
				$mois="Avril";
				break;
			case 5:
				$mois="Mai";
				break;
			case 6:
				$mois="Juin";
				break;
			case 7:
				$mois="Juillet";
				break;
			case 8:
				$mois="Aout";
				break;
			case 9:
				$mois="Septembre";
				break;
			case 10:
				$mois="Octobre";
				break;
			case 11:
				$mois="Novembre";
				break;
			case 12:
				$mois="Decembre";
				break;
		}
		
		return $mois;
	}
	
	  public function nbreQuartierDifferents($Tableau)
    {
		$resultat=0;
		if (count($Tableau)==0)
			return $resultat;
		else{	
			$eltemp=$Tableau[0];
			$resultat=1;
			$modelsAb = new Application_Model_DbTable_Abonne();
			foreach($Tableau as $el) : 
				$abonne=$modelsAb->obtenirAbonne($el->code_abonne);
				$abonneTemp=$modelsAb->obtenirAbonne($eltemp->code_abonne);
				if ($abonne->code_quartier!=$abonneTemp->code_quartier){
					$resultat=$resultat+1;
				}
				$eltemp=$el;				
			 endforeach;
		}
		return $resultat;
    }	
	
	  public function TriQuartier($Tableau)
    {
		$tab_en_ordre= false;
		$taille=count($Tableau);
		$modelsAb = new Application_Model_DbTable_Abonne();
		while(!$tab_en_ordre){
			$tab_en_ordre=true;			
			for ($i=0; $i < $taille - 1; $i++){
				$abonne=$modelsAb->obtenirAbonne($Tableau[$i]->code_abonne);
				$abonne1=$modelsAb->obtenirAbonne($Tableau[$i+1]->code_abonne);
				if($abonne->code_quartier > $abonne1->code_quartier){
					$temp=$Tableau[$i];
					$Tableau[$i]=$Tableau[$i+1];
					$Tableau[$i+1]=$temp;	
					$tab_en_ordre=false;
				}
			}
			$taille=$taille-1;
		}
		/*foreach ($Tableau as $el):
					$abonne=$modelsAb->obtenirAbonne($el->code_abonne);
					echo '<br/>'.$abonne->code_quartier;
				endforeach;
			echo '---/ <br/>';*/
		return $Tableau;
	}
	
	  public function DecouperQuartier($Tableau)
    {	
		$taille=count($Tableau);
		$tabtrie=$this->TriQuartier($Tableau);
		$temp=$this->nbreQuartierDifferents($tabtrie);
		$nbTD= $temp;
		$index=0;
		$resultat=array();
		$modelsAb = new Application_Model_DbTable_Abonne();
		for ($i=0;$i<$nbTD;$i++){
			$tab=array();
			$nbpas=0;
				for ($j=$index;$j<$taille;$j++){				
					$tab[$nbpas]=$tabtrie[$j];	
					$nbpas=$nbpas+1;
					$abonne=$modelsAb->obtenirAbonne($tabtrie[$j]->code_abonne);
					if ($j<$taille-1)
						$abonne1=$modelsAb->obtenirAbonne($tabtrie[$j+1]->code_abonne);
					else
						$abonne1=$modelsAb->obtenirAbonne($tabtrie[$j]->code_abonne);
					if ($abonne->code_quartier != $abonne1->code_quartier){
						$index=$j+1;
						break;
					}
				}
				/*echo '<br/> i = '.$i.' nbelemnt = '.count($tab);
				foreach ($tab as $el):
					$abonne=$modelsAb->obtenirAbonne($el->code_abonne);
					echo '<br/> '.$abonne->code_quartier.' - i='.$i;
				endforeach;*/
				$resultat[$i]=$tab;
		}
		return $resultat; // tableau de tableau;
	}
	
	  public function Nbjours($date1, $date2)
    {	
		$tab1=explode("-",$date1);
		$tab2=explode("-",$date2);
		$result=0;
		if($tab1[0]==$tab2[0]){
			if($tab1[1]==$tab2[1]){
				if($tab1[2]==$tab2[2]){
					//echo $tab1[2].' '.$tab2[2].'</br>';
					$result= 0;
				}if($tab2[2]>$tab1[2]){
					$result= $tab2[2] - $tab1[2];
				}
			}if($tab2[1]>$tab1[1]){
				if($tab2[2]>$tab1[2]){
			//echo $tab2[1] - $tab1[1].'</br>';
						$result=($tab2[1] - $tab1[1])*30 + $tab2[2] - $tab1[2];
				}
				else{
						//echo $tab2[1] - $tab1[1].'</br>';
						$result=($tab2[1] - $tab1[1])*30 - ($tab1[2] - $tab2[2]);
				}
			}
		}
		if($tab1[0]<$tab2[0]){
			$difan=$tab2[0]-$tab1[0];
			if($tab1[1]==$tab2[1]){
				if($tab1[2]==$tab2[2]){
					$nbjour=$difan*365;
					$result= $nbjour;
				}if($tab2[2]>$tab1[2]){
					$nbjour=$difan*365;
					$result= $nbjour + ($tab2[2] - $tab1[2]);
				}if($tab2[2]<$tab1[2]){
					$nbjour=$difan*365;
					$result= $nbjour - ($tab1[2] - $tab2[2]);
				}
				
			}
			if($tab2[1]>$tab1[1]){
				$difmois= $tab2[1] - $tab1[1];
				if($tab1[2]==$tab2[2]){
					$nbjour=$difan * 365 + (30 *$difmois);
					$result= $nbjour;
				}if($tab2[2]>$tab1[2]){
					$nbjour=$difan * 365 + (30 *$difmois);
					$result= $nbjour + ($tab2[2] - $tab1[2]);
				}if($tab2[2]<$tab1[2]){
					$nbjour=$difan * 365 + (30 *$difmois);
					$result= $nbjour - ($tab1[2] - $tab2[2]);
				}
			
			}
			if($tab2[1]<$tab1[1]){
				$difmois= $tab1[1] - $tab2[1];
				if($tab1[2]==$tab2[2]){
					$nbjour=$difan * 365 - (30 *$difmois);
					$result= $nbjour;
				}if($tab2[2]>$tab1[2]){
					$nbjour=$difan * 365 - (30 *$difmois);
					$result= $nbjour + ($tab2[2] - $tab1[2]);
				}if($tab2[2]<$tab1[2]){
					$nbjour=$difan * 365 - (30 *$difmois);
					$result= $nbjour - ($tab1[2] - $tab2[2]);
				}
			
			}
			
		}
		//echo $result.' in </br>';
		return $result;
	}
	
	
	  public function MontTotal($montConso, $solde, $forfai)
    {	
		if ($solde == 0)
			$result= $montConso;
		if ($solde > 0 && $solde >= $montConso){
			$result= 0;
		}
		if ($solde > 0 && $solde < $montConso){
			$result= $montConso - $solde ;
		}
		if ($solde < 0){
			$result= (-1)*$solde + $montConso;
		}
		return $result+$forfai;
	}
	
	  public function MontRegler($montConso, $solde)
    {	
		if ($solde == 0)
			$result= $montConso;
		if ($solde > 0){
			$result= $solde - $montConso;
		}
		if ($solde < 0){
			$result= (-1)*$solde + $montConso;
		}
		return $result;
	}
        
	  public function Existe($tablo, $val)
    {	
              foreach ($tablo as $elt):
                  if($elt == $val){
                      return true;
                  }
              endforeach;
              return false;
	}
	
	
        public function  EnregistrerLog( $descr, $user)
        {
            
            try {
                 //ajout d'infos sur l'IP et le navigateur
                $descr .= " (IP: ".$this->get_ip() . " browser: ".$this->getBrowserName().")";
                
                $InitLog = new LogDAO(); 

                $enregLog = new Application\Models\Log();

                $enregLog->setDatelog(new DateTime());
                $enregLog->setAction($descr);
                $enregLog->setUtilisateur($user);
                $InitLog->enregistrer($enregLog);
                
                return true;
            } catch (Exception $exc) {
                //echo $exc->getTraceAsString();
                echo $exc->getMessage();
                return false;
            }   
        }
        function get_ip() {
            // IP si internet partagé
            if (isset($_SERVER['HTTP_CLIENT_IP'])) {
                    return $_SERVER['HTTP_CLIENT_IP'];
            }
            // IP derrière un proxy
            elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                    return $_SERVER['HTTP_X_FORWARDED_FOR'];
            }
            // Sinon : IP normale
            else {
                    return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
            }
        }
        
        function getBrowserName()
        {

        $ExactBrowserNameUA=$_SERVER['HTTP_USER_AGENT'];

        if (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "opr/")) {
            // OPERA
            $ExactBrowserNameBR="Opera";
        } elseIf (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "chrome/")) {
            // CHROME
            $ExactBrowserNameBR="Chrome";
        } elseIf (strpos(strtolower($ExactBrowserNameUA), "msie")) {
            // INTERNET EXPLORER
            $ExactBrowserNameBR="Internet Explorer";
        } elseIf (strpos(strtolower($ExactBrowserNameUA), "firefox/")) {
            // FIREFOX
            $ExactBrowserNameBR="Firefox";
        } elseIf (strpos(strtolower($ExactBrowserNameUA), "safari/") and strpos(strtolower($ExactBrowserNameUA), "opr/")==false and strpos(strtolower($ExactBrowserNameUA), "chrome/")==false) {
            // SAFARI
            $ExactBrowserNameBR="Safari";
        } else {
            // OUT OF DATA
            $ExactBrowserNameBR="OUT OF DATA";
        };

        return $ExactBrowserNameBR;
        }
        
    public static function asLetters($number) {
    $convert = explode('.', $number);
    $num[17] = array('zero', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit',
                     'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize');
                      
    $num[100] = array(20 => 'vingt', 30 => 'trente', 40 => 'quarante', 50 => 'cinquante',
                      60 => 'soixante', 70 => 'soixante-dix', 80 => 'quatre-vingt', 90 => 'quatre-vingt-dix');
                                      
    if (isset($convert[1]) && $convert[1] != '') {
      return self::asLetters($convert[0]).' et '.self::asLetters($convert[1]);
    }
    if ($number < 0) return 'moins '.self::asLetters(-$number);
    if ($number < 17) {
      return $num[17][$number];
    }
    elseif ($number < 20) {
      return 'dix-'.self::asLetters($number-10);
    }
    elseif ($number < 100) {
      if ($number%10 == 0) {
        return $num[100][$number];
      }
      elseif (substr($number, -1) == 1) {
        if( ((int)($number/10)*10)<70 ){
          return self::asLetters((int)($number/10)*10).'-et-un';
        }
        elseif ($number == 71) {
          return 'soixante-et-onze';
        }
        elseif ($number == 81) {
          return 'quatre-vingt-un';
        }
        elseif ($number == 91) {
          return 'quatre-vingt-onze';
        }
      }
      elseif ($number < 70) {
        return self::asLetters($number-$number%10).'-'.self::asLetters($number%10);
      }
      elseif ($number < 80) {
        return self::asLetters(60).'-'.self::asLetters($number%20);
      }
      else {
        return self::asLetters(80).'-'.self::asLetters($number%20);
      }
    }
    elseif ($number == 100) {
      return 'cent';
    }
    elseif ($number < 200) {
      return self::asLetters(100).' '.self::asLetters($number%100);
    }
    elseif ($number < 1000) {
      return self::asLetters((int)($number/100)).' '.self::asLetters(100).($number%100 > 0 ? ' '.self::asLetters($number%100): '');
    }
    elseif ($number == 1000){
      return 'mille';
    }
    elseif ($number < 2000) {
      return self::asLetters(1000).' '.self::asLetters($number%1000).' ';
    }
    elseif ($number < 1000000) {
      return self::asLetters((int)($number/1000)).' '.self::asLetters(1000).($number%1000 > 0 ? ' '.self::asLetters($number%1000): '');
    }
    elseif ($number == 1000000) {
      return 'millions';
    }
    elseif ($number < 2000000) {
      return self::asLetters(1000000).' '.self::asLetters($number%1000000);
    }
    elseif ($number < 1000000000) {
      return self::asLetters((int)($number/1000000)).' '.self::asLetters(1000000).($number%1000000 > 0 ? ' '.self::asLetters($number%1000000): '');
    }
  }

		
}
?>
