app); $schema = $_REQUEST['schema']; $name = $_REQUEST['name']; // Checks schema $info = $util->loadInfo($schema); if (!$info) throw new UserException(s('Schema not exists')); // Checks file name if (preg_match('/[^a-z0-9_]/', $_REQUEST['name']) !== 0) throw new UserException(s('Bad file name')); // Checks for file errors if (empty($_FILES['image']['name'])) throw new UserException(s('File not choosed')); 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)); } $maxSize = $db->getValue('SELECT maxSize FROM imageConfig'); if ($_FILES['image']['size'] > $maxSize * 1048576) throw new UserException(sprintf(s('File size error'), $maxSize)); // Resizes and saves the image $tmpName = $_FILES['image']['tmp_name']; $fileName = "{$name}.png"; $schemaPath = "{$util->dataDir}/$schema"; $fullFile = "$schemaPath/full/$fileName"; $symbolicSrc = "../full/$fileName"; $image = Image::create($tmpName); Image::resizeSave($image, $fullFile, $info['maxHeight'], $info['maxWidth']); foreach ($info['sizes'] as $size => $i) { $dstFile = "$schemaPath/$size/$fileName"; Image::resizeSave($image, $dstFile, $i['height'], $i['width'], $i['crop'], $symbolicSrc); } imagedestroy($image); unlink($tmpName); return TRUE; } }