correct gnuplot columns if timefmt has spaces
[MojoFacets.git] / lib / MojoFacets / Gnuplot.pm
index 67b484f..1af3cc1 100644 (file)
@@ -12,22 +12,37 @@ use Text::Unaccent::PurePerl;
 sub index {
        my $self = shift;
 
-       my $columns = $self->session('columns') || $self->redirect_to('/data/columns');
+       my $columns = $self->session('columns') || return $self->redirect_to('/data/columns');
+       my $path    = $self->session('path')    || return $self->redirect_to('/data/load');
+       my $with    = $self->param('with') || 'points';
+
+       my $hide_columns;
+       if ( $self->param('gnuplot_hide') ) {
+               $hide_columns->{$_}++ foreach $self->param('gnuplot_hide');
+               warn "## hide_columns ", dump $hide_columns;
+       }
 
-       my $name = unac_string( join('.', 'items', @$columns) );
-       $name =~ s/\W+/_/g;
+#      my $name = join('.', 'items', map { my $n = unac_string($_); $n =~ s/\W+/_/g; $n } @$columns );
+       my $name = MojoFacets::Data::__export_path_name( $path, 'items', @$columns );
 
        warn "# name $name\n";
 
-       my $url = '/export/' . $self->session('path') . '/' . $name;
-       my $dir = $self->app->home->rel_dir('public');
+       my $url = "/export/$path/$name";
+       my $dir = $self->app->home->rel_file('public');
 
        if ( -e "$dir/$url" ) {
 
+               my $timefmt = $self->param('timefmt');
+
+               my $spaces = $timefmt;
+               $spaces =~ s/\S//g;
+               $spaces = length( $spaces );
+
                my @plot;
                foreach ( 1 .. $#$columns ) {
-                       my $n = $_ + 1;
-                       push @plot, qq|"$dir/$url" using 1:$n title "$columns->[$_]" with points|;
+                       my $title = $columns->[$_];
+                       my $n = $_ + 1 + $spaces;
+                       push @plot, qq|"$dir/$url" using 1:$n title "$title" with $with| unless $hide_columns->{ $title };
                }
 
                my $g = qq|
@@ -37,7 +52,7 @@ set output '$dir/$url.png'
 
                |;
 
-               if ( my $timefmt = $self->param('timefmt') ) {
+               if ( $timefmt ) {
                        $g .= qq|
 
 set xdata time
@@ -58,8 +73,12 @@ warn "gnuplot $g";
                print $gnuplot $g;
                close $gnuplot;
 
-               $self->redirect_to( "$url.png" );
-               #$self->render_text( "$url.png" );
+               if ( -e "$dir/$url.png" ) {
+                       warn "redirect $url.png";
+                       return $self->redirect_to( "$url.png" );
+               } else {
+                       $self->render_text( "no $dir/$url.png" );
+               }
        } else {
                $self->render_text("no graph for $url");
        }