<helper title="Reset Access Times" requiredpriv="mgr">
<state name="START" title="Select Scope">
<message>
<message_text>Select </message_text>
</message>
<choices variable="harry">
<choice computer='1' nextstate="Student">Reset times on one or more folders/maps, resources or the course for a single student.</choice>
<choice computer='0' nextstate="Class">Reset times on a single folder/map, resource or the course for a section or the whole class.</choice>
</choices>
</state>
<state name="Student" title="Select Student">
<message nextstate="SelectAccess">
<message_text>Choose a student:<br /></message_text>
</message>
<student variable='stu1' coursepersonnel='true' activeonly='true' />
</state>
<state name="SelectAccess">
<message nextstate="ConfirmStu">
<message_text>This is a list of first access times and what was accessed, please select those you want deleted.</message_text>
</message>
<choices variable='delete' multichoice='true'>
<exec>
my ($uname,$udom,$sec,$fullname)=split(':',$helper->{'VARS'}{'stu1'});
my %times=&Apache::lonnet::dump('firstaccesstimes',$udom,$uname,
"^$env{'request.course.id'}\0");
foreach my $res (sort(keys(%times))) {
my (undef,$symb)=split("\0",$res);
my $escsymb=&Apache::lonnet::escape($symb);
my $title =
($symb ne 'course') ? &Apache::lonnet::gettitle($symb)
: $env{'course.'.$env{'request.course.id'}.'.description'};
my $time=&Apache::lonlocal::locallocaltime($times{$res});
my $description="<a href='/adm/navmaps?postsymb=".&Apache::lonnet::escape($symb)."'>$title</a> on $time";
push(@{$state->{CHOICES}},[$description,$escsymb]);
}
</exec>
</choices>
</state>
<state name="ConfirmStu">
<message nextstate="FinishStu">
<message_text>Will remove access times from user <ul></message_text>
</message>
<eval>
my ($uname,$udom,undef,$fullname)=split(':',$helper->{'VARS'}{'stu1'});
if (!$fullname) { $fullname="$uname\@$udom"; }
return '<li>'.$fullname.'</li>';
</eval>
<message><message_text></ul> for <ul></message_text></message>
<eval>
my $list;
my @symbs=split(/\|\|\|/,$helper->{'VARS'}{'delete'});
foreach my $escsymb (@symbs) {
my $symb=&Apache::lonnet::unescape($escsymb);
my $title =
($symb ne 'course') ? &Apache::lonnet::gettitle($symb)
: $env{'course.'.$env{'request.course.id'}.'.description'};
$list.='<li>'.$title.'</li>';
}
return $list;
</eval>
</state>
<state name="FinishStu" title="Processing">
<final>
<finalcode>
if ($helper->{'STATE'} ne 'FinishStu') { return; }
my $result;
my $courseid=$env{'request.course.id'};
my ($uname,$udom,$sec,$fullname)=split(':',$helper->{'VARS'}{'stu1'});
&Apache::lonnet::logthis($helper->{'VARS'}{'delete'});
my $needsdeval;
foreach my $escsymb (split(/\|\|\|/,$helper->{'VARS'}{'delete'})) {
my $symb=&Apache::lonnet::unescape($escsymb);
my $key = "$courseid\0$symb";
my $title =
($symb ne 'course') ? &Apache::lonnet::gettitle($symb)
: $env{'course.'.$courseid.'.description'};
my $res=&Apache::lonnet::del('firstaccesstimes',
[$key],$udom,$uname);
$result.="Removing access time from ".
$title.": ".$res.'</li><li>';
if ($res eq 'ok') {
if ($symb ne 'course') {
my $what = [];
my ($storeunder,@recurseup,$recursed);
my $mapp = &Apache::lonnet::deversion((
&Apache::lonnet::decode_symb($symb))[2]);
if ($symb =~ /\.(page|sequence)$/) {
$storeunder = $env{'request.course.id'}.'.'.$mapp.'___(all).0.interval';
$what = [$storeunder,'map'];
} else {
$storeunder = $env{'request.course.id'}.'.'.$symb.'.0.interval';
$what = [$storeunder,'resource'];
}
&Apache::lonnet::del('timerinterval',[$key],$udom,$uname);
my $userreply=&Apache::lonnet::resdata($uname,$udom,'user',$mapp,
\$recursed,\@recurseup,
$env{'request.course.id'},
'.','0.interval',($what));
if (ref($userreply) eq 'ARRAY') {
if ($userreply->[0] =~ /^\d+$/) {
if (($userreply->[1] eq 'map') || ($userreply->[1] eq 'resource')) {
my %storecontent=($storeunder => $userreply->[0],
$storeunder.'.type' => 'date_interval');
if (&Apache::lonnet::del
('resourcedata',[keys(%storecontent)],$udom,$uname) eq 'ok') {
&Apache::lonparmset::log_parmset(\%storecontent,1,$uname,$udom);
$needsdeval = 1;
}
}
}
}
}
}
}
if ($needsdeval) {
&Apache::lonnet::devalidateuserresdata($uname,$udom);
}
$result=~s/<li>$//;
return $result;
</finalcode>
<exitpage>/adm/flip?postdata=return:</exitpage>
</final>
</state>
<state name="Class">
<message nextstate="SelectMap">
</message>
<student variable='stu1' coursepersonnel='true' activeonly='true' multichoice='true' />
</state>
<state name="SelectMap" title="Select a folder/map">
<resource variable="res2" includecourse="true">
<filterfunc>return (($res->is_map() && $res->map_contains_problem())
||$res->is_problem() );</filterfunc>
<valuefunc>return $res->symb()</valuefunc>
<nextstate>ShowPlan</nextstate>
</resource>
</state>
<state name="ShowPlan" title="Processing">
<message nextstate="FINISH"><message_text>Will remove access times for <ul></message_text></message>
<eval>
return '<li>'.&Apache::lonnet::gettitle($helper->{'VARS'}{'res2'}).'</li>';
</eval>
<message><message_text></ul> from users <ul></message_text></message>
<eval>
my $list;
my @names=split(/\|\|\|/,$helper->{'VARS'}{'stu1'});
foreach my $name (@names) {
my ($uname,$udom,$sec,$fullname)=split(':',$name);
if (!$fullname) { $fullname="$uname\@$udom"; }
$list.='<li>'.$fullname.'</li>';
}
return $list;
</eval>
</state>
<state name="FINISH" title="Processing">
<final>
<finalcode>
if ($helper->{'STATE'} ne 'FINISH') { return; }
my $result;
my $symb=$helper->{'VARS'}{'res2'};
my $key=$env{'request.course.id'}."\0".$symb;
my @names=split(/\|\|\|/,$helper->{'VARS'}{'stu1'});
my $what = [];
my ($storeunder,@recurseup,$recursed);
my $mapp = &Apache::lonnet::deversion((
&Apache::lonnet::decode_symb($symb))[2]);
if ($symb =~ /\.(page|sequence)$/) {
$storeunder = $env{'request.course.id'}.'.'.$mapp.'___(all).0.interval';
$what = [$storeunder,'map'];
} else {
$storeunder = $env{'request.course.id'}.'.'.$symb.'.0.interval';
$what = [$storeunder,'resource'];
}
my %donedeval;
foreach my $name (@names) {
my ($uname,$udom,$sec,$fullname)=split(':',$name);
if (!$fullname) { $fullname="$uname\@$udom"; }
my %times=&Apache::lonnet::get('firstaccesstimes',
[$key],$udom,$uname);
if (!$times{$key}) {
$result.="No Access times found for student ".$fullname;
} else {
$result.="Removing access times ".
&Apache::lonlocal::locallocaltime($times{$key}).
" found for student ".$fullname.": ";
my $delres=&Apache::lonnet::del('firstaccesstimes',
[$key],$udom,$uname);
$result.=$delres;
if ($delres eq 'ok') {
&Apache::lonnet::del('timerinterval',
[$key],$udom,$uname);
my $userreply=&Apache::lonnet::resdata($uname,$udom,'user',$mapp,
\$recursed,\@recurseup,
$env{'request.course.id'},
'.','0.interval',($what));
if (ref($userreply) eq 'ARRAY') {
if ($userreply->[0] =~ /^\d+$/) {
if (($userreply->[1] eq 'map') || ($userreply->[1] eq 'resource')) {
my %storecontent=($storeunder => $userreply->[0],
$storeunder.'.type' => 'date_interval');
if (&Apache::lonnet::del
('resourcedata',[keys(%storecontent)],$udom,$uname) eq 'ok') {
&Apache::lonparmset::log_parmset(\%storecontent,1,$uname,$udom);
unless ($donedeval{$uname.':'.$udom}) {
&Apache::lonnet::devalidateuserresdata($uname,$udom);
$donedeval{$uname.':'.$udom} = 1;
}
}
}
}
}
}
}
$result.="</li>\n<li>";
}
$result=~s/<li>$//;
return $result;
</finalcode>
<exitpage>/adm/flip?postdata=return:</exitpage></final>
</state>
</helper>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>