version 1.134, 2003/10/24 13:35:37
|
version 1.142, 2003/11/04 19:01:01
|
Line 69 use Apache::Constants qw(:common :http :
|
Line 69 use Apache::Constants qw(:common :http :
|
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use HTML::Entities; |
|
|
my $readit; |
my $readit; |
|
|
Line 274 of the element the selection from the se
|
Line 275 of the element the selection from the se
|
sub browser_and_searcher_javascript { |
sub browser_and_searcher_javascript { |
return <<END; |
return <<END; |
var editbrowser = null; |
var editbrowser = null; |
function openbrowser(formname,elementname,only,omit) { |
function openbrowser(formname,elementname,only,omit,titleelement) { |
var url = '/res/?'; |
var url = '/res/?'; |
if (editbrowser == null) { |
if (editbrowser == null) { |
url += 'launch=1&'; |
url += 'launch=1&'; |
Line 288 sub browser_and_searcher_javascript {
|
Line 289 sub browser_and_searcher_javascript {
|
if (omit != null) { |
if (omit != null) { |
url += 'omit=' + omit + '&'; |
url += 'omit=' + omit + '&'; |
} |
} |
|
if (titleelement != null) { |
|
url += 'titleelement=' + titleelement + '&'; |
|
} |
url += 'element=' + elementname + ''; |
url += 'element=' + elementname + ''; |
var title = 'Browser'; |
var title = 'Browser'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
Line 296 sub browser_and_searcher_javascript {
|
Line 300 sub browser_and_searcher_javascript {
|
editbrowser.focus(); |
editbrowser.focus(); |
} |
} |
var editsearcher; |
var editsearcher; |
function opensearcher(formname,elementname) { |
function opensearcher(formname,elementname,titleelement) { |
var url = '/adm/searchcat?'; |
var url = '/adm/searchcat?'; |
if (editsearcher == null) { |
if (editsearcher == null) { |
url += 'launch=1&'; |
url += 'launch=1&'; |
Line 304 sub browser_and_searcher_javascript {
|
Line 308 sub browser_and_searcher_javascript {
|
url += 'catalogmode=interactive&'; |
url += 'catalogmode=interactive&'; |
url += 'mode=edit&'; |
url += 'mode=edit&'; |
url += 'form=' + formname + '&'; |
url += 'form=' + formname + '&'; |
|
if (titleelement != null) { |
|
url += 'titleelement=' + titleelement + '&'; |
|
} |
url += 'element=' + elementname + ''; |
url += 'element=' + elementname + ''; |
var title = 'Search'; |
var title = 'Search'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
Line 1764 sub get_previous_attempt {
|
Line 1771 sub get_previous_attempt {
|
} else { |
} else { |
$value=$returnhash{$version.':'.$_}; |
$value=$returnhash{$version.':'.$_}; |
} |
} |
$prevattempts.='<td>'.$value.' </td>'; |
$prevattempts.='<td>'.&Apache::lonnet::unescape($value).' </td>'; |
} |
} |
} |
} |
} |
} |
Line 1776 sub get_previous_attempt {
|
Line 1783 sub get_previous_attempt {
|
} else { |
} else { |
$value=$lasthash{$_}; |
$value=$lasthash{$_}; |
} |
} |
|
$value=&Apache::lonnet::unescape($value); |
if ($_ =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
if ($_ =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
$prevattempts.='<td>'.$value.' </td>'; |
$prevattempts.='<td>'.$value.' </td>'; |
} |
} |
Line 2665 sub check_if_partid_hidden {
|
Line 2673 sub check_if_partid_hidden {
|
my ($id,$symb,$udom,$uname) = @_; |
my ($id,$symb,$udom,$uname) = @_; |
my $hiddenparts=&Apache::lonnet::EXT('resource.0.hiddenparts', |
my $hiddenparts=&Apache::lonnet::EXT('resource.0.hiddenparts', |
$symb,$udom,$uname); |
$symb,$udom,$uname); |
|
my $truth=1; |
|
#if the string starts with !, then the list is the list to show not hide |
|
if ($hiddenparts=~s/^\s*!//) { $truth=undef; } |
my @hiddenlist=split(/,/,$hiddenparts); |
my @hiddenlist=split(/,/,$hiddenparts); |
foreach my $checkid (@hiddenlist) { |
foreach my $checkid (@hiddenlist) { |
if ($checkid =~ /^\s*\Q$id\E\s*$/) { return 1; } |
if ($checkid =~ /^\s*\Q$id\E\s*$/) { return $truth; } |
} |
} |
return undef; |
return !$truth; |
|
} |
|
|
|
|
|
############################################################ |
|
############################################################ |
|
|
|
=pod |
|
|
|
=head1 cgi-bin script and graphing routines |
|
|
|
=item get_cgi_id |
|
|
|
Inputs: none |
|
|
|
Returns an id which can be used to pass environment variables |
|
to various cgi-bin scripts. These environment variables will |
|
be removed from the users environment after a given time by |
|
the routine &Apache::lonnet::transfer_profile_to_env. |
|
|
|
=cut |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
sub get_cgi_id { |
|
return (time.'_'.int(rand(1000))); |
} |
} |
|
|
############################################################ |
############################################################ |
Line 2679 sub check_if_partid_hidden {
|
Line 2716 sub check_if_partid_hidden {
|
|
|
=item DrawBarGraph |
=item DrawBarGraph |
|
|
|
Facilitates the plotting of data in a (stacked) bar graph. |
|
Puts plot definition data into the users environment in order for |
|
graph.png to plot it. Returns an <img> tag for the plot. |
|
The bars on the plot are labeled '1','2',...,'n'. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $Title: string, the title of the plot |
|
|
|
=item $xlabel: string, text describing the X-axis of the plot |
|
|
|
=item $ylabel: string, text describing the Y-axis of the plot |
|
|
|
=item $Max: scalar, the maximum Y value to use in the plot |
|
If $Max is < any data point, the graph will not be rendered. |
|
|
|
=item $colors: array ref holding the colors to be used for the data sets when |
|
they are plotted. If undefined, default values will be used. |
|
|
|
=item @Values: An array of array references. Each array reference holds data |
|
to be plotted in a stacked bar chart. |
|
|
|
=back |
|
|
|
Returns: |
|
|
|
An <img> tag which references graph.png and the appropriate identifying |
|
information for the plot. |
|
|
=cut |
=cut |
|
|
Line 2694 sub DrawBarGraph {
|
Line 2761 sub DrawBarGraph {
|
]; |
]; |
} |
} |
# |
# |
my $identifier = time.'_'.int(rand(1000)); |
my $identifier = &get_cgi_id(); |
|
my $id = 'cgi.'.$identifier; |
if (! @Values || ref($Values[0]) ne 'ARRAY') { |
if (! @Values || ref($Values[0]) ne 'ARRAY') { |
return ''; |
return ''; |
} |
} |
Line 2703 sub DrawBarGraph {
|
Line 2771 sub DrawBarGraph {
|
my $NumSets=1; |
my $NumSets=1; |
foreach my $array (@Values) { |
foreach my $array (@Values) { |
next if (! ref($array)); |
next if (! ref($array)); |
$ValuesHash{'cgi.'.$identifier.'.data.'.$NumSets++} = |
$ValuesHash{$id.'.data.'.$NumSets++} = |
join(',',@$array); |
join(',',@$array); |
} |
} |
# |
# |
$Title = '' if (! defined($Title)); |
my ($height,$width,$xskip,$bar_width) = (200,120,1,15); |
$xlabel = '' if (! defined($xlabel)); |
if ($NumBars < 10) { |
$ylabel = '' if (! defined($ylabel)); |
$width = 120+$NumBars*15; |
$Title = &Apache::lonnet::escape($Title); |
$xskip = 1; |
$xlabel = &Apache::lonnet::escape($xlabel); |
$bar_width = 15; |
$ylabel = &Apache::lonnet::escape($ylabel); |
} elsif ($NumBars <= 25) { |
|
$width = 120+$NumBars*11; |
|
$xskip = 5; |
|
$bar_width = 8; |
|
} elsif ($NumBars <= 50) { |
|
$width = 120+$NumBars*8; |
|
$xskip = 5; |
|
$bar_width = 4; |
|
} else { |
|
$width = 120+$NumBars*8; |
|
$xskip = 5; |
|
$bar_width = 4; |
|
} |
|
# |
|
my @Labels; |
|
for (my $i=0;$i<@{$Values[0]};$i++) { |
|
push (@Labels,$i+1); |
|
} |
# |
# |
$Max = 1 if ($Max < 1); |
$Max = 1 if ($Max < 1); |
if ( int($Max) < $Max ) { |
if ( int($Max) < $Max ) { |
$Max++; |
$Max++; |
$Max = int($Max); |
$Max = int($Max); |
} |
} |
|
$Title = '' if (! defined($Title)); |
|
$xlabel = '' if (! defined($xlabel)); |
|
$ylabel = '' if (! defined($ylabel)); |
|
$ValuesHash{$id.'.title'} = &Apache::lonnet::escape($Title); |
|
$ValuesHash{$id.'.xlabel'} = &Apache::lonnet::escape($xlabel); |
|
$ValuesHash{$id.'.ylabel'} = &Apache::lonnet::escape($ylabel); |
|
$ValuesHash{$id.'.y_max_value'} = $Max; |
|
$ValuesHash{$id.'.NumBars'} = $NumBars; |
|
$ValuesHash{$id.'.NumSets'} = $NumSets; |
|
$ValuesHash{$id.'.PlotType'} = 'bar'; |
|
$ValuesHash{$id.'.Colors'} = join(',',@{$colors}); |
|
$ValuesHash{$id.'.height'} = $height; |
|
$ValuesHash{$id.'.width'} = $width; |
|
$ValuesHash{$id.'.xskip'} = $xskip; |
|
$ValuesHash{$id.'.bar_width'} = $bar_width; |
|
$ValuesHash{$id.'.labels'} = join(',',@Labels); |
# |
# |
&Apache::lonnet::appenv('cgi.'.$identifier.'.title' => $Title, |
&Apache::lonnet::appenv(%ValuesHash); |
'cgi.'.$identifier.'.xlabel' => $xlabel, |
|
'cgi.'.$identifier.'.ylabel' => $ylabel, |
|
'cgi.'.$identifier.'.Max' => $Max, |
|
'cgi.'.$identifier.'.NumBars' => $NumBars, |
|
'cgi.'.$identifier.'.NumSets' => $NumSets, |
|
'cgi.'.$identifier.'.Colors' => join(',',@{$colors}), |
|
%ValuesHash); |
|
return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; |
return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; |
} |
} |
|
|
############################################################ |
############################################################ |
|
############################################################ |
|
|
|
=pod |
|
|
|
=item DrawXYGraph |
|
|
|
Facilitates the plotting of data in an XY graph. |
|
Puts plot definition data into the users environment in order for |
|
graph.png to plot it. Returns an <img> tag for the plot. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $Title: string, the title of the plot |
|
|
|
=item $xlabel: string, text describing the X-axis of the plot |
|
|
|
=item $ylabel: string, text describing the Y-axis of the plot |
|
|
|
=item $Max: scalar, the maximum Y value to use in the plot |
|
If $Max is < any data point, the graph will not be rendered. |
|
|
|
=item $colors: Array ref containing the hex color codes for the data to be |
|
plotted in. If undefined, default values will be used. |
|
|
|
=item $Xlabels: Array ref containing the labels to be used for the X-axis. |
|
|
|
=item $Ydata: Array ref containing Array refs. |
|
Each of the contained arrays will be plotted as a seperate curve. |
|
|
|
=item %Values: hash indicating or overriding any default values which are |
|
passed to graph.png. |
|
Possible values are: width, xskip, x_ticks, x_tick_offset, among others. |
|
|
|
=back |
|
|
|
Returns: |
|
|
|
An <img> tag which references graph.png and the appropriate identifying |
|
information for the plot. |
|
|
|
=cut |
|
|
|
############################################################ |
|
############################################################ |
|
sub DrawXYGraph { |
|
my ($Title,$xlabel,$ylabel,$Max,$colors,$Xlabels,$Ydata,%Values)=@_; |
|
# |
|
# Create the identifier for the graph |
|
my $identifier = &get_cgi_id(); |
|
my $id = 'cgi.'.$identifier; |
|
# |
|
$Title = '' if (! defined($Title)); |
|
$xlabel = '' if (! defined($xlabel)); |
|
$ylabel = '' if (! defined($ylabel)); |
|
my %ValuesHash = |
|
( |
|
$id.'.title' => &Apache::lonnet::escape($Title), |
|
$id.'.xlabel' => &Apache::lonnet::escape($xlabel), |
|
$id.'.ylabel' => &Apache::lonnet::escape($ylabel), |
|
$id.'.y_max_value'=> $Max, |
|
$id.'.labels' => join(',',@$Xlabels), |
|
$id.'.PlotType' => 'XY', |
|
); |
|
# |
|
if (defined($colors) && ref($colors) eq 'ARRAY') { |
|
$ValuesHash{$id.'.Colors'} = join(',',@{$colors}); |
|
} |
|
# |
|
if (! ref($Ydata) || ref($Ydata) ne 'ARRAY') { |
|
return ''; |
|
} |
|
my $NumSets=1; |
|
foreach my $array (@{$Ydata}){ |
|
next if (! ref($array)); |
|
$ValuesHash{$id.'.data.'.$NumSets++} = join(',',@$array); |
|
} |
|
$ValuesHash{$id.'.NumSets'} = $NumSets-1; |
|
# |
|
# Deal with other parameters |
|
while (my ($key,$value) = each(%Values)) { |
|
$ValuesHash{$id.'.'.$key} = $value; |
|
} |
|
# |
|
&Apache::lonnet::appenv(%ValuesHash); |
|
return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; |
|
} |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
=pod |
|
|
|
=item DrawXYYGraph |
|
|
|
Facilitates the plotting of data in an XY graph with two Y axes. |
|
Puts plot definition data into the users environment in order for |
|
graph.png to plot it. Returns an <img> tag for the plot. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $Title: string, the title of the plot |
|
|
|
=item $xlabel: string, text describing the X-axis of the plot |
|
|
|
=item $ylabel: string, text describing the Y-axis of the plot |
|
|
|
=item $colors: Array ref containing the hex color codes for the data to be |
|
plotted in. If undefined, default values will be used. |
|
|
|
=item $Xlabels: Array ref containing the labels to be used for the X-axis. |
|
|
|
=item $Ydata1: The first data set |
|
|
|
=item $Min1: The minimum value of the left Y-axis |
|
|
|
=item $Max1: The maximum value of the left Y-axis |
|
|
|
=item $Ydata2: The second data set |
|
|
|
=item $Min2: The minimum value of the right Y-axis |
|
|
|
=item $Max2: The maximum value of the left Y-axis |
|
|
|
=item %Values: hash indicating or overriding any default values which are |
|
passed to graph.png. |
|
Possible values are: width, xskip, x_ticks, x_tick_offset, among others. |
|
|
|
=back |
|
|
|
Returns: |
|
|
|
An <img> tag which references graph.png and the appropriate identifying |
|
information for the plot. |
|
|
|
=cut |
|
|
|
############################################################ |
|
############################################################ |
|
sub DrawXYYGraph { |
|
my ($Title,$xlabel,$ylabel,$colors,$Xlabels,$Ydata1,$Min1,$Max1, |
|
$Ydata2,$Min2,$Max2,%Values)=@_; |
|
# |
|
# Create the identifier for the graph |
|
my $identifier = &get_cgi_id(); |
|
my $id = 'cgi.'.$identifier; |
|
# |
|
$Title = '' if (! defined($Title)); |
|
$xlabel = '' if (! defined($xlabel)); |
|
$ylabel = '' if (! defined($ylabel)); |
|
my %ValuesHash = |
|
( |
|
$id.'.title' => &Apache::lonnet::escape($Title), |
|
$id.'.xlabel' => &Apache::lonnet::escape($xlabel), |
|
$id.'.ylabel' => &Apache::lonnet::escape($ylabel), |
|
$id.'.labels' => join(',',@$Xlabels), |
|
$id.'.PlotType' => 'XY', |
|
$id.'.NumSets' => 2, |
|
$id.'.two_axes' => 1, |
|
$id.'.y1_max_value' => $Max1, |
|
$id.'.y1_min_value' => $Min1, |
|
$id.'.y2_max_value' => $Max2, |
|
$id.'.y2_min_value' => $Min2, |
|
); |
|
# |
|
if (defined($colors) && ref($colors) eq 'ARRAY') { |
|
$ValuesHash{$id.'.Colors'} = join(',',@{$colors}); |
|
} |
|
# |
|
if (! ref($Ydata1) || ref($Ydata1) ne 'ARRAY' || |
|
! ref($Ydata2) || ref($Ydata2) ne 'ARRAY'){ |
|
return ''; |
|
} |
|
my $NumSets=1; |
|
foreach my $array ($Ydata1,$Ydata2){ |
|
next if (! ref($array)); |
|
$ValuesHash{$id.'.data.'.$NumSets++} = join(',',@$array); |
|
} |
|
# |
|
# Deal with other parameters |
|
while (my ($key,$value) = each(%Values)) { |
|
$ValuesHash{$id.'.'.$key} = $value; |
|
} |
|
# |
|
&Apache::lonnet::appenv(%ValuesHash); |
|
return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; |
|
} |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
=pod |
|
|
|
=head1 Statistics helper routines? |
|
|
|
Bad place for them but what the hell. |
|
|
|
=item &chartlink |
|
|
|
Returns a link to the chart for a specific student. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=item $linktext: The text of the link |
|
|
|
=item $sname: The students username |
|
|
|
=item $sdomain: The students domain |
|
|
|
=back |
|
|
|
=cut |
|
|
|
############################################################ |
|
############################################################ |
|
sub chartlink { |
|
my ($linktext, $sname, $sdomain) = @_; |
|
my $link = '<a href="/adm/statistics?reportSelected=student_assessment'. |
|
'&SelectedStudent='.&Apache::lonnet::escape($sname.':'.$sdomain). |
|
'&chartoutputmode='.HTML::Entities::encode('html, with all links'). |
|
'">'.$linktext.'</a>'; |
|
} |
|
|
|
############################################################ |
############################################################ |
############################################################ |
|
|
=pod |
=pod |