App-ZofCMS
view release on metacpan or search on metacpan
lib/App/ZofCMS/Plugin/CRUD.pm view on Meta::CPAN
}
sub _process_CREATE {
my $self = shift;
my @errors;
for ( grep !$_->{el_auto_set}, @{ $self->{ITEMS} || [] } ) {
next if $_->{optional};
push @errors, +{ error => "Parameter '$_->{text}' must be specified" }
unless defined $_->{value} and length $_->{value};
}
if ( @errors ) {
$self->{FORM_ERRORS} = \@errors;
return;
}
for my $item (
grep $_->{el_file}
&& defined $self->{Q}{ $_->{name} }
&& length $self->{Q}{ $_->{name} }, @{ $self->{ITEMS} || [] }
) {
push @errors, grep defined, $self->_process_file_upload( $item );
}
if ( @errors ) {
$self->{FORM_ERRORS} = \@errors;
return;
}
$self->_insert_CREATE_into_db;
}
sub _process_file_upload {
my $self = shift;
my $item = shift;
my $cgi = $self->{CONFIG}{cgi};
my $fh = $cgi->upload( $item->{name} );
if ( not $fh and $cgi->cgi_error ) {
return +{ error => 'File upload error: ' . $cgi->cgi_error };
}
return +{ error => q|File upload error (no error message available)| }
unless $fh;
( my $filename = $item->{value} ) =~ s/[^\w.-]/_/g;
while ( -e File::Spec->catdir( $self->{CONF}{file_dir}, $filename ) ) {
$filename = "_$filename";
}
$filename = File::Spec->catdir( $self->{CONF}{file_dir}, $filename );
return +{ error => "Failed to open local file $filename [$!]" }
unless open my $fh_out, '>', $filename;
seek $fh, 0, 0;
binmode $fh;
binmode $fh_out;
{
local $/ = \1024;
while ( <$fh> ) {
print $fh_out $_;
}
}
close $fh;
close $fh_out;
$item->{value} = $filename;
return;
}
sub _insert_CREATE_into_db {
my $self = shift;
my %items = map +( @$_{qw/name value/} ), @{ $self->{ITEMS} };
$self->_dbh->do(
"INSERT INTO `$self->{CONF}{table}` (" .
join(',', map "`$_`", keys %items )
. ') VALUES (' .
join(', ', ('?') x (keys %items) )
. ')',
undef,
values %items,
);
$self->{CREATE_SUCCESS} = 1
}
sub _create_CU_form {
my $self = shift;
my $is_create = shift;
my $ht = HTML::Template->new_scalar_ref( \(_get_CU_form_template()),
die_on_bad_params => 0,
);
my @items = @{ $self->{ITEMS} || [] };
$ht->param(
is_create => $is_create,
id => $self->{Q}{crud_id},
page => $self->{Q}{dir} . $self->{Q}{page},
has_files => scalar( grep $_->{el_file}, @items ),
elements => [ grep !$_->{el_auto_set}, @items ],
create_success => $self->{CREATE_SUCCESS},
update_success => $self->{UPDATE_SUCCESS},
hide_form => ($self->{CREATE_SUCCESS} || $self->{UPDATE_SUCCESS}),
(
@{ $self->{FORM_ERRORS} || [] }
? ( errors => $self->{FORM_ERRORS}, )
: (),
),
);
( run in 1.546 second using v1.01-cache-2.11-cpan-39bf76dae61 )