Diff for /loncom/interface/slotrequest.pm between versions 1.108 and 1.114

version 1.108, 2010/06/06 02:40:30 version 1.114, 2012/08/01 20:26:43
Line 137  sub check_for_reservation { Line 137  sub check_for_reservation {
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }          }    
     my @got;      my @got;
     my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots);      my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime');
     foreach my $slot_name (@sorted_slots) {      foreach my $slot_name (@sorted_slots) {
  next if (!defined($slots{$slot_name}) ||   next if (!defined($slots{$slot_name}) ||
  !ref($slots{$slot_name}));   !ref($slots{$slot_name}));
  &Apache::lonxml::debug(time." $slot_name ".   &Apache::lonxml::debug(time." $slot_name ".
        $slots{$slot_name}->{'starttime'}." -- ".         $slots{$slot_name}->{'starttime'}." -- ".
        $slots{$slot_name}->{'startreserve'});         $slots{$slot_name}->{'startreserve'}." -- ".
  if ($slots{$slot_name}->{'endtime'} > time &&                                 $slots{$slot_name}->{'endreserve'});
     $slots{$slot_name}->{'startreserve'} < time) {   if (($slots{$slot_name}->{'endtime'} > time) &&
     # between start of reservation times and end of slot      ($slots{$slot_name}->{'startreserve'} < time) &&
               ((!$slots{$slot_name}->{'endreserve'}) || 
                ($slots{$slot_name}->{'endreserve'} > time))) {
       # between start of reservation time and end of reservation time
               # and before end of slot
     if ($mode eq 'allslots') {      if ($mode eq 'allslots') {
  push(@got,$slot_name);   push(@got,$slot_name);
     } else {      } else {
Line 562  sub release_reservation { Line 566  sub release_reservation {
     if ($mgr eq 'F') {      if ($mgr eq 'F') {
  $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom");   $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom");
     } else {      } else {
  $msg = &mt('Released Reservation: [_1]',$description);   $msg = '<span style="font-weight: bold;">'.&mt('Released reservation: [_1]',$description).'</span><br /><br />';
           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);      return (1,$msg);
 }  }
Line 629  sub get_slot { Line 637  sub get_slot {
  my $description1=&get_description($slot_name,\%slot);   my $description1=&get_description($slot_name,\%slot);
  %slot=&Apache::lonnet::get_slot($env{'form.slotname'});   %slot=&Apache::lonnet::get_slot($env{'form.slotname'});
  my $description2=&get_description($env{'form.slotname'},\%slot);   my $description2=&get_description($env{'form.slotname'},\%slot);
  $r->print('<p>'.&mt('Already have a reservation: [_1].',$description1).'</p>');  
  if ($slot_name ne $env{'form.slotname'}) {   if ($slot_name ne $env{'form.slotname'}) {
     $r->print(<<STUFF);      $r->print(<<STUFF);
 <form method="post" action="/adm/slotrequest">  <form method="post" action="/adm/slotrequest">
Line 638  sub get_slot { Line 645  sub get_slot {
    <input type="hidden" name="releaseslot" value="$slot_name" />     <input type="hidden" name="releaseslot" value="$slot_name" />
    <input type="hidden" name="command" value="change" />     <input type="hidden" name="command" value="change" />
 STUFF  STUFF
             $r->print('<p>'              $r->print('<p class="LC_error">'.&mt('Reservation currently unchanged').'</p>');
                      .&mt('You can either [_1]Change[_2] your reservation from [_3] to [_4] or'              if ($slot_name ne '') {
                          ,'<input type="submit" name="change" value="'                  $r->print('<p>'.&mt('To complete the transaction you [_1]must confirm[_2] you want to [_3]process the change[_4] to [_5].'
                          ,'" />'                           ,'<b>','</b>','<i>','</i>','<b>'.$description2.'</b>')
                          ,'<b>'.$description1.'</b>'                           .'<br />'
                          ,'<b>'.$description2.'</b>')                           .&mt('Or you can choose to [_1]make no change[_2] and continue[_2] with the reservation you already had: [_3].'
                      .'<br /></p>'                           ,'<i>','</i>','<b>'.$description1.'</b>')
             );                           .'</p><p><span class="LC_nobreak">'
     &return_link($r);                           .'<input type="submit" name="change" value="'.&mt('Process the change').'" />' 
                            .('&nbsp;'x3)
                            .'<input type="submit" name="nochange" value="'.&mt('Make no change').'" />'
                            .'</span></p>');
               }
     $r->print(<<STUFF);      $r->print(<<STUFF);
 </form>  </form>
 STUFF  STUFF
         } else {          } else {
               $r->print('<p>'.&mt('Already have a reservation: [_1].',$description1).'</p>');
     &return_link($r);      &return_link($r);
  }   }
  return 0;   return 0;
Line 667  STUFF Line 679  STUFF
                      .&mt('An error occurred while attempting to make a reservation. ([_1])',$1)                       .&mt('An error occurred while attempting to make a reservation. ([_1])',$1)
                      .'</span></p>');                       .'</span></p>');
  } elsif ($reserved > -1) {   } elsif ($reserved > -1) {
     $r->print('<p>'.&mt('Success: [_1]',$description).'</p>');      $r->print('<p style="font-weight: bold;">'.&mt('Successfully signed up:  [_1]',$description).'</p>');
     $retvalue = 1;      $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) {   } elsif ($reserved < 0) {
     $r->print('<p>'.&mt('Already reserved: [_1]',$description).'</p>');      $r->print('<p>'.&mt('Already reserved: [_1]',$description).'</p>');
  }   }
Line 741  sub allowed_slot { Line 760  sub allowed_slot {
     if ($slot->{'startreserve'} > time) {      if ($slot->{'startreserve'} > time) {
  return 0;   return 0;
     }      }
       # reserve time ended
       if (($slot->{'endreserve'}) &&
           ($slot->{'endreserve'} < time)) {
           return 0;
       }    
     &Apache::lonxml::debug("$slot_name reserve good");      &Apache::lonxml::debug("$slot_name reserve good");
   
     my $userallowed=0;      my $userallowed=0;
Line 818  sub show_choices { Line 842  sub show_choices {
     my ($r,$symb,$formname)=@_;      my ($r,$symb,$formname)=@_;
   
     my ($cnum,$cdom)=&get_course();      my ($cnum,$cdom)=&get_course();
     my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);      my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom);
     my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);      my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);
     if (ref($consumed_uniqueperiods) eq 'HASH') {      if (ref($consumed_uniqueperiods) eq 'HASH') {
         if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {          if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
Line 853  sub show_choices { Line 877  sub show_choices {
         push(@available,$slot);          push(@available,$slot);
     }      }
     if (!@available) {      if (!@available) {
         $output = &mt('No available times.');          $output = '<div class="LC_info">'.&mt('No available times.');
         if ($env{'form.command'} ne 'manageresv') {          if ($env{'form.command'} ne 'manageresv') {
             $output .= ' <a href="/adm/flip?postdata=return:">'.              $output .= ' <a href="/adm/flip?postdata=return:">'.
                        &mt('Return to last resource').'</a>';                         &mt('Return to last resource').'</a>';
         }          }
           $output .= '</div>';
         $r->print($output);          $r->print($output);
         return;          return;
     }      }
Line 1081  sub show_table { Line 1106  sub show_table {
      'starttime'       => 'Start time',       'starttime'       => 'Start time',
      'endtime'         => 'End Time',       'endtime'         => 'End Time',
              'startreserve'    => 'Time students can start reserving',               'startreserve'    => 'Time students can start reserving',
                'endreserve'      => 'Time students can no longer reserve',
                'reservationmsg'  => 'Message triggered by reservation',
      'secret'          => 'Secret Word',       'secret'          => 'Secret Word',
      'space'           => '# of students/max',       'space'           => '# of students/max',
      'ip'              => 'IP or DNS restrictions',       'ip'              => 'IP or DNS restrictions',
Line 1092  sub show_table { Line 1119  sub show_table {
      'proctor'         => 'List of proctors');       'proctor'         => 'List of proctors');
     if ($crstype eq 'Community') {      if ($crstype eq 'Community') {
         $show_fields{'startreserve'} = &mt('Time members can start reserving');          $show_fields{'startreserve'} = &mt('Time members can start reserving');
           $show_fields{'endreserve'} = &mt('Time members can no longer reserve');
         $show_fields{'scheduled'} = &mt('Scheduled Members');          $show_fields{'scheduled'} = &mt('Scheduled Members');
     }      }
     my @show_order=('name','description','type','starttime','endtime',      my @show_order=('name','description','type','starttime','endtime',
     'startreserve','secret','space','ip','symb',      'startreserve','endreserve','reservationmsg','secret','space',
     'allowedsections','allowedusers','uniqueperiod',      'ip','symb','allowedsections','allowedusers','uniqueperiod',
     'scheduled','proctor');      'scheduled','proctor');
     my @show =       my @show = 
  (exists($env{'form.show'})) ? &Apache::loncommon::get_env_multiple('form.show')   (exists($env{'form.show'})) ? &Apache::loncommon::get_env_multiple('form.show')
Line 1207  sub show_table { Line 1235  sub show_table {
   
     my %name_cache;      my %name_cache;
     my $slotsort = sub {      my $slotsort = sub {
  if ($env{'form.order'}=~/^(type|description|endtime|startreserve|ip|symb|allowedsections|allowedusers)$/) {   if ($env{'form.order'}=~/^(type|description|endtime|startreserve|endreserve|ip|symb|allowedsections|allowedusers|reservationmsg)$/) {
     if (lc($slots{$a}->{$env{'form.order'}})      if (lc($slots{$a}->{$env{'form.order'}})
  ne lc($slots{$b}->{$env{'form.order'}})) {   ne lc($slots{$b}->{$env{'form.order'}})) {
  return (lc($slots{$a}->{$env{'form.order'}})    return (lc($slots{$a}->{$env{'form.order'}}) 
Line 1244  sub show_table { Line 1272  sub show_table {
  if ($tmp =~ /^error: /) { undef(%consumed); }   if ($tmp =~ /^error: /) { undef(%consumed); }
     }      }
   
       my %msgops = &slot_reservationmsg_options();
   
     foreach my $slot (sort $slotsort (keys(%slots)))  {      foreach my $slot (sort $slotsort (keys(%slots)))  {
  if (!&to_show($slot,$slots{$slot},$when,   if (!&to_show($slot,$slots{$slot},$when,
       $env{'form.deleted'},$name_filter)) { next; }        $env{'form.deleted'},$name_filter)) { next; }
           my $reservemsg;
  if (defined($slots{$slot}->{'type'})   if (defined($slots{$slot}->{'type'})
     && $slots{$slot}->{'type'} ne 'schedulable_student') {      && $slots{$slot}->{'type'} eq 'schedulable_student') {
     #next;      $reservemsg = $msgops{$slots{$slot}->{'reservationmsg'}};
  }   }
  my $description=&get_description($slot,$slots{$slot});   my $description=&get_description($slot,$slots{$slot});
  my ($id_count,$ids);   my ($id_count,$ids);
Line 1286  sub show_table { Line 1317  sub show_table {
  &Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}):'');   &Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}):'');
  my $start_reserve=($slots{$slot}->{'startreserve'}?   my $start_reserve=($slots{$slot}->{'startreserve'}?
    &Apache::lonlocal::locallocaltime($slots{$slot}->{'startreserve'}):'');     &Apache::lonlocal::locallocaltime($slots{$slot}->{'startreserve'}):'');
           my $end_reserve=($slots{$slot}->{'endreserve'}?
                            &Apache::lonlocal::locallocaltime($slots{$slot}->{'endreserve'}):'');
   
  my $unique;   my $unique;
  if (ref($slots{$slot}{'uniqueperiod'})) {   if (ref($slots{$slot}{'uniqueperiod'})) {
Line 1393  LOGLINK Line 1426  LOGLINK
  if (exists($show{'startreserve'})) {   if (exists($show{'startreserve'})) {
     $colspan++;$r->print("<td>$start_reserve</td>\n");      $colspan++;$r->print("<td>$start_reserve</td>\n");
  }   }
           if (exists($show{'endreserve'})) {
               $colspan++;$r->print("<td>$end_reserve</td>\n");
           }
           if (exists($show{'reservationmsg'})) {
               $colspan++;$r->print("<td>$reservemsg</td>\n");
           }
  if (exists($show{'secret'})) {   if (exists($show{'secret'})) {
     $colspan++;$r->print("<td>$slots{$slot}{'secret'}</td>\n");      $colspan++;$r->print("<td>$slots{$slot}{'secret'}</td>\n");
  }   }
Line 1528  sub manage_reservations { Line 1567  sub manage_reservations {
                 } elsif ($slot_status == $resource->RESERVABLE) {                  } elsif ($slot_status == $resource->RESERVABLE) {
                     $msg=&mt('Reservation needed');                      $msg=&mt('Reservation needed');
                     $get_choices = 1;                      $get_choices = 1;
                   } elsif ($slot_status == $resource->RESERVABLE_LATER) {
                       $msg=&mt('Reservation needed: will be reservable later.');
                 } elsif ($slot_status == $resource->NOTRESERVABLE) {                  } elsif ($slot_status == $resource->NOTRESERVABLE) {
                     $msg=&mt('Reservation needed: none available.');                      $msg=&mt('Reservation needed: none available.');
                 } elsif ($slot_status == $resource->UNKNOWN) {                  } elsif ($slot_status == $resource->UNKNOWN) {
Line 2119  sub display_filter { Line 2160  sub display_filter {
     return $output;      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 = '<li>'.&mt('Sent to you: [_1]',
                                       $message_status).' </li>';
       }
       if ($setting eq 'student_and_user_notes_screen') {
           $comment_status =
               &Apache::lonmsg::store_instructor_comment($subject.'<br />'.
                                                         $msg,$user,$domain);
           $comment_status = '<li>'.&mt('Entry added to course record (viewable by instructor): [_1]',
                                       $comment_status).'</li>';
       }
       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');
           } elsif ($action eq 'nochange') {
               $msgtitle = &mt('Status of messages about unchanged existing reservation');
           }
           return '<span class="LC_info">'.$msgtitle.'</span>'
                  .'<ul>'
                  .$message_status
                  .$comment_status
                  .'</ul><hr />';
       }
   }
   
 sub upload_start {  sub upload_start {
     my ($r)=@_;          my ($r)=@_;    
     $r->print(      $r->print(
Line 2289  sub csvupload_fields { Line 2366  sub csvupload_fields {
     ['starttime','Start Time of slot'],      ['starttime','Start Time of slot'],
     ['endtime','End Time of slot'],      ['endtime','End Time of slot'],
     ['startreserve','Reservation Start Time'],      ['startreserve','Reservation Start Time'],
               ['endreserve','Reservation End Time'],
               ['reservationmsg','Message when reservation changed'],
     ['ip','IP or DNS restriction'],      ['ip','IP or DNS restriction'],
     ['proctor','List of proctor ids'],      ['proctor','List of proctor ids'],
     ['description','Slot Description'],      ['description','Slot Description'],
Line 2370  sub csv_upload_assign { Line 2449  sub csv_upload_assign {
     next;      next;
  }   }
   
           if ($entries{$fields{'endreserve'}}) {
               $slot{'endreserve'}=
                   &UnixDate($entries{$fields{'endreserve'}},"%s");
           }
           if (defined($slot{'endreserve'})
               && $slot{'endreserve'} > $slot{'starttime'}) {
               push(@errors,"$name not created -- Slot's reservation end time is after the slot's start time.");
               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',   foreach my $key ('ip','proctor','description','maxspace',
  'secret','symb') {   'secret','symb') {
     if ($entries{$fields{$key}}) {      if ($entries{$fields{$key}}) {
Line 2394  sub csv_upload_assign { Line 2497  sub csv_upload_assign {
  $r->rflush();   $r->rflush();
  $countdone++;   $countdone++;
     }      }
       if ($countdone) {
           &Apache::lonnet::devalidate_slots_cache($cname,$cdom); 
       }
     $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>');      $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>');
     foreach my $error (@errors) {      foreach my $error (@errors) {
  $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n");   $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n");
Line 2419  sub slot_command_titles { Line 2525  sub slot_command_titles {
     return %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 {  sub handler {
     my $r=shift;      my $r=shift;
   
Line 2478  sub handler { Line 2593  sub handler {
             if (ref($brcrum) eq 'ARRAY') {              if (ref($brcrum) eq 'ARRAY') {
                 push(@{$brcrum},{href=>"/adm/slotrequest?command=$env{'form.command'}",text=>$crumb_titles{$env{'form.command'}}});                  push(@{$brcrum},{href=>"/adm/slotrequest?command=$env{'form.command'}",text=>$crumb_titles{$env{'form.command'}}});
             }              }
               
         }          }
       } else {
           $brcrum =[];
     }      }
     &start_page($r,$title,$brcrum);      &start_page($r,$title,$brcrum);
   
Line 2548  sub handler { Line 2664  sub handler {
  } elsif ($env{'form.command'} eq 'get') {   } elsif ($env{'form.command'} eq 'get') {
     &get_slot($r,$symb);      &get_slot($r,$symb);
  } elsif ($env{'form.command'} eq 'change') {   } elsif ($env{'form.command'} eq 'change') {
     if (&get_slot($r,$symb,$env{'form.releaseslot'},1)) {              if ($env{'form.nochange'}) {
                   my $slot_name = $env{'form.releaseslot'};
                   my @slots = &check_for_reservation($symb,'allslots');
                   my $msg;
                   if (($slot_name ne '') && (grep(/^\Q$slot_name\E/,@slots))) { 
                        my %slot=&Apache::lonnet::get_slot($env{'form.releaseslot'});
                        my $description=&get_description($slot_name,\%slot);
                        $msg = '<span style="font-weight: bold;">'.
                               &mt('Unchanged reservation: [_1]',$description).'</span><br /><br />';
                        my $person = 
                            &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
                        my $subject = &mt('Reservation unchanged: [_1]',$description);
                        my $msgbody = &mt('No change to existing registration by [_1] for [_2].',$person,$description);
                        $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'nochange');
                   } else {
                       $msg = '<span class="LC_warning">'.&mt('Reservation no longer reported as available.').'</span>';
                   }
                   $r->print($msg);
                   &return_link($r);
       } elsif (&get_slot($r,$symb,$env{'form.releaseslot'},1)) {
  &release_slot($r,$symb,$env{'form.releaseslot'});   &release_slot($r,$symb,$env{'form.releaseslot'});
     }      }
  } else {   } else {

Removed from v.1.108  
changed lines
  Added in v.1.114


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>