]> dev.renevier.net Git - syp.git/blobdiff - inc/utils.php
fixes CHANGES.txt
[syp.git] / inc / utils.php
index a0824c8dea4293d218717c16714a3dfecef26edf..a5a1c8be6cf72acbf98f99cccb1aa219766058c5 100644 (file)
@@ -2,7 +2,37 @@
 /* Copyright (c) 2009 Arnaud Renevier, Inc, published under the modified BSD
    license. */
 
-require_once ("inc/settings.php");
+// using include because that file may be sourced even if config file has not
+// been created.
+@include_once ("inc/settings.php");
+
+function getthumbsdir () {
+    if (THUMBSDIR) {
+        return rtrim (THUMBSDIR, "/");
+    } else {
+        $uploaddir = rtrim (UPLOADDIR, "/");
+        return $uploaddir . "/" . "_thumbs";
+    }
+}
+
+function gethost () {
+    $host = $_SERVER ["HTTP_HOST"];
+    $colpos = strpos ($host, ':');
+    // some web clients add port informations in Host header
+    if ($colpos !== false) {
+        $host = substr ($host, 0, $colpos);
+    }
+    return $host;
+}
+
+function ext_safe ($path) {
+    $basename = basename_safe ($path);
+    return end (explode (".", $basename)); 
+}
+
+function basename_safe ($path) {
+    return end (explode ("/", $path)); 
+}
 
 function unquote($gpc_str) {
    if (!isset ($gpc_str)) {
@@ -15,12 +45,23 @@ function unquote($gpc_str) {
    }
 }
 
-function full_url_from_filename ($filename) {
+function thumb_url_from_imgpath ($filename) {
+    if (defined ("THUMBSDIRURL") && (strlen (THUMBSDIRURL) != 0)) {
+        return rtrim (THUMBSDIRURL, '/') . "/mini_" . rawurlencode ($filename);
+    }
+    return full_url_from_path (getthumbsdir () . "/mini_" . rawurlencode ($filename));
+}
+
+function image_url_from_imgpath ($filename) {
     if (defined ("IMGSDIRURL") && (strlen (IMGSDIRURL) != 0)) {
         return rtrim (IMGSDIRURL, '/') . "/" . rawurlencode ($filename);
     }
 
-    $rel_path = UPLOADDIR . "/" . rawurlencode ($filename);
+    return full_url_from_path (UPLOADDIR . "/" . rawurlencode ($filename));
+}
+
+function full_url_from_path ($path) {
+    $rel_path = $path;
 
     while (substr($rel_path, 0, 2) == "./") { // strips ./
         $rel_path = substr ($rel_path, 2);
@@ -44,7 +85,7 @@ function full_url_from_filename ($filename) {
         $path = "$script_dir/$rel_path";
     }
 
-    $host = $_SERVER ["HTTP_HOST"];
+    $host = gethost();
     $port = $_SERVER ["SERVER_PORT"];
     if ($_SERVER ["HTTPS"] == "on") {
         $proto = "https";
@@ -62,4 +103,83 @@ function full_url_from_filename ($filename) {
     return "$proto://$host$port$path";
 }
 
+function create_thumbnail_or_copy ($filename, $destfile) { 
+    try {   
+        $thumbnail_ok = create_thumbnail ($filename, $destfile);
+    } catch (Exception $e) {
+        $thumbnail_ok = false;
+    }
+    if (!$thumbnail_ok) {
+        if (!copy ($filename, $destfile)) {
+            return false; 
+        }
+    }   
+    return true;
+}
+
+function create_thumbnail ($filename, $destfile) {
+    if (!function_exists ("imagecreatefromjpeg")
+        || !function_exists ("imagecreatefrompng")) {
+        return false;
+    }
+    $ext = strtolower (ext_safe ($filename));
+    if ($ext == "jpg" || $ext == "jpeg") {
+        $image = imagecreatefromjpeg ($filename);
+    } else if ($ext == "png") {
+        $image = imagecreatefrompng ($filename);
+    } else {
+        return false;
+    }
+
+    if ($image === false) {
+        return false;
+    }
+
+    if (defined (THUMBSMAXSIZE) && (THUMBSMAXSIZE > 0)) {
+        $thumbsmaxsize = THUMBSMAXSIZE;
+    } else {
+        $thumbsmaxsize = 400; // default value;
+    }
+
+    $width = imageSX ($image);
+    $height = imageSY ($image);
+    if (($width  <= $thumbsmaxsize) || ($height <= $thumbsmaxsize)) {
+        return false;
+    }
+
+    if ($width > $height) {
+        $thumb_width = $thumbsmaxsize;
+        $thumb_height = $height * ($thumbsmaxsize / $width);
+    } else if ($width  < $height) {
+        $thumb_width = $width * ($thumbsmaxsize / $height);
+        $thumb_height = $thumbsmaxsize;
+    } else if ($width  == $height) {
+        $thumb_width = $thumbsmaxsize;
+        $thumb_height = $thumbsmaxsize;
+    }
+
+    $thumb_image = ImageCreateTrueColor ($thumb_width, $thumb_height);
+    if ($thumb_image === false) {
+        return false;
+    }
+    if (!imagecopyresampled ($thumb_image, $image, 0, 0, 0, 0,
+                        $thumb_width, $thumb_height, $width, $height)) {
+        return false;
+    }
+
+    if ($ext == "jpg" || $ext == "jpeg") {
+        if (!imagejpeg ($thumb_image, $destfile, 100)) {
+            return false;
+        }
+    } else if ($ext == "png") {
+        if (!imagepng ($thumb_image, $destfile)) {
+            return false;
+        }
+    }
+
+    imagedestroy ($image); 
+    imagedestroy ($thumb_image); 
+
+    return true;
+}
 ?>