Annotation of loncom/html/adm/helper/newslot.helper, revision 1.32

1.1       albertel    1: <helper title="Slot Creation" requiredpriv="mgq">
1.22      albertel    2:   <state name="START" title="Specify Required Attributes"
                      3:          help="Slot_RequiredAttributes">
1.13      albertel    4: 
                      5:     <nextstate>OPTIONAL</nextstate>
                      6: 
1.5       albertel    7:     <exec>
                      8:       if (!exists($helper->{'VARS'}{'name'}) ||
                      9: 	  $helper->{'VARS'}{'name'} !~ /\S/) {
                     10: 	  &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
                     11: 	  if (exists($env{'form.name'}) ||
                     12: 	      $env{'form.name'} =~ /\S/) {
                     13: 	      $helper->{'VARS'}{'name'}=$env{'form.name'};
1.10      albertel   14: 	      $helper->{VARS}{'origname'}=$env{'form.name'};
                     15: 	      $helper->{DATA}{copy} = 1;
1.5       albertel   16: 	  }
                     17:       }
                     18:       $helper->{DATA}{origslot} = sub {
                     19: 	  my ($which,$default)=@_;
                     20: 	  if (!exists($helper->{'VARS'}{'name'}) ||
                     21: 	      $helper->{'VARS'}{'name'} !~ /\S/) {
                     22: 	      return $default;
                     23: 	  }
                     24: 	  my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                     25: 	  my $cdom  = $env{'course.'.$env{'request.course.id'}.'.domain'};
1.10      albertel   26: 	  my $name=$helper->{VARS}{'origname'};
1.5       albertel   27: 	  my %slot=&Apache::lonnet::get('slots', [$name], $cdom, $cnum);
                     28: 	  if (!ref($slot{$name})) { return $default; }
                     29: 	  if (!exists($slot{$name}{$which})) { return $default; }
                     30: 	  return $slot{$name}{$which};
                     31:       }
                     32:     </exec>
1.13      albertel   33:     <message>
1.21      rezaferr   34:         <br />Name: <br />&nbsp;&nbsp;&nbsp;
1.1       albertel   35:     </message>
1.3       albertel   36:     <string variable="name" size="30">
1.1       albertel   37:       <validator>
                     38:           if ($val=~/^\s*$/) { return 'Must specify a name'; }
1.9       albertel   39:           if ($val=~/\s/) { return 'Must not contain spaces'; }
                     40:           if ($val=~/\W/) { return 'Must contain only letters, numbers and _'; }
1.1       albertel   41:           return undef;
                     42:       </validator>
1.5       albertel   43:       <defaultvalue>
                     44:         return $helper->{'VARS'}{'name'};
                     45:       </defaultvalue>
1.1       albertel   46:     </string>
1.10      albertel   47:     <condition>
                     48:       <clause>$helper->{DATA}{copy}</clause>
1.13      albertel   49:       <message>
1.10      albertel   50: 	<p>Changing the Name will create a new slot with the new name, and not rename the existing slot.</p>
                     51:       </message>
                     52:     </condition>
1.1       albertel   53:     <message>
1.11      albertel   54:       <br />Start time:<br />&nbsp;&nbsp;&nbsp;
1.1       albertel   55:     </message>
1.5       albertel   56:     <date variable="starttime" hoursminutes="1">
                     57:       <defaultvalue>
                     58:         return &{$helper->{DATA}{origslot}}('starttime');
                     59:       </defaultvalue>
                     60:     </date>
1.1       albertel   61:     <message>
1.11      albertel   62:       <br />End time:<br />&nbsp;&nbsp;&nbsp;
1.1       albertel   63:     </message>
1.5       albertel   64:     <date variable="endtime" hoursminutes="1">
                     65:       <defaultvalue>
                     66:         return &{$helper->{DATA}{origslot}}('endtime');
                     67:       </defaultvalue>
1.15      albertel   68:       <validator>
                     69:          if ($val < $helper->{'VARS'}{'starttime'}) {
                     70: 	     return 'End time must be later than the start time.';
                     71:          }
                     72: 	 return undef;
                     73:       </validator>
