2007-03-29 18:10:14 +02:00
< ? php
/*******************************************************************************
* Copyright ( C ) 2007 Easter - eggs
* http :// ldapsaisie . labs . libre - entreprise . org
*
* Author : See AUTHORS file in top - level directory .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation .
*
* This program 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
******************************************************************************/
/**
2008-04-25 16:09:27 +02:00
* Construction d ' une chaine formatée
2007-03-29 18:10:14 +02:00
*
2008-04-25 16:09:27 +02:00
* Cette fonction retourne la valeur d ' une chaine formatée selon le format
* et les données passés en paramètre .
2007-03-29 18:10:14 +02:00
*
* @ author Benjamin Renard < brenard @ easter - eggs . com >
*
* @ param [ in ] $format string Format de la chaine
2008-04-25 16:09:27 +02:00
* @ param [ in ] $data mixed Les données pour composés la chaine
* Ce paramètre peut être un tableau de string , une string ,
2007-03-29 18:10:14 +02:00
* une tableau d ' objet ou un objet .
2008-04-25 16:09:27 +02:00
* @ param [ in ] $meth string Le nom de la methode de / des objet ( s ) à appeler pour
* obtenir la valeur de remplacement dans la chaine formatée .
2007-03-29 18:10:14 +02:00
*
2008-04-25 16:09:27 +02:00
* @ retval string La chaine formatée
2007-03-29 18:10:14 +02:00
*/
function getFData ( $format , $data , $meth = NULL ) {
2007-11-15 19:07:24 +01:00
$unique = false ;
2010-03-04 16:47:37 +01:00
$expr = " % { ([A-Za-z0-9]+)( \ :(-?[0-9])+)?( \ :(-?[0-9]+))?(-)?( \ !| \ _)?(~)?} " ;
2007-11-15 19:07:24 +01:00
if ( ! is_array ( $format )) {
$format = array ( $format );
$unique = true ;
}
for ( $i = 0 ; $i < count ( $format ); $i ++ ) {
if ( is_array ( $data )) {
if ( $meth == NULL ) {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2008-11-09 02:06:30 +01:00
if ( is_array ( $data [ $ch [ 1 ]])) {
$val = $data [ $ch [ 1 ]][ 0 ];
}
else {
$val = $data [ $ch [ 1 ]];
}
2010-03-04 16:47:37 +01:00
$val = _getFData_extractAndModify ( $val , $ch );
2008-10-27 15:06:49 +01:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $val , $format [ $i ]);
2007-03-29 18:10:14 +02:00
}
2007-11-15 19:07:24 +01:00
}
else {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2007-11-15 19:07:24 +01:00
if ( method_exists ( $data [ $ch [ 1 ]], $meth )) {
2008-07-29 15:45:02 +02:00
$value = $data [ $ch [ 1 ]] -> $meth ();
if ( is_array ( $value )) {
$value = $value [ 0 ];
}
2010-03-04 16:47:37 +01:00
$value = _getFData_extractAndModify ( $value , $ch );
2008-07-29 15:45:02 +02:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $value , $format [ $i ]);
2007-11-15 19:07:24 +01:00
}
else {
2009-01-24 18:45:14 +01:00
LSerror :: addErrorCode ( 'fct_getFData_01' , array ( 'meth' => $meth , 'obj' => $ch [ 1 ]));
2007-11-15 19:07:24 +01:00
break ;
}
2007-03-29 18:10:14 +02:00
}
}
}
2009-10-26 00:44:11 +01:00
elseif ( is_object ( $data )) {
2007-11-15 19:07:24 +01:00
if ( $meth == NULL ) {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2009-10-26 00:44:11 +01:00
$value = $data -> $ch [ 1 ];
if ( is_array ( $value )) {
$value = $value [ 0 ];
}
2010-03-04 16:47:37 +01:00
$value = _getFData_extractAndModify ( $value , $ch );
2009-10-26 00:44:11 +01:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $value , $format [ $i ]);
2008-10-27 15:06:49 +01:00
}
2007-11-15 19:07:24 +01:00
}
else {
2008-10-27 15:06:49 +01:00
while ( ereg ( $expr , $format [ $i ], $ch )) {
2007-11-15 19:07:24 +01:00
if ( method_exists ( $data , $meth )) {
2008-07-29 15:45:02 +02:00
$value = $data -> $meth ( $ch [ 1 ]);
if ( is_array ( $value )) {
$value = $value [ 0 ];
}
2010-03-04 16:47:37 +01:00
$value = _getFData_extractAndModify ( $value , $ch );
2008-07-29 15:45:02 +02:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $value , $format [ $i ]);
2007-11-15 19:07:24 +01:00
}
else {
2009-01-25 15:37:03 +01:00
LSerror :: addErrorCode ( 0 , getFData ( _ ( " Function 'getFData' : The method % { meth} of the object % { obj} doesn't exist. " ), array ( 'meth' => $meth , 'obj' => get_class ( $data ))));
2007-11-15 19:07:24 +01:00
break ;
}
2007-03-29 18:10:14 +02:00
}
}
}
2009-10-26 00:44:11 +01:00
else {
while ( ereg ( $expr , $format [ $i ], $ch )) {
2010-03-04 16:47:37 +01:00
$val = _getFData_extractAndModify ( $data , $ch );
2009-10-26 00:44:11 +01:00
$format [ $i ] = ereg_replace ( $ch [ 0 ], $val , $format [ $i ]);
}
}
2007-03-29 18:10:14 +02:00
}
2007-11-15 19:07:24 +01:00
if ( $unique ) {
return $format [ 0 ];
}
2007-03-29 18:10:14 +02:00
return $format ;
}
2010-03-04 16:47:37 +01:00
function _getFData_extractAndModify ( $data , $ch ) {
if ( $ch [ 3 ]) {
if ( $ch [ 5 ]) {
if ( $ch [ 6 ]) {
if ( $ch [ 3 ] < 0 ) {
2010-03-16 11:04:36 +01:00
$s = strlen (( string ) $data ) - ( - 1 * $ch [ 3 ]) - $ch [ 5 ];
2010-03-04 16:47:37 +01:00
$l = $ch [ 5 ];
}
else {
$s = $ch [ 3 ] - $ch [ 5 ];
$l = $ch [ 5 ];
if ( $s < 0 ) {
$l = $l - ( - 1 * $s );
$s = 0 ;
}
}
}
else {
$s = $ch [ 3 ];
$l = $ch [ 5 ];
}
}
else {
$s = 0 ;
$l = $ch [ 3 ];
}
$val = substr (( string ) $data , $s , $l );
}
else {
2010-03-16 11:04:36 +01:00
$val = ( string ) $data ;
2010-03-04 16:47:37 +01:00
}
# Without Accent
if ( $ch [ 8 ]) {
$val = withoutAccents ( $val );
}
# Upper / Lower case
if ( $ch [ 7 ] == " ! " ) {
$val = strtoupper ( $val );
}
elseif ( $ch [ 7 ] == '_' ) {
$val = strtolower ( $val );
}
return $val ;
}
2008-11-09 01:57:50 +01:00
function getFieldInFormat ( $format ) {
$fields = array ();
2010-04-16 15:37:43 +02:00
$expr = " % { ([A-Za-z0-9]+)( \ :(-?[0-9])+)?( \ :(-?[0-9]+))?(-)?( \ !| \ _)?(~)?} " ;
2008-11-09 01:57:50 +01:00
while ( ereg ( $expr , $format , $ch )) {
$fields [] = $ch [ 1 ];
$format = ereg_replace ( $ch [ 0 ], '' , $format );
}
return $fields ;
}
2008-02-05 17:11:21 +01:00
function loadDir ( $dir , $regexpr = '^.*\.php$' ) {
2008-02-08 18:39:24 +01:00
if ( $handle = opendir ( $dir )) {
while ( false !== ( $file = readdir ( $handle ))) {
if ( ereg ( $regexpr , $file )) {
require_once ( $dir . '/' . $file );
}
}
}
else {
2009-03-12 19:01:31 +01:00
die ( _ ( 'Folder not found' ) . ' : ' . $dir );
2008-02-08 18:39:24 +01:00
}
return true ;
2008-02-05 17:11:21 +01:00
}
2007-03-29 18:10:14 +02:00
function valid ( $obj ) {
2009-03-09 13:42:03 +01:00
LSdebug ( 'function valid() : ok' );
2007-03-29 18:10:14 +02:00
return true ;
}
2009-01-21 18:08:09 +01:00
function validPas ( $obj = null ) {
2009-03-09 13:42:03 +01:00
LSdebug ( 'function valid() : nok' );
2009-01-21 18:08:09 +01:00
return false ;
}
2007-03-29 18:10:14 +02:00
function return_data ( $data ) {
return $data ;
}
2009-11-11 20:53:49 +01:00
function varDump ( $data ) {
ob_start ();
var_dump ( $data );
$data = ob_get_contents ();
ob_end_clean ();
return $data ;
}
2009-03-25 13:26:32 +01:00
$GLOBALS [ 'LSdebug_fields' ] = array ();
2008-09-26 20:03:56 +02:00
function LSdebug ( $data , $dump = false ) {
if ( $dump ) {
2009-11-11 20:53:49 +01:00
$GLOBALS [ 'LSdebug_fields' ][] = varDump ( $data );
2008-09-26 20:03:56 +02:00
}
else {
2008-06-05 15:21:18 +02:00
if ( is_array ( $data ) || is_object ( $data )) {
2009-03-25 13:26:32 +01:00
$GLOBALS [ 'LSdebug_fields' ][] = $data ;
2008-02-08 18:39:24 +01:00
}
else {
2009-03-25 13:26:32 +01:00
$GLOBALS [ 'LSdebug_fields' ][] = " [ $data ] " ;
2008-02-08 18:39:24 +01:00
}
}
return true ;
2007-11-15 19:07:24 +01:00
}
2009-10-29 23:01:12 +01:00
function LSdebug_print ( $return = false , $ul = true ) {
2009-03-25 13:26:32 +01:00
if (( $GLOBALS [ 'LSdebug_fields' ] ) && ( LSdebug )) {
2009-10-29 23:01:12 +01:00
if ( $ul ) $txt = '<ul>' ; else $ul = " " ;
2009-03-25 13:26:32 +01:00
foreach ( $GLOBALS [ 'LSdebug_fields' ] as $debug ) {
2008-06-05 15:21:18 +02:00
if ( is_array ( $debug ) || is_object ( $debug )) {
2008-02-08 18:39:24 +01:00
$txt .= '<li><pre>' . print_r ( $debug , true ) . '</pre></li>' ;
}
else {
2009-10-26 00:44:11 +01:00
$txt .= '<li><pre>' . $debug . '</pre></li>' ;
2008-02-08 18:39:24 +01:00
}
}
2009-10-29 23:01:12 +01:00
if ( $ul ) $txt .= '</ul>' ;
2008-02-08 18:39:24 +01:00
$GLOBALS [ 'Smarty' ] -> assign ( 'LSdebug' , $txt );
2008-06-05 15:21:18 +02:00
if ( $return ) {
return $txt ;
}
2008-02-08 18:39:24 +01:00
}
2008-06-05 15:21:18 +02:00
return ;
2007-11-15 19:07:24 +01:00
}
2008-10-13 12:58:48 +02:00
function LSdebugDefined () {
2009-03-25 13:26:32 +01:00
if ( ! LSdebug )
2008-10-13 12:58:48 +02:00
return ;
2009-03-25 13:26:32 +01:00
return ( ! empty ( $GLOBALS [ 'LSdebug_fields' ]));
2008-10-13 12:58:48 +02:00
}
2008-02-08 18:39:24 +01:00
/**
2008-04-25 16:09:27 +02:00
* Vérifie la compatibilite des DN
2008-02-08 18:39:24 +01:00
*
2008-04-25 16:09:27 +02:00
* Vérifie que les DNs sont dans la même branche de l ' annuaire .
2008-02-08 18:39:24 +01:00
*
* @ param [ in ] $dn Un premier DN .
2008-04-25 16:09:27 +02:00
* @ param [ in ] $dn Un deuxième DN .
2008-02-08 18:39:24 +01:00
*
* @ author Benjamin Renard < brenard @ easter - eggs . com >
*
* @ retval boolean true si les DN sont compatibles , false sinon .
*/
function isCompatibleDNs ( $dn1 , $dn2 ) {
$infos1 = ldap_explode_dn ( $dn1 , 0 );
if ( ! $infos1 )
return ;
$infos2 = ldap_explode_dn ( $dn2 , 0 );
if ( ! $infos2 )
return ;
if ( $infos2 [ 'count' ] > $infos1 [ 'count' ]) {
$tmp = $infos1 ;
$infos1 = $infos2 ;
$infos2 = $tmp ;
}
$infos1 = array_reverse ( $infos1 );
$infos2 = array_reverse ( $infos2 );
for ( $i = 0 ; $i < $infos1 [ 'count' ]; $i ++ ) {
if (( $infos1 [ $i ] == $infos2 [ $i ]) || ( ! isset ( $infos2 [ $i ])))
continue ;
else
return false ;
}
return true ;
}
/**
* Fait la somme de DN
*
2008-04-25 16:09:27 +02:00
* Retourne un DN qui correspond au point de séparation des DN si les DN
2008-02-08 18:39:24 +01:00
* ne sont pas dans la meme dans la meme branche ou le dn le plus long sinon .
*
* @ param [ in ] $dn Un premier DN .
2008-04-25 16:09:27 +02:00
* @ param [ in ] $dn Un deuxième DN .
2008-02-08 18:39:24 +01:00
*
* @ author Benjamin Renard < brenard @ easter - eggs . com >
*
* @ retval string Un DN ( ou false si les DN ne sont pas valide )
*/
function sumDn ( $dn1 , $dn2 ) {
$infos1 = ldap_explode_dn ( $dn1 , 0 );
if ( ! $infos1 )
return ;
$infos2 = ldap_explode_dn ( $dn2 , 0 );
if ( ! $infos2 )
return ;
if ( $infos2 [ 'count' ] > $infos1 [ 'count' ]) {
$tmp = $infos1 ;
$infos1 = $infos2 ;
$infos2 = $tmp ;
}
$infos1 = array_reverse ( $infos1 );
$infos2 = array_reverse ( $infos2 );
$first = true ;
$basedn = '' ;
for ( $i = 0 ; $i < $infos1 [ 'count' ]; $i ++ ) {
if (( $infos1 [ $i ] == $infos2 [ $i ]) || ( ! isset ( $infos2 [ $i ]))) {
if ( $first ) {
$basedn = $infos1 [ $i ];
$first = false ;
}
else
$basedn = $infos1 [ $i ] . ',' . $basedn ;
}
else {
return $basedn ;
}
}
return $basedn ;
}
2008-06-05 15:21:18 +02:00
2008-10-07 16:59:23 +02:00
function checkEmail ( $value , $domain = NULL , $checkDns = true ) {
2009-02-12 15:39:44 +01:00
$regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/' ;
2008-06-05 15:21:18 +02:00
if ( ! preg_match ( $regex , $value )) {
2008-09-26 20:03:56 +02:00
LSdebug ( 'checkEmail : regex fail' );
2008-06-05 15:21:18 +02:00
return false ;
}
2009-02-12 15:39:44 +01:00
$nd = explode ( '@' , $value );
$nd = $nd [ 1 ];
if ( $domain ) {
if ( is_array ( $domain )) {
if ( ! in_array ( $nd , $domain )) {
return false ;
}
}
else {
if ( $nd != $domain ) {
return false ;
}
}
}
2008-06-05 15:21:18 +02:00
if ( $checkDns && function_exists ( 'checkdnsrr' )) {
2009-02-12 15:39:44 +01:00
if ( ! ( checkdnsrr ( $nd , 'MX' ) || checkdnsrr ( $nd , 'A' ))) {
2008-09-26 20:03:56 +02:00
LSdebug ( 'checkEmail : DNS fail' );
2008-06-05 15:21:18 +02:00
return false ;
}
}
return true ;
}
function generatePassword ( $chars = NULL , $lenght = NULL ) {
2008-12-06 00:42:47 +01:00
if ( ! $lenght ) {
$lenght = 8 ;
}
if ( is_array ( $chars )) {
$retval = '' ;
foreach ( $chars as $chs ) {
if ( ! is_array ( $chs )) {
$chs = array ( 'chars' => $chs );
}
if ( ! is_int ( $chs [ 'nb' ])) {
$chs [ 'nb' ] = 1 ;
}
$retval .= aleaChar ( $chs [ 'chars' ], $chs [ 'nb' ]);
}
$add = ( $lenght - strlen ( $retval ));
if ( $add > 0 ) {
$retval .= aleaChar ( $chars , $add );
}
return str_shuffle ( $retval );
} else {
return aleaChar ( $chars , $lenght );
}
}
function aleaChar ( $chars = NULL , $lenght = 1 ) {
if ( is_array ( $chars )) {
$nchars = " " ;
foreach ( $chars as $chs ) {
if ( is_string ( $chs )) {
$nchars .= $chs ;
}
else if ( is_string ( $chs [ 'chars' ])) {
$nchars .= $chs [ 'chars' ];
}
}
if ( strlen ( $chars ) > 0 ) {
$chars = $nchars ;
}
else {
$chars = NULL ;
}
}
2008-06-05 15:21:18 +02:00
if ( ! $chars ) {
2008-12-06 00:42:47 +01:00
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-' ;
2008-06-05 15:21:18 +02:00
}
$nbChars = strlen ( $chars );
2008-12-06 00:42:47 +01:00
$retval = " " ;
if ( is_int ( $lenght )) {
for ( $i = 0 ; $i < $lenght ; $i ++ ) {
$retval .= $chars [ rand ( 0 , $nbChars - 1 )];
}
2008-06-05 15:21:18 +02:00
}
2008-12-06 00:42:47 +01:00
return $retval ;
2008-06-05 15:21:18 +02:00
}
2008-06-18 14:27:35 +02:00
function compareDn ( $a , $b ) {
if ( substr_count ( $a , ',' ) > substr_count ( $b , ',' ))
return - 1 ;
else
return 1 ;
}
2009-01-21 18:08:09 +01:00
function LSlog ( $msg ) {
if ( $GLOBALS [ 'LSlog' ][ 'enable' ]) {
global $LSlogFile ;
if ( ! $LSlogFile ) {
$LSlogFile = fopen ( $GLOBALS [ 'LSlog' ][ 'filename' ], 'a' );
}
fwrite ( $LSlogFile , $_SERVER [ 'REQUEST_URI' ] . " : " . $msg . " \n " );
}
}
2009-03-19 18:42:51 +01:00
function __ ( $msg ) {
if ( isset ( $GLOBALS [ 'LSlang' ][ $msg ])) {
return $GLOBALS [ 'LSlang' ][ $msg ];
}
return _ ( $msg );
}
function tr ( $msg , $key = null ) {
2009-03-31 14:49:01 +02:00
if ( is_array ( $msg )) {
echo __ ( $msg [ $key ]);
2009-03-19 18:42:51 +01:00
}
else {
2009-03-31 14:49:01 +02:00
$val = $GLOBALS [ 'Smarty' ] -> get_template_vars ( $msg );
if ( ! $val )
$val = $msg ;
2009-03-31 15:22:23 +02:00
if ( is_array ( $val )) {
echo __ ( $val [ $key ]);
}
else {
echo __ ( $val );
}
2009-03-19 18:42:51 +01:00
}
}
2010-03-04 16:47:37 +01:00
/**
* Supprime les accents d ' une chaine
*
* @ param [ in ] $string La chaine originale
*
* @ retval string La chaine sans les accents
*/
function withoutAccents ( $string ){
$replaceAccent = Array (
" à " => " a " ,
" á " => " a " ,
" â " => " a " ,
" ã " => " a " ,
" ä " => " a " ,
" ç " => " c " ,
" è " => " e " ,
" é " => " e " ,
" ê " => " e " ,
" ë " => " e " ,
" ì " => " i " ,
" í " => " i " ,
" î " => " i " ,
" ï " => " i " ,
" ñ " => " n " ,
" ò " => " o " ,
" ó " => " o " ,
" ô " => " o " ,
" õ " => " o " ,
" ö " => " o " ,
" ù " => " u " ,
" ú " => " u " ,
" û " => " u " ,
" ü " => " u " ,
" ý " => " y " ,
" ÿ " => " y " ,
" À " => " A " ,
" Á " => " A " ,
" Â " => " A " ,
" Ã " => " A " ,
" Ä " => " A " ,
" Ç " => " C " ,
" È " => " E " ,
" É " => " E " ,
" Ê " => " E " ,
" Ë " => " E " ,
" Ì " => " I " ,
" Í " => " I " ,
" Î " => " I " ,
" Ï " => " I " ,
" Ñ " => " N " ,
" Ò " => " O " ,
" Ó " => " O " ,
" Ô " => " O " ,
" Õ " => " O " ,
" Ö " => " O " ,
" Ù " => " U " ,
" Ú " => " U " ,
" Û " => " U " ,
" Ü " => " U " ,
" Ý " => " Y "
);
return strtr ( $string , $replaceAccent );
}
2007-11-15 19:07:24 +01:00
?>