JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
updated coding conventions and fixed states pulldown
[wfpl.git] / upload.php
index b8762b7..46f8b3c 100644 (file)
@@ -4,20 +4,19 @@
 #
 #  This file is part of wfpl.
 #
-#  wfpl 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; either version 2, or (at your option)
+#  wfpl is free software; you can redistribute it and/or modify it under the
+#  terms of the GNU Lesser General Public License as published by the Free
+#  Software Foundation; either version 2.1 of the License, or (at your option)
 #  any later version.
 #
-#  wfpl 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.
+#  wfpl 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 Lesser General Public License for
+#  more details.
 #
-#  You should have received a copy of the GNU General Public License
-#  along with wfpl; see the file COPYING.  If not, write to the
-#  Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-#  MA 02111-1307, USA.
+#  You should have received a copy of the GNU Lesser General Public License
+#  along with wfpl; if not, write to the Free Software Foundation, Inc., 51
+#  Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 
 # This file contains functions to accept files being uplodad with the <input
 # the type you specified, it will convert the image for you.
 
 
-
 $GLOBALS['mime_to_ext'] = array(
        'text/plain' => 'txt',
        'text/html'  => 'html',
        'image/jpeg' => 'jpg',
+       'image/jpe' => 'jpg',
        'image/jpg'  => 'jpg',
        'image/gif'  => 'gif',
        'image/png'  => 'png',
@@ -117,7 +116,7 @@ function generate_filename($path, $mime = 'text/plain') {
        # replace symbols with underscores
        $filename = ereg_replace('[^a-z0-9_.]', '_', $filename);
 
-       # remove dots from the begning (no invisible files)
+       # remove dots from the beginning (no invisible files)
        $filename = ereg_replace('^\.*', '', $filename);
 
        # fix extension
@@ -157,12 +156,31 @@ function save_uploaded_file($key, $path) {
        }
 
        if(!move_uploaded_file($_FILES[$key]['tmp_name'], $filename)) {
-               die('file upload failed');
+               return false;
        }
 
        return $filename;
 }
 
+function path_to_convert() {
+       if(!isset($GLOBALS['path_to_convert'])) {
+               $convert = '/usr/local/bin/convert';
+               if(!file_exists($convert)) {
+                       $convert = '/usr/bin/convert';
+               }
+               if(!file_exists($convert)) {
+                       $convert = `which convert`;
+               }
+               if($convert == '' || !file_exists($convert)) {
+                       die("can't find imagemagick's 'convert' program");
+               }
+
+               $GLOBALS['path_to_convert'] = $convert;
+       }
+
+       return $GLOBALS['path_to_convert'];
+}
+               
 
 # returns new filename with .png extension
 function gif_to_png($filename, $new_filename = 'just change extension') {
@@ -175,17 +193,8 @@ function gif_to_png($filename, $new_filename = 'just change extension') {
                $new_filename .= '.png';
        }
 
-       $convert = '/usr/local/bin/convert';
-       if(!file_exists($convert)) {
-               $convert = '/usr/bin/convert';
-       }
-       if(!file_exists($convert)) {
-               $convert = `which convert`;
-       }
-       if(!file_exists($convert)) {
-               die("can't find imagemagick's 'convert' program");
-       }
-               
+       $convert = path_to_convert();
+
        $command = "$convert " . escapeshellarg($filename) . ' ' . escapeshellarg($new_filename);
 
        exec($command, $dummy, $ret);
@@ -196,6 +205,41 @@ function gif_to_png($filename, $new_filename = 'just change extension') {
        return $new_filename;
 }
 
+# make a thumbnail image.
+#
+# Thumbnail will have the same filename, except "_thumb" will be added right
+# before the dot preceding the extension. so foo.png yields foo_thumb.png
+#
+# Thumbnail will retain aspect ratio, and be either $max_width wide or
+# $max_height tall (or, if the aspect is just right, both)
+function make_thumbnail($filename, $max_width = '70', $max_height = '70') {
+       $thumb = ereg_replace('[.]([a-z]+)$', "_thumb.\\1", $filename);
+       if($thumb == $filename) {
+               die("couldn't make thumbnail because filename has no extension.");
+       }
+
+       $convert = path_to_convert();
+
+       # can't be too careful
+       $max_width = ereg_replace('[^0-9]', '', $max_width);
+       if($max_width == '') {
+               $max_width = '70';
+       }
+       $max_height = ereg_replace('[^0-9]', '', $max_height);
+       if($max_height == '') {
+               $max_height = '70';
+       }
+       
+       $command = "$convert -geometry ${max_width}x$max_height " . escapeshellarg($filename) . ' ' . escapeshellarg($thumb);
+
+       exec($command, $dummy, $ret);
+       if($ret != 0) {
+               die("Thumbnail creatin failed. convert did exit($ret)");
+       }
+
+       return $thumb;
+}
+
 # like save_uploaded_file() (above) except it converts gifs to pngs.
 #
 # FIXME: if a filename is passed in the end of path, we should check if the file type matches, and if not run convert.