1.5       albertel   74:     </date>
1.1       albertel   75:     <message>
1.11      albertel   76:       <br />Type:
1.1       albertel   77:     </message>
                     78:     <choices variable="type">
1.26      bisitz     79:       <choice computer='preassigned'>Instructor assignable.</choice>
1.5       albertel   80:       <choice computer='schedulable_student'>Student selectable.</choice>
1.1       albertel   81:       <defaultvalue>
1.5       albertel   82:         return &{$helper->{DATA}{origslot}}('type','preassigned');
1.1       albertel   83:       </defaultvalue>
                     84:     </choices>
                     85:   </state>
                     86: 
1.13      albertel   87: 
1.22      albertel   88:   <state name="OPTIONAL" title="Specify Optional Attributes"
                     89: 	 help="Slot_OptionalAttributes">
1.1       albertel   90:     <message>
1.11      albertel   91:         <p>Description:<br />&nbsp;&nbsp;&nbsp;
1.1       albertel   92:     </message>
1.5       albertel   93:     <string variable="description" size="60">
                     94:       <defaultvalue>
                     95:         return &{$helper->{DATA}{origslot}}('description');
                     96:       </defaultvalue>
                     97:     </string>
1.7       albertel   98:     <condition>
                     99:       <clause>$helper->{'VARS'}{'type'} eq 'schedulable_student'</clause>
                    100:       <message>
1.11      albertel  101:         </p><p>Time students can start reserving:<br />&nbsp;&nbsp;&nbsp;
1.7       albertel  102:       </message>
                    103:       <date variable="startreserve" hoursminutes="1" anytime="1">
                    104:         <defaultvalue>
                    105:           return &{$helper->{DATA}{origslot}}('startreserve','anytime');
                    106:         </defaultvalue>
1.15      albertel  107:         <validator>
                    108:            if (defined($val) && $val > $helper->{'VARS'}{'starttime'}) {
                    109: 	       return 'Reservation time must come before the slot has started.';
                    110:            }
                    111: 	   return undef;
                    112:         </validator>
1.7       albertel  113:       </date>
                    114:       <message>
1.28      raeburn   115:         </p><p>Time students can no longer reserve:<br />&nbsp;&nbsp;&nbsp;
                    116:       </message>
                    117:       <date variable="endreserve" hoursminutes="1" anytime="1">
                    118:         <defaultvalue>
                    119:           return &{$helper->{DATA}{origslot}}('endreserve','anytime');
                    120:         </defaultvalue>
                    121:         <validator>
                    122:            if (defined($val) && $val > $helper->{'VARS'}{'starttime'}) {
                    123:                return 'Reservation end time must come before the slot has started.';
                    124:            }
                    125:            return undef;
                    126:         </validator>
                    127:       </date>
                    128:       <message>
1.24      raeburn   129:          </p><p>Maximum number of students allowed in this slot:<br />&nbsp;&nbsp;&nbsp;
1.7       albertel  130:       </message>
                    131:       <string variable="maxspace" size="4">
                    132:         <validator>
                    133:             if ($val ne '' && $val=~/\D/) { return 'Must be numeric.'; }
                    134:             return undef;
                    135:         </validator>
                    136:         <defaultvalue>
                    137:           return &{$helper->{DATA}{origslot}}('maxspace');
                    138:         </defaultvalue>
                    139:       </string>
                    140:       <message>
1.25      felicia   141:          </p><p>Period of time when this slot can only be uniquely chosen:<br />&nbsp;&nbsp;&nbsp;Start:
1.7       albertel  142:       </message>
                    143:       <date variable="startunique" hoursminutes="1" anytime="1">
                    144:         <defaultvalue>
                    145:           my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime');
                    146:           if ($default eq 'anytime') { return 'anytime' };
                    147:           if (ref($default)) { return $default->[0]; }
                    148:           return 'anytime';
                    149:         </defaultvalue>
                    150:       </date>
