--- loncom/interface/slotrequest.pm 2010/06/06 02:40:30 1.108 +++ loncom/interface/slotrequest.pm 2010/10/31 15:32:10 1.109 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for requesting to have slots added to a students record # -# $Id: slotrequest.pm,v 1.108 2010/06/06 02:40:30 raeburn Exp $ +# $Id: slotrequest.pm,v 1.109 2010/10/31 15:32:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -562,7 +562,11 @@ sub release_reservation { if ($mgr eq 'F') { $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom"); } else { - $msg = &mt('Released Reservation: [_1]',$description); + $msg = ''.&mt('Released reservation: [_1]',$description).'

'; + my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); + my $subject = &mt('Reservation change: [_1]',$description); + my $msgbody = &mt('Reservation released by [_1] for [_2].',$person,$description); + $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'release'); } return (1,$msg); } @@ -629,7 +633,6 @@ sub get_slot { my $description1=&get_description($slot_name,\%slot); %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); my $description2=&get_description($env{'form.slotname'},\%slot); - $r->print('

'.&mt('Already have a reservation: [_1].',$description1).'

'); if ($slot_name ne $env{'form.slotname'}) { $r->print(< @@ -638,19 +641,21 @@ sub get_slot { STUFF - $r->print('

' - .&mt('You can either [_1]Change[_2] your reservation from [_3] to [_4] or' - ,'' - ,''.$description1.'' - ,''.$description2.'') - .'

' - ); + $r->print('

'.&mt('Reservation currently unchanged').'

'. + '

'); + if ($slot_name ne '') { + $r->print(&mt('To complete the transaction you [_1]must[_2] confirm you want the change to [_3] to be processed.' + ,'','',''.$description2.'').'
' + .'

' + .&mt('or').'

'.&mt('you will continue with the reservation you already had: [_1]' + ,''.$description1.'').'

'); + } &return_link($r); $r->print(< STUFF } else { + $r->print('

'.&mt('Already have a reservation: [_1].',$description1).'

'); &return_link($r); } return 0; @@ -667,8 +672,15 @@ STUFF .&mt('An error occurred while attempting to make a reservation. ([_1])',$1) .'

'); } elsif ($reserved > -1) { - $r->print('

'.&mt('Success: [_1]',$description).'

'); + $r->print('

'.&mt('Successfully signed up: [_1]',$description).'

'); $retvalue = 1; + my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); + my $subject = &mt('Reservation change: [_1]',$description); + my $msgbody = &mt('Successful reservation by [_1] for [_2].',$person,$description); + my $msg = &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'reserve'); + if ($msg) { + $r->print($msg); + } } elsif ($reserved < 0) { $r->print('

'.&mt('Already reserved: [_1]',$description).'

