mirror of
https://github.com/Piwigo/Piwigo.git
synced 2025-04-27 03:39:57 +03:00

a. non latin tags (greek/cyrillic...) are not sorted case-insesitive and group by letter view in tag list is not case insesitive b. quick searching tag names does not perform correctly accent folding (e.g. Köln and Koln do not match) and case insesitivity for non latin letters c. missing from remove_accents characters in romanian language (Latin Extended-B) ? c8 98 = LATIN CAPITAL LETTER S WITH COMMA BELOW ? c8 99 = LATIN SMALL LETTER S WITH COMMA BELOW ? c8 9a = LATIN CAPITAL LETTER T WITH COMMA BELOW ? c8 9b = LATIN SMALL LETTER T WITH COMMA BELOW d. str2url allow non latin letters in output only if the input does not contain any valid lating letter/digit. we should always allow non latin letters in output git-svn-id: http://piwigo.org/svn/trunk@17748 68402e56-0260-453c-a942-63ccdbb3a9ee
145 lines
No EOL
4.2 KiB
PHP
145 lines
No EOL
4.2 KiB
PHP
<?php
|
|
// +-----------------------------------------------------------------------+
|
|
// | Piwigo - a PHP based photo gallery |
|
|
// +-----------------------------------------------------------------------+
|
|
// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org |
|
|
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
|
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
|
// +-----------------------------------------------------------------------+
|
|
// | 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 |
|
|
// | |
|
|
// | 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. |
|
|
// +-----------------------------------------------------------------------+
|
|
|
|
/**
|
|
* returns informations from IPTC metadata, mapping is done at the beginning
|
|
* of the function
|
|
*
|
|
* @param string $filename
|
|
* @return array
|
|
*/
|
|
function get_iptc_data($filename, $map)
|
|
{
|
|
$result = array();
|
|
|
|
$imginfo = array();
|
|
if (false == @getimagesize($filename, $imginfo) )
|
|
{
|
|
return $result;
|
|
}
|
|
|
|
if (isset($imginfo['APP13']))
|
|
{
|
|
$iptc = iptcparse($imginfo['APP13']);
|
|
if (is_array($iptc))
|
|
{
|
|
$rmap = array_flip($map);
|
|
foreach (array_keys($rmap) as $iptc_key)
|
|
{
|
|
if (isset($iptc[$iptc_key][0]))
|
|
{
|
|
if ($iptc_key == '2#025')
|
|
{
|
|
$value = implode(',',
|
|
array_map('clean_iptc_value',$iptc[$iptc_key]));
|
|
}
|
|
else
|
|
{
|
|
$value = clean_iptc_value($iptc[$iptc_key][0]);
|
|
}
|
|
|
|
foreach (array_keys($map, $iptc_key) as $pwg_key)
|
|
{
|
|
$result[$pwg_key] = $value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* return a cleaned IPTC value
|
|
*
|
|
* @param string value
|
|
* @return string
|
|
*/
|
|
function clean_iptc_value($value)
|
|
{
|
|
// strip leading zeros (weird Kodak Scanner software)
|
|
while ( isset($value[0]) and $value[0] == chr(0))
|
|
{
|
|
$value = substr($value, 1);
|
|
}
|
|
// remove binary nulls
|
|
$value = str_replace(chr(0x00), ' ', $value);
|
|
|
|
if ( preg_match('/[\x80-\xff]/', $value) )
|
|
{
|
|
// apparently mac uses some MacRoman crap encoding. I don't know
|
|
// how to detect it so a plugin should do the trick.
|
|
$value = trigger_event('clean_iptc_value', $value);
|
|
if ( ($qual = qualify_utf8($value)) != 0)
|
|
{// has non ascii chars
|
|
$value = convert_charset( $value,
|
|
$qual>0 ? 'utf-8' : 'iso-8859-1',
|
|
get_pwg_charset() );
|
|
}
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* returns informations from EXIF metadata, mapping is done at the beginning
|
|
* of the function
|
|
*
|
|
* @param string $filename
|
|
* @return array
|
|
*/
|
|
function get_exif_data($filename, $map)
|
|
{
|
|
$result = array();
|
|
|
|
if (!function_exists('read_exif_data'))
|
|
{
|
|
die('Exif extension not available, admin should disable exif use');
|
|
}
|
|
|
|
// Read EXIF data
|
|
if ($exif = @read_exif_data($filename))
|
|
{
|
|
$exif = trigger_event('format_exif_data', $exif, $filename, $map );
|
|
foreach ($map as $key => $field)
|
|
{
|
|
if (strpos($field, ';') === false)
|
|
{
|
|
if (isset($exif[$field]))
|
|
{
|
|
$result[$key] = $exif[$field];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$tokens = explode(';', $field);
|
|
if (isset($exif[$tokens[0]][$tokens[1]]))
|
|
{
|
|
$result[$key] = $exif[$tokens[0]][$tokens[1]];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
?>
|