2007-07-12 08:59:23 +00:00
|
|
|
<?php
|
2009-08-20 22:37:17 +00:00
|
|
|
/*
|
2007-07-12 08:59:23 +00:00
|
|
|
* Name: Resolution Limiter
|
|
|
|
* Author: Shish <webmaster@shishnet.org>
|
2012-02-10 04:04:37 +00:00
|
|
|
* Link: http://code.shishnet.org/shimmie2/
|
2007-07-12 08:59:23 +00:00
|
|
|
* License: GPLv2
|
|
|
|
* Description: Allows the admin to set min / max image dimentions
|
|
|
|
*/
|
2012-02-08 12:07:01 +00:00
|
|
|
class ResolutionLimit extends Extension {
|
2017-09-19 17:55:43 +00:00
|
|
|
public function get_priority(): int {return 40;} // early, to veto ImageUploadEvent
|
2012-01-27 18:16:46 +00:00
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
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
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
$image = $event->image;
|
2007-07-12 08:59:23 +00:00
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
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");
|
2008-02-06 15:54:50 +00:00
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
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;
|
2008-02-06 15:54:50 +00:00
|
|
|
}
|
|
|
|
}
|
2012-02-08 11:24:25 +00:00
|
|
|
if($valids > 0 && !$ok) {
|
|
|
|
throw new UploadException(
|
|
|
|
"Image needs to be in one of these ratios: ".
|
|
|
|
html_escape($config->get_string("upload_ratios", "")));
|
|
|
|
}
|
2007-07-12 08:59:23 +00:00
|
|
|
}
|
2012-02-08 11:24:25 +00:00
|
|
|
}
|
2007-07-12 08:59:23 +00:00
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
public function onSetupBuilding(SetupBuildingEvent $event) {
|
|
|
|
$sb = new SetupBlock("Resolution Limits");
|
2007-07-12 08:59:23 +00:00
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
$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
|
|
|
|
2012-02-08 11:24:25 +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");
|
2007-07-12 08:59:23 +00:00
|
|
|
|
2012-02-08 11:24:25 +00:00
|
|
|
$sb->add_label("<br>(-1 for no limit)");
|
2009-01-04 19:18:37 +00:00
|
|
|
|
2012-02-08 11:24:25 +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);
|
2007-07-12 08:59:23 +00:00
|
|
|
}
|
|
|
|
}
|
2014-04-26 02:54:51 +00:00
|
|
|
|