cavepaintingsFork/ext/res_limit/main.php

84 lines
2.6 KiB
PHP
Raw Normal View History

2020-01-26 13:19:35 +00:00
<?php declare(strict_types=1);
class ResolutionLimit extends Extension
{
public function get_priority(): int
{
return 40;
} // early, to veto ImageUploadEvent
public function onImageAddition(ImageAdditionEvent $event)
{
global $config;
$min_w = $config->get_int("upload_min_width", -1);
$min_h = $config->get_int("upload_min_height", -1);
$max_w = $config->get_int("upload_max_width", -1);
$max_h = $config->get_int("upload_max_height", -1);
$ratios = explode(" ", $config->get_string("upload_ratios", ""));
2009-01-04 19:18:37 +00:00
$image = $event->image;
if ($min_w > 0 && $image->width < $min_w) {
throw new UploadException("Image too small");
}
if ($min_h > 0 && $image->height < $min_h) {
throw new UploadException("Image too small");
}
if ($max_w > 0 && $image->width > $max_w) {
throw new UploadException("Image too large");
}
if ($max_h > 0 && $image->height > $max_h) {
throw new UploadException("Image too large");
}
if (count($ratios) > 0) {
$ok = false;
$valids = 0;
foreach ($ratios as $ratio) {
$parts = explode(":", $ratio);
if (count($parts) < 2) {
continue;
}
$valids++;
$width = $parts[0];
$height = $parts[1];
if ($image->width / $width == $image->height / $height) {
$ok = true;
break;
}
}
if ($valids > 0 && !$ok) {
throw new UploadException(
"Image needs to be in one of these ratios: ".
html_escape($config->get_string("upload_ratios", ""))
);
}
}
}
public function onSetupBuilding(SetupBuildingEvent $event)
{
$sb = new SetupBlock("Resolution Limits");
$sb->add_label("Min ");
$sb->add_int_option("upload_min_width");
$sb->add_label(" x ");
$sb->add_int_option("upload_min_height");
$sb->add_label(" px");
2009-01-04 19:18:37 +00:00
$sb->add_label("<br>Max ");
$sb->add_int_option("upload_max_width");
$sb->add_label(" x ");
$sb->add_int_option("upload_max_height");
$sb->add_label(" px");
$sb->add_label("<br>(-1 for no limit)");
2009-01-04 19:18:37 +00:00
$sb->add_label("<br>Ratios ");
$sb->add_text_option("upload_ratios");
$sb->add_label("<br>(eg. '4:3 16:9', blank for no limit)");
$event->panel->add_block($sb);
}
}