version 1.233, 2004/11/21 04:24:49
|
version 1.251, 2005/02/25 04:56:05
|
Line 375 sub selectstudent_link {
|
Line 375 sub selectstudent_link {
|
} |
} |
|
|
sub coursebrowser_javascript { |
sub coursebrowser_javascript { |
my ($domainfilter,$roleelement)=@_; |
my ($domainfilter)=@_; |
return (<<ENDSTDBRW); |
return (<<ENDSTDBRW); |
<script type="text/javascript" language="Javascript" > |
<script type="text/javascript" language="Javascript" > |
var extra_element = "$roleelement" |
|
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 != '') { |
if (extra_element !=null && extra_element != '' && formname == 'rolechoice') { |
url += '&roleelement=$roleelement'; |
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'; |
Line 411 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 685 sub help_open_menu {
|
Line 687 sub help_open_menu {
|
"<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>". |
"<table bgcolor='#773311' cellspacing='1' cellpadding='1' border='0'><tr>". |
"<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>"; |
"<td bgcolor='#886622'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>"; |
} |
} |
|
my $html=&Apache::lonxml::xmlbegin(); |
my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif"); |
my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif"); |
$template .= <<"ENDTEMPLATE"; |
$template .= <<"ENDTEMPLATE"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
//<!-- BEGIN LON-CAPA Internal |
//<!-- BEGIN LON-CAPA Internal |
function helpMenu(caller) { |
function helpMenu(target) { |
if (caller == 'open') { |
var caller = this; |
newWindow = window.open("","helpmenu","HEIGHT=$height,WIDTH=$width,resize=yes,scrollbars=yes" ) |
if (target == 'open') { |
caller = newWindow.document |
var newWindow = null; |
} else { |
try { |
caller = this.document |
newWindow = window.open("/adm/rat/empty.html","helpmenu","HEIGHT=$height,WIDTH=$width,resizable=yes,scrollbars=yes" ) |
} |
} |
caller.write("<html><head><title>LON-CAPA Help Menu</title><meta http-equiv='pragma' content='no-cache'></head>") |
catch(error) { |
caller.write("<frameset rows='105,*' border='0'><frame name='bannerframe' src='$banner_link'><frame name='bodyframe' src='$details_link'></frameset>") |
writeHelp(caller); |
caller.write("</html>") |
return; |
caller.close() |
} |
if (caller == newWindow.document) { |
if (newWindow) { |
caller.focus() |
caller = newWindow; |
|
} |
} |
} |
|
writeHelp(caller); |
|
return; |
|
} |
|
function writeHelp(caller) { |
|
caller.document.write('$html<head><title>LON-CAPA Help Menu</title><meta http-equiv="pragma" content="no-cache"></head>') |
|
caller.document.write("<frameset rows='105,*' border='0'><frame name='bannerframe' src='$banner_link'><frame name='bodyframe' src='$details_link'></frameset>") |
|
caller.document.write("</html>") |
|
caller.document.close() |
|
caller.focus() |
} |
} |
// END LON-CAPA Internal --> |
// END LON-CAPA Internal --> |
</script> |
</script> |
Line 882 sub define_excel_formats {
|
Line 895 sub define_excel_formats {
|
$format->{'h1'} = $workbook->add_format(bold=>1, size=>18); |
$format->{'h1'} = $workbook->add_format(bold=>1, size=>18); |
$format->{'h2'} = $workbook->add_format(bold=>1, size=>16); |
$format->{'h2'} = $workbook->add_format(bold=>1, size=>16); |
$format->{'h3'} = $workbook->add_format(bold=>1, size=>14); |
$format->{'h3'} = $workbook->add_format(bold=>1, size=>14); |
|
$format->{'i'} = $workbook->add_format(italic=>1); |
$format->{'date'} = $workbook->add_format(num_format=> |
$format->{'date'} = $workbook->add_format(num_format=> |
'mm/dd/yyyy hh:mm:ss'); |
'mm/dd/yyyy hh:mm:ss'); |
return $format; |
return $format; |
Line 1129 sub select_dom_form {
|
Line 1143 sub select_dom_form {
|
my $selectdomain = "<select name=\"$name\" size=\"1\">\n"; |
my $selectdomain = "<select name=\"$name\" size=\"1\">\n"; |
foreach (@domains) { |
foreach (@domains) { |
$selectdomain.="<option value=\"$_\" ". |
$selectdomain.="<option value=\"$_\" ". |
($_ eq $defdom ? 'selected' : ''). |
($_ eq $defdom ? 'selected="selected"' : ''). |
">$_</option>\n"; |
">$_</option>\n"; |
} |
} |
$selectdomain.="</select>"; |
$selectdomain.="</select>"; |
Line 1228 Outputs:
|
Line 1242 Outputs:
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub decode_user_agent { |
sub decode_user_agent { |
|
my ($r)=@_; |
my @browsertype=split(/\&/,$Apache::lonnet::perlvar{"lonBrowsDet"}); |
my @browsertype=split(/\&/,$Apache::lonnet::perlvar{"lonBrowsDet"}); |
my %mathcap=split(/\&/,$$Apache::lonnet::perlvar{"lonMathML"}); |
my %mathcap=split(/\&/,$$Apache::lonnet::perlvar{"lonMathML"}); |
my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; |
my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; |
|
if (!$httpbrowser && $r) { $httpbrowser=$r->header_in('User-Agent'); } |
my $clientbrowser='unknown'; |
my $clientbrowser='unknown'; |
my $clientversion='0'; |
my $clientversion='0'; |
my $clientmathml=''; |
my $clientmathml=''; |
Line 2283 sub get_student_view {
|
Line 2299 sub get_student_view {
|
if (defined($moreenv)) { |
if (defined($moreenv)) { |
%form=(%form,%{$moreenv}); |
%form=(%form,%{$moreenv}); |
} |
} |
if ($target eq 'tex') {$form{'grade_target'} = 'tex';} |
if (defined($target)) { $form{'grade_target'} = $target; } |
$feedurl=&Apache::lonnet::clutter($feedurl); |
$feedurl=&Apache::lonnet::clutter($feedurl); |
my $userview=&Apache::lonnet::ssi_body($feedurl,%form); |
my $userview=&Apache::lonnet::ssi_body($feedurl,%form); |
$userview=~s/\<body[^\>]*\>//gi; |
$userview=~s/\<body[^\>]*\>//gi; |
Line 2323 sub get_student_answers {
|
Line 2339 sub get_student_answers {
|
|
|
=item * &submlink() |
=item * &submlink() |
|
|
Inputs: $text $uname $udom $symb |
Inputs: $text $uname $udom $symb $target |
|
|
Returns: A link to grades.pm such as to see the SUBM view of a student |
Returns: A link to grades.pm such as to see the SUBM view of a student |
|
|
Line 2331 Returns: A link to grades.pm such as to
|
Line 2347 Returns: A link to grades.pm such as to
|
|
|
############################################### |
############################################### |
sub submlink { |
sub submlink { |
my ($text,$uname,$udom,$symb)=@_; |
my ($text,$uname,$udom,$symb,$target)=@_; |
if (!($uname && $udom)) { |
if (!($uname && $udom)) { |
(my $cursymb, my $courseid,$udom,$uname)= |
(my $cursymb, my $courseid,$udom,$uname)= |
&Apache::lonxml::whichuser($symb); |
&Apache::lonxml::whichuser($symb); |
if (!$symb) { $symb=$cursymb; } |
if (!$symb) { $symb=$cursymb; } |
} |
} |
if (!$symb) { $symb=&symbread(); } |
if (!$symb) { $symb=&symbread(); } |
return '<a href="/adm/grades?symb='.$symb.'&student='.$uname. |
$symb=&Apache::lonnet::escape($symb); |
'&userdom='.$udom.'&command=submission">'.$text.'</a>'; |
if ($target) { $target="target=\"$target\""; } |
|
return '<a href="/adm/grades?&command=submission&'. |
|
'symb='.$symb.'&student='.$uname. |
|
'&userdom='.$udom.'" '.$target.'>'.$text.'</a>'; |
|
} |
|
############################################## |
|
|
|
=pod |
|
|
|
=item * &pgrdlink() |
|
|
|
Inputs: $text $uname $udom $symb $target |
|
|
|
Returns: A link to grades.pm such as to see the PGRD view of a student |
|
|
|
=cut |
|
|
|
############################################### |
|
sub pgrdlink { |
|
my $link=&submlink(@_); |
|
$link=~s/(&command=submission)/$1&showgrading=yes/; |
|
return $link; |
|
} |
|
############################################## |
|
|
|
=pod |
|
|
|
=item * &pprmlink() |
|
|
|
Inputs: $text $uname $udom $symb $target |
|
|
|
Returns: A link to parmset.pm such as to see the PPRM view of a |
|
student andn resource |
|
|
|
=cut |
|
|
|
############################################### |
|
sub pprmlink { |
|
my ($text,$uname,$udom,$symb,$target)=@_; |
|
if (!($uname && $udom)) { |
|
(my $cursymb, my $courseid,$udom,$uname)= |
|
&Apache::lonxml::whichuser($symb); |
|
if (!$symb) { $symb=$cursymb; } |
|
} |
|
if (!$symb) { $symb=&symbread(); } |
|
$symb=&Apache::lonnet::escape($symb); |
|
if ($target) { $target="target=\"$target\""; } |
|
return '<a href="/adm/parmset?&command=set&'. |
|
'symb='.$symb.'&uname='.$uname. |
|
'&udom='.$udom.'" '.$target.'>'.$text.'</a>'; |
} |
} |
############################################## |
############################################## |
|
|
Line 2597 ENDROLE
|
Line 2662 ENDROLE
|
$font.'"><b>'.$title.'</b></font>'; |
$font.'"><b>'.$title.'</b></font>'; |
if ($customtitle) { |
if ($customtitle) { |
$titleinfo = $customtitle; |
$titleinfo = $customtitle; |
} |
} |
|
|
if ($ENV{'request.state'} eq 'construct') { |
if ($ENV{'request.state'} eq 'construct') { |
my ($uname,$thisdisfn)= |
my ($uname,$thisdisfn)= |
($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); |
($ENV{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|); |
my $formaction='/priv/'.$uname.'/'.$thisdisfn; |
my $formaction='/priv/'.$uname.'/'.$thisdisfn; |
$formaction=~s/\/+/\//g; |
$formaction=~s/\/+/\//g; |
$titleinfo = '<form name="dirs" method="post" action="'.$formaction |
unless ($customtitle) { #this is for resources; directories have customtitle, and crumbs and select recent are created in lonpubdir.pm |
.'" target="_top">' |
my $parentpath = ''; |
.&Apache::lonhtmlcommon::crumbs($uname.'/'.$thisdisfn,'_top','/priv','',-1,1)."<br />" |
my $lastitem = ''; |
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
if ($thisdisfn =~ m-(.+/)([^/]*)$-) { |
.'</form>' |
$parentpath = $1; |
.&Apache::lonmenu::constspaceform(); |
$lastitem = $2; |
|
} else { |
&Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction); |
$lastitem = $thisdisfn; |
if ($thisdisfn!~m|/$|) { $forcereg=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)."<font size=\"+1\">$lastitem</font></b></tt><br />" |
|
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
|
.'</form>' |
|
.&Apache::lonmenu::constspaceform(); |
|
|
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
} |
$forcereg). |
$forcereg=1; |
'<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td rowspan="3" bgcolor="'.$tabbg.'">'.$titleinfo.'</td>'.$roleinfo.'</tr></table>'; |
} |
|
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; |
} |
} |
|
|
# |
# |
Line 2626 ENDROLE
|
Line 2710 ENDROLE
|
if ($customtitle) { |
if ($customtitle) { |
$titleinfo = $customtitle; |
$titleinfo = $customtitle; |
} |
} |
|
# |
|
# Extra info if you are the DC |
|
my $dc_info = ''; |
|
if ($ENV{'user.adv'} && exists($ENV{'user.role.dc./'. |
|
$ENV{'course.'.$ENV{'request.course.id'}. |
|
'.domain'}.'/'})) { |
|
my $cid = $ENV{'request.course.id'}; |
|
$dc_info.= $cid.' '.$ENV{'course.'.$cid.'.internal.coursecode'}; |
|
$dc_info = '('.$dc_info.')'; |
|
} |
|
# |
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 2635 $upperleft</td>
|
Line 2730 $upperleft</td>
|
</tr> |
</tr> |
<tr> |
<tr> |
<td rowspan="3" bgcolor="$tabbg"> |
<td rowspan="3" bgcolor="$tabbg"> |
$titleinfo |
$titleinfo $dc_info |
<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 2655 ENDBODY
|
Line 2750 ENDBODY
|
} |
} |
|
|
############################################### |
############################################### |
|
############################################### |
|
|
|
=pod |
|
|
|
=back |
|
|
|
=head1 HTTP Helpers |
|
|
|
=over 4 |
|
|
|
=item * &endbodytag() |
|
|
|
Returns a uniform footer for LON-CAPA web pages. |
|
|
|
Inputs: |
|
|
|
=over 4 |
|
|
|
=back |
|
|
|
Returns: A uniform footer for LON-CAPA web pages. |
|
|
|
=cut |
|
|
|
sub endbodytag { |
|
my $endbodytag='</body>'; |
|
return $endbodytag; |
|
} |
|
|
|
############################################### |
|
|
=pod |
=pod |
|
|
Line 2702 Returns number of sections.
|
Line 2827 Returns number of sections.
|
############################################### |
############################################### |
sub get_sections { |
sub get_sections { |
my ($cdom,$cnum,$sectioncount,$possible_roles) = @_; |
my ($cdom,$cnum,$sectioncount,$possible_roles) = @_; |
|
if (!($cdom && $cnum)) { return 0; } |
my $cid = $cdom.'_'.$cnum; |
my $cid = $cdom.'_'.$cnum; |
my $numsections = 0; |
my $numsections = 0; |
if ($cdom && $cnum) { |
|
if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) { |
if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) { |
my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum); |
my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum); |
my $sec_index = &Apache::loncoursedata::CL_SECTION(); |
my $sec_index = &Apache::loncoursedata::CL_SECTION(); |
my $status_index = &Apache::loncoursedata::CL_STATUS(); |
my $status_index = &Apache::loncoursedata::CL_STATUS(); |
while (my ($student,$data) = each %$classlist) { |
while (my ($student,$data) = each %$classlist) { |
my ($section,$status) = ($data->[$sec_index], |
my ($section,$status) = ($data->[$sec_index], |
$data->[$status_index]); |
$data->[$status_index]); |
unless ($section eq '' || $section =~ /^\s*$/) { |
unless ($section eq '-1' || $section =~ /^\s*$/) { |
if (!defined($$sectioncount{$section})) { |
if (!defined($$sectioncount{$section})) { $numsections++; } |
$$sectioncount{$section} = 1; |
$$sectioncount{$section}++; |
$numsections ++; |
} |
} else { |
} |
$$sectioncount{$section} ++; |
} |
} |
my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); |
} |
foreach my $user (sort(keys(%courseroles))) { |
} |
if ($user !~ /^(\w{2})/) { next; } |
} |
my ($role) = ($user =~ /^(\w{2})/); |
my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); |
if ($possible_roles && !(grep(/^$role$/,@$possible_roles))) { next; } |
foreach my $user (sort keys %courseroles) { |
my $section; |
if ($user =~ /^(\w{2})/) { |
if ($role eq 'cr' && |
my $role = $1; |
$user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) { |
if (!defined($possible_roles) || (grep/^$role$/,@$possible_roles)) { |
$section=$1; |
if ($role eq 'cr') { |
} |
if ($user =~ m-^$role/[^/]*/[^/]*/[^/]*:[^:]*:[^:]*:(\w+)-) { |
if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { $section=$1; } |
if (!defined($$sectioncount{$1})) { |
if (!defined($section) || $section eq '-1') { next; } |
$$sectioncount{$1} = 1; |
if (!defined($$sectioncount{$section})) { $numsections++; } |
$numsections ++; |
$$sectioncount{$section}++; |
} else { |
|
$$sectioncount{$1} ++; |
|
} |
|
} |
|
} |
|
if ($user =~ /^$role:[^:]*:[^:]*:(\w+)/) { |
|
if (!defined($$sectioncount{$1})) { |
|
$$sectioncount{$1} = 1; |
|
$numsections ++; |
|
} else { |
|
$$sectioncount{$1} ++; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
return $numsections; |
return $numsections; |
} |
} |
Line 3026 needs $ENV{'form.upfile'} and $ENV{'form
|
Line 3136 needs $ENV{'form.upfile'} and $ENV{'form
|
sub upfile_record_sep { |
sub upfile_record_sep { |
if ($ENV{'form.upfiletype'} eq 'xml') { |
if ($ENV{'form.upfiletype'} eq 'xml') { |
} else { |
} else { |
return split(/\n/,$ENV{'form.upfile'}); |
my @records; |
|
foreach my $line (split(/\n/,$ENV{'form.upfile'})) { |
|
if ($line=~/^\s*$/) { next; } |
|
push(@records,$line); |
|
} |
|
return @records; |
} |
} |
} |
} |
|
|
Line 3359 they are plotted. If undefined, default
|
Line 3474 they are plotted. If undefined, default
|
=item @Values: An array of array references. Each array reference holds data |
=item @Values: An array of array references. Each array reference holds data |
to be plotted in a stacked bar chart. |
to be plotted in a stacked bar chart. |
|
|
|
=item If the final element of @Values is a hash reference the key/value |
|
pairs will be added to the graph definition. |
|
|
=back |
=back |
|
|
Returns: |
Returns: |
Line 3832 sub icon {
|
Line 3950 sub icon {
|
$curfext.".gif"; |
$curfext.".gif"; |
} |
} |
} |
} |
return $iconname; |
return &lonhttpdurl($iconname); |
} |
} |
|
|
sub lonhttpdurl { |
sub lonhttpdurl { |
Line 3870 sub escape_double {
|
Line 3988 sub escape_double {
|
# Escapes the last element of a full URL. |
# Escapes the last element of a full URL. |
sub escape_url { |
sub escape_url { |
my ($url) = @_; |
my ($url) = @_; |
my @urlslices = split(/\//, $url); |
my @urlslices = split(/\//, $url,-1); |
my $lastitem = &Apache::lonnet::escape(pop(@urlslices)); |
my $lastitem = &Apache::lonnet::escape(pop(@urlslices)); |
return join('/',@urlslices).'/'.$lastitem; |
return join('/',@urlslices).'/'.$lastitem; |
} |
} |