print('
');
+ my %coursehash = &Apache::loncommon::findallcourses();
+ foreach my $cid (sort(keys(%coursehash))) {
+ $courses{$cid}{'description'} = $env{'course.'.$cid.'.description'};
}
- opener.document.$env{"form.form"}.$sec_element.multiple=true
- if (numSections < 3) {
- opener.document.$env{"form.form"}.$sec_element.size=numSections;
- } else {
- opener.document.$env{"form.form"}.$sec_element.size=3;
+ }
+ if ($nohost) {
+ $r->print (''.
+ &mt('User does not exist - username: [_1], domain: [_2].',
+ ''.$filter->{'personfilter'}.'',
+ ''.$filter->{'persondomfilter'}.'').'');
+ } else {
+ &display_matched_courses($r,$type,$multiple,$action,$showroles,$cloneruname,
+ $clonerudom,$crsdom,$crscode,%courses);
+ }
+ }
+ $r->print(&Apache::loncommon::end_page());
+ return OK;
+}
+
+sub processpick {
+ my $openerform = 'rolechoice';
+ if ($env{'form.form'} eq 'studentform') {
+ $openerform = $env{'form.form'};
+ }
+ my $process_pick = <<"ENDONE";
+
+";
+ return $process_pick;
+}
-$jscript
+sub create_user_javascript {
+ my ($type) = @_;
+ my $output;
+ #javascript for reporting sections and groups then closing
+ if ($env{'form.pickedcourse'}) {
+ my %coursedescription =
+ &Apache::lonnet::coursedescription($env{'form.pickedcourse'},
+ {'one_time' => '1'});
+ my $cdom = $coursedescription{'domain'};
+ my $cnum = $coursedescription{'num'};
+ my $crstype = $coursedescription{'type'};
+ my %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
+ my ($showcredits,$credits);
+ if (($crstype ne 'Community') &&
+ (($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'} || $domdefs{'textbookcredits'}))) {
+ $showcredits = 1;
+ $credits = $coursedescription{'internal.defaultcredits'};
+ }
+ my $sec_element = 'currsec';
+ my $grplist_element = 'groups';
+ my ($sections,$groups) =
+ &Apache::loncommon::get_secgrprole_info($cdom,$cnum,'',$type);
+ my $num_sections = scalar(@{$sections});
+ my $seclist = join(',',@{$sections});
+ my $num_groups = scalar(@{$groups});
+ my $groupslist = join(',',@{$groups});
+ $output = qq|
+
-$submitopener
-
-
-ENDSCRIPT
-# ---------------------------------------------------------------- Get the data
- if ($env{'form.gosearch'}) {
- $r->print(&mt('Searching').' ...
');
- $r->rflush();
- unless ($descriptfilter) { $descriptfilter='.'; }
- unless ($instcodefilter) { $instcodefilter='.'; }
- my $combownerfilter;
- if (($ownerfilter ne '') || ($ownerdomfilter ne '')) {
- $combownerfilter = $ownerfilter.':'.$ownerdomfilter;
- }
- if ($combownerfilter eq '') { $combownerfilter='.'; }
- if ($coursefilter eq '') { $coursefilter='.'; }
- if ($type eq '') { $type = '.'; }
- my $timefilter=($sincefilter==-1?1:time-$sincefilter);
- my %courses = &Apache::lonnet::courseiddump($domainfilter,$descriptfilter,
- $timefilter,$instcodefilter,$combownerfilter,
- $coursefilter,undef,undef,$type);
- $r->print('\n");
}
- $r->print(&Apache::loncommon::end_page());
- return OK;
+ my %by_descrip;
+ foreach my $course (keys(%courses)) {
+ my $descr;
+ if (ref($courses{$course}) eq 'HASH') {
+ $descr = $courses{$course}{'description'};
+ } elsif ($courses{$course} =~ m/^([^:]*):/i) {
+ $descr = &unescape($1);
+ } else {
+ $descr = &unescape($courses{$course});
+ }
+ my $description = $descr;
+ push (@{$by_descrip{$description}}, $course);
+ }
+
+ if ($numcourses > 1 && $multiple) {
+ $r->print('
+
+
');
+ }
+
+ if (%courses) {
+ $r->print(&Apache::loncommon::start_data_table());
+ $r->print(&Apache::loncommon::start_data_table_header_row());
+ my $titlehdr = &mt('Course Title');
+ if ($type eq 'Community') {
+ $titlehdr = &mt('Community Title');
+ }
+ $r->print(''.&mt('Select').' | '
+ .''.$titlehdr.' | '
+ .''.&mt('Domain').' | ');
+ unless (($type eq 'Community') || ($type eq 'Placement')) {
+ $r->print(''.&mt('Course Code').' | ');
+ }
+ $r->print(''.&mt('Owner/Co-owner(s)').' | ');
+ if ($showroles) {
+ $r->print(''.&mt("Role(s) for [_1]",
+ &Apache::loncommon::plainname($env{'form.personfilter'},
+ $env{'form.persondomfilter'},'firstname')).' | ');
+ }
+ $r->print(&Apache::loncommon::end_data_table_header_row());
+ }
+ my %cc_cloneable;
+ if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
+ my ($coord_cloneable,$warning) =
+ &get_coordinator_cloneable($cloneruname,$clonerudom,$type);
+ if ($coord_cloneable) {
+ map {$cc_cloneable{$_} = 1;} split('&',$coord_cloneable);
+ }
+ }
+ my (%gotdomdefaults,%gotcodedefaults);
+ foreach my $description (sort { lc($a) cmp lc($b) } (keys(%by_descrip))) {
+ foreach my $course (@{$by_descrip{$description}}) {
+ $r->print(&Apache::loncommon::start_data_table_row());
+ my $cleandesc=&HTML::Entities::encode($description,'<>&"');
+ $cleandesc=~s/'/\\'/g;
+ my ($cdom,$cnum)=split(/\_/,$course);
+ my ($descr,$instcode,$ttype,$canclone,@owners);
+ if (ref($courses{$course}) eq 'HASH') {
+ $descr = $courses{$course}{'description'};
+ $instcode = $courses{$course}{'inst_code'};
+ $ttype = $courses{$course}{'type'};
+ if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) {
+ if ($env{'form.form'} eq 'ccrs') {
+ if (($env{'request.role.domain'} eq $cdom) &&
+ (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
+ $canclone = 1;
+ }
+ }
+ unless ($canclone) {
+ if ($cc_cloneable{$cnum.':'.$cdom}) {
+ $canclone = 1;
+ }
+ }
+ unless ($canclone) {
+ my $cloners = $courses{$course}{'cloners'};
+ if ($cloners ne '') {
+ my @cloneable = split(',',$cloners);
+ if (grep(/^\*$/,@cloneable)) {
+ $canclone = 1;
+ }
+ if (grep(/^\*:\Q$clonerudom\E$/,@cloneable)) {
+ $canclone = 1;
+ }
+ if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) {
+ $canclone = 1;
+ }
+ unless ($canclone) {
+ if (($instcode) && ($crscode) && ($cdom eq $crsdom)) {
+ foreach my $cloner (@cloneable) {
+ if (($cloner ne '*') && ($cloner !~ /^\*\:$match_domain$/) &&
+ ($cloner !~ /^$match_username\:$match_domain$/) && ($cloner ne '')) {
+ if ($cloner =~ /\=/) {
+ my (%codedefaults,@code_order);
+ if (ref($gotcodedefaults{$cdom}) eq 'HASH') {
+ if (ref($gotcodedefaults{$cdom}{'defaults'}) eq 'HASH') {
+ %codedefaults = %{$gotcodedefaults{$cdom}{'defaults'}};
+ }
+ if (ref($gotcodedefaults{$cdom}{'order'}) eq 'ARRAY') {
+ @code_order = @{$gotcodedefaults{$cdom}{'order'}};
+ }
+ } else {
+ &Apache::lonnet::auto_instcode_defaults($cdom,
+ \%codedefaults,
+ \@code_order);
+ $gotcodedefaults{$cdom}{'defaults'} = \%codedefaults;
+ $gotcodedefaults{$cdom}{'order'} = \@code_order;
+ }
+ if (@code_order > 0) {
+ if (&Apache::lonnet::check_instcode_cloning(\%codedefaults,\@code_order,
+ $cloner,$instcode,$crscode)) {
+ $canclone = 1;
+ last;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } else {
+ my %domdefs;
+ if (ref($gotdomdefaults{$cdom}) eq 'HASH') {
+ %domdefs = %{$gotdomdefaults{$cdom}};
+ } else {
+ %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
+ $gotdomdefaults{$cdom} = \%domdefs;
+ }
+ if ($domdefs{'canclone'}) {
+ unless ($domdefs{'canclone'} eq 'none') {
+ if ($domdefs{'canclone'} eq 'domain') {
+ if ($clonerudom eq $cdom) {
+ $canclone = 1;
+ }
+ } elsif (($instcode) && ($crscode) &&
+ ($cdom eq $crsdom)) {
+ my (%codedefaults,@code_order);
+ if (ref($gotcodedefaults{$cdom}) eq 'HASH') {
+ if (ref($gotcodedefaults{$cdom}{'defaults'}) eq 'HASH') {
+ %codedefaults = %{$gotcodedefaults{$cdom}{'defaults'}};
+ }
+ if (ref($gotcodedefaults{$cdom}{'order'}) eq 'ARRAY') {
+ @code_order = @{$gotcodedefaults{$cdom}{'order'}};
+ }
+ } else {
+ &Apache::lonnet::auto_instcode_defaults($cdom,
+ \%codedefaults,
+ \@code_order);
+ $gotcodedefaults{$cdom}{'defaults'} = \%codedefaults;
+ $gotcodedefaults{$cdom}{'order'} = \@code_order;
+ }
+ if (@code_order > 0) {
+ if (&Apache::lonnet::default_instcode_cloning($cdom,$domdefs{'canclone'},
+ $instcode,$crscode,\%codedefaults,
+ \@code_order)) {
+ $canclone = 1;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ push(@owners,$courses{$course}{'owner'});
+ if ($courses{$course}{'co-owners'} ne '') {
+ foreach my $item (split(/,/,$courses{$course}{'co-owners'})) {
+ push(@owners,$item);
+ }
+ }
+ } else {
+ my $singleowner;
+ ($descr,$instcode,$singleowner,$ttype)=split(/:/,$courses{$course});
+ push(@owners,&unescape($singleowner));
+ }
+ my $ownerstr = join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } @owners);
+ $r->print(''.&course_chooser($multiple,$cdom,$cnum,$cleandesc,$canclone).' | ');
+ $r->print(''.$description.' | ');
+ $r->print('');
+ $r->print(&Apache::lonnet::domain($cdom,'description')?
+ $cdom.' ('.&Apache::lonnet::domain($cdom,'description').')':$cdom);
+ $r->print(' | ');
+ unless (($type eq 'Community') || ($type eq 'Placement')) {
+ $r->print('');
+ if ($instcode ne '') {
+ $r->print(&unescape($instcode));
+ } else {
+ $r->print(' ');
+ }
+ $r->print(' | ');
+ }
+ $r->print(''.$ownerstr.' | ');
+ if ($showroles) {
+ $r->print('');
+ my $rolestr;
+ if (ref($courses{$course}{'roles'}) eq 'ARRAY') {
+ my @roles = sort(@{$courses{$course}{'roles'}});
+ foreach my $role (@roles) {
+ if ($role =~ /^cr/) {
+ my (undef,$crdom,$crname,$crtitle) = split('/',$role);
+ $rolestr .= $crtitle.', ';
+ } else {
+ $rolestr .= &Apache::lonnet::plaintext($role,$type).', ';
+ }
+ }
+ $rolestr =~ s/\, $//;
+ }
+ $r->print($rolestr.' | ');
+ }
+ if ($multiple) { $r->print("\n"); }
+ $r->print(&Apache::loncommon::end_data_table_row());
+ # $r->print("
\n");
+ }
+ }
+ if (%courses) {
+ $r->print(&Apache::loncommon::end_data_table());
+ }
+
+ if (!%courses) {
+ $r->print(''.&mt('None found').'
');
+ } elsif ($multiple) {
+ $r->print('');
+ }
+ $r->print(''.
+ "\n".''."\n".
+ ''."\n");
+ if ((exists($env{'form.roleelement'})) && ($env{'form.form'} eq 'rolechoice')) {
+ $r->print(''."\n");
+ }
+ if ($env{'form.form'} eq 'portform') {
+ $r->print('');
+ $r->print('');
+ $r->print('');
+ $r->print('');
+ } elsif ($env{'form.form'} eq 'modifycourse') {
+ $r->print(&Apache::lonhtmlcommon::echo_form_input(['phase','pickedcourse','type','form','numtitles','state']));
+ } else {
+ $r->print(''."\n".
+ ''."\n");
+ if ($env{'form.typeelement'} ne '') {
+ $r->print(''."\n");
+
+ }
+ }
+ if ((exists($env{'form.fixeddom'})) && ($env{'form.form'} eq 'rules')) {
+ $r->print('');
+ }
+ if ($env{'form.numtitles'}) {
+ $r->print('');
+ }
+ $r->print("\n");
+ return;
+}
+
+sub multiples_tag {
+ my $jscript = &Apache::loncommon::check_uncheck_jscript();
+ my $multelement = '';
+ return ($jscript,$multelement);
+}
+
+sub get_coordinator_cloneable {
+ my ($cloneruname,$clonerudom,$type) = @_;
+ if (($cloneruname!~/\w/) || ($clonerudom!~/\w/)) {
+ my $warning = ''.&mt('Intended course owner not specified').
+ '
';
+ return ('',$warning);
+ } elsif (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') {
+ my $warning = ''.&mt('Intended course owner does not exist').
+ '
';
+ return ('',$warning);
+ } else {
+ my ($cc_clone,$ccrole);
+ if ($type eq 'Community') {
+ $ccrole = 'co';
+ } else {
+ $ccrole = 'cc';
+ }
+ my %ccroles = &Apache::lonnet::get_my_roles($cloneruname,$clonerudom,
+ 'userroles',['active'], [$ccrole]);
+ foreach my $key (sort(keys(%ccroles))) {
+ my ($cnum,$cdom,$role) = split(':',$key);
+ $cc_clone .= $cdom.':'.$cnum.'&';
+ }
+ $cc_clone =~ s/\&$//;
+ return ($cc_clone);
+ }
}
sub course_chooser {
- my ($multiple,$cdom,$cnum,$cleandesc) = @_;
+ my ($multiple,$cdom,$cnum,$cleandesc,$canclone) = @_;
my $output;
if ($multiple) {
$output = '