+ global $a, $_SERVER;
+
+ // The code needs to be reworked, it is too complicated
+ //
+ // it is doing the following:
+ // 1. If a folder "privacy_image_cache" exists and is writeable, then use this for caching
+ // 2. If a cache path is defined, use this
+ // 3. If everything else failed, cache into the database
+
+ if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
+ header('HTTP/1.1 304 Not Modified');
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
+ header('Etag: '.$_SERVER['HTTP_IF_NONE_MATCH']);
+ header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
+ header("Cache-Control: max-age=31536000");
+ if(function_exists('header_remove')) {
+ header_remove('Last-Modified');
+ header_remove('Expires');
+ header_remove('Cache-Control');
+ }
+ exit;
+ }
+
+ if(function_exists('header_remove')) {
+ header_remove('Pragma');
+ header_remove('pragma');
+ }
+
+ $thumb = false;
+ $size = 1024;
+
+ // If the cache path isn't there, try to create it
+ if (!is_dir($_SERVER["DOCUMENT_ROOT"]."/privacy_image_cache"))
+ if (is_writable($_SERVER["DOCUMENT_ROOT"]))
+ mkdir($_SERVER["DOCUMENT_ROOT"]."/privacy_image_cache");
+
+ // Checking if caching into a folder in the webroot is activated and working
+ $direct_cache = (is_dir($_SERVER["DOCUMENT_ROOT"]."/privacy_image_cache") AND is_writable($_SERVER["DOCUMENT_ROOT"]."/privacy_image_cache"));
+
+ // Look for filename in the arguments
+ if (isset($a->argv[1]) OR isset($a->argv[2]) OR isset($a->argv[3])) {
+ if (isset($a->argv[3]))
+ $url = $a->argv[3];
+ elseif (isset($a->argv[2]))
+ $url = $a->argv[2];
+ else
+ $url = $a->argv[1];
+
+ //$thumb = (isset($a->argv[3]) and ($a->argv[3] == "thumb"));
+ if (isset($a->argv[3]) and ($a->argv[3] == "thumb"))
+ $size = 200;
+
+ // thumb, small, medium and large.
+ if (substr($url, -6) == ":thumb")
+ $size = 150;
+ if (substr($url, -6) == ":small")
+ $size = 340;
+ if (substr($url, -7) == ":medium")
+ $size = 600;
+ if (substr($url, -6) == ":large")
+ $size = 1024;
+
+ $pos = strrpos($url, "=.");
+ if ($pos)
+ $url = substr($url, 0, $pos+1);
+
+ $url = str_replace(array(".jpg", ".jpeg", ".gif", ".png"), array("","","",""), $url);
+
+ $url = base64_decode(strtr($url, '-_', '+/'), true);
+
+ if ($url)
+ $_REQUEST['url'] = $url;
+ }
+
+ if (!$direct_cache) {
+ $urlhash = 'pic:' . sha1($_REQUEST['url']);
+ // Double encoded url - happens with Diaspora
+ $urlhash2 = 'pic:' . sha1(urldecode($_REQUEST['url']));
+
+ $cachefile = get_cachefile(hash("md5", $_REQUEST['url']));
+ if ($cachefile != '') {
+ if (file_exists($cachefile)) {
+ $img_str = file_get_contents($cachefile);
+ $mime = image_type_to_mime_type(exif_imagetype($cachefile));
+
+ header("Content-type: $mime");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
+ header('Etag: "'.md5($img_str).'"');
+ header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
+ header("Cache-Control: max-age=31536000");
+
+ // reduce quality - if it isn't a GIF
+ if ($mime != "image/gif") {
+ $img = new Photo($img_str, $mime);
+ if($img->is_valid()) {
+ $img_str = $img->imageString();
+ }
+ }
+
+ echo $img_str;
+ killme();
+ }
+ }
+ } else
+ $cachefile = "";
+
+ $valid = true;