aboutsummaryrefslogtreecommitdiffstats
path: root/admin/create_listing_file.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--admin/create_listing_file.php359
1 files changed, 274 insertions, 85 deletions
diff --git a/admin/create_listing_file.php b/admin/create_listing_file.php
index e58fe5720..bccf71479 100644
--- a/admin/create_listing_file.php
+++ b/admin/create_listing_file.php
@@ -24,35 +24,83 @@
// | 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['picture_ext'] = array ( 'jpg', 'gif', 'png', 'JPG', 'GIF', 'PNG' );
-$listing = '';
+// $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');
-$end = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
-$local_folder = substr( $_SERVER['PHP_SELF'], 0, $end );
-$url = 'http://'.$_SERVER['HTTP_HOST'].$local_folder;
+// $conf['picture_ext'] must bea subset of $conf['file_ext']
+$conf['picture_ext'] = array('jpg','JPG','png','PNG','gif','GIF');
-$listing.= '<url>'.$url.'</url>';
+// $conf['version'] is used to verify the compatibility of the generated
+// listing.xml file and the PhpWebGallery version you're running
+$conf['version'] = 'BSF';
+
+// +-----------------------------------------------------------------------+
+// | functions |
+// +-----------------------------------------------------------------------+
+
+/**
+ * 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 an array with all picture files according to $conf['picture_ext']
+ * 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_picture_files( $dir )
+function get_pwg_files($dir)
{
global $conf;
$pictures = array();
- if ( $opendir = opendir( $dir ) )
+ if ($opendir = opendir($dir))
{
- while ( $file = readdir( $opendir ) )
+ while ($file = readdir($opendir))
{
- if ( in_array( get_extension( $file ), $conf['picture_ext'] ) )
+ if (in_array(get_extension($file), $conf['file_ext']))
{
- array_push( $pictures, $file );
+ 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";
+ }
}
}
}
@@ -66,145 +114,286 @@ function get_picture_files( $dir )
* @param string $dir
* @return array
*/
-function get_thumb_files( $dir )
+function get_thumb_files($dir)
{
global $conf;
- $prefix_length = strlen( $conf['prefix_thumbnail'] );
+ $prefix_length = strlen($conf['prefix_thumbnail']);
$thumbnails = array();
- if ( $opendir = @opendir( $dir ) )
+ if ($opendir = @opendir($dir.'/thumbnail'))
{
- while ( $file = readdir( $opendir ) )
+ while ($file = readdir($opendir))
{
- if ( in_array( get_extension( $file ), $conf['picture_ext'] )
- and substr($file,0,$prefix_length) == $conf['prefix_thumbnail'] )
+ if (in_array(get_extension($file), $conf['picture_ext'])
+ and substr($file,0,$prefix_length) == $conf['prefix_thumbnail'])
{
- array_push( $thumbnails, $file );
+ array_push($thumbnails, $file);
}
}
}
return $thumbnails;
}
-// get_dirs retourne un tableau contenant tous les sous-répertoires d'un
-// répertoire
-function get_dirs( $basedir, $indent, $level )
+/**
+ * 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.'/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 ) )
+ if ($opendir = opendir($basedir))
{
- while ( $file = readdir( $opendir ) )
+ while ($file = readdir($opendir))
{
- if ( $file != '.'
- and $file != '..'
- and is_dir ( $basedir.'/'.$file )
- and $file != 'thumbnail' )
+ if ($file != '.'
+ and $file != '..'
+ and is_dir ($basedir.'/'.$file)
+ and $file != 'thumbnail')
{
- array_push( $fs_dirs, $file );
- if ( !preg_match( '/^[a-zA-Z0-9-_.]+$/', $file ) )
+ array_push($fs_dirs, $file);
+ if (!preg_match('/^[a-zA-Z0-9-_.]+$/', $file))
{
- echo '<span style="color:red;">"'.$file.'" : ';
+ echo 'PWG-WARNING-1: "'.$file.'" : ';
echo 'The name of the directory should be composed of ';
echo 'letters, figures, "-", "_" or "." ONLY';
- echo '</span><br />';
+ echo "\n";
}
}
}
}
// write of the dirs
- foreach ( $fs_dirs as $fs_dir ) {
+ 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.= 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 )
+function get_extension($filename)
{
- return substr( strrchr( $filename, '.' ), 1, strlen ( $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 )
+// get_filename_wo_extension('test.tar.gz') -> 'test.tar'
+function get_filename_wo_extension($filename)
{
- return substr( $filename, 0, strrpos( $filename, '.' ) );
+ return substr($filename, 0, strrpos($filename, '.'));
}
-function get_pictures( $dir, $indent )
+function get_pictures($dir, $indent)
{
global $conf;
- // fs means filesystem : $fs_pictures contains pictures in the filesystem
- // found in $dir, $fs_thumbnails contains thumbnails...
- $fs_pictures = get_picture_files( $dir );
- $fs_thumbnails = get_thumb_files( $dir.'/thumbnail' );
+ // 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);
- $root = "\n".$indent.'<root>';
+ $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 ( $fs_pictures as $fs_picture ) {
- $file_wo_ext = get_filename_wo_extension( $fs_picture );
- $tn_ext = '';
- foreach ( $conf['picture_ext'] as $ext ) {
+ foreach ($conf['picture_ext'] as $ext)
+ {
$test = $conf['prefix_thumbnail'].$file_wo_ext.'.'.$ext;
- if ( !in_array( $test, $fs_thumbnails ) ) continue;
- else { $tn_ext = $ext; break; }
+ if (!in_array($test, $fs_thumbnails))
+ {
+ continue;
+ }
+ else
+ {
+ $element['tn_ext'] = $ext;
+ break;
+ }
}
- // if we found a thumnbnail corresponding to our picture...
- if ( $tn_ext != '' )
+
+ // 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']))
{
- list( $width,$height ) = @getimagesize( $dir.'/'.$fs_picture );
-
- $root.= "\n".$indent.' ';
- $root.= '<picture';
- $root.= ' file="'. $fs_picture.'"';
- $root.= ' tn_ext="'. $tn_ext.'"';
- $root.= ' filesize="'.floor(filesize($dir.'/'.$fs_picture)/1024).'"';
- $root.= ' width="'. $width.'"';
- $root.= ' height="'. $height.'"';
- $root.= ' />';
-
- if ( !preg_match( '/^[a-zA-Z0-9-_.]+$/', $fs_picture ) )
+ // 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];
+ }
+
+ array_push($elements, $element);
+ }
+ else
{
- echo '<span style="color:red;">"'.$fs_picture.'" : ';
- echo 'The name of the picture should be composed of ';
- echo 'letters, figures, "-", "_" or "." ONLY';
- echo '</span><br />';
+ 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
{
- echo 'The thumbnail is missing for '.$dir.'/'.$fs_picture;
- echo '-> '.$dir.'/thumbnail/';
- echo $conf['prefix_thumbnail'].$file_wo_ext.'.xxx';
- echo ' ("xxx" can be : ';
- echo implode( ', ', $conf['picture_ext'] );
- echo ')<br />';
+ 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);
}
}
- $root.= "\n".$indent.'</root>';
+ $xml = "\n".$indent.'<root>';
+ $attributes = array('file','tn_ext','representative_ext','filesize',
+ 'width','height');
+ 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 $root;
+ return $xml;
}
-$listing.= get_dirs( '.', '', 0 );
-
-if ( $fp = @fopen("./listing.xml","w") )
+// +-----------------------------------------------------------------------+
+// | script |
+// +-----------------------------------------------------------------------+
+if (isset($_GET['action']))
{
- fwrite( $fp, $listing );
- fclose( $fp );
- echo "listing.xml created";
+ $page['action'] = $_GET['action'];
}
else
{
- echo "I can't write the file listing.xml";
+ $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>';
?>