version 1.467, 2011/11/27 21:33:56
|
version 1.483, 2012/05/07 13:47:37
|
Line 464 returns 4
|
Line 464 returns 4
|
|
|
=item add_linkitem() |
=item add_linkitem() |
|
|
=item show_linkitems() |
=item show_linkitems_toolbar() |
|
|
=back |
=back |
|
|
Line 487 use DateTime();
|
Line 487 use DateTime();
|
|
|
# For debugging |
# For debugging |
|
|
use Data::Dumper; |
# use Data::Dumper; |
|
|
|
|
# symbolic constants |
# symbolic constants |
Line 542 my %colormap =
|
Line 542 my %colormap =
|
# is not yet done and due in less than 24 hours |
# is not yet done and due in less than 24 hours |
my $hurryUpColor = "#FF0000"; |
my $hurryUpColor = "#FF0000"; |
|
|
my $future_slots_checked = 0; |
|
my $future_slots = 0; |
|
|
|
sub addToFilter { |
sub addToFilter { |
my $hashIn = shift; |
my $hashIn = shift; |
my $addition = shift; |
my $addition = shift; |
Line 635 sub getDescription {
|
Line 632 sub getDescription {
|
return &mt('Reserved - next open [_1]', |
return &mt('Reserved - next open [_1]', |
timeToHumanString($slot_time,'start')); |
timeToHumanString($slot_time,'start')); |
} elsif ($slot_status == $res->RESERVABLE) { |
} elsif ($slot_status == $res->RESERVABLE) { |
return &mt('Reservable ending [_1]', |
return &mt('Reservable, reservations close [_1]', |
timeToHumanString($slot_time,'end')); |
timeToHumanString($slot_time,'end')); |
} elsif ($slot_status == $res->RESERVABLE_LATER) { |
} elsif ($slot_status == $res->RESERVABLE_LATER) { |
return &mt('Reservable starting [_1]', |
return &mt('Reservable, reservations open [_1]', |
timeToHumanString($slot_time,'start')); |
timeToHumanString($slot_time,'start')); |
} elsif ($slot_status == $res->NOT_IN_A_SLOT) { |
} elsif ($slot_status == $res->NOT_IN_A_SLOT) { |
return &mt('Reserve a time/place to work'); |
return &mt('Reserve a time/place to work'); |
Line 899 sub part_status_summary { return 4; }
|
Line 896 sub part_status_summary { return 4; }
|
sub render_resource { |
sub render_resource { |
my ($resource, $part, $params) = @_; |
my ($resource, $part, $params) = @_; |
|
|
|
my $editmapLink; |
my $nonLinkedText = ''; # stuff after resource title not in link |
my $nonLinkedText = ''; # stuff after resource title not in link |
|
|
my $link = $params->{"resourceLink"}; |
my $link = $params->{"resourceLink"}; |
Line 980 sub render_resource {
|
Line 978 sub render_resource {
|
$linkopen = ""; |
$linkopen = ""; |
$linkclose = ""; |
$linkclose = ""; |
} |
} |
|
if ((&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) && |
|
($resource->symb=~/\_\_\_[^\_]+\_\_\_uploaded/)) { |
|
my $icon = &Apache::loncommon::lonhttpdurl('/res/adm/pages').'/editmap.png'; |
|
$editmapLink=' '. |
|
'<a href="/adm/coursedocs?command=direct&symb='.&escape($resource->symb()).'">'. |
|
'<img src="'.$icon.'" alt="'.&mt('Edit Content').'" title="'.&mt('Edit Content').'" />'. |
|
'</a>'; |
|
} |
} |
} |
|
|
if ($resource->randomout()) { |
if ($resource->randomout()) { |
Line 1013 sub render_resource {
|
Line 1019 sub render_resource {
|
# Is this the current resource? |
# Is this the current resource? |
if (!$params->{'displayedHereMarker'} && |
if (!$params->{'displayedHereMarker'} && |
$resource->symb() eq $params->{'here'} ) { |
$resource->symb() eq $params->{'here'} ) { |
$curMarkerBegin = '<em>'; |
unless ($resource->is_map()) { |
$curMarkerEnd = '</em>'; |
$curMarkerBegin = '<span class="LC_current_nav_location">'; |
|
$curMarkerEnd = '</span>'; |
|
} |
$params->{'displayedHereMarker'} = 1; |
$params->{'displayedHereMarker'} = 1; |
} |
} |
|
|
Line 1033 sub render_resource {
|
Line 1041 sub render_resource {
|
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) { |
if (!$params->{'resource_nolink'} && !$resource->is_sequence() && !$resource->is_empty_sequence) { |
$result .= "$curMarkerBegin<a href=\"$link\">$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>"; |
$result .= "$curMarkerBegin<a href=\"$link\">$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>"; |
} else { |
} else { |
$result .= "$curMarkerBegin$linkopen$title$partLabel</a>$curMarkerEnd$nonLinkedText</td>"; |
$result .= "$curMarkerBegin$linkopen$title$partLabel</a>$curMarkerEnd$editmapLink$nonLinkedText</td>"; |
} |
} |
|
|
return $result; |
return $result; |
Line 1047 sub render_communication_status {
|
Line 1055 sub render_communication_status {
|
my $linkopen = "<a href=\"$link\">"; |
my $linkopen = "<a href=\"$link\">"; |
my $linkclose = "</a>"; |
my $linkclose = "</a>"; |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc"); |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonMisc"); |
|
|
if ($resource->hasDiscussion()) { |
if ($resource->hasDiscussion()) { |
$discussionHTML = $linkopen . |
$discussionHTML = $linkopen . |
'<img alt="'.&mt('New Discussion').'" src="'.$location.'/chat.gif" title="'.&mt('New Discussion').'"/>' . |
'<img alt="'.&mt('New Discussion').'" src="'.$location.'/chat.gif" title="'.&mt('New Discussion').'"/>' . |
Line 1389 sub render {
|
Line 1398 sub render {
|
} |
} |
} |
} |
|
|
|
|
# (re-)Locate the jump point, if any |
# (re-)Locate the jump point, if any |
# Note this does not take filtering or hidden into account... need |
# Note this does not take filtering or hidden into account... need |
# to be fixed? |
# to be fixed? |
Line 1456 sub render {
|
Line 1466 sub render {
|
$link .= '&register='.$env{'form.register'}; |
$link .= '&register='.$env{'form.register'}; |
} |
} |
if ($args->{'caller'} eq 'navmapsdisplay') { |
if ($args->{'caller'} eq 'navmapsdisplay') { |
&add_linkitem($args->{'linkitems'},'changefolder', |
unless ($args->{'notools'}) { |
"location.href='$link'",$text); |
&add_linkitem($args->{'linkitems'},'changefolder', |
|
"location.href='$link'",$text); |
|
} |
} else { |
} else { |
$result.= '<a href="'.$link.'">'.&mt($text).'</a>'; |
$result.= '<a href="'.$link.'">'.&mt($text).'</a>'; |
} |
} |
Line 1465 sub render {
|
Line 1477 sub render {
|
} |
} |
|
|
# Check for any unread discussions in all resources. |
# Check for any unread discussions in all resources. |
if ($args->{'caller'} eq 'navmapsdisplay') { |
if (($args->{'caller'} eq 'navmapsdisplay') && (!$args->{'notools'})) { |
&add_linkitem($args->{'linkitems'},'clearbubbles', |
&add_linkitem($args->{'linkitems'},'clearbubbles', |
'document.clearbubbles.submit()', |
'document.clearbubbles.submit()', |
'Mark all posts read'); |
'Mark all posts read'); |
Line 1498 END
|
Line 1510 END
|
} |
} |
$result.='</form>'; |
$result.='</form>'; |
} |
} |
|
if (($args->{'caller'} eq 'navmapsdisplay') && |
|
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($env{'course.'.$env{'request.course.id'}.'.url'} eq |
|
"uploaded/$cdom/$cnum/default.sequence") { |
|
&add_linkitem($args->{'linkitems'},'edittoplevel', |
|
"javascript:gocmd('/adm/coursedocs','editdocs');", |
|
'Content Editor'); |
|
} |
|
} |
|
|
if ($args->{'caller'} eq 'navmapsdisplay') { |
if ($args->{'caller'} eq 'navmapsdisplay') { |
$result .= '<table><tr><td>'. |
$result .= &show_linkitems_toolbar($args,$condition); |
&Apache::loncommon::help_open_menu('Navigation Screen','Navigation_Screen',undef,'RAT').'</td>'; |
|
$result .= '<td> </td>'; |
|
$result.='<td class="LC_middle">'.&mt('Tools:').'</td>'; |
|
$result.=&show_linkitems_toolbar($args->{'linkitems'}); |
|
if ($args->{'sort_html'}) { |
|
$result.='<td> </td><td> </td><td> </td>'. |
|
'<td align="right">'.$args->{'sort_html'}.'</td></tr>'; |
|
} |
|
$result .= '</table>'; |
|
} elsif ($args->{'sort_html'}) { |
} elsif ($args->{'sort_html'}) { |
$result.=$args->{'sort_html'}; |
$result.=$args->{'sort_html'}; |
} |
} |
Line 1641 END
|
Line 1655 END
|
$curRes = shift(@resources); |
$curRes = shift(@resources); |
} else { |
} else { |
$curRes = $it->next($closeAllPages); |
$curRes = $it->next($closeAllPages); |
|
|
} |
} |
if (!$curRes) { last; } |
if (!$curRes) { last; } |
|
|
Line 1846 sub add_linkitem {
|
Line 1861 sub add_linkitem {
|
} |
} |
|
|
sub show_linkitems_toolbar { |
sub show_linkitems_toolbar { |
my ($linkitems,$condition)=@_; |
my ($args,$condition) = @_; |
my @linkorder = ('firsthomework','everything','uncompleted', |
my $result; |
'changefolder','clearbubbles'); |
if (ref($args) eq 'HASH') { |
my $result .='<td align="left">'."\n". |
if (ref($args->{'linkitems'}) eq 'HASH') { |
'<span class="LC_nobreak">'."\n". |
my $numlinks = scalar(keys(%{$args->{'linkitems'}})); |
'<ul id="LC_toolbar">'; |
if ($numlinks > 1) { |
foreach my $link (@linkorder) { |
$result = '<td>'. |
my $link_id = 'LC_content_toolbar_'.$link; |
&Apache::loncommon::help_open_menu('Navigation Screen','Navigation_Screen', |
if (defined($linkitems->{$link})) { |
undef,'RAT'). |
if ($linkitems->{$link}{'text'} ne '') { |
'</td>'. |
$linkitems->{$link}{'cmd'}=~s/"/'/g; |
'<td> </td>'. |
if ($linkitems->{$link}{'cmd'}) { |
'<td class="LC_middle">'.&mt('Tools:').'</td>'; |
if ($link eq 'changefolder') { |
} |
if ($condition) { |
$result .= '<td align="left">'."\n". |
$link_id='LC_content_toolbar_changefolder_toggled'; |
'<span class="LC_nobreak">'."\n". |
} else { |
'<ul id="LC_toolbar">'; |
$link_id='LC_content_toolbar_changefolder'; |
my @linkorder = ('firsthomework','everything','uncompleted', |
|
'changefolder','clearbubbles','edittoplevel'); |
|
foreach my $link (@linkorder) { |
|
if (ref($args->{'linkitems'}{$link}) eq 'HASH') { |
|
if ($args->{'linkitems'}{$link}{'text'} ne '') { |
|
$args->{'linkitems'}{$link}{'cmd'}=~s/"/'/g; |
|
if ($args->{'linkitems'}{$link}{'cmd'}) { |
|
my $link_id = 'LC_content_toolbar_'.$link; |
|
if ($link eq 'changefolder') { |
|
if ($condition) { |
|
$link_id='LC_content_toolbar_changefolder_toggled'; |
|
} else { |
|
$link_id='LC_content_toolbar_changefolder'; |
|
} |
|
} |
|
$result .= '<li><a href="#" '. |
|
'onclick="'.$args->{'linkitems'}{$link}{'cmd'}.'" '. |
|
'id="'.$link_id.'" '. |
|
'class="LC_toolbarItem" '. |
|
'title="'.$args->{'linkitems'}{$link}{'text'}.'">'. |
|
'</a></li>'."\n"; |
} |
} |
} |
} |
$result .= '<li><a href="#" '. |
|
'onclick="'.$linkitems->{$link}{'cmd'}.'" '. |
|
'id="'.$link_id.'" '. |
|
'class="LC_toolbarItem" '. |
|
'title="'.$linkitems->{$link}{'text'}.'">'. |
|
'</a></li>'."\n"; |
|
} |
} |
} |
} |
|
$result .= '</ul>'. |
|
'</span></td>'; |
|
if (($numlinks==1) && (exists($args->{'linkitems'}{'edittoplevel'}))) { |
|
$result .= '<td><a href="'.$args->{'linkitems'}{'edittoplevel'}{'cmd'}.'">'. |
|
&mt('Content Editor').'</a></td>'; |
|
} |
|
} |
|
if ($args->{'sort_html'}) { |
|
$result .= '<td> </td><td> </td><td> </td>'. |
|
'<td align="right">'.$args->{'sort_html'}.'</td>'; |
} |
} |
} |
} |
$result .= '</ul>'. |
if ($result) { |
'</span></td>'."\n"; |
$result = "<table><tr>$result</tr></table>"; |
|
} |
return $result; |
return $result; |
} |
} |
|
|
|
|
1; |
1; |
|
|
|
|
Line 1987 sub new {
|
Line 2026 sub new {
|
# assume there are course hashes for the specific requested user@domamin: |
# assume there are course hashes for the specific requested user@domamin: |
# |
# |
|
|
if (($self->{USERNAME} eq $env{'user.name'}) && ($self->{DOMAIN} eq $env{'user.domain'})) { |
if ( ($self->{USERNAME} eq $env{'user.name'}) && ($self->{DOMAIN} eq $env{'user.domain'})) { |
|
|
# tie the nav hash |
# tie the nav hash |
|
|
Line 2012 sub new {
|
Line 2051 sub new {
|
} else { |
} else { |
$self->change_user($self->{USERNAME}, $self->{DOMAIN}); |
$self->change_user($self->{USERNAME}, $self->{DOMAIN}); |
} |
} |
|
|
|
my $d = Data::Dumper->new([$self]); |
|
|
return $self; |
return $self; |
} |
} |
|
|
Line 2047 sub change_user {
|
Line 2088 sub change_user {
|
&Apache::lonmap::loadmap($cnum, $cdom, $self->{USERNAME}, $self->{DOMAIN}, \%big_hash); |
&Apache::lonmap::loadmap($cnum, $cdom, $self->{USERNAME}, $self->{DOMAIN}, \%big_hash); |
$self->{NAV_HASH} = \%big_hash; |
$self->{NAV_HASH} = \%big_hash; |
|
|
|
|
|
|
# Now clear the parm cache and reconstruct the parm hash fromt he big_hash |
# Now clear the parm cache and reconstruct the parm hash fromt he big_hash |
# param.xxxx keys. |
# param.xxxx keys. |
|
|
Line 2062 sub change_user {
|
Line 2105 sub change_user {
|
} |
} |
|
|
$self->{PARM_HASH} = \%parm_hash; |
$self->{PARM_HASH} = \%parm_hash; |
|
|
|
|
|
|
|
|
Line 3054 sub new {
|
Line 3098 sub new {
|
if ($resourceCount == 1 && $resource->is_sequence() && !$self->{FORCE_TOP}) { |
if ($resourceCount == 1 && $resource->is_sequence() && !$self->{FORCE_TOP}) { |
my $firstResource = $resource->map_start(); |
my $firstResource = $resource->map_start(); |
my $finishResource = $resource->map_finish(); |
my $finishResource = $resource->map_finish(); |
return |
my $result; |
Apache::lonnavmaps::iterator->new($self->{NAV_MAP}, $firstResource, |
my $rdump = Data::Dumper->new([$result]); |
$finishResource, $self->{FILTER}, |
$result = Apache::lonnavmaps::iterator->new($self->{NAV_MAP}, $firstResource, |
$self->{ALREADY_SEEN}, |
$finishResource, $self->{FILTER}, |
$self->{CONDITION}, |
$self->{ALREADY_SEEN}, |
$self->{FORCE_TOP}); |
$self->{CONDITION}, |
|
$self->{FORCE_TOP}); |
|
return $result; |
|
|
|
|
} |
} |
|
|
Line 3079 sub new {
|
Line 3126 sub new {
|
$self->{ALREADY_SEEN}->{$self->{FIRST_RESOURCE}->{ID}} = 1; |
$self->{ALREADY_SEEN}->{$self->{FIRST_RESOURCE}->{ID}} = 1; |
|
|
bless ($self); |
bless ($self); |
|
my $selfDump = Data::Dumper->new([$self]); |
|
|
return $self; |
return $self; |
} |
} |
Line 3094 sub next {
|
Line 3142 sub next {
|
# do so. |
# do so. |
if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0}) { |
if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0}) { |
$self->{HAVE_RETURNED_0} = 1; |
$self->{HAVE_RETURNED_0} = 1; |
|
my $nextTopLevel = $self->{NAV_MAP}->getById('0.0'); |
|
|
return $self->{NAV_MAP}->getById('0.0'); |
return $self->{NAV_MAP}->getById('0.0'); |
} |
} |
if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0_BEGIN_MAP}) { |
if ($self->{RETURN_0} && !$self->{HAVE_RETURNED_0_BEGIN_MAP}) { |
Line 3113 sub next {
|
Line 3163 sub next {
|
if ($self->{RECURSIVE_DEPTH} == 0) { |
if ($self->{RECURSIVE_DEPTH} == 0) { |
$self->{RECURSIVE_ITERATOR_FLAG} = 0; |
$self->{RECURSIVE_ITERATOR_FLAG} = 0; |
} |
} |
|
|
return $next; |
return $next; |
} |
} |
|
|
if (defined($self->{FORCE_NEXT})) { |
if (defined($self->{FORCE_NEXT})) { |
my $tmp = $self->{FORCE_NEXT}; |
my $tmp = $self->{FORCE_NEXT}; |
$self->{FORCE_NEXT} = undef; |
$self->{FORCE_NEXT} = undef; |
|
|
return $tmp; |
return $tmp; |
} |
} |
|
|
Line 3189 sub next {
|
Line 3239 sub next {
|
# So we need to look at all the resources we can get to from here, |
# So we need to look at all the resources we can get to from here, |
# categorize them if we haven't seen them, remember if we have a new |
# categorize them if we haven't seen them, remember if we have a new |
my $nextUnfiltered = $here->getNext(); |
my $nextUnfiltered = $here->getNext(); |
|
|
|
|
my $maxDepthAdded = -1; |
my $maxDepthAdded = -1; |
|
|
for (@$nextUnfiltered) { |
for (@$nextUnfiltered) { |
Line 3222 sub next {
|
Line 3274 sub next {
|
$self->{RECURSIVE_ITERATOR_FLAG} = 1; |
$self->{RECURSIVE_ITERATOR_FLAG} = 1; |
my $firstResource = $self->{HERE}->map_start(); |
my $firstResource = $self->{HERE}->map_start(); |
my $finishResource = $self->{HERE}->map_finish(); |
my $finishResource = $self->{HERE}->map_finish(); |
|
|
$self->{RECURSIVE_ITERATOR} = |
$self->{RECURSIVE_ITERATOR} = |
Apache::lonnavmaps::iterator->new($self->{NAV_MAP}, $firstResource, |
Apache::lonnavmaps::iterator->new($self->{NAV_MAP}, $firstResource, |
$finishResource, $self->{FILTER}, |
$finishResource, $self->{FILTER}, |
Line 3240 sub next {
|
Line 3291 sub next {
|
return $self->next($closeAllPages); |
return $self->next($closeAllPages); |
} |
} |
|
|
|
my $hereResource = $self->{HERE}; |
|
|
return $self->{HERE}; |
return $self->{HERE}; |
|
|
} |
} |
Line 3406 sub next {
|
Line 3459 sub next {
|
my $nextUnfiltered; |
my $nextUnfiltered; |
if ($self->{DIRECTION} == FORWARD()) { |
if ($self->{DIRECTION} == FORWARD()) { |
$nextUnfiltered = $self->{HERE}->getNext(); |
$nextUnfiltered = $self->{HERE}->getNext(); |
|
|
} else { |
} else { |
$nextUnfiltered = $self->{HERE}->getPrevious(); |
$nextUnfiltered = $self->{HERE}->getPrevious(); |
} |
} |
Line 3560 sub new {
|
Line 3614 sub new {
|
$self->{NAV_MAP}->{RESOURCE_CACHE}->{$self->{ID}} = $self; |
$self->{NAV_MAP}->{RESOURCE_CACHE}->{$self->{ID}} = $self; |
$self->{RESOURCE_ERROR} = 0; |
$self->{RESOURCE_ERROR} = 0; |
|
|
|
$self->{DUEDATE_CACHE} = undef; |
|
|
# A hash that can be used by two-pass algorithms to store data |
# A hash that can be used by two-pass algorithms to store data |
# about this resource in. Not used by the resource object |
# about this resource in. Not used by the resource object |
# directly. |
# directly. |
Line 4096 sub printable {
|
Line 4152 sub printable {
|
|
|
# Get the print open/close dates for the resource. |
# Get the print open/close dates for the resource. |
|
|
my $start = $self->parmval("prinstartdate", $part); |
my $start = $self->parmval("printstartdate", $part); |
my $end = $self->parmval("printenddate", $part); |
my $end = $self->parmval("printenddate", $part); |
|
|
# The following cases apply: |
# The following cases apply: |
Line 4198 sub checkedin {
|
Line 4254 sub checkedin {
|
|
|
sub duedate { |
sub duedate { |
(my $self, my $part) = @_; |
(my $self, my $part) = @_; |
|
if (defined ($self->{DUEDATE_CACHE}->{$part})) { |
|
return $self->{DUEDATE_CACHE}->{$part}; |
|
} |
my $date; |
my $date; |
my @interval=$self->parmval("interval", $part); |
my @interval=$self->parmval("interval", $part); |
my $due_date=$self->parmval("duedate", $part); |
my $due_date=$self->parmval("duedate", $part); |
Line 4214 sub duedate {
|
Line 4273 sub duedate {
|
} else { |
} else { |
$date = $due_date; |
$date = $due_date; |
} |
} |
|
$self->{DUEDATE_CACHE}->{$part} = $date; |
return $date; |
return $date; |
} |
} |
sub handgrade { |
sub handgrade { |
Line 5065 sub status {
|
Line 5125 sub status {
|
} |
} |
|
|
# Otherwise, it's untried and open |
# Otherwise, it's untried and open |
return OPEN; |
return OPEN; |
} |
} |
|
|
sub check_for_slot { |
sub check_for_slot { |
my $self = shift; |
my $self = shift; |
my $part = shift; |
my $part = shift; |
|
my $symb = $self->symb(); |
my ($use_slots,$available,$availablestudent) = $self->slot_control($part); |
my ($use_slots,$available,$availablestudent) = $self->slot_control($part); |
if (($use_slots ne '') && ($use_slots !~ /^\s*no\s*$/i)) { |
if (($use_slots ne '') && ($use_slots !~ /^\s*no\s*$/i)) { |
my @slots = (split(/:/,$availablestudent),split(/:/,$available)); |
my @slots = (split(/:/,$availablestudent),split(/:/,$available)); |
Line 5078 sub check_for_slot {
|
Line 5139 sub check_for_slot {
|
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $now = time; |
my $now = time; |
|
my $num_usable_slots = 0; |
if (@slots > 0) { |
if (@slots > 0) { |
my %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum); |
my %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum); |
if (&Apache::lonnet::error(%slots)) { |
if (&Apache::lonnet::error(%slots)) { |
return (UNKNOWN); |
return (UNKNOWN); |
} |
} |
my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots); |
my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime'); |
my ($checkedin,$checkedinslot); |
my ($checkedin,$checkedinslot); |
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})); |
|
my $end = $slots{$slot_name}->{'endtime'}; |
my $end = $slots{$slot_name}->{'endtime'}; |
my $start = $slots{$slot_name}->{'starttime'}; |
my $start = $slots{$slot_name}->{'starttime'}; |
my $ip = $slots{$slot_name}->{'ip'}; |
my $ip = $slots{$slot_name}->{'ip'}; |
if ($self->simpleStatus() == OPEN) { |
if ($self->simpleStatus() == OPEN) { |
my $startreserve = $slots{$slot_name}->{'startreserve'}; |
|
my @proctors; |
|
if ($slots{$slot_name}->{'proctor'} ne '') { |
|
@proctors = split(',',$slots{$slot_name}->{'proctor'}); |
|
} |
|
if ($end > $now) { |
if ($end > $now) { |
($checkedin,$checkedinslot) = $self->checkedin(); |
if ($start > $now) { |
if ($startreserve < $now) { |
return (RESERVED_LATER,$start,$slot_name); |
if ($start > $now) { |
} else { |
return (RESERVED_LATER,$start,$slot_name); |
if ($ip ne '') { |
} else { |
if (!&Apache::loncommon::check_ip_acc($ip)) { |
if ($ip ne '') { |
return (RESERVED_LOCATION,$ip,$slot_name); |
if (!&Apache::loncommon::check_ip_acc($ip)) { |
|
return (RESERVED_LOCATION,$ip,$slot_name); |
|
} |
|
} |
|
if (@proctors > 0) { |
|
unless ((grep(/^\Q$checkedin\E/,@proctors)) && |
|
($checkedinslot eq $slot_name)) { |
|
return (NEEDS_CHECKIN,undef,$slot_name); |
|
} |
|
} |
} |
return (RESERVED,$end,$slot_name); |
|
} |
} |
} else { |
my @proctors; |
if ($start > $now) { |
if ($slots{$slot_name}->{'proctor'} ne '') { |
return (RESERVABLE,$startreserve,$slot_name); |
@proctors = split(',',$slots{$slot_name}->{'proctor'}); |
|
} |
|
if (@proctors > 0) { |
|
($checkedin,$checkedinslot) = $self->checkedin(); |
|
unless ((grep(/^\Q$checkedin\E/,@proctors)) && |
|
($checkedinslot eq $slot_name)) { |
|
return (NEEDS_CHECKIN,undef,$slot_name); |
|
} |
} |
} |
|
return (RESERVED,$end,$slot_name); |
} |
} |
} |
} |
|
} elsif ($end > $now) { |
|
$num_usable_slots ++; |
} |
} |
} |
} |
my ($is_correct,$got_grade); |
my ($is_correct,$got_grade); |
Line 5142 sub check_for_slot {
|
Line 5198 sub check_for_slot {
|
return (CORRECT); |
return (CORRECT); |
} |
} |
} |
} |
return(NOT_IN_A_SLOT); |
if ($num_usable_slots) { |
} else { |
|
if (!$future_slots_checked) { |
|
$future_slots = &get_future_slots($cdom,$cnum,$now); |
|
$future_slots_checked = 1; |
|
} |
|
if ($future_slots) { |
|
return(NOT_IN_A_SLOT); |
return(NOT_IN_A_SLOT); |
} |
} |
return(NOTRESERVABLE); |
|
} |
} |
} |
my $reservable = &Apache::lonnet::get_reservable_slots($cnum,$cdom,$env{'user.name'}, |
return; |
$env{'user.domain'}); |
} |
if (ref($reservable) eq 'HASH') { |
|
if ((ref($reservable->{'now_order'}) eq 'ARRAY') && (ref($reservable->{'now'}) eq 'HASH')) { |
sub get_future_slots { |
foreach my $slot (reverse (@{$reservable->{'now_order'}})) { |
my ($cdom,$cnum,$now) = @_; |
if (($reservable->{'now'}{$slot}{'symb'} eq '') || |
my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); |
($reservable->{'now'}{$slot}{'symb'} eq $symb)) { |
my $future_slots = 0; |
return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'}); |
foreach my $slot (keys(%slots)) { |
} |
if (($slots{$slot}->{'starttime'} > $now) && |
} |
($slots{$slot}->{'endtime'} > $now)) { |
} |
$future_slots ++; |
if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) { |
|
foreach my $slot (@{$reservable->{'future_order'}}) { |
|
if (($reservable->{'future'}{$slot}{'symb'} eq '') || |
|
($reservable->{'future'}{$slot}{'symb'} eq $symb)) { |
|
return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'}); |
|
} |
|
} |
|
} |
} |
} |
|
return(NOTRESERVABLE); |
} |
} |
return $future_slots; |
return; |
} |
} |
|
|
sub CLOSED { return 23; } |
sub CLOSED { return 23; } |