diff options
-rwxr-xr-x | bin/fetch_pages | 80 | ||||
-rw-r--r-- | debian/freeside-ng-selfservice.deb7 (renamed from debian/freeside-ng-selfservice.conffiles) | 0 | ||||
-rw-r--r-- | debian/freeside-ng-selfservice.deb8 | 1 | ||||
-rw-r--r-- | httemplate/pref/pref.html | 3 | ||||
-rw-r--r-- | httemplate/search/elements/search-html.html | 8 | ||||
-rw-r--r-- | httemplate/search/elements/search.html | 83 | ||||
-rw-r--r-- | httemplate/search/sql.html | 5 |
7 files changed, 142 insertions, 38 deletions
diff --git a/bin/fetch_pages b/bin/fetch_pages new file mode 100755 index 000000000..5aeca56b3 --- /dev/null +++ b/bin/fetch_pages @@ -0,0 +1,80 @@ +#!/usr/bin/perl + +use strict; +use WWW::Mechanize; +use Getopt::Std; +use File::chdir; +use URI; +use File::Slurp qw(write_file); + +my %opt; +getopts('d:h:u:p:', \%opt); +die usage() unless ($opt{d} and $opt{u} and $opt{p}); +my $host = $opt{h} || 'http://localhost/freeside'; + +my $mech = WWW::Mechanize->new( autocheck => 0 ); +$mech->get("$host/index.html"); +$mech->submit_form( + with_fields => { + credential_0 => $opt{u}, + credential_1 => $opt{p} + } +); + +my @tests = <>; + +mkdir($opt{d}) unless -d $opt{d}; +push @CWD, $opt{d}; + +while (my $path = shift @tests) { + if ($path =~ /^#(.*)/) { + print "$1 - skipped\n"; + next; + } + my $uri = URI->new("$host/$path"); + print $uri->path; + my $response = $mech->get($uri); + print " - " . $response->code . "\n"; + if ($response->is_success) { + local $CWD; + my @dirs = $uri->path_segments; + my $file = pop @dirs; + foreach my $dir (@dirs) { + mkdir $dir unless -d $dir; + push @CWD, $dir; + } + write_file($file, {binmode => ':utf8'}, $response->decoded_content); + } +} + +sub usage { + "Usage: fetch_pages -d directory -u username -p password [ -h hostname ]\n\n"; +} + +=head1 NAME + +fetch_pages - a testing tool for UI changes + +=head1 USAGE + +fetch_pages -d before_change -u myuser -p mypass list_of_tests +git checkout newbranch +make install; apache2ctl restart +fetch_pages -d after_change -u myuser -p mypass list_of_tests +diff -ur before_change/ after_change/ |diffstat + +=head1 ARGUMENTS + +-d: the directory to put the files in. Required. + +-u: the username to use with the Freeside web interface. Required. + +-p: the password. Required. + +-h: the URL prefix for the Freeside server. Defaults to +"http://localhost/freeside". + +The list of tests can be in a file specified after all arguments, or passed +to stdin. + +=cut diff --git a/debian/freeside-ng-selfservice.conffiles b/debian/freeside-ng-selfservice.deb7 index 58f0d3ad3..58f0d3ad3 100644 --- a/debian/freeside-ng-selfservice.conffiles +++ b/debian/freeside-ng-selfservice.deb7 diff --git a/debian/freeside-ng-selfservice.deb8 b/debian/freeside-ng-selfservice.deb8 new file mode 100644 index 000000000..d6537dda8 --- /dev/null +++ b/debian/freeside-ng-selfservice.deb8 @@ -0,0 +1 @@ +/var/www/html/ng_selfservice-DIST/freeside.class.php diff --git a/httemplate/pref/pref.html b/httemplate/pref/pref.html index ffc90fde8..46291066c 100644 --- a/httemplate/pref/pref.html +++ b/httemplate/pref/pref.html @@ -281,12 +281,13 @@ tie my %customer_views, 'Tie::IxHash', 'Basics' => 'basics', 'Notes' => 'notes', #notes and files? 'Tickets' => 'tickets', + 'Appointments' => 'appointments', + 'Quotations' => 'quotations', 'Packages' => 'packages', 'Payment History' => 'payment_history', ; $customer_views{'Change History'} = 'change_history' if $curuser->access_right('View customer history'); -$customer_views{'Jumbo'} = 'jumbo'; # XSS via your own preferences? seems unlikely, but nice try anyway... ( $curuser->option('menu_position') || 'top' ) diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html index 6121aea94..12f6c1e04 100644 --- a/httemplate/search/elements/search-html.html +++ b/httemplate/search/elements/search-html.html @@ -349,6 +349,7 @@ $rows => [] % } % my $i = 0; # for row striping # XXX CSS - nth-child +% my $id = 0; % foreach my $row ( @$rows ) { % % my $rowstyle = ''; @@ -504,7 +505,11 @@ $rows => [] % % $tooltip = &{$tooltip}($row) % if ref($tooltip) eq 'CODE'; -% $tooltip = qq! title="<% $tooltip |h %>"!; +% $tooltip = qq! id="a$id" !. +% qq! onmouseover="return overlib(!. +% $m->interp->apply_escapes($tooltip, 'h', 'js_string'). +% qq!, FGCLASS, 'tooltip', REF, 'a$id', !. +% qq!REFC, 'LL', REFP, 'UL')"! if $tooltip; % % if ( $link ) { % my( $url, $method ) = @{$link}; @@ -521,6 +526,7 @@ $rows => [] % elsif ( $tooltip ) { % $a = qq(<A $tooltip>); % } +% $id++; % } % diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index c58e63698..f136832a2 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -277,11 +277,17 @@ if ( $opt{'agent_virt'} ) { 'table' => $query->{'table'}, ); + # this is ridiculous, but we do have searches where $query has constraints + # and $count_query doesn't, or vice versa. if ( $query->{'extra_sql'} =~ /\bWHERE\b/i or keys %{$query->{hashref}} ) { $query->{'extra_sql'} .= " AND $agentnums_sql"; - $count_query .= " AND $agentnums_sql"; } else { $query->{'extra_sql'} .= " WHERE $agentnums_sql"; + } + + if ( $count_query =~ /\bWHERE\b/i ) { + $count_query .= " AND $agentnums_sql"; + } else { $count_query .= " WHERE $agentnums_sql"; } @@ -400,48 +406,55 @@ $order_by = $cgi->param('order_by') if $cgi->param('order_by'); my $header = [ map { ref($_) ? $_->{'label'} : $_ } @{$opt{header}} ]; my $rows; -my @query; -if (ref($query) eq 'HASH') { - @query = $query; - - if ( $order_by ) { - if ( $query->{'order_by'} ) { - if ( $query->{'order_by'} =~ /^(\s*ORDER\s+BY\s+)?(\S.*)$/is ) { - $query->{'order_by'} = "ORDER BY $order_by, $2"; +if ( ref $query ) { + my @query; + if (ref($query) eq 'HASH') { + @query = $query; + + if ( $order_by ) { + if ( $query->{'order_by'} ) { + if ( $query->{'order_by'} =~ /^(\s*ORDER\s+BY\s+)?(\S.*)$/is ) { + $query->{'order_by'} = "ORDER BY $order_by, $2"; + } else { + warn "unparsable query order_by: ". $query->{'order_by'}; + die "unparsable query order_by: ". $query->{'order_by'}; + } } else { - warn "unparsable query order_by: ". $query->{'order_by'}; - die "unparsable query order_by: ". $query->{'order_by'}; + $query->{'order_by'} = "ORDER BY $order_by"; } - } else { - $query->{'order_by'} = "ORDER BY $order_by"; } + + $query->{'order_by'} .= " $limit"; + + } elsif (ref($query) eq 'ARRAY') { + # do we still use this? it was for the old 477 report. + @query = @{ $query }; + } else { + die "invalid query reference"; } - $query->{'order_by'} .= " $limit"; + #eval "use FS::$opt{'query'};"; + my @param = qw( select table addl_from hashref extra_sql order_by debug ); + $rows = [ qsearch( [ map { my $query = $_; + ({ map { $_ => $query->{$_} } @param }); + } + @query + ], + #'order_by' => $opt{order_by}. " ". $limit, + ) + ]; -} elsif (ref($query) eq 'ARRAY') { - # do we still use this? it was for the old 477 report. - @query = @{ $query }; -} else { - die "invalid query reference"; -} +} else { # not ref $query; plain SQL (still used as of 07/2015) -if ( $opt{disableable} && ! $cgi->param('showdisabled') ) { - #%search = ( 'disabled' => '' ); - $opt{'query'}->{'hashref'}->{'disabled'} = ''; - $opt{'query'}->{'extra_sql'} =~ s/^\s*WHERE/ AND/i; -} + $query .= " $limit"; + my $sth = dbh->prepare($query) + or die "Error preparing $query: ". dbh->errstr; + $sth->execute + or die "Error executing $query: ". $sth->errstr; -#eval "use FS::$opt{'query'};"; -my @param = qw( select table addl_from hashref extra_sql order_by debug ); -$rows = [ qsearch( [ map { my $query = $_; - ({ map { $_ => $query->{$_} } @param }); - } - @query - ], - #'order_by' => $opt{order_by}. " ". $limit, - ) - ]; + $rows = $sth->fetchall_arrayref; + $header ||= $sth->{NAME}; +} # run the count query to get number of rows and other totals my $count_sth = dbh->prepare($count_query); diff --git a/httemplate/search/sql.html b/httemplate/search/sql.html index 71aa00671..54d6c2d79 100644 --- a/httemplate/search/sql.html +++ b/httemplate/search/sql.html @@ -2,7 +2,7 @@ 'title' => 'Query Results', 'name' => 'rows', 'query' => "SELECT $sql", - + 'count_query' => $count, &> <%init> @@ -12,4 +12,7 @@ die "access denied" my $sql = $cgi->param('sql') or errorpage('Empty query'); $sql =~ s/;+\s*$//; #remove trailing ; +my $count = $sql; +$count =~ s/.* FROM /SELECT COUNT(*) FROM /i; + </%init> |