X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2FMojoFacets%2FData.pm;h=a02a563bd5ee9287e262c216399ed031b6cf02ec;hb=28ed3834b792af09728ca90e984735877b50455c;hp=e2a93af1d52d73dac288ad75e694f7add9152262;hpb=bbf322faf576716f6e7373a1ec1a91fc11e1ad7e;p=MojoFacets.git diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index e2a93af..a02a563 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -13,6 +13,7 @@ use File::Find; use Storable; use Time::HiRes qw(time); use File::Path qw(mkpath); +use Text::Unaccent::PurePerl; use MojoFacets::Import::File; use MojoFacets::Import::HTMLTable; @@ -252,7 +253,7 @@ sub load { if ( ! defined $loaded->{$path}->{columns} ) { my $columns_path = $self->_permanent_path( 'columns' ); if ( -e $columns_path ) { - my @columns = map { s/[\r\n]+$//; $_ } read_file $columns_path; + my @columns = map { s/[\r\n]+$//; $_ } read_file $columns_path, binmode => ':utf8'; $loaded->{$path}->{columns} = [ @columns ]; warn "# columns_path $columns_path ",dump(@columns); } else { @@ -325,7 +326,7 @@ sub _export_path { } my $dir = $self->app->home->rel_dir('public') . "/export/$path"; mkpath $dir unless -e $dir; - $dir . '/' . join('.', @_); + $dir . '/' . unac_string( join('.', @_) ); } sub columns { @@ -333,7 +334,7 @@ sub columns { if ( $self->param('columns') ) { my @columns = $self->_param_array('columns'); - write_file( $self->_permanent_path( 'columns' ), map { "$_\n" } @columns ); + write_file( $self->_permanent_path( 'columns' ), { binmode => ':utf8' }, map { "$_\n" } @columns ); $self->redirect_to('/data/items'); } @@ -406,7 +407,7 @@ sub filter { $self->_filter_on_data( $name, @vals ); if ( my $permanent = $self->param('_permanent') ) { my $permanent_path = $self->_export_path( 'filter', $name, $permanent ); - write_file $permanent_path, map { "$_\n" } @vals; + write_file $permanent_path, { binmode => ':utf8' }, map { "$_\n" } @vals; warn "permanent filter $permanent_path ", -s $permanent_path; } } @@ -739,6 +740,23 @@ sub items { push @$sorted_items, $row; } + if ( $self->param('export') ) { + 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->{$_} }); + } else { + dump $i->{$_}; + } + } @columns),"\n"; + } + close($fh); + warn "export $export_path ", -s $export_path, " bytes\n"; + } + warn "# test_changed ",dump( $test_changed ); my $c = { map { $_ => 1 } @columns }; my @added_columns = sort grep { ! $c->{$_} } keys %$test_changed; @@ -1015,7 +1033,7 @@ sub export { if ( $import =~ m{/filter\.(.+?)\..+} ) { my $name = $1; my @vals = map { chomp; $_ } - read_file $self->app->home->rel_dir('public') . "/export/$import"; + read_file $self->app->home->rel_dir('public') . "/export/$import", binmode => ':utf8'; $self->_remove_filter( $name ); $self->_filter_on_data( $name, @vals ); $self->session( 'offset' => 0 ); @@ -1025,9 +1043,10 @@ sub export { } } - $self->render( export => [ - glob( $self->_export_path . '*' ) - ] ); + my @files = glob( $self->_export_path . '*' ); + my $mtime = { map { $_ => (stat($_))[9] } @files }; + @files = sort { $mtime->{$b} <=> $mtime->{$a} } @files; + $self->render( export => [ @files ] ); } sub __loaded_paths {