1.11      albertel  151:       <message><br />&nbsp;&nbsp;&nbsp;End: </message>
1.7       albertel  152:       <date variable="endunique" hoursminutes="1" anytime="1">
                    153:         <defaultvalue>
                    154:           my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime');
                    155:           if ($default eq 'anytime') { return 'anytime' };
                    156:           if (ref($default)) { return $default->[1]; }
                    157:           return 'anytime';
                    158:         </defaultvalue>
1.15      albertel  159:         <validator>
                    160:            if (defined($val) && $val < $helper->{'VARS'}{'startunique'}) {
                    161: 	       return 'End time must be later than the start time.';
                    162:            }
                    163: 	   return undef;
                    164:         </validator>
1.7       albertel  165:       </date>
1.27      raeburn   166:       <message>
                    167:         </p><p>Message(s) triggered by reservation change by student 
                    168:       </message>
                    169:     <choices variable="reservationmsg">
                    170:       <choice computer='only_student'>Sent to student</choice>
                    171:       <choice computer='student_and_user_notes_screen'>Sent to student and added to user notes</choice>
                    172:       <choice computer='none'>None sent and no record in user notes</choice>
                    173:       <defaultvalue>
                    174:         my $default=&{$helper->{DATA}{origslot}}('reservationmsg');
                    175:         if ($default eq 'only_student') { return $default; }
                    176:         if ($default eq 'student_and_user_notes_screen') { return $default; }
                    177:         return 'none';
                    178:       </defaultvalue>
                    179:     </choices>
1.7       albertel  180:     </condition>
                    181:     <condition>
                    182:       <clause>$helper->{'VARS'}{'type'} eq 'preassigned'</clause>
                    183:       <exec>
                    184:         delete($helper->{'VARS'}{'startreserve'});
1.28      raeburn   185:         delete($helper->{'VARS'}{'endreserve'});
1.7       albertel  186:         delete($helper->{'VARS'}{'maxspace'});
                    187:         delete($helper->{'VARS'}{'startunique'});
                    188:         delete($helper->{'VARS'}{'endunique'});
                    189:       </exec>
                    190:     </condition>
1.20      albertel  191: 
                    192:     <message>
                    193:       </p><p>Proctored access:
                    194:     </message>
                    195:     <choices variable="useproctor">
                    196:       <choice computer='no'>No proctor checkin required for access.</choice>
                    197:       <choice computer='yes'>Require proctored checkin for access.</choice>
                    198:       <defaultvalue>
                    199:         my $default=&{$helper->{DATA}{origslot}}('proctor');
                    200:         if ($default) { return 'yes'; }
                    201:         return 'no';
                    202:       </defaultvalue>
                    203:     </choices>
                    204: 
1.1       albertel  205:     <message>
1.11      albertel  206:       </p><p>Secret word proctors use to checkin users:<br />&nbsp;&nbsp;&nbsp;
1.3       albertel  207:     </message>
                    208:     <string variable="secret" size="12">
                    209:       <validator>
                    210:           return undef;
                    211:       </validator>
1.5       albertel  212:       <defaultvalue>
                    213:         return &{$helper->{DATA}{origslot}}('secret');
                    214:       </defaultvalue>
1.3       albertel  215:     </string>
                    216:     <message>
1.11      albertel  217:       </p><p>Slot is:
1.1       albertel  218:     </message>
1.22      albertel  219:     <helpicon file="Slot_ChoosingResources" />
1.21      rezaferr  220: 
1.1       albertel  221:     <choices variable="restricttosymb">
1.4       albertel  222:       <choice nextstate="PROCTOR" computer='any'>usable for any resource.</choice>
1.32    ! raeburn   223:       <choice nextstate="MAPSELECT" computer='map'>restricted to resources in specific folder(s)/composite page(s).</choice>
        !           224:       <choice nextstate="RESOURCESELECT" computer='resource'>restricted to specific resource(s).</choice>
