version 1.221, 2004/10/21 09:53:44
|
version 1.235, 2004/11/30 19:08:18
|
Line 59 use Apache::lonnet();
|
Line 59 use Apache::lonnet();
|
use GDBM_File; |
use GDBM_File; |
use POSIX qw(strftime mktime); |
use POSIX qw(strftime mktime); |
use Apache::Constants qw(:common :http :methods); |
use Apache::Constants qw(:common :http :methods); |
use Apache::lonmsg(); |
|
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use HTML::Entities; |
use HTML::Entities; |
Line 380 sub coursebrowser_javascript {
|
Line 379 sub coursebrowser_javascript {
|
return (<<ENDSTDBRW); |
return (<<ENDSTDBRW); |
<script type="text/javascript" language="Javascript" > |
<script type="text/javascript" language="Javascript" > |
var stdeditbrowser; |
var stdeditbrowser; |
function opencrsbrowser(formname,uname,udom,desc) { |
function opencrsbrowser(formname,uname,udom,desc,extra_element) { |
var url = '/adm/pickcourse?'; |
var url = '/adm/pickcourse?'; |
var filter; |
var filter; |
if (filter != null) { |
if (filter != null) { |
Line 397 sub coursebrowser_javascript {
|
Line 396 sub coursebrowser_javascript {
|
url += 'form=' + formname + '&cnumelement='+uname+ |
url += 'form=' + formname + '&cnumelement='+uname+ |
'&cdomelement='+udom+ |
'&cdomelement='+udom+ |
'&cnameelement='+desc; |
'&cnameelement='+desc; |
|
if (extra_element !=null && extra_element != '' && formname == 'rolechoice') { |
|
url += '&roleelement='+extra_element; |
|
if (domainfilter == null || domainfilter == '') { |
|
url += '&domainfilter='+extra_element; |
|
} |
|
} |
var title = 'Course_Browser'; |
var title = 'Course_Browser'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
var options = 'scrollbars=1,resizable=1,menubar=0'; |
options += ',width=700,height=600'; |
options += ',width=700,height=600'; |
Line 408 ENDSTDBRW
|
Line 413 ENDSTDBRW
|
} |
} |
|
|
sub selectcourse_link { |
sub selectcourse_link { |
my ($form,$unameele,$udomele,$desc)=@_; |
my ($form,$unameele,$udomele,$desc,$extra_element)=@_; |
return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. |
return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. |
'","'.$udomele.'","'.$desc.'");'."'>".&mt('Select Course')."</a>"; |
'","'.$udomele.'","'.$desc.'","'.$extra_element.'");'."'>".&mt('Select Course')."</a>"; |
} |
} |
|
|
=pod |
=pod |
Line 663 sub help_open_menu {
|
Line 668 sub help_open_menu {
|
my $link=''; |
my $link=''; |
my $title = &mt('Get help'); |
my $title = &mt('Get help'); |
my $origurl = $ENV{'REQUEST_URI'}; |
my $origurl = $ENV{'REQUEST_URI'}; |
|
$origurl=~s|^/~|/priv/|; |
my $timestamp = time; |
my $timestamp = time; |
foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) { |
foreach (\$color,\$function,\$topic,\$component_help,\$faq,\$bug,\$origurl) { |
$$_ = &Apache::lonnet::escape($$_); |
$$_ = &Apache::lonnet::escape($$_); |
Line 1741 sub get_related_words {
|
Line 1747 sub get_related_words {
|
|
|
=over 4 |
=over 4 |
|
|
=item * plainname($uname,$udom) |
=item * plainname($uname,$udom,$first) |
|
|
Takes a users logon name and returns it as a string in |
Takes a users logon name and returns it as a string in |
"first middle last generation" form |
"first middle last generation" form |
|
if $first is set to 'lastname' then it returns it as |
|
'lastname generation, firstname middlename' if their is a lastname |
|
|
=cut |
=cut |
|
|
############################################################### |
############################################################### |
sub plainname { |
sub plainname { |
my ($uname,$udom)=@_; |
my ($uname,$udom,$first)=@_; |
my %names=&Apache::lonnet::get('environment', |
my %names=&Apache::lonnet::get('environment', |
['firstname','middlename','lastname','generation'], |
['firstname','middlename','lastname','generation'], |
$udom,$uname); |
$udom,$uname); |
my $name=$names{'firstname'}.' '.$names{'middlename'}.' '. |
my $name=&Apache::lonnet::format_name($names{'firstname'}, |
$names{'lastname'}.' '.$names{'generation'}; |
$names{'middlename'}, |
|
$names{'lastname'}, |
|
$names{'generation'},$first); |
|
$name=~s/^\s+//; |
$name=~s/\s+$//; |
$name=~s/\s+$//; |
$name=~s/\s+/ /g; |
$name=~s/\s+/ /g; |
if ($name !~ /\S/) { $name=$uname.'@'.$udom; } |
if ($name !~ /\S/) { $name=$uname.'@'.$udom; } |
Line 2518 other decorations will be returned.
|
Line 2529 other decorations will be returned.
|
=cut |
=cut |
|
|
sub bodytag { |
sub bodytag { |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg)=@_; |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle)=@_; |
$title=&mt($title); |
$title=&mt($title); |
$function = &get_users_function() if (!$function); |
$function = &get_users_function() if (!$function); |
my $img=&designparm($function.'.img',$domain); |
my $img=&designparm($function.'.img',$domain); |
Line 2551 sub bodytag {
|
Line 2562 sub bodytag {
|
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
# construct main body tag |
# construct main body tag |
my $bodytag = <<END; |
my $bodytag = <<END; |
<style> |
<style type="text/css"> |
h1, h2, h3, th { font-family: Arial, Helvetica, sans-serif } |
h1, h2, h3, th { font-family: Arial, Helvetica, sans-serif } |
a:focus { color: red; background: yellow } |
a:focus { color: red; background: yellow } |
</style> |
</style> |
Line 2564 END
|
Line 2575 END
|
return $bodytag; |
return $bodytag; |
} elsif ($ENV{'browser.interface'} eq 'textual') { |
} elsif ($ENV{'browser.interface'} eq 'textual') { |
# Accessibility |
# Accessibility |
|
|
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
$forcereg). |
$forcereg). |
'<h1>LON-CAPA: '.$title.'</h1>'; |
'<h1>LON-CAPA: '.$title.'</h1>'; |
Line 2571 END
|
Line 2583 END
|
# No Remote |
# No Remote |
my $roleinfo=(<<ENDROLE); |
my $roleinfo=(<<ENDROLE); |
<td bgcolor="$tabbg" align="right"> |
<td bgcolor="$tabbg" align="right"> |
<p> |
|
<font size="2" face="Arial, Helvetica, sans-serif"> |
<font size="2" face="Arial, Helvetica, sans-serif"> |
$ENV{'environment.firstname'} |
$ENV{'environment.firstname'} |
$ENV{'environment.middlename'} |
$ENV{'environment.middlename'} |
Line 2582 END
|
Line 2593 END
|
<font size="2" face="Arial, Helvetica, sans-serif">$role</font> |
<font size="2" face="Arial, Helvetica, sans-serif">$role</font> |
<br /> |
<br /> |
<font size="2" face="Arial, Helvetica, sans-serif">$realm</font> |
<font size="2" face="Arial, Helvetica, sans-serif">$realm</font> |
</p> |
|
</td> |
</td> |
ENDROLE |
ENDROLE |
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
my $titleinfo = '<font face="Arial, Helvetica, sans-serif" size="+3" color="'. |
$forcereg). |
$font.'"><b>'.$title.'</b></font>'; |
'<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td rowspan="3" bgcolor="'.$tabbg.'"><font face="Arial, Helvetica, sans-serif" size="+3" color="'.$font.'"><b>'.$title. |
if ($customtitle) { |
'</b></font></td>'.$roleinfo.'</tr></table>'; |
$titleinfo = $customtitle; |
|
} |
|
|
|
if ($ENV{'request.state'} eq 'construct') { |
|
my ($uname,$thisdisfn)= |
|
($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); |
|
my $formaction='/priv/'.$uname.'/'.$thisdisfn; |
|
$formaction=~s/\/+/\//g; |
|
unless ($customtitle) { |
|
my $parentpath = $thisdisfn; |
|
if ($thisdisfn =~ m-(.+/)[^/]*$-) { |
|
$parentpath = $1; |
|
} |
|
$titleinfo = &Apache::loncommon::help_open_menu('','','','',3,'Authoring'). |
|
'<font face="Arial, Helvetica, sans-serif"><b>Construction Space</b>:</font> '. |
|
'<form name="dirs" method="post" action="'.$formaction |
|
.'" target="_top"><tt><b>' |
|
.&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."</b></tt><br />" |
|
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
|
.'</form>' |
|
.&Apache::lonmenu::constspaceform(); |
|
|
|
} |
|
$forcereg=1; |
|
} |
|
my $titletable = '<table bgcolor="'.$pgbg.'" width="100%" border="0" '. |
|
'cellspacing="3" cellpadding="3">'. |
|
'<tr><td rowspan="3" bgcolor="'.$tabbg.'">'. |
|
$titleinfo.'</td>'.$roleinfo.'</tr></table>'; |
|
if ($ENV{'request.state'} eq 'construct') { |
|
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg,$titletable); |
|
} else { |
|
$bodytag .= &Apache::lonmenu::menubuttons($forcereg,'web',$forcereg). |
|
$titletable; |
|
} |
|
return $bodytag; |
} |
} |
|
|
# |
# |
# Top frame rendering, Remote is up |
# Top frame rendering, Remote is up |
# |
# |
|
my $titleinfo = ' <font size="5" face="Arial, Helvetica, sans-serif"><b>'.$title.'</b></font>'; |
|
if ($customtitle) { |
|
$titleinfo = $customtitle; |
|
} |
return(<<ENDBODY); |
return(<<ENDBODY); |
$bodytag |
$bodytag |
<table width="100%" cellspacing="0" border="0" cellpadding="0"> |
<table width="100%" cellspacing="0" border="0" cellpadding="0"> |
Line 2603 $upperleft</td>
|
Line 2652 $upperleft</td>
|
</tr> |
</tr> |
<tr> |
<tr> |
<td rowspan="3" bgcolor="$tabbg"> |
<td rowspan="3" bgcolor="$tabbg"> |
<font size="5" face="Arial, Helvetica, sans-serif"><b>$title</b></font> |
$titleinfo |
<td bgcolor="$tabbg" align="right"> |
<td bgcolor="$tabbg" align="right"> |
<font size="2" face="Arial, Helvetica, sans-serif"> |
<font size="2" face="Arial, Helvetica, sans-serif"> |
$ENV{'environment.firstname'} |
$ENV{'environment.firstname'} |
Line 2651 sub get_users_function {
|
Line 2700 sub get_users_function {
|
|
|
############################################### |
############################################### |
|
|
|
=pod |
|
|
|
=item get_sections |
|
|
|
Determines all the sections for a course including |
|
sections with students and sections containing other roles. |
|
Incoming parameters: domain, course number, reference to |
|
section hash (keys to be section/group IDs), reference to |
|
array containing roles for which sections should be gathered |
|
(optional). If the fourth argument is undefined, sections |
|
are gathered for any role. |
|
|
|
Returns number of sections. |
|
|
|
=cut |
|
|
|
############################################### |
|
sub get_sections { |
|
my ($cdom,$cnum,$sectioncount,$possible_roles) = @_; |
|
my $cid = $cdom.'_'.$cnum; |
|
my $numsections = 0; |
|
if ($cdom && $cnum) { |
|
if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) { |
|
my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum); |
|
my $sec_index = &Apache::loncoursedata::CL_SECTION(); |
|
my $status_index = &Apache::loncoursedata::CL_STATUS(); |
|
while (my ($student,$data) = each %$classlist) { |
|
my ($section,$status) = ($data->[$sec_index], |
|
$data->[$status_index]); |
|
unless ($section eq '' || $section =~ /^\s*$/) { |
|
if (!defined($$sectioncount{$section})) { |
|
$$sectioncount{$section} = 1; |
|
$numsections ++; |
|
} else { |
|
$$sectioncount{$section} ++; |
|
} |
|
} |
|
} |
|
} |
|
my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); |
|
foreach my $user (sort keys %courseroles) { |
|
if ($user =~ /^(\w{2})/) { |
|
my $role = $1; |
|
if (!defined($possible_roles) || (grep/^$role$/,@$possible_roles)) { |
|
if ($role eq 'cr') { |
|
if ($user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) { |
|
if (!defined($$sectioncount{$1})) { |
|
$$sectioncount{$1} = 1; |
|
$numsections ++; |
|
} else { |
|
$$sectioncount{$1} ++; |
|
} |
|
} |
|
} |
|
if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { |
|
if (!defined($$sectioncount{$1})) { |
|
$$sectioncount{$1} = 1; |
|
$numsections ++; |
|
} else { |
|
$$sectioncount{$1} ++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return $numsections; |
|
} |
|
|
|
|
sub get_posted_cgi { |
sub get_posted_cgi { |
my $r=shift; |
my $r=shift; |
|
|
Line 3277 sub DrawBarGraph {
|
Line 3396 sub DrawBarGraph {
|
'#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66', |
'#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66', |
]; |
]; |
} |
} |
|
my $extra_settings = {}; |
|
if (ref($Values[-1]) eq 'HASH') { |
|
$extra_settings = pop(@Values); |
|
} |
# |
# |
my $identifier = &get_cgi_id(); |
my $identifier = &get_cgi_id(); |
my $id = 'cgi.'.$identifier; |
my $id = 'cgi.'.$identifier; |
if (! @Values || ref($Values[0]) ne 'ARRAY') { |
if (! @Values || ref($Values[0]) ne 'ARRAY') { |
return ''; |
return ''; |
} |
} |
|
# |
|
my @Labels; |
|
if (defined($labels)) { |
|
@Labels = @$labels; |
|
} else { |
|
for (my $i=0;$i<@{$Values[0]};$i++) { |
|
push (@Labels,$i+1); |
|
} |
|
} |
|
# |
my $NumBars = scalar(@{$Values[0]}); |
my $NumBars = scalar(@{$Values[0]}); |
|
if ($NumBars < scalar(@Labels)) { $NumBars = scalar(@Labels); } |
my %ValuesHash; |
my %ValuesHash; |
my $NumSets=1; |
my $NumSets=1; |
foreach my $array (@Values) { |
foreach my $array (@Values) { |
Line 3293 sub DrawBarGraph {
|
Line 3427 sub DrawBarGraph {
|
} |
} |
# |
# |
my ($height,$width,$xskip,$bar_width) = (200,120,1,15); |
my ($height,$width,$xskip,$bar_width) = (200,120,1,15); |
if ($NumBars < 5) { |
if ($NumBars < 3) { |
$width = 120+$NumBars*25; |
$width = 120+$NumBars*32; |
|
$xskip = 1; |
|
$bar_width = 30; |
|
} elsif ($NumBars < 5) { |
|
$width = 120+$NumBars*20; |
$xskip = 1; |
$xskip = 1; |
$bar_width = 25; |
$bar_width = 20; |
} elsif ($NumBars < 10) { |
} elsif ($NumBars < 10) { |
$width = 120+$NumBars*15; |
$width = 120+$NumBars*15; |
$xskip = 1; |
$xskip = 1; |
Line 3315 sub DrawBarGraph {
|
Line 3453 sub DrawBarGraph {
|
$bar_width = 4; |
$bar_width = 4; |
} |
} |
# |
# |
my @Labels; |
|
if (defined($labels)) { |
|
@Labels = @$labels; |
|
} else { |
|
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++; |
Line 3346 sub DrawBarGraph {
|
Line 3475 sub DrawBarGraph {
|
$ValuesHash{$id.'.bar_width'} = $bar_width; |
$ValuesHash{$id.'.bar_width'} = $bar_width; |
$ValuesHash{$id.'.labels'} = join(',',@Labels); |
$ValuesHash{$id.'.labels'} = join(',',@Labels); |
# |
# |
|
# Deal with other parameters |
|
while (my ($key,$value) = each(%$extra_settings)) { |
|
$ValuesHash{$id.'.'.$key} = $value; |
|
} |
|
# |
&Apache::lonnet::appenv(%ValuesHash); |
&Apache::lonnet::appenv(%ValuesHash); |
return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; |
return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; |
} |
} |
Line 3732 sub connection_aborted {
|
Line 3866 sub connection_aborted {
|
return $c->aborted(); |
return $c->aborted(); |
} |
} |
|
|
# |
|
# Escapes strings that may have embedded 's that will be put into |
# Escapes strings that may have embedded 's that will be put into |
# javascript strings as 'strings'. |
# strings as 'strings'. |
# The assumptions are: |
sub escape_single { |
# There has been no effort to escape ' with \' |
|
# Any \'s in the string are intended to be there as part of the URL |
|
# and must also be escaped. |
|
# Parameters: |
|
# input - The string to escape. |
|
# Returns: |
|
# The escaped string (' replaced by \' and \ replaced by \\). |
|
# |
|
sub javascript_escape { |
|
my ($input) = @_; |
my ($input) = @_; |
|
$input =~ s/\\/\\\\/g; # Escape the \'s..(must be first)> |
# I imagine a regexp wizard could combine the two expressions below. |
|
# If you do you might want to comment the result. |
|
|
|
$input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)> |
|
$input =~ s/\'/\\\'/g; # Esacpe the 's.... |
$input =~ s/\'/\\\'/g; # Esacpe the 's.... |
|
|
return $input; |
return $input; |
} |
} |
|
|
|
# Same as escape_single, but escape's "'s This |
|
# can be used for "strings" |
|
sub escape_double { |
|
my ($input) = @_; |
|
$input =~ s/\\/\\\\/g; # Escape the /'s..(must be first)> |
|
$input =~ s/\"/\\\"/g; # Esacpe the "s.... |
|
return $input; |
|
} |
|
|
|
# Escapes the last element of a full URL. |
|
sub escape_url { |
|
my ($url) = @_; |
|
my @urlslices = split(/\//, $url); |
|
my $lastitem = &Apache::lonnet::escape(pop(@urlslices)); |
|
return join('/',@urlslices).'/'.$lastitem; |
|
} |
=pod |
=pod |
|
|
=back |
=back |