version 1.7, 2005/11/02 22:07:52
|
version 1.19, 2006/05/16 21:03:42
|
Line 1
|
Line 1
|
<helper title="Slot Creation" requiredpriv="mgq"> |
<helper title="Slot Creation" requiredpriv="mgq"> |
<state name="START" title="Specify Required Attributes"> |
<state name="START" title="Specify Required Attributes"> |
|
|
|
<nextstate>OPTIONAL</nextstate> |
|
|
<exec> |
<exec> |
if (!exists($helper->{'VARS'}{'name'}) || |
if (!exists($helper->{'VARS'}{'name'}) || |
$helper->{'VARS'}{'name'} !~ /\S/) { |
$helper->{'VARS'}{'name'} !~ /\S/) { |
Line 7
|
Line 10
|
if (exists($env{'form.name'}) || |
if (exists($env{'form.name'}) || |
$env{'form.name'} =~ /\S/) { |
$env{'form.name'} =~ /\S/) { |
$helper->{'VARS'}{'name'}=$env{'form.name'}; |
$helper->{'VARS'}{'name'}=$env{'form.name'}; |
|
$helper->{VARS}{'origname'}=$env{'form.name'}; |
|
$helper->{DATA}{copy} = 1; |
} |
} |
} |
} |
$helper->{DATA}{origslot} = sub { |
$helper->{DATA}{origslot} = sub { |
Line 17
|
Line 22
|
} |
} |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $name=$helper->{'VARS'}{'name'}; |
my $name=$helper->{VARS}{'origname'}; |
my %slot=&Apache::lonnet::get('slots', [$name], $cdom, $cnum); |
my %slot=&Apache::lonnet::get('slots', [$name], $cdom, $cnum); |
if (!ref($slot{$name})) { return $default; } |
if (!ref($slot{$name})) { return $default; } |
if (!exists($slot{$name}{$which})) { return $default; } |
if (!exists($slot{$name}{$which})) { return $default; } |
return $slot{$name}{$which}; |
return $slot{$name}{$which}; |
} |
} |
</exec> |
</exec> |
<message nextstate="OPTIONAL"> |
<message> |
<message_text> |
Name: <br /> |
Name: <br /> |
|
</message_text> |
|
</message> |
</message> |
<string variable="name" size="30"> |
<string variable="name" size="30"> |
<validator> |
<validator> |
if ($val=~/^\s*$/) { return 'Must specify a name'; } |
if ($val=~/^\s*$/) { return 'Must specify a name'; } |
if ($val=~/\s$/) { return 'Must not contain spaces'; } |
if ($val=~/\s/) { return 'Must not contain spaces'; } |
|
if ($val=~/\W/) { return 'Must contain only letters, numbers and _'; } |
return undef; |
return undef; |
</validator> |
</validator> |
<defaultvalue> |
<defaultvalue> |
return $helper->{'VARS'}{'name'}; |
return $helper->{'VARS'}{'name'}; |
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
|
<condition> |
|
<clause>$helper->{DATA}{copy}</clause> |
|
<message> |
|
<p>Changing the Name will create a new slot with the new name, and not rename the existing slot.</p> |
|
</message> |
|
</condition> |
<message> |
<message> |
<message_text><br />Start time:<br /> </message_text> |
<br />Start time:<br /> |
</message> |
</message> |
<date variable="starttime" hoursminutes="1"> |
<date variable="starttime" hoursminutes="1"> |
<defaultvalue> |
<defaultvalue> |
Line 48
|
Line 58
|
</defaultvalue> |
</defaultvalue> |
</date> |
</date> |
<message> |
<message> |
<message_text><br />End time:<br /> </message_text> |
<br />End time:<br /> |
</message> |
</message> |
<date variable="endtime" hoursminutes="1"> |
<date variable="endtime" hoursminutes="1"> |
<defaultvalue> |
<defaultvalue> |
return &{$helper->{DATA}{origslot}}('endtime'); |
return &{$helper->{DATA}{origslot}}('endtime'); |
</defaultvalue> |
</defaultvalue> |
|
<validator> |
|
if ($val < $helper->{'VARS'}{'starttime'}) { |
|
return 'End time must be later than the start time.'; |
|
} |
|
return undef; |
|
</validator> |
</date> |
</date> |
<message> |
<message> |
<message_text><br />Type:</message_text> |
<br />Type: |
</message> |
</message> |
<choices variable="type"> |
<choices variable="type"> |
<choice computer='preassigned'>Instructor asssignable.</choice> |
<choice computer='preassigned'>Instructor asssignable.</choice> |
Line 67
|
Line 83
|
</choices> |
</choices> |
</state> |
</state> |
|
|
|
|
<state name="OPTIONAL" title="Specify Optional Attributes"> |
<state name="OPTIONAL" title="Specify Optional Attributes"> |
<message> |
<message> |
<message_text> |
<p>Description:<br /> |
<p>Description:<br /> |
|
</message_text> |
|
</message> |
</message> |
<string variable="description" size="60"> |
<string variable="description" size="60"> |
<defaultvalue> |
<defaultvalue> |
Line 81
|
Line 96
|
<condition> |
<condition> |
<clause>$helper->{'VARS'}{'type'} eq 'schedulable_student'</clause> |
<clause>$helper->{'VARS'}{'type'} eq 'schedulable_student'</clause> |
<message> |
<message> |
<message_text> |
</p><p>Time students can start reserving:<br /> |
</p><p>Time students can start reserving:<br /> |
|
</message_text> |
|
</message> |
</message> |
<date variable="startreserve" hoursminutes="1" anytime="1"> |
<date variable="startreserve" hoursminutes="1" anytime="1"> |
<defaultvalue> |
<defaultvalue> |
return &{$helper->{DATA}{origslot}}('startreserve','anytime'); |
return &{$helper->{DATA}{origslot}}('startreserve','anytime'); |
</defaultvalue> |
</defaultvalue> |
|
<validator> |
|
if (defined($val) && $val > $helper->{'VARS'}{'starttime'}) { |
|
return 'Reservation time must come before the slot has started.'; |
|
} |
|
return undef; |
|
</validator> |
</date> |
</date> |
<message> |
<message> |
<message_text> |
</p><p>Maxium number of students allowed in this slot:<br /> |
</p><p>Maxium number of students allowed in this slot:<br /> |
|
</message_text> |
|
</message> |
</message> |
<string variable="maxspace" size="4"> |
<string variable="maxspace" size="4"> |
<validator> |
<validator> |
Line 105
|
Line 122
|
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message> |
<message> |
<message_text> |
</p><p>Period of time in which this slot is can only be uniquely chosen:<br /> Start: |
</p><p>Period of time in which this slot is can only be uniquely chosen:<br /> Start: |
|
</message_text> |
|
</message> |
</message> |
<date variable="startunique" hoursminutes="1" anytime="1"> |
<date variable="startunique" hoursminutes="1" anytime="1"> |
<defaultvalue> |
<defaultvalue> |
Line 117
|
Line 132
|
return 'anytime'; |
return 'anytime'; |
</defaultvalue> |
</defaultvalue> |
</date> |
</date> |
<message><message_text><br /> End: </message_text></message> |
<message><br /> End: </message> |
<date variable="endunique" hoursminutes="1" anytime="1"> |
<date variable="endunique" hoursminutes="1" anytime="1"> |
<defaultvalue> |
<defaultvalue> |
my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime'); |
my $default=&{$helper->{DATA}{origslot}}('uniqueperiod','anytime'); |
Line 125
|
Line 140
|
if (ref($default)) { return $default->[1]; } |
if (ref($default)) { return $default->[1]; } |
return 'anytime'; |
return 'anytime'; |
</defaultvalue> |
</defaultvalue> |
|
<validator> |
|
if (defined($val) && $val < $helper->{'VARS'}{'startunique'}) { |
|
return 'End time must be later than the start time.'; |
|
} |
|
return undef; |
|
</validator> |
</date> |
</date> |
</condition> |
</condition> |
<condition> |
<condition> |
Line 137
|
Line 158
|
</exec> |
</exec> |
</condition> |
</condition> |
<message> |
<message> |
<message_text> |
</p><p>Secret word proctors use to checkin users:<br /> |
</p><p>Secret word proctors use to checkin users:<br /> |
|
</message_text> |
|
</message> |
</message> |
<string variable="secret" size="12"> |
<string variable="secret" size="12"> |
<validator> |
<validator> |
Line 150
|
Line 169
|
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message> |
<message> |
<message_text> |
</p><p>Slot is: |
</p><p>Slot is: |
|
</message_text> |
|
</message> |
</message> |
<choices variable="restricttosymb"> |
<choices variable="restricttosymb"> |
<choice nextstate="PROCTOR" computer='any'>usable for any resource.</choice> |
<choice nextstate="PROCTOR" computer='any'>usable for any resource.</choice> |
Line 164
|
Line 181
|
</defaultvalue> |
</defaultvalue> |
</choices> |
</choices> |
<message> |
<message> |
<message_text> |
</p><p>IP restrictions:<br /> |
</p><p>IP restrictions:<br /> |
|
</message_text> |
|
</message> |
</message> |
<string variable="ip" size="30"> |
<string variable="ip" size="30"> |
<validator> |
<validator> |
Line 176
|
Line 191
|
return &{$helper->{DATA}{origslot}}('ip'); |
return &{$helper->{DATA}{origslot}}('ip'); |
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message> <message_text> </p> </message_text> </message> |
<message> </p> </message> |
</state> |
</state> |
|
|
|
|
<state name="RESOURCESELECT" title="Specify Optional Attributes"> |
<state name="RESOURCESELECT" title="Specify Optional Attributes"> |
|
|
|
<nextstate>PROCTOR</nextstate> |
|
|
<resource variable="symb"> |
<resource variable="symb"> |
<filterfunc>return $res->is_problem()</filterfunc> |
<filterfunc>return $res->is_problem()</filterfunc> |
<valuefunc>return $res->symb()</valuefunc> |
<valuefunc>return $res->symb()</valuefunc> |
<nextstate>PROCTOR</nextstate> |
|
<defaultvalue> |
<defaultvalue> |
return &{$helper->{DATA}{origslot}}('symb'); |
return &{$helper->{DATA}{origslot}}('symb'); |
</defaultvalue> |
</defaultvalue> |
</resource> |
</resource> |
</state> |
</state> |
|
|
|
|
<state name="PROCTOR" title="Specify Proctors"> |
<state name="PROCTOR" title="Specify Proctors"> |
|
|
|
<nextstate>FINISH</nextstate> |
|
|
|
<condition> |
|
<clause>$helper->{'VARS'}{'type'} eq 'schedulable_student'</clause> |
|
<nextstate>RESTRICTUSER</nextstate> |
|
</condition> |
|
|
|
<choices variable="useproctor"> |
|
<choice computer='no'>No proctor checkin required for access.</choice> |
|
<choice computer='yes'>Require proctored access.</choice> |
|
<defaultvalue> |
|
my $default=&{$helper->{DATA}{origslot}}('proctor'); |
|
if ($default) { return 'yes'; } |
|
return 'no'; |
|
</defaultvalue> |
|
</choices> |
|
|
<student variable="proctor" multichoice="1" coursepersonnel="1" |
<student variable="proctor" multichoice="1" coursepersonnel="1" |
nextstate="FINISH" activeonly="1" emptyallowed="1"> |
activeonly="1" emptyallowed="1"> |
<defaultvalue> |
<defaultvalue> |
my @defaults; |
my @defaults; |
my $default=&{$helper->{DATA}{origslot}}('proctor'); |
my $default=&{$helper->{DATA}{origslot}}('proctor'); |
if ($default) { |
if ($default) { |
$default=~ tr/@/:/; |
|
@defaults=(split(',',$default)); |
@defaults=(split(',',$default)); |
} |
} |
return @defaults; |
return @defaults; |
</defaultvalue> |
</defaultvalue> |
</student> |
</student> |
</state> |
</state> |
|
|
|
|
|
<state name="RESTRICTUSER" title="Restrict slot availability"> |
|
<nextstate>FINISH</nextstate> |
|
<message> |
|
<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> |
|
</message> |
|
|
|
<message> |
|
Select sections to limit slot availability to: <br /> |
|
</message> |
|
<section variable="allowedsections" multichoice="1" allowempty="1"> |
|
<defaultvalue> |
|
return join('|||', |
|
split(',',&{$helper->{DATA}{origslot}}('allowedsections'))); |
|
</defaultvalue> |
|
</section> |
|
<message> |
|
Select users to limit slot availability to: <br /> |
|
</message> |
|
<student variable="allowedusers" multichoice="1" coursepersonnel="1" |
|
activeonly="1" emptyallowed="1"> |
|
<defaultvalue> |
|
return split(',',&{$helper->{DATA}{origslot}}('allowedusers')); |
|
</defaultvalue> |
|
</student> |
|
</state> |
|
|
|
|
<state name="FINISH" title="Creating/Modfying Slot"> |
<state name="FINISH" title="Creating/Modfying Slot"> |
<message> <message_text> Created Slot </message_text> </message> |
<message> Created Slot </message> |
<final> |
<final> |
<finalcode> |
<finalcode> |
my $result; |
my $result; |
if ($helper->{'STATE'} ne 'FINISH') { return; } |
if ($helper->{'STATE'} ne 'FINISH') { return; } |
my %slot; |
my %slot; |
|
|
foreach my $which ('type','starttime','endtime') { |
foreach my $which ('type','starttime','endtime') { |
$slot{$which} = $helper->{'VARS'}{$which}; |
$slot{$which} = $helper->{'VARS'}{$which}; |
} |
} |
foreach my $which ('ip','description','maxspace', |
|
'secret','symb') { |
foreach my $which ('ip','description','maxspace','secret','symb') { |
if ( $helper->{'VARS'}{$which} =~/\S/ ) { |
if ( $helper->{'VARS'}{$which} =~/\S/ ) { |
$slot{$which} = $helper->{'VARS'}{$which}; |
$slot{$which} = $helper->{'VARS'}{$which}; |
} |
} |
} |
} |
|
|
|
if ( $helper->{'VARS'}{'startreserve'} > 0) { |
|
$slot{'startreserve'} = $helper->{'VARS'}{'startreserve'}; |
|
} |
|
|
if ( $helper->{'VARS'}{'startunique'} > 0 && |
if ( $helper->{'VARS'}{'startunique'} > 0 && |
$helper->{'VARS'}{'endunique'} > 0 ) { |
$helper->{'VARS'}{'endunique'} > 0 ) { |
$slot{'uniqueperiod'} = [$helper->{'VARS'}{'startunique'}, |
$slot{'uniqueperiod'} = [$helper->{'VARS'}{'startunique'}, |
$helper->{'VARS'}{'endunique'}]; |
$helper->{'VARS'}{'endunique'}]; |
} |
} |
if ( $helper->{'VARS'}{'proctor'} =~/\S/ ) { |
|
|
if ( $helper->{'VARS'}{'useproctor'} eq 'yes' |
|
&& $helper->{'VARS'}{'proctor'} =~/\S/ ) { |
my @names; |
my @names; |
|
# just need the username/domain throw away the other data |
|
# that <student> returns |
foreach my $user (split(/\|\|\|/, $helper->{'VARS'}{'proctor'})) { |
foreach my $user (split(/\|\|\|/, $helper->{'VARS'}{'proctor'})) { |
my ($uname,$udomain)=split(/:/,$user); |
my ($uname,$udomain)=split(/:/,$user); |
push(@names,"$uname\@$udomain"); |
push(@names,"$uname:$udomain"); |
} |
} |
$slot{'proctor'}=join(',',@names); |
# make sure the usernmaes are unique |
|
my %proctors = map { ($_,1) } @names; |
|
$slot{'proctor'}=join(',',sort(keys(%proctors))); |
|
} |
|
|
|
if ( $helper->{'VARS'}{'allowedsections'} =~/\S/ ) { |
|
$slot{'allowedsections'}= |
|
join(',',sort(split(/\|\|\|/, |
|
$helper->{'VARS'}{'allowedsections'}))); |
} |
} |
|
|
|
if ( $helper->{'VARS'}{'allowedusers'} =~/\S/ ) { |
|
my @names; |
|
# just need the username/domain throw away the other data |
|
# that <student> returns |
|
foreach my $item (split(/\|\|\|/, |
|
$helper->{'VARS'}{'allowedusers'})) { |
|
my ($uname,$udomain)=split(/:/,$item); |
|
push(@names,"$uname:$udomain"); |
|
} |
|
|
|
# make sure the choices are unique |
|
my %users = map { ($_,1) } @names; |
|
$slot{'allowedusers'}=join(',',sort(keys(%users))); |
|
} |
|
|
my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
|
Line 243
|
Line 344
|
"\n".'<li> Type: '.$slot{'type'}.'</li>'; |
"\n".'<li> Type: '.$slot{'type'}.'</li>'; |
my %labels = |
my %labels = |
map {($_->[0],$_->[1])} &Apache::slotrequest::csvupload_fields(); |
map {($_->[0],$_->[1])} &Apache::slotrequest::csvupload_fields(); |
foreach my $which ('ip','description','maxspace','secret','symb') { |
foreach my $which ('ip','description','maxspace','secret','symb', |
|
'allowedsections','allowedusers') { |
if (exists($slot{$which})) { |
if (exists($slot{$which})) { |
$result.="\n".'<li> '.$labels{$which}.': '. |
$result.="\n".'<li> '.$labels{$which}.': '. |
&HTML::Entities::encode($slot{$which}).'</li>'; |
&HTML::Entities::encode($slot{$which}).'</li>'; |
} |
} |
} |
} |
|
if (exists($slot{'startreserve'})) { |
|
$result.="\n".'<li> '.$labels{'startreserve'}.': '. |
|
&Apache::lonlocal::locallocaltime($slot{'startreserve'}).'</li>'; |
|
} |
if (exists($slot{'proctor'})) { |
if (exists($slot{'proctor'})) { |
my $proctors = $slot{'proctor'}; |
my $proctors = $slot{'proctor'}; |
$proctors =~ s/,/, /g; |
$proctors =~ s/,/, /g; |