1.5       albertel  225:       <defaultvalue>
                    226:         my $default=&{$helper->{DATA}{origslot}}('symb');
1.31      raeburn   227:         if ($default) {
1.32    ! raeburn   228:             my @symbs;
        !           229:             if ($default =~ /,/) {
        !           230:                 @symbs = split(/\s*,\s*/,$default);
        !           231:             } else {
        !           232:                 @symbs = ($default);
        !           233:             }
        !           234:             if (grep(/\.(page|sequence)$/,@symbs)) {
1.31      raeburn   235:                 return 'map';
                    236:             } else {
                    237:                 return 'resource';
                    238:             }
                    239:         } else {
                    240:             return 'any';
                    241:         }
1.5       albertel  242:       </defaultvalue>
1.1       albertel  243:     </choices>
1.21      rezaferr  244:     
1.2       albertel  245:     <message>
1.13      albertel  246: 	</p><p>IP restrictions:<br />&nbsp;&nbsp;&nbsp;      
1.2       albertel  247:     </message>
                    248:     <string variable="ip" size="30">
                    249:       <validator>
                    250:           return undef;
                    251:       </validator>
1.5       albertel  252:       <defaultvalue>
                    253:         return &{$helper->{DATA}{origslot}}('ip');
                    254:       </defaultvalue>
1.2       albertel  255:     </string>
1.11      albertel  256:     <message>  </p>  </message>
1.1       albertel  257:   </state>
1.13      albertel  258: 
                    259: 
1.1       albertel  260:   <state name="RESOURCESELECT" title="Specify Optional Attributes">
1.13      albertel  261: 
                    262:     <nextstate>PROCTOR</nextstate>
                    263: 
1.32    ! raeburn   264:     <resource variable="symb" multichoice="1">
        !           265:       <filterfunc>return $res->is_map() || $res->is_problem()</filterfunc>
        !           266:       <choicefunc>return $res->is_problem()</choicefunc>
1.1       albertel  267:       <valuefunc>return $res->symb()</valuefunc>
1.5       albertel  268:       <defaultvalue>
1.32    ! raeburn   269:         my @defaults;
        !           270:         my $default=&{$helper->{DATA}{origslot}}('symb');
        !           271:         if ($default) {
        !           272:             @defaults=(split(/\s*,\s*/,$default));
        !           273:         }
        !           274:         return @defaults;
1.5       albertel  275:       </defaultvalue>
1.1       albertel  276:     </resource>    
                    277:   </state>
1.13      albertel  278: 
1.31      raeburn   279:   <state name="MAPSELECT" title="Specify Optional Attributes">
                    280: 
                    281:     <nextstate>PROCTOR</nextstate>
                    282: 
1.32    ! raeburn   283:     <resource variable="symb" multichoice="1">
1.31      raeburn   284:       <filterfunc>return $res->is_map()</filterfunc>
                    285:       <valuefunc>return $res->symb()</valuefunc>
                    286:       <defaultvalue>
1.32    ! raeburn   287:         my @defaults;
        !           288:         my $default=&{$helper->{DATA}{origslot}}('symb');
        !           289:         if ($default) {
        !           290:             @defaults=(split(/\s*,\s*/,$default));
        !           291:         }
        !           292:         return @defaults;
1.31      raeburn   293:       </defaultvalue>
                    294:     </resource>
                    295:   </state>
1.13      albertel  296: 
1.22      albertel  297:   <state name="PROCTOR" title="Specify Proctors"
                    298: 	 help="Slot_SpecifyProctors">
1.13      albertel  299: 
1.20      albertel  300:     <skip>
                    301:       <clause>$helper->{'VARS'}{'useproctor'} eq 'no'</clause>
                    302:       <nextstate>RESTRICTUSER</nextstate>
                    303:     </skip>
