hedera-web/rest/image/upload.php

103 lines
2.4 KiB
PHP
Raw Normal View History

2016-07-22 20:00:27 +00:00
<?php
2016-08-25 10:47:09 +00:00
require_once (__DIR__.'/util.php');
2016-07-22 20:00:27 +00:00
use Vn\Lib;
2016-09-06 14:25:02 +00:00
use Vn\Lib\UserException;
2016-07-22 20:00:27 +00:00
/**
* Uploads a file creating its corresponding sizes.
2017-05-08 15:54:35 +00:00
*/
2016-08-25 10:47:09 +00:00
class Upload extends Vn\Web\JsonRequest
2016-07-22 20:00:27 +00:00
{
2017-05-08 15:54:35 +00:00
const PARAMS = [
'name',
'schema'
];
2016-09-06 14:25:02 +00:00
function run ($db)
2016-07-22 20:00:27 +00:00
{
2016-08-25 10:47:09 +00:00
$util = new Util ($this->app);
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
$schema = $_REQUEST['schema'];
$name = $_REQUEST['name'];
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
// Checks schema
2016-07-22 20:00:27 +00:00
2016-08-25 10:47:09 +00:00
$info = $util->loadInfo ($schema);
2016-07-22 20:00:27 +00:00
if (!$info)
throw new UserException (s('Schema not exists'));
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
// Checks file name
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
if (preg_match ('/[^a-z0-9_]/', $_REQUEST['name']) !== 0)
throw new UserException (s('Bad file name'));
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
// Checks for file errors
2016-07-22 20:00:27 +00:00
if (empty ($_FILES['image']['name']))
throw new UserException (s('File not choosed'));
2016-07-22 20:00:27 +00:00
if ($_FILES['image']['error'] != 0)
{
switch ($_FILES['image']['error'])
{
case UPLOAD_ERR_INI_SIZE:
$message = 'ErrIniSize';
break;
case UPLOAD_ERR_FORM_SIZE:
$message = 'ErrFormSize';
break;
case UPLOAD_ERR_PARTIAL:
$message = 'ErrPartial';
break;
case UPLOAD_ERR_NO_FILE:
$message = 'ErrNoFile';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$message = 'ErrNoTmpDir';
break;
case UPLOAD_ERR_CANT_WRITE:
$message = 'ErrCantWrite';
break;
case UPLOAD_ERR_EXTENSION:
$message = 'ErrExtension';
break;
default:
$message = 'ErrDefault';
break;
}
throw new Lib\Exception (s($message));
2016-07-22 20:00:27 +00:00
}
$maxSize = $db->getValue ('SELECT max_size FROM image_config');
if ($_FILES['image']['size'] > $maxSize * 1048576)
throw new UserException (sprintf (s('File size error'), $maxSize));
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
// Resizes and saves the image
2016-07-22 20:00:27 +00:00
2017-05-08 15:54:35 +00:00
$tmpName = $_FILES['image']['tmp_name'];
$fileName = "{$name}.png";
2016-08-25 10:47:09 +00:00
$schemaPath = "{$util->dataDir}/$schema";
2016-07-22 20:00:27 +00:00
$fullFile = "$schemaPath/full/$fileName";
$symbolicSrc = "../full/$fileName";
2017-05-08 15:54:35 +00:00
$image = Image::create ($tmpName);
2016-07-22 20:00:27 +00:00
Image::resizeSave ($image, $fullFile, $info['max_height'], $info['max_width']);
foreach ($info['sizes'] as $size => $i)
{
$dstFile = "$schemaPath/$size/$fileName";
Image::resizeSave ($image, $dstFile, $i['height'], $i['width'], $i['crop'], $symbolicSrc);
}
imagedestroy ($image);
2017-05-08 15:54:35 +00:00
unlink ($tmpName);
2016-07-22 20:00:27 +00:00
return TRUE;
}
}