Lines 76-81
use C4::Koha;
Link Here
|
76 |
use Koha::UploadedFile; |
76 |
use Koha::UploadedFile; |
77 |
use Koha::UploadedFiles; |
77 |
use Koha::UploadedFiles; |
78 |
|
78 |
|
|
|
79 |
|
80 |
BEGIN { |
81 |
if (C4::Context->preference('SwiftStorage')){ |
82 |
require Net::OpenStack::Swift; |
83 |
import Net::OpenStack::Swift; |
84 |
} |
85 |
} |
86 |
|
79 |
__PACKAGE__->mk_ro_accessors( qw|| ); |
87 |
__PACKAGE__->mk_ro_accessors( qw|| ); |
80 |
|
88 |
|
81 |
=head1 INSTANCE METHODS |
89 |
=head1 INSTANCE METHODS |
Lines 204-209
sub _init {
Link Here
|
204 |
$self->{files} = {}; |
212 |
$self->{files} = {}; |
205 |
$self->{uid} = C4::Context->userenv->{number} if C4::Context->userenv; |
213 |
$self->{uid} = C4::Context->userenv->{number} if C4::Context->userenv; |
206 |
$self->{public} = $params->{public}? 1: undef; |
214 |
$self->{public} = $params->{public}? 1: undef; |
|
|
215 |
$self->{swift} = C4::Context->preference('SwiftStorage'); |
207 |
} |
216 |
} |
208 |
|
217 |
|
209 |
sub _fh { |
218 |
sub _fh { |
Lines 216-221
sub _fh {
Link Here
|
216 |
sub _create_file { |
225 |
sub _create_file { |
217 |
my ( $self, $filename ) = @_; |
226 |
my ( $self, $filename ) = @_; |
218 |
my $fh; |
227 |
my $fh; |
|
|
228 |
|
229 |
if ($self->{swift}){ |
230 |
# We are uploading in to a swift object store, not local files |
231 |
# Authenticate to swift, bail out if we can't |
232 |
# |
233 |
# Maybe shift this to its own sub next |
234 |
my $sw = Net::OpenStack::Swift->new( |
235 |
auth_url => C4::Context->preference('SwiftStorageAuthUrl'), |
236 |
user => C4::Context->preference('SwiftStorageUser'), |
237 |
password => C4::Context->preference('SwiftStoragePassword'), |
238 |
tenant_name => C4::Context->preference('SwiftStorageTenant'), |
239 |
region => C4::Context->preference('SwiftStorageRegion') |
240 |
); |
241 |
my ( $storage_url, $token ); |
242 |
eval {($storage_url,$token) = $sw->get_auth();}; |
243 |
if ($@){ |
244 |
# we can't login, bail out |
245 |
$self->{files}->{$filename}->{errcode} = 2; #not writable |
246 |
return; |
247 |
} |
248 |
# get our container, if one doesn't exist, make it |
249 |
my $container_name =C4::Context->config( 'database' ); |
250 |
my $headers; |
251 |
eval {$headers = $sw->header_container(container_name => $container_name);}; |
252 |
if ($@){ |
253 |
# container doesn't exist |
254 |
eval {$headers = $sw->put_container(container_name => $container_name);}; |
255 |
if ($@){ |
256 |
# cant create a container bail out |
257 |
$self->{files}->{$filename}->{errcode} = 2; #not writable |
258 |
return; |
259 |
} |
260 |
} |
261 |
# We have a container we can write to, we need to write the file to tmp |
262 |
# Then put to the object store (as we buffer read the file) |
263 |
$self->{sw} = $sw; |
264 |
$self->{temporary} = 1; |
265 |
} |
266 |
|
219 |
if( $self->{files}->{$filename} && |
267 |
if( $self->{files}->{$filename} && |
220 |
$self->{files}->{$filename}->{errcode} ) { |
268 |
$self->{files}->{$filename}->{errcode} ) { |
221 |
#skip |
269 |
#skip |
Lines 271-279
sub _done {
Link Here
|
271 |
$self->{done} = 1; |
319 |
$self->{done} = 1; |
272 |
foreach my $f ( keys %{ $self->{files} } ) { |
320 |
foreach my $f ( keys %{ $self->{files} } ) { |
273 |
my $fh = $self->_fh($f); |
321 |
my $fh = $self->_fh($f); |
274 |
$self->_register( $f, $fh? tell( $fh ): undef ) |
322 |
my $size = undef; |
|
|
323 |
if ($fh){ |
324 |
$size = tell($fh); |
325 |
} |
326 |
$self->_register( $f, $size ) |
275 |
if !$self->{files}->{$f}->{errcode}; |
327 |
if !$self->{files}->{$f}->{errcode}; |
276 |
$fh->close if $fh; |
328 |
$fh->close if $fh; |
|
|
329 |
if ($self->{swift}){ |
330 |
my $dir = $self->_dir; |
331 |
my $hashval = $self->{files}->{$f}->{hash}; |
332 |
my $fn = $hashval. '_'. $f; |
333 |
open $fh, '<', "$dir/$fn"; |
334 |
# put the file in the object store |
335 |
my $headers = $self->{sw}->put_object(container_name => C4::Context->config('database'), |
336 |
object_name => $f , content => $fh, content_length => $size); |
337 |
close $fh; |
338 |
} |
277 |
} |
339 |
} |
278 |
} |
340 |
} |
279 |
|
341 |
|
280 |
- |
|
|