#! /usr/bin/perl
use warnings "all";
use strict;
use Data::Dumper;
use Apache2::Request;
use Apache2::Upload;
delete $INC{CGI};
require 'CGI.pm';
use Date::Calc();
use Time::Local();
use Image::Magick();
use Image::Magick::Square();
use config();
use auth();
use uac();
use studios();
use template();
use images();
binmode STDOUT, ":utf8";
my $r = shift;
my $cgi = undef;
my $config = config::get('../config/config.cgi');
our $debug = $config->{system}->{debug};
my $base_dir = $config->{locations}->{base_dir};
my $tmp_dir = '/var/tmp';
my $upload_limit = 2048 * 1000;
#binmode STDOUT, ":utf8";
#binmode STDOUT, ":encoding(UTF-8)";
my $params = {};
my $upload = undef;
my $error = '';
#get image from multiform before anything else
if ( defined $r ) {
#Apache2::Request
# print "Content-type:text/html; charset=UTF-8; \n\n
Apache2::Request \n";
my $apr = Apache2::Request->new( $r, POST_MAX => $upload_limit, TEMP_DIR => $tmp_dir );
#copy params to hash
my $body = $apr->body();
if ( defined $body ) {
for my $key ( keys %$body ) {
# print "$key=".$apr->param($key)." \n";
$params->{ scalar($key) } = scalar( $apr->param($key) ); # unless ($key eq'image');
}
}
# print Dumper($params);
# print Dumper($apr);
my $status = $apr->parse;
# print "Status:$status ";
$status = '' if ( $status =~ /missing input data/i );
if ( $status =~ /limit/i ) {
$error = $status;
} else {
$upload = $apr->upload('image') if ( defined $params->{image} );
}
#dont get params parsed
# $CGI::POST_MAX = $upload_limit;
# $CGI::TMPDIRECTORY=$tmp_dir;
$cgi = new CGI();
# my %params=$cgi->Vars();
# $params=\%params;
# $error=$cgi->cgi_error()||$error;
} else {
#CGI fallback
# print "Content-type:text/html; charset=UTF-8; \n\n
CGI \n";
$CGI::POST_MAX = $upload_limit;
$CGI::TMPDIRECTORY = $tmp_dir;
$cgi = new CGI();
$error = $cgi->cgi_error() || $error;
my %params = $cgi->Vars();
$params = \%params;
}
print "Content-type:text/html; charset=UTF-8;\n\n";
my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets(
$config,
{
user => $user,
project_id => $params->{project_id},
studio_id => $params->{studio_id}
}
);
$params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
$params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = {
url => $ENV{QUERY_STRING} || '',
params => {
original => $params,
checked => check_params($params),
},
};
$request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked};
return unless defined uac::check( $config, $params, $user_presets );
my $permissions = $request->{permissions};
$params->{action} = '' unless ( defined $params->{action} );
if ( $permissions->{create_image} ne '1' ) {
uac::permissions_denied("create image");
return 0;
}
my $file_info = undef;
if ( $error ne '' ) {
if ( $error =~ /limit/ ) {
$params->{error} .= "Image size is limited to " . int( $upload_limit / 1000000 ) . " MB!" . "Please make it smaller and try again!";
} else {
$params->{error} .= "Error:'$error'";
}
} elsif ( $params->{action} eq 'upload' ) {
$file_info = upload_file( $config, $cgi, $upload, $user );
$params->{error} .= $file_info->{error};
$params = update_database( $config, $params, $file_info, $user ) if ( $params->{error} eq '' );
}
print STDERR $params->{error} . "\n" if defined $params->{error};
my $out = '';
template::process( $config, 'print', $params->{template}, $params );
print $cgi->cgi_error() if defined $cgi;
#return;
return if ( $params->{action} eq '' );
if ( $params->{error} eq '' ) {
print qq{