1.13      albertel  304: 
1.20      albertel  305:     <nextstate>RESTRICTUSER</nextstate>
1.18      albertel  306: 
1.4       albertel  307:     <student variable="proctor" multichoice="1" coursepersonnel="1"
1.23      albertel  308:              activeonly="1" emptyallowed="0">
1.5       albertel  309:       <defaultvalue>
                    310:         my @defaults;
                    311:         my $default=&{$helper->{DATA}{origslot}}('proctor');
                    312:         if ($default) {
                    313: 	    @defaults=(split(',',$default)); 
                    314: 	}
                    315:         return @defaults;
                    316:       </defaultvalue>
1.4       albertel  317:     </student>
                    318:   </state>
1.13      albertel  319: 
                    320: 
1.22      albertel  321:   <state name="RESTRICTUSER" title="Restrict slot availability"
                    322: 	 help="Slot_RestrictAvailibility">
1.20      albertel  323:     <skip>
                    324:        <clause>$helper->{'VARS'}{'type'} ne 'schedulable_student'</clause>
                    325:        <nextstate>FINISH</nextstate>
                    326:     </skip>
                    327: 
1.13      albertel  328:     <nextstate>FINISH</nextstate>
                    329:     <message>
                    330:       <p>Slots are by default available to all users in a course, if you would like this slot to be restricted to a subset of users you can specify restrictions.</p>
                    331:     </message>
                    332: 
                    333:     <message>
1.32    ! raeburn   334:       <h3>Select sections to limit slot availability to: </h3>&nbsp;&nbsp;&nbsp;
1.13      albertel  335:     </message>
                    336:     <section variable="allowedsections" multichoice="1" allowempty="1">
                    337:       <defaultvalue>
1.32    ! raeburn   338: 	return join('|||',
1.13      albertel  339: 		    split(',',&{$helper->{DATA}{origslot}}('allowedsections')));
                    340:       </defaultvalue>
                    341:     </section>
                    342:     <message>
1.32    ! raeburn   343:       <br /><h3>Select users to limit slot availability to: </h3>&nbsp;&nbsp;&nbsp;
1.13      albertel  344:     </message>
                    345:     <student variable="allowedusers" multichoice="1" coursepersonnel="1"
                    346:              activeonly="1" emptyallowed="1">
                    347:       <defaultvalue>
                    348: 	 return split(',',&{$helper->{DATA}{origslot}}('allowedusers'));
                    349:       </defaultvalue>
                    350:     </student>
                    351:   </state>
                    352: 
                    353: 
1.30      bisitz    354:   <state name="FINISH" title="Creating/Modifying Slot">
1.11      albertel  355: 	    <message> Created Slot  </message>	
1.3       albertel  356:     <final>
                    357:       <finalcode>
                    358:         my $result;
                    359: 	if ($helper->{'STATE'} ne 'FINISH') { return; }
                    360: 	my %slot;
1.13      albertel  361: 
1.3       albertel  362: 	foreach my $which ('type','starttime','endtime') {
                    363: 	    $slot{$which} = $helper->{'VARS'}{$which};
                    364: 	}
1.13      albertel  365: 
1.32    ! raeburn   366: 	foreach my $which ('ip','description','maxspace','secret') {
1.3       albertel  367: 	    if ( $helper->{'VARS'}{$which} =~/\S/ ) {
                    368: 		$slot{$which} = $helper->{'VARS'}{$which};
                    369: 	    }
                    370: 	}
1.13      albertel  371: 
1.27      raeburn   372:         if ($helper->{'VARS'}{'type'} eq 'schedulable_student') {
                    373:             if (($helper->{'VARS'}{'reservationmsg'} eq 'only_student') ||
                    374:                ($helper->{'VARS'}{'reservationmsg'} eq 'student_and_user_notes_screen')) {
                    375:                 $slot{'reservationmsg'} = $helper->{'VARS'}{'reservationmsg'}; 
                    376:             } else {
                    377:                 $slot{'reservationmsg'} = 'none';
                    378:             }
                    379:         }
                    380: 
