mirror of https://github.com/movim/movim
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.4 KiB
140 lines
4.4 KiB
<?php
|
|
|
|
/**
|
|
* @file images.php
|
|
* This file is part of MOVIM.
|
|
*
|
|
* @brief The movim's images handler.
|
|
*
|
|
* @author Edhelas <edhelas@gmail.com>
|
|
*
|
|
* @version 1.0
|
|
* @date 22 November 2011
|
|
*
|
|
* Copyright (C)2010 MOVIM team
|
|
*
|
|
* See the file `COPYING' for licensing information.
|
|
*/
|
|
|
|
ini_set('log_errors', 1);
|
|
ini_set('display_errors', 0);
|
|
ini_set('error_reporting', E_ALL ^ E_DEPRECATED ^ E_NOTICE);
|
|
ini_set('error_log', 'log/php.log');
|
|
|
|
require("init.php");
|
|
|
|
global $sdb;
|
|
|
|
function display_image($hash, $type) {
|
|
ob_clean();
|
|
ob_start();
|
|
header("ETag: \"{$hash}\"");
|
|
header("Accept-Ranges: bytes");
|
|
header("Content-type: ".$type);
|
|
header("Cache-Control: max-age=".rand(1, 5)*3600);
|
|
header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT');
|
|
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+24*60*60) . ' GMT');
|
|
}
|
|
|
|
if (!function_exists('getallheaders')) {
|
|
function getallheaders() {
|
|
foreach($_SERVER as $key=>$value) {
|
|
if (substr($key,0,5)=="HTTP_") {
|
|
$key=str_replace(" ","-",ucwords(strtolower(str_replace("_"," ",substr($key,5)))));
|
|
$out[$key]=$value;
|
|
}else{
|
|
$out[$key]=$value;
|
|
}
|
|
}
|
|
return $out;
|
|
}
|
|
}
|
|
|
|
// We load the avatar from the database and we display it
|
|
if(isset($_GET['c'])) {
|
|
$hash = md5($_GET['c'].$_GET['size']);
|
|
$headers = getallheaders();
|
|
|
|
ob_clean();
|
|
ob_start();
|
|
if (ereg($hash, $headers['If-None-Match']))
|
|
{
|
|
header('HTTP/1.1 304 Not Modified');
|
|
exit;
|
|
} elseif($_GET['c'] == 'default') {
|
|
ob_clean();
|
|
ob_start();
|
|
$content = file_get_contents('themes/movim/img/default.svg');
|
|
|
|
display_image($hash, "image/svg+xml");
|
|
echo $content;
|
|
exit;
|
|
|
|
}
|
|
|
|
else {
|
|
$user = new User();
|
|
$c = new Contact();
|
|
|
|
$query = Contact::query()->select()
|
|
->where(array(
|
|
'key' => $user->getLogin(),
|
|
'jid' => $_GET['c']));
|
|
$contact = Contact::run_query($query);
|
|
|
|
if($contact[0]->getData('phototype') != '' &&
|
|
$contact[0]->getData('photobin') != '' &&
|
|
$contact[0]->getData('phototype') != 'f' &&
|
|
$contact[0]->getData('photobin') != 'f') {
|
|
if(isset($_GET['size']) && $_GET['size'] != 'normal') {
|
|
switch ($_GET['size']) {
|
|
case 'm':
|
|
$size = 120;
|
|
break;
|
|
case 's':
|
|
$size = 50;
|
|
break;
|
|
case 'xs':
|
|
$size = 24;
|
|
break;
|
|
}
|
|
|
|
$thumb = imagecreatetruecolor($size, $size);
|
|
$white = imagecolorallocate($thumb, 255, 255, 255);
|
|
imagefill($thumb, 0, 0, $white);
|
|
|
|
$source = imagecreatefromstring(base64_decode($contact[0]->getData('photobin')));
|
|
|
|
$width = imagesx($source);
|
|
$height = imagesy($source);
|
|
|
|
if($width >= $height) {
|
|
// For landscape images
|
|
$x_offset = ($width - $height) / 2;
|
|
$y_offset = 0;
|
|
$square_size = $width - ($x_offset * 2);
|
|
} else {
|
|
// For portrait and square images
|
|
$x_offset = 0;
|
|
$y_offset = ($height - $width) / 2;
|
|
$square_size = $height - ($y_offset * 2);
|
|
}
|
|
|
|
if($source) {
|
|
imagecopyresampled($thumb, $source, 0, 0, $x_offset, $y_offset, $size, $size, $square_size, $square_size);
|
|
|
|
display_image($hash, "image/jpeg");
|
|
imagejpeg($thumb, NULL, 95);
|
|
}
|
|
|
|
} elseif(isset($_GET['size']) && $_GET['size'] == 'normal') { // The original picture
|
|
display_image($hash, $contact[0]->getData('phototype'));
|
|
echo base64_decode($contact[0]->getData('photobin'));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Closing db (dirty...)
|
|
global $sdb;
|
|
$sdb->close();
|