version 1.374, 2006/05/17 23:25:56
|
version 1.403, 2006/06/27 00:07:33
|
Line 386 sub selectstudent_link {
|
Line 386 sub selectstudent_link {
|
|
|
sub coursebrowser_javascript { |
sub coursebrowser_javascript { |
my ($domainfilter)=@_; |
my ($domainfilter)=@_; |
|
my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role'); |
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,extra_element,multflag) { |
function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) { |
var url = '/adm/pickcourse?'; |
var url = '/adm/pickcourse?'; |
var filter; |
var filter; |
if (filter != null) { |
if (filter != null) { |
Line 415 sub coursebrowser_javascript {
|
Line 416 sub coursebrowser_javascript {
|
if (multflag !=null && multflag != '') { |
if (multflag !=null && multflag != '') { |
url += '&multiple='+multflag; |
url += '&multiple='+multflag; |
} |
} |
|
if (crstype == 'Course/Group') { |
|
if (formname == 'cu') { |
|
crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; |
|
if (crstype == "") { |
|
alert("$crs_or_grp_alert"); |
|
return; |
|
} |
|
} |
|
} |
|
if (crstype !=null && crstype != '') { |
|
url += '&type='+crstype; |
|
} |
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 426 ENDSTDBRW
|
Line 439 ENDSTDBRW
|
} |
} |
|
|
sub selectcourse_link { |
sub selectcourse_link { |
my ($form,$unameele,$udomele,$desc,$extra_element,$multflag)=@_; |
my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_; |
return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. |
return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. |
'","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'");'."'>".&mt('Select Course')."</a>"; |
'","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select [_1]',$selecttype)."</a>"; |
} |
} |
|
|
sub check_uncheck_jscript { |
sub check_uncheck_jscript { |
Line 694 sub helpLatexCheatsheet {
|
Line 707 sub helpLatexCheatsheet {
|
} |
} |
|
|
sub help_open_menu { |
sub help_open_menu { |
my ($color,$topic,$component_help,$function,$faq,$bug,$stayOnPage,$width,$height,$text) = @_; |
my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) = @_; |
$text = "" if (not defined $text); |
$text = "" if (not defined $text); |
$stayOnPage = 0 if (not defined $stayOnPage); |
$stayOnPage = 0 if (not defined $stayOnPage); |
if ($env{'browser.interface'} eq 'textual' || |
if ($env{'browser.interface'} eq 'textual' || |
Line 708 sub help_open_menu {
|
Line 721 sub help_open_menu {
|
my $origurl = $ENV{'REQUEST_URI'}; |
my $origurl = $ENV{'REQUEST_URI'}; |
$origurl=~s|^/~|/priv/|; |
$origurl=~s|^/~|/priv/|; |
my $timestamp = time; |
my $timestamp = time; |
foreach my $datum (\$color,\$function,\$topic,\$component_help,\$faq, |
foreach my $datum (\$topic,\$component_help,\$faq,\$bug,\$origurl) { |
\$bug,\$origurl) { |
|
$$datum = &escape($$datum); |
$$datum = &escape($$datum); |
} |
} |
if (!$stayOnPage) { |
if (!$stayOnPage) { |
Line 717 sub help_open_menu {
|
Line 729 sub help_open_menu {
|
} else { |
} else { |
$link = "javascript:helpMenu('display')"; |
$link = "javascript:helpMenu('display')"; |
} |
} |
my $banner_link = "/adm/helpmenu?page=banner&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp&stayonpage=$stayOnPage"; |
my $banner_link = "/adm/helpmenu?page=banner&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp&stayonpage=$stayOnPage"; |
my $details_link = "/adm/helpmenu?page=body&color=$color&function=$function&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp"; |
my $details_link = "/adm/helpmenu?page=body&topic=$topic&component_help=$component_help&faq=$faq&bug=$bug&origurl=$origurl&stamp=$timestamp"; |
my $template; |
my $template; |
if ($text ne "") { |
if ($text ne "") { |
$template .= |
$template .= |
Line 803 sub help_open_bug {
|
Line 815 sub help_open_bug {
|
$topic=~s/\W+/\+/g; |
$topic=~s/\W+/\+/g; |
my $link=''; |
my $link=''; |
my $template=''; |
my $template=''; |
my $url=$Apache::lonnet::perlvar{'BugzillaHost'}.'enter_bug.cgi?product=LON-CAPA&bug_file_loc='. |
my $url=$Apache::lonnet::perlvar{'BugzillaHost'}.'enter_bug.cgi?product=LON-CAPA&bug_file_loc='. |
&escape($ENV{'REQUEST_URI'}).'&component='.$topic; |
&escape($ENV{'REQUEST_URI'}).'&component='.$topic; |
if (!$stayOnPage) |
if (!$stayOnPage) |
{ |
{ |
$link = "javascript:void(open('$url', 'Bugzilla', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))"; |
$link = "javascript:void(open('$url', 'Bugzilla', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))"; |
Line 2712 Returns: value of designparamter $which
|
Line 2724 Returns: value of designparamter $which
|
|
|
=cut |
=cut |
|
|
|
|
############################################## |
############################################## |
sub designparm { |
sub designparm { |
my ($which,$domain)=@_; |
my ($which,$domain)=@_; |
Line 2726 sub designparm {
|
Line 2739 sub designparm {
|
return '#CCCCCC'; |
return '#CCCCCC'; |
} |
} |
} |
} |
if ($env{'environment.color.'.$which}) { |
if (exists($env{'environment.color.'.$which})) { |
return $env{'environment.color.'.$which}; |
return $env{'environment.color.'.$which}; |
} |
} |
$domain=&determinedomain($domain); |
$domain=&determinedomain($domain); |
if ($designhash{$domain.'.'.$which}) { |
if (exists($designhash{$domain.'.'.$which})) { |
return $designhash{$domain.'.'.$which}; |
return $designhash{$domain.'.'.$which}; |
} else { |
} else { |
return $designhash{'default.'.$which}; |
return $designhash{'default.'.$which}; |
Line 2813 sub bodytag {
|
Line 2826 sub bodytag {
|
@$addentries{keys(%design)} = @design{keys(%design)}; |
@$addentries{keys(%design)} = @design{keys(%design)}; |
|
|
# role and realm |
# role and realm |
my ($role,$realm) = |
my ($role,$realm) = split(/\./,$env{'request.role'},2); |
&Apache::lonnet::plaintext((split(/\./,$env{'request.role'}))[0]); |
if ($role eq 'ca') { |
|
my ($rdom,$rname) = ($realm =~ m-^/(\w+)/(\w+)$-); |
|
$realm = &plainname($rname,$rdom).':'.$rdom; |
|
} |
# realm |
# realm |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
|
if ($env{'request.role'} !~ /^cr/) { |
|
$role = &Apache::lonnet::plaintext($role,&course_type()); |
|
} |
$realm = $env{'course.'.$env{'request.course.id'}.'.description'}; |
$realm = $env{'course.'.$env{'request.course.id'}.'.description'}; |
|
} else { |
|
$role = &Apache::lonnet::plaintext($role); |
} |
} |
if (!$realm) { $realm=' '; } |
if (!$realm) { $realm=' '; } |
# Set messages |
# Set messages |
Line 2878 ENDROLE
|
Line 2899 ENDROLE
|
'.domain'}.'/'})) { |
'.domain'}.'/'})) { |
my $cid = $env{'request.course.id'}; |
my $cid = $env{'request.course.id'}; |
$dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'}; |
$dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'}; |
|
$dc_info =~ s/\s+$//; |
$dc_info = '('.$dc_info.')'; |
$dc_info = '('.$dc_info.')'; |
} |
} |
|
|
Line 2904 ENDROLE
|
Line 2926 ENDROLE
|
$lastitem = $thisdisfn; |
$lastitem = $thisdisfn; |
} |
} |
$titleinfo = |
$titleinfo = |
&Apache::loncommon::help_open_menu('','','','',3,'Authoring'). |
&Apache::loncommon::help_open_menu('','',3,'Authoring'). |
'<b>Construction Space</b>: '. |
'<b>Construction Space</b>: '. |
'<form name="dirs" method="post" action="'.$formaction |
'<form name="dirs" method="post" action="'.$formaction |
.'" target="_top"><tt><b>' |
.'" target="_top"><tt><b>' |
Line 3076 sub standard_css {
|
Line 3098 sub standard_css {
|
my $tabbg = &designparm($function.'.tabbg', $domain); |
my $tabbg = &designparm($function.'.tabbg', $domain); |
my $font = &designparm($function.'.font', $domain); |
my $font = &designparm($function.'.font', $domain); |
my $sidebg = &designparm($function.'.sidebg',$domain); |
my $sidebg = &designparm($function.'.sidebg',$domain); |
my $pgbg = $bgcolor || |
my $pgbg_or_bgcolor = |
|
$bgcolor || |
&designparm($function.'.pgbg', $domain); |
&designparm($function.'.pgbg', $domain); |
|
my $pgbg = &designparm($function.'.pgbg', $domain); |
my $alink = &designparm($function.'.alink', $domain); |
my $alink = &designparm($function.'.alink', $domain); |
my $vlink = &designparm($function.'.vlink', $domain); |
my $vlink = &designparm($function.'.vlink', $domain); |
my $link = &designparm($function.'.link', $domain); |
my $link = &designparm($function.'.link', $domain); |
|
|
my $sans = 'Arial,Helvetica,sans-serif'; |
my $sans = 'Arial,Helvetica,sans-serif'; |
|
my $mono = 'monospace'; |
my $data_table_head = $tabbg; |
my $data_table_head = $tabbg; |
my $data_table_light = '#EEEEEE'; |
my $data_table_light = '#EEEEEE'; |
my $data_table_dark = '#DDD'; |
my $data_table_dark = '#DDD'; |
Line 3095 sub standard_css {
|
Line 3120 sub standard_css {
|
my $mail_replied_hover = '#888855'; |
my $mail_replied_hover = '#888855'; |
my $mail_other = '#99BBBB'; |
my $mail_other = '#99BBBB'; |
my $mail_other_hover = '#669999'; |
my $mail_other_hover = '#669999'; |
|
my $table_header = '#DDDDDD'; |
|
|
|
my $border = ($env{'browser.type'} eq 'explorer') ? '0px 2px 0px 2px' |
|
: '0px 3px 0px 4px'; |
return <<END; |
return <<END; |
h1, h2, h3, th { font-family: $sans } |
h1, h2, h3, th { font-family: $sans } |
a:focus { color: red; background: yellow } |
a:focus { color: red; background: yellow } |
Line 3103 table.thinborder { border-collapse: coll
|
Line 3131 table.thinborder { border-collapse: coll
|
table.thinborder tr th, table.thinborder tr td { border-style: solid; border-width: 1px} |
table.thinborder tr th, table.thinborder tr td { border-style: solid; border-width: 1px} |
form, .inline { display: inline; } |
form, .inline { display: inline; } |
.center { text-align: center; } |
.center { text-align: center; } |
.filename {font-family: monospace;} |
.LC_filename {font-family: $mono;} |
.LC_error { |
.LC_error { |
color: red; |
color: red; |
font-size: larger; |
font-size: larger; |
} |
} |
|
.LC_warning { |
|
color: red; |
|
} |
.LC_success { |
.LC_success { |
color: green; |
color: green; |
} |
} |
|
|
table#LC_top_nav, table#LC_menubuttons, table#LC_nav_location, table#LC_breadcrumbs { |
table#LC_top_nav, table#LC_menubuttons { |
width: 100%; |
width: 100%; |
background: $pgbg; |
background: $pgbg; |
border: 0px; |
border: 2px; |
border-spacing: 2px 1px; |
|
padding: 0px; |
|
margin: 0px; |
|
border-collapse: separate; |
|
} |
|
table#LC_title_bar { |
|
width: 100%; |
|
border: 0; |
|
border-spacing: 0px 1px; |
|
padding: 0px 2px 0px 2px; |
|
background: $pgbg; |
|
font-family: $sans; |
|
border-collapse: separate; |
border-collapse: separate; |
|
padding: 0px; |
} |
} |
|
|
|
table#LC_title_bar, table#LC_breadcrumbs, table#LC_nav_location, |
table#LC_title_bar.LC_with_remote { |
table#LC_title_bar.LC_with_remote { |
width: 100%; |
width: 100%; |
border: 0; |
border-color: $pgbg; |
border-spacing: 0; |
border-style: solid; |
|
border-width: $border; |
|
|
background: $pgbg; |
background: $pgbg; |
font-family: $sans; |
font-family: $sans; |
border-collapse: collapse; |
border-collapse: collapse; |
|
padding: 0px; |
} |
} |
|
|
table#LC_title_bar td { |
table#LC_title_bar td { |
padding: 3px; |
padding: 3px; |
background: $tabbg; |
background: $tabbg; |
Line 3174 table#LC_menubuttons img, table#LC_menub
|
Line 3200 table#LC_menubuttons img, table#LC_menub
|
} |
} |
table#LC_top_nav td { |
table#LC_top_nav td { |
background: $tabbg; |
background: $tabbg; |
|
border: 0px; |
} |
} |
table#LC_top_nav td a, div#LC_top_nav a { |
table#LC_top_nav td a, div#LC_top_nav a { |
color: $font; |
color: $font; |
Line 3196 table#LC_breadcrumbs td.LC_breadcrumb_co
|
Line 3223 table#LC_breadcrumbs td.LC_breadcrumb_co
|
font-size: larger; |
font-size: larger; |
text-align: right; |
text-align: right; |
} |
} |
|
td.LC_table_cell_checkbox { |
|
text-align: center; |
|
} |
|
|
.LC_menubuttons_inline_text { |
.LC_menubuttons_inline_text { |
color: $font; |
color: $font; |
font-family: $sans; |
font-family: $sans; |
Line 3220 td.LC_menubuttons_img {
|
Line 3251 td.LC_menubuttons_img {
|
|
|
table.LC_data_table, table.LC_mail_list { |
table.LC_data_table, table.LC_mail_list { |
border: 1px solid #000000; |
border: 1px solid #000000; |
border-collapse: seperate; |
border-collapse: separate; |
} |
} |
table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th { |
table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th { |
font-weight: bold; |
font-weight: bold; |
Line 3278 table.LC_mail_list tr.LC_mail_other {
|
Line 3309 table.LC_mail_list tr.LC_mail_other {
|
table.LC_mail_list tr.LC_mail_other:hover { |
table.LC_mail_list tr.LC_mail_other:hover { |
background-color: $mail_other_hover; |
background-color: $mail_other_hover; |
} |
} |
|
|
|
table#LC_portfolio_actions { |
|
width: auto; |
|
background: $pgbg; |
|
border: 0px; |
|
border-spacing: 2px 2px; |
|
padding: 0px; |
|
margin: 0px; |
|
border-collapse: separate; |
|
} |
|
table#LC_portfolio_actions td.LC_label { |
|
background: $tabbg; |
|
text-align: right; |
|
} |
|
table#LC_portfolio_actions td.LC_value { |
|
background: $tabbg; |
|
} |
|
|
|
table#LC_cstr_controls { |
|
width: 100%; |
|
border-collapse: collapse; |
|
} |
|
table#LC_cstr_controls tr td { |
|
border: 4px solid $pgbg; |
|
padding: 4px; |
|
text-align: center; |
|
background: $tabbg; |
|
} |
|
table#LC_cstr_controls tr th { |
|
border: 4px solid $pgbg; |
|
background: $table_header; |
|
text-align: center; |
|
font-family: $sans; |
|
font-size: smaller; |
|
} |
|
|
|
table#LC_browser { |
|
|
|
} |
|
table#LC_browser tr th { |
|
background: $table_header; |
|
} |
|
table#LC_browser tr td { |
|
padding: 2px; |
|
} |
|
table#LC_browser tr.LC_browser_file, |
|
table#LC_browser tr.LC_browser_file_published { |
|
background: #CCFF88; |
|
} |
|
table#LC_browser tr.LC_browser_file_locked, |
|
table#LC_browser tr.LC_browser_file_unpublished { |
|
background: #FFAA99; |
|
} |
|
table#LC_browser tr.LC_browser_file_obsolete { |
|
background: #AAAAAA; |
|
} |
|
table#LC_browser tr.LC_browser_file_modified { |
|
background: #FFFF77; |
|
} |
|
table#LC_browser tr.LC_browser_folder { |
|
background: #CCCCFF; |
|
} |
|
span.LC_current_location { |
|
font-size: x-large; |
|
background: $pgbg; |
|
} |
|
|
|
span.LC_parm_menu_item { |
|
font-size: larger; |
|
font-family: $sans; |
|
} |
|
span.LC_parm_scope_all { |
|
color: red; |
|
} |
|
span.LC_parm_scope_folder { |
|
color: green; |
|
} |
|
span.LC_parm_scope_resource { |
|
color: orange; |
|
} |
|
span.LC_parm_part { |
|
color: blue; |
|
} |
|
span.LC_parm_folder, span.LC_parm_symb { |
|
font-size: x-small; |
|
font-family: $mono; |
|
color: #AAAAAA; |
|
} |
|
|
|
td.LC_parm_overview_level_menu, td.LC_parm_overview_map_menu, |
|
td.LC_parm_overview_parm_selectors, td.LC_parm_overview_parm_restrictions { |
|
border: 1px solid black; |
|
border-collapse: collapse; |
|
} |
|
table.LC_parm_overview_restrictions td { |
|
border-width: 1px 4px 1px 4px; |
|
border-style: solid; |
|
border-color: $pgbg; |
|
text-align: center; |
|
} |
|
table.LC_parm_overview_restrictions th { |
|
background: $tabbg; |
|
border-width: 1px 4px 1px 4px; |
|
border-style: solid; |
|
border-color: $pgbg; |
|
} |
|
table#LC_helpmenu { |
|
border: 0px; |
|
height: 55px; |
|
border-spacing: 0px; |
|
} |
|
|
|
table#LC_helpmenu fieldset legend { |
|
font-size: larger; |
|
font-weight: bold; |
|
} |
|
table#LC_helpmenu_links { |
|
width: 100%; |
|
border: 1px solid black; |
|
background: $pgbg; |
|
padding: 0px; |
|
border-spacing: 1px; |
|
} |
|
table#LC_helpmenu_links tr td { |
|
padding: 1px; |
|
background: $tabbg; |
|
text-align: center; |
|
font-weight: bold; |
|
} |
|
|
|
table#LC_helpmenu_links a:link, table#LC_helpmenu_links a:visited, |
|
table#LC_helpmenu_links a:active { |
|
text-decoration: none; |
|
color: $font; |
|
} |
|
table#LC_helpmenu_links a:hover { |
|
text-decoration: underline; |
|
color: $vlink; |
|
} |
|
|
END |
END |
} |
} |
|
|
Line 3314 sub headtag {
|
Line 3485 sub headtag {
|
my $function = $args->{'function'} || &get_users_function(); |
my $function = $args->{'function'} || &get_users_function(); |
my $domain = $args->{'domain'} || &determinedomain(); |
my $domain = $args->{'domain'} || &determinedomain(); |
my $bgcolor = $args->{'bgcolor'} || &designparm($function.'.pgbg',$domain); |
my $bgcolor = $args->{'bgcolor'} || &designparm($function.'.pgbg',$domain); |
my $url = join(':',$env{'user.name'},$env{'user.domain'}, |
my $url = join(':',$env{'user.name'},$env{'user.domain'},time(), |
$env{'environment.color.timestamp'}, |
#$env{'environment.color.timestamp'}, |
$function,$domain,$bgcolor); |
$function,$domain,$bgcolor); |
|
|
$url = '/adm/css/'.&escape($url).'.css'; |
$url = '/adm/css/'.&escape($url).'.css'; |
Line 3643 sub simple_error_page {
|
Line 3814 sub simple_error_page {
|
my $row_count; |
my $row_count; |
sub start_data_table { |
sub start_data_table { |
undef($row_count); |
undef($row_count); |
return '<table class="LC_data_table">'; |
return '<table class="LC_data_table">'."\n"; |
} |
} |
|
|
sub end_data_table { |
sub end_data_table { |
undef($row_count); |
undef($row_count); |
return '</table>'; |
return '</table>'."\n";; |
} |
} |
|
|
sub start_data_table_row { |
sub start_data_table_row { |
$row_count++; |
$row_count++; |
return '<tr '.(($row_count % 2)?'':'class="LC_even_row"').'>'; |
return '<tr '.(($row_count % 2)?'':'class="LC_even_row"').'>'."\n";; |
} |
} |
|
|
sub end_data_table_row { |
sub end_data_table_row { |
return '</tr>'; |
return '</tr>'."\n";; |
} |
} |
|
|
sub start_data_table_header_row { |
sub start_data_table_header_row { |
return '<tr class="LC_header_row">'; |
return '<tr class="LC_header_row">'."\n";; |
} |
} |
|
|
sub end_data_table_header_row { |
sub end_data_table_header_row { |
return '</tr>'; |
return '</tr>'."\n";; |
} |
} |
} |
} |
|
|
Line 3709 specific user. Roles can be active, prev
|
Line 3880 specific user. Roles can be active, prev
|
|
|
Inputs: |
Inputs: |
user's domain, user's username, course's domain, |
user's domain, user's username, course's domain, |
course's number, optional section/group. |
course's number, optional section ID. |
|
|
Outputs: |
Outputs: |
role status: active, previous or future. |
role status: active, previous or future. |
Line 3815 sub get_sections {
|
Line 3986 sub get_sections {
|
} |
} |
|
|
############################################### |
############################################### |
|
|
=pod |
|
|
|
=item coursegroups |
|
|
|
Retrieve information about groups in a course, |
|
|
|
Input: |
|
1. Optional course domain |
|
2. Optional course number |
|
3. Optional group name |
|
|
|
Course domain and number will be taken from user's |
|
environment if not supplied. Optional group name will' |
|
be passed to lonnet::get_coursegroups() as a regexp to |
|
use in the call to the dump function. |
|
|
|
Output |
|
Returns hash of groups in the course (subject to the |
|
optional group name filter). In the hash, the keys are |
|
group names, and their corresponding values |
|
are scalars containing group information in XML. This |
|
can be sent to &get_group_settings() to be parsed. |
|
|
|
Side effects: |
|
None. |
|
=cut |
|
|
|
############################################### |
|
|
|
sub coursegroups { |
|
my ($cdom,$cnum,$group) = @_; |
|
if (!defined($cdom) || !defined($cnum)) { |
|
my $cid = $env{'request.course.id'}; |
|
|
|
return if (!defined($cid)); |
|
|
|
$cdom = $env{'course.'.$cid.'.domain'}; |
|
$cnum = $env{'course.'.$cid.'.num'}; |
|
} |
|
my %curr_groups = &Apache::lonnet::get_coursegroups($cdom,$cnum,$group); |
|
my ($tmp) = keys(%curr_groups); |
|
if ($tmp=~/^(con_lost|no_such_host|error: [^2] )/) { |
|
undef(%curr_groups); |
|
&logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom); |
|
} elsif ($tmp=~/^error: 2 /) { |
|
undef(%curr_groups); |
|
} |
|
return %curr_groups; |
|
} |
|
|
|
############################################### |
|
|
|
=pod |
|
|
|
=item get_group_settings |
|
|
|
Uses TokeParser to extract group information from the |
|
XML used to describe course groups. |
|
|
|
Input: |
|
Scalar containing XML - as retrieved from &coursegroups(). |
|
|
|
Output: |
|
Hash containing group information as key=values for (a), and |
|
hash of hashes for (b) |
|
|
|
Keys (in two categories): |
|
(a) groupname, creator, creation, modified, startdate,enddate. |
|
Corresponding values are name of the group, creator of the group |
|
(username:domain), UNIX time for date group was created, and |
|
settings were last modified, and default start and end access |
|
times for group members. |
|
|
|
(b) functions returned in hash of hashes. |
|
Outer hash key is functions. |
|
Inner hash keys are chat,discussion,email,files,homepage,roster. |
|
Corresponding values are either on or off, depending on |
|
whether this type of functionality is available for the group. |
|
|
|
=cut |
|
|
|
############################################### |
|
|
|
sub get_group_settings { |
|
my ($groupinfo)=@_; |
|
my $parser=HTML::TokeParser->new(\$groupinfo); |
|
my $token; |
|
my $tool = ''; |
|
my $role = ''; |
|
my %content=(); |
|
while ($token=$parser->get_token) { |
|
if ($token->[0] eq 'S') { |
|
my $entry=$token->[1]; |
|
if ($entry eq 'functions' || $entry eq 'autosec') { |
|
%{$content{$entry}} = (); |
|
$tool = $entry; |
|
} elsif ($entry eq 'role') { |
|
if ($tool eq 'autosec') { |
|
$role = $token->[2]{id}; |
|
@{$content{$tool}{$role}} = (); |
|
} |
|
} else { |
|
my $value=$parser->get_text('/'.$entry); |
|
if ($entry eq 'name') { |
|
if ($tool eq 'functions') { |
|
my $function = $token->[2]{id}; |
|
$content{$tool}{$function} = $value; |
|
} |
|
} elsif ($entry eq 'groupname') { |
|
$content{$entry}=&unescape($value); |
|
} elsif (($entry eq 'roles') || ($entry eq 'types') || |
|
($entry eq 'sectionpick') || ($entry eq 'defpriv')) { |
|
push(@{$content{$entry}},$value); |
|
} elsif ($entry eq 'section') { |
|
if ($tool eq 'autosec' && $role ne '') { |
|
push(@{$content{$tool}{$role}},$value); |
|
} |
|
} else { |
|
$content{$entry}=$value; |
|
} |
|
} |
|
} elsif ($token->[0] eq 'E') { |
|
if ($token->[1] eq 'functions' || $token->[1] eq 'autosec') { |
|
$tool = ''; |
|
} elsif ($token->[1] eq 'role') { |
|
$role = ''; |
|
} |
|
|
|
} |
|
} |
|
return %content; |
|
} |
|
|
|
sub check_group_access { |
|
my ($group) = @_; |
|
my $access = 1; |
|
my $now = time; |
|
my ($start,$end) = split(/\./,$env{'user.role.gr/'.$env{'request.course,id'}.'/'.$group}); |
|
if (($end!=0) && ($end<$now)) { $access = 0; } |
|
if (($start!=0) && ($start>$now)) { $access=0; } |
|
return $access; |
|
} |
|
|
|
############################################### |
|
|
|
=pod |
=pod |
|
|
Line 4092 sub get_user_info {
|
Line 4118 sub get_user_info {
|
return; |
return; |
} |
} |
|
|
|
sub get_secgrprole_info { |
|
my ($cdom,$cnum,$needroles,$type) = @_; |
|
my %sections_count = &get_sections($cdom,$cnum); |
|
my @sections = (sort {$a <=> $b} keys(%sections_count)); |
|
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
|
my @groups = sort(keys(%curr_groups)); |
|
my $allroles = []; |
|
my $rolehash; |
|
my $accesshash = { |
|
active => 'Currently has access', |
|
future => 'Will have future access', |
|
previous => 'Previously had access', |
|
}; |
|
if ($needroles) { |
|
$rolehash = {'all' => 'all'}; |
|
my %user_roles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); |
|
if (&Apache::lonnet::error(%user_roles)) { |
|
undef(%user_roles); |
|
} |
|
foreach my $item (keys(%user_roles)) { |
|
my ($role)=split(/\:/,$item,2); |
|
if ($role eq 'cr') { next; } |
|
if ($role =~ /^cr/) { |
|
$$rolehash{$role} = (split('/',$role))[3]; |
|
} else { |
|
$$rolehash{$role} = &Apache::lonnet::plaintext($role,$type); |
|
} |
|
} |
|
foreach my $key (sort(keys(%{$rolehash}))) { |
|
push(@{$allroles},$key); |
|
} |
|
push (@{$allroles},'st'); |
|
$$rolehash{'st'} = &Apache::lonnet::plaintext('st',$type); |
|
} |
|
return (\@sections,\@groups,$allroles,$rolehash,$accesshash); |
|
} |
|
|
=pod |
=pod |
|
|
=item * get_unprocessed_cgi($query,$possible_names) |
=item * get_unprocessed_cgi($query,$possible_names) |
Line 5107 sub restore_course_settings {
|
Line 5170 sub restore_course_settings {
|
############################################################ |
############################################################ |
############################################################ |
############################################################ |
|
|
sub propath { |
sub course_type { |
my ($udom,$uname)=@_; |
my ($cid) = @_; |
$udom=~s/\W//g; |
if (!defined($cid)) { |
$uname=~s/\W//g; |
$cid = $env{'request.course.id'}; |
my $subdir=$uname.'__'; |
} |
$subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; |
if (defined($env{'course.'.$cid.'type'})) { |
my $proname="$Apache::lonnet::perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; |
return $env{'course.'.$cid.'type'}; |
return $proname; |
} else { |
} |
return 'Course'; |
|
} |
|
} |
|
|
sub icon { |
sub icon { |
my ($file)=@_; |
my ($file)=@_; |