1.32    ! raeburn   381:         if (($helper->{'VARS'}{'restricttosymb'} =~ /^(map|resource)$/) && 
        !           382:             ($helper->{'VARS'}{'symb'} =~ /\S/)) {
        !           383:             my @symbs;
        !           384:             foreach my $symb (split(/\|\|\|/, $helper->{'VARS'}{'symb'})) {
        !           385:                 push(@symbs,$symb);
        !           386:             }
        !           387:             # make sure the symbs are unique
        !           388:             my %symbs = map { ($_,1) } @symbs;
        !           389:             $slot{'symb'}=join(',',sort(keys(%symbs)));
        !           390:         }
        !           391: 
1.12      albertel  392: 	if ( $helper->{'VARS'}{'startreserve'} > 0) {
                    393: 		$slot{'startreserve'} = $helper->{'VARS'}{'startreserve'};
                    394: 	}
1.13      albertel  395: 
1.28      raeburn   396:         if ( $helper->{'VARS'}{'endreserve'} > 0) {
                    397:             $slot{'endreserve'} = $helper->{'VARS'}{'endreserve'};
                    398:         }
                    399: 
1.3       albertel  400: 	if ( $helper->{'VARS'}{'startunique'} > 0 &&
                    401: 	     $helper->{'VARS'}{'endunique'} > 0 ) {
                    402: 	    $slot{'uniqueperiod'} = [$helper->{'VARS'}{'startunique'},
                    403: 				     $helper->{'VARS'}{'endunique'}];
                    404: 	}
1.13      albertel  405: 
1.19      albertel  406:         if ( $helper->{'VARS'}{'useproctor'} eq 'yes'
                    407: 	     && $helper->{'VARS'}{'proctor'} =~/\S/ ) {
1.4       albertel  408: 	    my @names;
1.16      albertel  409: 	    # just need the username/domain throw away the other data 
                    410:             # that <student> returns
1.4       albertel  411: 	    foreach my $user (split(/\|\|\|/, $helper->{'VARS'}{'proctor'})) {
                    412: 		my ($uname,$udomain)=split(/:/,$user);
1.16      albertel  413: 		push(@names,"$uname:$udomain");
1.4       albertel  414: 	    }
1.32    ! raeburn   415: 	    # make sure the usernames are unique
1.8       albertel  416: 	    my %proctors = map { ($_,1) } @names;
                    417: 	    $slot{'proctor'}=join(',',sort(keys(%proctors)));
1.4       albertel  418: 	}
1.13      albertel  419: 
1.14      albertel  420:         if ( $helper->{'VARS'}{'allowedsections'} =~/\S/ ) {
                    421: 	    $slot{'allowedsections'}=
                    422: 		join(',',sort(split(/\|\|\|/,
                    423: 				    $helper->{'VARS'}{'allowedsections'})));
1.13      albertel  424: 	}
                    425: 
1.14      albertel  426:         if ( $helper->{'VARS'}{'allowedusers'} =~/\S/ ) {
1.13      albertel  427: 	    my @names;
1.16      albertel  428: 	    # just need the username/domain throw away the other data 
                    429:             # that <student> returns
1.14      albertel  430: 	    foreach my $item (split(/\|\|\|/,
                    431: 				    $helper->{'VARS'}{'allowedusers'})) {
1.13      albertel  432: 		my ($uname,$udomain)=split(/:/,$item);
                    433: 		push(@names,"$uname:$udomain");
                    434: 	    }
                    435: 
                    436: 	    # make sure the choices are unique
1.14      albertel  437: 	    my %users = map { ($_,1) } @names;
                    438: 	    $slot{'allowedusers'}=join(',',sort(keys(%users)));
1.13      albertel  439: 	}
                    440: 
1.3       albertel  441:         my $cname = $env{'course.'.$env{'request.course.id'}.'.num'};
                    442:         my $cdom  = $env{'course.'.$env{'request.course.id'}.'.domain'};
                    443: 
                    444:         my $ret = &Apache::lonnet::cput('slots',
                    445: 					{$helper->{'VARS'}{'name'} => \%slot},
                    446: 					$cdom,$cname);
1.29      raeburn   447:         if ($ret eq 'ok') {
                    448:             &Apache::lonnet::devalidate_slots_cache($cname,$cdom);
                    449:         }
