Solstice
view release on metacpan or search on metacpan
lib/Solstice/Resource/File/BlackBox.pm view on Meta::CPAN
package Solstice::Resource::File::BlackBox;
# $Id: BlackBox.pm 924 2006-03-03 00:13:09Z jlaney $
=head1 NAME
Solstice::Resource::File::BlackBox - A file implementation
=head1 SYNOPSIS
package Solstice::Resource::File::BlackBox;
use Solstice::Resource::File::BlackBox;
=head1 DESCRIPTION
=cut
use 5.006_000;
use strict;
use warnings;
use base qw(Solstice::Resource::File);
use Solstice::Database;
use Solstice::DateTime;
use Solstice::Encryption;
use Image::Magick;
use Digest::MD5 qw(md5_hex);
use constant TRUE => 1;
use constant FALSE => 0;
use constant FILE_ROOT => 'solstice/files';
our ($VERSION) = ('$Revision: 924 $' =~ /^\$Revision:\s*([\d.]*)/);
=head2 Superclass
L<Solstice::Resource::File|Solstice::Resource::File>.
=head2 Export
No symbols exported.
=head2 Methods
=over 4
=cut
=item setAttribute($key, $value)
=cut
sub setAttribute {
my $self = shift;
my $key = shift;
return FALSE unless $key;
$self->_getAttributes()->{$key} = shift;
$self->_taint();
return TRUE;
}
=item getAttribute($key)
Returns the value of the attribute identified by $key.
=cut
sub getAttribute {
my $self = shift;
my $key = shift;
return $self->_getAttributes()->{$key};
}
=item setName($name)
Sets the name of the resource.
=cut
sub setName {
my $self = shift;
my $name = shift;
$self->_taint();
return $self->_setName($name);
}
lib/Solstice/Resource/File/BlackBox.pm view on Meta::CPAN
return FALSE unless defined $owner;
my $db = Solstice::Database->new();
my $db_name = $self->getConfigService()->getDBName();
if (defined $self->getID()) {
$self->_setModificationDate(Solstice::DateTime->new(time));
$db->writeQuery('UPDATE '.$db_name.'.File
SET name = ?, modification_date = ?
WHERE file_id = ?',
$self->getName(),
$self->getModificationDate()->toSQL(),
$self->getID() );
} else {
my $filehandle = $self->_getFilehandle();
if (!defined $filehandle) {
$filehandle = $self->_getPerlFilehandle();
}
return FALSE unless defined $filehandle;
$self->_setModificationDate(Solstice::DateTime->new(time));
$self->_setCreationDate(Solstice::DateTime->new(time));
$db->writeQuery('INSERT INTO '.$db_name.'.File (
person_id, name, creation_date, modification_date,
content_type, content_length
) VALUES (?,?,?,?,?,?)',
$owner->getID(),
$self->getName(),
$self->getCreationDate()->toSQL(),
$self->getModificationDate()->toSQL(),
$self->getContentType(),
$self->getSize() );
$self->_setID($db->getLastInsertID());
# Write the file content to disk
my $file_path = $self->_generateFilePath();
$self->_dirCheck($file_path);
$file_path .= $self->getID();
open(my $FILE, '>', $file_path) or die "Cannot open file $file_path for writing\n";
binmode($FILE);
while (my $content = <$filehandle>) {
print $FILE $content;
}
close($FILE);
$self->_setFilehandle(undef);
$self->_setPerlFilehandle(undef);
my $ct_service = $self->getContentTypeService();
if ($ct_service->isKnownType($self->getContentType())) {
# Images only: get width and height attributes once
if ($ct_service->isImageType($self->getContentType())) {
my $image = Image::Magick->new();
my $msg = $image->Read(filename => $file_path);
unless ($msg && $msg !~ /^Exception (415|420)/) {
$self->setAttribute('width', $image->Get('width'));
$self->setAttribute('height', $image->Get('height'));
}
}
} else {
# Log the unknown content types
$self->getLogService()->log({
log_file => 'unknown_content_types',
model_id => $self->getID(),
content => $self->getContentType(),
});
}
}
$self->_storeAttributes();
$self->_untaint();
return TRUE;
}
=item _delete()
=cut
sub _delete {
my $self = shift;
return FALSE unless $self->getID();
my $db = Solstice::Database->new();
my $db_name = $self->getConfigService()->getDBName();
$db->writeQuery('DELETE FROM '.$db_name.'.File
WHERE file_id = ?', $self->getID());
$db->writeQuery('DELETE FROM '.$db_name.'.FileAttribute
WHERE file_id = ?', $self->getID());
unlink($self->getPath());
return TRUE;
}
=item _initFromID($int)
Loads the File from the DB by id.
=cut
sub _initFromID {
my $self = shift;
my $id = shift;
my $db = Solstice::Database->new();
my $db_name = $self->getConfigService()->getDBName();
$db->readQuery('SELECT f.file_id AS id, f.*
FROM '.$db_name.'.File AS f
WHERE f.file_id = ?', $id
( run in 2.429 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )