version 1.574, 2007/08/30 20:24:15
|
version 1.582, 2007/09/11 20:36:30
|
Line 860 sub help_menu_js {
|
Line 860 sub help_menu_js {
|
'js_ready' => 1, |
'js_ready' => 1, |
'add_entries' => { |
'add_entries' => { |
'border' => '0', |
'border' => '0', |
'rows' => "105,*",},}); |
'rows' => "110,*",},}); |
my $end_page = |
my $end_page = |
&Apache::loncommon::end_page({'frameset' => 1, |
&Apache::loncommon::end_page({'frameset' => 1, |
'js_ready' => 1,}); |
'js_ready' => 1,}); |
Line 2563 sub preferred_languages {
|
Line 2563 sub preferred_languages {
|
return @genlanguages; |
return @genlanguages; |
} |
} |
|
|
|
sub languages { |
|
my ($possible_langs) = @_; |
|
my @preferred_langs = &preferred_languages(); |
|
if (!ref($possible_langs)) { |
|
if( wantarray ) { |
|
return @preferred_langs; |
|
} else { |
|
return $preferred_langs[0]; |
|
} |
|
} |
|
my %possibilities = map { $_ => 1 } (@$possible_langs); |
|
my @preferred_possibilities; |
|
foreach my $preferred_lang (@preferred_langs) { |
|
if (exists($possibilities{$preferred_lang})) { |
|
push(@preferred_possibilities, $preferred_lang); |
|
} |
|
} |
|
if( wantarray ) { |
|
return @preferred_possibilities; |
|
} |
|
return $preferred_possibilities[0]; |
|
} |
|
|
############################################################### |
############################################################### |
## Student Answer Attempts ## |
## Student Answer Attempts ## |
############################################################### |
############################################################### |
Line 2637 sub get_previous_attempt {
|
Line 2660 sub get_previous_attempt {
|
for ($version=1;$version<=$returnhash{'version'};$version++) { |
for ($version=1;$version<=$returnhash{'version'};$version++) { |
$prevattempts.='</tr><tr bgcolor="#ffffe6"><td>Transaction '.$version.'</td>'; |
$prevattempts.='</tr><tr bgcolor="#ffffe6"><td>Transaction '.$version.'</td>'; |
foreach my $key (sort(keys(%lasthash))) { |
foreach my $key (sort(keys(%lasthash))) { |
my $value; |
my $value = &format_previous_attempt_value($key, |
if ($key =~ /timestamp/) { |
$returnhash{$version.':'.$key}); |
$value=scalar(localtime($returnhash{$version.':'.$key})); |
$prevattempts.='<td>'.$value.' </td>'; |
} else { |
|
$value=$returnhash{$version.':'.$key}; |
|
} |
|
$prevattempts.='<td>'.&unescape($value).' </td>'; |
|
} |
} |
} |
} |
} |
} |
$prevattempts.='</tr><tr bgcolor="#ffffe6"><td>Current</td>'; |
$prevattempts.='</tr><tr bgcolor="#ffffe6"><td>Current</td>'; |
foreach my $key (sort(keys(%lasthash))) { |
foreach my $key (sort(keys(%lasthash))) { |
my $value; |
my $value = &format_previous_attempt_value($key,$lasthash{$key}); |
if ($key =~ /timestamp/) { |
|
$value=scalar(localtime($lasthash{$key})); |
|
} else { |
|
$value=$lasthash{$key}; |
|
} |
|
$value=&unescape($value); |
|
if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
$prevattempts.='<td>'.$value.' </td>'; |
$prevattempts.='<td>'.$value.' </td>'; |
} |
} |
Line 2668 sub get_previous_attempt {
|
Line 2681 sub get_previous_attempt {
|
} |
} |
} |
} |
|
|
|
sub format_previous_attempt_value { |
|
my ($key,$value) = @_; |
|
if ($key =~ /timestamp/) { |
|
$value = &Apache::lonlocal::locallocaltime($value); |
|
} elsif (ref($value) eq 'ARRAY') { |
|
$value = '('.join(', ', @{ $value }).')'; |
|
} else { |
|
$value = &unescape($value); |
|
} |
|
return $value; |
|
} |
|
|
|
|
sub relative_to_absolute { |
sub relative_to_absolute { |
my ($url,$output)=@_; |
my ($url,$output)=@_; |
my $parser=HTML::TokeParser->new(\$output); |
my $parser=HTML::TokeParser->new(\$output); |
Line 3505 sub bodytag {
|
Line 3531 sub bodytag {
|
if (!$realm) { $realm=' '; } |
if (!$realm) { $realm=' '; } |
# Set messages |
# Set messages |
my $messages=&domainlogo($domain); |
my $messages=&domainlogo($domain); |
# Port for miniserver |
|
my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; |
|
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
|
|
|
my $extra_body_attr = &make_attr_string($forcereg,\%design); |
my $extra_body_attr = &make_attr_string($forcereg,\%design); |
|
|
Line 3625 ENDROLE
|
Line 3648 ENDROLE
|
|
|
my $imgsrc = $img; |
my $imgsrc = $img; |
if ($img =~ /^\/adm/) { |
if ($img =~ /^\/adm/) { |
$imgsrc = 'http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort.$img; |
$imgsrc = &lonhttpdurl($img); |
} |
} |
my $upperleft='<img src="'.$imgsrc.'" alt="'.$function.'" />'; |
my $upperleft='<img src="'.$imgsrc.'" alt="'.$function.'" />'; |
|
|
Line 4333 table#LC_helpmenu_links a:hover {
|
Line 4356 table#LC_helpmenu_links a:hover {
|
border: 1px solid #8888FF; |
border: 1px solid #8888FF; |
background: #CCCCFF; |
background: #CCCCFF; |
} |
} |
|
|
table.LC_pick_box { |
table.LC_pick_box { |
width: 100%; |
|
border-collapse: separate; |
border-collapse: separate; |
background: white; |
background: white; |
border: 1px solid black; |
border: 1px solid black; |
Line 4348 table.LC_pick_box td.LC_pick_box_title {
|
Line 4369 table.LC_pick_box td.LC_pick_box_title {
|
width: 184px; |
width: 184px; |
padding: 8px; |
padding: 8px; |
} |
} |
|
table.LC_pick_box td.LC_pick_box_value { |
|
text-align: left; |
|
padding: 8px; |
|
} |
|
table.LC_pick_box td.LC_pick_box_select { |
|
text-align: left; |
|
padding: 8px; |
|
} |
table.LC_pick_box td.LC_pick_box_separator { |
table.LC_pick_box td.LC_pick_box_separator { |
padding: 0px; |
padding: 0px; |
height: 1px; |
height: 1px; |
Line 4356 table.LC_pick_box td.LC_pick_box_separat
|
Line 4385 table.LC_pick_box td.LC_pick_box_separat
|
table.LC_pick_box td.LC_pick_box_submit { |
table.LC_pick_box td.LC_pick_box_submit { |
text-align: right; |
text-align: right; |
} |
} |
|
table.LC_pick_box td.LC_evenrow_value { |
|
text-align: left; |
|
padding: 8px; |
|
background-color: $data_table_light; |
|
} |
|
table.LC_pick_box td.LC_oddrow_value { |
|
text-align: left; |
|
padding: 8px; |
|
background-color: $data_table_light; |
|
} |
|
table.LC_helpform_receipt { |
|
width: 620px; |
|
border-collapse: separate; |
|
background: white; |
|
border: 1px solid black; |
|
border-spacing: 1px; |
|
} |
|
table.LC_helpform_receipt td.LC_pick_box_title { |
|
background: $tabbg; |
|
font-weight: bold; |
|
text-align: right; |
|
width: 184px; |
|
padding: 8px; |
|
} |
|
table.LC_helpform_receipt td.LC_evenrow_value { |
|
text-align: left; |
|
padding: 8px; |
|
background-color: $data_table_light; |
|
} |
|
table.LC_helpform_receipt td.LC_oddrow_value { |
|
text-align: left; |
|
padding: 8px; |
|
background-color: $data_table_light; |
|
} |
|
table.LC_helpform_receipt td.LC_pick_box_separator { |
|
padding: 0px; |
|
height: 1px; |
|
background: black; |
|
} |
|
span.LC_helpform_receipt_cat { |
|
font-weight: bold; |
|
} |
table.LC_group_priv_box { |
table.LC_group_priv_box { |
background: white; |
background: white; |
border: 1px solid black; |
border: 1px solid black; |
Line 4501 span.LC_nobreak {
|
Line 4571 span.LC_nobreak {
|
white-space: nowrap; |
white-space: nowrap; |
} |
} |
|
|
|
span.LC_cusr_emph { |
|
font-style: italic; |
|
} |
|
|
table.LC_docs_documents { |
table.LC_docs_documents { |
background: #BBBBBB; |
background: #BBBBBB; |
border-width: 0px; |
border-width: 0px; |
Line 5603 sub user_picker {
|
Line 5677 sub user_picker {
|
my $currdom = $dom; |
my $currdom = $dom; |
my %curr_selected = ( |
my %curr_selected = ( |
srchin => 'dom', |
srchin => 'dom', |
srchby => 'uname', |
srchby => 'lastname', |
); |
); |
my $srchterm; |
my $srchterm; |
if (ref($srch) eq 'HASH') { |
if (ref($srch) eq 'HASH') { |
Line 5628 sub user_picker {
|
Line 5702 sub user_picker {
|
'lastname' => 'last name', |
'lastname' => 'last name', |
'lastfirst' => 'last name, first name', |
'lastfirst' => 'last name, first name', |
'crs' => 'in this course', |
'crs' => 'in this course', |
'dom' => 'in selected domain', |
'dom' => 'in selected LON-CAPA domain', |
'alc' => 'all LON-CAPA', |
'alc' => 'all LON-CAPA', |
'instd' => 'in institutional directory for selected domain', |
'instd' => 'in institutional directory for selected domain', |
'exact' => 'is', |
'exact' => 'is', |
Line 5665 sub user_picker {
|
Line 5739 sub user_picker {
|
$srchinsel .= "\n </select>\n"; |
$srchinsel .= "\n </select>\n"; |
|
|
my $srchbysel = ' <select name="srchby">'; |
my $srchbysel = ' <select name="srchby">'; |
foreach my $option ('uname','lastname','lastfirst') { |
foreach my $option ('lastname','lastfirst','uname') { |
if ($curr_selected{'srchby'} eq $option) { |
if ($curr_selected{'srchby'} eq $option) { |
$srchbysel .= ' |
$srchbysel .= ' |
<option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>'; |
<option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>'; |
Line 5677 sub user_picker {
|
Line 5751 sub user_picker {
|
$srchbysel .= "\n </select>\n"; |
$srchbysel .= "\n </select>\n"; |
|
|
my $srchtypesel = ' <select name="srchtype">'; |
my $srchtypesel = ' <select name="srchtype">'; |
foreach my $option ('exact','begins','contains') { |
foreach my $option ('begins','contains','exact') { |
if ($curr_selected{'srchtype'} eq $option) { |
if ($curr_selected{'srchtype'} eq $option) { |
$srchtypesel .= ' |
$srchtypesel .= ' |
<option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>'; |
<option value="'.$option.'" selected="selected">'.$lt{$option}.'</option>'; |
Line 5691 sub user_picker {
|
Line 5765 sub user_picker {
|
my ($newuserscript,$new_user_create); |
my ($newuserscript,$new_user_create); |
|
|
if ($forcenewuser) { |
if ($forcenewuser) { |
$new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>'; |
if (ref($srch) eq 'HASH') { |
|
if ($srch->{'srchby'} eq 'uname' && $srch->{'srchtype'} eq 'exact' && $srch->{'srchin'} eq 'dom' && $srch->{'srchdomain'} eq $env{'request.role.domain'}) { |
|
$new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>'; |
|
} |
|
} |
|
|
$newuserscript = <<"ENDSCRIPT"; |
$newuserscript = <<"ENDSCRIPT"; |
|
|
function setSearch(createnew,callingForm) { |
function setSearch(createnew,callingForm) { |
Line 5817 END_BLOCK
|
Line 5896 END_BLOCK
|
return $output; |
return $output; |
} |
} |
|
|
|
|
|
|
=pod |
=pod |
|
|
=back |
=back |
Line 6979 sub commit_studentrole {
|
Line 7056 sub commit_studentrole {
|
############################################################ |
############################################################ |
|
|
sub check_clone { |
sub check_clone { |
my ($args) = @_; |
my ($args,$linefeed) = @_; |
my $cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'}; |
my $cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'}; |
my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid); |
my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid); |
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); |
my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); |
Line 6987 sub check_clone {
|
Line 7064 sub check_clone {
|
my $can_clone = 0; |
my $can_clone = 0; |
|
|
if ($clonehome eq 'no_host') { |
if ($clonehome eq 'no_host') { |
$clonemsg = &mt('Attempting to clone non-existing [_1]', |
$clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); |
$args->{'crstype'}); |
|
} else { |
} else { |
my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1}); |
my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1}); |
if ($env{'request.role.domain'} eq $args->{'clonedomain'}) { |
if ($env{'request.role.domain'} eq $args->{'clonedomain'}) { |
Line 6997 sub check_clone {
|
Line 7073 sub check_clone {
|
my %clonehash = &Apache::lonnet::get('environment',['cloners'], |
my %clonehash = &Apache::lonnet::get('environment',['cloners'], |
$args->{'clonedomain'},$args->{'clonecourse'}); |
$args->{'clonedomain'},$args->{'clonecourse'}); |
my @cloners = split(/,/,$clonehash{'cloners'}); |
my @cloners = split(/,/,$clonehash{'cloners'}); |
my %roleshash = |
if (grep(/^\*$/,@cloners)) { |
&Apache::lonnet::get_my_roles($args->{'ccuname'}, |
$can_clone = 1; |
$args->{'ccdomain'},'userroles',['active'],['cc'], |
} elsif (grep(/^\*\:\Q$args->{'ccdomain'}\E$/,@cloners)) { |
[$args->{'clonedomain'}]); |
$can_clone = 1; |
if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { |
} else { |
$can_clone = 1; |
my %roleshash = |
} else { |
&Apache::lonnet::get_my_roles($args->{'ccuname'}, |
$clonemsg = &mt('The new course was not cloned from an existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); |
$args->{'ccdomain'}, |
|
'userroles',['active'],['cc'], |
|
[$args->{'clonedomain'}]); |
|
if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { |
|
$can_clone = 1; |
|
} else { |
|
$clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); |
|
} |
} |
} |
} |
} |
} |
} |
|
|
return ($can_clone, $clonemsg, $cloneid, $clonehome); |
return ($can_clone, $clonemsg, $cloneid, $clonehome); |
} |
} |
|
|
Line 7025 sub construct_course {
|
Line 7107 sub construct_course {
|
# |
# |
my ($can_clone, $clonemsg, $cloneid, $clonehome); |
my ($can_clone, $clonemsg, $cloneid, $clonehome); |
if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) { |
if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) { |
($can_clone, $clonemsg, $cloneid, $clonehome) = &check_clone($args); |
($can_clone, $clonemsg, $cloneid, $clonehome) = &check_clone($args,$linefeed); |
if ($context ne 'auto') { |
if ($context ne 'auto') { |
$clonemsg = '<span class="LC_error">'.$clonemsg.'</span>'; |
if ($clonemsg ne '') { |
|
$clonemsg = '<span class="LC_error">'.$clonemsg.'</span>'; |
|
} |
} |
} |
$outcome .= $clonemsg.$linefeed; |
$outcome .= $clonemsg.$linefeed; |
|
|
Line 7371 sub icon {
|
Line 7455 sub icon {
|
return &lonhttpdurl($iconname); |
return &lonhttpdurl($iconname); |
} |
} |
|
|
sub lonhttpdurl { |
sub lonhttpd_port { |
my ($url)=@_; |
|
my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'}; |
my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'}; |
if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; } |
if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; } |
|
|
# IE doesn't like a secure page getting images from a non-secure |
# IE doesn't like a secure page getting images from a non-secure |
# port (when logging we haven't parsed the browser type so default |
# port (when logging we haven't parsed the browser type so default |
# back to secure |
# back to secure |
if ((!exists($env{'browser.type'}) || $env{'browser.type'} eq 'explorer') |
if ((!exists($env{'browser.type'}) || $env{'browser.type'} eq 'explorer') |
&& $ENV{'SERVER_PORT'} == 443) { |
&& $ENV{'SERVER_PORT'} == 443) { |
|
return 443; |
|
} |
|
return $lonhttpd_port; |
|
|
|
} |
|
|
|
sub lonhttpdurl { |
|
my ($url)=@_; |
|
|
|
my $lonhttpd_port = &lonhttpd_port(); |
|
if ($lonhttpd_port == 443) { |
return 'https://'.$ENV{'SERVER_NAME'}.$url; |
return 'https://'.$ENV{'SERVER_NAME'}.$url; |
} |
} |
return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url; |
return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url; |