1.5       albertel  450:         $result.="\n ".'Name: '.&HTML::Entities::encode($helper->{'VARS'}{'name'}).'</li>'.
1.4       albertel  451:     "\n".'<li> Starts: '.&Apache::lonlocal::locallocaltime($slot{'starttime'}).'</li>'.
                    452:                  "\n".'<li> Ends: '.&Apache::lonlocal::locallocaltime($slot{'endtime'}).'</li>'.
1.3       albertel  453:                  "\n".'<li> Type: '.$slot{'type'}.'</li>';
                    454:         my %labels =
                    455:              map {($_->[0],$_->[1])} &Apache::slotrequest::csvupload_fields();
1.32    ! raeburn   456:         foreach my $which ('ip','description','maxspace','secret',
1.13      albertel  457: 			   'allowedsections','allowedusers') {
1.3       albertel  458: 	    if (exists($slot{$which})) {
                    459: 		$result.="\n".'<li> '.$labels{$which}.': '.
                    460: 		    &HTML::Entities::encode($slot{$which}).'</li>';
                    461: 	    }
                    462: 	}
1.32    ! raeburn   463:         if (exists($slot{'symb'})) {
        !           464:             $result.="\n".'<li> '.$labels{'symb'}.': ';
        !           465:             if ($slot{'symb'} =~ /,/) {
        !           466:                 $result.='<ul>';
        !           467:                 foreach my $symb (split(/\s*,\s*/,$slot{'symb'})) {
        !           468:                     $result.='<li>'.&HTML::Entities::encode($symb).'</li>';
        !           469:                 }
        !           470:                 $result.='</ul>';
        !           471:             } else {
        !           472:                 $result.=&HTML::Entities::encode($slot{'symb'});
        !           473:             }
        !           474:             $result.='</li>';
        !           475:         }
1.12      albertel  476: 	if (exists($slot{'startreserve'})) {
                    477: 	    $result.="\n".'<li> '.$labels{'startreserve'}.': '.
                    478: 		    &Apache::lonlocal::locallocaltime($slot{'startreserve'}).'</li>';
                    479: 	}
1.27      raeburn   480: 
1.28      raeburn   481:         if (exists($slot{'endreserve'})) {
                    482:             $result.="\n".'<li> '.$labels{'endreserve'}.': '.
                    483:                     &Apache::lonlocal::locallocaltime($slot{'endreserve'}).'</li>';
                    484:         }
                    485: 
1.27      raeburn   486:         if (exists($slot{'reservationmsg'})) {
                    487:             my %options = &Apache::slotrequest::slot_reservationmsg_options();
                    488:             $result.="\n".'<li> '.$labels{'reservationmsg'}.': '.
                    489:                           $options{$slot{'reservationmsg'}}.'</li>';
                    490:         }
                    491: 
1.6       albertel  492:         if (exists($slot{'proctor'})) {
                    493: 	    my $proctors = $slot{'proctor'};
                    494: 	    $proctors =~ s/,/, /g;
                    495: 	    $result.="\n".'<li> '.$labels{'proctor'}.': '.
                    496: 		&HTML::Entities::encode($proctors).'</li>';
                    497: 	}
1.3       albertel  498:         if (exists($slot{'uniqueperiod'})) {
                    499: 	    $result.=
                    500:                  "\n".'<li> '.$labels{'uniqueperiod'}.': '.
                    501: 		 &Apache::lonlocal::locallocaltime($slot{'uniqueperiod'}[0]).
                    502: 		 ', '.
                    503: 		 &Apache::lonlocal::locallocaltime($slot{'uniqueperiod'}[1]).
                    504: 		 '</li>';
                    505: 	}
                    506:         return $result;
                    507:       </finalcode>
1.4       albertel  508:       <exitpage>/adm/slotrequest?command=showslots</exitpage>
1.3       albertel  509:     </final>
1.1       albertel  510:   </state>
                    511: </helper>

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