Files
racalmas/lib/calcms/studios.pm

155 lines
4.2 KiB
Perl

package studios;
use strict;
use warnings;
no warnings 'redefine';
use Data::Dumper;
use images();
our @EXPORT_OK = qw(get_columns get get_by_id insert update delete check check_studio);
sub get_columns($) {
my ($config) = @_;
my $dbh = db::connect($config);
return db::get_columns_hash( $dbh, 'calcms_studios' );
}
sub get($;$) {
my ($config, $condition) = @_;
$condition ||= {};
my @conditions = ();
my @bind_values = ();
if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) {
push @conditions, 's.id=?';
push @bind_values, $condition->{studio_id};
}
if ( ( defined $condition->{name} ) && ( $condition->{name} ne '' ) ) {
push @conditions, 's.name=?';
push @bind_values, $condition->{name};
}
if ( ( defined $condition->{location} ) && ( $condition->{location} ne '' ) ) {
push @conditions, 's.location=?';
push @bind_values, $condition->{location};
}
my $limit = '';
if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) {
$limit = 'limit ' . $condition->{limit};
}
my $query = '';
unless ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) {
my $conditions = '';
$conditions = " where " . join( " and ", @conditions ) if ( scalar @conditions > 0 );
$query = qq{
select *
from calcms_studios s
$conditions
$limit
};
} else {
push @conditions, 's.id=ps.studio_id';
push @conditions, 'ps.project_id=?';
push @bind_values, $condition->{project_id};
my $conditions = " where " . join( " and ", @conditions );
$query = qq{
select *
from calcms_studios s, calcms_project_studios ps
$conditions
$limit
};
}
my $dbh = db::connect($config);
my $studios = db::get( $dbh, $query, \@bind_values );
return $studios;
}
sub getImageById($$) {
my ($config, $conditions) = @_;
for ('project_id', 'studio_id') {
return undef unless defined $conditions->{$_}
};
my $studios = studios::get( $config, $conditions );
return undef if scalar(@$studios) != 1;
return $studios->[0]->{image};
}
sub insert ($$) {
my ($config, $entry) = @_;
$entry->{created_at} = time::time_to_datetime( time() );
$entry->{modified_at} = time::time_to_datetime( time() );
$entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image};
my $dbh = db::connect($config);
my $id = db::insert( $dbh, 'calcms_studios', $entry );
return $id;
}
sub update ($$) {
my ($config, $studio) = @_;
$studio->{modified_at} = time::time_to_datetime( time() );
my $columns = get_columns($config);
my $entry = {};
for my $column ( keys %$columns ) {
$entry->{$column} = $studio->{$column} if defined $studio->{$column};
}
$entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image};
my @keys = sort keys %$entry;
my $values = join( ",", map { $_ . '=?' } @keys );
my @bind_values = map { $entry->{$_} } @keys;
push @bind_values, $entry->{id};
my $query = qq{
update calcms_studios
set $values
where id=?
};
my $dbh = db::connect($config);
db::put( $dbh, $query, \@bind_values );
}
sub delete ($$) {
my ($config, $studio) = @_;
my $dbh = db::connect($config);
db::put( $dbh, 'delete from calcms_studios where id=?', [ $studio->{id} ] );
}
#TODO rename to check
sub check_studio($$) {
my ($config, $options) = @_;
return check( $config, $options );
}
sub check ($$) {
my ($config, $options) = @_;
return "missing studio_id" unless defined $options->{studio_id};
return "Please select a studio" if ( $options->{studio_id} eq '-1' );
return "Please select a studio" if ( $options->{studio_id} eq '' );
my $studios = studios::get( $config, { studio_id => $options->{studio_id} } );
return "Sorry. unknown studio" unless defined $studios;
return "Sorry. unknown studio" unless scalar @$studios == 1;
return 1;
}
sub error {
my $msg = shift;
print "ERROR: $msg<br/>\n";
}
#do not delete last line!
1;