2003-05-09 14:42:42 +02:00
|
|
|
|
<?php
|
|
|
|
|
/***************************************************************************
|
|
|
|
|
* functions.inc.php *
|
|
|
|
|
* ------------------- *
|
2003-08-24 09:40:56 +02:00
|
|
|
|
* application : PhpWebGallery 1.3 <http://phpwebgallery.net> *
|
|
|
|
|
* author : Pierrick LE GALL <pierrick@z0rglub.com> *
|
|
|
|
|
* *
|
|
|
|
|
* $Id$
|
2003-05-09 14:42:42 +02:00
|
|
|
|
* *
|
|
|
|
|
***************************************************************************
|
|
|
|
|
|
|
|
|
|
***************************************************************************
|
|
|
|
|
* *
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
|
* the Free Software Foundation; *
|
|
|
|
|
* *
|
|
|
|
|
***************************************************************************/
|
|
|
|
|
include( 'functions_user.inc.php' );
|
|
|
|
|
include( 'functions_session.inc.php' );
|
|
|
|
|
include( 'functions_category.inc.php' );
|
2003-05-17 13:42:03 +02:00
|
|
|
|
include( 'functions_xml.inc.php' );
|
2003-07-01 11:27:20 +02:00
|
|
|
|
include( 'functions_group.inc.php' );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------- generic functions
|
|
|
|
|
|
2003-05-13 12:02:06 +02:00
|
|
|
|
// get_enums returns an array containing the possible values of a enum field
|
|
|
|
|
// in a table of the database.
|
|
|
|
|
function get_enums( $table, $field )
|
|
|
|
|
{
|
|
|
|
|
// retrieving the properties of the table. Each line represents a field :
|
|
|
|
|
// columns are 'Field', 'Type'
|
|
|
|
|
$result=mysql_query("desc $table");
|
|
|
|
|
while ( $row = mysql_fetch_array( $result ) )
|
|
|
|
|
{
|
|
|
|
|
// we are only interested in the the field given in parameter for the
|
|
|
|
|
// function
|
|
|
|
|
if ( $row['Field']==$field )
|
|
|
|
|
{
|
|
|
|
|
// retrieving possible values of the enum field
|
|
|
|
|
// enum('blue','green','black')
|
|
|
|
|
$option = explode( ',', substr($row['Type'], 5, -1 ) );
|
|
|
|
|
for ( $i = 0; $i < sizeof( $option ); $i++ )
|
|
|
|
|
{
|
|
|
|
|
// deletion of quotation marks
|
|
|
|
|
$option[$i] = str_replace( "'", '',$option[$i] );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
mysql_free_result( $result );
|
|
|
|
|
return $option;
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-10 13:29:52 +02:00
|
|
|
|
// get_boolean transforms a string to a boolean value. If the string is
|
|
|
|
|
// "false" (case insensitive), then the boolean value false is returned. In
|
|
|
|
|
// any other case, true is returned.
|
2003-05-09 14:42:42 +02:00
|
|
|
|
function get_boolean( $string )
|
|
|
|
|
{
|
|
|
|
|
$boolean = true;
|
|
|
|
|
if ( preg_match( '/^false$/i', $string ) )
|
|
|
|
|
{
|
|
|
|
|
$boolean = false;
|
|
|
|
|
}
|
|
|
|
|
return $boolean;
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-10 13:29:52 +02:00
|
|
|
|
// array_remove removes a value from the given array if the value existed in
|
|
|
|
|
// this array.
|
2003-05-09 14:42:42 +02:00
|
|
|
|
function array_remove( $array, $value )
|
|
|
|
|
{
|
|
|
|
|
$output = array();
|
2003-07-21 21:47:14 +02:00
|
|
|
|
foreach ( $array as $v ) {
|
2003-07-26 11:28:58 +02:00
|
|
|
|
if ( $v != $value ) array_push( $output, $v );
|
2003-07-21 21:47:14 +02:00
|
|
|
|
}
|
|
|
|
|
return $output;
|
2003-05-09 14:42:42 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// The function get_moment returns a float value coresponding to the number
|
|
|
|
|
// of seconds since the unix epoch (1st January 1970) and the microseconds
|
|
|
|
|
// are precised : e.g. 1052343429.89276600
|
|
|
|
|
function get_moment()
|
|
|
|
|
{
|
2003-05-13 12:02:06 +02:00
|
|
|
|
$t1 = explode( ' ', microtime() );
|
|
|
|
|
$t2 = explode( '.', $t1[0] );
|
|
|
|
|
$t2 = $t1[1].'.'.$t2[1];
|
2003-05-09 14:42:42 +02:00
|
|
|
|
return $t2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// The function get_elapsed_time returns the number of seconds (with 3
|
|
|
|
|
// decimals precision) between the start time and the end time given.
|
|
|
|
|
function get_elapsed_time( $start, $end )
|
|
|
|
|
{
|
|
|
|
|
return number_format( $end - $start, 3, '.', ' ').' s';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// - The replace_space function replaces space and '-' characters
|
|
|
|
|
// by their HTML equivalent &nbsb; and −
|
|
|
|
|
// - The function does not replace characters in HTML tags
|
|
|
|
|
// - This function was created because IE5 does not respect the
|
|
|
|
|
// CSS "white-space: nowrap;" property unless space and minus
|
|
|
|
|
// characters are replaced like this function does.
|
2003-05-21 19:46:57 +02:00
|
|
|
|
// - Example :
|
|
|
|
|
// <div class="foo">My friend</div>
|
|
|
|
|
// ( 01234567891111111111222222222233 )
|
|
|
|
|
// ( 0123456789012345678901 )
|
|
|
|
|
// becomes :
|
|
|
|
|
// <div class="foo">My friend</div>
|
2003-05-09 14:42:42 +02:00
|
|
|
|
function replace_space( $string )
|
|
|
|
|
{
|
2003-05-21 19:46:57 +02:00
|
|
|
|
//return $string;
|
|
|
|
|
$return_string = '';
|
|
|
|
|
// $remaining is the rest of the string where to replace spaces characters
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$remaining = $string;
|
2003-05-21 19:46:57 +02:00
|
|
|
|
// $start represents the position of the next '<' character
|
|
|
|
|
// $end represents the position of the next '>' character
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$start = 0;
|
|
|
|
|
$end = 0;
|
2003-05-21 19:46:57 +02:00
|
|
|
|
$start = strpos ( $remaining, '<' ); // -> 0
|
|
|
|
|
$end = strpos ( $remaining, '>' ); // -> 16
|
|
|
|
|
// as long as a '<' and his friend '>' are found, we loop
|
2003-05-09 14:42:42 +02:00
|
|
|
|
while ( is_numeric( $start ) and is_numeric( $end ) )
|
|
|
|
|
{
|
2003-05-21 19:46:57 +02:00
|
|
|
|
// $treatment is the part of the string to treat
|
|
|
|
|
// In the first loop of our example, this variable is empty, but in the
|
|
|
|
|
// second loop, it equals 'My friend'
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$treatment = substr ( $remaining, 0, $start );
|
2003-05-21 19:46:57 +02:00
|
|
|
|
// Replacement of ' ' by his equivalent ' '
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$treatment = str_replace( ' ', ' ', $treatment );
|
|
|
|
|
$treatment = str_replace( '-', '−', $treatment );
|
2003-05-21 19:46:57 +02:00
|
|
|
|
// composing the string to return by adding the treated string and the
|
|
|
|
|
// following HTML tag -> 'My friend</div>'
|
|
|
|
|
$return_string.= $treatment.substr( $remaining, $start, $end-$start+1 );
|
|
|
|
|
// the remaining string is deplaced to the part after the '>' of this
|
|
|
|
|
// loop
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$remaining = substr ( $remaining, $end + 1, strlen( $remaining ) );
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$start = strpos ( $remaining, '<' );
|
|
|
|
|
$end = strpos ( $remaining, '>' );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
}
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$treatment = str_replace( ' ', ' ', $remaining );
|
|
|
|
|
$treatment = str_replace( '-', '−', $treatment );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$return_string.= $treatment;
|
2003-05-21 19:46:57 +02:00
|
|
|
|
|
2003-05-09 14:42:42 +02:00
|
|
|
|
return $return_string;
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-17 13:42:03 +02:00
|
|
|
|
// get_extension returns the part of the string after the last "."
|
|
|
|
|
function get_extension( $filename )
|
|
|
|
|
{
|
|
|
|
|
return substr( strrchr( $filename, '.' ), 1, strlen ( $filename ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// get_filename_wo_extension returns the part of the string before the last
|
|
|
|
|
// ".".
|
|
|
|
|
// get_filename_wo_extension( 'test.tar.gz' ) -> 'test.tar'
|
|
|
|
|
function get_filename_wo_extension( $filename )
|
|
|
|
|
{
|
|
|
|
|
return substr( $filename, 0, strrpos( $filename, '.' ) );
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-09 14:42:42 +02:00
|
|
|
|
// get_dirs retourne un tableau contenant tous les sous-r<>pertoires d'un
|
|
|
|
|
// r<>pertoire
|
|
|
|
|
function get_dirs( $rep )
|
|
|
|
|
{
|
|
|
|
|
$sub_rep = array();
|
|
|
|
|
|
|
|
|
|
if ( $opendir = opendir ( $rep ) )
|
|
|
|
|
{
|
|
|
|
|
while ( $file = readdir ( $opendir ) )
|
|
|
|
|
{
|
2003-05-25 10:31:39 +02:00
|
|
|
|
if ( $file != '.' and $file != '..' and is_dir ( $rep.$file ) )
|
2003-05-09 14:42:42 +02:00
|
|
|
|
{
|
|
|
|
|
array_push( $sub_rep, $file );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $sub_rep;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// The get_picture_size function return an array containing :
|
|
|
|
|
// - $picture_size[0] : final width
|
|
|
|
|
// - $picture_size[1] : final height
|
|
|
|
|
// The final dimensions are calculated thanks to the original dimensions and
|
|
|
|
|
// the maximum dimensions given in parameters. get_picture_size respects
|
|
|
|
|
// the width/height ratio
|
|
|
|
|
function get_picture_size( $original_width, $original_height,
|
|
|
|
|
$max_width, $max_height )
|
|
|
|
|
{
|
|
|
|
|
$width = $original_width;
|
|
|
|
|
$height = $original_height;
|
|
|
|
|
$is_original_size = true;
|
|
|
|
|
|
|
|
|
|
if ( $max_width != "" )
|
|
|
|
|
{
|
|
|
|
|
if ( $original_width > $max_width )
|
|
|
|
|
{
|
|
|
|
|
$width = $max_width;
|
|
|
|
|
$height = floor( ( $width * $original_height ) / $original_width );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( $max_height != "" )
|
|
|
|
|
{
|
|
|
|
|
if ( $original_height > $max_height )
|
|
|
|
|
{
|
|
|
|
|
$height = $max_height;
|
|
|
|
|
$width = floor( ( $height * $original_width ) / $original_height );
|
|
|
|
|
$is_original_size = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( is_numeric( $max_width ) and is_numeric( $max_height )
|
|
|
|
|
and $max_width != 0 and $max_height != 0 )
|
|
|
|
|
{
|
|
|
|
|
$ratioWidth = $original_width / $max_width;
|
|
|
|
|
$ratioHeight = $original_height / $max_height;
|
|
|
|
|
if ( ( $ratioWidth > 1 ) or ( $ratioHeight > 1 ) )
|
|
|
|
|
{
|
|
|
|
|
if ( $ratioWidth < $ratioHeight )
|
|
|
|
|
{
|
|
|
|
|
$width = floor( $original_width / $ratioHeight );
|
|
|
|
|
$height = $max_height;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
$width = $max_width;
|
|
|
|
|
$height = floor( $original_height / $ratioWidth );
|
|
|
|
|
}
|
|
|
|
|
$is_original_size = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$picture_size = array();
|
|
|
|
|
$picture_size[0] = $width;
|
|
|
|
|
$picture_size[1] = $height;
|
|
|
|
|
return $picture_size;
|
|
|
|
|
}
|
|
|
|
|
//-------------------------------------------- PhpWebGallery specific functions
|
|
|
|
|
|
|
|
|
|
// get_languages retourne un tableau contenant tous les languages
|
|
|
|
|
// disponibles pour PhpWebGallery
|
|
|
|
|
function get_languages( $rep_language )
|
|
|
|
|
{
|
|
|
|
|
$languages = array();
|
|
|
|
|
$i = 0;
|
|
|
|
|
if ( $opendir = opendir ( $rep_language ) )
|
|
|
|
|
{
|
|
|
|
|
while ( $file = readdir ( $opendir ) )
|
|
|
|
|
{
|
|
|
|
|
if ( is_file ( $rep_language.$file )
|
|
|
|
|
and $file != "index.php"
|
|
|
|
|
and strrchr ( $file, "." ) == ".php" )
|
|
|
|
|
{
|
|
|
|
|
$languages[$i++] =
|
|
|
|
|
substr ( $file, 0, strlen ( $file )
|
|
|
|
|
- strlen ( strrchr ( $file, "." ) ) );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $languages;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// get_themes retourne un tableau contenant tous les "template - couleur"
|
|
|
|
|
function get_themes( $theme_dir )
|
|
|
|
|
{
|
|
|
|
|
$themes = array();
|
|
|
|
|
$main_themes = get_dirs( $theme_dir );
|
|
|
|
|
for ( $i = 0; $i < sizeof( $main_themes ); $i++ )
|
|
|
|
|
{
|
|
|
|
|
$colors = get_dirs( $theme_dir.$main_themes[$i].'/' );
|
|
|
|
|
for ( $j = 0; $j < sizeof( $colors ); $j++ )
|
|
|
|
|
{
|
|
|
|
|
array_push( $themes, $main_themes[$i].' - '.$colors[$j] );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $themes;
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-25 10:31:39 +02:00
|
|
|
|
// - add_style replaces the
|
|
|
|
|
// $search into <span style="$style">$search</span>
|
|
|
|
|
// in the given $string.
|
2003-05-09 14:42:42 +02:00
|
|
|
|
// - The function does not replace characters in HTML tags
|
2003-05-25 10:31:39 +02:00
|
|
|
|
function add_style( $string, $search, $style )
|
2003-05-09 14:42:42 +02:00
|
|
|
|
{
|
|
|
|
|
//return $string;
|
2003-05-25 10:31:39 +02:00
|
|
|
|
$return_string = '';
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$remaining = $string;
|
|
|
|
|
|
|
|
|
|
$start = 0;
|
|
|
|
|
$end = 0;
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$start = strpos ( $remaining, '<' );
|
|
|
|
|
$end = strpos ( $remaining, '>' );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
while ( is_numeric( $start ) and is_numeric( $end ) )
|
|
|
|
|
{
|
|
|
|
|
$treatment = substr ( $remaining, 0, $start );
|
2003-05-25 10:31:39 +02:00
|
|
|
|
$treatment = str_replace( $search, '<span style="'.$style.'">'.
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$search.'</span>', $treatment );
|
2003-05-25 10:31:39 +02:00
|
|
|
|
$return_string.= $treatment.substr( $remaining, $start, $end-$start+1 );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$remaining = substr ( $remaining, $end + 1, strlen( $remaining ) );
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$start = strpos ( $remaining, '<' );
|
|
|
|
|
$end = strpos ( $remaining, '>' );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
}
|
2003-05-25 10:31:39 +02:00
|
|
|
|
$treatment = str_replace( $search, '<span style="'.$style.'">'.
|
2003-05-10 13:29:52 +02:00
|
|
|
|
$search.'</span>', $remaining );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$return_string.= $treatment;
|
|
|
|
|
|
|
|
|
|
return $return_string;
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-25 10:31:39 +02:00
|
|
|
|
// replace_search replaces a searched words array string by the search in
|
|
|
|
|
// another style for the given $string.
|
|
|
|
|
function replace_search( $string, $search )
|
|
|
|
|
{
|
|
|
|
|
$words = explode( ',', $search );
|
|
|
|
|
$style = 'background-color:white;color:red;';
|
|
|
|
|
foreach ( $words as $word ) {
|
|
|
|
|
$string = add_style( $string, $word, $style );
|
|
|
|
|
}
|
|
|
|
|
return $string;
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-09 14:42:42 +02:00
|
|
|
|
function database_connection()
|
|
|
|
|
{
|
2003-07-01 11:27:20 +02:00
|
|
|
|
include( PREFIX_INCLUDE.'./include/mysql.inc.php' );
|
|
|
|
|
define( PREFIX_TABLE, $prefix_table );
|
2003-05-17 13:42:03 +02:00
|
|
|
|
|
2003-05-09 14:42:42 +02:00
|
|
|
|
@mysql_connect( $cfgHote, $cfgUser, $cfgPassword )
|
|
|
|
|
or die ( "Could not connect to server" );
|
|
|
|
|
@mysql_select_db( $cfgBase )
|
|
|
|
|
or die ( "Could not connect to database" );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function pwg_log( $file, $category, $picture = '' )
|
|
|
|
|
{
|
2003-05-17 13:42:03 +02:00
|
|
|
|
global $conf, $user;
|
2003-05-09 14:42:42 +02:00
|
|
|
|
|
|
|
|
|
if ( $conf['log'] )
|
|
|
|
|
{
|
2003-05-17 13:42:03 +02:00
|
|
|
|
$query = 'insert into '.PREFIX_TABLE.'history';
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$query.= ' (date,login,IP,file,category,picture) values';
|
2003-07-21 21:47:14 +02:00
|
|
|
|
$query.= " (".time().", '".$user['username']."'";
|
2003-05-09 14:42:42 +02:00
|
|
|
|
$query.= ",'".$_SERVER['REMOTE_ADDR']."'";
|
|
|
|
|
$query.= ",'".$file."','".$category."','".$picture."');";
|
|
|
|
|
mysql_query( $query );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-13 12:02:06 +02:00
|
|
|
|
function templatize_array( $array, $global_array_name, $handle )
|
2003-05-09 14:42:42 +02:00
|
|
|
|
{
|
2003-05-13 12:02:06 +02:00
|
|
|
|
global $vtp, $lang, $page, $user, $conf;
|
2003-05-09 14:42:42 +02:00
|
|
|
|
|
2003-07-21 21:47:14 +02:00
|
|
|
|
foreach ( $array as $value ) {
|
|
|
|
|
$vtp->setGlobalVar( $handle, $value, ${$global_array_name}[$value] );
|
2003-05-09 14:42:42 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2003-08-30 17:54:37 +02:00
|
|
|
|
|
|
|
|
|
function format_date( $date, $type = 'us', $show_time = false )
|
|
|
|
|
{
|
|
|
|
|
global $lang;
|
|
|
|
|
|
|
|
|
|
switch ( $type )
|
|
|
|
|
{
|
|
|
|
|
case 'us' :
|
|
|
|
|
list( $year,$month,$day ) = explode( '-', $date );
|
|
|
|
|
$unixdate = mktime(0,0,0,$month,$day,$year);
|
|
|
|
|
break;
|
|
|
|
|
case 'unix' :
|
|
|
|
|
$unixdate = $date;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$formated_date = $lang['day'][date( "w", $unixdate )];
|
|
|
|
|
$formated_date.= date( " j ", $unixdate );
|
|
|
|
|
$formated_date.= $lang['month'][date( "n", $unixdate )];
|
|
|
|
|
$formated_date.= date( ' Y', $unixdate );
|
|
|
|
|
if ( $show_time )
|
|
|
|
|
{
|
|
|
|
|
$formated_date.= date( ' G:i', $unixdate );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $formated_date;
|
|
|
|
|
}
|
2003-05-09 14:42:42 +02:00
|
|
|
|
?>
|