'); } @@ -1081,6 +1093,7 @@ sub show_table { 'starttime' => 'Start time', 'endtime' => 'End Time', 'startreserve' => 'Time students can start reserving', + 'reservationmsg' => 'Message triggered by reservation', 'secret' => 'Secret Word', 'space' => '# of students/max', 'ip' => 'IP or DNS restrictions', @@ -1095,7 +1108,7 @@ sub show_table { $show_fields{'scheduled'} = &mt('Scheduled Members'); } my @show_order=('name','description','type','starttime','endtime', - 'startreserve','secret','space','ip','symb', + 'startreserve','reservationmsg','secret','space','ip','symb', 'allowedsections','allowedusers','uniqueperiod', 'scheduled','proctor'); my @show = @@ -1207,7 +1220,7 @@ sub show_table { my %name_cache; my $slotsort = sub { - if ($env{'form.order'}=~/^(type|description|endtime|startreserve|ip|symb|allowedsections|allowedusers)$/) { + if ($env{'form.order'}=~/^(type|description|endtime|startreserve|ip|symb|allowedsections|allowedusers|reservationmsg)$/) { if (lc($slots{$a}->{$env{'form.order'}}) ne lc($slots{$b}->{$env{'form.order'}})) { return (lc($slots{$a}->{$env{'form.order'}}) @@ -1244,12 +1257,15 @@ sub show_table { if ($tmp =~ /^error: /) { undef(%consumed); } } + my %msgops = &slot_reservationmsg_options(); + foreach my $slot (sort $slotsort (keys(%slots))) { if (!&to_show($slot,$slots{$slot},$when, $env{'form.deleted'},$name_filter)) { next; } + my $reservemsg; if (defined($slots{$slot}->{'type'}) - && $slots{$slot}->{'type'} ne 'schedulable_student') { - #next; + && $slots{$slot}->{'type'} eq 'schedulable_student') { + $reservemsg = $msgops{$slots{$slot}->{'reservationmsg'}}; } my $description=&get_description($slot,$slots{$slot}); my ($id_count,$ids); @@ -1393,6 +1409,9 @@ LOGLINK if (exists($show{'startreserve'})) { $colspan++;$r->print("$start_reserve\n"); } + if (exists($show{'reservationmsg'})) { + $colspan++;$r->print("$reservemsg\n"); + } if (exists($show{'secret'})) { $colspan++;$r->print("$slots{$slot}{'secret'}\n"); } @@ -2119,6 +2138,40 @@ sub display_filter { return $output; } +sub slot_change_messaging { + my ($setting,$subject,$msg,$action) = @_; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my ($message_status,$comment_status); + if ($setting eq 'only_student' + || $setting eq 'student_and_user_notes_screen') { + $message_status = + &Apache::lonmsg::user_normal_msg($user,$domain,$subject,$msg); + $message_status = '
  • '.&mt('Sent to you: [_1]', + $message_status).'
  • '; + } + if ($setting eq 'student_and_user_notes_screen') { + $comment_status = + &Apache::lonmsg::store_instructor_comment($subject.'
    '. + $msg,$user,$domain); + $comment_status = '
  • '.&mt('Entry added to course record (viewable by instructor): [_1]', + $comment_status).'
  • '; + } + if ($message_status || $comment_status) { + my $msgtitle; + if ($action eq 'reserve') { + $msgtitle = &mt('Status of messages about saved reservation'); + } elsif ($action eq 'release') { + $msgtitle = &mt('Status of messages about dropped reservation'); + } + return ''.$msgtitle.'' + .'
    '; + } +} + sub upload_start { my ($r)=@_; $r->print( @@ -2289,6 +2342,7 @@ sub csvupload_fields { ['starttime','Start Time of slot'], ['endtime','End Time of slot'], ['startreserve','Reservation Start Time'], + ['reservationmsg','Message when reservation changed'], ['ip','IP or DNS restriction'], ['proctor','List of proctor ids'], ['description','Slot Description'], @@ -2370,6 +2424,20 @@ sub csv_upload_assign { next; } + if ($slot{'type'} eq 'schedulable_student') { + if ($entries{$fields{'reservationmsg'}}) { + if (($entries{$fields{'reservationmsg'}} eq 'only_student') || + ($entries{$fields{'reservationmsg'}} eq 'student_and_user_notes_screen')) { + $slot{'reservationmsg'}=$entries{$fields{'reservationmsg'}}; + } else { + unless (($entries{$fields{'reservationmsg'}} eq 'none') || + ($entries{$fields{'reservationmsg'}} eq '')) { + push(@errors,"$name -- Slot's reservationmsg setting ignored - not one of: 'only_student', 'student_and_user_notes_screen', 'none' or ''"); + } + } + } + } + foreach my $key ('ip','proctor','description','maxspace', 'secret','symb') { if ($entries{$fields{$key}}) { @@ -2419,6 +2487,15 @@ sub slot_command_titles { return %titles; } +sub slot_reservationmsg_options { + my %options = &Apache::lonlocal::texthash ( + only_student => 'Sent to student', + student_and_user_notes_screen => 'Sent to student and added to user notes', + none => 'None sent and no record in user notes', + ); + return %options; +} + sub handler { my $r=shift;