diff options
author | z0rglub <z0rglub@piwigo.org> | 2004-10-09 11:31:39 +0000 |
---|---|---|
committer | z0rglub <z0rglub@piwigo.org> | 2004-10-09 11:31:39 +0000 |
commit | 75cfef6e6d5b02e7b5119f4d1985d8cfa94c8480 (patch) | |
tree | 1d196f9cc0f8c4ac10c35e68982b47a87bb68e7a /admin/create_listing_file.php | |
parent | 9b1a330905174f93a5186e439e84becced051cb8 (diff) |
admin/create_listing_file.php moved to tools/create_listing_file.php
git-svn-id: http://piwigo.org/svn/trunk@564 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'admin/create_listing_file.php')
-rw-r--r-- | admin/create_listing_file.php | 511 |
1 files changed, 0 insertions, 511 deletions
diff --git a/admin/create_listing_file.php b/admin/create_listing_file.php deleted file mode 100644 index e0de87a88..000000000 --- a/admin/create_listing_file.php +++ /dev/null @@ -1,511 +0,0 @@ -<?php -// +-----------------------------------------------------------------------+ -// | create_listing_file.php | -// +-----------------------------------------------------------------------+ -// | application : PhpWebGallery <http://phpwebgallery.net> | -// | branch : BSF (Best So Far) | -// +-----------------------------------------------------------------------+ -// | file : $RCSfile$ -// | last update : $Date$ -// | last modifier : $Author$ -// | revision : $Revision$ -// +-----------------------------------------------------------------------+ -// | 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. | -// +-----------------------------------------------------------------------+ - -// +-----------------------------------------------------------------------+ -// | parameters | -// +-----------------------------------------------------------------------+ - -// prefix for thumbnails in "thumbnail" sub directories -$conf['prefix_thumbnail'] = 'TN-'; - -// $conf['file_ext'] lists all extensions (case insensitive) allowed for -// your PhpWebGallery installation -$conf['file_ext'] = array('jpg','JPG','png','PNG','gif','GIF','mpg','zip', - 'avi','mp3','ogg'); - -// $conf['picture_ext'] must be a subset of $conf['file_ext'] -$conf['picture_ext'] = array('jpg','JPG','png','PNG','gif','GIF'); - -// $conf['version'] is used to verify the compatibility of the generated -// listing.xml file and the PhpWebGallery version you're running -$conf['version'] = 'BSF'; - -// $conf['use_exif'] set to true if you want to use Exif Date as "creation -// date" for the element, otherwise, set to false -$conf['use_exif'] = true; - -// $conf['use_iptc'] set to true if you want to use IPTC informations of the -// element according to get_sync_iptc_data function mapping, otherwise, set -// to false -$conf['use_iptc'] = false; - -// +-----------------------------------------------------------------------+ -// | functions | -// +-----------------------------------------------------------------------+ - -/** - * 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(); - - // Read IPTC data - $iptc = array(); - - $imginfo = array(); - getimagesize($filename, $imginfo); - - 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]) and $value = $iptc[$iptc_key][0]) - { - // strip leading zeros (weird Kodak Scanner software) - while ($value[0] == chr(0)) - { - $value = substr($value, 1); - } - // remove binary nulls - $value = str_replace(chr(0x00), ' ', $value); - - foreach (array_keys($map, $iptc_key) as $pwg_key) - { - $result[$pwg_key] = $value; - } - } - } - } - } - return $result; -} - -function get_sync_iptc_data($file) -{ - $map = array( - 'keywords' => '2#025', - 'date_creation' => '2#055', - 'author' => '2#122', - 'name' => '2#085', - 'comment' => '2#120' - ); - $datefields = array('date_creation', 'date_available'); - - $iptc = get_iptc_data($file, $map); - - foreach ($iptc as $pwg_key => $value) - { - if (in_array($pwg_key, $datefields)) - { - if ( preg_match('/(\d{4})(\d{2})(\d{2})/', $value, $matches)) - { - $iptc[$pwg_key] = $matches[1].'-'.$matches[2].'-'.$matches[3]; - } - } - } - - return $iptc; -} - -/** - * 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 - * - * @return float - */ -function get_moment() -{ - $t1 = explode(' ', microtime()); - $t2 = explode('.', $t1[0]); - $t2 = $t1[1].'.'.$t2[1]; - return $t2; -} - -/** - * returns the number of seconds (with 3 decimals precision) between the - * start time and the end time given. - * - * @param float start - * @param float end - * @return void - */ -function get_elapsed_time($start, $end) -{ - return number_format($end - $start, 3, '.', ' ').' s'; -} - -/** - * returns an array with all picture files according to $conf['file_ext'] - * - * @param string $dir - * @return array - */ -function get_pwg_files($dir) -{ - global $conf; - - $pictures = array(); - if ($opendir = opendir($dir)) - { - while ($file = readdir($opendir)) - { - if (in_array(get_extension($file), $conf['file_ext'])) - { - array_push($pictures, $file); - if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $file)) - { - echo 'PWG-WARNING-2: "'.$file.'" : '; - echo 'The name of the file should be composed of '; - echo 'letters, figures, "-", "_" or "." ONLY'; - echo "\n"; - } - } - } - } - return $pictures; -} - -/** - * returns an array with all thumbnails according to $conf['picture_ext'] - * and $conf['prefix_thumbnail'] - * - * @param string $dir - * @return array - */ -function get_thumb_files($dir) -{ - global $conf; - - $prefix_length = strlen($conf['prefix_thumbnail']); - - $thumbnails = array(); - if ($opendir = @opendir($dir.'/thumbnail')) - { - while ($file = readdir($opendir)) - { - if (in_array(get_extension($file), $conf['picture_ext']) - and substr($file,0,$prefix_length) == $conf['prefix_thumbnail']) - { - array_push($thumbnails, $file); - } - } - } - return $thumbnails; -} - -/** - * returns an array with representative picture files of a directory - * according to $conf['picture_ext'] - * - * @param string $dir - * @return array - */ -function get_representative_files($dir) -{ - global $conf; - - $pictures = array(); - if ($opendir = @opendir($dir.'/pwg_representative')) - { - while ($file = readdir($opendir)) - { - if (in_array(get_extension($file), $conf['picture_ext'])) - { - array_push($pictures, $file); - } - } - } - return $pictures; -} - -/** - * search in $basedir the sub-directories and calls get_pictures - * - * @return void - */ -function get_dirs($basedir, $indent, $level) -{ - $fs_dirs = array(); - $dirs = ""; - - if ($opendir = opendir($basedir)) - { - while ($file = readdir($opendir)) - { - if ($file != '.' - and $file != '..' - and $file != 'thumbnail' - and $file != 'pwg_high' - and $file != 'pwg_representative' - and is_dir ($basedir.'/'.$file)) - { - array_push($fs_dirs, $file); - if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $file)) - { - echo 'PWG-WARNING-1: "'.$file.'" : '; - echo 'The name of the directory should be composed of '; - echo 'letters, figures, "-", "_" or "." ONLY'; - echo "\n"; - } - } - } - } - // write of the dirs - foreach ($fs_dirs as $fs_dir) - { - $dirs.= "\n".$indent.'<dir'.$level.' name="'.$fs_dir.'">'; - $dirs.= get_pictures($basedir.'/'.$fs_dir, $indent.' '); - $dirs.= get_dirs($basedir.'/'.$fs_dir, $indent.' ', $level + 1); - $dirs.= "\n".$indent.'</dir'.$level.'>'; - } - return $dirs; -} - -// 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, '.')); -} - -function get_pictures($dir, $indent) -{ - global $conf; - - // fs means FileSystem : $fs_files contains files in the filesystem found - // in $dir that can be managed by PhpWebGallery (see get_pwg_files - // function), $fs_thumbnails contains thumbnails, $fs_representatives - // contains potentially representative pictures for non picture files - $fs_files = get_pwg_files($dir); - $fs_thumbnails = get_thumb_files($dir); - $fs_representatives = get_representative_files($dir); - - $elements = array(); - - foreach ($fs_files as $fs_file) - { - $element = array(); - $element['file'] = $fs_file; - $element['filesize'] = floor(filesize($dir.'/'.$fs_file) / 1024); - - $file_wo_ext = get_filename_wo_extension($fs_file); - - foreach ($conf['picture_ext'] as $ext) - { - $test = $conf['prefix_thumbnail'].$file_wo_ext.'.'.$ext; - if (!in_array($test, $fs_thumbnails)) - { - continue; - } - else - { - $element['tn_ext'] = $ext; - break; - } - } - - // 2 cases : the element is a picture or not. Indeed, for a picture - // thumbnail is mandatory and for non picture element, thumbnail and - // representative is optionnal - if (in_array(get_extension($fs_file), $conf['picture_ext'])) - { - // if we found a thumnbnail corresponding to our picture... - if (isset($element['tn_ext'])) - { - if ($image_size = @getimagesize($dir.'/'.$fs_file)) - { - $element['width'] = $image_size[0]; - $element['height'] = $image_size[1]; - } - - if ($conf['use_exif']) - { - if ($exif = @read_exif_data($dir.'/'.$fs_file)) - { - if (isset($exif['DateTime'])) - { - preg_match('/^(\d{4}):(\d{2}):(\d{2})/' - ,$exif['DateTime'] - ,$matches); - $element['date_creation'] = - $matches[1].'-'.$matches[2].'-'.$matches[3]; - } - } - } - - if ($conf['use_iptc']) - { - $iptc = get_sync_iptc_data($dir.'/'.$fs_file); - if (count($iptc) > 0) - { - foreach (array_keys($iptc) as $key) - { - $element[$key] = addslashes($iptc[$key]); - } - } - } - - array_push($elements, $element); - } - else - { - echo 'PWG-ERROR-1: The thumbnail is missing for '.$dir.'/'.$fs_file; - echo '-> '.$dir.'/thumbnail/'; - echo $conf['prefix_thumbnail'].$file_wo_ext.'.xxx'; - echo ' ("xxx" can be : '; - echo implode(', ', $conf['picture_ext']); - echo ')'."\n"; - } - } - else - { - foreach ($conf['picture_ext'] as $ext) - { - $candidate = $file_wo_ext.'.'.$ext; - if (!in_array($candidate, $fs_representatives)) - { - continue; - } - else - { - $element['representative_ext'] = $ext; - break; - } - } - - array_push($elements, $element); - } - } - - $xml = "\n".$indent.'<root>'; - $attributes = array('file','tn_ext','representative_ext','filesize', - 'width','height','date_creation','author','keywords', - 'name','comment'); - foreach ($elements as $element) - { - $xml.= "\n".$indent.' '; - $xml.= '<element'; - foreach ($attributes as $attribute) - { - if (isset($element{$attribute})) - { - $xml.= ' '.$attribute.'="'.$element{$attribute}.'"'; - } - } - $xml.= ' />'; - } - $xml.= "\n".$indent.'</root>'; - - return $xml; -} - -// +-----------------------------------------------------------------------+ -// | script | -// +-----------------------------------------------------------------------+ -if (isset($_GET['action'])) -{ - $page['action'] = $_GET['action']; -} -else -{ - $page['action'] = 'generate'; -} -echo '<pre>'; -switch ($page['action']) -{ - case 'generate' : - { - $start = get_moment(); - - $listing = '<informations'; - $listing.= ' generation_date="'.date('Y-m-d').'"'; - $listing.= ' phpwg_version="'.$conf{'version'}.'"'; - - $end = strrpos($_SERVER['PHP_SELF'], '/') + 1; - $local_folder = substr($_SERVER['PHP_SELF'], 0, $end); - $url = 'http://'.$_SERVER['HTTP_HOST'].$local_folder; - - $listing.= ' url="'.$url.'"'; - $listing.= '/>'."\n"; - - $listing.= get_dirs('.', '', 0); - - if ($fp = @fopen("./listing.xml","w")) - { - fwrite($fp, $listing); - fclose($fp); - echo 'PWG-INFO-1: listing.xml created in '; - echo get_elapsed_time($start, get_moment()); - echo "\n"; - } - else - { - echo "PWG-ERROR-2: I can't write the file listing.xml"."\n"; - } - break; - } - case 'test' : - { - if (isset($_GET['version'])) - { - if ($_GET['version'] != $conf['version']) - { - echo 'PWG-ERROR-4: PhpWebGallery versions differs'."\n"; - } - else - { - echo 'PWG-INFO-2: test successful'."\n"; - } - } - else - { - echo 'PWG-INFO-2: test successful'."\n"; - } - break; - } - case 'clean' : - { - if( @unlink('./listing.xml')) - { - echo 'PWG-INFO-3 : listing.xml file deleted'."\n"; - } - else - { - echo 'PWG-ERROR-3 : listing.xml does not exist'."\n"; - } - break; - } -} -echo '</pre>'; -?> |