use Storable;
use Time::HiRes qw(time);
use File::Path qw(mkpath);
+use Text::Unaccent::PurePerl;
use MojoFacets::Import::File;
use MojoFacets::Import::HTMLTable;
}
my $dir = $self->app->home->rel_dir('public') . "/export/$path";
mkpath $dir unless -e $dir;
- $dir . '/' . join('.', @_);
+ my $name = join('.', map { my $n = unac_string($_); $n =~ s/\W+/_/g; $n; } @_ );
+ $dir . '/' . $name;
}
sub columns {
sub _current_filters {
my $self = shift;
my $current_filters;
- my $columns = $self->_loaded('header');
- if ( my $sc = $self->session('columns') ) {
- $columns = $sc;
- }
+ my $stats = $self->_loaded('stats');
$current_filters->{ $_ } = $filters->{ $_ }
- foreach ( grep { defined $filters->{ $_ } } @$columns )
+ foreach ( grep { defined $filters->{ $_ } } keys %$stats )
;
- warn "# _current_filters ",dump($columns);
+ warn "# _current_filters ",dump( keys %$current_filters );
return $current_filters;
}
}
if ( $self->param('export') ) {
- my $export_path = "public/export/$path/" . join('.', @columns);
+ my $export_path = $self->_export_path( 'items', @columns);
open(my $fh, '>', $export_path) || warn "ERROR: can't open $export_path: $!";
foreach my $f ( 0 .. $#$filtered ) {
print $fh join("\t", map {
my $i = $data->{items}->[ $filtered->[$f] ];
- if ( ref $i->{$_} eq 'ARRAY' ) {
- join(',', @{ $i->{$_} });
+ my $v = '\N';
+ if ( ! defined $i->{$_} ) {
+ # nop
+ } elsif ( ref $i->{$_} eq 'ARRAY' ) {
+ $v =join(',', @{ $i->{$_} });
+ $v = '\N' if length($v) == 0;
} else {
- dump $i->{$_};
+ $v = dump $i->{$_};
}
+ $v;
} @columns),"\n";
}
close($fh);
sub export {
my $self = shift;
+ my $dir = $self->app->home->rel_dir('public');
+
if ( my $import = $self->param('import') ) {
if ( $import =~ m{/filter\.(.+?)\..+} ) {
my $name = $1;
my @vals = map { chomp; $_ }
- read_file $self->app->home->rel_dir('public') . "/export/$import", binmode => ':utf8';
+ read_file "$dir/export/$import", binmode => ':utf8';
$self->_remove_filter( $name );
$self->_filter_on_data( $name, @vals );
$self->session( 'offset' => 0 );
}
}
- $self->render( export => [
- glob( $self->_export_path . '*' )
- ] );
+ if ( my $remove = $self->param('remove') ) {
+ my $path = "$dir/export/$remove";
+ unlink $path if -e $path;
+ $path .= '.png';
+ unlink $path if -e $path;
+ }
+
+ my $path = $self->_export_path || $self->redirect_to('/data/index');
+
+ my @files = grep { ! /\.png$/ } glob "$path/*";
+ my $mtime = { map { $_ => (stat($_))[9] } @files };
+ @files = sort { $mtime->{$b} <=> $mtime->{$a} } @files;
+ $self->render( export => [ @files ] );
}
sub __loaded_paths {